patmargis Posté(e) le 3 juillet 2008 Posté(e) le 3 juillet 2008 Bonsoir, Je souhaiterais pour créer un bouton utiliser en diesel la variable système Users1. Mon soucis c'est que quand je lui donne une valeur dans mon prog cette valeur n'est effective que lors de la seconde utilisation de la commande.Ex: _setvar;users1;$M=$(getvar;clayer): la valeur du calque ne sera active que la seconde fois que j'utiliserais le bouton. Il semblerait qu'il y ait 2 niveaux de sauvegarde ???Qqu'un a-t-il déja eu ce type de pb ???Merci d'avance de votre aide
bonuscad Posté(e) le 4 juillet 2008 Posté(e) le 4 juillet 2008 Ma réponse ne va pas beaucoup t'avancer. Qqu'un a-t-il déja eu ce type de pb ??? Oui, je n'ai jamais trouvé d'explication, ni de parade. Voir une de mes réponses Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Bred Posté(e) le 4 juillet 2008 Posté(e) le 4 juillet 2008 Salut,J'ai le même problème en ce moment pour récupérer la variable USERS* dans une boite de dialogue VB ...Pas trouvé de solution à ce jour. Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
patmargis Posté(e) le 4 juillet 2008 Auteur Posté(e) le 4 juillet 2008 Merci à tous quand même.Je vais continuer mes recherches. Si jamais j'arrivais à un résultat je l'indiquerai sur le forum pour ceux que ça interesseraient.On ne sait jamais !!!!
bonuscad Posté(e) le 13 juillet 2008 Posté(e) le 13 juillet 2008 Je viens de voir que ta macro comporte une erreur (un point-virgule au lieu d'une virgule) Ton histoire m'a intrigué car le problème soulevé apparait quand on fait des appel successif à $M, ce qui n'est pas le cas ici. Donc si la tu écrit ta macro comme ceci, cela ne fonctionne pas?'_.users1;$M=$(getvar,clayer); PS: les variable user[surligneur]S [/surligneur] ne fonctionne qu'avec des version pleine, pas LT.Pour LT c'est user[surligneur]I [/surligneur] ou user[surligneur]R [/surligneur] Pour le problème des appels multiple à $M=$(....) je crois avoir trouvé la solution, il suffit de placer + devant les $M= suivants pour qu'ils soient évalués correctement. Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
patmargis Posté(e) le 14 juillet 2008 Auteur Posté(e) le 14 juillet 2008 Salut bonuscad Pour l'erreur de synthaxe c'est une faute de frappe. Par contre je vais essayer avec le signe +.Dans ce cas tu le positionnes comment par rapport au $M ??? Merci de ton aide
bonuscad Posté(e) le 14 juillet 2008 Posté(e) le 14 juillet 2008 je crois avoir trouvé la solution Ben, en fait, non. J'avais vu des exemples sur cette page , mais après essais, ils ne s'appliquent que pour la syntaxe dans les menus, pas dans les macros de boutons. En plus je doute maintenant que cela résolvait le problème. Par exemple je viens de plancher sur une macro pour aligner un texte à un segment droit.Je donne les macros pour les LTsiens que cela intéresseraient. ^C^C_.undo;_begin;'_.useri1;$M=$(getvar,osmode);'_.osmode;512;'_.id;\_.ucs;_object;@;'_.id;\'_.osmode;1;'_.snapang;_none;@;@;'_.orthomode;1;_.rotate;0,0,0;;_none;0,0,0;\_.ucs;_previous;'_.osmode;$(getvar,useri1);'_.snapang;0.0;'_.orthomode;0;_.undo;_end;^Z La même, mais avec la possibilité de mouvoir le texte ensuite ^C^C_.undo;_begin;'_.useri1;$M=$(getvar,osmode);'_.osmode;512;'_.id;\_.ucs;_object;@;'_.id;\'_.osmode;1;'_.snapang;_none;@;@;'_.orthomode;1;_.rotate;0,0,0;;_none;0,0,0;\'_.orthomode;0;_.move;0,0,0;;0,0,0;_none;\_.ucs;_previous;'_.osmode;$(getvar,useri1);'_.snapang;0.0;_.undo;_end;^Z Et bien dans ces macros je n'ai pas réussi a restorer les variables ORTHOMODE et SNAPANG, je n'ai pus le faire qu'avec une seule (OSMODE) à l'aide des variables USER. La solution serait peut être de passer par SETENV pour les LT (SETENV n'est pas une commande disponible sous les versions Full, à moins de passer par le lisp (setenv), donc je ne peux pas tester facilement les macros. (bien que je pourrais me faire une fonction SETENV en lisp, mais je ne suis pas un grand adepte des macros, moins souples que le lisp, alors...) Rappel: Si vous voulez mettre les macros en oeuvre, celle ci doit tenir en [surligneur]UNE [/surligneur] ligne et [surligneur]SANS AUCUN[/surligneur] espaces. (passez par le bloc-note en intermédiaire pour faire cette vérification.) PS:Si tu postais ta macro en entier, on pourrait peut être voir ce qui cloche! Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
patmargis Posté(e) le 17 juillet 2008 Auteur Posté(e) le 17 juillet 2008 Salut bonuscad Encore une fois merci pour ton interet à mon souci ..trop cool Ma macro en entier :^c^cusers1;$M=$(getvar,clayer);-calque;e;$M=$(getvar,users1);; Routine que je veux utiliser dans différents prog où j'ai besoin de travailler dans un calque donné et retourner au calque courant avant utilisation du bouton. Voilà A+
bonuscad Posté(e) le 18 juillet 2008 Posté(e) le 18 juillet 2008 Ce qui me surprend, c'est que tu utilise encore [surligneur]userS1 [/surligneur] , je crois que cette variable n'est pas reconnue pas avec LT ?!?! :o Toujours est-il qu'avec "setenv" cela devrait fonctionner, voici ce que je ferais (je n'ai pas pu tester sous une version pleine)L'exemple trace une ligne avec 2 point dans un calque défini et revient sur le calque précédent ^C^Csetenv;stklayer;$M=$(getvar,clayer);_.-layer;_make;my_work_layer;;_.line;\\;_.-layer;_set;$(getenv,stklayer);;^Z Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
patmargis Posté(e) le 21 juillet 2008 Auteur Posté(e) le 21 juillet 2008 Salut bonuscad Tout d'abord j'utilise une version 2008 pleine.Je vais essayer avec setenv et je te tiens au courant. Merci pour tout et à plus
bonuscad Posté(e) le 22 juillet 2008 Posté(e) le 22 juillet 2008 Si tu utilise une version pleine, cela ne fonctionnera pas. Il te faut écrire la macro de cette façon (non testé): ^C^C(setenv "stklayer" (getvar "clayer"));_.-layer;_make;my_work_layer;;_.line;\\;_.-layer;_set;$M=$(getenv,stklayer);;^Z Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
patmargis Posté(e) le 22 juillet 2008 Auteur Posté(e) le 22 juillet 2008 Salut bonuscad Ok je la teste dès demain et je te tiens informé du résultat. A+
patmargis Posté(e) le 29 juillet 2008 Auteur Posté(e) le 29 juillet 2008 Bonjour à tous, Je suis finalement arrivé à une solution qui fonctionne et voilà la macro pour ceux que ça pourrait intéresser:(le tout sur la même ligne évidemment !!) ^C^C-contour;\;aire;o;d;ef;d;;users1;$M=$(getvar,clayer);-calque;ch;surface;co;40;;;texte;c;\20;0;$M="Surf= "$(rtos,$(/,$(getvar,area),10000),2,2)" m2";-calque;ch;$M=$(getvar,users1);; Cette macro permet de calculer une surface, d'écrire le résultat dans le calque "surface" de couleur 40 et de revenir sur le calque courant actif avant l'utilisation de la commande.Pour avoir fait de multiples essais il semblerait que le problème vienne du fait de déclarer la variable dès le début de la macro . Encore une fois merci à tous et à bientot..
bareth44 Posté(e) le 11 décembre 2008 Posté(e) le 11 décembre 2008 Bonjour !J'ai testé pas mal des possibilités et je n'arrive toujours pas a revenir dans le calque précédant ya toujours une sorte de décalageJe suis sous autocad 2008 LTVoici ma macro complete, elle change l'echelle de type de ligne, trace un poliligne qu'elle met dans le calque 1VENT_RÉS_AXE et ensuite reviens dans le calque précedent tout en rechangeant l'echelle du type de ligne mais elle reviens dans le calque precedent qu'un fois sur deux xD ^C^Cceltscale;0.005;'setenv;layerstk;$M=$(getvar,clayer);-calque;E;"1VENT_RÉS_AXE";;_pline;\'clayer;$(getenv,layerstk);'celtscale;1;^ZJ'ai retourné le problème dans tout les sens mais la chose imcompréhensible est que ma variable "layerstk" garde bien le calque courant avant l'execution de la macro en mémoire jusqua la fin mais lorsque je veux donner a " clayer "la valeur de ma variable, ca met le calque d'avant, je comprend plus rien.Un autre probleme, lorsque les nom de claque comporte des espace, ya rien qui va ^^Sinon pour une opération aussi simple qu'une ligne ou un cercle voici une macro basique mais efficace au moins : *^C^C_.line;\\;changer;der;;pr;calque;"0 filerie";; A plus et merci encore a tous !
dnalor Posté(e) le 18 décembre 2008 Posté(e) le 18 décembre 2008 Bonsoir à tous. J’ai une solution à proposer pour autocad LT uniquement !!! Extrait de l'aide en ligne... Vous pouvez utiliser la commande [$M=] avec une macro de menu pour introduire des expressions de macro écrites en langage DIESEL. AutoCAD LT évalue la portion de l'élément qui suit $M=, et le résultat est réévalué à titre de macro de menu. Le format est le suivant : où $M= indique à AutoCAD LT de réévaluer la chaîne qui suit à titre d'expression DIESEL....., Toutefois dès qu'il rencontre $M = autocad évalue toute la chaîne (de caractères) jusqu’à la fin de la macro On peut très bien observer les évaluations des expressions diesel grâce à la variable MACROTRACE à 1 Ce qui donne dans l'exemple de bareth44 un peu modifié ...car je n'ai pas le même environnement et ne cherche pas à connaître le but final de la macro ... le calque courant étant appelé test2 ^C^Cceltscale;0.005;SV;layerstk;$M=$(getvar,clayer);-calque;E;1VENT_RÉS_AXE;;_pline;\\\;modifvar;clayer;$M=$(getenv,layerstk);'celtscale;1; pour info j’ai un alias SV pour setenv dans mon fichier .pgp Ce qui donne avec MACROTRACE . Commande: celtscale Nouvelle valeur pour CELTSCALE <0.0050>: 0.005 Commande: Setenv Nom de variable: layerstk [surligneur] Valeur : Eval: $(GETVAR, clayer) ===> TEST2 Eval: $(GETENV, layerstk) ===> TEST2 TEST2[/surligneur]Commande: -calque ?/Etablir/CHoisir/Nouv/ACtif/INactif/COuleur/TLigne/Geler/Libérer/Verrouiller/Dé verrouiller: E Nouveau calque courant : 1VENT_RÉS_AXE ?/Etablir/CHoisir/Nouv/ACtif/INactif/COuleur/TLigne/Geler/Libérer/Verrouiller/Dé verrouiller: Commande: _pline Du point: La largeur courante est de 0.0000. Arc/Clore/Demi-larg/LOngueur/annUler/LArgeur/: Arc/Clore/Demi-larg/LOngueur/annUler/LArgeur/: Arc/Clore/Demi-larg/LOngueur/annUler/LArgeur/: Commande: modifvar Nom de la variable ou ? : clayer Nouvelle valeur pour CLAYER <"1VENT_RÉS_AXE">: TEST2 Commande: 'celtscale Nouvelle valeur pour CELTSCALE <0.0050>: 1 Où l'on voit que l'évaluation trouve effectivement le calque courant Mais il l’a déjà évalué avant l'exécution du basculement sur le calque <1VENT_RÉS_AXE> Si on veut que la macro fonctionne bien il faut que l'évaluation $(GETENV, layerstk) se fasse après l'exécution de la commande _pline. Pour cela il faut "masquer" la deuxième expression DIESEL $M= lors de la première évaluation... On peut le faire en plaçant la deuxième expression DIESEL $M= dans une deuxième variable par exemple "layerrap" Pour ce faire il suffit d’enregistrer une variable (avec SETENV) en la tapant ou collant directement sur la ligne de commande Setenv;layerrap;M=$(getenv,layerstk) ( il faudra renouveler l’opération chaque fois que l’on veut utiliser cette macro sur au autre ordinateur.....) La variable sera enregistrée dans la base de registre de Windows et il suffira ensuite de "l’appeler" le moment venu... ^C^Cceltscale;0.005;SV;layerstk;$M=$(getvar,clayer);-calque;E;1VENT_RÉS_AXE;;_pline;\\\;modifvar;clayer; [surligneur] $(getenv,layerrap);[/surligneur]'celtscale;1;^Z On voit l'évaluation avec MACROTRACE que la deuxième évaluation s'est faite au bon moment soit après l’exécution de la commande _pline Commande: celtscale Nouvelle valeur pour CELTSCALE <1.0000>: 0.005 Commande: SV Nom de variable: layerstk Valeur : Eval: $(GETVAR, clayer) ===> TEST2 Eval: $(GETENV, layerrap) ===> $M=$(getenv,layerstk) TEST2 Commande: -calque ?/Etablir/CHoisir/Nouv/ACtif/INactif/COuleur/TLigne/Geler/Libérer/Verrouiller/Dé verrouiller: E Nouveau calque courant : 1VENT_RÉS_AXE ?/Etablir/CHoisir/Nouv/ACtif/INactif/COuleur/TLigne/Geler/Libérer/Verrouiller/Dé verrouiller: Commande: _pline Du point: La largeur courante est de 0.0000. Arc/Clore/Demi-larg/LOngueur/annUler/LArgeur/: Arc/Clore/Demi-larg/LOngueur/annUler/LArgeur/: Arc/Clore/Demi-larg/LOngueur/annUler/LArgeur/: Commande: modifvar Nom de la variable ou ? : clayer Nouvelle valeur pour CLAYER <"1VENT_RÉS_AXE">: [surligneur] Eval: $(GETENV, layerstk) ===> TEST2 TEST2[/surligneur]Commande: 'celtscale Nouvelle valeur pour CELTSCALE <0.0050>: 1 En espérant que c'est compréhensible. Salutations et meilleurs voeux à tous.
bareth44 Posté(e) le 5 janvier 2009 Posté(e) le 5 janvier 2009 Bonne année ! Plein de bonheur et de réussite a tous ! Merci Dnalor pour avoir éclairé ma lanterne ! J'ai trouvé ce qui clochais dans ma macro grace a la tienne, voici une macro qui trace une polilygne sans limite de point dans le calque "1_VENT_RÉS_AXE" a l'echelle de type de ligne 0.05 et reviens dans le calque précédant apres que vous ayez fini votre polyligne: *^C^Cceltscale;0.005;Setenv;layerstk;$M=$(getvar,clayer);Setenv;layerscd;$M=$(getenv,layerstk);-calque;E;"1_VENT_RÉS_AXE";;_pline;\'modifvar;clayer;$(getenv,layerscd);'celtscale;1;^Z La polilygne peut etre remplacé par une spline ou tout autres commandes qui a un nombre de points aléatoires, tout ca grâce aux commandes invisibles. J'ai testé ma macro elle marche parfaitement chez moi (J'ai la version LT2008), il serais peut etre bien de l'adapter pour les utilisateurs de la non LT. Merci a tous et vive ce forum Edit: J'ai toujours un problème avec le nom de mes calques, du moment qu'il ne comporte pas d'espace, tout ce passe bien mais je n'arrive toujours pas a intégrer des espaces, le problème est réèl puisque je ne peux pas changer les nom de mes calques (ISO entreprise oblige) [Edité le 5/1/2009 par bareth44]
Messages recommandés
Créer un compte ou se connecter pour commenter
Vous devez être membre afin de pouvoir déposer un commentaire
Créer un compte
Créez un compte sur notre communauté. C’est facile !
Créer un nouveau compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant