Macro ouvrir un ensemble en selectionnant les pièces

vos questions concernant les API SolidWorks

Macro ouvrir un ensemble en selectionnant les pièces

Messagepar Agadoudou » Jeu 10 Jan 2013, 16:00

Bonjour à tous,

Grâce a notre ami Lyric j'ai pu trouver un bout de code me permettant de faire une composition a emporter d'un ensemble servant de base.

Le restant de la démarche est de ne pas prendre certaines pièces de cette base suivant les choix de l'utilisateur.
Je vais donc passer par un userform avec des checkbox indiquant les pièces que l’utilisateur souhaite dans sa composition a emporter. En fait, c'est un principe d'option. Cela concernera 2 pièces et 1 sous-ensembles dont on connait le nom. pièce1 et pièce2 pour les pièces, ensemble3 pour le sous ensemble

Est ce que c'est possible d’intégrer une tel chose dans mon code ?

Code: Tout sélectionner
Option Explicit

Dim swApp As SldWorks.SldWorks
Public Enum swDocumentTypes_e
    swDocNONE = 0       ' Used to be TYPE_NONE

    swDocPART = 1       ' Used to be TYPE_PART

    swDocASSEMBLY = 2   ' Used to be TYPE_ASSEMBLY

    swDocDRAWING = 3    ' Used to be TYPE_DRAWING
End Enum

Dim swDoc As SldWorks.ModelDoc2
Dim swDraw As SldWorks.DrawingDoc
Dim swModelDoc As SldWorks.ModelDoc2
Dim swModelDocExt As SldWorks.ModelDocExtension
Dim swPackAndGo As SldWorks.PackAndGo
Dim myFileName As String
Dim pgFileNames As Variant
Dim pgFileStatus As Variant
Dim pgSetFileNames() As String
Dim pgGetFileNames As Variant
Dim pgDocumentStatus As Variant
Dim status As Boolean
Dim warnings As Long
Dim errors As Long
Dim i As Long
Dim j As Long
Dim namesCount As Long
Dim myPath As String
Dim statuses As Variant

Sub Copie()

Dim swApp As SldWorks.SldWorks
Dim swmodel As SldWorks.ModelDoc2
Set swApp = CreateObject("SldWorks.Application")

Dim Part As Object
Dim longstatus As Long, longwarnings As Long

Set swDoc = swApp.ActiveDoc



    If swDoc Is Nothing Then MsgBox ("Pas de document ouvert"): Exit Sub
    If swDoc.GetType = 1 Then MsgBox ("Ce programme ne fonctionne pas" & vbNewLine & "sur un fichier pièce"): Exit Sub
    If swDoc.GetType = 2 Then MsgBox ("La mise en plan de cet assemblage ne sera pas copiée")

Set swModelDocExt = swDoc.Extension

' Get Pack and Go object
Set swPackAndGo = swModelDocExt.GetPackAndGo

' Inclure les plans
swPackAndGo.IncludeDrawings = True
Debug.Print "  Include drawings: " & swPackAndGo.IncludeDrawings

' Obtenez des chemins courant et de fichiers de documents de l'assemblage
status = swPackAndGo.GetDocumentNames(pgFileNames)

Debug.Print "  Chemin actuel et noms de fichier : "
If (Not (IsEmpty(pgFileNames))) Then
    For i = 0 To UBound(pgFileNames)
        Debug.Print "    Le chemin et le nom de fichier actuel sont : " & pgFileNames(i)
     
    Next i
End If

' Obtenez le chemin de sauvegarde courant à des chemins et noms de fichier des documents de l'assemblage
status = swPackAndGo.GetDocumentSaveToNames(pgFileNames, pgFileStatus)

Debug.Print "  Le chemin par défaut actuel : "
If (Not (IsEmpty(pgFileNames))) Then
    For i = 0 To UBound(pgFileNames)
        Debug.Print "   Le chemin et le nom de fichier actuel sont : " & pgFileNames(i)
           Next i
           End If

' Créez vos propres noms de fichiers pour les documents du modèle

ReDim pgSetFileNames(i)

UserForm10.Show

If Len(UserForm10.numeroaff.Text) <> 4 Then
MsgBox "Il doit y avoir 4 caractères"

UserForm10.Show

End If

'Emplacement de la coposition a emporter

myPath = UserForm10.TextBox1.Value
status = swPackAndGo.SetSaveToName(True, myPath)

' Définition des chemins et les noms de documents à emporter

status = swPackAndGo.SetDocumentSaveToNames(pgSetFileNames)

' Ajoutez un préfixe et un suffixe au nouveau fichiers
swPackAndGo.AddPrefix = UserForm10.numeroaff.Value & "-"
swPackAndGo.AddSuffix = ""

' Pack and Go
statuses = swModelDocExt.SavePackAndGo(swPackAndGo)

'Fermeture du document solidworks actif
myPath = swDoc.GetPathName
swApp.CloseDoc myPath
Set swDoc = Nothing: Set swApp = Nothing
End Sub


Donc en fait, avant de faire la copie, il faudrait pouvoir occulter les pièces 1 et 2 ainsi que le sous ensemble 3 ... Par exemple .

Merci !!!!! :D
Merci à TOUS !!!!!
Agadoudou
Padawan SolidWorks
 
Messages: 84
Inscription: Ven 13 Avr 2012, 7:19
Localisation: Clermont Fd

Re: Macro ouvrir un ensemble en selectionnant les pièces

Messagepar liryc » Jeu 10 Jan 2013, 20:08

Bonsoir,
Vu que le pack and go ne permet pas de supprimer des pièces de l'export, le plus simple est de supprimer ce qui ne doit pas être exporté, lancer la composition à emporter puis fermer sans sauvegarder.
liryc
Chevalier Jedi SolidWorks
 
Messages: 479
Inscription: Ven 02 Mar 2007, 8:14
Localisation: Paris - SW2009 SP5.0

Re: Macro ouvrir un ensemble en selectionnant les pièces

Messagepar Agadoudou » Ven 11 Jan 2013, 7:52

Mouais ... j'en avais bien peur .... Bon ben tant pis !!! Merci Lyric !
Merci à TOUS !!!!!
Agadoudou
Padawan SolidWorks
 
Messages: 84
Inscription: Ven 13 Avr 2012, 7:19
Localisation: Clermont Fd

Re: Macro ouvrir un ensemble en selectionnant les pièces

Messagepar Agadoudou » Ven 11 Jan 2013, 10:57

Par contre, est ce que tu sais comment je peux savoir si une pièce (dont je connais le nom) est présente dans l'assemblage ?
Merci à TOUS !!!!!
Agadoudou
Padawan SolidWorks
 
Messages: 84
Inscription: Ven 13 Avr 2012, 7:19
Localisation: Clermont Fd

Re: Macro ouvrir un ensemble en selectionnant les pièces

Messagepar Agadoudou » Ven 11 Jan 2013, 11:31

J'ai essayé ça .... ce fut un echec ...

Code: Tout sélectionner
presence = Part.Extension.SelectByID2("T63-A60-C-1.prt", "COMPONENT", 0, 0, 0, False, 0, Nothing, 0)

If presence = True Then
MsgBox "YO MAMAAAA !!!!!"
End If
Merci à TOUS !!!!!
Agadoudou
Padawan SolidWorks
 
Messages: 84
Inscription: Ven 13 Avr 2012, 7:19
Localisation: Clermont Fd

Re: Macro ouvrir un ensemble en selectionnant les pièces

Messagepar liryc » Ven 11 Jan 2013, 12:22

Regarde dans EditSuppress2 dans l'aide de l'API si je ne fais pas d'erreur.
liryc
Chevalier Jedi SolidWorks
 
Messages: 479
Inscription: Ven 02 Mar 2007, 8:14
Localisation: Paris - SW2009 SP5.0

Re: Macro ouvrir un ensemble en selectionnant les pièces

Messagepar Agadoudou » Ven 11 Jan 2013, 12:46

liryc a écrit:Regarde dans EditSuppress2 dans l'aide de l'API si je ne fais pas d'erreur.



Waouhhhh je n'arrive a mettre ça en forme dans mon code .... :oops:
Merci à TOUS !!!!!
Agadoudou
Padawan SolidWorks
 
Messages: 84
Inscription: Ven 13 Avr 2012, 7:19
Localisation: Clermont Fd

Re: Macro ouvrir un ensemble en selectionnant les pièces

Messagepar liryc » Ven 11 Jan 2013, 14:49

Si l'assemblage est toujours le même et les noms de fichiers également tu dois pouvoir t'en sortir avec ce genre de manip:
Code: Tout sélectionner
status = swDoc.Extension.SelectByID2("XXX@YYY", "COMPONENT", 0, 0, 0, False, 0, Nothing, 0)

XXX étant le nom de l'assemblage dans le feature manager (sans extension)
YYY étant le nom de l'assemblage sans extension
liryc
Chevalier Jedi SolidWorks
 
Messages: 479
Inscription: Ven 02 Mar 2007, 8:14
Localisation: Paris - SW2009 SP5.0

Re: Macro ouvrir un ensemble en selectionnant les pièces

Messagepar Agadoudou » Lun 14 Jan 2013, 8:29

Bonjour liryc !!!

Merci pour ta réponse. Je n'arrive toujours pas a lui faire vérifier la présence de la pièce ...

J'ai écris ça :

Code: Tout sélectionner
Dim Adressecote, Taille, Angle

Taille = UserForm3.TextBox1.value
Angle = UserForm3.TextBox2.value
Adressecote = Taille & "-" & Angle & "-"

'Présence pièce

' Cherche = Nom de la pièce a trouver dans l'ensemble

Dim Cherche

Cherche = Adressecote & "C-1@" & Adressecote & "Ensemble"

status = swDoc.Extension.SelectByID2(Cherche, "COMPONENT", 0, 0, 0, False, 0, Nothing, 0)


Comment vais-je récupérer l'info ? Ça sera un truc du genre status = vrai ?

Parce que derrière je voudrais mettre un truc du genre :

Si la pièce TOTO est présente Alors modifies les cotes suivantes ....
Merci à TOUS !!!!!
Agadoudou
Padawan SolidWorks
 
Messages: 84
Inscription: Ven 13 Avr 2012, 7:19
Localisation: Clermont Fd

Re: Macro ouvrir un ensemble en selectionnant les pièces

Messagepar liryc » Lun 14 Jan 2013, 9:59

Dans ce cas, regarde plutôt dans traverse assemblies dans l'aide del 'API
liryc
Chevalier Jedi SolidWorks
 
Messages: 479
Inscription: Ven 02 Mar 2007, 8:14
Localisation: Paris - SW2009 SP5.0


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: Aucun utilisateur enregistré et 1 invité

banniere