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.
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 ")
→ odznaczyć opcję " Nie pokazuj projekcji przy każdym nagraniu ", aby uzyskać dostęp do ustawień w celu dostosowania: (Przykład)
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 "...)
Dziękuję za odpowiedź 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 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...
… 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.
… 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
Otwieranie SolidWorks Uruchom SolidWorks i otwórz dokument rysunku (Drawing), który chcesz przetworzyć za pomocą makra.
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
Otwieranie Edytora makr W SolidWorks przejść do menu Narzędzia > Makro > Nowe , aby utworzyć nowe makro, lub Uruchom , aby otworzyć istniejące makro.
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
Otwieranie edytora języka Visual Basic for Applications (VBA) Po utworzeniu pliku makra, SolidWorks otworzy edytor VBA.
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
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.
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
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.
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ą: