Importowanie części do zespołu o tym samym początku układu współrzędnych

Witam

 

Chcę zaimportować dwie części do zespołu i upewnić się, że ich początek początkowy jest mylony z początkiem zespołu.

 

To coś łatwego ręcznie, ale makro, które otrzymuję, nie...

 

dziękuję za pomoc

 

Kod:

Podzespół ()

 

Dossier_dest = "Projekt D:\TRAPRO III\Test makro\"

 

Ustaw swApp = Application.SldWorks

 

Ustaw część = swApp.NewDocument("C:\ProgramData\SolidWorks\SolidWorks 2012\templates\Assemblage.asmdot", 0, 0, 0)

swApp.ActivateDoc2 "Assemblage1", False, longstatus

Ustaw część = swApp.ActiveDoc

Przyciemnij myModelView jako obiekt

Ustaw myModelView = Part.ActiveView

myModelView.FrameState = swWindowState_e.swWindowMaximized

boolstatus = Part.AddComponent(Dossier_dest & nazwa & ". SLDPRT", 0, 0, 0)

boolstatus = Part.AddComponent("D:\Project TRAPRO III\TRAPRO DESIGN +\01-Pierścień biblioteki technicznej\Nowy\Pierścień korony 25.SLDPRT", 0, 0, 0)

 

Koniec sub

Zajrzyj do pomocy API (menu SolidWorks?/Pomoc API)

Poszukaj polecenia AddComponent5

Istnieją przykłady kodu, których można użyć 

3 polubienia

Naprawdę nie widzę sensu, ponieważ kiedy importujesz i klikasz bezpośrednio OK, skleja to początki razem.

Może możesz:

1- Zwolnij pokój

2- dodaj ograniczenie koincydencji na początku zespołu i na początku części, sprawdzając wyrównanie osi (myślę w mojej głowie).

3- Napraw część

4- Usuń utworzone wiązanie.

 

Chciałbym ponownie poruszyć tę kwestię, która nie została oznaczona jako rozwiązana, ponieważ mam do czynienia z podobnym problemem.

Chcę wstawić części do zespołu, wstawiając najpierw szkic (którego linie służą jako odniesienia dla złożenia innych części) i nie mogę sprawić, aby dwa początki układu współrzędnych pokrywały się (za pomocą funkcji AddComponent, AddComponent2 lub nawet AddComponent5).

Mianowicie, że korzystam z SolidWorks 2012.

Dziękuję za pomoc

Czy spojrzałeś na ten link? http://help.solidworks.com/2012/English/api/sldworksapi/Add_Component_and_Mate_Example_VB.htm

Witam

Widziałem ten związek już wcześniej, ale moje próby wcale nie były przekonujące. Jednak wziąłem mój kod, aby pokrywał się z tym przykładem, ale pojawia się komunikat o błędzie:

"Błąd wykonania '91':

Zmienna obket lub zmienny blok Z niezdefiniowany"

Dla linii 100: matefeature. Nazwa = NazwaWiązania

Załączyłem mój kod, jeśli może pomóc w jego zrozumieniu (ale jest on połączony z formularzem użytkownika)


createass.txt

Dobry wieczór

W załącznikach znajdziesz skomentowane makro, które pozwala na umieszczenie dwóch części dokumentu i dodanie ograniczenia do początków.

Aby to zadziałało, zmień ścieżkę do części i otwórz nowy zespół.

Makro jest skomentowane, powinieneś je dość łatwo zrozumieć.

Dobry kod.


insertion_pieces.swp
2 polubienia

Bardzo dziękuję, myślę (mam nadzieję), że to wyciągnie mnie z niezłego bałaganu!

1 polubienie

Witam

Tak, to znowu ja, wracam, ale tak naprawdę problem nie został rozwiązany. Zauważyłem to już dawno temu, ale nagle przywiązałem się do innych funkcji mojego programu, to nie miało znaczenia.

Pomimo tego pięknego programu stworzonego przez Yves'a T., zawsze napotykam ten sam problem: mój kawałek jest zawsze naprawiony od wstawienia i nie dodaje początku do początku. Bez względu na to, jak bardzo staram się naprawić, uwolnić kawałek, obrócić linie we wszystkich kierunkach, nic nie pomaga!

Dziękuję za pomoc.

Załączam moje makro, które z pewnością nie jest zbyt jasne, biorąc pod uwagę liczbę modyfikacji i testów, które przeprowadziłem.


