MAKRO: Setzen Sie die Standardebene einer Zeichnung auf -Gemäß der Norm-

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:

  1. Ü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

  2. Überprüfen Sie die Layer, die jedem Element zugewiesen sind (Abmessungen, Positionsbeschriftung, Mittelachse, Querschnitt usw.) in den Dokumenteigenschaften

  3. 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).

  4. 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!

Hallo;
So durchsuchen Sie alle Notizen:
https://help.solidworks.com/2021/English/api/sldworksapi/Get_Views_and_Notes_Example_VB.htm

Auf der anderen Seite verwende ich ein Makro für Zeichnungen, um den Standard UND die Grundkarte neu zu laden, was ziemlich gute Ergebnisse liefert...

Um mit einer Bedingung verknüpft zu werden:
filetype = swModel.GetType ' Gibt den Typ des Dokuments an, das geöffnet wurde mit:0=swDocNONE; 1=swDocTEIL; 2=swDocASSEMBLY; 3=swDocZEICHNEN
If filetype = 3 Then' Wenn es sich bei der geöffneten Datei um eine Zeichnung handelt

Dim vSheetProps     As Variant
Dim nErrors         As Long
Dim nTemplatePath   As String
Dim swPaperWidth    As String
Dim swPaperHeight   As String


' Repertoire contenant les modeles des fonds de plans
Const sTemplatePath As String = "W:\Modeles_solidworks\Fonds_de_plans_2023" 'A ADAPTER :EMPLACEMENT DE VOS FOND DE PLAN PERSONNALISE

' Formats des differents fond de plans disponibles dans le Repertoire ci-dessous

Const A0HTemplateName As String = "A0H PERSO 2023.slddrt" 'A ADAPTER : VOTRE FOND DE PLAN PERSONNALISE
Const A1HTemplateName As String = "A1H PERSO 2023.slddrt"
Const A1VTemplateName As String = "A1V PERSO 2023.slddrt"
Const A2HTemplateName As String = "A2H PERSO 2023.slddrt"
Const A2VTemplateName As String = "A2V PERSO 2023.slddrt"
Const A3HTemplateName As String = "A3H PERSO 2023.slddrt"
Const A3VTemplateName As String = "A3V PERSO 2023.slddrt"
Const A4HTemplateName As String = "A4H PERSO 2023.slddrt"
Const A4VTemplateName As String = "A4V PERSO 2023.slddrt"

Sub Formats()

 Dim swApp As SldWorks.SldWorks
    Dim swModel As SldWorks.ModelDoc2
    Dim swDraw As SldWorks.DrawingDoc
    Dim swSheet As SldWorks.Sheet
    Dim vSheetProps As Variant
   

    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    Set swDraw = swModel
    Set swSheet = swDraw.GetCurrentSheet
    

        'swModel.ActivateSheet vSheetName
            Set swSheet = swModel.GetCurrentSheet
            vSheetProps = swSheet.GetProperties
            swPaperWidth = vSheetProps(5)
            swPaperHeight = vSheetProps(6)
        Select Case swPaperWidth & swPaperHeight ' Comparaison de la Longueur et de la Largeur du fond de plan present (Unité en Metres)
        
Case "1,189" & "0,841" ' Format A0H
        nTemplatePath = sTemplatePath & "\" & A0HTemplateName
        boolstatus = swModel.Extension.LoadDraftingStandard("W:\Modeles_solidworks\Normes_de_mise_en_plans\ISO-PERSO_A0.sldstd")
       
Case "0,841" & "0,594" ' Format A1H
        nTemplatePath = sTemplatePath & "\" & A1HTemplateName
        boolstatus = swModel.Extension.LoadDraftingStandard("W:\Modeles_solidworks\Normes_de_mise_en_plans\ISO-PERSO_A1.sldstd")
        
Case "0,594" & "0,841" ' Format A1V
        nTemplatePath = sTemplatePath & "\" & A1VTemplateName
        boolstatus = swModel.Extension.LoadDraftingStandard("W:\Modeles_solidworks\Normes_de_mise_en_plans\ISO-PERSO_A1.sldstd")

Case "0,594" & "0,42" ' Format A2H
        nTemplatePath = sTemplatePath & "\" & A2HTemplateName
        boolstatus = swModel.Extension.LoadDraftingStandard("W:\Modeles_solidworks\Normes_de_mise_en_plans\ISO-PERSO_A2.sldstd")

Case "0,42" & "0,594" ' Format A2V
        nTemplatePath = sTemplatePath & "\" & A2VTemplateName
        boolstatus = swModel.Extension.LoadDraftingStandard("W:\Modeles_solidworks\Normes_de_mise_en_plans\ISO-PERSO_A2.sldstd")

Case "0,42" & "0,297" ' Format A3H
        nTemplatePath = sTemplatePath & "\" & A3HTemplateName
        boolstatus = swModel.Extension.LoadDraftingStandard("W:\Modeles_solidworks\Normes_de_mise_en_plans\ISO-PERSO_A3.sldstd")

Case "0,297" & "0,42" ' Format A3V
        nTemplatePath = sTemplatePath & "\" & A3VTemplateName
        boolstatus = swModel.Extension.LoadDraftingStandard("W:\Modeles_solidworks\Normes_de_mise_en_plans\ISO-PERSO_A3.sldstd")

Case "0,297" & "0,21" ' Format A4H
        nTemplatePath = sTemplatePath & "\" & A4HTemplateName
        boolstatus = swModel.Extension.LoadDraftingStandard("W:\Modeles_solidworks\Normes_de_mise_en_plans\ISO-PERSO_A4.sldstd")

Case "0,21" & "0,297" ' Format A4V
        nTemplatePath = sTemplatePath & "\" & A4VTemplateName
        boolstatus = swModel.Extension.LoadDraftingStandard("W:\Modeles_solidworks\Normes_de_mise_en_plans\ISO-PERSO_A4.sldstd")

        Case Else
        nTemplatePath = sTemplatePath & "\" & A2HTemplateName 'Format par défaut si le fond de plan present n'est pas dans la liste ci-dessus
        boolstatus = swModel.Extension.LoadDraftingStandard("W:\Modeles_solidworks\Normes_de_mise_en_plans\ISO-PERSO_A2.sldstd")
        
End Select
        
   'On Supprime le fond de plan initial
    swModel.SetupSheet5 swSheet.GetName, swDwgPapersUserDefined, swDwgTemplateNone, vSheetProps(2), vSheetProps(3), vSheetProps(4), "", vSheetProps(5), vSheetProps(6), "Default", True
    
    'On Recharge le nouveau fond de plan
    swModel.SetupSheet5 swSheet.GetName, swDwgPapersUserDefined, swDwgTemplateCustom, vSheetProps(2), vSheetProps(3), vSheetProps(4), nTemplatePath, vSheetProps(5), vSheetProps(6), "Default", True
    
 Call table_rev
        
    swModel.ViewZoomtofit2
    
End Sub

2 „Gefällt mir“

Hallo

Gleiche Antwort wie @Maclane.
Um klar zu antworten:

Es ist nicht erforderlich, Ebenen hinzuzufügen und festzulegen, fehlende Ebenen mit ihren Farbeinstellungen werden beim Ändern des Hintergrunds importiert. Auf der anderen Seite, wenn es Layer mit den gleichen Namen gibt, die in ihrer Farbeinstellung geändert wurden, müssen Sie die Farbe einstellen.
Ein weiterer Punkt: Wenn es in den alten Ebenen mehr Ebenen gibt, müssen Sie diese auch löschen und sehen, ob Sie das, was sich darauf befinden würde, auf eine andere Ebene übertragen, bevor Sie die Ebene löschen.
Was Ansichtsbeschriftungen und Schnittlinien betrifft, so wird der Umbruchstandard auf das Dokument angewendet, sobald Sie ihn ändern, ohne dass die Objekte ausgewählt werden müssen.

Endlich habe ich ein Stück Code, das ein bisschen von all dem macht. Ich habe auch ein anderes Stück Code, mit dem Sie alle Arten von Objekten scannen und wahrscheinlich ihre Schicht abrufen können (dafür verwende ich es in erster Linie nicht).
Der @Maclane Code ist bereits ein guter Anfang.
In Ihrem Code müssen Sie zum Scannen der Grundkarte in der ersten " Schleife " bleiben, die sich auf Folgendes bezieht:

Set swView = swDraw.GetFirstView

Grundsätzlich dient diese Codezeile dazu, den Hintergrund des Plans einzugeben, wenn Sie nur zuletzt Set swView = swView.GetNextView schreiben, gehen Sie zum Scan der Ansichten des Plans.
Sie müssen also eine Schleife in der Grundkarte einfügen, um alles wiederherzustellen, was vorhanden ist, und die gewünschte Behandlung anzuwenden.
Um auf die Schicht " Nach dem Standard" anzuwenden, habe ich keine Methode in der API gesehen und es scheint mir, dass sie im Jahr 2022 ein wenig buggt (ein weiteres Speicherthema im Forum in der manuellen Anwendung Bearbeiten: Zurücksetzen / Reaktivieren der Schicht " Gemäß dem Standard " - 2D-Plan / Zeichnung - myCAD-Forum (visiativ.com)).

2 „Gefällt mir“

Re, ungetesteter Code, sollte aber den Job machen, denke ich:

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 swTables                    As Variant
Dim swTable                     As Variant
Dim vSheetProps                 As Variant
Dim nErrors                     As Long
Dim nTemplatePath               As String
Dim swPaperWidth                As String
Dim swPaperHeight               As String
Dim Count                       As Integer
Dim i                           As Long
Dim j                           As Long

' Repertoire contenant les modeles des fonds de plans
Const sTemplatePath As String = "W:\Modeles_solidworks\Fonds_de_plans_2023" 'A ADAPTER :EMPLACEMENT DE VOS FOND DE PLAN PERSONNALISE

' Formats des differents fond de plans disponibles dans le Repertoire ci-dessous

Const A0HTemplateName As String = "A0H PERSO 2023.slddrt" 'A ADAPTER : VOTRE FOND DE PLAN PERSONNALISE
Const A1HTemplateName As String = "A1H PERSO 2023.slddrt"
Const A1VTemplateName As String = "A1V PERSO 2023.slddrt"
Const A2HTemplateName As String = "A2H PERSO 2023.slddrt"
Const A2VTemplateName As String = "A2V PERSO 2023.slddrt"
Const A3HTemplateName As String = "A3H PERSO 2023.slddrt"
Const A3VTemplateName As String = "A3V PERSO 2023.slddrt"
Const A4HTemplateName As String = "A4H PERSO 2023.slddrt"
Const A4VTemplateName As String = "A4V PERSO 2023.slddrt"

Sub Main()
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
If swDraw.GetSheetCount > 1 Then
    vSheets = swDraw.GetSheetNames
    For j = 0 To UBound(vSheets)
        boolstatus = swDraw.ActivateSheet(vSheets(j))
        Call ChangeSheetFormat
        ProcessDrawing swApp, swDraw
        Call PurgeCalques
    Next j
    boolstatus = swDraw.ActivateSheet(vSheets(0))
Else
    Call ChangeSheetFormat
    ProcessDrawing swApp, swDraw
    Call PurgeCalques
End If
End Sub

Sub ChangeSheetFormat()
   
Set swSheet = swDraw.GetCurrentSheet
vSheetProps = swSheet.GetProperties
swPaperWidth = vSheetProps(5)
swPaperHeight = vSheetProps(6)
Select Case swPaperWidth & swPaperHeight ' Comparaison de la Longueur et de la Largeur du fond de plan present (Unité en Metres)
       
Case "1,189" & "0,841" ' Format A0H
       nTemplatePath = sTemplatePath & "\" & A0HTemplateName
       boolstatus = swModel.Extension.LoadDraftingStandard("W:\Modeles_solidworks\Normes_de_mise_en_plans\ISO-PERSO_A0.sldstd")
      
Case "0,841" & "0,594" ' Format A1H
       nTemplatePath = sTemplatePath & "\" & A1HTemplateName
       boolstatus = swModel.Extension.LoadDraftingStandard("W:\Modeles_solidworks\Normes_de_mise_en_plans\ISO-PERSO_A1.sldstd")
       
Case "0,594" & "0,841" ' Format A1V
       nTemplatePath = sTemplatePath & "\" & A1VTemplateName
       boolstatus = swModel.Extension.LoadDraftingStandard("W:\Modeles_solidworks\Normes_de_mise_en_plans\ISO-PERSO_A1.sldstd")

Case "0,594" & "0,42" ' Format A2H
       nTemplatePath = sTemplatePath & "\" & A2HTemplateName
       boolstatus = swModel.Extension.LoadDraftingStandard("W:\Modeles_solidworks\Normes_de_mise_en_plans\ISO-PERSO_A2.sldstd")

Case "0,42" & "0,594" ' Format A2V
       nTemplatePath = sTemplatePath & "\" & A2VTemplateName
       boolstatus = swModel.Extension.LoadDraftingStandard("W:\Modeles_solidworks\Normes_de_mise_en_plans\ISO-PERSO_A2.sldstd")

Case "0,42" & "0,297" ' Format A3H
       nTemplatePath = sTemplatePath & "\" & A3HTemplateName
       boolstatus = swModel.Extension.LoadDraftingStandard("W:\Modeles_solidworks\Normes_de_mise_en_plans\ISO-PERSO_A3.sldstd")

Case "0,297" & "0,42" ' Format A3V
       nTemplatePath = sTemplatePath & "\" & A3VTemplateName
       boolstatus = swModel.Extension.LoadDraftingStandard("W:\Modeles_solidworks\Normes_de_mise_en_plans\ISO-PERSO_A3.sldstd")

Case "0,297" & "0,21" ' Format A4H
       nTemplatePath = sTemplatePath & "\" & A4HTemplateName
       boolstatus = swModel.Extension.LoadDraftingStandard("W:\Modeles_solidworks\Normes_de_mise_en_plans\ISO-PERSO_A4.sldstd")

Case "0,21" & "0,297" ' Format A4V
       nTemplatePath = sTemplatePath & "\" & A4VTemplateName
       boolstatus = swModel.Extension.LoadDraftingStandard("W:\Modeles_solidworks\Normes_de_mise_en_plans\ISO-PERSO_A4.sldstd")

       Case Else
       nTemplatePath = sTemplatePath & "\" & A2HTemplateName 'Format par défaut si le fond de plan present n'est pas dans la liste ci-dessus
       boolstatus = swModel.Extension.LoadDraftingStandard("W:\Modeles_solidworks\Normes_de_mise_en_plans\ISO-PERSO_A2.sldstd")
       
End Select
       
  'On Supprime le fond de plan initial
   swModel.SetupSheet5 swSheet.GetName, swDwgPapersUserDefined, swDwgTemplateNone, vSheetProps(2), vSheetProps(3), vSheetProps(4), "", vSheetProps(5), vSheetProps(6), "Default", True
   
   'On Recharge le nouveau fond de plan
   swModel.SetupSheet5 swSheet.GetName, swDwgPapersUserDefined, swDwgTemplateCustom, vSheetProps(2), vSheetProps(3), vSheetProps(4), nTemplatePath, vSheetProps(5), vSheetProps(6), "Default", True
   
swModel.ForceRebuild3 (False)
swModel.ViewZoomtofit2
   
End Sub
Sub ProcessDrawing(swApp As SldWorks.SldWorks, swDraw As SldWorks.DrawingDoc)

    Set swView = swDraw.GetFirstView
    Do While Not Nothing Is swView
        Set swAnn = swView.GetFirstAnnotation3
        Do While Not Nothing Is swAnn
            ProcessAnnotation swApp, swAnn
            Set swAnn = swAnn.GetNext3
        Loop
        Set swView = swView.GetNextView
    Loop
End Sub
Sub ProcessAnnotation(swApp As SldWorks.SldWorks, swAnn As SldWorks.Annotation)
    Dim swAnnCThread                As SldWorks.CThread
    Dim swAnnDatumTag               As SldWorks.DatumTag
    Dim swAnnDatumTargetSym         As SldWorks.DatumTargetSym
    Dim swAnnDisplayDimension       As SldWorks.DisplayDimension
    Dim swAnnGTol                   As SldWorks.Gtol
    Dim swAnnNote                   As SldWorks.Note
    Dim swAnnSFSymbol               As SldWorks.SFSymbol
    Dim swAnnWeldSymbol             As SldWorks.WeldSymbol
    Dim swAnnCustomSymbol           As SldWorks.CustomSymbol
    Dim swAnnDowelSym               As SldWorks.DowelSymbol
    Dim swAnnLeader                 As SldWorks.MultiJogLeader
    Dim swAnnCenterMarkSym          As SldWorks.CenterMark
    Dim swAnnTable                  As SldWorks.TableAnnotation
    Dim swAnnCenterLine             As SldWorks.Centerline
    Dim swAnnDatumOrigin            As SldWorks.DatumOrigin
    Dim swDim                       As SldWorks.Dimension
    Dim swDimensionTolerance        As SldWorks.DimensionTolerance
    Dim idx                         As Long
    Dim params                      As Variant
    Dim arrSymbols                  As Variant
    Dim nNumCol                     As Long
    Dim nNumRow                     As Long
    Dim sTableText                  As String
    Dim sSurface                    As String
    Dim sIsIndNote                  As String
    Dim j                           As Long
    Dim sGtol                       As String
    Dim sWeldNote                   As String
    Dim TableAnchor                 As TableAnchor
    
   
    Select Case swAnn.GetType
        Case swCenterMarkSym
            Set swAnn = swAnnCenterMarkSym.GetAnnotation
            swAnn.Layer = "Axes"
        Case swCenterLine
            Set swAnn = swAnnCenterLine.GetAnnotation
            swAnn.Layer = "Axes"
        Case swDatumTag
            Set swAnn = swAnnDatumTag.GetAnnotation
            swAnn.Layer = "Références"
        Case swDisplayDimension
            Set swAnn = swDispDim.GetAnnotation
            swAnn.Layer = "Cotes"
        Case swGtol
            Set swAnn = swAnnGTol.GetAnnotation
            swAnn.Layer = "Cotes"
        Case swSFSymbol
            Set swAnn = swAnnSFSymbol.GetAnnotation
            swAnn.Layer = "État de surface"
        Case swWeldSymbol
            Set swAnn = swAnnWeldSymbol.GetAnnotation
            swAnn.Layer = "Soudures"
    End Select
End Sub
Sub PurgeCalques()

Count = swLayerMgr.GetCount
vLayer = swLayerMgr.GetLayerList
For i = 0 To Count - 1
If vLayer(i) = "CARTOUCHE" Or _
vLayer(i) = "TEXTE FIXE CARTOUCHE" Or _
vLayer(i) = "Champs paramétrés" Or _
vLayer(i) = "cotation cartouche" Or _
vLayer(i) = "Consultation" Or _
vLayer(i) = "Cartouche de signature" Or _
vLayer(i) = "Indice()" Then
Else
swLayerMgr.DeleteLayer (vLayer(i))
End If
Next i
End Sub

2 „Gefällt mir“

Vielen Dank für Ihre Antworten. Ihre Erklärungen haben mir geholfen, einige Dinge besser zu verstehen.

Das automatische Neuladen der Grundkarte bei jedem Öffnen eines Zeichnungsdokuments in der Bearbeitung gibt es im Unternehmen schon lange (ein vom IT-Service entwickeltes Add-on), aber ich bin kein Fan und die Hersteller auch nicht: Es setzt die Ankerpunkte zurück. Und aus irgendeinem Grund habe ich bei allen Ebenen in der neuen Dokumentvorlage (.drwdot und .slddrt) immer eine Ebene, die vergessen wird, und nicht immer die gleiche! Daher muss ich die Existenz jeder Schicht überprüfen...

Wenn die Objekte in der Ebene " -Keine- " erstellt wurden, wirkt sich das Ändern des Umhüllungsstandards nicht auf Objekte aus. Deshalb brauche ich einen Code, um die Objekte zu verarbeiten, und vor allem, um die Standardschicht auf " -Nach dem Standard " umdefinieren zu können, aber für diesen letzten Punkt konnte ich nichts finden.

Ich habe es geschafft, mich speziell mit den Positionsbeschriftungen zu befassen, indem ich den Blasenstil überprüft habe:

        Set swNote = swView.GetFirstNote
        While Not swNote Is Nothing
            Set swAnn = swNote.GetAnnotation
            If swAnn.GetSpecificAnnotation.GetBalloonStyle = swBS_SplitCirc Then swAnn.Layer = "Vues dérivées"                    
            Set swNote = swNote.GetNext
        Wend

Ich glaube auch, dass ich herausgefunden habe, wie ich mit Schnittlinien und unterbrochenen Sichtlinien umgehen kann...

1 „Gefällt mir“

Hallo

Ich habe den Code-Schnipsel weggelassen, der die Schnitteinstellungen aktualisiert...
Ich befinde mich in der Performance-Testphase auf meiner Workstation, sobald ich meine Hand zurückbekomme, stelle ich den Code-Schnipsel zur Verfügung

Wenn es hilft, einige der Einstellungen in der Dokumentvorlage zu aktualisieren:

Sub ParamDraw()

'Paramètres vues en coupe
If swModelDocExt.GetUserPreferenceInteger(swUserPreferenceIntegerValue_e.swDetailingSectionViewLineStyleDisplay, _
swUserPreferenceOption_e.swDetailingNoOptionSpecified) <> 0 Then
    bRet = swModelDocExt.SetUserPreferenceInteger(swUserPreferenceIntegerValue_e.swDetailingSectionViewLineStyleDisplay, _
    swUserPreferenceOption_e.swDetailingNoOptionSpecified, 0)
End If

bRet = swModelDocExt.GetUserPreferenceToggle(swUserPreferenceToggle_e.swDetailingSectionViewLabels_PerStandard, _
swUserPreferenceOption_e.swDetailingNoOptionSpecified)
If bRet Then
    bRet = swModelDocExt.SetUserPreferenceToggle(swUserPreferenceToggle_e.swDetailingSectionViewLabels_PerStandard, _
    swUserPreferenceOption_e.swDetailingNoOptionSpecified, False)
End If
     
If swModelDocExt.GetUserPreferenceInteger(swUserPreferenceIntegerValue_e.swDetailingSectionViewLabels_Name, swUserPreferenceOption_e.swDetailingNoOptionSpecified) <> swDetailingViewLabelsName_none Then
    bRet = swModelDocExt.SetUserPreferenceInteger(swUserPreferenceIntegerValue_e.swDetailingSectionViewLabels_Name, swUserPreferenceOption_e.swDetailingNoOptionSpecified, swDetailingViewLabelsName_none)
End If
    
If swModelDocExt.GetUserPreferenceInteger(swUserPreferenceIntegerValue_e.swDetailingSectionViewLabels_Scale, swUserPreferenceOption_e.swDetailingNoOptionSpecified) <> 3 Then
    bRet = swModelDocExt.SetUserPreferenceInteger(swUserPreferenceIntegerValue_e.swDetailingSectionViewLabels_Scale, swUserPreferenceOption_e.swDetailingNoOptionSpecified, 3)
    bRet = swModelDocExt.SetUserPreferenceString(swUserPreferenceStringValue_e.swDetailingSectionViewLabels_CustomScale, swUserPreferenceOption_e.swDetailingSectionView, "SCALE")
End If
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

'Paramètres vues de détail

bRet = swModelDocExt.GetUserPreferenceToggle(swUserPreferenceToggle_e.swDetailingDetailViewLabels_PerStandard, _
swUserPreferenceOption_e.swDetailingDetailView)
If bRet Then
    bRet = swModelDocExt.SetUserPreferenceToggle(swUserPreferenceToggle_e.swDetailingDetailViewLabels_PerStandard, _
swUserPreferenceOption_e.swDetailingDetailView, False)
End If
     
If swModelDocExt.GetUserPreferenceInteger(swUserPreferenceIntegerValue_e.swDetailingDetailViewLabels_Name, swUserPreferenceOption_e.swDetailingDetailView) <> swDetailingViewLabelsName_custom Then
    bRet = swModelDocExt.SetUserPreferenceInteger(swUserPreferenceIntegerValue_e.swDetailingDetailViewLabels_Name, swUserPreferenceOption_e.swDetailingDetailView, swDetailingViewLabelsName_e.swDetailingViewLabelsName_custom)
    bRet = swModelDocExt.SetUserPreferenceString(swUserPreferenceStringValue_e.swDetailingDetailViewLabels_CustomName, swUserPreferenceOption_e.swDetailingDetailView, "DETAIL")
End If
    
If swModelDocExt.GetUserPreferenceInteger(swUserPreferenceIntegerValue_e.swDetailingDetailViewLabels_Scale, swUserPreferenceOption_e.swDetailingDetailView) <> 3 Then
    bRet = swModelDocExt.SetUserPreferenceInteger(swUserPreferenceIntegerValue_e.swDetailingDetailViewLabels_Scale, swUserPreferenceOption_e.swDetailingDetailView, swDetailingViewLabelsScale_e.swDetailingViewLabelsScale_SCALEcustom)
    bRet = swModelDocExt.SetUserPreferenceString(swUserPreferenceStringValue_e.swDetailingDetailViewLabels_CustomScale, swUserPreferenceOption_e.swDetailingDetailView, "SCALE")
End If
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

'Paramètres vues auxiliaires

bRet = swModelDocExt.GetUserPreferenceToggle(swUserPreferenceToggle_e.swDetailingAuxViewLabels_PerStandard, _
swUserPreferenceOption_e.swDetailingNoOptionSpecified)
If bRet Then
    bRet = swModelDocExt.SetUserPreferenceToggle(swUserPreferenceToggle_e.swDetailingAuxViewLabels_PerStandard, _
swUserPreferenceOption_e.swDetailingNoOptionSpecified, False)
End If
     
If swModelDocExt.GetUserPreferenceInteger(swUserPreferenceIntegerValue_e.swDetailingAuxViewLabels_Name, swUserPreferenceOption_e.swDetailingNoOptionSpecified) <> swDetailingViewLabelsName_custom Then
    bRet = swModelDocExt.SetUserPreferenceInteger(swUserPreferenceIntegerValue_e.swDetailingAuxViewLabels_Name, swUserPreferenceOption_e.swDetailingNoOptionSpecified, swDetailingViewLabelsName_e.swDetailingViewLabelsName_custom)
    bRet = swModelDocExt.SetUserPreferenceString(swUserPreferenceStringValue_e.swDetailingAuxViewLabels_CustomName, swUserPreferenceOption_e.swDetailingAuxiliaryView, "VIEW")
End If
    
If swModelDocExt.GetUserPreferenceInteger(swUserPreferenceIntegerValue_e.swDetailingAuxViewLabels_Scale, swUserPreferenceOption_e.swDetailingNoOptionSpecified) <> 3 Then
    bRet = swModelDocExt.SetUserPreferenceInteger(swUserPreferenceIntegerValue_e.swDetailingAuxViewLabels_Scale, swUserPreferenceOption_e.swDetailingNoOptionSpecified, swDetailingViewLabelsScale_e.swDetailingViewLabelsScale_SCALEcustom)
    bRet = swModelDocExt.SetUserPreferenceString(swUserPreferenceStringValue_e.swDetailingAuxViewLabels_CustomScale, swUserPreferenceOption_e.swDetailingAuxiliaryView, "SCALE")
End If
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

'Paramètre mise à jour auto nomenclature

bRet = swModelDocExt.GetUserPreferenceToggle(swUserPreferenceToggle_e.swDetailingAutoUpdateBOM, swUserPreferenceOption_e.swDetailingNoOptionSpecified)
If bRet = False Then
    bRet = swModelDocExt.SetUserPreferenceToggle(swUserPreferenceToggle_e.swDetailingAutoUpdateBOM, swUserPreferenceOption_e.swDetailingNoOptionSpecified, True)
End If

End Sub

Um die geschnittenen Linien zu verarbeiten, habe ich diesen Code geschrieben:

Dim swApp                       As SldWorks.SldWorks
Dim swModel                     As SldWorks.ModelDoc2
Dim vSheets                 As Variant
Dim vSheet                  As Variant
Dim swView                      As SldWorks.View 
Dim swSectionLines            As Variant
Dim swSectionLine             As Variant
Dim swSectionLineAnn              As SldWorks.DrSection

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 
While Not swView Is Nothing
    
If swView.GetSectionLineCount2(1) > 0 Then
    Set swSectionLines = swView.GetSectionLines
        For Each swSectionLine In swSectionLines
            Set swBreakLineAnn = swSectionLine
            swSectionLineAnn.Layer = "Vues dérivées"
        Next
    Else: End If
        Set swView = swView.GetNextView
    Wend
Next
swModel.ClearSelection2 True

