Moin zusammen,
ich versuche folgendes: Mein Makro soll alle Ansichten in einer Zeichnung durchgehen und prüfen, ob es sich um die Darstellung einer Abwicklung handelt.
Mein Ansatz ist bisher folgender:
1. Die Ansicht aktivieren
2. Das referenzierte Modell aktivieren
3. Die Variable retval = ModelDoc2.GetBendState des referenzierten Teils auslesen. Wenn es sich um ein abgewickeltes Teil handelt, erhalte ich den Wert 3 zurück.
4. Mit nächster Ansicht fortfahren.
Die Rückgabe von GetBendState haut leider nicht so hin, wie erwartet. Ich hatte erwartet, dass ich für jede Ansicht den Status des jeweiligen Zustands (abgewickelt oder nicht) zurückbekomme. Stattdessen bekomme ich immer den Wert 3 zurück, anscheinend kommt dieser Wert, sobald das Teil eine Abwicklung enthält.
Auch ein Neuaufbau nach jeder Ansicht hilft nicht. Ich hänge mal den Code an. Hat jemand eine Idee, wie man sonst eine Abwicklung in einer Zeichnung erkennen kann?
Danke,
Piet
Private Sub ChangeConfigs() 'tauscht die Konfigurationen in den Ansichten
Dim nErrors As Long
Dim nWarnings As Long
Dim nDocType As Long
Dim lRet As Long
Dim bRet As Boolean
Dim Referenzdateiname As String
AbwicklungVorhanden = 0
Set view = Model.GetFirstView ' Dies ist das Blattformat
Set view = view.GetNextView ' Dies ist die erste Ansicht
Do While Not view Is Nothing
lRet = 0
' Name des referenzierten Modells holen / gets referenced model's name
Referenzdateiname = view.GetReferencedModelName
' Typ des referenzierten Docs anhand der Endung erkennen
If InStr(LCase(RefModelName), "sldprt") > 0 Then ' LCase wandelt string in Kleinbuchstaben um
nDocType = swDocPART ' InStr gibt die Position des Suchtextes zurück
ElseIf InStr(LCase(RefModelName), "sldasm") > 0 Then
nDocType = swDocASSEMBLY
ElseIf InStr(LCase(RefModelName), "slddrw") > 0 Then
nDocType = swDocDRAWING
Else
' Probably not a SolidWorks file...
nDocType = swDocNONE
MsgBox ("Referenzdatei kann nicht geöffnet werden")
Exit Sub
End If
' Referenziertes Modell zum aktiven Dokument machen / activates referenced model
Set Reference = swApp.OpenDoc6(Referenzdateiname, nDocType, swOpenDocOptions_Silent, "", nErrors, nWarnings)
lRet = Reference.GetBendState
If lRet = 3 Then
AbwicklungVorhanden = 1
Else
view.ReferencedConfiguration = frmKonfigErsetzen.cmbModelKonfigs.Text
End If
Set view = view.GetNextView
bRet = Reference.ForceRebuild3(False)
If bRet = False Then
MsgBox "Model-Rebuild hat nicht geklappt"
End If
Loop
End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP