bigsyke Posté(e) le 23 mars 2010 Posté(e) le 23 mars 2010 Bonjour a tous, Voilà j'essais de realiser un petit lisp pour modifier la valeur d'un attribut alors voilà ce que ca donne: (command "-attedit""O"" NOMDUBLOC"NOMDELETIQUETTE""""Valeur""r"""CCTP""") Le probleme c'est que lorsque je fais ma selection mon petit lisp ne continue pas son petit bonhomme de chemin et s'arrete a Entrez une option Valeur/POsition/Hauteur/Angle/Style/CAlque/COuleur/suivaNt] Ou est l'erreur?Comment puis je lui faire comprendre de continuer mon lisp apres avoir effectuer ma selection? Merci pour votre aide! Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson
Tramber Posté(e) le 23 mars 2010 Posté(e) le 23 mars 2010 Sais-tu que -ATTEDIT est prévu pour que tu cliques directement l'attribut à un moment donné ?Moyennant quoi il faut un pause. (command "-attedit" "O" "cartoucheRAMB" "DEPD" "" pause "" "valeur" "remplacer" 119 "" ) J'ai fait ça chez moi. DEPD est une valeur d'attrib mais j'aurais pu mettre "".C'est quand même difficile à débugger, Très difficile. Il faut bien connaitre. -ATTEDIT est typiquement une méthode manuelle.Pour mettre à jour des attrib par prog, il faut aller un peu plus haut dans le niveau Autolisp !Courage. Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
bigsyke Posté(e) le 23 mars 2010 Auteur Posté(e) le 23 mars 2010 Ca marche! Merci l'homme au casque :D Je ne connaissais pas l'astuce avec """ pause "" ".Pour ce qui est d'Autolisp je suis entrain de mis mettre...avec patience et perseverence.Merci encore pouir ton aide Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson
Tramber Posté(e) le 23 mars 2010 Posté(e) le 23 mars 2010 schouffe : Using the AutoLISP Language > Using AutoLISP to Communicate with AutoCAD > Accessing Commands and Services > Command Submission > Dans l'aide du débugeur lisp. C'est en Anglais. En l'occurence, pause n'est pas toujours obligatoire mais dans ton cas (usage de -attedit) je crois qu'on ne pouvais s'en passer. Tramber casqué. Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
bigsyke Posté(e) le 23 mars 2010 Auteur Posté(e) le 23 mars 2010 Juste une petite question pour la route ;) ... Si par exemple je partais d'un lisp ou je recupere une chaine de caractere,genre (setq var "coucou") et qu'ensuite je veuille recuperer cette valeur en lieu et place du 119,comment puis je faire car si je mets "!var" a la place cela remplacera mon attribut par !var et non par coucou? Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson
Tramber Posté(e) le 23 mars 2010 Posté(e) le 23 mars 2010 (command "-attedit" "O" "cartoucheRAMB" "DEPD" "" pause "" "valeur" "remplacer" var "" ) Tout simplement, non ? Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
bigsyke Posté(e) le 23 mars 2010 Auteur Posté(e) le 23 mars 2010 non d'une pipe...Mille merci Tramber :D et moi qui etais entrain de pondre une usine a gaz pour obtenir ce simple truc :cool: Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson
didier Posté(e) le 23 mars 2010 Posté(e) le 23 mars 2010 bonjour si tu as une valeur dans une variableet que cette variable contient un stringune chaîne de caractère en français dans le textetu peux l'injecter directement avec ton lisp mais si cette variable contient du numériquepar exemple une valeur retournée par(setq valeur ( * 5 2))dans ce cas ce sera un integerun entier en français dans le textepour l'injecter dans ton lisptu le transformeras pas ( itoa valeur)pour mémoire IntegerToAlpha si c'est du style (setq valeur (* 3.14159 1.5))c'est un realun réel, en français dans le textetu la transformeras pas ( rtos valeur 2 2)pour mémoire RealToStringle premier 2 c'est pour faire du décimalle deuxième 2 c'est pour avoir deux décimales. voilà, en souhaitant avec été explicatif... amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
Tramber Posté(e) le 23 mars 2010 Posté(e) le 23 mars 2010 Je me permets de demander à un modérateur de déplacer le sujet dans la rubrique "débuter en lisp".Qu'en pensez-vous ? Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
doberman Posté(e) le 30 mars 2010 Posté(e) le 30 mars 2010 Bonjour, ce script m'interresse pour remplir "automatique mon cartouche, mais seulement je n'est pas la commande "remplacer ??? J'ai l'impression que mon script ne trouve pas mon attibut -AtteditnoCartA3Date_B.et la il me demande de sectionner, je ne peut pas le faire sans cliquer dessus, donc c'est inapproprié..Quelqu'un pourrait il m'indiquer mon erreur SVP ..
doberman Posté(e) le 30 mars 2010 Posté(e) le 30 mars 2010 J'ai "presque" réussi en faisant : -atteditnnCartA3DATE_B .30/03/10 Par contre, je suis Obligé de renseigner "l'ancien" texte, ce qui peut être gênant car sinon il me met mon texte EN PLUS de l'ancien texte....Auriez vous des suggestion a ce sujet ??? D'autre part, est t'il possible de l'appliqué sur TOUTES mes présentations et si oui Comment ? Le But Ultime étant par la suite de créer un autre script qui ouvrira tous mes plans sélectionner et changeras les dates de toutes les présentation.
Patrick_35 Posté(e) le 30 mars 2010 Posté(e) le 30 mars 2010 Salut Il serait peut-être intéressant d'approfondir le lisp 1) créer un jeu de sélectiondxf 0 = insert, donc un blocdxf 2 = nom du blocdxf 410 = nom de l'onglet dans lequel est inséré le bloc à modifier(setq js (ssget "x" (list (cons 0 "insert") (cons 2 "Mon_Cartouche") (cons 410 "Un onglet"))))Exemple de résultat : 2) Prendre le 1er élément du jeu de sélection(setq bloc (ssname js 0))Exemple de résultat : 3) Convertir le bloc en liste dxf(setq ent (entget bloc))Exemple de résultat : ((-1 . ) (0 . "INSERT") (330 . ) (5 . "462968") (100 . "AcDbEntity") (67 . 1) (410 . "Un onglet") (8 . "0") (100 . "AcDbBlockReference") (66 . 1) (2 . "Mon_Cartouche") (10 2000.0 0.0 0.0) (41 . 1.0) (42 . 1.0) (43 . 1.0) (50 . 0.0) (70 . 0) (71 . 0) (44 . 0.0) (45 . 0.0) (210 0.0 0.0 1.0)) 4) Faire une boucle pour retrouver l'attribut souhaité et le modifierCondition pour terminer la boucle, c'est de trouver le dernier élément qui s'appelle toujours SEQEND sur le code dxf 0 (while (/= (cdr (assoc 0 ent)) "SEQEND" ; La boucle avec la condition de fin (setq ent (entget (entnext (cdr (assoc -1 ent)))))) ;Rechercher l'élément suivant (if (eq (cdr (assoc 2 ent)) "MON_ETIQUETTE") ; Test sur le nom de l'étiquette recherchée (progn (setq ent (subst (cons 1 "Ma_Nouvelle_Valeur") (assoc 1 ent) ent)) ; Changer la valeur de l'étiquette (entmod ent) ; Mettre à jour l'attribut ) ) ) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
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