Aber es funktioniert nicht. Ich habe den Fehler "Type Mismatch" auf

    Set swSectionLines = swView.GetSectionLines

Wer hat eine Idee?

Ich hatte keine Zeit, im Detail zu schauen, und ich bezweifle, dass ich diese Woche Zeit haben werde, aber ich habe den Eindruck, dass es keine Möglichkeit gibt, ein Set zu erstellen, um die Ebene dieser Funktion zu ändern.
Für das Inkompatibilitätsproblem selbst denke ich, dass Parameter oder Funktionen fehlen, die zuvor aufgerufen werden müssen (z. B. GetSectionLineInfo).

1 „Gefällt mir“

So konnte ich durch die Schnittlinien und Detailansichten kommen.

Mein Code:


Function ChangeLayer(TypeElement As Integer)
    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 MySheet                 As Variant
    Dim swSheet                     As SldWorks.Sheet
    Dim swView                      As SldWorks.View                '//vue de mise en plan//'
    Dim vSectionLines           As Variant
    Dim vSectionLine            As Variant
    Dim swSectionLine              As SldWorks.DrSection
    Dim vDetailCircles            As Variant
    Dim vDetailCircle             As Variant
    Dim swDetailCircle                As SldWorks.DetailCircle
    Dim ret                     As Boolean

    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc

  
    Set swDraw = swApp.ActiveDoc
    vSheets = swDraw.GetSheetNames
    For Each vSheet In vSheets
        swDraw.ActivateSheet vSheet                                 '//Pour chaque feuille de la mise en plan//'
        Set swView = swDraw.GetFirstView '//la feuille (fond de plan inclu)//'
        Set swView = swView.GetNextView '//la première vue//'

                    '//Traitement des vues de détail//'
                    vDetailCircles = swView.GetDetailCircles
                    If Not IsEmpty(vDetailCircles) Then
                        For Each vDetailCircle In vDetailCircles
                            Set swDetailCircle = vDetailCircle
                            swDetailCircle.Layer = "VUE DÉRIVÉE"
                        Next
                    End If

                    '//Traitement des vues en coupe//'
                    vSectionLines = swView.GetSectionLines
                    If Not IsEmpty(vSectionLines) Then
                        For Each vSectionLine In vSectionLines
                            Set swSectionLine = vSectionLine
                            swSectionLine.Layer = "COUPE"
                        Next
                    End If
                    '//Reconstruit affichage de la vue//'
                    ret = swDraw.Rebuild(swRebuildOptions_e.swCurrentSheetDisp)
 Set swView = swView.GetNextView
            Wend
    Next
    swModel.ClearSelection2 True
    swModel.ViewZoomtofit2          '//zoom au mieux sur la feuille//'
    
End Function

Und ich hatte leider die Bestätigung, dass es nicht möglich ist, die Standardschicht eines Dokuments auf -Gemäß dem Standard- zu setzen, da keine API verfügbar ist. - Ich werde mich darum kümmern!

Mein Problem ist jetzt, dass ich mehrere Skin-Standards verwalten muss, und ich muss identifizieren, welcher geladen ist, um den verschiedenen Elementen eine Ebene zuzuweisen oder nicht.

Wenn jemand dieses Stück Code bereits hat, bin ich dafür!

Hallo
Sie benötigen diesen Code:

Dim vDSNames                As Variant
Dim swModelDocExt           As ModelDocExtension

Set swModelDocExt = swModel.Extension
vDSNames = swModelDocExt.GetDraftingStandardNames

VDSNames enthält alle Skin-Standards, die im Dropdown-Menü verfügbar sind.
So finden Sie heraus, welche angewendet wird:

Dim sNorm as String
sNorm = swModelDocExt.GetUserPreferenceString(SwConst.swDetailingDimensionStandardName, SwConst.swDetailingNoOptionSpecified)

Und zum Schluss noch ein neues Modell:

bRet = swModelDocExt.LoadDraftingStandard("xxx") 'Mettre le nom de la norme d'habillage souhaitée
2 „Gefällt mir“

Ein großes Dankeschön an euch @Cyril.f und @Maclane !
Mit eurer Hilfe komme ich ans Ende dessen, was ich tun muss.

An der Spitze!

2 „Gefällt mir“