Autor | Wypowiedź |
2011-12-21, 13:28
Pomógł 0 raz(y).
|
Witam serdecznie, piszę program z pomocą makr SolidWorksa symulujujący nacinanie uzębień kół zębatych metodą obwiedniową. Główna zasada działania opiera się na odejmowaniu sparametryzowanych bryły głowicy od bryły otoczki zębnika w kolejnych powiązanych ze sobą położeniach tych obiektów w przestrzeni. Jestem już na dość zaawansowanym etapie kinematyki ruchu tych brył i ich odejmowania od siebie. Spotkałem się z pewnym problemem, mianowicie: Mam bryłę GLOWICA zorientowaną w przestrzeni Mam bryłę OTOCZKA zorientowaną w przestrzeni Nacinanie zęba ma się odbywać w taki sposób: 1) Obrót GLOWICA o pewien stały kąt względem poprzedniego położenia 2) Obrót OTOCZKA o pewien stały kąt względem poprzedniego położenia 3) Odjęcie bryły GLOWICA od OTOCZKA na każdym kroku (mają część wspólną) I tutaj się pojawia kłopot z pętlą mającą wykonać to załóżmy 100 razy z krokiem i=1 (stosuję FOR): Jak łatwo zobaczyć, przy założonej kinematyce powstaje 100 GLOWIC i 100 OTOCZEK w różnych konfiguracjach w przestrzeni i 100 odejmowań ich od siebie.Kłopot dotyczy tego, że utworzone obiekty bryłowe SolidWorks chciałbym wykorzystać w jednej zapętlonej linii kodu z pewnym parametrem porządkowym kolejnych położeń zamiast przepisywać 100 razy ten sam kod podstawiając kolejne numery powstałych w ruchach brył. Łatwiej będzie to pokazać na kodzie: i=1 Obrót GLOWICA: boolstatus = Part.Extension.SelectByID2("GLOWICA1", "SOLIDBODY", 0, 0, 0, False, 1, Nothing, 0) Dim GLO_KIN As Object Set GLO_KIN = Part.FeatureManager.InsertMoveCopyBody2(0, 0, 0, 0, 0, 0, 0, 0, 0, i * KAT * IODT, True, 1) Obrót OTOCZKA: boolstatus = Part.Extension.SelectByID2("OTOCZKA1", "SOLIDBODY", 0, 0, 0, False, 1, Nothing, 0) boolstatus = Part.Extension.SelectByID2("OS", "EXTSKETCHSEGMENT", 0, 0, 0, True, 2, Nothing, 0) Dim OTO_KIN As Object Set OTO_KIN = Part.FeatureManager.InsertMoveCopyBody2(0, 0, 0, 0, 0, 0, 0, i * KAT, 0, 0, True, 1) Odejmowanie ich: boolstatus = Part.Extension.SelectByID2("OTOCZKA1", "SOLIDBODY", 0, 0, 0, False, 1, Nothing, 0) boolstatus = Part.Extension.SelectByID2("GLOWICA1", "SOLIDBODY", 0, 0, 0, True, 2, Nothing, 0) Dim ODJECIE As Object Set ODJECIE = Part.FeatureManager.InsertCombineFeature(15902, Nothing, Nothing) Jest to zestaw operacji dla jednego takiego ruchu GLOWICY i OTOCZKI z odejmowaniem. Chciałbym wiedzieć czy jest możliwość podstawienia do obiektu OTOCZKA1 czy GLOWICA1 numeru indeksu porządkowego np. J=1,2,3... aby to puścić w pętli z indeksem rosnącym co krok o 1. Czyli po prostu zadeklarować GLOWICAJ i OTOCZKAJ jako obiekty bryłowe i następnie w odejmowaniu też zastosować taki indeks i puścić to wszystko odpowiednio zestrojonej w pętli. Bo jak normalnie staram się zastosować indeks porządkowy jak napisałem wyżej to SolidWorks mi tego nie uznaje: i=1 J=1 Obrót GLOWICA: boolstatus = Part.Extension.SelectByID2("GLOWICAJ", "SOLIDBODY", 0, 0, 0, False, 1, Nothing, 0) Dim GLOWICAJ+1 As Object Set GLOWICAJ+1 = Part.FeatureManager.InsertMoveCopyBody2(0, 0, 0, 0, 0, 0, 0, 0, 0, i * KAT * IODT, True, 1) Obrót OTOCZKA: boolstatus = Part.Extension.SelectByID2("OTOCZKAJ", "SOLIDBODY", 0, 0, 0, False, 1, Nothing, 0) boolstatus = Part.Extension.SelectByID2("OS", "EXTSKETCHSEGMENT", 0, 0, 0, True, 2, Nothing, 0) Dim OTOCZKAJ+1 As Object Set OTOCZKAJ+1 = Part.FeatureManager.InsertMoveCopyBody2(0, 0, 0, 0, 0, 0, 0, i * KAT, 0, 0, True, 1) Odejmowanie ich: boolstatus = Part.Extension.SelectByID2("OTOCZKAJ+1", "SOLIDBODY", 0, 0, 0, False, 1, Nothing, 0) boolstatus = Part.Extension.SelectByID2("GLOWICAJ+1", "SOLIDBODY", 0, 0, 0, True, 2, Nothing, 0) Dim ODJECIEJ As Object Set ODJECIEJ = Part.FeatureManager.InsertCombineFeature(15902, Nothing, Nothing) Czy wiecie może jak to zapisać, żeby SolidWorks uznawał rosnący parametr porządkowy opisujący obiekt w tak puszczonej pętli? Podobny program pisałem wcześniej w NX GRIP i nie było problemu z porządkowymi w kodzie, tutaj na makrach jednak nie potrafię się z tym sam uporać. (zdjęcie jak to wygląda z NX-a) |
|
|
2011-12-21, 13:29
Pomógł 0 raz(y).
|
Tutaj rysunek poglądowy o co chodzi z tym ruchem brył. |
|
|
Wykonam każde makro w SolidWorks
2012-02-01, 09:49
Pomógł 12 raz(y).
|
Rozwiązałeś już ten problem? Jeżeli nie to mogę jakoś pomóc. W następnym tygodniu będę miał chwilkę. |
|
|