Cze wszystkim
Czy ktoś zna makro do obsługi paska zamrażania na wszystkich częściach zespołu (zobacz wszystkie części różnych podzespołów, jeśli to możliwe)?
Szukam, ale nie mogę go znaleźć...
Dziękuję!
Cze wszystkim
Czy ktoś zna makro do obsługi paska zamrażania na wszystkich częściach zespołu (zobacz wszystkie części różnych podzespołów, jeśli to możliwe)?
Szukam, ale nie mogę go znaleźć...
Dziękuję!
Znalazłem to makro, które nie zawsze działa, ale nie miałem czasu, aby kopać głębiej:
' 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
Oryginalny link:
https://forum.solidworks.com/thread/74956
Witam
Lub narzędzie "Integracja" w myCADtools
Źródło: https://help.visiativ.com/mycadtools/2021/fr/Integration114.html
Cdlt powiedział:
Alan
Dziękujemy za Twoją opinię.
@sbadenis, znalazłem również to makro, ale nie działa (z wyjątkiem indywidualnego bezpośredniego części, co nie jest zbyt przydatne...)
@acombier, niestety nie mam mycadtools. Nadal jesteśmy w SW2016 SP05 bez wsparcia.... (Bez komentarza).
Właśnie ponownie przetestowałem go na montażu i wydaje się, że działa.
Czy uruchamiasz subwoofer freezeALL?
Jeśli uruchomisz zamrażalny, działa on tylko na bieżącej części.
Zasadniczo musisz uruchomić makro (?):
' MODUŁ: FREEZE PARTS ' PROGRAMISTA: DMITRY ZAMOSHNIKOV ' DATA: 13.11.2013 ' CEL: ' PRZEJDŹ PRZEZ MONTAŻ I ZAMROŹ KAŻDĄ CZĘŚĆ W ZESPOLE. ' FUNKCJA: FREEZE_ALL ' WEJŚCIE: BRAK ' WYJŚCIE: WSZYSTKIE CZĘŚCI==ZAMROŻONE? ' 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 (CZĘŚCI W ZESPOLE NIE ZAMROŻONE > 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 ' Ta pętla przejdzie przez wszystkie dokumenty w zestawie, w tym podzestawy. Podczas gdy NumDocsReturned <> 0 bDocWasVisible = swdoc. Skrypt Visible ' Use Hidden Parts ' zawieszał się w przypadku próby zamrożenia złożenia. ' sprawdź plik, aby upewnić się, że jest to plik "sldprt". Jeśli (UCase(Right(swdoc. GetPathName, 6)) = UCase("sldprt")) Następnie zamień. ActivateDoc2 swdoc. GetPathName, True, longstatus 'otwórz i aktywuj część boolstatus = swdoc. FeatureManager.EditFreeze(swMoveFreezeBarTo_e.swMoveFreezeBarToEnd, "", True) ' przesuwa pasek zamrażania do końcowego pliku swdoc. SaveAs (swdoc. GetPathName) ' zapisz zamianę zmian. Akcje CloseDoc (swdoc. GetTitle()) ' zamknij część End If swAllDocs.Next 1, swdoc, NumDocsReturned ' Przejdź do następnej części DocCount = DocCount + 1 ' Zachowaj liczbę wszystkich części w złożeniu, w tym podzespołów. Wend End Sub
Witam
Moim skromnym zdaniem nie należy w ogóle niczego uruchamiać bez uprzedniego przeczytania i przeanalizowania działania tego makra, które nie działa zbyt dobrze, ale wręcz zbyt dobrze...
Funkcja "EnumDocuments2" jest funkcją wysokiego poziomu w przestrzeni nazw Sldworks, pozwala poznać wszystkie dokumenty otwarte w Solidworks, a nie tylko w złożeniu, które wydaje się, że przetwarzasz...
Pozdrowienia
Na szczycie OBIWAN! Dziękuję wszystkim za odpowiedzi.