Google+

Macro - tâches dans MEP Sujet résolu

Apprendre à programmer avec le VBA

Modérateurs: xavierb, annwn

Macro - tâches dans MEP

Messagepar Merovingien » Lun 17 Fév 2020 15:58

Bonjour,

j'ai regardé les quelques exemples de macro,
et j'ai tenté d'utiliser l'enregistreur de macro, j'arrive à lire certaines choses, mais pas tout,
et il y a des choses qui ne marchent pas...

tache 1 de la macro :
je voudrais RELOAD un template, mais sans changer les paramètres, cad aller dans les propriétés de la première feuille, faire "reload" (car le nom du template n'a pas changé), puis faire "ok-apply", et sortir du menu.

mais le recorder, semble lire les autres settings du template, comme echelle, et ca, je voudrais pas y toucher, car variera pour chaque plan.

tache 2 de la macro :
ré-affecter des trait d'axes, et axes de centrage (en activant les filtres au passage) de la MEP dans le bon calque.
le RECORDER a capturer ma selectbox, mais rien derrière

tache 3 de la macro :
ré-affecter des cotations (en activant les filtres au passage) de la MEP dans le bon calque.
le RECORDER a capturer ma selectbox, puis liste chaque entité, mais le nom de la vue peut varier, et le ID des cotes aussi,
donc ca ne m'arrange pas là...

tache 4 de la macro :
ré-affecter des annotations/bulles (en activant les filtres au passage) de la MEP dans le bon calque.
le RECORDER a capturer ma selectbox, mais rien derrière

tache 5 de la macro :
supprimer certains calques (noms connus),
mais là le Recorder a rien enregistrer...

je suis en train de chercher une aide API, mais si qqun peut m'aiguiller/aider un peu ???

(j'ai volontairement caché le vrai nom du template, c'est normal...)
Code: Tout sélectionner
Dim swApp As Object

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

Sub main()

Set swApp = Application.SldWorks

Set Part = swApp.ActiveDoc
boolstatus = Part.Extension.SelectByID2("Sheet1", "SHEET", 0.186534715025907, 8.47632124352331E-02, 0, False, 0, Nothing, 0)
Part.ClearSelection2 True
boolstatus = Part.SetupSheet5("Sheet1", 12, 12, 1, 2, True, "path... template A3.slddrt", 0.42, 0.297, "Default", True)
boolstatus = Part.SetupSheet5("Sheet1", 12, 12, 1, 2, True, "path... template A3.slddrt", 0.42, 0.297, "Default", False)
boolstatus = Part.Extension.SketchBoxSelect("-0.003009", "0.599512", "0.000000", "0.433318", "0.227873", "0.000000")
Part.ClearSelection2 True
boolstatus = Part.Extension.SelectByID2("RD6@Drawing View2", "DIMENSION", 0, 0, 0, True, 0, Nothing, 0)
boolstatus = Part.Extension.SelectByID2("RD5@Drawing View2", "DIMENSION", 0, 0, 0, True, 0, Nothing, 0)
boolstatus = Part.Extension.SelectByID2("RD3@Drawing View2", "DIMENSION", 0, 0, 0, True, 0, Nothing, 0)
boolstatus = Part.Extension.SelectByID2("RD4@Drawing View2", "DIMENSION", 0, 0, 0, True, 0, Nothing, 0)
boolstatus = Part.Extension.SelectByID2("RD2@Drawing View2", "DIMENSION", 0, 0, 0, True, 0, Nothing, 0)
boolstatus = Part.Extension.SelectByID2("RD1@Drawing View2", "DIMENSION", 0, 0, 0, True, 0, Nothing, 0)
boolstatus = Part.Extension.SketchBoxSelect("0.000796", "0.596975", "0.000000", "0.482785", "0.217725", "0.000000")
Part.ClearSelection2 True
boolstatus = Part.Extension.SketchBoxSelect("0.000162", "0.591267", "0.000000", "0.442831", "0.224067", "0.000000")
Part.ClearSelection2 True
End Sub
Que le coté obscur soit avec vous, et règne sur toute la galaxie...
Avatar de l’utilisateur
Merovingien
Citoyen
 
Messages: 104
Inscription: Lun 24 Sep 2018 17:48
Localisation: France, Loire (42)
Version de SolidWorks et SP: SolidWorks 2017 SP5.0

Share On:

Partagez sur Facebook Facebook Partagez sur Twitter Twitter

Re: Macro - tâches dans MEP

Messagepar Merovingien » Lun 17 Fév 2020 17:18

j'ai trouvé ca mais j'arrive pas à le faire fonctionner :

Function DeleteLayer(Name As String) As Boolean
Membre de SldWorks.LayerMgr
Delete the specified layer
Que le coté obscur soit avec vous, et règne sur toute la galaxie...
Avatar de l’utilisateur
Merovingien
Citoyen
 
Messages: 104
Inscription: Lun 24 Sep 2018 17:48
Localisation: France, Loire (42)
Version de SolidWorks et SP: SolidWorks 2017 SP5.0

Re: Macro - tâches dans MEP

Messagepar Merovingien » Lun 17 Fév 2020 17:23

j'ai essayé avec ca, mais non erreur :

boolstatus = Part.SldWorks.LayerMgr.DeleteLayer(test toto)
Que le coté obscur soit avec vous, et règne sur toute la galaxie...
Avatar de l’utilisateur
Merovingien
Citoyen
 
Messages: 104
Inscription: Lun 24 Sep 2018 17:48
Localisation: France, Loire (42)
Version de SolidWorks et SP: SolidWorks 2017 SP5.0

Re: Macro - tâches dans MEP

Messagepar Merovingien » Mar 18 Fév 2020 10:21

je suis allé voir dans les exemples dispo dans une autre section,

il y a : suprimertouslescalques.swp

je voulais l'ouvrir pour voir comment il est écrit,
mais j'ai un message d'erreur, impossible à ouvrir, impossible à executer...

EDIT :

voici une capture de la fonction que j'essai de faire fonctionner...

temp.PNG
temp.PNG (44.45 Kio) Vu 186 fois
Que le coté obscur soit avec vous, et règne sur toute la galaxie...
Avatar de l’utilisateur
Merovingien
Citoyen
 
Messages: 104
Inscription: Lun 24 Sep 2018 17:48
Localisation: France, Loire (42)
Version de SolidWorks et SP: SolidWorks 2017 SP5.0

Re: Macro - tâches dans MEP

Messagepar liryc » Mar 18 Fév 2020 18:54

Bonsoir,

Pour gérer la suppression de calques, il faut déjà compter le nombre de calques puis supprimer ceux qui ne sont pas nécessaires.
Pour exemple, ce que j'utilise:
Code: Tout sélectionner
Count = swLayerMgr.GetCount
Layer = swLayerMgr.GetLayerList
For i = 0 To Count - 1
If Layer(i) = "CARTOUCHE" Or _
Layer(i) = "TEXTE FIXE CARTOUCHE" Or _
Layer(i) = "Champs paramétrés" Or _
Layer(i) = "cotation cartouche" Or _
Layer(i) = "Consultation" Or _
Layer(i) = "Cartouche de signature" Or _
Layer(i) = "Indice()" Then
Else
swLayerMgr.DeleteLayer (Layer(i))
End If
Next i

Pour le reste c'est un peu plus compliqué mais en gros faut gérer avec des boucles.
Pour le reload de template j'utilise ce code:
Code: Tout sélectionner
Sub ReloadTemplate()
vSheetNameArr = swDraw.GetSheetNames
    For Each vSheetName In vSheetNameArr
        bRet = swDraw.ActivateSheet(vSheetName): Debug.Assert bRet
        Set swSheet = swDraw.GetCurrentSheet
        vSheetProps = swSheet.GetProperties
        If vSheetProps(0) = "7" Then
            stemplatepath = cDirTemplate & cTemplateA4
            bRet = swDraw.SetupSheet4(swSheet.GetName, vSheetProps(0), 12, vSheetProps(2), vSheetProps(3), True, stemplatepath, 0#, 0#, "")
            swSheet.ReloadTemplate False
            swModel.ForceRebuild3 (False)
        ElseIf vSheetProps(0) = "8" Then
            stemplatepath = cDirTemplate & cTemplateA3
            bRet = swDraw.SetupSheet4(swSheet.GetName, vSheetProps(0), 12, vSheetProps(2), vSheetProps(3), True, stemplatepath, 0#, 0#, "")
            swSheet.ReloadTemplate False
            swModel.ForceRebuild3 (False)
        ElseIf vSheetProps(0) = "9" Then
            stemplatepath = cDirTemplate & cTemplateA2
            bRet = swDraw.SetupSheet4(swSheet.GetName, vSheetProps(0), 12, vSheetProps(2), vSheetProps(3), True, stemplatepath, 0#, 0#, "")
            swSheet.ReloadTemplate False
            swModel.ForceRebuild3 (False)
        ElseIf vSheetProps(0) = "10" Then
            stemplatepath = cDirTemplate & cTemplateA1
            bRet = swDraw.SetupSheet4(swSheet.GetName, vSheetProps(0), 12, vSheetProps(2), vSheetProps(3), True, stemplatepath, 0#, 0#, "")
            swSheet.ReloadTemplate False
            swModel.ForceRebuild3 (False)
        End If
    Next
bRet = swDraw.ActivateSheet(vSheetNameArr(0))
End Sub
En informatique, le plus gros bug se situe généralement entre la chaise et le clavier
liryc
Disciple
 
Messages: 308
Inscription: Jeu 26 Juil 2012 15:23
Version de SolidWorks et SP: SolidWorks 2016 SP 5.0

Re: Macro - tâches dans MEP

Messagepar titifonky » Mer 19 Fév 2020 09:03

Bonjour,
Sur quelle version de Solidworks es tu ?
Si tu as la possibilité de lancer une macro en Csharp, je peux t'aider. Avec la 2019 c'est possible.
Je développe quotidiennement pour Solidworks mais pas en VBA, trop long et imbuvable comme langage.
Bonne journée.
http://www.le-metal.net, sur la métallerie
titifonky
Disciple
 
Messages: 332
Inscription: Jeu 13 Déc 2012 01:03

Re: Macro - tâches dans MEP  Sujet résolu

Messagepar Merovingien » Mer 19 Fév 2020 10:14

super, une réponse !

par contre, le faire en VBA m'intéresse, car ca permet d'utiliser le RECORDER, et de voir un peu le code après...

je suis SW 2017, mais en cherchant sur le forum USA, j'ai trouvé des codes sur les layers,
Mais tout à fait l'action que je voulais...

et en épluchant des posts du forum USA, j'ai trouvé un petit sujet, avec la réponse !!!

Alors j'ai mixer ma macro RECORDER, pour y inclure ce partie, d'ou le fait que dans les DIM il y a des doublons,
par contre j'ai pas compris "Explicit", du coup je l'ai mis tout en haut.

Code: Tout sélectionner
Option Explicit
Sub main()

Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swLayerMgr As SldWorks.LayerMgr
Dim Part As Object
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long

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

Part.ClearSelection2 True

...lot d'opérations 1...
boolstatus = Part.Extension.SelectByID2("Objet...
Part.EditDelete

Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swLayerMgr = swModel.GetLayerManager

swLayerMgr.DeleteLayer "test toto"

Part.ClearSelection2 True

...lot d'opérations 3... (Setting dans le Document)
boolstatus = Part.Extension.SetUserPreferenceString(swUserPreferenceStringValue_e... etc...
etc...

End Sub
Que le coté obscur soit avec vous, et règne sur toute la galaxie...
Avatar de l’utilisateur
Merovingien
Citoyen
 
Messages: 104
Inscription: Lun 24 Sep 2018 17:48
Localisation: France, Loire (42)
Version de SolidWorks et SP: SolidWorks 2017 SP5.0

Re: Macro - tâches dans MEP

Messagepar Merovingien » Mer 19 Fév 2020 10:23

par contre, je comprends pas encore vraiment : l'ordre des mots ou la logique d'écriture...

car on déclare des variable au début,
et on écrit des actions en incluant ces variables.
exemple "Part" ou "boolstatus" ou "swModel"

et pour la fonction ca devient style :

Dim Variable as Code1
Variable.Nom_de_la_fonction...

mais pourquoi on ne peut pas écrire directement :

Code1.Nom_de_la_fonction...

???
Que le coté obscur soit avec vous, et règne sur toute la galaxie...
Avatar de l’utilisateur
Merovingien
Citoyen
 
Messages: 104
Inscription: Lun 24 Sep 2018 17:48
Localisation: France, Loire (42)
Version de SolidWorks et SP: SolidWorks 2017 SP5.0

Re: Macro - tâches dans MEP

Messagepar titifonky » Mer 19 Fév 2020 10:25

Le recorder permet également d'enregistrer en Csharp ou VB.
Il suffit de sélectionner le format au moment de l'enregistrement du fichier macro.
http://www.le-metal.net, sur la métallerie
titifonky
Disciple
 
Messages: 332
Inscription: Jeu 13 Déc 2012 01:03

Re: Macro - tâches dans MEP

Messagepar liryc » Mer 19 Fév 2020 10:55

Merovingien a écrit:par contre, je comprends pas encore vraiment : l'ordre des mots ou la logique d'écriture...

car on déclare des variable au début,
et on écrit des actions en incluant ces variables.
exemple "Part" ou "boolstatus" ou "swModel"

et pour la fonction ca devient style :

Dim Variable as Code1
Variable.Nom_de_la_fonction...

mais pourquoi on ne peut pas écrire directement :

Code1.Nom_de_la_fonction...

???


Bonjour,
Pour le coup, pour comprendre cette logique, je t'invite à aller regarder sur des sites du type developpez.net et ainsi tu comprendra les notions de déclaration de variable.
L'aide l'API SolidWorks est également bien faite et permet de voir des logiques de codage en VBA, VB.NET et C#, après faut simplifier, automatiser certaines tâche avec les boucles (fonctions vb ou enfonction du langage utilisé)…
@Titifonky, certes le vba n'est pas le plus évolué comme langage mais en créant des fonctions ou des sous programme on arrive quand même à faire des codes lisibles et pas si imbuvable que ça ;)
En informatique, le plus gros bug se situe généralement entre la chaise et le clavier
liryc
Disciple
 
Messages: 308
Inscription: Jeu 26 Juil 2012 15:23
Version de SolidWorks et SP: SolidWorks 2016 SP 5.0

Re: Macro - tâches dans MEP

Messagepar titifonky » Mer 19 Fév 2020 11:02

Le problème avec VBA c'est les cast, tout est pratiquement contenu dans des Variant qu'il faut caster dans tout les sens pour récupérer le contenu des variables.
La gestion des listes est également laborieuse, il n'y a qu'un objet "collection" et les tableaux. En VB ou en Csharp on a vraiment le choix et on peut trouver l'objet vraiment adapté à sa problème : liste, tableau, dictionnaire, hashset, etc...
http://www.le-metal.net, sur la métallerie
titifonky
Disciple
 
Messages: 332
Inscription: Jeu 13 Déc 2012 01:03

Re: Macro - tâches dans MEP

Messagepar titifonky » Mer 19 Fév 2020 13:27

Une première approche

Code: Tout sélectionner
public void Main()
        {
            // On récupère le modèle actif
            var mdl = swApp.ActiveDoc as ModelDoc2;

            // Si document n'est pas un plan on sort
            if (mdl.GetType() != (int)swDocumentTypes_e.swDocDRAWING) return;

            // On récupère l'objet dessin
            var dessin = mdl as DrawingDoc;

            // On récupère la liste des feuilles via la fonction perso
            var listeDesFeuilles = ListeDesFeuilles(dessin);

            foreach (var feuille in listeDesFeuilles)
            {
                var r = (swReloadTemplateResult_e)feuille.ReloadTemplate(true);

                // S'il n'a pas réussi à mettre à jour le template, on passe à la feuille suivante
                if (r != swReloadTemplateResult_e.swReloadTemplate_Success)
                    Debug.Print("Erreur de rechargement du template : " + r);

                var listeDesVues = ListeDesVues(feuille);

                foreach (var vue in listeDesVues)
                {
                    // S'il n'y a pas d'annotation, on passe à la vue suivante
                    if (vue.GetAnnotationCount() == 0) continue;

                    // Boucle sur les annotations
                    // en sachant que tout est annotation
                    foreach (Annotation annotation in (object[])vue.GetAnnotations())
                    {
                        var t = (swAnnotationType_e)annotation.GetType();

                        annotation.Layer = "Nouveau calque";
                    }
                }
            }

            return;
        }

        public List<Sheet> ListeDesFeuilles(DrawingDoc dessin)
        {
            List<Sheet> pListeFeuilles = new List<Sheet>();

            if (dessin.GetSheetCount() == 0)
                return pListeFeuilles;

            foreach (String NomFeuille in (object[])dessin.GetSheetNames())
                pListeFeuilles.Add(dessin.get_Sheet(NomFeuille));

            return pListeFeuilles;
        }

        public List<View> ListeDesVues(Sheet feuille)
        {
            List<View> pListeVues = new List<View>();

            var pTabVues = feuille.GetViews() as Object[];

            if (pTabVues == null)
                return pListeVues;

            foreach (View pSwVue in pTabVues)
                pListeVues.Add(pSwVue);

            return pListeVues;
        }

        // The SldWorks swApp variable is pre-assigned for you.
        public SldWorks swApp;
http://www.le-metal.net, sur la métallerie
titifonky
Disciple
 
Messages: 332
Inscription: Jeu 13 Déc 2012 01:03

Re: Macro - tâches dans MEP

Messagepar Merovingien » Mer 19 Fév 2020 14:53

pas mal titfonky 8-)

mais c'est en quel format ? le Csharp ?

je dois copier-coller l'ensemble dans *.swp ? et ça fonctionnera ?

il y a les test-sécu au début,
puis un bouclage par feuille,
avec une fonction RELOAD template,
puis un bouclage pour chaque vue,
et un déplacement de toutes annotations de que chaque vue vers un nouveau calque, avec détection anti-erreur si aucune annotation.

Liryc, je viens juste de voir ton message, désolé !! mais c'est super, je vais le lire plus en détails...
Que le coté obscur soit avec vous, et règne sur toute la galaxie...
Avatar de l’utilisateur
Merovingien
Citoyen
 
Messages: 104
Inscription: Lun 24 Sep 2018 17:48
Localisation: France, Loire (42)
Version de SolidWorks et SP: SolidWorks 2017 SP5.0

Re: Macro - tâches dans MEP

Messagepar Merovingien » Mer 19 Fév 2020 15:01

Liryc
dans ton code pour le layer, il y a pas les déclarations Dim...
Code: Tout sélectionner
swLayerMgr.DeleteLayer (Layer(i))


par contre dans celui que j'ai trouvé sur le forum USA, il y a ca :
Code: Tout sélectionner
Dim swLayerMgr As SldWorks.LayerMgr

Set swLayerMgr = swModel.GetLayerManager

swLayerMgr.DeleteLayer "test toto"


ca veut dire que swLayerMgr n'est pas une variable juste créé pour ce code ?
mais qu'il faut quand même le déclarer ?
puis le Set ?
avant de pouvoir l'utiliser.. ?
Que le coté obscur soit avec vous, et règne sur toute la galaxie...
Avatar de l’utilisateur
Merovingien
Citoyen
 
Messages: 104
Inscription: Lun 24 Sep 2018 17:48
Localisation: France, Loire (42)
Version de SolidWorks et SP: SolidWorks 2017 SP5.0

Re: Macro - tâches dans MEP

Messagepar liryc » Mer 19 Fév 2020 15:36

Oui j'ai omis les déclarations de variables.
Code: Tout sélectionner
Dim swLayerMgr      As SldWorks.LayerMgr
Dim swLayer         As SldWorks.Layer
Dim Layer           As Variant
Dim Count           As Integer

Et il faut effectivement faire unset de SWLayerMgr:
Code: Tout sélectionner
            Set swLayerMgr = swModel.GetLayerManager
En informatique, le plus gros bug se situe généralement entre la chaise et le clavier
liryc
Disciple
 
Messages: 308
Inscription: Jeu 26 Juil 2012 15:23
Version de SolidWorks et SP: SolidWorks 2016 SP 5.0

Re: Macro - tâches dans MEP

Messagepar titifonky » Mer 19 Fév 2020 15:47

C'est du Csharp.
Il faut faire une macro en Csharp.
Sans titre.png
Sans titre.png (39.42 Kio) Vu 157 fois
http://www.le-metal.net, sur la métallerie
titifonky
Disciple
 
Messages: 332
Inscription: Jeu 13 Déc 2012 01:03

Re: Macro - tâches dans MEP

Messagepar Merovingien » Mer 4 Mar 2020 17:57

Le fait du "Reload template" étant plus délicat à cause de différentes évolutions, je suis resté sur de la modif.
Mais ça fonctionne.

Merci pour les autres réponses, qui sont aussi valables.
Que le coté obscur soit avec vous, et règne sur toute la galaxie...
Avatar de l’utilisateur
Merovingien
Citoyen
 
Messages: 104
Inscription: Lun 24 Sep 2018 17:48
Localisation: France, Loire (42)
Version de SolidWorks et SP: SolidWorks 2017 SP5.0


Retourner vers Apprentissage

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités