Aller au contenu

Pb avec variable Users1


patmargis

Messages recommandés

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

 

 

Lien vers le commentaire
Partager sur d’autres sites

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...

Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines après...

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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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+

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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..

Lien vers le commentaire
Partager sur d’autres sites

  • 4 mois après...

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écalage

Je suis sous autocad 2008 LT

Voici 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;^Z

J'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 !

Lien vers le commentaire
Partager sur d’autres sites

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.

 

Lien vers le commentaire
Partager sur d’autres sites

  • 3 semaines après...

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]

Lien vers le commentaire
Partager sur d’autres sites

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité