| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS | | | | CAD/CAM-Workshop in Suhl-Friedberg: SolidCAM + SOLIDWORKS |
Autor
|
Thema: Ersatzteile hervorheben (845 mal gelesen)
|
Tim 1994 Mitglied Student Maschienenbau
Beiträge: 2 Registriert: 22.01.2019
|
erstellt am: 24. Jan. 2019 12:11 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, Ich würde gerne aus einer Fertigungszeichnung eine Ersatzteilzeichung erzeugen ich habe schon ein Makro das mir die Stückliste auf die Ersatzteile reduziert und die restlichen Positionsnummern löscht. Jetzt möchte ich ein neues Makro schreiben das mir die verdeckten Kanten der Bauteile aus der Stückliste hervorhebt und die Komponentenlienen auf das Ersatzteil Layer ändert. Da ich noch sehr unerfahren im erstellen von Makros bin, würde ich mich um ein wenig Hilfe freuen. Ich habe bereits die Suche verwendet, aber leider kein passendes Thema gefunden. Danke schon mal im voraus! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
GDawg Ehrenmitglied V.I.P. h.c. Teamleiter FEM Simulation
Beiträge: 2622 Registriert: 12.07.2004 SolidWorks_2o2o SP3.o Win10_x64, Quadro_P2ooo. VisualStudio_2o19_Pro. FEM: Forge_NxT_HPC, ANSYS_WB. 3D-Printer: Ultimaker_2, Tinker_Gnome.
|
erstellt am: 24. Jan. 2019 13:34 <-- editieren / zitieren --> Unities abgeben: Nur für Tim 1994
In der SolidWorks API Hilfe kannst Du folgendes finden: (Bitte entschuldige, ich bin davon ausgegangen, dass du das alles VBA machst.) Put Assembly Components in Drawing View on Different Layers Example (VBA) This example shows how to put all assembly components in a drawing view on different layers.
Code:
'------------------------------------------------------------ ' Preconditions: ' 1. Open a drawing document of an assembly with multiple ' components. ' 2. Select a drawing view. ' 3. Open the Immediate window. ' ' Postconditions: ' 1. Creates a new drawing layer for each assembly component. ' 2. Puts each component on its own layer. ' 3. To verify, right-click the drawing view selected in ' Preconditions step 2 and click Change Layer > down-arrow ' button on the Change document layer dialog. ' 4. Examine the Immediate window. ' ' NOTE: Illegal characters are replaced with legal characters ' when creating a new drawing layer. '------------------------------------------------------------- Option ExplicitPrivate Sub ChangeComponentLayer(swApp As SldWorks.SldWorks, swDraw As SldWorks.DrawingDoc, swDrawComp As SldWorks.DrawingComponent, sLayerName As String) Dim bRet As Boolean ' Form a legal layer name by replacing backslash '(/) and at sign (@) symbols with underscores sLayerName = Replace(sLayerName, "/", "_") sLayerName = Replace(sLayerName, "@", "_") bRet = swDraw.CreateLayer(sLayerName, "layer for " & sLayerName, 0, swLineCONTINUOUS, swLW_NORMAL, True): Debug.Assert bRet swDrawComp.Layer = sLayerName End Sub 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 Debug.Print sPadStr & swDrawComp.Name ChangeComponentLayer swApp, swDraw, swDrawComp, swDrawComp.Name vDrawCompChildArr = swDrawComp.GetChildren If Not IsEmpty(vDrawCompChildArr) Then For Each vDrawCompChild In vDrawCompChildArr Set swDrawCompChild = vDrawCompChild ''''' ' hier, deine Bauteil `swDrawCompChild` erkennen: ' z.B. über ein Benutzerdefinierte Eigenschaft oder anhand des Namens... ' dann nur noch swDrawComp.Layer = "Ersatzteile" ' ProcessDrawingComponent() brauchst du eigentlich nur für CreateLayer(). '''''' ProcessDrawingComponent swApp, swDraw, swDrawCompChild, sPadStr + " " Next End If End Sub 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 Set swApp = Application.SldWorks Set swModel = swApp.ActiveDoc Set swDraw = swModel Set swSelMgr = swModel.SelectionManager Set swView = swSelMgr.GetSelectedObject6(1, -1) Set swDrawComp = swView.RootDrawingComponent Debug.Print "File = " & swModel.GetPathName Debug.Print " " & swView.Name & " [" & swView.Type & "]" ProcessDrawingComponent swApp, swDraw, swDrawComp, " " End Sub
Anstelle, dass jede Komponente auf den eigenen Layer gelegt wird, brauchst du ja nur einen Layer. Dann musst du nur noch herausfinden, welche deine Ersatzteile `ProcessDrawingComponent()` sind und diese dann "verschieben" Code: swDrawComp.Layer = "Ersatzteile"
. Die Liniendefinition machst du dann auf dem Layer selbst. Siehe dazu in der API-Hilfe unter Code: CreateLayer2 Method (IDrawingDoc)
nach. ------------------ while(!asleep()) { sheep++; } Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Tim 1994 Mitglied Student Maschienenbau
Beiträge: 2 Registriert: 22.01.2019
|
erstellt am: 24. Jan. 2019 14:40 <-- editieren / zitieren --> Unities abgeben:
Danke für die schnelle Antwort, leider hilft mir das nicht weiter, da der Befehl swDrawComp.Layer bei der ganzen Baugruppe das Layer ändert. Die Liniendefinition funktioniert leider auch nicht, da das Bauteil dann immer noch von anderen Bauteilen verdeckt ist. Ich möchte aber nur das Layer von Bauteilen in der Zeichnung ändern. Händisch funktioniert das unter "Komponentenlinien..." dann kann ich vom Dokumentenvorgabe abweichen und dort das Layer ändern. Unter Einblenden/Ausblenden -> kann ich dann "Verdeckte Kanten anzeigen" auswählen. Ich habe es probiert, mir diese Schritte als Makro aufzeichnen zulassen, damit ich die Befehle mir aus der Aufzeichnung rauskopieren kann. Leider Zeichnet er diese nicht auf. Danke für den Hinweis auf die API Hilfe Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
GDawg Ehrenmitglied V.I.P. h.c. Teamleiter FEM Simulation
Beiträge: 2622 Registriert: 12.07.2004 SolidWorks_2o2o SP3.o Win10_x64, Quadro_P2ooo. VisualStudio_2o19_Pro. FEM: Forge_NxT_HPC, ANSYS_WB. 3D-Printer: Ultimaker_2, Tinker_Gnome.
|
erstellt am: 24. Jan. 2019 15:19 <-- editieren / zitieren --> Unities abgeben: Nur für Tim 1994
Hmmm ..... komisch! Ich liess dies hier auf meiner Zeichnung laufen und alle Komponenten, welche "druck" im Namen hatten, wurden auf den Layer "Druckbolzen" gelegt: (ACHTUNG: in dem Beispiel MUSS eine Ansicht ausgewählt werden!) Code:
'------------------------------------------------------------ ' Preconditions: ' 1. Open a drawing document of an assembly with multiple ' components. ' ACHTUNG ====>> 2. Select a drawing view. ' 3. Open the Immediate window. ' ' Postconditions: ' 1. Creates a new drawing layer for each assembly component. ' 2. Puts each component on its own layer. ' 3. To verify, right-click the drawing view selected in ' Preconditions step 2 and click Change Layer > down-arrow ' button on the Change document layer dialog. ' 4. Examine the Immediate window. ' ' NOTE: Illegal characters are replaced with legal characters ' when creating a new drawing layer. '------------------------------------------------------------- Option ExplicitSub 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 Debug.Print sPadStr & swDrawComp.Name vDrawCompChildArr = swDrawComp.GetChildren If Not IsEmpty(vDrawCompChildArr) Then For Each vDrawCompChild In vDrawCompChildArr Set swDrawCompChild = vDrawCompChild ' nur gewisse Components verschieben If InStr(LCase(swDrawCompChild.Name), "druck") Then swDrawCompChild.Layer = "Druckbolzen" End If ProcessDrawingComponent swApp, swDraw, swDrawCompChild, sPadStr + " " Next End If End Sub 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 Set swApp = Application.SldWorks Set swModel = swApp.ActiveDoc Set swDraw = swModel Set swSelMgr = swModel.SelectionManager Set swView = swSelMgr.GetSelectedObject6(1, -1) Set swDrawComp = swView.RootDrawingComponent Debug.Print "File = " & swModel.GetPathName Debug.Print " " & swView.Name & " [" & swView.Type & "]" ProcessDrawingComponent swApp, swDraw, swDrawComp, " " End Sub
------------------ while(!asleep()) { sheep++; } Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|