Tworzenie makra dla warstw

Cze wszystkim
Nigdy nie kodowałem makra i chciałbym się nauczyć, ponieważ napotykam problem:

Obecnie szukam " prostego " rozwiązania do umieszczania części solidworks w warstwie podczas rysowania (na razie w oprogramowaniu jedynym sposobem jest ukrycie części, których nie chcę, następnie tych, które pozostały, zaznaczanie ich jedna po drugiej, a następnie przypisywanie ich do warstwy. Dość powiedzieć, że jest to żmudne).
Innym sposobem jest wyeksportowanie planu z kolorami, a następnie w oprogramowaniu 2D, takim jak Autocad, przypisanie warstw zgodnie z kolorami.
Krótko mówiąc, piekło... Przeglądam wszystkie fora i strony w języku angielskim i francuskim, ale nic nie mogę znaleźć... Wydaje mi się jednak, że nie tylko ja mogę być w tym impasie.

Czy znasz makro zdolne do łączenia części bezpośrednio z warstwami? (Mianowicie, że moje zespoły są takie same z tymi samymi częściami i kilkoma częściami. Ale przy wprowadzeniu na rynek 200 zestawów sortowanie każdego elementu może zająć trochę czasu).

W przeciwnym razie, czy wiesz, gdzie mogę nauczyć się w sieci, podstaw kodowania w VBA? Bo myślę, że to będzie jedyne możliwe rozwiązanie.

Z góry dziękuję
Pozdrowienia
Axel

Witam;

Bądź ostrożny, Solidworks nie zarządza warstwami tak, jak zrobiłby to Autocad...
Możliwe jest utworzenie pliku rzutowania do nagrywania rysunków w formatach DWG i DXF (plik-> zapisać jako DWG/DXF, a następnie " Opcja ")

image

→ odznaczyć opcję " Nie pokazuj projekcji przy każdym nagraniu ", aby uzyskać dostęp do ustawień w celu dostosowania: (Przykład)


https://help.solidworks.com/2022/french/Solidworks/slddxf/t_map_entities_on_export_to_dwg.htm?rid=131218

Jednak ogólnie rzecz biorąc, Solidworks obsługuje tylko typy obrysów (i niektóre kolory obrysu), ale nie komponenty 3D...

Jeśli chodzi o makra, oto kilka witryn, w których można zacząć zapoznawać się z programowaniem VB...

i bardziej ogólnie (VBA zorientowany na Excela, ale nadal przydatny):

i pomocników API Solidworks.

Uwaga: na początek nie polecam automatycznego nagrywania makr i generatywnej sztucznej inteligencji (chociaż pewien postęp jest zauważalny w przypadku niektórych " AI "...)

No i oczywiście to Forum...

Pozdrowienia.

3 polubienia

Dziękuję za odpowiedź :slight_smile:
Rzeczywiście, znam też metodę eksportu, ale nie jest to do końca to, czego szukam.
Udało mi się ręcznie nałożyć warstwę na część lub cały komponent, więc mówię sobie, że można to zautomatyzować, to bardziej w tym kierunku blokuję.
Dziękuję za linki :slight_smile: czuję, że mózg będzie trochę palić

O ile łatwiej byłoby " zautomatyzować " zmianę warstwy komponentu za pomocą makra?
O ile komponenty, o których mowa, nie są nadal takie same (komponenty biblioteczne?), zawsze będziesz musiał przejść przez fazę " wyboru " części lub złożenia, a następnie, prawdopodobnie, wybór warstwy, do której chcesz je wyeksportować...
Uwaga: Uważaj, aby nie pomylić stylu linii, czcionki linii i warstw...

2 polubienia

Oto przykład podany przy użyciu interfejsów API Solidworks:
https://help.solidworks.com/2022/english/api/sldworksapi/Put_Assembly_Components_in_Drawing_View_on_Different_Layers_Example_VB.htm?verRedirect=1

… Kod pomocy interfejsu API z kilkoma dodatkowymi komentarzami:

Option Explicit

' Cette sous-procédure modifie le calque d'un composant dans un document de dessin SolidWorks
Private Sub ChangeComponentLayer(swApp As SldWorks.SldWorks, swDraw As SldWorks.DrawingDoc, swDrawComp As SldWorks.DrawingComponent, sLayerName As String)

    Dim bRet As Boolean

    ' Former un nom de calque valide en remplaçant les symboles 
    ' barre oblique (/) et arobase (@) par des traits de soulignement (_)
    sLayerName = Replace(sLayerName, "/", "_")
    sLayerName = Replace(sLayerName, "@", "_")

    ' Créer un calque avec le nom formé et ajouter une assertion de débogage
    bRet = swDraw.CreateLayer(sLayerName, "layer for " & sLayerName, 0, swLineCONTINUOUS, swLW_NORMAL, True): Debug.Assert bRet
    
    ' Définir le calque du composant de dessin sur le nouveau calque
    swDrawComp.Layer = sLayerName

End Sub

' Cette sous-procédure traite un composant de dessin, modifie son calque, 
' et traite récursivement tous ses composants enfants
Sub ProcessDrawingComponent(swApp As SldWorks.SldWorks, swDraw As SldWorks.DrawingDoc, swDrawComp As SldWorks.DrawingComponent, sPadStr As String)

    Dim vDrawCompChildArr As Variant
    Dim vDrawCompChild As Variant
    Dim swDrawCompChild As SldWorks.DrawingComponent

    ' Afficher le nom du composant dans la fenêtre de débogage
    Debug.Print sPadStr & swDrawComp.Name
    
    ' Changer le calque du composant actuel
    ChangeComponentLayer swApp, swDraw, swDrawComp, swDrawComp.Name

    ' Obtenir tous les composants enfants du composant actuel
    vDrawCompChildArr = swDrawComp.GetChildren
    
    ' Vérifier s'il y a des enfants et les traiter récursivement
    If Not IsEmpty(vDrawCompChildArr) Then
        For Each vDrawCompChild In vDrawCompChildArr
            Set swDrawCompChild = vDrawCompChild
            ' Appel récursif pour traiter chaque composant enfant
            ProcessDrawingComponent swApp, swDraw, swDrawCompChild, sPadStr + "  "
        Next
    End If

End Sub

' Cette procédure principale initialise les objets SolidWorks nécessaires 
' et commence à traiter les composants de dessin sélectionnés
Sub main()

    Dim swApp As SldWorks.SldWorks
    Dim swModel As SldWorks.ModelDoc2
    Dim swDraw As SldWorks.DrawingDoc
    Dim swSelMgr As SldWorks.SelectionMgr
    Dim swView As SldWorks.View
    Dim swDrawComp As SldWorks.DrawingComponent
    Dim bRet As Boolean

    ' Obtenir l'instance active de SolidWorks
    Set swApp = Application.SldWorks
    
    ' Obtenir le document actif (qui devrait être un dessin)
    Set swModel = swApp.ActiveDoc
    Set swDraw = swModel
    
    ' Obtenir le gestionnaire de sélection et la vue sélectionnée
    Set swSelMgr = swModel.SelectionManager
    Set swView = swSelMgr.GetSelectedObject6(1, -1)
    
    ' Obtenir le composant de dessin racine de la vue sélectionnée
    Set swDrawComp = swView.RootDrawingComponent

    ' Afficher le nom du fichier et la vue sélectionnée dans la fenêtre de débogage
    Debug.Print "File = " & swModel.GetPathName
    Debug.Print "  " & swView.Name & "  [" & swView.Type & "]"

    ' Commencer le traitement du composant de dessin racine
    ProcessDrawingComponent swApp, swDraw, swDrawComp, "    "

End Sub

I kilka wyjaśnień dotyczących różnych procedur:

  • Podprocedura ChangeComponentLayer :
  • Przekształć nazwę warstwy, aby uniknąć nieprawidłowych znaków i tworzenia warstwy w dokumencie rysunku.
  • Podprocedura ProcessDrawingComponent :
  • Rekurencyjne przetwarzanie komponentów rysunku i przełączanie warstw dla każdego komponentu, a także wyświetlanie informacji debugowania.
  • Postępowanie mainzasadnicze :
  • Zainicjuj niezbędne obiekty SolidWorks, wybierz widok i komponenty, a następnie rozpocznij proces przetwarzania komponentu.
3 polubienia

… i mały samouczek dotyczący wykonywania tego makra na rysunku Solidworks...
Bądź ostrożny, na kopii posła do Parlamentu Europejskiego... Nigdy nie testujesz makra na oryginalnych plikach, ryzykując utratę wszystkiego... (rzadko zdarza się, że możesz wrócić z MAcro).

Krok 1: Przygotuj środowisko

  1. Otwieranie SolidWorks
    Uruchom SolidWorks i otwórz dokument rysunku (Drawing), który chcesz przetworzyć za pomocą makra.
  2. Weryfikowanie komponentów i widoków
    Upewnij się, że rysunek zawiera komponenty i widoki, którymi chcesz manipulować. Makro działa na komponenty rysunku i ich warstwy (layers).

Krok 2: Uzyskaj dostęp do edytora makr VBA

  1. Otwieranie Edytora makr
    W SolidWorks przejść do menu Narzędzia > Makro > Nowe , aby utworzyć nowe makro, lub Uruchom , aby otworzyć istniejące makro.
  2. Tworzenie nowego makra
  • Jeżeli zdecydujesz się utworzyć nowe makro, SolidWorks poprosi Cię o zapisanie pliku z rozszerzeniem .swp.
  • Nadaj makrowi nazwę, na przykład ChangeLayerMacro.swp, i zapisz je w łatwo dostępnym miejscu.

Krok 3: Skopiuj kod VBA do edytora

  1. Otwieranie edytora języka Visual Basic for Applications (VBA)
    Po utworzeniu pliku makra, SolidWorks otworzy edytor VBA.
  2. Wklej kod VBA
  • Skopiuj kod VBA (podany powyżej) do edytora VBA.
  • Wklej go do pustego modułu makra, który został utworzony automatycznie.
  • Upewnij się, że cały kod został wklejony poprawnie, w tym deklaracje i wszystkie podprocedury Option Explicit .

Krok 4: Zapisz i zamknij edytor VBA

  • Kliknij przycisk Plik > Zapisz lub użyj skrótu Ctrl + S, aby zapisać makro.
  • Zamknij edytor VBA po zapisaniu makra.

Krok 5: Uruchom makro w SolidWorks

  1. Wybierz widok na rysunku
    Przed uruchomieniem makra należy się upewnić, że wybrano widok rysunku w bieżącym dokumencie, ponieważ makro oczekuje, że zostanie wybrany widok w celu przetworzenia jego składników.
  2. Uruchamianie makra
    Wróć do menu Narzędzia > Uruchom > makr.
  • Przejrzyj swoje pliki i wybierz makro .swp , które zapisałeś wcześniej.
  • Kliknij przycisk Otwórz , aby uruchomić makro.

Uwaga: Osobiście wolę uruchamiać makro bezpośrednio z edytora VBA w trybie krok po kroku (F8) i analizować działania i wyniki w oknie wykonywania edytora, jednocześnie obserwując okno zmiennych lokalnych

Krok 6: Sprawdź wyniki

  • Po wykonaniu makra, w oknie bezpośrednim w Edytorze VBA (jeśli jest otwarte) lub w konsoli wyjściowej SolidWorks zostaną wyświetlone wyniki makra, w tym nazwy przetwarzanych komponentów i ich nowych warstw.
  • Sprawdzić na rysunku SolidWorks, czy komponenty zostały przeniesione do nowych warstw zgodnie z oczekiwaniami.

Punkty do sprawdzenia i rozwiązania problemów

  • Zgodność wersji : Upewnij się, że posiadana wersja SolidWorks obsługuje uruchamianie makr VBA. W zależności od wersji mogą obowiązywać pewne ograniczenia.
  • Zabezpieczenia makr : Jeżeli SolidWorks wyświetla ostrzeżenie o zabezpieczeniach makr, należy upewnić się, że ustawienia zabezpieczeń makr zostały ustawione tak, aby zezwalały na wykonywanie.
  • Komunikaty o błędach : Jeśli wystąpią błędy, sprawdź, czy wybrano prawidłowy widok i czy rysunek jest poprawnie skonfigurowany z komponentami.

Streszczenie

Wykonując poniższe kroki, można użyć makra VBA do zmiany warstw komponentów na rysunku SolidWorks w sposób zautomatyzowany i wydajny. To makro jest szczególnie przydatne do organizowania złożonych rysunków z wieloma komponentami poprzez automatyczne tworzenie i przypisywanie warstw na podstawie nazw komponentów.

4 polubienia

Bardzo dziękuję za te elementy, to bardzo miłe.
Więc faktycznie wypróbowałem to makro (początkowe na stronie, nie to, które skopiowałeś). Chodzi o to, że tworzy jedną linię warstwy na sztukę. Kończę więc z dużą ilością warstw, co jest niewygodne i bezużyteczne, ale to już początek.

W twoim poprzednim pytaniu o to, co byłoby łatwiejsze w automatyzacji, chodzi o to, że w rzeczywistości kończę z tymi samymi częściami powtórzonymi x razy. Równie dobrze możesz więc pogrupować wszystko za pomocą makra, zamiast ręcznie wybierać te elementy, a następnie umieszczać je na odpowiednich warstwach.

W rzeczywistości muszę ustawić CAPM, ale zachowując obecną praktykę firmy polegającą na używaniu warstw 2D do eksportu klientów (archi lub BE). A celem jest uniknięcie marnowania niepotrzebnego czasu, który zniechęci moich kolegów, gdy zamierzam dostarczyć projekt wszystkim.
Obecnie używam oprogramowania Swood na Solidworks i nie ma obaw o kodowanie, jest to bardzo proste, nawet w przypadku skomplikowanych komponentów.
Ale rysunek musi być również łatwo dostępny dla moich kolegów.

Będę nadal pracować nad tym problemem z twoimi elementami!!
Jeszcze raz dziękuję za poświęcony czas, jest super miło
Miłego dnia

W przeciwnym razie w pakiecie MyCADTools w Visiativ dostępne jest to narzędzie, jeśli masz problemy z opracowaniem makra:

W końcu możesz przetestować go w wersji próbnej, aby sprawdzić, czy możesz dostać to, czego chcesz.
W szczególności możliwe jest przesunięcie części na określoną warstwę zgodnie z właściwością:
image

3 polubienia

:slight_smile: Witam Dziękuję bardzo, postaram się zobaczyć, jak to pójdzie!! Wydaje się, że taki jest zamysł. Dzięki za wskazówkę:wink:

1 polubienie