Macro mise en plan Automatique

vos questions concernant les API SolidWorks

Macro mise en plan Automatique

Messagepar kmailla » Lun 23 Mar 2015, 16:51

Bonjour,

Après plusieurs heures de recherche sur internet, je n'ai pas trouvé de réponse à mes besoins.

Je suis à la recherche d'une macro me permettant de créer les fichiers de mise en plan de l'ensemble des pièces d'un dossier ou d'un assemblage en fonction de mes "fond de plan" (uniquement mon A3 par exemple, ça ne me dérange pas) en gros de créer uniquement chaque fichier correspondant à chaque pièces et assemblage, pour ensuite les éditer un par un.

Il existe un logiciel qui s'appel MyCADtools (Smart Drawings) distribué par * qui permet de faire beaucoup de choses encore non comprises dans Solidworks 2015, mais qui est trop cher (plusieurs centaines d'euro /an)

Ça permet :

- De ne pas oublier de pièce,
- De gagner beaucoup de temps (ouvrir chaque pièce puis fichier=>créer une mise en plan à partir de cette pièce et choisir le fond de plan puis Fichier=>enregistrer sous=>enregistrer)

Je possède des macros pour exporter chaque plan Solidworks d'un dossier au format PDF et c'est extrêmement pratique et rapide :) j'aimerai la même chose pour simplement, a partir de l'assemblage ouvert dans Solidworks, créer toutes les mises en plan des pièces de cet assemblage et sous assemblage.

Merci pour votre aide :D
kmailla
Ewok SolidWorks
 
Messages: 10
Inscription: Mer 26 Nov 2014, 10:32

Re: Macro mise en plan Automatique

Messagepar kmailla » Jeu 02 Avr 2015, 15:18

Plus de 50 vues et pas le moindre petit bout d'idée ?

:(
kmailla
Ewok SolidWorks
 
Messages: 10
Inscription: Mer 26 Nov 2014, 10:32

Re: Macro mise en plan Automatique

Messagepar liryc » Ven 03 Avr 2015, 8:41

Bonjour,

Le planificateur de tâche le fait normalement mais plutôt à partir d'un dossier plutôt qu'un assemblage à ma connaissance.
Sinon la macro en elle même est faisable mais prend du temps.
liryc
Chevalier Jedi SolidWorks
 
Messages: 479
Inscription: Ven 02 Mar 2007, 8:14
Localisation: Paris - SW2009 SP5.0

Re: Macro mise en plan Automatique

Messagepar kmailla » Mar 07 Avr 2015, 8:30

Bonjour,

Merci pour ta réponse,

Évidemment je reste ouvert à toutes propositions, que ce soit une macro ou une procédure à suivre avec DriveWorksXpress (j'ai testé mais je ne suis pas parvenu à mes fins).

Comment ferais-tu avec le planificateur de tache ?

Merci
kmailla
Ewok SolidWorks
 
Messages: 10
Inscription: Mer 26 Nov 2014, 10:32

Re: Macro mise en plan Automatique

Messagepar CLLC » Mar 28 Avr 2015, 15:17

Bonjour

Tu voudrais qu'a partir d'un assemble:

- La macro prenne chaque composants un par un (visserie comprise?).
- Crée une mise en plan avec un fond de plan particulier.
- Ajoute une vue de face, de droite, de dessus, du composant.
- Enregistre le fichier en *.SLDDRW et *.PDF.

?
CLLC
Padawan SolidWorks
 
Messages: 68
Inscription: Ven 06 Juin 2014, 9:42

Re: Macro mise en plan Automatique

Messagepar kmailla » Mer 29 Avr 2015, 9:16

Salut !

Merci pour ton intérêt !

Je souhaiterai :

- La macro prenne chaque composants un par un (d'un dossier ou assemblage ouvert) sans visserie
- Crée une mise en plan avec un fond de plan particulier et vue prédéfinies
- Ajoute une vue de face, de droite, de dessus, du composant (oui dans le cas ou mon plan de référence n'a pas les vues prédéfinies)
- Enregistre le fichier en *.SLDDRW (j'ai une macro pour exporter tous en pdf)

Merci encore :)
kmailla
Ewok SolidWorks
 
Messages: 10
Inscription: Mer 26 Nov 2014, 10:32

Re: Macro mise en plan Automatique

Messagepar CLLC » Ven 05 Juin 2015, 13:51

Hey jai eu un peu de temps cette après midi

Il savere que c'est plus facile que ce que j'imaginais,

Ya plus qua mettre les cotes et les programmes nous remplaceront presque à notre travail.

Je n'ai pas fais de formulaire, si tu pense que c'est nécessaire dis moi!
Ou si ya autre chose que tu souhaiterais ajouter enlever changer..

Il faut se trouver sur un assemblage. (jai pas fais loption par dossier)
Tu dois déterminer:

'Position X et Y de la vue de face
PosX = 0.1
PosY = 0.2

'Decalage pour les autres vues projeté
decaleX = 0.2
decaleY = -0.1

'Model de fond de plan
Modelsheet = "C:\ProgramData\SolidWorks\SolidWorks 2013\templates\A3 Paysage.DRWDOT"


'Filtre
Filtre = "Accessoire"
Le filtre se joue dans le chemin complet du composant (ca peut être le nom du fichier, ou d'un dossier dans le chemin)


Code:
Public swApp As Object
Public Part As Object
Public boolstatus As Boolean
Public ModelName As String
Public swConfigMgr As SldWorks.ConfigurationManager
Public swConfig As SldWorks.Configuration
Public swRootComp As SldWorks.Component2
Public Children As Variant
Public swChild As SldWorks.Component2
Public ChildCount As Integer
Public sPathName As String
Public ChildName As String
Public bOldSetting As Boolean
Public bRet As Boolean
Public i As Long
Public savepath As String
Public myView As Object
Public Modelsheet As String
Public Filtre As String
Public FolderModel As String



Public PosX As Double, PosY As Double
Public decaleX As Double, decaleY As Double
Public longstatus As Long, longwarnings As Long
Sub main()

Set swApp = Application.SldWorks
Set Part = swApp.ActiveDoc
Set swModel = swApp.ActiveDoc

'*********************************
'Propriété
'*********************************

'Position X et Y de la vue de face

PosX = 0.1
PosY = 0.2

'Decalage pour les autres vues
decaleX = 0.2
decaleY = -0.1

'Model de fond de plan
Modelsheet = "C:\ProgramData\SolidWorks\SolidWorks 2013\templates\A3 Paysage.DRWDOT"


'Filtre
Filtre = "Accessoire"




'******************
'*******Code*******

ModelName = swModel.GetPathName 'recupere le nom de l'assemblage
FolderModel = Left(ModelName, InStrRev(ModelName, "\")) 'recupere le chemin de l'assemblage


'fais le compte de tout les composants
Set swConfigMgr = swModel.ConfigurationManager
Set swConfig = swConfigMgr.ActiveConfiguration
Set swRootComp = swConfig.GetRootComponent
bOldSetting = swApp.GetUserPreferenceToggle(swExtRefUpdateCompNames)

swApp.SetUserPreferenceToggle swExtRefUpdateCompNames, False


Children = swRootComp.GetChildren

ChildCount = UBound(Children)

For i = 0 To ChildCount 'pour chaque composants


Set swChild = Children(i) 'composant

sPathName = swChild.GetPathName 'chemin du composant

If Not sPathName Like "*" + Filtre + "*" Then 'si le chemin du composant ne contient pas "filtre"

Call drawings 'joue le module "Drawings"

End If

Next i 'passe au prochain composant

End Sub

Sub drawings()

Set Part = swApp.NewDocument(Modelsheet, 2, 0.2794, 0.4318) 'ouvre une MEP selon le model de fond


Set myView = Part.CreateDrawViewFromModelView3(sPathName, "*Face", PosX, PosY, 0) 'cree la vue de face a cette position

Part.ClearSelection2 True

boolstatus = Part.ActivateView("Vue de mise en plan1")
boolstatus = Part.Extension.SelectByID2("Vue de mise en plan1", "DRAWINGVIEW", PosX, PosY, 0, False, 0, Nothing, 0) 'selectionne la vue 1
Set myView = Part.CreateUnfoldedViewAt3(PosX + decaleX, PosY, 0, False) 'fait une vue projeté a cette position

Part.ClearSelection2 True

boolstatus = Part.ActivateSheet("Feuille1")
boolstatus = Part.ActivateView("Vue de mise en plan1")
boolstatus = Part.Extension.SelectByID2("Vue de mise en plan1", "DRAWINGVIEW", PosX, PosY, 0, False, 0, Nothing, 0) 'selectionne la vue 1
Set myView = Part.CreateUnfoldedViewAt3(PosX, PosY + decaleY, 0, False) 'fait une vue projeté a cette position

ChildName = Mid(sPathName, InStrRev(sPathName, "\") + 1) 'recupere le nom du fichier du composant et lui assigne l'extension SLDDRW
ChildName = Left(ChildName, Len(ChildName) - 7)
ChildName = ChildName + ".SLDDRW"

savepath = FolderModel + ChildName 'chemin denregistremnt = chemin de lassemblage + nom du composant .SLDDRW


Part.SaveAs (savepath) 'sauvegarde la MEP

swApp.CloseDoc savepath 'Ferme La MEP

End Sub
CLLC
Padawan SolidWorks
 
Messages: 68
Inscription: Ven 06 Juin 2014, 9:42

Re: Macro mise en plan Automatique

Messagepar kmailla » Ven 05 Juin 2015, 15:03

Salut !

Waaaa !!! Merci beaucoup pour ton travail !!!! Je n'y croyait plus et recevoir un mail de notification m'a trop surpris ! Comme quoi tout vient à qui c'est attendre :D

J'ai de suite essayé, mais ça bloque sur la ligne suivante, et je n'y comprend rien enfaite aux macros j'ai juste copier ton code puis coller dans une nouvelle page macro puis exécuté (en prenant soin de remplacer le chemin de mon fichier DRWDOT) avec un assemble simple de pièces ne possédant pas de mise en plan :

Set Part = swApp.NewDocument(Modelsheet, 2, 0.2794, 0.4318) 'ouvre une MEP selon le model de fond


Merci pour ton aide :D
kmailla
Ewok SolidWorks
 
Messages: 10
Inscription: Mer 26 Nov 2014, 10:32

Re: Macro mise en plan Automatique

Messagepar CLLC » Lun 08 Juin 2015, 7:53

Salut

Oui en effet comme ca je ne sais pas pourquoi, mais ca doit bien venir du chemin vers le modèle de mise en plan *.DRWDOT à mon avis.
Vérifie bien qu'il soit entre des guillemets, qu'il soit bien accessible...? Met le sur le bureau pour essayer?


sinon si c'est du A3 paysage change la ligne comme ceci, mais je ne crois pas que ca devrait changer.

Set Part = swApp.NewDocument(Modelsheet, swDwgPaperA3size, 0.297, 0.42)

si cest du A4 portrait:

Set Part = swApp.NewDocument(Modelsheet, swDwgPaperA4size, 0.297, 0.21)

ou sinon cest une autre format de papier dis moi:

http://help.solidworks.com/2012/English ... ument.html


Si ca ne marche pas, peux tu me recopier ton code stp (avec ton chemin vers le fichier de modèle de MEP?).

Quel est ta version de SW?
CLLC
Padawan SolidWorks
 
Messages: 68
Inscription: Ven 06 Juin 2014, 9:42

Re: Macro mise en plan Automatique

Messagepar kmailla » Lun 08 Juin 2015, 9:36

Hello

J'utilise une page A3 paysage pour tous mes plans. Dans le cas ou j'ai besoin d'une A4 je ferai la modification manuellement.

J'ai toujours le même problème, j'ai testé avec la MEP et le FDP ... je te joins ma MEP et voici mon code :

Code: Tout sélectionner
Public swApp As Object
Public Part As Object
Public boolstatus As Boolean
Public ModelName As String
Public swConfigMgr As SldWorks.ConfigurationManager
Public swConfig As SldWorks.Configuration
Public swRootComp As SldWorks.Component2
Public Children As Variant
Public swChild As SldWorks.Component2
Public ChildCount As Integer
Public sPathName As String
Public ChildName As String
Public bOldSetting As Boolean
Public bRet As Boolean
Public i As Long
Public savepath As String
Public myView As Object
Public Modelsheet As String
Public Filtre As String
Public FolderModel As String



Public PosX As Double, PosY As Double
Public decaleX As Double, decaleY As Double
Public longstatus As Long, longwarnings As Long
Sub main()

Set swApp = Application.SldWorks
Set Part = swApp.ActiveDoc
Set swModel = swApp.ActiveDoc

'*********************************
'Propriété
'*********************************

'Position X et Y de la vue de face

'PosX = 0.1
'PosY = 0.2

'Decalage pour les autres vues
'decaleX = 0.2
'decaleY = -0.1

'Model de fond de plan
Modelsheet = "D:\A3.drwdot"


'Filtre
Filtre = "Accessoire"




'******************
'*******Code*******

ModelName = swModel.GetPathName 'recupere le nom de l'assemblage
FolderModel = Left(ModelName, InStrRev(ModelName, "\")) 'recupere le chemin de l'assemblage


'fais le compte de tout les composants
Set swConfigMgr = swModel.ConfigurationManager
Set swConfig = swConfigMgr.ActiveConfiguration
Set swRootComp = swConfig.GetRootComponent
bOldSetting = swApp.GetUserPreferenceToggle(swExtRefUpdateCompNames)

swApp.SetUserPreferenceToggle swExtRefUpdateCompNames, False


Children = swRootComp.GetChildren

ChildCount = UBound(Children)

For i = 0 To ChildCount 'pour chaque composants


Set swChild = Children(i) 'composant

sPathName = swChild.GetPathName 'chemin du composant

If Not sPathName Like "*" + Filtre + "*" Then 'si le chemin du composant ne contient pas "filtre"

Call drawings 'joue le module "Drawings"

End If

Next i 'passe au prochain composant

End Sub

Sub drawings()

Set Part = swApp.NewDocument(Modelsheet, swDwgPaperA3size, 0.297, 0.42) 'ouvre une MEP selon le model de fond


Set myView = Part.CreateDrawViewFromModelView3(sPathName, "*Face", PosX, PosY, 0) 'cree la vue de face a cette position

Part.ClearSelection2 True

boolstatus = Part.ActivateView("Vue de mise en plan1")
boolstatus = Part.Extension.SelectByID2("Vue de mise en plan1", "DRAWINGVIEW", PosX, PosY, 0, False, 0, Nothing, 0) 'selectionne la vue 1
Set myView = Part.CreateUnfoldedViewAt3(PosX + decaleX, PosY, 0, False) 'fait une vue projeté a cette position

Part.ClearSelection2 True

boolstatus = Part.ActivateSheet("Feuille1")
boolstatus = Part.ActivateView("Vue de mise en plan1")
boolstatus = Part.Extension.SelectByID2("Vue de mise en plan1", "DRAWINGVIEW", PosX, PosY, 0, False, 0, Nothing, 0) 'selectionne la vue 1
Set myView = Part.CreateUnfoldedViewAt3(PosX, PosY + decaleY, 0, False) 'fait une vue projeté a cette position

ChildName = Mid(sPathName, InStrRev(sPathName, "\") + 1) 'recupere le nom du fichier du composant et lui assigne l'extension SLDDRW
ChildName = Left(ChildName, Len(ChildName) - 7)
ChildName = ChildName + ".SLDDRW"

savepath = FolderModel + ChildName 'chemin denregistremnt = chemin de lassemblage + nom du composant .SLDDRW


Part.SaveAs (savepath) 'sauvegarde la MEP

swApp.CloseDoc savepath 'Ferme La MEP

End Sub
Fichiers joints
A3.drwdot
(432.63 Kio) Téléchargé 100 fois
kmailla
Ewok SolidWorks
 
Messages: 10
Inscription: Mer 26 Nov 2014, 10:32

Re: Macro mise en plan Automatique

Messagepar CLLC » Lun 08 Juin 2015, 10:59

Je ne sais pas pourquoi, je n'arrive pas a ouvrir ton modèle de mise en plan (il ne se passe rien si je l'ouvre via SW)
Et le code ne marche pas non plus avec celui ci..
Je ne ne sais, essaye peut être avec ce modèle ci joint?
Fichiers joints
A3 CLLC.drwdot
(217.5 Kio) Téléchargé 112 fois
CLLC
Padawan SolidWorks
 
Messages: 68
Inscription: Ven 06 Juin 2014, 9:42

Re: Macro mise en plan Automatique

Messagepar kmailla » Lun 08 Juin 2015, 11:20

J'ai Solidworks 2015 est-ce que cela peut poser problème ?

J'ai essaye avec ton fichier, j'ai la même erreur ... :/
kmailla
Ewok SolidWorks
 
Messages: 10
Inscription: Mer 26 Nov 2014, 10:32

Re: Macro mise en plan Automatique

Messagepar liryc » Lun 08 Juin 2015, 12:48

Bonjour,

Désolé pour le temps de réponse par rapport au planificateur de tâche mais priorité projets en interne qui ne m'ont pas permis de regarder de plus près le fonctionnement.
Donc en gros il faut créer un fond de plans avec des vues prédéfines et lancer le planificateur de tâche sur un dossier ou lister les fichiers.
Je pense que ça sera plus simple à utiliser qu'une macro et moisn soumis à bugs.
liryc
Chevalier Jedi SolidWorks
 
Messages: 479
Inscription: Ven 02 Mar 2007, 8:14
Localisation: Paris - SW2009 SP5.0

Re: Macro mise en plan Automatique

Messagepar Vladimir » Ven 28 Oct 2016, 12:44

Salut la communauté !

Pas de relance pour le programme VBA, je le trouvais très intéressant perso, et malheureusement je bloque aussi a votre niveau, précisement sur ces deux lignes:

Set Part = swApp.NewDocument(ModelSheet, swDwgPapersA3size, 0.297, 0.42) 'ouvre une MEP selon le modele du fond de plan


Set myView = Part.CreateDrawViewFromModelView3(sPathName, "*Face", PosX, PosY, 0) 'cree la vue de face a cette position


Code erreur 91 alors que toutes les fonction sont connus... bloqué votre aide me sera d'un grand secour !!
Merci :)
Vladimir
Ewok SolidWorks
 
Messages: 2
Inscription: Mer 26 Oct 2016, 13:12


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