API VBA Construction soudée automatique

Bonjour,

je cherche une solution pour créer des groupes de construction soudée dans une API en VBA à partir d'une esquisse 3D déjà générée en VBA.

Mon esquisse 3D générée précédemment s'appelle NdM3D et contient un nombre variable de segments (entre 5 et 50) tous nommés "ligne 1" à "ligne i". J'ai réussi en bidouillant à limiter un peu le nombre de lignes de mon code, mais je reste à 7 lignes de code par segment, entre les déclarations et les fonctions. Je cherche donc à transformer cette fonction en une boucle s'étendant sur la totalité des segments que contient mon esquisse. J'ai récupéré la variable Ubounds du nombre de segments, ça fonctionne. Mais j'ai beau essayer plusieurs syntaxes, je n'arrive pas à créer une boucle qui me crée le tableau des groupes pour la construction soudée. L'orientation étant assez aléatoire, il faut que chaque segment soit dans un groupe distinct. Je cherche au final à avoir la table group.array qui contienne "i" groupes composés chacun d'un seul segment.

Mon code actuel :

Dim swApp As SldWorks.SldWorks

Dim Part As ModelDoc2

Dim boolstatus As Boolean

Dim FeatMgr As FeatureManager

Dim SelMgr As SelectionMgr

Dim mySketch As SldWorks.Sketch

Dim swWeldFeat As SldWorks.Feature

Dim swWeldFeatData As SldWorks.StructuralMemberFeatureData

Dim skSegCount As Long

Dim vSkSegments As Variant

Dim skSegment As SldWorks.SketchSegment

Option Explicit

Public Sub Main()

    Set swApp = Application.SldWorks
    Set Part = swApp.ActiveDoc
    Set FeatMgr = Part.FeatureManager
    Set SelMgr = Part.SelectionManager

    Dim myFeature2 As Object
    Set myFeature2 = Part.FeatureByName("NdM 3D")
    Set mySketch = myFeature2.GetSpecificFeature2()
    vSkSegments = mySketch.GetSketchSegments()
    skSegCount = UBound(vSkSegments)
    Debug.Print "    nombre de segments dans l'esquisse = " & skSegCount
    
    Dim myFeature As Object
    Set myFeature = Part.FeatureManager.InsertWeldmentFeature()
    Dim GroupArray() As Object
    ReDim GroupArray(0 To 100) As Object
    
'    For i = 1 To UBound(vSkSegments)

' à partir de là, c'est la partie qui fonctionne pour 2 segments successifs, que je souhaite étendue aux i segments dans la boucle

    Dim Group1, Group2 As StructuralMemberGroup
    Set Group1 = FeatMgr.CreateStructuralMemberGroup
    Set Group2 = FeatMgr.CreateStructuralMemberGroup
    Dim segments1(0) As Object
    Dim segments2(0) As Object
 

    boolstatus = Part.Extension.SelectByID2("Line1@NdM 3D", "EXTSKETCHSEGMENT", 0, 0, 0, False, 0, Nothing, 0)
    Set segments1(0) = SelMgr.GetSelectedObject6(1, 0)
    Group1.Segments = (segments1)
    Set GroupArray(0) = Group1
    boolstatus = Part.Extension.SelectByID2("Line2@NdM 3D", "EXTSKETCHSEGMENT", 0, 0, 0, False, 0, Nothing, 0)
    Set segments2(0) = SelMgr.GetSelectedObject6(1, 0)
    Group2.Segments = (segments2)
    Set GroupArray(1) = Group2

'   next i

    Set myFeature = Part.FeatureManager.InsertStructuralWeldment4("D:\Bibliothèque SW\Bibliothèque profilés\Test\profile1\mon_profile.sldlfp", 1, False, (GroupArray))
    Part.ClearSelection2 True

End Sub

Attention, la syntaxe va surement piquer les yeux des initiés, elle est une compilation de plusieurs copier-coller d'exemples qui me semblaient correspondre à ma recherche.

Une idée ?

Merci.
 

Salut,

Je joins une idée du code.

Peux-tu me donner un fichier SW avec une esquisse 3D correspondant au besoin de la macro pour faire des tests ?


macro_construction_soude.txt
2 « J'aime »

Ci-joint un fichier test avec le profile de cionstruction soudée. Je regarde le code en parallèle. Merci.


test_api_construction_soudee.zip

Vite fait bien fait. J'avais bien tenté cette syntaxe mais j'ai dû rater quelque chose,  elle ne passait pas. Je coirs que j'avais omis la déclaration de la variable i. Merci remrem.

Du premier coup !? :-)

Je t'avoue que j'en doutait.

Content de t'avoir aidé.

Bonne journée.

1 « J'aime »