Interfejs API Solidworks. Przesuwanie powierzchni

Witam wszystkich.

 

Chcąc stworzyć makro w celu zautomatyzowania tworzenia funkcji do przesuwania twarzy => na powierzchnię + następnie innej funkcji, napisałem następujący kod.

Jednak funkcja nie jest tworzona i naprawdę nie widzę dlaczego ani jak. Wybrałem moje początkowe i końcowe ściany z wymaganymi znakami, ale nic nie zostało utworzone.

Masz pomysł?

 

Dim swApp As Object
Dim swmodel As SldWorks.ModelDoc2
Dim swModelDocExt As SldWorks.ModelDocExtension
Dim swFeatMgr As SldWorks.FeatureManager
Dim swFeat As SldWorks.Feature
Dim swMoveFaceFeat jako SldWorks.MoveFaceFeatureData

Sub main()

Ustaw swApp = Application.SldWorks
Ustaw swmodel = swApp.ActiveDoc


'Sprawdź, czy otwarty plik jest plikiem części
Jeśli swmodel. GetType <> swDocPART Następnie
    MsgBox "Proszę otworzyć plik części", vbApplicationModal + vbOKOnly + vbCritical, "Wymagany plik części"
    Wyjdź z subwoofera
Zakończ jeżeli:


Dim Selectmanager jako SelectionMgr
        Ustaw Selectmanager = swmodel. Odzyskiwanie wyboru przez SelectionManager
        SWMODEL. ClearSelection2 True ' Wyczyść zaznaczenie
        
        

' Pętla dla wyboru oczekującego
            Dim bool1 As Boolean
            Niedz. y
            bool1 = Fałsz
            Rób, dopóki wartość logiczna1 = Prawda
                Jeśli Selectmanager.GetSelectedObjectType3(1, -1) = 2, to
                bool1 = Prawda
                Zakończ jeżeli:
                Dla y = 1 do 50000
                DoWydarzenia
                Następny rok
            Pętla

        Dim coord jako wariant
        Współrzędna = Selectmanager.GetSelectionPointInSketchSpace2(1, -1)
        
        Przyciemnij x0 jako pojedynczy
        Słońce y0 Jako pojedynczy
        Dim z0 As Pojedynczy
        
        x0 = Współrzędna(0)
        y0 = Współrzędna(1)
        z0 = współrzędny(2)
        
        SWMODEL. ClearSelection2 (prawda)
       
        
    Ustaw swModelDocExt = swmodel. Rozszerzenie
    Ustaw swFeatMgr = swmodel. Menedżer operacji


        
        SWMODEL. ClearSelection2 (prawda)
        
        ' Pętla dla wyboru oczekującego
            
            bool1 = Fałsz
            Rób, dopóki wartość logiczna1 = Prawda
                Jeśli Selectmanager.GetSelectedObjectType3(1, -1) = 2, to
                bool1 = Prawda
                Zakończ jeżeli:
                Dla y = 1 do 50000
                DoWydarzenia
                Następny rok
            Pętla
        Współrzędna = Selectmanager.GetSelectionPointInSketchSpace2(1, -1)
        x1 = Współrzędna (0)
        y1 = współrzędna(1)
        z1 = współrzędny(2)
        SWMODEL. ClearSelection2 (prawda)
        bret = swmodel. Extension.SelectByID2("", "TWARZ", x0, y0, z0, Prawda, 1, Nic, 0)
        bret = swmodel. Extension.SelectByID2("", "TWARZ", x1, y1, z1, Prawda, 8, Nic, 0)
      
      Set swFeat = swFeatMgr.InsertMoveFace3(swMoveFaceTypeTranslate, False, 0, 0, Nothing, Nothing, swEndConditions_e.swEndCondUpToSurface, 0)


Koniec subwoofera
 

 

Z góry dziękuję 

 

Szczęśliwy tata

głupie pytanie

Ale dlaczego tego typu makro??????????????????????

Nie rozumiem!!!!!!!!!!!

1 polubienie

Po prostu dlatego, że w mojej firmie mamy bibliotekę plików części, która służy jako baza do modelowania za pomocą polecenia insert => części.

Wstawiamy te elementy w przestrzeń, a następnie łączymy je ze sobą. Liczba elementów biblioteki może być dość duża, dlatego chcieliśmy zrobić makro, aby nieco zautomatyzować to zadanie.

Trochę w tym samym duchu, co routing

Zobacz ten link

http://help.solidworks.com/2015/French/SolidWorks/sldpiping/c_connection_route_points.htm?id=80ee80a724b34d0e8281b0af48e1a92d#Pg0&ProductType=&ProductName=

Rzeczywiście, trochę w tym samym duchu, ale mamy tylko kilka licencji premuim, więc muszę pozostać przy podstawowych funkcjach SW.

 

1 polubienie

A jeśli przypadkiem stworzyłeś swoje pionki, które są zwrócone w jego stronę, aby poruszać się między 2 płaszczyznami

Będziesz musiał tylko zmienić długość przesunięcia tych 2 płaszczyzn

Nie wiem, czy daję się zrozumieć 

Sztuczka polegałaby na tym, aby wiedzieć, jaki typ części powinien mieć przesunięcie czołowe i w stosunku do czego

@+

Jeśli dobrze rozumiem, mówisz do mnie o części w zespole. Czy się mylę?

Teraz mówię o tym w pliku dokumentu. Mamy plik części, do którego wstawiamy inne pliki części, które służą jako podstawa do budowy.

Aby być jak najbardziej kompletnym, wykonujemy mechanikę spawaną (z własnymi profilami) i rekonstruujemy całość części (plik główny) z połączeń profili, które są ustalane przez dział badawczo-rozwojowy.

Zobacz załączony zrzut ekranu, jeśli może być bardziej wymowny.

 


sans_titre.png

Witam

Jeśli dobrze zrozumiałem zastosowaną metodę (której nie mogę przetestować, ponieważ korzystam z SW2014), w ostatnim wierszu brakuje niektórych parametrów. W tym przypadku, ponieważ nic nie umieszczasz w ustawieniach ruchu, normalne jest, że nic się nie dzieje.

Musisz zdefiniować parametry X,Y,Z i prawdopodobnie kierunek funkcji.

To też sobie powiedziałem na początku, że stworzyłem zmienną typu wariant, aby dać mi wartości X, Y i Z w funkcji, ale to nic nie zmieniło.

Przyznam, że mam problem z interpretacją tej części pomocy API. Ponieważ między wartościami, które nie są używane, ponieważ jestem w stanie do powierzchni i nie jestem ślepy, mam tendencję do myślenia, że obsługuje wartość translacji jak dużą, ponieważ ma powierzchnię początkową i końcową (dito, jakbyśmy wykonywali tę funkcję ręcznie).

edit Zastąpienie fragmentu pomocy łączem do pomocy elektronicznej

http://help.solidworks.com/2015/English/api/sldworksapi/SolidWorks.Interop.sldworks~SolidWorks.Interop.sldworks.IFeatureManager~InsertMoveFace3.html

Witam

Nie jestem pewien, czy zrozumiałem, ale aby utworzyć powiązanie, funkcja move face może być równie dobrze powiązana z płaszczyzną odniesienia, wybierając translację zamiast offsetu. Następnie wystarczy dodać właściwość, aby zmienić wartość odsunięcia lub utworzyć płaszczyznę zgodnie ze zmiennym odniesieniem (początek odległości, powierzchnia ciała, ...).

 

Dlatego zależy mi na tym, aby warunek był używany aż do powierzchni, która w przypadku wariacji zawsze będzie podążać za elementami.

Testowałem w międzyczasie modyfikację makra, jeśli dam mu warunek ślepego końca z wartościami w funkcji insertmoveface3 to jest w porządku, jednak warunek końcowy nie jest tym, który spełniałby nasze oczekiwania.

Poprzednio (przed przejściem na SW 2015 wykonywaliśmy wyciągnięcia szkicowe przekonwertowane na powierzchnię następnego korpusu)

Po wielu testach rozwiązanie to jest szybsze do wdrożenia, a przede wszystkim znacznie mniej czasochłonne w czasie przebudowy)

 

Myślę, że musimy dodać wybór orientacji funkcji (uwagi akapitowe) ze względu na użycie funkcji swMoveFaceTypeTranslate. W elemencie selctionbyID2 potrzebny jest wybór z parametrem mark ustawionym na wartość 2.

Do przetestowania.

Jest to jedno z testowanych przeze mnie rozwiązań i niestety nic to nie zmieniło.

 

 

Ok, zrozumiałem, rzeczywiście  jest to skomplikowane, jak można zdefiniować automatyczną orientację w zależności od liczby łączników pionowych i poziomych ? To projekt, który wykracza poza moje umiejętności, nie mogę Ci pomóc dsl. W przeciwnym razie korzystanie z funkcji obramowania bossa / bazy nie byłoby łatwiejsze?

Witam wszystkich, po bardzo długich próbach, oto rozwiązanie 

 

Ustaw swApp = Application.SldWorks
Ustaw swmodel = swApp.ActiveDoc
Ustaw swFrame = swApp.Frame
Ustaw swModelDocExt = swmodel. Rozszerzenie
Ustaw swFeatMgr = swmodel. Menedżer operacji
z = 0
nb_profil = 0
'Sprawdź, czy otwarty plik jest plikiem części
Jeśli swmodel. GetType <> swDocPART Następnie
    MsgBox "Proszę otworzyć plik części", vbApplicationModal + vbOKOnly + vbCritical, "Wymagany plik części"
    Wyjdź z subwoofera
Zakończ jeżeli:

MsgBox "Wybierz powierzchnię początkową, a następnie powierzchnię końcową, aby wygenerować łącze" & vbLf & "Powtórz tyle razy, ile to konieczne" & vbLf & vbLf & "Aby przełączyć się na scalanie ciał, naciśnij F2", vbInformation + vbApplicationModal + vbOKOnly, "Tworzenie funkcji przesuwa twarz"

Selekcja:
Dim Selectmanager jako SelectionMgr
        Ustaw Selectmanager = swmodel. Odzyskiwanie wyboru przez SelectionManager
        SWMODEL. ClearSelection2 True ' Wyczyść zaznaczenie
' Pętla dla wyboru oczekującego
    Rób, aż Selectmanager.GetSelectedObjectType3(1, -1) = SwConst.swSelFACES lub GetAsyncKeyState(113) <> 0
      DoWydarzenia
      swFrame.SetStatusBarText "Proszę wybrać pierwszą stronę lub nacisnąć F2, aby przejść do tworzenia funkcji łączenia" ' wyświetlanie komunikatu na pasku oprogramowania
    Pętla
Przyciemnij swFace jako SldWorks.Face2
Debug.Print GetAsyncKeyState(112)
Debug.Print GetAsyncKeyState(123)
nb = Selectmanager.GetSelectedObjectCount2(-1)
Jeśli nb <> 0 to
    Ustaw swFace = Selectmanager.GetSelectedObject6(1, -1)
    Dim swEntity jako SldWorks.Entity
    Ustaw swEntity = swFace
    Ustaw treść = swFace.GetBody
    Profil = Ciało. Nazwa
    nb_car = (Len(profil) - Len(Replace(profil, "<", "", , , 0))) / Len("<")
        Jeśli nb_car <> 0, to
             profil = Lewo(profil, (Len(profil) - 1))
             profile = "_" & Split(Split(Split(profil, "<")(nb_car), ">")(0), " ")(0) & "_" & nb_profil
             Body. Nazwa = profil
            nb_profil = nb_profil + 1
        Zakończ jeżeli:
Inaczej
    SWMODEL. ClearSelection2 Prawda
    IdźDo łączenia
Zakończ jeżeli:

SWMODEL. ClearSelection2 Prawda

' Pętla dla wyboru oczekującego
    Podczas gdy Selectmanager.GetSelectedObjectType3(1, -1) <> SwConst.swSelFACES
      DoWydarzenia
      swFrame.SetStatusBarText "Proszę wybrać drugą stronę" ' wyświetlanie komunikatu na pasku oprogramowania
    Wend
    
Ustaw swFace = Selectmanager.GetSelectedObject6(1, -1)

SWMODEL. ClearSelection2 Prawda
    
swEntity.SelectByMark Prawda, 1
swEntity.SelectByMark Prawda, 2
Ustaw swEntity = swFace
swEntity.SelectByMark Prawda, 8
Ustaw treść = swFace.GetBody
Profil = Ciało. Nazwa
nb_car = (Len(profil) - Len(Replace(profil, "<", "", , , 0))) / Len("<")
Jeśli nb_car <> 0, to
    profil = Lewo(profil, (Len(profil) - 1))
    profile="_" & Split(Split(Split(profil, "<")(nb_car), ">")(0), " ")(0) & "_" & nb_profil
    Body. Nazwa = profil
    nb_profil = nb_profil + 1
Zakończ jeżeli:

Tworzenie funkcji Move Face + Sprawdzanie tworzenia
Set swFeat = swFeatMgr.InsertMoveFace3(swMoveFaceTypeTranslate, False, 0, 0, Nothing, Nothing, 3, 0)
Jeśli swFeat jest niczym, to
    Set swFeat = swFeatMgr.InsertMoveFace3(swMoveFaceTypeTranslate, True, 0, 0, Nothing, Nothing, 3, 0)
    Jeśli swFeat jest niczym, to
        Wybierz wielkość liter MsgBox("Nie można utworzyć funkcji powiązania" & vbLf & vbLf & "Czy chcesz ponowić próbę połączenia?", vbApplicationModal + vbCritical + vbYesNo, "Błąd podczas budowania")
        Skrzynka vbYes
            Wybór Idź do
        Skrzynka vbNo
        Zakończ wybór
    Inaczej
        Wybierz wielkość liter MsgBox("Czy chcesz utworzyć dodatkowe powiązanie?", vbApplicationModal + vbCritical + vbYesNie, "Błąd podczas generowania tego")
        Skrzynka vbYes
            Wybór Idź do
        Skrzynka vbNo
        Zakończ wybór
    Zakończ jeżeli:
Inaczej
z = z + 1
Zachowaj ReDim feat_name(z)
feat_name(z) = swFeat.Name
Wybór Idź do
Zakończ jeżeli: