API SolidWorks – Explication sur OpenDoc6

Bonjour à tous,

Je suis tombé sur une bizzarerie avec la fonction OpenDoc6. Dans une partie de ma macro je cherche à ouvrir consécutivement chaque composant de mon assemblage dans l'ordre du feature manager. Ce que je ne comprend pas c'est que je dois spécifié le type de document à ouvrir comme étant un assemblage pour ouvrir une pièce et inversévment pour ouvrir une pièce sinon le document ne s'ouvre pas.

    If FileTyp = swDocPART Then
        swApp.OpenDoc6 CompPath, swDocASSEMBLY, swOpenDocOptions_Silent, ConfigName, longstatus, longwarnings
     End If

    If FileTyp = swDocASSEMBLY Then
        swApp.OpenDoc6 CompPath, swDocPART, swOpenDocOptions_Silent, ConfigName, longstatus, longwarnings
    End If

Est-ce que quelqu'un aurait une explication?

 

Saut,

C'est le fonctionnement normal de la méthode OpenDoc6. Voir ici : http://help.solidworks.com/2016/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.isldworks~opendoc6.html

 

Bonjour,

Ce sont les fonctionnalités de SW qui imposent de savoir quel type de fichier est ouvert.

Pour les API ça permet entre autre d'adresser les bonnes fonctionnalités puisque chaque type de fichier permet des actions différentes.

Je comprends que l'on doivent préciser quel type de fichier nous voulons ouvrir mais ce que je ne comprends pas c'est que je dois :

  1. Définir le type PIECE pour ouvrir un ASSEMBLAGE
  2. Définir le type ASSEMBLAGE pour ouvrir une PIECE

 

Bonjour,

Mal lu, étrange.

Bug ou mauavise déclaration des types de doc SW.

Comment est déterminé le type de document à ouvrir?

Normalement ça devrait être ça:

' Determine type of SOLIDWORKS file based on file extension
    If InStr(LCase(sDocFileName), "sldprt") > 0 Then
        nDocType = swDocPART
    ElseIf InStr(LCase(sDocFileName), "sldasm") > 0 Then
        nDocType = swDocASSEMBLY
    ElseIf InStr(LCase(sDocFileName), "slddrw") > 0 Then
        nDocType = swDocDRAWING
    Else
        ' Probably not a SOLIDWORKS file
        nDocType = swDocNONE
        ' So cannot open the file
        Exit Sub
    End If   

c'est du même ordre que pour appeler une propriété personnalisée dans une mmise en plan : $PRPSHEET si c'est défini dans le prt/asm, $PRP si c'est défini dans le drw...