Alle Verknüpfungen über Makro löschen / SolidWorks
socke112 08. Jul. 2019, 17:06

Hallo,

von einem Lieferanten habe ich eine Baugruppe mit viele Baugruppen (hunderte), in denen die Verknüpfungen fehlerhaft sind.
Da die Baugruppen nur bei uns ins PDM-System eingepflegt werden müssen, ohne auf weitere Bearbeitung zu achten, schreibe ich gerade an einem Makro mit folgenden Funktionen:
- Alle Verknüpfungen pro Baugruppe löschen
- Alle Teile pro Baugruppe fixieren (das geht schon mal)

Wie kann ich alle Teile pro Baugruppe per Makro löschen?

Grüße, Socke

ConZept 08. Jul. 2019, 17:36

Hallo Socke,

die Verknüpfungen für eine Komponente bekommst du über GetMates von IComponent2.
Um die Verknüpfung zu löschen, musst du diese vorher Selektieren SelectByID2 von IModelExtension (hierfür brauchst du den Namen der Verknüpfung, daher im ersten Schritt den Namen der Verknüpfung auslesen) und anschließend mit EditDelete die Verknüpfung löschen.

Hier ist ein Beitrag im Englischsprachigen Forum. Vielleicht hilft dir das etwas weiter 

bk.sc 08. Jul. 2019, 18:11

Hallo Socke,

evtl. hilft dir das Beispiel aus der API Hilfe auch weiter Get Mates and Mate Entities Example (VBA).

Gruß
Bernd

socke112 10. Jul. 2019, 12:34

Hallo,

vielen Dank für die Antworten! Ich werde mal ein bisschen probieren....

Grüße, Socke 

socke112 10. Jul. 2019, 14:36

Hallo,
meine Versuche enden leider damit, dass ich immer einzeln das Löschen bestätigen muss. Drücke ich "nein", versucht das Makro die nächste Verknüpfung zu löschen, drücke ich "ja" dann endet das Makro.

Kann jemand helfen?

Option Explicit
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swFeat As SldWorks.Feature
Dim swMateFeat As SldWorks.Feature
Dim swSubFeat As SldWorks.Feature
Dim swMate As SldWorks.Mate2
Dim swComp As SldWorks.Component2
Dim swMateEnt(2) As SldWorks.MateEntity2
Dim fileName As String
Dim errors As Long
Dim warnings As Long
Dim i As Long
Dim boolstatus As Boolean
Dim counter As Integer

Sub main()
   
    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    counter = 0
    'Get the first feature in the assembly
    Set swFeat = swModel.FirstFeature
    'Iterate over features in FeatureManager design tree
    Do While Not swFeat Is Nothing
        If "MateGroup" = swFeat.GetTypeName Then
            Set swMateFeat = swFeat
            Exit Do
        End If
        Set swFeat = swFeat.GetNextFeature
    Loop
     
    'Get first mate, which is a subfeature
    Set swSubFeat = swMateFeat.GetFirstSubFeature
    Do While Not swSubFeat Is Nothing
     
      Set swMate = swSubFeat.GetSpecificFeature2
     
        If Not swMate Is Nothing Then
            boolstatus = swSubFeat.Select2(True, 0) 'Markiere Verknüpfung
            swModel.EditDelete
        End If
        ' Get the next mate in MateGroup
        Set swSubFeat = swSubFeat.GetNextSubFeature
        counter = counter + 1
    Loop
    MsgBox counter
End Sub

bk.sc 10. Jul. 2019, 16:42

Hallo socke,

quick and dirty swModel.EditDelete erst nach dem Loop ausführen, also wenn bereits alles markiert ist, da wenn du es im Loop machst nach Set swSubFeat = swSubFeat.GetNextSubFeature swSubFeat = Nothing wird, könnte evtl. daran liegen das du das Object swSubFeat von dem du GetNextSubFeature holen willst schon eleminiert hast.

Gruß
Bernd

ConZept 10. Jul. 2019, 19:06

Hallo Socke,

grade mal einen Blick auf die Methode EditDelete geworfen -> in den Remarks wird auf die Methode DeleteSelection2 verwiesen, wenn keine Aufforderung gewünscht ist.

bk.sc 11. Jul. 2019, 08:39

Hallo,

bei mir kommt keine Abfrage wenn ich EditDelete verwende, und habe hierzu auch keine Meldung in den Systemsteuerungen ausgeblendet.

Gruß
Bernd

socke112 11. Jul. 2019, 14:23

Hallo,

jetzt funktioniert's auch bei mir  Vielen Dank!

(Sobald ich den Code bereinigt habe, stelle ihn vor.... )

Eine Frage hätte ich noch.
Der Lieferant hat offenbar ständig mit irgendwelchen Dummies gearbeitet, die aber wohl in einem anderen Ordner lagen und nicht mitgeliefert worden sind. SolidWorks unterdrückt Dateien, die nicht gefunden werden. Beim Laden ins PDM-System wird dann ein Fehler ausgegeben und ich muss alle Baugruppen händisch durchgehen   

Wie kann ich prüfen, ob die (ggf. unterdrückte) Datei existiert und diese dann löschen?

Danke!

Grüße, Socke

bk.sc 11. Jul. 2019, 18:09

Hallo,

Zitat:
Wie kann ich prüfen, ob die (ggf. unterdrückte) Datei existiert und diese dann löschen?

du könntest analaog wie schon oben durch die Komponenten Traversieren und deren Status mit GetSuppression2 Method (IComponent2) abfragen.

Gruß
Bernd