jeanmi66 Posté(e) le 24 juillet 2007 Posté(e) le 24 juillet 2007 Salut à tous, je démarre gentiment le LISP et j'ai un souci d'entrée, dû au manque de connaissances. Je veux, après avoir cliqué un pt avec la fonction ID (et donc j'ai ses coordonnées), réécrire la coordonnée X sur un texte existant, et Y sur un autre texte existant. Je pensais que ceci marcherait... ^C^C_change;\;;;;;;$m=$(rtos,$(getvar,@)); mais non, alors j'ai essayé ça... ^C^C_change;\;;;;;;$m=$(rtos,$(getvar,lastpoint)); mais non plus, pourriez-vous m'aider svp ? Merci
Bred Posté(e) le 24 juillet 2007 Posté(e) le 24 juillet 2007 Salut,Ne voudrais-tu pas plûtot le faire entièrement en lisp ?(parceque le mélange caractère spéciaux, diesel et lisp n'est pas mon fort....) Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
jeanmi66 Posté(e) le 24 juillet 2007 Auteur Posté(e) le 24 juillet 2007 Eventuellement, oui, pourquoi pas, mais je sais pas encore bien le faire. Aurais-tu quelquechose à me proposer en lisp pour cette fonction ? Merci
Patrick_35 Posté(e) le 24 juillet 2007 Posté(e) le 24 juillet 2007 SalutEt avec les champs ? @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
jeanmi66 Posté(e) le 24 juillet 2007 Auteur Posté(e) le 24 juillet 2007 Les champs ??????? je sais même pas ce que c'est, je commence vraiment, c'est à dire j'ai commencé il y a 2 jours ! Donc s'il y a un truc simple, je suis preneur ! Merci
dnalor Posté(e) le 24 juillet 2007 Posté(e) le 24 juillet 2007 En attendant voici une possibilité en macro diesel: Si la cordonnée correspond au point d'insertion du texte pour la coordonnée x ^C^Cchanger;ins;\;;;;;$m=$(rtos,$(index,0,$(getvar,lastpoint))); et pour la coordonnée y ^C^Cchanger;ins;\;$m=$(rtos,$(index,1,$(getvar,lastpoint))); si ce n'est pas le cas il faut dabord enregister les coordonnées du point dans une variable (USERS1) ce qui donnerait: Bouton 1 (identification du point) ^Cid;\^CMODIFVAR;USERS1;$M=$(getvar,lastpoint); Boutton 2 (modification des textes x puis y) ^C^C^Cchanger;\;;;;;;$m=$(rtos,$(index,0,$(getvar,users1)));^C^Cchanger;\;;;;;;$m=$(rtos,$(index,1,$(getvar,users1))); meilleures salutations
jeanmi66 Posté(e) le 24 juillet 2007 Auteur Posté(e) le 24 juillet 2007 Ok, merci, je vais essayer ça, je vous tiens au jus ! A+ !
Patrick_35 Posté(e) le 24 juillet 2007 Posté(e) le 24 juillet 2007 Pour les champs, tu fais un clic droit sur la zone de saisie du texte lors d'une édition d'un texte ou d'un attribut --> Insérer un champ... @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
(gile) Posté(e) le 24 juillet 2007 Posté(e) le 24 juillet 2007 Salut, Un exemple en LISP. (defun c:test (/ pt text1 elst1 text2 elst2) (and ;_ la routine s'arrête si une des expressions suivante retourne nil ;; choisir un point (setq pt (getpoint "\nSpécifiez un point: ")) ;; sélectionner le texte "X" (setq text1 (car (entsel "\nSélectionnez le texte pour la coordonnée X: "))) ;; liste des données dxf de l'objet sélectionné (setq elst1 (entget text1)) ;; vérifier qu'il s'agit bien d'un texte (ou mtexte) (wcmatch (cdr (assoc 0 elst1)) "*TEXT") ;; modifier la valeur du texte (entmod (subst (cons 1 (rtos (car pt))) (assoc 1 elst1) elst1 ) ) ;; idem pour le second texte (setq text2 (car (entsel "\nSélectionnez le texte pour la coordonnée Y: "))) (setq elst2 (entget text2)) (wcmatch (cdr (assoc 0 elst2)) "*TEXT") (entmod (subst (cons 1 (rtos (cadr pt))) (assoc 1 elst2) elst2 ) ) ) (princ) ) (princ "TEST chargé. Entrer test pour lancer la commande.") (princ) [Edité le 24/7/2007 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
jeanmi66 Posté(e) le 24 juillet 2007 Auteur Posté(e) le 24 juillet 2007 Bouton 1 (identification du point) ^Cid;\^CMODIFVAR;USERS1;$M=$(getvar,lastpoint); Boutton 2 (modification des textes x puis y) ^C^C^Cchanger;\;;;;;;$m=$(rtos,$(index,0,$(getvar,users1)));^C^Cchanger;\;;;;;;$m=$(rtos,$(index,1,$(getvar,users1))); Presque super ! Ca fonctionne pour le x mais pas pour le y !? Je vois pas trop d'où ça peut venir mais comme je débute et que je suis encore nul... Vous verrez mieux l'erreur que moi ! Alors où qu'elle est l'erreur ??? Merci
jeanmi66 Posté(e) le 24 juillet 2007 Auteur Posté(e) le 24 juillet 2007 Pour répondre à Gile, merci beaucoup, ton lisp marche au poil ! PARFAIT, rien à redire, simple et efficace !!! Merci encore
dnalor Posté(e) le 25 juillet 2007 Posté(e) le 25 juillet 2007 Presque super ! Ca fonctionne pour le x mais pas pour le y !? Je vois pas trop d'où ça peut venir mais comme je débute et que je suis encore nul... Vous verrez mieux l'erreur que moi ! Alors où qu'elle est l'erreur ??? apparemment il y un [espace] qui c'est glissé dans le passage à la ligne ;; ;;;;en le supprimant cela devrait aussi fonctionner pour les y meilleures salutations
jeanmi66 Posté(e) le 25 juillet 2007 Auteur Posté(e) le 25 juillet 2007 Beinnn non, là ça marche pas cette macro, même en modifiant l'espace, c'est dommage !
jeanmi66 Posté(e) le 25 juillet 2007 Auteur Posté(e) le 25 juillet 2007 Haaaaaa ok, j'ai pigé, et en plus tu l'avais écrit !!!! Tu le fais en 2 bouttons !!!, je pensais qu'en un seul boutton on pouvait tout faire !?
dnalor Posté(e) le 25 juillet 2007 Posté(e) le 25 juillet 2007 à jeanmi66 On doit utiliser en deux boutons car quand on lance l'évaluation diesel par $M= l'évaluation se fait sur toute la chaîne et lors de la saisie du texte la valeur de "lastpoint" change il faut enregistrer les coordonnées dans une variable avant et relancer une deuxième évaluation pour ma part pour plus de fonctionnalité j'utilises les menus curseurs pour la deuxième évaluation. Ceci dit ce n'est pas forcément impossible de la faire en un seul bouton mais c'est plus long à mettre au point et il n' y a pas de garantie mais dans certains cas j'y suis arrivé... donc si on peut utiliser le lisp c'est pour moi plus compliqué du point de vue syntaxe mais plus simple d'utilisation... pour ma part je préfères travailler en LT.... Salutations
jeanmi66 Posté(e) le 25 juillet 2007 Auteur Posté(e) le 25 juillet 2007 Je comprends ce que tu veux dire. C'est peut-être parceque je débute mais j'ai vraiment envie de savoir ce qui va pas dans cette macro ! Je l'ai fait en 2 bouttons, apparemment, le 1er fonctionne, pas le second. Mis à part l'espace, tu vois autre chose qui pourrait coincer ?
dnalor Posté(e) le 25 juillet 2007 Posté(e) le 25 juillet 2007 à jeanmi66 Comme déjà expliqué les macros ont étés élaborées sous autocad LT et retranscrites pour autocad FULL j'ai refait des test sur la deuxième macro et du premier coup cela fonctionne mais après des essais plus poussés je constate que la manière d'utiliser les accobj peut influencer le résultat (pour définir des point de coordonnées j'ai dessiné des croix et si j'utilise la commande id en tapant l'accrochage int. cela ne fonctionnait pas/plus)d'après mes test si on ajoute un . devant les commandes le déroulement de la macro est meilleure du moins sur la version adt2004. BOUTON 1 ^C^C.id;\^CMODIFVAR;USERS1;$M=$(getvar,lastpoint); BOUTON 2 ^C^C.changer;\;;;;;;$m=$(rtos,$(index,0,$(getvar,users1)));^C^C.changer;\;;;;;;$m=$(rtos,$(index,1,$(getvar,users1))); En espérant que ce sera la bonne... Avec mes meilleures salutations NB de toute façon en version FULL si le lisp marche bien c'est la meilleure solution....
dnalor Posté(e) le 25 juillet 2007 Posté(e) le 25 juillet 2007 PS si c'est pour une version LT il est clair que ces macros ne fonctionneront pas dans ce cas : BOUTON 1 ^C^C.id;\^C SETENV;USERS1;$M=$(getvar,lastpoint); BOUTON 2 ^C^C.changer;\;;;;;;$m=$(rtos,$(index,0,$(getenv,users1)));^C^C.changer;\;;;;;;$m=$(rtos,$(index,1,$(getenv,users1)));
jeanmi66 Posté(e) le 25 juillet 2007 Auteur Posté(e) le 25 juillet 2007 iiiiiiiiiiiiiiiiiiiiiiiiiiiiiii Haaaaaaaaaaaaaaaaaaa !!! Ca marche à présent, bravo DNALOR ! Mais encore une question: pourquoi dis-tu qu'il vaut mieux utiliser le LISP ? Question de stabilité, de qualité... ? Merci
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