Automatisation de composition à emporter

vos questions concernant les API SolidWorks

Automatisation de composition à emporter

Messagepar Patau8 » Jeu 23 Juin 2011, 21:29

Bonjour a tous,

je viens solliciter votre aide pour un projet que je dois réaliser dans le cadre de mon boulot.

Pour être bref, nous avons toutes une bibliothèque d'accessoires +/- standard. Ces accessoires varie un peu pour s'adapter à chaque commande. Pour ce faire, quand nous avons une commande, nous copions l'accessoires (à l'aide de la composition à emporter) dans le dossier de la commande et on lui ajoute comme suffixe le numéro de commande (pour être sur que le nouvel accessoires n'ai plus de lien avec l'accessoires de base).

Nous faisons tout ca avec des compositions à emporter mais à la longue c'est un peu lourd.

J'aimerais que en cochant dans un fichier excel tous les accessoires nécessaire, puis en activant une macro; excel fasse une composition à emporter des différents accessoires vers le dossier de la commande. J'ai commencé, et je bloque un peu (voir beaucoup) sur le code à utiliser pour faire la composiion à emporter.

Voici la modeste macro que je suis arriver à faire:

Sub Easy_Drawing()

Dim swApp As SldWorks.SldWorks
Dim Part As SldWorks.ModelDoc2
Dim longstatus As Long, longwarnings As Long
Dim swModelDocExt As SldWorks.ModelDocExtension
Dim swPackAndGo As SldWorks.PackAndGo
Dim statuses As Variant
Dim namesCount As Long
Dim pgFilenames As Variant
Dim pgFilestatus As Variant
Dim statut As Boolean
Dim i As Long
Dim pgSetFilenames As Variant

Set swApp = GetObject(, "SldWorks.Application")
swApp.Visible = True
If swApp Is Nothing Then
Set swApp = CreateObject("SldWorks.Application")
swApp.Visible = True
End If

Set Part = swApp.OpenDoc6("D:\Easy Drawing\Arbre\Arbre01\Arbre01.SLDPRT", 1, 1, "", longstatus, longwarnings)
swApp.Visible = True
Set swModelDocExt = Part.Extension
Set swPackAndGo = swModelDocExt.GetPackAndGo

swPackAndGo.IncludeDrawings = True
swPackAndGo.AddSuffix = "_Suff"
statut = swPackAndGo.GetDocumentNames(pgFilenames)
statut = swPackAndGo.GetDocumentSaveToNames(pgSetFilenames, pgFilestatus)
statut = swPackAndGo.SetDocumentSaveToNames(pgSetFilenames)
statuses = swModelDocExt.SavePackAndGo(swPackAndGo)

End Sub

Je précise, que j'ai bien activer les librairies de solidworks dans les références VBA d'excel.

Cette macro travail dans le bon sens sauf que le plan copié avec le suffixe ne pointe pas vers la nouvel pièce (avec le suffixe) mais toujours vers l'ancienne.

Si quelqu'un pouvait me doner un petit coup de pousse et me dire ou se trouve le problème, je vous en serait plus que très reconnaissant.

Merci d'avance pour votre aide.

Patau8
Patau8
Ewok SolidWorks
 
Messages: 7
Inscription: Jeu 23 Juin 2011, 21:08
Localisation: Hombourg (BE)

Messagepar liryc » Jeu 23 Juin 2011, 22:10

Bonsoir,
Je pense qu'il doit en manquer un bout quand je vois l'exemple de l'API 2011.
Code: Tout sélectionner
Option ExplicitDim swApp As SldWorks.SldWorks
Dim swModelDoc As SldWorks.ModelDoc2
Dim swModelDocExt As SldWorks.ModelDocExtension
Dim swPackAndGo As SldWorks.PackAndGo
Dim openFile As String
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 main()Set swApp = Application.SldWorks' Open assembly
openFile = "C:\Program Files\SolidWorks Corp\SolidWorks\samples\tutorial\advdrawings\handle.sldasm"
Set swModelDoc = swApp.OpenDoc6(openFile, swDocASSEMBLY, swOpenDocOptions_Silent, "", errors, warnings)
Set swModelDocExt = swModelDoc.Extension' Get Pack and Go object
Debug.Print "Pack and Go"
Set swPackAndGo = swModelDocExt.GetPackAndGo' Get number of documents in assembly
namesCount = swPackAndGo.GetDocumentNamesCount
Debug.Print "  Number of model documents: " & namesCount' Get whether to include any drawings and simulation results
Debug.Print "  Include drawings: " & swPackAndGo.IncludeDrawings
Debug.Print "  Include simulation results: " & swPackAndGo.IncludeSimulationResults' Get current paths and filenames of the assembly's documents
status = swPackAndGo.GetDocumentNames(pgFileNames)
Debug.Print ""
Debug.Print "  Current path and filenames: "
If (Not (IsEmpty(pgFileNames))) Then
    For i = 0 To UBound(pgFileNames)
        Debug.Print "    The path and filename is: " & pgFileNames(i)
    Next i
End If' Get current save-to paths and filenames of the assembly's documents
status = swPackAndGo.GetDocumentSaveToNames(pgFileNames, pgFileStatus)
Debug.Print ""
Debug.Print "  Current default save-to filenames: "
If (Not (IsEmpty(pgFileNames))) Then
    For i = 0 To UBound(pgFileNames)
        Debug.Print "   The path and filename is: " & pgFileNames(i)
    Next i
End If' Folder where to save the files
myPath = "C:\temp\"
' Create your own filenames for the model's documents
ReDim pgSetFileNames(namesCount - 1)
Debug.Print ""
Debug.Print "  My Pack and Go path and filenames before adding prefix and suffix: "
j = 0
For i = 0 To (namesCount - 1)
         myFileName = pgFileNames(i)
         ' Determine type of SolidWorks file based on file extension
             If InStr(LCase(myFileName), "sldprt") > 0 Then
                 myFileName = j & ".sldprt"
             ElseIf InStr(LCase(myFileName), "sldasm") > 0 Then
                 myFileName = j & ".sldasm"
            ElseIf InStr(LCase(myFileName), "slddrw") > 0 Then
                 myFileName = j & ".slddrw"
             Else
                 ' Only packing up SolidWorks files
                 Exit Sub
             End If
        pgSetFileNames(i) = myPath & myFileName
        Debug.Print "    My path and filename is: " & pgSetFileNames(i)
         j = j + 1
Next i
' Set document paths and names for Pack and Go
status = swPackAndGo.SetDocumentSaveToNames(pgSetFileNames)' Add a prefix and suffix to the new Pack and Go filenames
swPackAndGo.AddPrefix = "SW"
swPackAndGo.AddSuffix = "PackAndGo"
 ' Verify document paths and filenames after adding prefix and suffix
ReDim pgGetFileNames(namesCount - 1)
ReDim pgDocumentStatus(namesCount - 1)
status = swPackAndGo.GetDocumentSaveToNames(pgGetFileNames, pgDocumentStatus)
Debug.Print ""
Debug.Print "  My Pack and Go path and filenames after adding prefix and suffix: "
For i = 0 To (namesCount - 1)
     Debug.Print "    My path and filename is: " & pgGetFileNames(i)
Next i
' Pack and Go
statuses = swModelDocExt.SavePackAndGo(swPackAndGo)
End Sub


N'ayant pas 2011 je ne pourrais pas regarder mais à mon avis exécute celle-ci en pas-à-pas pour voir son fonctionnement et corriger ta propre macro.
liryc
Chevalier Jedi SolidWorks
 
Messages: 479
Inscription: Ven 02 Mar 2007, 8:14
Localisation: Paris - SW2009 SP5.0

Messagepar Annwn » Ven 24 Juin 2011, 11:57

liryc a écrit:N'ayant pas 2011 je ne pourrais pas regarder mais à mon avis exécute celle-ci en pas-à-pas pour voir son fonctionnement et corriger ta propre macro.
Si en 2009 y'avait déjà la composition à emporter !? A moins qu'il y ait des codes nouveaux 2010 ou 2011, tu peux lire la macro...

@ Patau8 : une petite présentation ici ... serait apprécié :)
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 liryc » Ven 24 Juin 2011, 15:11

Il me semble que l'accès par macro à la composition à emporter est une nouveauté de 2011.
Je vais tester mais je doute que ça fonctionne.
liryc
Chevalier Jedi SolidWorks
 
Messages: 479
Inscription: Ven 02 Mar 2007, 8:14
Localisation: Paris - SW2009 SP5.0

Messagepar Patau8 » Ven 24 Juin 2011, 15:26

Les codes pour la composition à emporter sont en effet arriver à partir de la version 2011.

C'est d'ailleurs une des nouveautés fort intéressante pour moi. A condition de savoir la faire fonctionner :? . Ce qui n'est pas encore gagner.

Je pense que je vais essayer de faire fonctionner l'exemple de l'aide avec un assemblage de voir exactement comment cela fonctionne et ensuite essayer de transformer le code pour qu'il s'applique aussi à une pièce.

Je vous dit quoi dès que j'en sais plus.
Patau8
Ewok SolidWorks
 
Messages: 7
Inscription: Jeu 23 Juin 2011, 21:08
Localisation: Hombourg (BE)

Messagepar Annwn » Lun 27 Juin 2011, 11:42

liryc a écrit:Il me semble que l'accès par macro à la composition à emporter est une nouveauté de 2011.
Je vais tester mais je doute que ça fonctionne.
ah d'accord, c'est donc pour ça que je n'en avais encore jamais entendu parler :wink:
Patau8 a écrit:Je pense que je vais essayer de faire fonctionner l'exemple de l'aide avec un assemblage de voir exactement comment cela fonctionne et ensuite essayer de transformer le code pour qu'il s'applique aussi à une pièce.
sage décision :D

reviens nous dire où tu en es de temps en temps :)
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 liryc » Lun 27 Juin 2011, 12:12

Annwn a écrit:
liryc a écrit:Il me semble que l'accès par macro à la composition à emporter est une nouveauté de 2011.
Je vais tester mais je doute que ça fonctionne.
ah d'accord, c'est donc pour ça que je n'en avais encore jamais entendu parler :wink:


Pourtant le sujet viens de toi :p
Donc je confirme ça fonctionne pas :D
liryc
Chevalier Jedi SolidWorks
 
Messages: 479
Inscription: Ven 02 Mar 2007, 8:14
Localisation: Paris - SW2009 SP5.0

Messagepar Annwn » Mar 28 Juin 2011, 11:38

liryc a écrit:
Annwn a écrit:
liryc a écrit:Il me semble que l'accès par macro à la composition à emporter est une nouveauté de 2011.
Je vais tester mais je doute que ça fonctionne.
ah d'accord, c'est donc pour ça que je n'en avais encore jamais entendu parler :wink:


Pourtant le sujet viens de toi :p
Donc je confirme ça fonctionne pas :D
Effectivement mais pour ma défense :), j'avais copier la page dans les nouveautés sans vraiment lire :oops: désolé :D
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

Automatisation de composition à emporter [RESOLU]

Messagepar Patau8 » Ven 01 Juil 2011, 8:00

Salut les amis,

Voila j'ai le plaisir de vous informer que j'ai un début de réponse.

J'ai testé la macro qui vient de l'aide de Sldwks pour la composition à emporter d'un assemblage et la, le même problème. Tout se copie bien mais les plans pointent toujours vers les pièces d'origine. Est-ce que soldwks aurait un petit problème :?:

Pour contourner le problème, après la composition à emporter je change les documents référencés du plan avec le code suivant:

vSource = "PLAN Arbre01.SLDDRW"
vSource_Part = "Arbre01.SLDPRT"

vDest = "PLAN Arbre01-LV888.SLDDRW"
vDest_Part = "Arbre01-LV888.SLDPRT"
boolstat = swApp.ReplaceReferencedDocument(vDest, vSource_Part, vDest_Part)

Voila, je vais maintenant finaliser la macro avec les derniers détails de nom et d'endroit d'enregistrement.

Je vous tiendrai au courant quand j'aurai fini. On ne sais jamais, ca aidera peut-être qqu'un.
Patau8
Ewok SolidWorks
 
Messages: 7
Inscription: Jeu 23 Juin 2011, 21:08
Localisation: Hombourg (BE)

Messagepar als58 » Ven 01 Juil 2011, 21:38

Intéressant tout ca, il se pourrait bien que ca me serve d'ici peu!! ;)
als58
Padawan SolidWorks
 
Messages: 50
Inscription: Jeu 27 Mai 2010, 12:40
Localisation: Nièvre

Messagepar rOhArT » Jeu 21 Juil 2011, 8:42

bonjour,

comment on fait pour inclure les mises en plans en code lors d'une composition à emporter ???

Merci d'avance
rOhArT
Ewok SolidWorks
 
Messages: 47
Inscription: Mer 13 Avr 2011, 7:58

Messagepar liryc » Mer 03 Aoû 2011, 22:27

rOhArT a écrit:bonjour,

comment on fait pour inclure les mises en plans en code lors d'une composition à emporter ???

Merci d'avance


Si c'est toujours d'actualité, normalement c'est:
Code: Tout sélectionner
swPackAndGo.IncludeDrawings

Tiré de l'aide de l' api 2011
liryc
Chevalier Jedi SolidWorks
 
Messages: 479
Inscription: Ven 02 Mar 2007, 8:14
Localisation: Paris - SW2009 SP5.0

Messagepar rOhArT » Jeu 04 Aoû 2011, 7:23

merci lyric
rOhArT
Ewok SolidWorks
 
Messages: 47
Inscription: Mer 13 Avr 2011, 7:58

Messagepar Patau8 » Sam 06 Aoû 2011, 22:16

Salut rOhArT,

En effet, pour inclure les mises en plan il faut utiliser le code "swPackAndGo.IncludeDrawings" mais attention aux références qui ne suivent pas.

Le plan se copie mais pointe toujours vers la pièce d'origine.

Voir plus haut pour remédier à ce petit problème.

Si tu trouves d'autres infos interressantes à ce sujet, je suis preneur.

Patau8
Patau8
Ewok SolidWorks
 
Messages: 7
Inscription: Jeu 23 Juin 2011, 21:08
Localisation: Hombourg (BE)

Messagepar rOhArT » Lun 08 Aoû 2011, 7:20

merci à vous deux,

voilà ce que j'ai fait et ca marche

Code: Tout sélectionner
swmodelExt = swModel.Extension


            ' Get Pack and Go object
            swPackAndGo = swmodelExt.GetPackAndGo
            swPackAndGo.IncludeDrawings = True

            ' Get number of documents in assembly
            namesCount = swPackAndGo.GetDocumentNamesCount



            ' Get current paths and filenames of the assembly's documents
            status = swPackAndGo.GetDocumentNames(pgFileNames)



            ' Get current save-to paths and filenames of the assembly's documents
            status = swPackAndGo.GetDocumentSaveToNames(pgFileNames, pgFileStatus)



            ' Folder where to save the files
            myPath = "C:\temp2\"
            ' Create your own filenames for the model's documents
            ReDim pgSetFileNames(namesCount - 1)

            For i = 0 To (namesCount - 1)
                myFileName = pgFileNames(i)
                myFileName = My.Computer.FileSystem.GetName(pgFileNames(i))
                pgSetFileNames(i) = myPath & myFileName
            Next i
            ' Set document paths and names for Pack and Go
            status = swPackAndGo.SetDocumentSaveToNames(pgSetFileNames)

            ' Add a prefix and suffix to the new Pack and Go filenames
            swPackAndGo.AddPrefix = TextNumAppareil.Text & "-"

            ' Verify document paths and filenames after adding prefix and suffix
            ReDim pgGetFileNames(namesCount - 1)
            ReDim pgDocumentStatus(namesCount - 1)
            status = swPackAndGo.GetDocumentSaveToNames(pgSetFileNames, pgDocumentStatus)

            otherFiles(0) = vChemin & "fichier.xls"
            status = swPackAndGo.AddExternalDocuments(otherFiles)
            status = swPackAndGo.SetSaveToName(True, myPath)



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


            'pour que la mise en plan pointe sur le bon fichier assemblage
            Source = vChemin & "fichier1.slddrw"
            Source_Part = vChemin & "fichier2.sldasm"

            Dest = myPath & TextNumAppareil.Text & "-fichier3.slddrw"
            Dest_Part = myPath & TextNumAppareil.Text & "-fichier4.sldasm"

            boolstat = SWApp.ReplaceReferencedDocument(Dest, Source_Part, Dest_Part)
rOhArT
Ewok SolidWorks
 
Messages: 47
Inscription: Mer 13 Avr 2011, 7:58


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 3 invités

banniere