SolidWorks ReplaceComponents

Witam forum!

 

Mam szybkie pytanie dotyczące funkcji "ReplaceComponents" w API Solidworks

 

Proszę bardzo, udało mi się uruchomić makro dotyczące ręcznego wyboru i wymiany części, świetnie!

(Mały Taniec Zwycięstwa: <o> _o>  _o_ \o/)

 

Mój problem  nadchodzi teraz... Prezentacja makra koledze bawią się  wymieniając części już obecne w montażu

Jest fajnie, wymieniamy na kołnierz itp.

 

Postanawia spróbować makro w bardziej konstruktywny sposób. Wprowadź więc ścieżkę i nazwę części zamiennej, wybierz część w zespole i......

Otóż nic... Część w zespole jest wybrana, ale nie zastąpiona...

 

Bardziej precyzyjne i zwięzłe wyjaśnienie:

 

Część montażowa do wymiany + część zamienna w zespole => działa.

 

Część zespołu do wymiany + część zamienna nieznajdująca się w zespole => Brak.

 

Oto makro, o którym mowa, jako załącznik =)

 

Jeśli masz jakieś pomysły na coś, o czym bym zapomniał / popełniłem jako  błąd =/

 

Przyjacielski

Yoann powiedział:


vba_remplacement_piece.txt

Witam

 

Dwie małe sugestie bez zagłębiania się w kod:

 

Spróbuj otworzyć część w SolidWorks (ponieważ mamy pełną ścieżkę), a następnie spróbuj zamiany.

 

W przeciwnym razie, nieco barbarzyńską metodą, włóż część do zespołu, zastąp istniejącą, a następnie usuń ją (sprawdź, czy usunęliśmy pierwszą instancję!)

1 polubienie

Witaj Lucas :)

 

Próbowałem pierwszej metody, wygląda na to, że część zamienna musi zostać otwarta, aby została uwzględniona (i dostępna w formie pisemnej. Jeśli tak jest, to trochę mnie to zirytuje, ponieważ części są na EPDM...)

 

Ale przy próbie otwarcia go osobno wymiana nie uwzględnia wystąpienia części, która ma zostać zmieniona =o

 

Przykład:

 

W swoim montażu posiadam:

 

Zobacz materiał SE-01

   -kawałek01<1>

   -item02<1>

 

Zobacz materiał SE-02

   -....

   -....

 

-Pozycja03<1>

-Pokój01<5>

-Pokój02<9>

 

A kiedy, na przykład, chcę zmienić "part01<5>", wybieram go (umieszczając part01-5), do tej pory wszystko działa dobrze, wpisuję nazwę części zamiennej otwartej również obok niej i zmienia się nie "part01<5>" jak wybrano, ale "part01<1>" =o

 

Czyli funkcja nie uwzględniałaby występowania, tak jak myślałem?

Bo z drugiej strony, gdy chcę zmienić "Piece03<1>" (lub jakiekolwiek wystąpienie, o ile jest ono najwyższe w drzewie), to nie mam żadnych obaw =/

 

Tak, część musi być załadowana do pamięci, a oto przetłumaczona pomoc

 

Nie można zastąpić wybranego komponentu komponentem o tej samej nazwie, nawet jeśli składniki znajdują się w różnych folderach. 

 

Komponent musi być elementem najwyższego poziomu. Nie może być komponentem podzespołu. Jeśli aplikacja musi zastąpić komponent w podzespole, musi otworzyć podzespół i pobrać komponent z tego zespołu

 

Ta metoda zamyka wszystkie pliki komponentów po wywołaniu w złożeniu. Jeśli komponenty zostały zmienione, zmiany te nie są automatycznie zapisywane. Zmiany należy zapisać przed zamknięciem plików.

 

Aby uniknąć konieczności zmiany dokumentów przed otwarciem dokumentu, możesz skorzystać z interfejsu API

Zamiana. Upewnij się, że DocumentVisible(False, swDocumentTypes_e.swDocPART) po otwarciu ustaw wartość True

Dokument będzie otwarty, ale niewidoczny

 

W przypadku zamiany wystąpień powinno to zadziałać, ponieważ polecenie zastępuje wybraną część, nawet jeśli ma inne wystąpienia, to wybór zostanie zastąpiony

 

 

 

 

 

4 polubienia

Witaj jfaradon!

 

Dziękuję za odpowiedź :-)

 

Rzeczywiście, zastanawiałem się, czy dobrze zrozumiałem tę część pomocy API w świetle tego, jak to było dla mnie. Teraz jestem pewien, że gdzieś jest kosz x)

 

Rzeczywiście, oprócz wymiany niezaznaczonej (i ukrytej!) części, ta jest... w podzbiorze! =o

 

Dodałem to: "Set swModel = swApp.OpenDoc6(swNewfile, 1, 0, "", Longstatus, Longwarnings)"

 

Aby wcześniej otworzyć część zamienną, ale oczywiście nie chce x) zobaczę, że później

 

Jako załącznik znajduje się zrzut ekranu przed/po funkcji zamiany.

 

Podświetlona część w drzewie to ta, która jest  zastępowana =/

 

 


replace.png

Jest to funkcja, z której już korzystałem i która działa... Naprawdę nie widzę, co może się z tobą stać

zwłaszcza, że z tego co widzę, odwrócenie odbywa się między kawałkami, które nie mają tej samej nazwy?

 

Ale skomplikowane jest poproszenie użytkownika o wpisanie nazwy komponentu + wystąpienia, dlaczego nie poprosić go o wybranie komponentu w drzewie, aby nie było już ryzyka błędu w nazwach

 

W przeciwnym razie funkcja, przykład, który umieściłem w poprzednim pytaniu Jeana-Bapta, które tutaj wklejam, pozwala uzyskać nazwy i zaoferować je w menu rozwijanym w stylu Combobox

 

 

Dim swDoc jako SldWorks.ModelDoc2

Dim swAss jako SldWorks.AssemblyDoc

Dim stOldFileName As String, stNewFileName As String

Dim bStatus As Boolean

 

Sub main()

 

    Ustaw swApp = Application.SldWorks

    Ustaw swDoc = swApp.ActiveDoc

    

    Jeśli swDoc jest niczym, wyjdź z sub

    Jeśli swDoc.GetType <> swDocumentTypes_e.swDocASSEMBLY, wyjdź z sub

    

    Ustaw swAss = swDoc

   

    Dim swComponents As Variant: swComponents = swAss.GetComponents(True)

    

    Dla i = 0 TB UBound(swComponents)

        MsgBox swComponents(i). Nazwa

    Następny

    

 

Koniec subwoofera

 

 

 

4 polubienia

Dobry wieczór wszystkim,

 

Yoann, jeśli chodzi o wymianę "starej" części na "nową" w zespole, pozwalam sobie na sceptycyzm. Po co?

Już teraz istniejące ograniczenia między starą a innymi częściami, moim zdaniem, prawie wszystkie stają się chwiejne! Chyba, że stare i nowe mają wiele podobieństw (rodzin kawałków). Chyba, że jest jakiś super mega SW, który sobie z tym radzi? Nie śnij!!

Ze względu na to, że zespół jest otwarty, wymiana części podzespołu jest niemożliwa. Aby stało się to możliwe, konieczne będzie wówczas otwarcie podzespołu.

Jeśli chodzi o występowanie, to SW przydziela wystąpienie podczas ręcznego dodawania "sklonowanej" części w zespole, zarządza nim. Makro będzie musiało również wziąć pod uwagę występowanie starej monety.

 

Wreszcie, metoda [ReplaceComponents] to nie wszystko!

Moim zdaniem radzi sobie z wymianą "starej" części na "nową" część tylko wtedy i tylko wtedy, gdy ta ostatnia jest otwarta lub, co jeszcze bardziej restrykcyjne, otwarta i obecna w montażu.

 

Tak więc, jak mówi Lucas w kontekście nowej części zamiennej, która nie jest częścią zespołu, chodzi o to, aby ją otworzyć, włożyć do zespołu, zidentyfikować jej wystąpienie, a na końcu wymienić starą na nową.

 

Klasa A+

 

MC

1 polubienie

Witam

 

Przede wszystkim chcę przeprosić za czas odpowiedzi, musiałem popracować nad czymś zupełnie innym i nie miałem czasu, aby się w to zagłębić

 

 

@CaronMaxime: Umieszczenie funkcji wymiany części w pełnym makrze jest rzeczywiście więcej niż śmiałe, na przykład ze względu na ograniczenia. Ale mój cel jest bardzo konkretny, nie martw się! Mój cel jest związany ze zmianami formatu, które zazwyczaj są dość długie pod względem obsługi dla operatorów. Testuję również moje makro (które składa się nie tylko z replacecomponent, ale także ze zmiany wymiaru wiązań w złożeniu, na przykład.

 

 

Jeśli chodzi o chwiejne ograniczenia, to rzeczywiście jest ich trochę, ale przechodząc przez podstawową funkcję solidworks, to samo dzieje się z nimi^^

 

@jfaradon: Dziękuję za makro :o Rzeczywiście bardzo mi się przydało stworzenie listy wyboru wyboru, o której wspominasz :-)

 

Na tym w końcu zakończę to pytanie :-)

 

Przyjacielski

 

Yoann powiedział: