Makro do wyodrębniania wymiarów wymiarowych z Solidworks

Cze wszystkim

Pracuję nad automatyzacją procesu CAD/CAM i chciałbym mieć możliwość wyodrębnienia z części lub złożenia Solidworks wymiarów i ich wymiarów (dla każdej funkcji części) do zewnętrznego pliku.

Dzięki panu Boutherandowi w starym artykule na ''myCadblog'' znalazłem makro, które pozwala na wyodrębnienie tych danych za pomocą pliku Excel. Tylko to makro wydaje się być przestarzałe (patrz kod poniżej).

Czy mógłbyś mi pomóc go zaktualizować? (FYI: korzystam z Solidworks 2014)

Z góry bardzo dziękujemy za Twoją opinię!

Rzymski

 

  • Sub AddAllDimensions()
  • Przyciemnij swDisplayDimension jako SldWorks.DisplayDimension
  • Dim swDimension jako SldWorks.Dimension
  • Dim swFeature jako SldWorks.Feature
  • W przypadku błędu GoTo SiErr
  • 'Pobiera aplikację SolidWorks
  • Ustaw swApp = CreateObject("SldWorks.Application")
  • "Dostajemy aktywny dokument
  • Ustaw swDoc = swApp.ActiveDoc
  • 'Pobiera pierwszą funkcję
  • Ustaw swFeature = swDoc.FirstFeature
  •     
  • Jeśli swFeature jest niczym, to
  • MsgBox "dokument jest pusty", vbWykrzyknik
  • Wyjdź z subwoofera
  • Zakończ jeżeli:
  •  
  • Robić
  • "Dla każdej funkcji pobieramy wymiary
  • Ustaw swDisplayDimension = swFeature.GetFirstDisplayDimension
  • Jeśli nie swDisplayDimension to nic to
  • Robić
  • Ustaw swDimension = swDisplayDimension.GetDimension
  • Dodaj do listy
  • Wywołaj metodę AddDimToSheet(swDisplayDimension)
  • Set swDisplayDimension = swFeature.GetNextDisplayDimension(swDisplayDimension)
  • Pętla, dopóki swDisplayDimension nie będzie niczym
  • Zakończ jeżeli:
  • Ustaw swFeature = swFeature.GetNextFeature
  • Pętla, aż swFeature nie stanie się niczym
  •  
  • Wyjdź z subwoofera
  •  
  • SiErr:
  • Ustaw swDisplayDimension = Nic
  • Podsumowanie Następny
  • Koniec subwoofera

 

 

1 polubienie

może to być problem z językiem makr 32-bitowych do 64-bitowych lub VBA

http://help.solidworks.com/2013/French/WhatsNew/c_application_programming_interface_wn2012.htm?format=P

@+ ;-)

1 polubienie

Zmieniłem nieznacznie makro, teraz wyświetla kursy i ich wartości

Pozostaje tylko dodać swoje zabiegi

Oto ona 

 


macro1.zip
8 polubień

@gt22: Dziękuję  , przyjrzę się uważnie dokumentowi.

 

@jfaradon: Dziękuję za modyfikację makra, rzeczywiście odzyskuje wymiary, ale tylko pod solidworks, wyświetlając msgbox, prawda?

Zasadniczo makro działa w pliku Excela, aby móc wyodrębnić wymiary w komórkach.

 

Czy można go uruchomić w Excelu? 

 

Dziękuję za szybkie odpowiedzi!

Dobry wieczór

 

tylko szybkie pytanie wyodrębnij wartości ok, ale jeśli masz tolerancje, jak to będzie z obróbką CAD/CAM?

Ponieważ uważam, że pytanie jest bardzo interesujące, ale ten punkt dotyczący tolerancji sprawia, że jestem zaburzony!

 

Dziękuję.

2 polubienia

Dobry wieczór Matthieu, 

 

Tolerancje nie mają znaczenia w naszym procesie przemysłowym (dziwne stwierdzenie wyrwane z kontekstu:) ), ale jest. Aplikacja jest dość wyjątkowa, daleka od klasycznej mechanicznej precyzji...

To, czego potrzebuję w projekcie, to biblioteka funkcji, gdzie obróbka jest ustandaryzowana w swoich kształtach (szkic + funkcja usuwania materiału) i dla których za każdym razem na nowo definiuję wymiary wymiarów, aby narysować swoje części i je złożyć. 

Z rysunku każdej części lub zespołu chcę wyodrębnić nomenklaturę każdej części, funkcje zastosowane do każdej części (obróbka w produkcji) oraz wymiary, których użyłem dla każdej funkcji. Program produkcyjny potrzebuje tylko nazw części, operacji zastosowanych do tych części oraz niektórych wymiarów, które definiują położenie elementów na części (pozycja obróbki w produkcji).

 

To jest ta historia. :)

 

Dobranoc. 

2 polubienia

Cze wszystkim

W końcu udało mi się uruchomić makro! 

Zobacz wynik w załączeniu...

Z drugiej strony wydaje się, że działa tylko dla części, a nie dla złożeń, podczas gdy w kodzie makra nie ma specyfikacji .part, czy to normalne?

 

Miłego dnia!

 

 


extraction_test.jpg

Rzymski

 

Oto modyfikacja uwzględniająca zespoły

Kod części pobierania wartości elementu jest taki sam

 

 

 

Dim swApp jako SldWorks.SldWorks

Dim swDoc jako SldWorks.ModelDoc2

Dim swAss jako SldWorks.AssemblyDoc

Przyciemnij swPart jako SldWorks.PartDoc

Dim swFeature jako SldWorks.Feature

 

Sub main()

 

 

    W przypadku błędu GoTo SiErr

    'Pobiera aplikację SolidWorks

    Ustaw swApp = CreateObject("SldWorks.Application")

    "Dostajemy aktywny dokument

    Ustaw swDoc = swApp.ActiveDoc

    

    Wybierz wielkość liter swDoc.GetType

        Ramka swDocumentTypes_e.swDocPART

            Ustaw swPart = swDoc

            Wywołaj funkcję trawersu(swPart)

        Pudełko swDocumentTypes_e.swDocASSEMBLY

            Ustaw swAss = swDoc

            Dim swComponents jako wariant

            swComponents = swAss.GetComponents(Fałsz)

            Dla i = 0 TB UBound(swComponents)

                Wywołaj metodę TraverseFeature(swComponents(i). GetModelDoc)

            Dalej i

        Ramka swDocumentTypes_e.swDocDRAWING

            MsgBox "Nie na planie", vbExclamation

            Koniec

    Zakończ wybór

    

 

SiErr:

    MsgBox Err.Description, vbCritical

    Koniec

Koniec subwoofera

 

Sub Traverse Feature(ByRef swDoc As SldWorks.ModelDoc2)

    Przyciemnij swDisplayDimension jako SldWorks.DisplayDimension

    Dim swDimension jako SldWorks.Dimension

    Dim swFeature jako SldWorks.Feature

 

    ' Jeśli dokument nie istnieje (np. jest niedostępny, komponent został usunięty)

    Jeśli swDoc jest niczym, wyjdź z sub

    

    

    'Pobiera pierwszą funkcję

    Ustaw swFeature = swDoc.FirstFeature

    

    Jeśli swFeature jest niczym, to

        MsgBox "dokument jest pusty", vbWykrzyknik

        Wyjdź z subwoofera

    Zakończ jeżeli:

 

    Robić

        "Dla każdej funkcji pobieramy wymiary

        Ustaw swDisplayDimension = swFeature.GetFirstDisplayDimension

        Jeśli nie swDisplayDimension to nic to

            Robić

                Ustaw swDimension = swDisplayDimension.GetDimension

                Dodaj do listy

                Jeśli MsgBox(swDimension.FullName & " = " & swDimension.GetValue2(""), vbOKCancel, swDoc.GetTitle) = vbCancel Then End

                Set swDisplayDimension = swFeature.GetNextDisplayDimension(swDisplayDimension)

            Pętla, dopóki swDisplayDimension nie będzie niczym

        Zakończ jeżeli:

        Ustaw swFeature = swFeature.GetNextFeature

    Pętla, aż swFeature nie stanie się niczym

 

    Wyjdź z subwoofera

 

SiErr:

    MsgBox Err.Description, vbCritical

    Koniec

Koniec subwoofera

9 polubień

Dobry wieczór jfaradon, 

 

Przepraszam, właśnie zdałem sobie sprawę, że to Ty opracowałeś oryginalne makro i powiązany z nim plik Excela... :S

 

Dziękuję za nowy kod, ale mam problem z integracją go z bieżącym zestawem makr w pliku Excel. Czy muszę zastąpić cały kod ''Sub AddAlldimensions()'' nowym? Nie byłem dziś w BE, aby testować...

 

Dziękuję bardzo.

 

Dobranoc. 

 

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Witam!

 

Zintegrowałem całość dziś rano, działa!!

Zadeklarowałem ''i'' jako liczbę całkowitą i to jest w porządku. 

 

Z drugiej strony mam tylko błąd msgbox na końcu (patrz załączony obrazek) Nie widzę, skąd to pochodzi...

 

W każdym razie bardzo dziękuję. Nie miałem odruchu forów, jeśli chodzi o projektowanie, a Twoje umiejętności i responsywność są niezwykłe.

 

Miłego dnia!

 

Rzymski


msgbox_error.jpg

Witam, co musisz dodać, aby wyodrębnić go w pliku Excel? czy txt? 

2 polubienia

Witam i dziękuję za ten kod. Starałem się wykorzystać to jako inspirację do wyodrębnienia wymiarów jako adnotacji w złożeniu. W związku z tym zadaję tutaj moje pytanie, które wydaje mi się bardziej rozsądne.

Wymiary (pomiędzy 2 komponentami) mają nazwę typu RD1@annotations. Czy można uzyskać dostęp do ich wartości za pomocą makra? Zajrzałem do API, ale wysycham (FeatureByName?)

Drugie pytanie w tej samej kolejności, chciałbym kontrolować wartość contarrinte w montażu.

Celem jest zmiana kąta i pobranie zmierzonych wymiarów za pomocą adnotacji bezpośrednio w programie Excel.

Dziękuję za pomoc.

1 polubienie
Witam, stare pytania są bardzo mało śledzone na tym forum, ponieważ nie ma możliwości sortowania według ostatniej aktywności. Jeśli masz pytanie, nie wahaj się zadać go na forum, a tam otrzymasz szybkie odpowiedzi!