Hallo ihr alle
Kennt jemand ein Makro, um die Fixierleiste für alle Teile einer Baugruppe zu bedienen (siehe alle Teile verschiedener Unterbaugruppen, wenn möglich)?
Ich suche, kann es aber nicht finden...
Vielen Dank!
Hallo ihr alle
Kennt jemand ein Makro, um die Fixierleiste für alle Teile einer Baugruppe zu bedienen (siehe alle Teile verschiedener Unterbaugruppen, wenn möglich)?
Ich suche, kann es aber nicht finden...
Vielen Dank!
Ich habe dieses Makro gefunden, das nicht immer funktioniert, hatte aber keine Zeit, tiefer zu graben:
' MODULE: FREEZE PARTS
' PROGRAMMER: DMITRY ZAMOSHNIKOV
' DATE: 11/13/2013
' PURPOSE:
' GO THROUGH AN ASSEMBLY AND FREEZE EVERY PART IN THE ASSEMBLY.
' FUNCTION: FREEZE_ALL
' IN: NONE
' OUT: ALL PARTS==FROZEN?
'
Dim swdoc As SldWorks.ModelDoc2
Dim swAllDocs As EnumDocuments2
Dim FirstDoc As SldWorks.ModelDoc2
Dim boolstatus As Boolean
Dim NumDocsReturned As Long
Dim DocCount As Long
Dim swapp As SldWorks.SldWorks
Dim longstatus As Long
Dim part As Object
' FREEZE_ALL
' WHILE (PARTS IN ASSEMBLY NOT FROZEN > 0 )
' OPEN PART
' FREEZE PART
' SAVE PART
' CLOSE PART
' WEND
Public Sub FREEZE_ALL()
Set swapp = Application.SldWorks
Set swAllDocs = swapp.EnumDocuments2
Set FirstDoc = swapp.ActiveDoc
DocCount = 0
swAllDocs.Reset
swAllDocs.Next 1, swdoc, NumDocsReturned
' This loop will go through all of the documents within an assembly, including sub-assemblies.
While NumDocsReturned <> 0
bDocWasVisible = swdoc.Visible ' Use Hidden Parts
' script crashed if an attempt to freeze an assembly is made.
' check the file to make sure it's a "sldprt" file.
If (UCase(Right(swdoc.GetPathName, 6)) = UCase("sldprt")) Then
swapp.ActivateDoc2 swdoc.GetPathName, True, longstatus 'open and activate the part
boolstatus = swdoc.FeatureManager.EditFreeze(swMoveFreezeBarTo_e.swMoveFreezeBarToEnd, "", True) ' move the freeze bar to the end
swdoc.SaveAs (swdoc.GetPathName) ' save the change
swapp.CloseDoc (swdoc.GetTitle()) ' close the part
End If
swAllDocs.Next 1, swdoc, NumDocsReturned ' Go to the next part
DocCount = DocCount + 1 ' Keep a count of all parts within the assembly, including sub-assemblies.
Wend
End Sub
Sub FREEZE_ONE()
Set swapp = Application.SldWorks
Set part = swapp.ActiveDoc
boolstatus = part.FeatureManager.EditFreeze(swMoveFreezeBarTo_e.swMoveFreezeBarToEnd, "", True)
part.SaveAs (part.GetPathName)
'swapp.CloseDoc part.GetTitle()
End Sub
Der ursprüngliche Link:
https://forum.solidworks.com/thread/74956
Hallo
Oder das Tool "Integration" in myCADtools
https://help.visiativ.com/mycadtools/2021/fr/Integration114.html
Cdlt
Alan
Vielen Dank für Ihr Feedback.
@sbadenis, ich hatte dieses Makro auch gefunden, aber es funktioniert nicht (außer individuell direkt am Teil, was nicht sehr nützlich ist...)
@acombier habe ich mycadtools leider nicht. Wir sind immer noch in SW2016 SP05 ohne Support.... (Kein Kommentar).
Ich habe es gerade erneut an einer Baugruppe getestet und es scheint zu funktionieren.
Starten Sie das freezeALL-Abo?
Wenn Sie das Einfrieren starten, funktioniert es nur für das aktuelle Teil.
Grundsätzlich müssen Sie das Makro (?) ausführen:
' MODUL: TEILE EINFRIEREN ' PROGRAMMIERER: DMITRY ZAMOSHNIKOV ' DATUM: 13.11.2013 ' ZWECK: ' DURCHLAUFEN SIE EINE BAUGRUPPE UND FRIEREN SIE JEDES TEIL IN DER BAUGRUPPE EIN. ' FUNCTION: FREEZE_ALL ' IN: NONE ' OUT: ALLE TEILE==FROZEN? ' Dim swdoc As SldWorks.ModelDoc2 Dim swAllDocs As EnumDocuments2 Dim FirstDoc As SldWorks.ModelDoc2 Dim boolstatus As Boolean Dim NumDocsReturned As Long Dim DocCount As Long Dim swapp As SldWorks.SldWorks Dim longstatus As Long Dim part As Object ' FREEZE_ALL ' WHILE (PARTS IN ASSEMBLY NOT FROZEN > 0 ) ' OPEN PART ' FREEZE PART ' SAVE PART ' CLOSE PART ' WEND Public Sub FREEZE_ALL() Set swapp = Application.SldWorks Set swAllDocs = swapp. EnumDocuments2 Set FirstDoc = swapp. ActiveDoc DocCount = 0 swAllDocs.Reset swAllDocs.Next 1, swdoc, NumDocsReturned ' Diese Schleife durchläuft alle Dokumente innerhalb einer Assembly, einschließlich Unterbaugruppen. Während NumDocsReturned <> 0 bDocWasVisible = swdoc ist. Das sichtbare Skript " Versteckte Teile verwenden " stürzte ab, wenn versucht wurde, eine Baugruppe einzufrieren. ' Überprüfen Sie die Datei, um sicherzustellen, dass es sich um eine "sldprt"-Datei handelt. Wenn (UCase(Right(swdoc. GetPathName, 6)) = UCase("sldprt")) Dann swapp. ActivateDoc2 swdoc. GetPathName, True, longstatus 'Öffnen und aktivieren Sie den Teil boolstatus = swdoc. FeatureManager.EditFreeze(swMoveFreezeBarTo_e.swMoveFreezeBarToEnd, "", True) ' verschieben die Fixierungsleiste an das Ende swdoc. SaveAs (swdoc. GetPathName) ' speichert die Änderung swapp. CloseDoc (swdoc. GetTitle()) ' schließen Sie den Teil End If swAllDocs.Next 1, swdoc, NumDocsReturned ' Gehe zum nächsten Teil DocCount = DocCount + 1 ' Zählen Sie alle Teile innerhalb der Baugruppe, einschließlich der Unterbaugruppen. Wend End U-Boot
Hallo
Meiner bescheidenen Meinung nach sollten Sie überhaupt nichts starten, ohne zuerst die Funktionsweise dieses Makros zu lesen und zu analysieren, das nicht sehr gut, aber geradezu gut funktioniert ...
Die Funktion "EnumDocuments2" ist eine High-Level-Funktion im Sldworks-Namensraum, sie ermöglicht es Ihnen, alle in Solidworks geöffneten Dokumente zu kennen und nicht nur in der Baugruppe, von der Sie glauben, dass Sie sie verarbeiten...
Herzliche Grüße
An der Spitze OBIWAN! Vielen Dank an alle für Ihre Antworten.