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.
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 ")
Deaktivieren Sie → die Option " Projektion nicht bei jeder Aufnahme anzeigen", um auf die Einstellungen zuzugreifen und Folgendes anzupassen: (Beispiel)
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...)
Vielen Dank für die Antwort 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 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...
… 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.
… 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
Öffnen Sie SolidWorks Starten Sie SolidWorks und öffnen Sie ein Zeichnungsdokument (Drawing), das Sie mit dem Makro verarbeiten möchten.
Ü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
Ö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.
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
Öffnen Sie den VBA-Editor (Visual Basic für Applikationen) Sobald die Makrodatei erstellt wurde, öffnet SolidWorks den VBA-Editor.
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
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.
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
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.
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: