[RESOLU] Positionner la vue du modele "normal à" u

vos questions concernant les API SolidWorks

[RESOLU] Positionner la vue du modele "normal à" u

Messagepar Titifonky » Ven 13 Mai 2011, 16:10

Bonjour,

Je galère depuis quelques jours pour arriver à positionner la vue de mon modèle "normal à" une face.

L'origine de mon projet : J'essaye de mettre au point une macro d'export en dxf à partir d'un assemblage.
La démarche : Je sélectionne les faces que je souhaite exporter dans l'assemblage et je récupère un fichier dxf par face.

Après avoir parcouru le forum, j'ai trouvé des macros pour l'export dxf en passant par une MEP. Super, j'y suis presque.

Je suis parti dans la direction suivante :
Je récupère toutes les faces sélectionnées.
Je trie les faces par pièce.
J'ouvre chaque pièce.
Je me place "normal à" chaque face sélectionnée et je crée une mise en page de cette face.
J'enregistre la mise en page en dxf.

J'arrive à récupérer toutes les faces sélectionnées à partir de l'assemblage.
Je n'arrive pas à obtenir un identifiant unique pour chaque face. Y en a t-il un ?
Cela me permettrai de retrouver la face dans ma pièce à partir de ma sélection dans mon assemblage.
Quand je suis dans une pièce, je n'arrive pas à boucler sur ma sélection et à positionner ma vue "normal à" chaque face.

J'ai essayé plein de truc, voici mes bout de code

Pour boucler sur les faces d'une pièces et se placer "normal à" chaque face
Code: Tout sélectionner
Sub ViewFromFace()

    Dim Sw                  As SldWorks.SldWorks
    Dim Modele              As ModelDoc2
    Dim Piece               As PartDoc
    Dim Vue                 As ModelView
   
    Dim SelMgr              As SelectionMgr
    Dim Face                As Face2
   
    Dim CollNom As New Collection
    Dim Nom As String
   
    Dim i As Integer
    Dim status As Boolean
   
    Set Sw = Application.SldWorks
    Set Modele = Sw.ActiveDoc
    Set Piece = Sw.ActiveDoc
    Set Vue = Modele.ActiveView
   
    Set SelMgr = Modele.SelectionManager
   
'--- Boucle sur la sélection
    For i = 1 To SelMgr.GetSelectedObjectCount2(-1)
        Set Face = SelMgr.GetSelectedObject6(i, -1)
       
        '--- Attribution d'un nom à chaque face
        Nom = "Face_" & i
        Piece.SetEntityName Face, Nom
        CollNom.Add Nom
    Next i
   
    Modele.ClearSelection2 True

'--- Boucle sur la collection de noms
    For Each N In CollNom
        Set Face = Piece.GetEntityByName(N, swSelFACES)
        Modele.WindowRedraw
        '--- Selection de la face !!! ne marche pas
        Modele.Extension.SelectByID2 N, "Face", 0, 0, 0, False, -1, Nothing, swSelectOptionDefault
        '--- Affichage de la face "Normal à"
        Modele.ShowNamedView2 "*Normal To", 0
        Modele.ClearSelection2 True
    Next N
   
End Sub


Je me suis ensuite plongé dans les matrices.
En récupérant le vecteur normal à la face, je me suis dit que je pouvais positionner ma vue selon ce vecteur mais solidworks à un comportement que je ne comprend pas.

Je positionne ma vue normal à une face à partir de SolidWorks, je récupère la matrice via la méthode Orientation3. Cette matrice n'est pas normal à la face.
Quel repère utilise SolidWorks pour repérer ses vues.
Quand je positionne ma vue normal au Plan de face à partir de SolidWorks et que je récupère la matrice, elle correspond bien à la normal du Plan de face.
Si quelqu'un à l'explication.

Code: Tout sélectionner
Sub ViewFromFace()

    Dim Sw                  As SldWorks.SldWorks
    Dim Modele              As ModelDoc2
    Dim Piece               As PartDoc
    Dim Vue                 As ModelView
   
    Dim SelMgr              As SelectionMgr
    Dim Face                As Face2
   
    Set Sw = Application.SldWorks
    Set Modele = Sw.ActiveDoc
    'Set Piece = Sw.ActiveDoc
    Set Vue = Modele.ActiveView
   
    Set SelMgr = Modele.SelectionManager
   
    Set Face = SelMgr.GetSelectedObject6(1, -1)
   
    Dim Math As MathUtility
    Set Math = Sw.GetMathUtility
   
    PrintMathTransform "Matrice Vue actuelle", Vue.Orientation3
   
    PrintMathTransform "Matrice normal à la Face", MatriceFromFace(Face)

   'La fonction MatriceFromFace permet de récupérer la matrice en fonction de la normal de la face

    Vue.Orientation3 = MatriceFromFace(Face)
   
    PrintMathTransform "Matrice après transformation", Vue.Orientation3
   
End Sub


Private Function MatriceFromFace(Face As Face2) As MathTransform
   
    Dim Sw  As SldWorks.SldWorks
    Set Sw = Application.SldWorks
   
    Dim Math As MathUtility
    Set Math = Sw.GetMathUtility
   
'--- Initialisation de la fonction
    Set MatriceFromFace= Math.CreateTransform(Nothing)
   
    Dim Echelle As Double
    Echelle = 1
   
    Dim Point(2) As Double
    Point(0) = 0
    Point(1) = 0
    Point(2) = 0
   
    Dim Origin As MathPoint
    Set Origin = Math.CreatePoint(Point)
   
    Dim TransVector As MathVector
    Set TransVector = Origin.ConvertToVector
   
    Dim Vector(2) As Double
    Vector(0) = 0
    Vector(1) = 1
    Vector(2) = 0
   
    Dim ViewXVector As MathVector
    Dim ViewYVector As MathVector
    Dim ViewZVector As MathVector
   
    Set ViewXVector = Math.CreateVector(Vector)
    Set ViewZVector = Math.CreateVector(Face.Normal)
    Set ViewXVector = ViewXVector.Cross(ViewZVector)
    Set ViewXVector = ViewXVector.Normalise
    Set ViewYVector = ViewZVector.Cross(ViewXVector)
   
    MatriceFromFace.SetData ViewXVector, ViewYVector, ViewZVector, TransVector, Echelle
   
End Function

Private Sub PrintMathTransform(Titre As String, MathTrans As MathTransform)
   
    Dim Sw  As SldWorks.SldWorks
    Set Sw = Application.SldWorks
   
    Dim ViewXVector As MathVector
    Dim ViewYVector As MathVector
    Dim ViewZVector As MathVector
    Dim TransVector As MathVector
    Dim Echelle As Double
   
    MathTrans.GetData2 ViewXVector, ViewYVector, ViewZVector, TransVector, Echelle
   

   
    Debug.Print vbNewLine & Titre
    Debug.Print "Vecteur X =   "; ArrayToString(ViewXVector.ArrayData)
    Debug.Print "Vecteur Y =   "; ArrayToString(ViewYVector.ArrayData)
    Debug.Print "Vecteur Z =   "; ArrayToString(ViewZVector.ArrayData)
    Debug.Print "Vecteur T =   "; ArrayToString(TransVector.ArrayData)
    Debug.Print "Echelle =   "; Echelle
   
End Sub

Public Function ArrayToString(Ar As Variant) As String
   
    On Error Resume Next
   
    ArrayToString = ""
   
    Dim Ele As Variant
   
    For Each Ele In Ar
   
        ArrayToString = ArrayToString & Ele & "    ||    "
   
    Next Ele

End Function


Je bute donc sur le positionnement de ma vue normal à une face

A votre bon coeur pour un peu d'aide.

Etienne
Dernière édition par Titifonky le Mer 18 Mai 2011, 11:23, édité 5 fois.
Titifonky
Padawan SolidWorks
 
Messages: 89
Inscription: Mar 05 Avr 2011, 8:23
Localisation: Lille .............. SW Premium 2013 .......... Seven 64b

Messagepar Chico » Ven 13 Mai 2011, 17:17

Bonjour,

Ça n'en fait beaucoup à digérer dans un seul post...

Je vais essayer de regarder en fin de semaine et je te reviens. :wink:
Il vaut mieux poser une question et risquer d'avoir l'air idiot
une journée que de se taire et d'être bête toute sa vie.

8wd a dit : LA FONCTION RECHERCHE EST TON AMIE
http://www.logiciel-cao.com
Avatar de l’utilisateur
Chico
Esprit Jedi Solidworks
 
Messages: 3120
Inscription: Mer 12 Mar 2008, 19:16
Localisation: Mauricie (Québec) ------SW 2006 SP0.0

Messagepar Annwn » Lun 16 Mai 2011, 11:56

Quand tu dis "ne marche pas" qu'est-ce qu'il te fait ? un message d'erreur ? rien ? il tourne en boucle ?

Au passage il te manque Dim N as Integer dans ton 1er code.
Programmer, c'est bien; programmer utile, c'est mieux........
Venez faire un tour ici !
Annwn
Site Admin
 
Messages: 4938
Inscription: Lun 18 Déc 2006, 22:35

Messagepar Titifonky » Lun 16 Mai 2011, 12:02

Il ne sélectionne pas la face dont je lui ai passé le nom
Titifonky
Padawan SolidWorks
 
Messages: 89
Inscription: Mar 05 Avr 2011, 8:23
Localisation: Lille .............. SW Premium 2013 .......... Seven 64b

Messagepar Chico » Lun 16 Mai 2011, 17:24

Salut,

À priori, je dirais que le nom que tu lui attibues lors de la sélection est valide seulement dans l'assemblage. Lorsque tu ouvres la pièce qui s'y réfère, le nom que tu as donné à cette face n'est plus valide, d'où le fait que la sélection ne se fait pas.

Je pense que ta démarche de récupérer le vecteur normal à la face est une bonne façon de régler le problème. Par contre, les résultats obtenus sont donnés par rapport à l'origine de l'ASSEMBLAGE, alors que tu souhaites l'obtenir dans la PIÈCE.

Avec l'objet MathTransform, je crois que tu peux trouver la transformation de repère nécessaire pour passer du système de coordonnée de ton assemblage au système de coordonnée de ta pièce. Tu peux alors trouver l'expression de ton vecteur dans le système de coordonnée de ta pièce, lequel tu utilises pour orienter ta vue lorsque tu es dans ta pièce. Normalement, ça devrait fonctionner. :wink:
Il vaut mieux poser une question et risquer d'avoir l'air idiot
une journée que de se taire et d'être bête toute sa vie.

8wd a dit : LA FONCTION RECHERCHE EST TON AMIE
http://www.logiciel-cao.com
Avatar de l’utilisateur
Chico
Esprit Jedi Solidworks
 
Messages: 3120
Inscription: Mer 12 Mar 2008, 19:16
Localisation: Mauricie (Québec) ------SW 2006 SP0.0

Messagepar Titifonky » Lun 16 Mai 2011, 19:29

Bonsoir,

Je crois que j'ai trouvé d’où vient mon erreur.

Après plusieurs heures d'essai, je me suis rendu compte que Solidworks positionne le modèle par rapport à la vue et non l'inverse, et ça change tout.

C'est à dire qu'il faut lui donner les coordonnées du référentiel de la pièce par rapport à celui de la vue.

Dans ma macro, je lui donnais la position du référentiel normal à ma face (donc celui de ma vue) par rapport au modèle. Il faut que je transpose simplement ma matrice de rotation.

J'essaye demain.

Y a t-il une méthode permettant de récupérer les coordonnées du référentiel de la pièce par rapport à l'assemblage ? Ça m’avancerai un peu.
Titifonky
Padawan SolidWorks
 
Messages: 89
Inscription: Mar 05 Avr 2011, 8:23
Localisation: Lille .............. SW Premium 2013 .......... Seven 64b

Messagepar Chico » Mar 17 Mai 2011, 2:25

Titifonky a écrit:Y a t-il une méthode permettant de récupérer les coordonnées du référentiel de la pièce par rapport à l'assemblage ? Ça m’avancerai un peu.


Salut,

Regarde du côté de Component2.Transform2 ou de Component2.GetTotalTransform
Il vaut mieux poser une question et risquer d'avoir l'air idiot
une journée que de se taire et d'être bête toute sa vie.

8wd a dit : LA FONCTION RECHERCHE EST TON AMIE
http://www.logiciel-cao.com
Avatar de l’utilisateur
Chico
Esprit Jedi Solidworks
 
Messages: 3120
Inscription: Mer 12 Mar 2008, 19:16
Localisation: Mauricie (Québec) ------SW 2006 SP0.0

Messagepar Titifonky » Mar 17 Mai 2011, 8:12

Bon, ça y est, j'ai trouvé.

Voici une macro permettant de positionner la vue "normal à" une face.

Cette macro ne fonctionne que dans une pièce, Solidworks renvoi la normale d'une face dans le repère de la pièce et non de l'assemblage.

Ça m'arrange, je ne vais pas avoir besoin de faire de transformations

Il y a peut être un peu d'optimisation à faire pour qu'elle soit un peu plus rapide.

Code: Tout sélectionner
Sub ViewFromFace()

    Dim Sw                  As SldWorks.SldWorks
    Dim Modele              As ModelDoc2
    Dim Vue                 As ModelView
   
    Dim SelMgr              As SelectionMgr
    Dim Face                As Face2
   
    Set Sw = Application.SldWorks
    Set Modele = Sw.ActiveDoc
    Set Vue = Modele.ActiveView
    Set SelMgr = Modele.SelectionManager
    Set Face = SelMgr.GetSelectedObject6(1, -1)
   
    Dim Math As MathUtility
    Set Math = Sw.GetMathUtility
    Dim Matrice As MathTransform
    Set Matrice = MatriceFromFace(Face)
    Set Matrice = TransposeMatriceRot(Matrice)
   
    Vue.Orientation3 = Matrice
   
End Sub


Private Function MatriceFromFace(Face As Face2) As MathTransform
   
    Dim Sw  As SldWorks.SldWorks
    Set Sw = Application.SldWorks
   
    Dim Math As MathUtility
    Set Math = Sw.GetMathUtility
   
'--- Initialisation de la fonction
    Set MatriceFromFace = Math.CreateTransform(Nothing)
   
    Dim Echelle As Double
    Echelle = 1
   
    Dim Point(2) As Double
    Point(0) = 0: Point(1) = 0: Point(2) = 0
   
    Dim Origin As MathPoint
    Set Origin = Math.CreatePoint(Point)
   
    Dim TransVector As MathVector
    Set TransVector = Origin.ConvertToVector
   
    Dim Vector(2) As Double
   
    Dim NormalToFaceVector As MathVector
    Dim XVector As MathVector
    Dim YVector As MathVector
    Dim ZVector As MathVector
   
    Set NormalToFaceVector = Math.CreateVector(Face.Normal)

'--- Si le vecteur normal à la face est parallèle à l'axe Y, produit vectoriel = 0 donc positionnement arbitraire de la vue
    If NormalToFaceVector.ArrayData(1) = 1# Then
        Vector(0) = 1: Vector(1) = 0: Vector(2) = 0
        Set XVector = Math.CreateVector(Vector)
        Vector(0) = 0: Vector(1) = 0: Vector(2) = -1
        Set YVector = Math.CreateVector(Vector)
        Vector(0) = 0: Vector(1) = 1: Vector(2) = 0
        Set ZVector = Math.CreateVector(Vector)
       
    Else
   
        Vector(0) = 0: Vector(1) = 1: Vector(2) = 0
        Set ZVector = NormalToFaceVector
        Set XVector = Math.CreateVector(Vector)
        Set XVector = XVector.Cross(ZVector)
        Set XVector = XVector.Normalise
        Set YVector = ZVector.Cross(XVector)
       
    End If
   
    MatriceFromFace.SetData XVector, YVector, ZVector, TransVector, Echelle
   
End Function

Private Function TransposeMatriceRot(MathTrans As MathTransform) As MathTransform

    Dim Sw  As SldWorks.SldWorks
    Set Sw = Application.SldWorks
   
    Dim Math As MathUtility
    Set Math = Sw.GetMathUtility
   
    Dim XVector As MathVector
    Dim YVector As MathVector
    Dim ZVector As MathVector
    Dim TransVector As MathVector
    Dim Echelle As Double
   
    MathTrans.GetData2 XVector, YVector, ZVector, TransVector, Echelle
   
    Dim XVectorT As MathVector
    Dim YVectorT As MathVector
    Dim ZVectorT As MathVector
   
    Dim Vector(2) As Double
   
    Vector(0) = XVector.ArrayData(0): Vector(1) = YVector.ArrayData(0): Vector(2) = ZVector.ArrayData(0)
    Set XVectorT = Math.CreateVector(Vector)
   
    Vector(0) = XVector.ArrayData(1): Vector(1) = YVector.ArrayData(1): Vector(2) = ZVector.ArrayData(1)
    Set YVectorT = Math.CreateVector(Vector)
   
    Vector(0) = XVector.ArrayData(2): Vector(1) = YVector.ArrayData(2): Vector(2) = ZVector.ArrayData(2)
    Set ZVectorT = Math.CreateVector(Vector)
   
   
    '--- Initialisation de la fonction
    Set TransposeMatriceRot = Math.CreateTransform(Nothing)
   
    TransposeMatriceRot.SetData XVectorT, YVectorT, ZVectorT, TransVector, Echelle

End Function


Je m'attaque à la suite
Titifonky
Padawan SolidWorks
 
Messages: 89
Inscription: Mar 05 Avr 2011, 8:23
Localisation: Lille .............. SW Premium 2013 .......... Seven 64b

Messagepar Titifonky » Mar 17 Mai 2011, 16:08

Bonsoir,

Voici la macro terminée, elle exporte les faces sélectionnées en DXF à partir d'un assemblage.

Petite précision, il faut activer la bibliothèque "Microsoft Scripting Runtime" dans les options de VBA

Une seule chose que je n'ai pas réussi à faire, désactiver le traçage automatique des perçage dans la vue.
Si quelqu'un a une idée.


Code: Tout sélectionner
Public Sub ExportToDXF()

    Dim Sw                  As SldWorks.SldWorks
    Dim Modele              As ModelDoc2
    Dim Piece               As ModelDoc2
    Dim VueModele           As ModelView
    Dim VueDessin           As View
    Dim Dessin              As DrawingDoc
    Dim ModeleDessin        As ModelDoc2
    Dim Fenetre             As Frame
    Dim SelMgr              As SelectionMgr
    Dim Face                As Face2
    Dim Entite              As Entity
    Dim Composant           As Component2
    Dim Chemin              As Variant
   
    Dim MathUtil            As MathUtility
   
    Dim CollVecteursNormal  As Collection
    Dim VecteurNormal       As MathVector
   
    Dim DicComposants       As Dictionary
    Set DicComposants = New Dictionary

   
    Dim i                   As Integer
    Dim status              As Boolean
    Dim FacesConvertis      As Integer
    Dim Error               As Long
    Dim Warning             As Long
   
    FacesConvertis = 0
    Set Sw = Application.SldWorks
    Set Modele = Sw.ActiveDoc
    Set Fenetre = Sw.Frame
    Set MathUtil = Sw.GetMathUtility
   
    Set SelMgr = Modele.SelectionManager
   
'--- Boucle sur la sélection
    For i = 1 To SelMgr.GetSelectedObjectCount2(-1)
       
        If SelMgr.GetSelectedObjectType3(i, -1) = swSelFACES Then
           
            FacesConvertis = FacesConvertis + 1
           
            Set Face = SelMgr.GetSelectedObject6(i, -1)
            Set VecteurNormal = MathUtil.CreateVector(Face.Normal)
            Set Entite = SelMgr.GetSelectedObject6(i, -1)
            Set Composant = Entite.GetComponent
            Chemin = Composant.GetPathName
           
            If DicComposants.Exists(Chemin) Then
                Set CollVecteursNormal = DicComposants.Item(Chemin)
                CollVecteursNormal.Add VecteurNormal
                Set DicComposants.Item(Chemin) = CollVecteursNormal
            Else
                Set CollVecteursNormal = New Collection
                CollVecteursNormal.Add VecteurNormal
                DicComposants.Add Chemin, CollVecteursNormal
            End If
        End If
    Next i
   
    MsgBox FacesConvertis & " face(s) à exporter"
    FacesConvertis = 0
   
'--- Boucle sur les composants
    For Each Chemin In DicComposants
   
        Set Piece = Sw.OpenDoc6(Chemin, swDocPART, swOpenDocOptions_Silent, "", Error, Warning)
        Set CollVecteursNormal = DicComposants.Item(Chemin)
       
        i = 1
        Piece.DeleteNamedView "Export_DXF"
       
        For Each VecteurNormal In CollVecteursNormal
           
            Piece.Visible = True
           
            Set VueModele = Piece.ActiveView
           
            Dim Matrice As MathTransform
            Set Matrice = MatriceNormalFromVecteur(VecteurNormal)
            Set Matrice = TransposeMatriceRot(Matrice)
           
            VueModele.Orientation3 = Matrice
           
            Piece.NameView "Export_DXF"
           
            Chemin = GetPathNoExt(Piece.GetPathName) & "_" & i & ".dxf"
           
            Set ModeleDessin = Sw.NewDocument("Z:\Solidworks\Debit_laser.drwdot", 0, 0, 0)
            Set Dessin = ModeleDessin
           
            Set VueDessin = Dessin.CreateDrawViewFromModelView3(Piece.GetPathName, "Export_DXF", 0#, 0#, 0#)
           
            VueDessin.ScaleDecimal = 1
           
            status = ModeleDessin.Extension.SaveAs(Chemin, swSaveAsCurrentVersion, swSaveAsOptions_Silent, Nothing, Error, Warning)
           
            If status Then FacesConvertis = FacesConvertis + 1
           
            Fenetre.SetStatusBarText status & " "
           
            Piece.DeleteNamedView "Export_DXF"
           
            Sw.CloseDoc ModeleDessin.GetPathName
           
            i = i + 1
           
        Next VecteurNormal
       
        Sw.CloseDoc Piece.GetPathName
       
    Next Chemin
   
    Modele.ClearSelection2 True
   
    MsgBox FacesConvertis & " face(s) exportées"
   
End Sub

Public Function MatriceNormalFromVecteur(VecteurNormalToFace As MathVector) As MathTransform
   
    Dim Sw  As SldWorks.SldWorks
    Set Sw = Application.SldWorks
   
    Dim Math As MathUtility
    Set Math = Sw.GetMathUtility
   
'--- Initialisation de la fonction
    Set MatriceNormalFromVecteur = Math.CreateTransform(Nothing)
   
    Dim Echelle As Double
    Echelle = 1
   
    Dim Point(2) As Double
    Point(0) = 0: Point(1) = 0: Point(2) = 0
   
    Dim Origin As MathPoint
    Set Origin = Math.CreatePoint(Point)
   
    Dim TransVector As MathVector
    Set TransVector = Origin.ConvertToVector
   
    Dim Vector(2) As Double
   
    Dim NormalToFaceVector As MathVector
    Dim XVector As MathVector
    Dim YVector As MathVector
    Dim ZVector As MathVector

'--- Si le vecteur normal à la face est parallèle à l'axe Y, produit vectoriel = 0 donc positionnement arbitraire de la vue
    If VecteurNormalToFace.ArrayData(1) = 1# Then
        Vector(0) = 1: Vector(1) = 0: Vector(2) = 0
        Set XVector = Math.CreateVector(Vector)
        Vector(0) = 0: Vector(1) = 0: Vector(2) = -1
        Set YVector = Math.CreateVector(Vector)
        Vector(0) = 0: Vector(1) = 1: Vector(2) = 0
        Set ZVector = Math.CreateVector(Vector)
       
    Else
   
        Vector(0) = 0: Vector(1) = 1: Vector(2) = 0
        Set ZVector = VecteurNormalToFace
        Set XVector = Math.CreateVector(Vector)
        Set XVector = XVector.Cross(ZVector)
        Set XVector = XVector.Normalise
        Set YVector = ZVector.Cross(XVector)
       
    End If
   
    MatriceNormalFromVecteur.SetData XVector, YVector, ZVector, TransVector, Echelle
   
End Function

Public Function TransposeMatriceRot(MathTrans As MathTransform) As MathTransform

    Dim Sw  As SldWorks.SldWorks
    Set Sw = Application.SldWorks
   
    Dim Math As MathUtility
    Set Math = Sw.GetMathUtility
   
    Dim XVector As MathVector
    Dim YVector As MathVector
    Dim ZVector As MathVector
    Dim TransVector As MathVector
    Dim Echelle As Double
   
    MathTrans.GetData2 XVector, YVector, ZVector, TransVector, Echelle
   
    Dim XVectorT As MathVector
    Dim YVectorT As MathVector
    Dim ZVectorT As MathVector
   
    Dim Vector(2) As Double
   
    Vector(0) = XVector.ArrayData(0): Vector(1) = YVector.ArrayData(0): Vector(2) = ZVector.ArrayData(0)
    Set XVectorT = Math.CreateVector(Vector)
   
    Vector(0) = XVector.ArrayData(1): Vector(1) = YVector.ArrayData(1): Vector(2) = ZVector.ArrayData(1)
    Set YVectorT = Math.CreateVector(Vector)
   
    Vector(0) = XVector.ArrayData(2): Vector(1) = YVector.ArrayData(2): Vector(2) = ZVector.ArrayData(2)
    Set ZVectorT = Math.CreateVector(Vector)
   
   
    '--- Initialisation de la fonction
    Set TransposeMatriceRot = Math.CreateTransform(Nothing)
   
    TransposeMatriceRot.SetData XVectorT, YVectorT, ZVectorT, TransVector, Echelle

End Function

Public Function GetPathNoExt(Path As String) As String

    Dim Tmp() As String
   
    Tmp = Split(Path, ".")
   
    ReDim Preserve Tmp(UBound(Tmp) - 1)
   
    GetPathNoExt = Join(Tmp, ".")

End Function


Voilà
Dernière édition par Titifonky le Lun 23 Mai 2011, 7:47, édité 1 fois.
Titifonky
Padawan SolidWorks
 
Messages: 89
Inscription: Mar 05 Avr 2011, 8:23
Localisation: Lille .............. SW Premium 2013 .......... Seven 64b

Messagepar Chico » Mar 17 Mai 2011, 17:35

Salut,

Merci de partager ton code avec nous!

Je vais regarder ce soir pour la désactivation des perçages. :wink:
Il vaut mieux poser une question et risquer d'avoir l'air idiot
une journée que de se taire et d'être bête toute sa vie.

8wd a dit : LA FONCTION RECHERCHE EST TON AMIE
http://www.logiciel-cao.com
Avatar de l’utilisateur
Chico
Esprit Jedi Solidworks
 
Messages: 3120
Inscription: Mer 12 Mar 2008, 19:16
Localisation: Mauricie (Québec) ------SW 2006 SP0.0

Messagepar Chico » Mer 18 Mai 2011, 0:24

Bonjour Titifonky,

Juste par curiosité, à quoi te sert ce type d'objet et quel type de bibliothèque dois-tu ajouter pour l'utiliser?
Code: Tout sélectionner
Dim DicComposants       As Dictionary


Pour ce qui est de ton problème, je n'ai rien trouvé dans l'aide API. Ça dépend peut-être de tes options de document ou du système.

Je te suggère de poser cette question dans la section Mise en plan. Il est difficile de trouver la façon de le faire automatiquement si on ne sait pas comment le faire manuellement. :wink:
Il vaut mieux poser une question et risquer d'avoir l'air idiot
une journée que de se taire et d'être bête toute sa vie.

8wd a dit : LA FONCTION RECHERCHE EST TON AMIE
http://www.logiciel-cao.com
Avatar de l’utilisateur
Chico
Esprit Jedi Solidworks
 
Messages: 3120
Inscription: Mer 12 Mar 2008, 19:16
Localisation: Mauricie (Québec) ------SW 2006 SP0.0

Messagepar liryc » Mer 18 Mai 2011, 6:54

Bonjour,
A mon avis pour ce qui est de l'affichage des annotations type représentations de filetage il faut regarder dans les options des modèles de mise en plan.
Outils>Options>propriétés du document
Regarde dans les tables ou dans habillage, il y a les imports automatique à l'insertion des vues.
liryc
Chevalier Jedi SolidWorks
 
Messages: 479
Inscription: Ven 02 Mar 2007, 8:14
Localisation: Paris - SW2009 SP5.0

Messagepar Titifonky » Mer 18 Mai 2011, 6:59

Bonjour Chico,

Pour utiliser les dictionnaires il faut activer la bibliothèque "Microsoft Scripting Runtime"

J'utilise les dictionnaires pour stocker des objets dont je doit d'abord vérifier leur présence dans le dictionnaire. Ça me permet d'avoir une liste non triée mais sans doublons.

Dans ce cas, je souhaitais ouvrir les pièces une seule fois même si plusieurs faces d'une même pièce avait été sélectionnée.

Donc pour chaque face, je teste si la pièce existe déjà dans mon dictionnaire. Si oui, je rajoute simplement le vecteur à la collection de ma pièce, si non, je rajoute la pièce dans mon dictionnaire avec ma collection de vecteur.

Voici la structure de mes données :

Dictionnaire :
- Pièce 1 -> Collection :
- Vecteur 1
- Vecteur 2
- Pièce 2 -> Collection :
- Vecteur 1
- Vecteur 2
Titifonky
Padawan SolidWorks
 
Messages: 89
Inscription: Mar 05 Avr 2011, 8:23
Localisation: Lille .............. SW Premium 2013 .......... Seven 64b

Messagepar Titifonky » Mer 18 Mai 2011, 8:44

Merci Lyric,

Effectivement, c'était dans les options du document->Habillage
Titifonky
Padawan SolidWorks
 
Messages: 89
Inscription: Mar 05 Avr 2011, 8:23
Localisation: Lille .............. SW Premium 2013 .......... Seven 64b

Messagepar liryc » Mer 18 Mai 2011, 10:45

De rien, [RESOLU] ?
liryc
Chevalier Jedi SolidWorks
 
Messages: 479
Inscription: Ven 02 Mar 2007, 8:14
Localisation: Paris - SW2009 SP5.0

Suivante

Retourner vers Questions générales sur les API

 


  • Articles en relation
    Réponses
    Vus
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum: Bing [Bot] et 5 invités

banniere