Funkcję pomiaru („Zmierz”) można wykorzystać w naszym makro, jednak według mnie nie jest to najlepsze rozwiązanie. W SOLIDWORKS, jeżeli chcemy zmierzyć obszar, nie może być mowy o pomyłce i nie możemy przez przypadek zaznaczyć punktu, krawędzi, szkicu itd. poza naszymi zaznaczonymi płaszczyznami. „Nieprawidłowa kombinacja wybranych elementów”? O tak, częsty komunikat. My chcemy napisać makro, które jednym kliknięciem dostarczy nam informacji tylko o wartości powierzchni zaznaczonych płaszczyzn. Dlatego też, pozbyliśmy się zbędnego kodu wygenerowanego podczas nagrywania makra i dopisaliśmy własny.
Dim selCount As Long = 0Dim swselMgr As SelectionMgr = swDoc.SelectionManager
Dim selType As swSelectType_e
Dim selObject As Object
Dim swFace As Face2 = Nothing
Dim value As Double = 0.0
selCount = swselMgr.GetSelectedObjectCount()
If Not selCount = 0 Then
For i As Integer = 1 To selCount
selType = swselMgr.GetSelectedObjectType2(i)
If selType = swSelectType_e.swSelFACES Then
selObject = swselMgr.GetSelectedObject2(i)
swFace = selObject
value += swFace.GetArea
swFace = selObject
value += swFace.GetArea
End If
Next
MsgBox("Wartość zaznaczenia = " & Math.Round(value * 1000000, 2) & " mm^2")
ElseEnd If
Potrzebujemy informacji o ilości i o typie obiektów zaznaczonych na modelu. Zadeklarowaliśmy m.in zmienną selCount typu Long, której zadaniem jest właśnie przechowanie ilości zaznaczonych obiektów na modelu oraz selType, do której przypisywać będziemy jego typ. Dodatkowo musimy mieć zmienną typu SelectionMgr (manager zaznaczenia dokumentu), selObject, swFace (ścianę modelu) oraz zamienną value, do której będziemy dodawać kolejno powierzchnie zaznaczonych „ścian”:
value += swFace.GetArea
Aby pobrać informacje o ilości zaznaczonych „obiektów”, musimy skorzystać z funkcji GetSelectedObjectCount, dostępnej w „managerze zaznaczeń” SelectionMgr dokumentu swDoc.
selCount = swselMgr.GetSelectedObjectCount()
Funkcja GetSelectedObjectType2, jak sama nazwa wskazuje, umożliwia pobranie informacji o typie zaznaczonego obiektu:
selType = swselMgr.GetSelectedObjectType2(i)
Takich obiektów mamy naprawdę wiele: począwszy od zaznaczonego punktu na szkicu (swSelSKETCHPOINTS), zaznaczonej krawędzi (swSelEDGES), po zaznaczoną operację, a kończąc na komponencie (swSelCOMPONENTS).
W naszym przypadku potrzebujemy zaznaczonej ściany (swSelFACES), dlatego w kodzie, korzystając z pętli For i instrukcji warunkowej If „filtrujemy” tylko ściany:
For i As Integer = 1 To selCount
selType = swselMgr.GetSelectedObjectType2(i)
If selType = swSelectType_e.swSelFACES Then
selObject = swselMgr.GetSelectedObject2(i)
swFace = selObject
value += swFace.GetArea
swFace = selObject
value += swFace.GetArea
End If
Next
Uwaga! Zamiast deklaracji Dim selType As swSelectType_e możemy zapisać Dim selType As Integer. selType jest zmienną typu wyliczeniowego. Z punktu widzenia programisty pozwala to zwiększyć wydajność pracy. Jak to działa? Chodzi o odwoływanie się do wartości przy użyciu rozpoznawalnych nazw a nie liczb. Zatem kod powyżej możemy również zapisać w postaci:
For i As Integer = 1 To selCount
selType = swselMgr.GetSelectedObjectType2(i)
If selType = 2 Then
selObject = swselMgr.GetSelectedObject2(i)
swFace = selObject
value += swFace.GetArea
swFace = selObject
value += swFace.GetArea
End If
Nexti też będzie dobrze.
Jeszcze tylko linijka kodu z wiadomością dla użytkownika
MsgBox("Wartość zaznaczenia = " & Math.Round(value * 1000000, 2) & " mm^2")
i makro gotowe.
W kolejnym kroku musimy „zbudować nasze makro” a następnie uruchomić w SOLIDWORKS®. Aby skompilować nasz program (zbudować) zaznacz plik projektu w okienku „Project Explorer”, a następnie klikając prawym przyciskiem myszy wybierz z menu kontekstowego „Build” lub „Rebuild”.
Jeżeli poprawnie napisaliśmy program to na dolnym pasku VSTA otrzymamy komunikat „Rebuild All succeeded”. Jeżeli program posiada błędy to zostaną one wylistowane w okienku „Error List” – należy je naprawić.

Właśnie wygenerowaliśmy plik Macro1.dll w katalogu „bin” projektu VSTA, który możemy uruchomić jako zwykłe makro lub podpiąć na stałe pod przycisk:
- Otwórz okienko „Dostosuj” (Narzędzia->Dostosuj).
- Wybierz zakładkę „Polecenia”.
- Znajdź i zaznacz kategorię „Makra”.
- Przeciągnij przycisk
na dowolny pasek narzędziowy.
- Uzupełnij okienko.
- Wybierz obraz
- Przypisz Etykietkę narzędzi i Monituj
- Podaj ścieżkę na dysku do pliku Macro1.dll
- Wybierz metodę „main”
- Opcjonalnie wybierz skrót klawiszowy, które będzie uruchamiał program np.
- Kliknij OK.
Makro jest gotowe do użycia. Muszę jednak zaznaczyć, że mogą pojawić się problemy. Szczególnie w przypadku starszych wersji SW niż SOLIDWORKS 2011 SP3. SolidWorks podczas uruchamiania pliku Macro1.dll może się zawieszać lub pokazywać komunikat o problemach z uruchomieniem pliku dll. Co w takiej sytuacji? Należy ponownie prze-kompilować program i przetestować działanie.
Bądź cierpliwy i wytrwały a zostanie Ci to wynagrodzone.Copyright © ADKSolid. All rights reserved
Brak komentarzy:
Prześlij komentarz