Hallo allemaal!
Als onderdeel van een evolutie van SW-skinstandaarden in het bedrijf, realiseerde ik me dat het laden van een nieuwe skinstandaard niet betrouwbaar is: niet alle lagen zijn aanwezig en erger nog, de toewijzingen zijn niet altijd de juiste.
Ik moet dus veel dingen automatiseren:
-
Controleer het bestaan van elke laag, anders maak je de ontbrekende lagen (sommige hebben aangepaste kleuren → moet de kleur instellen met de RGB-code
-
Controleer de lagen die voor elk element zijn toegewezen (afmetingen, positielabel, middenas, doorsnede, enz.) in de documenteigenschappen
-
Forceer de standaardlaag van het document op -Volgens de standaard- (bij het openen is de standaardlaag ingesteld op -Geen-, en ik wil deze wijzigen in -Volgens de standaard-).
-
Wijs clipelementen opnieuw toe aan de juiste lagen
Ik begon met het laatste punt waarvoor ik al snel elementen vond die me op het forum konden helpen, maar ik zit toch vast:
Mijn code:
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swLayerMgr As SldWorks.LayerMgr
Dim vLayerArr As Variant
Dim vLayer As Variant
Dim swLayer As SldWorks.Layer
Dim swDraw As SldWorks.DrawingDoc
Dim vSheets As Variant
Dim vSheet As Variant
Dim swView As SldWorks.View
Dim swAnn As SldWorks.Annotation
Dim swNote As SldWorks.Note
Dim swDispDim As SldWorks.DisplayDimension
Dim swGtol As SldWorks.Gtol
Dim swDatum As SldWorks.DatumTag
Dim swAnnSFSymbol As SldWorks.SFSymbol
Dim swAnnWeldSymbol As SldWorks.WeldSymbol
Dim swCtrMark As SldWorks.CenterMark
Dim swCenterLine As SldWorks.Centerline
Dim swTables As Variant
Dim swTable As Variant
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
If swModel Is Nothing Then
MsgBox "Ouvrez et/ou activez une mise en plan."
Exit Sub
End If
If swModel.GetType <> swDocumentTypes_e.swDocDRAWING Then
MsgBox "Ouvrez et/ou activez une mise en plan."
Exit Sub
End If
Set swDraw = swModel
vSheets = swDraw.GetSheetNames
For Each vSheet In vSheets
swDraw.ActivateSheet vSheet
Set swView = swDraw.GetFirstView
Set swView = swView.GetNextView
While Not swView Is Nothing
Set swCtrMark = swView.GetFirstCenterMark
While Not swCtrMark Is Nothing
Set swAnn = swCtrMark.GetAnnotation
swAnn.Layer = "Axes"
Set swCtrMark = swCtrMark.GetNext
Wend
Set swCenterLine = swView.GetFirstCenterLine
While Not swCenterLine Is Nothing
Set swAnn = swCenterLine.GetAnnotation
swAnn.Layer = "Axes"
Set swCenterLine = swCenterLine.GetNext
Wend
Set swDatum = swView.GetFirstDatumTag
While Not swDatum Is Nothing
Set swAnn = swDatum.GetAnnotation
swAnn.Layer = "Références"
Set swDatum = swDatum.GetNext
Wend
Set swGtol = swView.GetFirstGTOL
While Not swGtol Is Nothing
Set swAnn = swGtol.GetAnnotation
swAnn.Layer = "Cotes"
Set swGtol = swGtol.GetNextGTOL
Wend
Set swAnnSFSymbol = swView.GetFirstSFSymbol
While Not swAnnSFSymbol Is Nothing
Set swAnn = swAnnSFSymbol.GetAnnotation
swAnn.Layer = "État de surface"
Set swAnnSFSymbol = swAnnSFSymbol.GetNext
Wend
Set swAnnWeldSymbol = swView.GetFirstWeldSymbol
While Not swAnnWeldSymbol Is Nothing
Set swAnn = swAnnWeldSymbol.GetAnnotation
swAnn.Layer = "Soudures"
Set swAnnWeldSymbol = swAnnWeldSymbol.GetNext
Wend
Set swDispDim = swView.GetFirstDisplayDimension5
While Not swDispDim Is Nothing
Set swAnn = swDispDim.GetAnnotation
swAnn.Layer = "Cotes"
Set swDispDim = swDispDim.GetNext5
Wend
Set swView = swView.GetNextView
Wend
Next
swModel.ClearSelection2 True
Problemen /4:
-
Stel swNote in = swView.GetFirstNote stelt me in staat om de notities te selecteren die aan de weergaven zijn gekoppeld.
Maar hoe selecteer je de notities die op hun beurt aan het blad zijn bevestigd? -
Welke API om positielabels te selecteren?
-
Welke API('s) om de lijnen te selecteren en labels te snijden?
Problemen /3:
- Ik heb het geprobeerd met swDraw.SetCurrentLayer("-Volgens de standaard-") maar -Volgens de standaard- niet echt een klap in het gezicht... Er gebeurt niets. Ik dacht dat het misschien was toegewezen aan de eerste index in de lagenlijst, maar swDraw.SetCurrentLayer(0) werkt ook niet.
Heeft iemand een idee?
Voor de eerste 2 punten ben ik nog niet begonnen om ze te bekijken, maar als iemand elementen heeft of misschien zelfs de code waarmee je ze kunt maken, ben ik geïnteresseerd!
Bij voorbaat dank!