Tworzenie ograniczeń między dwoma pokojami

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".

 

2 polubienia

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

http://help.solidworks.com/2018/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.imodeldocextension~selectbyid2.html

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)

 

3 polubienia

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

2 polubienia

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

1 polubienie

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

2 polubienia

Umieść również MsgBox FirstSelection i MsgBox SecondSelection po ich przypisanych wartościach, aby sprawdzić, czy odpowiadają one oczekiwaniom.

1 polubienie

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

2 polubienia

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.

 

1 polubienie

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

1 polubienie