Macro selectionner toute les ligne existante sur une vue
  • Topic:
    • SOLIDWORKS

  • 4 réponses
  • 666 vues

Par sbadenis Le 11 septembre 2019

Bonjour,

Je souhaite sélectionner toute les lignes ajouté sur une vue pour les supprimer ensuite.

Pour l'instant j'arrive à effacer quand je connais le numéro de la ligne (ici de 1 à 99) mais peut on faire en sorte de lister toute les ligne existante afin de les supprimer ensuite?

Ci dessous le bout de code que le novice que je suis essaie de modifier pour l'insérer ensuite dans une macro un peut plus complexe.

Dim swApp As Object

Dim Part As Object
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long
Dim Numberline As Integer



Sub main()
Numberline = 0
Set swApp = Application.SldWorks

Set Part = swApp.ActiveDoc
Dim myModelView As Object
Set myModelView = Part.ActiveView
myModelView.FrameState = swWindowState_e.swWindowMaximized
boolstatus = Part.ActivateView("Vue de mise en plan1")


  
  Do
    Numberline = Numberline + 1
    'boolstatus = Part.Extension.SelectByID2("Line", "SKETCHSEGMENT", 0, 0, 0, False, 0, Nothing, 0)
    boolstatus = Part.Extension.SelectByID2("Line" & Numberline, "SKETCHSEGMENT", 0, 0, 0, False, 0, Nothing, 0)
    Part.EditDelete
  Loop While Numberline < 100



End Sub

 

Meilleure réponse

d.roger | 19558 point(s)

Bonjour,

Essaye avec le code suivant pour voir si cela te convient :

Option Explicit

Dim swApp As Object
Dim Part As Object
Dim swDraw As SldWorks.DrawingDoc
Dim swView As SldWorks.View
Dim swSketch As SldWorks.Sketch
Dim vSkSegArr As Variant
Dim vSkSeg As Variant
Dim swSkSeg  As SldWorks.SketchSegment
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long
Dim Numberline As Integer
Dim lNumSegments As Long

Sub main()
    Set swApp = Application.SldWorks
    Set Part = swApp.ActiveDoc
    Set swDraw = Part
    Dim myModelView As Object
    Set myModelView = Part.ActiveView
    myModelView.FrameState = swWindowState_e.swWindowMaximized
    boolstatus = Part.ActivateView("Vue de mise en plan1")
    
    Set swView = swDraw.ActiveDrawingView

    lNumSegments = swView.GetLineCount2(1)

    If lNumSegments > 0 Then
        Set swSketch = swView.GetSketch
        vSkSegArr = swSketch.GetSketchSegments
        For Each vSkSeg In vSkSegArr
            Set swSkSeg = vSkSeg
            boolstatus = Part.Extension.SelectByID2(swSkSeg.GetName, "SKETCHSEGMENT", 0, 0, 0, False, 0, Nothing, 0)
            Part.EditDelete
        Next vSkSeg
    End If
End Sub

 

Cordialement,

Les autres réponses

d.roger | 19558 point(s)

Bonjour,

Essaye avec le code suivant pour voir si cela te convient :

Option Explicit

Dim swApp As Object
Dim Part As Object
Dim swDraw As SldWorks.DrawingDoc
Dim swView As SldWorks.View
Dim swSketch As SldWorks.Sketch
Dim vSkSegArr As Variant
Dim vSkSeg As Variant
Dim swSkSeg  As SldWorks.SketchSegment
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long
Dim Numberline As Integer
Dim lNumSegments As Long

Sub main()
    Set swApp = Application.SldWorks
    Set Part = swApp.ActiveDoc
    Set swDraw = Part
    Dim myModelView As Object
    Set myModelView = Part.ActiveView
    myModelView.FrameState = swWindowState_e.swWindowMaximized
    boolstatus = Part.ActivateView("Vue de mise en plan1")
    
    Set swView = swDraw.ActiveDrawingView

    lNumSegments = swView.GetLineCount2(1)

    If lNumSegments > 0 Then
        Set swSketch = swView.GetSketch
        vSkSegArr = swSketch.GetSketchSegments
        For Each vSkSeg In vSkSegArr
            Set swSkSeg = vSkSeg
            boolstatus = Part.Extension.SelectByID2(swSkSeg.GetName, "SKETCHSEGMENT", 0, 0, 0, False, 0, Nothing, 0)
            Part.EditDelete
        Next vSkSeg
    End If
End Sub

 

Cordialement,

sbadenis | 15045 point(s)

Fait parfaitement le job! Merci beaucoup je ne pense pas que j'aurai réussi à finir cette macro sans ton aide.

Juste pour info que fait cette ligne:

myModelView.FrameState = swWindowState_e.swWindowMaximized

 

Pour le reste je pense avoir compris:

Tu regarde si plus de 0 ligne existante dans la vue puis tu boucle sur chaque ligne et tu la supprime.

 

Et merci beaucoup  d.roger le roi des macros! Si je peux me permettre!

d.roger | 19558 point(s)

Bonjour,

J'ai laissé la ligne en question dans le code car elle faisait déjà parti de ton code mais elle ne sert à rien pour la fonction de suppression des lignes, elle permet de mettre la fenêtre SW du plan en dimension maximale (ou en dimension minimale si tu remplace "swWindowMaximized" par "swWindowMinimized").

Pour le reste tu as bien compris.

Cordialement,