Obsługa paska bloków makr na wszystkich częściach zespołu

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

1 polubienie

Witam

To jest dar.

Niech moc będzie z wami.

 


freeze.zip
3 polubienia

@OBI WAN, wydaje mi się to o wiele bardziej spójne ...

 

1 polubienie

Na szczycie OBIWAN! Dziękuję wszystkim za odpowiedzi.

1 polubienie