Hoi allemaal Ik heb nog nooit een macro gecodeerd en ik wil het graag leren omdat ik tegen een probleem aanloop:
Momenteel ben ik op zoek naar een " eenvoudige " oplossing om solidworks-onderdelen tijdens het tekenen in een laag te plaatsen (op dit moment is de enige manier in de software om de delen die ik niet wil te verbergen, dan de delen die overblijven, ze een voor een te selecteren en ze vervolgens aan een laag toe te wijzen. Het volstaat te zeggen dat het vervelend is). De andere manier is om het plan met kleuren te exporteren en vervolgens in de 2D-software zoals Autocad de lagen toe te wijzen op basis van de kleuren. Kortom, een hel... Ik blader door alle forums en sites in het Engels en Frans, maar ik kan niets vinden... Het lijkt mij echter dat ik niet de enige ben die zich in deze impasse bevindt.
Dus, weet je alsjeblieft een macro die in staat is om onderdelen rechtstreeks aan lagen te koppelen? (Namelijk dat mijn assemblages hetzelfde zijn met allemaal dezelfde onderdelen, en weinig onderdelen. Maar bij een lancering van 200 assemblages kan het even duren om elk stuk te sorteren).
Anders, weet je waar ik op het net kan leren, de basis om te coderen in VBA? Omdat ik denk dat het de enige mogelijke oplossing zal zijn.
Wees voorzichtig, Solidworks beheert geen lagen zoals Autocad dat zou doen... Het is mogelijk om een projectiebestand te maken voor het opnemen van tekeningen in DWG en DXF (file-> opslaan als DWG/DXF en vervolgens " Option ")
→ de optie " Projectie niet weergeven bij elke opname " uitschakelen om toegang te krijgen tot de instellingen om aan te passen: (Voorbeeld)
Maar over het algemeen verwerkt Solidworks alleen lijntypen (en sommige lijnkleuren), maar geen 3D-componenten...
Wat betreft macro's, hier zijn enkele sites om vertrouwd te raken met VB-programmering...
en meer in het algemeen (Excel-georiënteerde VBA maar nog steeds nuttig):
en Solidworks API-helpers.
Opmerking: om te beginnen raad ik automatische macro-opname en generatieve kunstmatige intelligentie niet aan (hoewel er enige vooruitgang is opmerkelijk bij sommige " AI's "...)
Bedankt voor het antwoord Ik ken inderdaad ook de exportmethode, maar het is niet precies wat ik zoek. Het is me gelukt om handmatig een laag op een onderdeel of een heel onderdeel te plaatsen, dus ik zeg tegen mezelf dat het geautomatiseerd kan worden, het is meer in deze richting dat ik blokkeer. Bedankt voor de links, ik heb het gevoel dat de hersenen een beetje zullen roken
Hoeveel gemakkelijker zou het zijn om het wijzigen van de laag van een component te "automatiseren " met een macro? Tenzij de component(en) in kwestie nog steeds hetzelfde zijn (bibliotheekcomponenten?) zul je altijd de " Selectie " -fase van het onderdeel of de assemblage moeten doorlopen, en dan, waarschijnlijk, de keuze van de laag waarnaar je ze wilt exporteren... Opmerking: Zorg ervoor dat u de regelstijl, het lettertype van de lijn en de lagen niet verwart...
… De API-helpcode met enkele aanvullende opmerkingen:
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
En wat uitleg over de verschillende procedures:
Sub-procedure ChangeComponentLayer :
Transformeer de naam van de laag om ongeldige tekens te voorkomen en het maken van de laag in het tekendocument te voorkomen.
Sub-procedure ProcessDrawingComponent :
Recursieve verwerking van tekeningcomponenten en laagwisseling voor elke component, evenals het weergeven van foutopsporingsinformatie.
Het hoofdgeding main :
Initialiseer de benodigde SolidWorks-objecten, selecteer de weergave en componenten en start het verwerkingsproces van componenten.
… en een kleine tutorial voor de uitvoering van deze macro op een Solidworks-tekening... Wees voorzichtig, op een kopie van een Europarlementariër... Je test nooit een macro op de originele bestanden met het risico alles te verliezen... (het komt zelden voor dat je terug kunt gaan met een MAcro).
Stap 1: Bereid de omgeving voor
Open SolidWorks Start SolidWorks en open een tekeningdocument (Drawing) dat u met de macro wilt verwerken.
Onderdelen en weergaven verifiëren Zorg ervoor dat de tekening onderdelen en weergaven bevat die u wilt bewerken. De macro werkt in op de tekeningcomponenten en hun lagen (layers).
Stap 2: Open de VBA-macro-editor
Open de macro-editor Ga in SolidWorks naar het menu Extra > Macro > Nieuw om een nieuwe macro te maken of Uitvoeren om een bestaande macro te openen.
Een nieuwe macro maken
Als u ervoor kiest om een nieuwe macro te maken, zal SolidWorks u vragen het bestand op te slaan met een .swp.
Geef uw macro een naam, zoals ChangeLayerMacro.swp, en sla deze op een gemakkelijk toegankelijke plaats op.
Stap 3: Kopieer VBA-code naar de editor
De VBA-editor (Visual Basic for Applications) openen Zodra het macrobestand is gemaakt, opent SolidWorks de VBA-editor.
VBA-code plakken
Kopieer de VBA-code (hierboven weergegeven) naar de VBA-editor.
Plak het in de lege macromodule die automatisch is gemaakt.
Zorg ervoor dat alle code correct is geplakt, inclusief declaraties Option Explicit en alle subprocedures.
Stap 4: Opslaan en sluiten VBA Editor
Klik op Bestand > Opslaan of gebruik de snelkoppeling Ctrl + S om de macro op te slaan.
Sluit de VBA-editor zodra de macro is opgeslagen.
Stap 5: Voer de macro uit in SolidWorks
Selecteer een weergave in de tekening Voordat u de macro uitvoert, moet u ervoor zorgen dat u een tekeningweergave selecteert in het huidige document, omdat de macro verwacht dat u een weergave hebt geselecteerd om de onderdelen ervan te verwerken.
Voer de macro uit Ga terug naar het menu Extra > Macro > Uitvoeren.
Blader door uw bestanden en selecteer de macro .swp die u eerder hebt opgeslagen.
Klik op Openen om de macro uit te voeren.
Opmerking: Persoonlijk geef ik er de voorkeur aan om de macro rechtstreeks vanuit de VBA-editor te starten met behulp van de stap-voor-stap-modus (F8) en de acties en resultaten te analyseren in het uitvoeringsvenster van de editor, terwijl ik het venster met lokale variabelen in de gaten houd
Nadat de macro is uitgevoerd, worden in het venster Immediate in de VBA-editor (indien geopend) of de SolidWorks Output Console de resultaten van de macro weergegeven, inclusief de namen van de verwerkte componenten en hun nieuwe lagen.
Controleer in de SolidWorks-tekening of de componenten zoals verwacht naar de nieuwe lagen zijn verplaatst.
Punten om te controleren en problemen op te lossen
Versiecompatibiliteit : Zorg ervoor dat uw versie van SolidWorks het uitvoeren van VBA-macro's ondersteunt. Afhankelijk van de versie kunnen er enkele beperkingen van toepassing zijn.
Macrobeveiliging : Als SolidWorks een macrobeveiligingswaarschuwing weergeeft, zorg er dan voor dat u de macrobeveiligingsinstellingen hebt ingesteld om uitvoering toe te staan.
Foutmeldingen : Als u fouten tegenkomt, controleer dan of u een geldige weergave hebt geselecteerd en of de tekening correct is geconfigureerd met componenten.
Samenvatting
Door deze stappen te volgen, kunt u de VBA-macro gebruiken om de lagen van componenten in een SolidWorks-tekening op een geautomatiseerde en efficiënte manier te wijzigen. Deze macro is met name handig voor het ordenen van complexe tekeningen met meerdere componenten door automatisch lagen te maken en toe te wijzen op basis van componentnamen.
Heel erg bedankt voor deze elementen, het is erg aardig. Dus ik heb eigenlijk deze macro geprobeerd (de eerste op de site, niet degene die je hebt gekopieerd). Het punt is dat het één laaglijn per stuk creëert. Dus ik eindig met veel lagen, wat oncomfortabel en onbruikbaar is, maar het is al een begin.
In je vorige vraag over wat makkelijker zou zijn met automatisering, is het dat ik eigenlijk eindig met dezelfde onderdelen x keer herhaald. Je kunt dus net zo goed alles groeperen met een macro, in plaats van deze elementen handmatig te selecteren en ze vervolgens in de respectievelijke lagen te plaatsen.
In feite moet ik een CAPM opzetten, maar met behoud van deze huidige praktijk van het bedrijf om 2D-lagen te gebruiken voor klantexports (archi, of BE). En het doel is om geen onnodige tijd te verspillen die mijn collega's zal afschrikken wanneer ik het project aan iedereen ga opleveren. Momenteel gebruik ik de Swood-software op Solidworks en hoef ik me geen zorgen te maken over de codering, het is heel eenvoudig, zelfs met complexe componenten. Maar de tekening moet ook goed toegankelijk zijn voor mijn collega's.
Ik zal blijven werken aan het probleem met uw elementen!! Nogmaals bedankt voor je tijd, het is super leuk Fijne dag
Anders is er dit hulpprogramma in de MyCADTools-suite op Visiativ als u problemen ondervindt bij het ontwikkelen van uw macro:
Uiteindelijk kun je het in een proefversie testen om te zien of je kunt krijgen wat je wilt. In het bijzonder is het mogelijk om een onderdeel naar een bepaalde laag te verplaatsen volgens een eigenschap: