Erstellen eines Makros für Layer

Hallo ihr alle
Ich habe noch nie ein Makro codiert und möchte es lernen, weil ich auf ein Problem stoße:

Derzeit suche ich nach einer " einfachen " Lösung, um Solidworks-Teile während des Zeichnens in einer Schicht zu platzieren (Im Moment besteht die einzige Möglichkeit in der Software darin, die Teile, die ich nicht möchte, auszublenden, dann die verbleibenden Teile nacheinander auszuwählen und sie dann einer Ebene zuzuweisen. Es genügt zu sagen, dass es mühsam ist).
Die andere Möglichkeit besteht darin, den Plan mit Farben zu exportieren und dann in der 2D-Software wie Autocad die Ebenen entsprechend den Farben zuzuweisen.
Kurz gesagt, eine Hölle... Ich durchstöbere alle Foren und Seiten auf Englisch und Französisch, aber ich kann nichts finden... Mir scheint jedoch, dass ich nicht der Einzige in dieser Sackgasse sein muss.

Kennen Sie bitte ein Makro, das in der Lage ist, Teile direkt mit Schichten zu verbinden? (Nämlich, dass meine Baugruppen mit allen gleichen Teilen und wenigen Teilen gleich sind. Aber bei einem Start von 200 Baugruppen kann es einige Zeit dauern, jedes Teil zu sortieren).

Andernfalls, wissen Sie, wo ich im Netz die Grundlagen zum Codieren in VBA lernen kann? Denn ich denke, dass es die einzig mögliche Lösung sein wird.

Vielen Dank im Voraus
Herzliche Grüße
Axel

Hallo;

Seien Sie vorsichtig, Solidworks verwaltet Layer nicht so, wie es Autocad tun würde...
Es ist möglich, eine Projektionsdatei für die Aufzeichnung von Zeichnungen in DWG und DXF zu erstellen (Datei > als DWG/DXF speichern, dann " Option ")

image

Deaktivieren Sie → die Option " Projektion nicht bei jeder Aufnahme anzeigen", um auf die Einstellungen zuzugreifen und Folgendes anzupassen: (Beispiel)


https://help.solidworks.com/2022/french/Solidworks/slddxf/t_map_entities_on_export_to_dwg.htm?rid=131218

Insgesamt verarbeitet Solidworks jedoch nur Strichtypen (und einige Strichfarben), aber keine 3D-Komponenten...

In Bezug auf Makros finden Sie hier einige Websites, auf denen Sie sich mit der VB-Programmierung vertraut machen können...

und allgemeiner (Excel-orientiertes VBA, aber immer noch nützlich):

und Solidworks API-Hilfsprogramme.

Hinweis: Zunächst einmal empfehle ich keine automatische Makroaufzeichnung und generative künstliche Intelligenz (obwohl bei einigen " KIs " einige Fortschritte zu verzeichnen sind...)

Und natürlich dieses Forum...

Herzliche Grüße.

3 „Gefällt mir“

Vielen Dank für die Antwort :slight_smile:
Ich kenne zwar auch die Exportmethode, aber es ist nicht genau das, wonach ich suche.
Ich habe es geschafft, manuell eine Ebene auf ein Teil oder eine ganze Komponente zu legen, also sage ich mir, dass es automatisiert werden kann, es ist mehr in diese Richtung, die ich blockiere.
Danke für die Links :slight_smile: Ich habe das Gefühl, dass das Gehirn ein wenig rauchen wird

Wie viel einfacher wäre es, das Ändern der Schicht einer Komponente mit einem Makro zu "automatisieren "?
Wenn die fragliche(n) Komponente(n) nicht noch die gleichen sind (Bibliothekskomponenten?), müssen Sie immer die " Auswahlphase " des Teils oder der Baugruppe durchlaufen und dann wahrscheinlich die Auswahl der Ebene, in die sie exportiert werden sollen...
Hinweis: Achten Sie darauf, dass Sie Strichstil, Schriftart und Ebenen nicht verwechseln...

2 „Gefällt mir“

Hier ist ein Beispiel für die Verwendung der Solidworks APIs:
https://help.solidworks.com/2022/english/api/sldworksapi/Put_Assembly_Components_in_Drawing_View_on_Different_Layers_Example_VB.htm?verRedirect=1

… Der API-Hilfecode mit einigen zusätzlichen Kommentaren:

Option Explicit

' Cette sous-procédure modifie le calque d'un composant dans un document de dessin SolidWorks
Private Sub ChangeComponentLayer(swApp As SldWorks.SldWorks, swDraw As SldWorks.DrawingDoc, swDrawComp As SldWorks.DrawingComponent, sLayerName As String)

    Dim bRet As Boolean

    ' Former un nom de calque valide en remplaçant les symboles 
    ' barre oblique (/) et arobase (@) par des traits de soulignement (_)
    sLayerName = Replace(sLayerName, "/", "_")
    sLayerName = Replace(sLayerName, "@", "_")

    ' Créer un calque avec le nom formé et ajouter une assertion de débogage
    bRet = swDraw.CreateLayer(sLayerName, "layer for " & sLayerName, 0, swLineCONTINUOUS, swLW_NORMAL, True): Debug.Assert bRet
    
    ' Définir le calque du composant de dessin sur le nouveau calque
    swDrawComp.Layer = sLayerName

End Sub

' Cette sous-procédure traite un composant de dessin, modifie son calque, 
' et traite récursivement tous ses composants enfants
Sub ProcessDrawingComponent(swApp As SldWorks.SldWorks, swDraw As SldWorks.DrawingDoc, swDrawComp As SldWorks.DrawingComponent, sPadStr As String)

    Dim vDrawCompChildArr As Variant
    Dim vDrawCompChild As Variant
    Dim swDrawCompChild As SldWorks.DrawingComponent

    ' Afficher le nom du composant dans la fenêtre de débogage
    Debug.Print sPadStr & swDrawComp.Name
    
    ' Changer le calque du composant actuel
    ChangeComponentLayer swApp, swDraw, swDrawComp, swDrawComp.Name

    ' Obtenir tous les composants enfants du composant actuel
    vDrawCompChildArr = swDrawComp.GetChildren
    
    ' Vérifier s'il y a des enfants et les traiter récursivement
    If Not IsEmpty(vDrawCompChildArr) Then
        For Each vDrawCompChild In vDrawCompChildArr
            Set swDrawCompChild = vDrawCompChild
            ' Appel récursif pour traiter chaque composant enfant
            ProcessDrawingComponent swApp, swDraw, swDrawCompChild, sPadStr + "  "
        Next
    End If

End Sub

' Cette procédure principale initialise les objets SolidWorks nécessaires 
' et commence à traiter les composants de dessin sélectionnés
Sub main()

    Dim swApp As SldWorks.SldWorks
    Dim swModel As SldWorks.ModelDoc2
    Dim swDraw As SldWorks.DrawingDoc
    Dim swSelMgr As SldWorks.SelectionMgr
    Dim swView As SldWorks.View
    Dim swDrawComp As SldWorks.DrawingComponent
    Dim bRet As Boolean

    ' Obtenir l'instance active de SolidWorks
    Set swApp = Application.SldWorks
    
    ' Obtenir le document actif (qui devrait être un dessin)
    Set swModel = swApp.ActiveDoc
    Set swDraw = swModel
    
    ' Obtenir le gestionnaire de sélection et la vue sélectionnée
    Set swSelMgr = swModel.SelectionManager
    Set swView = swSelMgr.GetSelectedObject6(1, -1)
    
    ' Obtenir le composant de dessin racine de la vue sélectionnée
    Set swDrawComp = swView.RootDrawingComponent

    ' Afficher le nom du fichier et la vue sélectionnée dans la fenêtre de débogage
    Debug.Print "File = " & swModel.GetPathName
    Debug.Print "  " & swView.Name & "  [" & swView.Type & "]"

    ' Commencer le traitement du composant de dessin racine
    ProcessDrawingComponent swApp, swDraw, swDrawComp, "    "

End Sub

Und einige Erklärungen zu den verschiedenen Vorgehensweisen:

  • Unterprozedur ChangeComponentLayer :
  • Transformieren Sie den Layer-Namen, um ungültige Zeichen und das Erstellen des Layers im Zeichnungsdokument zu vermeiden.
  • Unterprozedur ProcessDrawingComponent :
  • Rekursive Verarbeitung von Zeichnungskomponenten und Layerwechsel für jede Komponente sowie Anzeige von Debugging-Informationen.
  • Ausgangsverfahren main :
  • Initialisieren Sie die erforderlichen SolidWorks Objekte, wählen Sie die Ansicht und die Komponenten aus und starten Sie den Komponentenverarbeitungsprozess.
3 „Gefällt mir“

… und ein kleines Tutorial für die Ausführung dieses Makros auf einer Solidworks-Zeichnung...
Seien Sie vorsichtig, auf einer Kopie eines Europaabgeordneten... Sie testen niemals ein Makro mit den Originaldateien, auf die Gefahr hin, alles zu verlieren... (Es ist selten, dass Sie mit einem MACRO zurückkehren können).

Schritt 1: Vorbereiten der Umgebung

  1. Öffnen Sie SolidWorks
    Starten Sie SolidWorks und öffnen Sie ein Zeichnungsdokument (Drawing), das Sie mit dem Makro verarbeiten möchten.
  2. Überprüfen von Komponenten und Ansichten
    Stellen Sie sicher, dass die Zeichnung Komponenten und Ansichten enthält, die Sie bearbeiten möchten. Das Makro wirkt sich auf die Zeichnungskomponenten und ihre Layer aus (layers).

Schritt 2: Greifen Sie auf den VBA-Makro-Editor zu

  1. Öffnen Sie den Makro-Editor
    Wechseln Sie in SolidWorks zum Menü Extras > Makro > Neu , um ein neues Makro zu erstellen, oder Ausführen , um ein vorhandenes Makro zu öffnen.
  2. Erstellen eines neuen Makros
  • Wenn Sie sich dafür entscheiden, ein neues Makro zu erstellen, werden Sie von SolidWorks aufgefordert, die Datei mit einer .swp.
  • Geben Sie dem Makro einen Namen, z. B ChangeLayerMacro.swp. , und speichern Sie es an einem leicht zugänglichen Ort.

Schritt 3: Kopieren von VBA-Code in den Editor

  1. Öffnen Sie den VBA-Editor (Visual Basic für Applikationen)
    Sobald die Makrodatei erstellt wurde, öffnet SolidWorks den VBA-Editor.
  2. VBA-Code einfügen
  • Kopieren Sie den VBA-Code (oben angegeben) in den VBA-Editor.
  • Fügen Sie es in das leere Makromodul ein, das automatisch erstellt wurde.
  • Stellen Sie sicher, dass der gesamte Code korrekt eingefügt wird, einschließlich der Deklarationen und aller Unterprozeduren Option Explicit .

Schritt 4: Speichern und Schließen des VBA-Editors

  • Klicken Sie auf Datei > Speichern oder verwenden Sie die Tastenkombination Ctrl + S, um das Makro zu speichern.
  • Schließen Sie den VBA-Editor, sobald das Makro gespeichert wurde.

Schritt 5: Ausführen des Makros in SolidWorks

  1. Auswählen einer Ansicht in der Zeichnung
    Stellen Sie vor dem Ausführen des Makros sicher, dass Sie eine Zeichnungsansicht im aktuellen Dokument auswählen, da das Makro davon ausgeht, dass Sie eine Ansicht ausgewählt haben, um seine Komponenten zu verarbeiten.
  2. Ausführen des Makros
    Kehren Sie zum Menü Extras zurück > Makro > Ausführen.
  • Durchsuchen Sie Ihre Dateien und wählen Sie das Makro .swp aus, das Sie zuvor gespeichert haben.
  • Klicken Sie auf Öffnen , um das Makro auszuführen.

Hinweis: Ich persönlich bevorzuge es, das Makro direkt aus dem VBA-Editor im Schritt-für-Schritt-Modus (F8) zu starten und die Aktionen und Ergebnisse im Ausführungsfenster des Editors zu analysieren, während ich das Fenster für lokale Variablen im Auge behalte

Schritt 6: Überprüfen Sie die Ergebnisse

  • Nachdem das Makro ausgeführt wurde, zeigt das Direktfenster im VBA-Editor (falls geöffnet) oder in der SolidWorks Ausgabekonsole die Ergebnisse des Makros an, einschließlich der Namen der verarbeiteten Komponenten und ihrer neuen Layer.
  • Überprüfen Sie in der SolidWorks Zeichnung, ob die Komponenten wie erwartet in die neuen Layer verschoben wurden.

Zu überprüfende und zu behebende Punkte

  • Versionskompatibilität : Stellen Sie sicher, dass Ihre Version von SolidWorks die Ausführung von VBA-Makros unterstützt. Je nach Version können einige Einschränkungen gelten.
  • Makrosicherheit : Wenn SolidWorks eine Makro-Sicherheitswarnung anzeigt, stellen Sie sicher, dass Sie die Makro-Sicherheitseinstellungen so eingestellt haben, dass die Ausführung zugelassen ist.
  • Fehlermeldungen : Wenn Fehler auftreten, stellen Sie sicher, dass Sie eine gültige Ansicht ausgewählt haben und dass die Zeichnung ordnungsgemäß mit Komponenten konfiguriert ist.

Zusammenfassung

Wenn Sie diese Schritte ausführen, können Sie das VBA-Makro verwenden, um die Ebenen von Komponenten in einer SolidWorks Zeichnung auf automatisierte und effiziente Weise zu ändern. Dieses Makro ist besonders nützlich für die Organisation komplexer Zeichnungen mit mehreren Komponenten, indem Layer basierend auf Komponentennamen automatisch erstellt und zugewiesen werden.

4 „Gefällt mir“

Vielen Dank für diese Elemente, es ist sehr nett.
Also habe ich tatsächlich dieses Makro ausprobiert (das ursprüngliche auf der Website, nicht das, das Sie kopiert haben). Die Sache ist die, dass es eine Schichtlinie pro Stück erstellt. So habe ich am Ende viele Schichten, was unbequem und unbrauchbar ist, aber es ist schon ein Anfang.

In Ihrer vorherigen Frage, was mit Automatisierung einfacher wäre, geht es darum, dass ich am Ende tatsächlich die gleichen Teile x-mal wiederholt habe. Sie können also genauso gut alles mit einem Makro gruppieren, anstatt diese Elemente manuell auszuwählen und dann in den jeweiligen Ebenen zu platzieren.

In der Tat muss ich ein CAPM einrichten, aber die derzeitige Praxis des Unternehmens beibehalten, 2D-Ebenen für Kundenexporte (archi oder BE) zu verwenden. Und das Ziel ist es, unnötige Zeit nicht zu verschwenden, die meine Kollegen abschreckt, wenn ich das Projekt an alle liefere.
Derzeit verwende ich die Swood-Software auf Solidworks, und es gibt keine Sorgen um die Codierung, es ist sehr einfach, auch bei komplexen Komponenten.
Aber die Zeichnung muss auch für meine Kollegen leicht zugänglich sein.

Ich werde weiter an dem Thema mit euren Elementen arbeiten!!
Nochmals vielen Dank für Ihre Zeit, es ist super schön
Schönen Tag

Andernfalls gibt es dieses Dienstprogramm in der MyCADTools Suite bei Visiativ, wenn Sie Probleme bei der Entwicklung Ihres Makros haben:

Schließlich können Sie es in einer Testversion testen, um zu sehen, ob Sie das bekommen, was Sie wollen.
Insbesondere ist es möglich, ein Teil entsprechend einer Eigenschaft auf eine bestimmte Ebene zu verschieben:
image

3 „Gefällt mir“

:slight_smile: Hallo Vielen Dank, ich werde versuchen zu sehen, wie es läuft!! Das scheint die Idee zu sein. Danke für den Tipp:wink:

1 „Gefällt mir“