Witam
Celem mojej pracy jest dodanie części do zestawu części, już istniejących, w oprogramowaniu Solidwoks. Ponadto musi być zmontowany z tym zestawem za pomocą VB.NET interfejsów API .
Tak więc udało mi się dodać część do zestawu części w Solidworks, ale problem polegający na tym, że nie mogę jej złożyć za pomocą VB.NET, przeprowadziłem kilka wyszukiwań w sieci i znalazłem ten algorytm, po uruchomieniu działa bez błędu, ale nie wykonuje czynności montażu.
Oto algorytm:
Kod:
strCompName = swComponent.Name2() Debug.Print(" part is " & strCompName) swModel.ClearSelection2(True) swDocExt = swModel.Extension() MateName = "Koncentryczny" + strCompName FirstSelection = "Point1@Origin@" + strCompName & "@" + AssemblyName SecondSelection = "Point1@Origin@" + AssemblyName boolstat = swDocExt.SelectByID2(FirstSelection, "CONCENTRIC", 0, 0, 0, True, 1, Nothing, swSelectOption_e.swSelectOptionDefault) boolstat = swDocExt.SelectByID2(SecondSelection, "CONCENTRIC", 0, 0, 0, True, 1, Nothing, swSelectOption_e.swSelectOptionDefault) matefeature = swAssemblyDoc.AddMate3(swMateType_e.swMateCONCENTRIC, swMateAlign_e.swMateAligned, False, 0, 0, 0, 0, 0, 0, 0, 0, False, mateError) swModel.ClearSelection2(True) swModel.ViewZoomtofit2()dodatkowo próbowałem dodać MsgBox(mateError) i w rezultacie daje mi 4.
Czekam na Wasze odpowiedzi i z góry dziękuję.
Witam
Przede wszystkim należy sprawdzić, czy to makro wybiera powierzchnie, do których mają zostać zastosowane wiązania. Oznacza to, że sprawdź, czy definicje "PierwszegoWyboru" i "DrugiegoWyboru" działają.
Następnie dodawane ograniczenie musi być zgodne. W podanym przykładzie próbujesz zastosować naprężenie "współosiowe".
Witam i dziękuję za odpowiedź,
Tak, celem mojego algorytmu jest zastosowanie ograniczenia współosiowości między dodaną częścią a zbiorem części.
Dla pierwszej selekcji i drugiej selekcji, myślę, że teraz wszystko jest w porządku, wprowadziłem małą poprawkę:
FirstSelection="Point1@Origin" + strCompName & "@" + AssemblyName SecondSelection="Point1@Origin" + AssemblyName
Ale problem pozostaje taki sam, do części nie są dodawane żadne ograniczenia.
Z drugiej strony myślę, że problem bierze się z tych linii: (to tylko propozycja w oczekiwaniu na Twoją pomoc):
boolstat = swDocExt.SelectByID2(FirstSelection, "CONCENTRIC", 0, 0, 0, True, 1, Nothing, swSelectOption_e.swSelectOptionDefault) boolstat = swDocExt.SelectByID2(SecondSelection, "CONCENTRIC", 0, 0, 0, True, 1, Nothing, swSelectOption_e.swSelectOptionDefault) matefeature = swAssemblyDoc.AddMate3(swMateType_e.swMateCONCENTRIC, swMateAlign_e.swMateAlignALIGNED, False, 0, 0, 0, 0, 0, 0, 0, 0, False, mateError) swModel.ClearSelection2(True)
Cześć
Nie można dodać wiązania koncentrycznego pomiędzy dwoma punktami. więc typ wiązania, którego powinieneś próbować użyć, to Zbieżność. To prawdopodobnie będzie twój główny problem.
Myślę też, że twoje linie SelectByID2 wymagają trochę pracy
Ta strona zawiera pewne szczegóły, ale myślę, że twoje linie powinny wyglądać bardziej tak:
boolstat = swDocExt.SelectByID2(FirstSelection, "", 0, 0, 0, True, 1, Nothing, swSelectOption_e.swSelectOptionDefault)
Witam
W kodzie, który otrzymałeś z powrotem, używasz AddMate3, który jest przestarzały, zastąp go AddMate5 (zobacz tutaj) i jak powiedział Gauthik67 i Dawid zwróć uwagę na funkcję SelectByID2, druga wartość odpowiada typowi wybranego obiektu, pustemu lub pobranemu z swSelectType_e Wyliczenia, a nie typowi ograniczenia, jak umieściłeś. Zwróć także uwagę na wprowadzone ograniczenie, musi ono być spójne z Twoimi wyborami. Przykład tego, co chcesz zrobić, znajdziesz tutaj.
Pozdrowienia
Witam i dziękuję za odpowiedzi,
Wprowadziłem zmiany tak, jak mnie o to prosiłeś:
dla SelectBylD2:
boolstat = swDocExt.SelectByID2(FirstSelection, "", 0, 0, 0, True, 1, Nothing, swSelectOption_e.swSelectOptionDefault)
boolstat = swDocExt.SelectByID2(SecondSelection, "", 0, 0, 0, True, 1, Nothing, swSelectOption_e.swSelectOptionDefault)
dla addMate5 wyświetla mi ten komunikat o błędzie:
Nie znaleziono publicznego elementu członkowskiego "AddMate5" typu "AssemblyDoc"
Myślę, że dlatego, że używam VB.NET 2013 i nie sądzę, aby był to duży problem, ponieważ AddMAte3 robi bolo.
Próbowałem dodać ten kod, aby zdefiniować, gdzie jest problem:
matefeature = swAssemblyDoc.AddMate3(swMateType_e.swMateCOINCIDENT, swMateAlign_e.swMateAlignALIGNED, False, 0, 0, 0, 0, 0, 0, 0, False, mateError)
Jeśli funkcja wiązania jest niczym, to
MsgBox("" kolega nie powiódł się! ")
Zakończ jeżeli:
I zwraca mi komunikat "Mate failed", co oznacza, że funkcja MateFeature nie działała.
Czekam na Waszą pomoc i dziękuję.
Witam
Czy jesteś pewien, że dobór Twoich elementów przebiega pomyślnie? (Wydaje mi się, że brakuje litery "e" na końcu słowa pochodzenia w deklaracji Twojego FirstSelection i SecondSelection). Zastąp również znak "" ciągiem "EXTSKETCHPOINT" w 2 wierszach SelectByID2.
Jeśli chcesz powiązać początek części z początkiem układu współrzędnych zespołu, zamień "swMateType_e.swMateCOINCIDENT" na "swMateType_e.swMateCOORDINATE" i "swMateAlign_e.swMateAlignALIGNED" na "-1" w funkcji AddMate3.
W przypadku funkcji AddMate5, z której wersji Solidworks korzystasz?
Oto przykładowy kod:
Dim FirstSelection As String
FirstSelection = "Point1@Origine@Pièce1-1@" & AssemblyName
Dim SecondSelection As String
SecondSelection = "Point1@Origine@" & AssemblyName
Part.ClearSelection2 True
boolstatus = swAssemblyDoc.Extension.SelectByID2(FirstSelection, "EXTSKETCHPOINT", 0, 0, 0, False, 1, Nothing, 0)
boolstatus = swAssemblyDoc.Extension.SelectByID2(SecondSelection, "EXTSKETCHPOINT", 0, 0, 0, True, 1, Nothing, 0)
Dim matefeature As Mate2
Set matefeature = swAssemblyDoc.AddMate3(swMateType_e.swMateCOORDINATE, -1, False, 0, 0, 0, 0, 0, 0, 0, 0, False, mateError)
Part.ClearSelection2 True
Part.EditRebuild3
Pozdrowienia
Witam i dziękuję za odpowiedź,
Posiadam wersję 2013 oprogramowania Solidworks.
Dla "Point1@Origine@", w Pomocy SolidWorks, początek układu współrzędnych jest zapisany bez e.
Przetestowałem Twoją wersję kodu, ale nie uzyskałem żadnych wyników.
pff ten kod doprowadza mnie do szaleństwa, mam prawie 1 miesiąc, że utknąłem '(
Witam
Do uwagi " dla "Point1@Origine@ ", w pomocy solidworks, początek układu współrzędnych jest zapisany bez e. " Skłaniałbym się do stwierdzenia, że jest to normalne, ponieważ pomoc Solidworks podaje przykłady kodu dla angielskiej wersji Solidworks, więc początek bez e, ale jeśli twój solidworks jest w języku francuskim, origine przyjmuje e, Spójrz na to, jak jest to zapisane w twoim drzewie budynków.
Pozdrowienia
Umieść również MsgBox FirstSelection i MsgBox SecondSelection po ich przypisanych wartościach, aby sprawdzić, czy odpowiadają one oczekiwaniom.
Witam i bardzo dziękuję za tę uwagę,
Znalazłem "Origin" w drzewie kompilacji.
i zrobiłem MsgBoxy dla
Pierwszy wybór: " Point1@Origin@Key-1@Assembly "
Drugi wybór: " Point1@Origin@Assembly "
Myślę, że teraz przyniosły one dobre wyniki.
Pozostaje mi tylko zbiegnąć te dwa punkty, aby złożyć te dwa elementy.
Uh, małe sprawdzenie, twoje części są w trybie rozwiązanym w Solidworks, w przeciwnym razie nie działa, ponieważ odniesienia, takie jak początek układu współrzędnych części, nie są wczytywane!!
Pozdrowienia
Aby umieścić części w trybie rozpoznanym kodem, zobacz http://help.solidworks.com/2013/English/api/sldworksapi/SolidWorks.Interop.sldworks~SolidWorks.Interop.sldworks.IAssemblyDoc~SetComponentSuppression.html?verRedirect=1 i http://help.solidworks.com/2013/English/api/swconst/SolidWorks.Interop.swconst~SolidWorks.Interop.swconst.swComponentSuppressionState_e.html.
Pozdrowienia
Tak, Panie D.Rogerze, zmieniłem tryb części na rozwiązany, klikając na zespół i zmieniając tryb, teraz udało mi się złożyć początek części w punkcie początkowym złożenia.
Bardzo dziękuję panu za pomoc i wszystkim forumowiczom wzięli udział w tym temacie.
Witam
Proszę, mam dwa szybkie pytania:
1/ Chcę złożyć dwie części za pomocą osi, które stworzyłem.
Próbowałem tego kodu:
Kod
FirstSelection ="Axe1@" + strCompName & "@" + AssemblyName
SecondSelection = "Axe2@" + strCompModelname2 & "@" + AssemblyName
"Siekiera1 i Siekiera2 to nazwy osi"
boolstat = swDocExt.SelectByID2(FirstSelection, "AXIS", 0, 0, 0, True, 1, Nic, 0)
boolstat = swDocExt.SelectByID2(DrugiWybór, "OŚ", 0, 0, 0, Prawda, 1, Nic, 0)
matefeature = swAssemblyDoc.AddMate3(swMateType_e.swMateCOINCIDENT, swMateAlign_e.swMateAlignALIGNED, False, 0, 0, 0, 0, 0, 0, 0, False, mateError)
Ale pokazało mi, że wybór osi jest nieprawidłowy.
2/ w jaki sposób mogę wybrać jedną powierzchnię części, aby połączyć dwie części za pomocą ścian.
Witam
Aby znaleźć odpowiednie wartości do umieszczenia w wierszach "SelectByID2" i "AddMate3" możesz skorzystać z rejestratora makr Solidworks (zobacz tutaj), wtedy wystarczy skopiować dane linie i dostosować nazwy elementów do swoich potrzeb.
Pozdrowienia