Quels sont les mots clé pour créer une spline avec pilotage par tangente?

Bonjour à tous,

je suis débutant sur SW, et je m'intéresse à la création de macro pour la construction de trajectoire.

Je cherche à reproduire le plus fidèlement possible la trajectoire d'un fil de tricot industriel.  La trajectoire passe par 4 points et on utilise des lignes et des splines pour sa construction.

Grâce à l'enregistrement de macro j'ai pu récupérer le script nécessaire créer des points, contruire des lignes ainsi que des splines.

Cependant j'ai besoin d'avoir le contrôle sur les tangentes du points de départ et d'arrivée (que l'on calcul). Malheureusement lorsque j'utilise l'enregistrement de macro et que je construis la spline avec pilotage par tangente je ne vois aucune nouvelle "fonction" apparaître.

Est-il est possible de récupérer cette fonction?

 

Voici le script enregistrer que j'ai obtenu après construction manuelle (il reste sans doute des lignes inutiles) :

Partial Class SolidWorksMacro

    Public Sub main()
            Dim swDoc As ModelDoc2 = Nothing
            Dim swPart As PartDoc = Nothing
            Dim swDrawing As DrawingDoc = Nothing
            Dim swAssembly As AssemblyDoc = Nothing
            Dim boolstatus As Boolean = false
            Dim longstatus As Integer = 0
            Dim longwarnings As Integer = 0
            swDoc = CType(swApp.ActiveDoc,ModelDoc2)
            swDoc.SketchManager.Insert3DSketch(true)
        '
            Dim skSegment As SketchSegment = Nothing
            skSegment = CType(swDoc.SketchManager.CreateLine(0.000000, 0.000000, 0.000000, -0.002000, 0.004000, -0.000500),SketchSegment)
            swDoc.SetPickMode()
            swDoc.ClearSelection2(true)
            '
            Dim pointArray As Array = Nothing
            Dim points(8) As Double
            points(0) = -0.002
        points(1) = 0.004
        points(2) = -0.0005
        points(3) = 0.004
        points(4) = 0.008
            points(5) = -0.0015
            points(6) = 0.016
        points(7) = 0.009
            points(8) = -0.002
            pointArray = points
            skSegment = CType(swDoc.SketchManager.CreateSpline(pointArray),SketchSegment)
        boolstatus = swDoc.Extension.SelectByID2("Spline1", "SKETCHSEGMENT", 0.0, 0.0, 0, False, 0, Nothing, 0)
            swDoc.ShowNamedView2("*Gauche", 3)
            swDoc.ClearSelection2(true)
            swDoc.EditUndo2(1)
            boolstatus = swDoc.Extension.SelectByID2("Spline1", "SKETCHSEGMENT", 0.0070000000000000062, 0.0060299676105561159, -0.0010150801486359592, false, 0, Nothing, 0)
            swDoc.ShowNamedView2("*Face", 1)
            swDoc.ShowNamedView2("*Gauche", 3)
            swDoc.ClearSelection2(true)
            swDoc.EditUndo2(1)
            boolstatus = swDoc.Extension.SelectByID2("Spline1", "SKETCHSEGMENT", 0.0069999999999999984, 0.0049025748626198599, -0.00080798849755920818, false, 0, Nothing, 0)
            swDoc.ShowNamedView2("*Face", 1)
            swDoc.ClearSelection2(true)
            swDoc.SketchManager.Insert3DSketch(true)
    End Sub

    ''' <summary>
    ''' The SldWorks swApp variable is pre-assigned for you.
    ''' </summary>
    Public swApp As SldWorks


End Class

Encore merci

 

Bonjour,

C'est la méthode AddCurvatureControl, voilà la page d'aide :

http://help.solidworks.com/2016/English/api/sldworksapi/SOLIDWORKS.Interop.sldworks~SOLIDWORKS.Interop.sldworks.ISketchSpline~AddCurvatureControl.html

Voir cet exemple proposé par SolidWorks :

http://help.solidworks.com/2015/English/api/sldworksapi/Set_Spline_Tangency_and_Curvature_Controls_Example_VB.htm
 

@ .PL,

 

merci pour l'information, maisje n'ai pas réussi à utiliser AddTangencyControl.

Je n'ai pas suffisamment de maîtrise pour le moment.

Cependant j'ai trouvé quelque chose d'intermédiaire en imposant des relations de tangence entre ligne/spline (j'ai du créer un point et une ligne supplémentaires dans le plan qui va bien pour imposer la tagente au point d'arrivé) :

boolstatus = swDoc.Extension.SelectByID2("Line1", "SKETCHSEGMENT", 0.001252185401910166,         0.0021753914154531259, 0.00035, False, 0, Nothing, 0)
boolstatus = swDoc.Extension.SelectByID2("Spline1", "SKETCHSEGMENT", 0.0012466358052038895, 0.0021750333769559468, 0.00035, True, 0, Nothing, 1)
swDoc.SketchAddConstraints("sgTANGENT")

 

Petite question supplémentaire :

lorsque l'on sélectionne une entité (point, ligne etc....) avec SelectByID2, les valeurs numériques correspondent-elles à quelque chose de précis (coordonnées ?, autres?).


vues.jpg

  "Edit" :

j'ai pu ajouter la commande AddTangencyControl. Ci-dessous mon exemple.

En revanche il semble que cela ne donne que le moyen de controler la tangente manuellement sur le GUI une fois la macro exécutée. De plus le contrôle n'est appliqué que pour le dernier point de la spline et peu importe les coordonnées entrées cela n'a aucune influence.

Ai-je oublié quelque chose ?

J'ai trouvé un autre exemple (pas encore testé) dans"Get and Set Spline Handles Example (VBA)"  ici :

help.solidworks.com/2016/English/api/sldworksapi/Get_and_Set_Spline_Handles_Example_VB.htm

Puisque je souhaite imposer mes tangentes en certain points (départ et arrivée) ne devrais-je pas utiliser plutôt:

swSpline.GetSplineHandles()

TangentMagnitude

TangentRadialDirection

 

??

  Public Sub main()

        Dim swDoc As ModelDoc2 = Nothing
        Dim swPart As PartDoc = Nothing
        Dim swDrawing As DrawingDoc = Nothing
        Dim swAssembly As AssemblyDoc = Nothing
        Dim boolstatus As Boolean = False
        Dim longstatus As Integer = 0
        Dim longwarnings As Integer = 0


        Dim swSpline As SketchSpline = Nothing
        Dim swSplineH1 As SplineHandle = Nothing

        swDoc = CType(swApp.ActiveDoc, ModelDoc2)
        swDoc.SketchManager.Insert3DSketch(True)
        Dim skSegment As SketchSegment = Nothing
        skSegment = CType(swDoc.SketchManager.CreateLine(0.0, 0.0, 0.0, -0.0002, 0.00087, 0.000175), SketchSegment)
        swDoc.SketchAddConstraints("sgFIXED")

        swDoc.ClearSelection2(true)
        '
        Dim pointArray As Array = Nothing
        Dim points(8) As Double
        points(0) = -0.0002
        points(1) = 0.00087
        points(2) = 0.000175
        points(3) = 0.0002
        points(4) = 0.00203
        points(5) = 0.000525
        points(6) = 0.00125
        points(7) = 0.002175
        points(8) = 0.0007
        pointArray = points
        skSegment = CType(swDoc.SketchManager.CreateSpline(pointArray), SketchSegment)
        swDoc.ClearSelection2(True)
 

        boolstatus = swDoc.Extension.SelectByID2("Spline1", "SKETCHSEGMENT", 0.0, 0.0, 0.0, False, 0, Nothing, 0)

        swSpline = swDoc.SelectionManager.GetSelectedObject6(1, 0)
        swSplineH1 = swSpline.AddTangencyControl(-0.0002, 0.00087, 0.000175)


        swDoc.SketchManager.Insert3DSketch(True)
        swDoc.ClearSelection2(True)
       
    End Sub