Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  Ersatzteile hervorheben

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
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

Sehen Sie sich das Profil von Tim 1994 an!   Senden Sie eine Private Message an Tim 1994  Schreiben Sie einen Gästebucheintrag für Tim 1994

Beiträge: 2
Registriert: 22.01.2019

erstellt am: 24. Jan. 2019 12:11    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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



Sehen Sie sich das Profil von GDawg an!   Senden Sie eine Private Message an GDawg  Schreiben Sie einen Gästebucheintrag für GDawg

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Tim 1994 10 Unities + Antwort hilfreich

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 Explicit

Private 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

Sehen Sie sich das Profil von Tim 1994 an!   Senden Sie eine Private Message an Tim 1994  Schreiben Sie einen Gästebucheintrag für Tim 1994

Beiträge: 2
Registriert: 22.01.2019

erstellt am: 24. Jan. 2019 14:40    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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



Sehen Sie sich das Profil von GDawg an!   Senden Sie eine Private Message an GDawg  Schreiben Sie einen Gästebucheintrag für GDawg

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Tim 1994 10 Unities + Antwort hilfreich

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 Explicit

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
    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 >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2024 CAD.de | Impressum | Datenschutz