createass_v2.txt

Witam

W jaki sposób podajesz parametry podrzędne główne?

Sub main(oCabineCode As String, SelectedFile As String, TracePath As String)

Nie przetestowano parametrów, aby upewnić się, że mają wartość przed kontynuowaniem kodu.

Po co zmieniać wartość do swApp w trakcie trwania programu?

Bez żadnego wyjaśnienia z twojej strony, co myślałeś, że zrobisz z:

Set swApp = _
Application.SldWorks

Set Part = swApp.NewDocument("C:\ProgramData\SolidWorks\SolidWorks 2012\templates\Assemblage.asmdot", 0, 0, 0)
Set swModel = swApp.ActivateDoc2(oCabineCode, False, longstatus)
Set Part = swApp.ActiveDoc
Dim myModelView As Object
Set myModelView = Part.ActiveView
myModelView.FrameState = swWindowState_e.swWindowMaximized

longstatus = Part.SaveAs3(SelectedFile, 0, 2)

Set Part = swApp.ActivateDoc2(oCabineCode, False, errors)
Dim TmpTitle As String
TmpTitle = swApp.ActiveDoc.GetTitle
swApp.CloseDoc TmpTitle

Nie rozumiem po co to jest :)

Przyjrzałem się twojemu kodowi nieco bardziej szczegółowo. Pomyłek jest sporo. Wróć do zamieszczonego przeze mnie makra. Działa we wszystkich przypadkach i dla wersji oprogramowania >2010.

Jeśli masz już nazwy plików, które chcesz dodać do zestawu, umieść je w zmiennej globalnej (tablicy String) lub we właściwości.

Jeśli chcesz zezwolić użytkownikowi na wybór dokumentów do wstawienia, użyj: swApp.GetOpenFileName(). Spowoduje to wyświetlenie okna dialogowego OpenFileDialog, w którym można określić kilka opcji.

Unikaj ponownego podpisywania zmiennych, gdy się nie zmieniają. O ile to możliwe, nie dołączaj ponownie wartości do swApp.

Wartość można ponownie przypisać do innych zmiennych.

Należy unikać przekazywania parametrów do procedury  Main(). Lepiej jest napisać drugą procedurę, która zostanie wywołana przez Main, która będzie miała parametry.

Styl:

Sub Main()

MakeObliczenia  Param1, Param2,Param3

Koniec subwoofera

Sub FaireLeCalcul( ByVal param1 jako blabla, ... )

Koniec subwoofera

Jest bardziej czytelny i bardziej znaczący. Pozwala także lepiej pisać kod bez mieszania się, zwłaszcza gdy dopiero zaczynasz programować.

Dla mnie Twój kod nie działa, ponieważ zmienna nie powinna mieć oczekiwanej wartości. Jeśli nie testujesz zmiennych ciągu, może to być niebezpieczne. Zmienna typu String jest ustawiana na wartość "String Empty" podczas inicjalizacji. Dlatego w wielu językach programowania testujemy wartość zmiennej.

W makrze, które zamieściłem, nie zrobiłem tego, ponieważ musisz włożyć trochę swojego :)

Pozdrowienia.

1 polubienie

Witam

Dziękujemy za opinię. Będę krok po kroku odpowiadał na różne pytania, które sformułowałeś (zgodnie z moimi testami i modyfikacjami) i wyjaśnię mój program.

Gdy uruchamiam program, mam przed sobą UF, w którym itilsator wpisuje nazwę zestawu (oCabineCode), następnie folder, w którym chce zapisać zestaw (SelectedFile) i na końcu element referencyjny tego zestawu poprzez jego ścieżkę (Tracepath). Po wszystkich przeprowadzonych testach wiem, że nie mam obaw co do tych różnych danych. klikając "Utwórz zestaw", ten program zostanie uruchomiony i dlatego otworzy nowy zestaw, zapisz go jako, aby nadać mu żądaną nazwę i zapisz go w katalogu docelowym. To właśnie robi ten mały fragment programu, który wyodrębniłeś wczoraj w swojej pierwszej wiadomości. Kiedy dokonuję tej rejestracji, faktycznie kończę z 2 zestawami "AssemblageX" i "oCabineCode", aby uniknąć problemów, więc zamykam "AssemblageX".

Pomimo polecenia "Set Part = swApp.ActivateDoc2(oCabineCode, False, errors)" nadal kończę z "AssemblageX" jako aktywną częścią. Dlatego właśnie przypisuję wartość do swApp. Jest to również dla mnie "prostsze", ponieważ mogę zidentyfikować mój zespół po nazwie, którą znam, natomiast jeśli jest to Assemblage"X, staje się to bardziej skomplikowane, przynajmniej tak mi się wydaje.

Postaram się jednak wykorzystać Twoje wskazówki zaproponowane w drugim przesłaniu, aby rozwiązać tę małą wpadkę.

Jeszcze raz dziękujemy za zainteresowanie.

Cóż, dobrze usłyszałem i staram się postępować zgodnie z twoją radą, ponownie przeczytałem, przejrzałem i usunąłem wiele wierszy mojego kodu. Sprawdziłem wszystkie dane moich zmiennych String, a priori nie mam żadnych błędów również po tej stronie. Moja część dobrze pasuje do mojego zespołu, ale kiedy docieram do ograniczenia, znowu się nie udaje!

Kończy się to błędem "438: Właściwość lub metoda nie jest obsługiwana przez ten obiekt" i kiedy szukam pomocy SM API, nie mogę znaleźć żadnej pomocy dla funkcji "AddMate5", ale to ta linia i jest to ostatnia w moim kodzie, co powoduje błąd. Komponent jest dodawany naprawiony i zawsze mogę uruchomić metodę UnfixComponent, nic nie robię.

W najgorszym przypadku wykonuję manipulację ręcznie, tak robię od początku, ale to trochę... bolesny.

Witam

Czy masz swoje 3 plany zarówno w swoich pokojach, jak i w montażu??? Myślę, że twoje pochodzenie znajduje się na przecięciu 3 płaszczyzn!! Dlaczego nie zobaczyć z tobą ograniczeń planów między nimi, tam twoje części miałyby ten sam początek i byłyby natychmiast ograniczone...

1 polubienie

Przepraszam, AddMate5 pojawił się dopiero od 2015 roku. W przypadku oprogramowania 2012 należy użyć AddMate3.

Wszystkie informacje na temat korzystania z tej metody można znaleźć w pomocy SW API.

Witam

Tu znowu mam tę samą obawę:

Korzystam z SW2012 i kiedy dodaję moją pierwszą część w złożeniu, jest ona ustalona, udaje mi się dodać wiązania, aby początki układu współrzędnych i płaszczyzny odniesienia pokrywały się, ale nagle jest to przeciążone (nie można aktywować wiązań, ponieważ są one stosowane do nieruchomego komponentu). Dodałem następujące wiersze do kodu:

Part.FixComponent lub

Part.UnfixComponent

To niczego nie zmienia.

Próbowałem z pierwszą formułą, ponieważ kiedy robię nagranie makra, wydaje się, że zwalnia się i naprawia część w SW2012.

Próbowałem z drugim, ale to też nie działa.

Na razie mój program działa idealnie, z wyjątkiem tego punktu (więc robię przerwy, aby ręcznie zwolnić pierwsze części każdego tworzonego podzespołu, a robię ich 7, więc jest to trochę bolesne i program traci płynność).

Jeśli masz rozwiązanie, bardzo byś mi pomógł.

Z góry dziękuję i jeszcze raz!

Witaj Mewo,

Jeśli kod jest nadal załączony na stronie 1 tego tematu, myślę, że powinniśmy zamiast tego połączyć TraceName & "@" & AssemblyName w zmienną, a następnie ją wywołać.

Myślę, że to może wyjaśniać problem. W przeciwnym razie, umieszczając przystanek w kodzie i przewijając krok po kroku od tego punktu, będzie to wymagało sprawdzenia, czy model jest wybrany w menedżerze operacji.

boolstatus = Part.Extension.SelectByID2(TraceName & "@" & AssemblyName, "COMPONENT", 0, 0, 0, False, 0, Nothing, 0)
Part.UnfixComponent

 

1 polubienie

To zawsze ten sam kod.

Dziękuję Cyril, to rozwiązuje mój problem!

w większości brakowało inkrementacji w nazwie elementu po "TraceName"

boolstatus = Part.Extension.SelectByID2(NazwaŚladu & "-1@" & NazwaZłożenia, "KOMPONENT", 0, 0, 0, Fałsz, 0, Nic, 0)
Part.UnfixComponent

Teraz działa idealnie, jeszcze raz dziękuję!