Tag zusammen!
Im Rahmen einer Weiterentwicklung der SW-Skin-Standards im Unternehmen habe ich festgestellt, dass das Laden eines neuen Skin-Standards nicht zuverlässig ist: Nicht alle Schichten sind vorhanden und noch schlimmer, die Zuordnungen sind nicht immer die richtigen.
Also muss ich viele Dinge automatisieren:
-
Überprüfen Sie, ob jede Ebene vorhanden ist, andernfalls erstellen Sie die fehlenden (einige haben benutzerdefinierte Farben → müssen die Farbe mit dem RGB-Code festlegen
-
Überprüfen Sie die Layer, die jedem Element zugewiesen sind (Abmessungen, Positionsbeschriftung, Mittelachse, Querschnitt usw.) in den Dokumenteigenschaften
-
Erzwingen Sie die Standardebene des Dokuments auf -Gemäß der Norm- (beim Öffnen ist die Standardebene auf -Keine- eingestellt und ich möchte sie auf -Gemäß der Norm- ändern).
-
Zuweisen von Clip-Elementen zu den richtigen Ebenen
Angefangen habe ich mit dem letzten Punkt, für den ich im Forum schnell Elemente gefunden habe, die mir helfen, aber ich komme trotzdem nicht weiter:
Mein 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
Aufgaben /4:
-
Set swNote = swView.GetFirstNote ermöglicht es mir, die Notizen auszuwählen, die an die Ansichten angehängt sind.
Aber wie wählt man die Notizen aus, die wiederum an das Blatt angehängt sind? -
Welche API soll Positionsbeschriftungen auswählen?
-
Welche API(s) sollen die Zeilen auswählen und Beschriftungen ausschneiden?
Probleme /3:
- Ich habe es mit swDraw.SetCurrentLayer("-Gemäß dem Standard-") versucht, aber -Gemäß dem Standard- ist nicht wirklich ein Schlag ins Gesicht... Nichts passiert. Ich dachte mir, dass es vielleicht dem ersten Index in der Ebenenliste zugewiesen wurde, aber swDraw.SetCurrentLayer(0) funktioniert auch nicht.
Hat jemand eine Idee?
Für die ersten 2 Punkte habe ich noch nicht angefangen, sie mir anzusehen, aber wenn jemand Elemente oder vielleicht sogar den Code hat, der es Ihnen ermöglicht, sie zu erstellen, bin ich interessiert!
Vielen Dank im Voraus!