Aller au contenu

lisp avec attedit


bigsyke

Messages recommandés

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

Lien vers le commentaire
Partager sur d’autres sites

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

 

./__\.
(.°=°.)
Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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

 

./__\.
(.°=°.)
Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

bonjour

 

si tu as une valeur dans une variable

et que cette variable contient un string

une chaîne de caractère en français dans le texte

tu peux l'injecter directement avec ton lisp

 

mais si cette variable contient du numérique

par exemple une valeur retournée par

(setq valeur ( * 5 2))

dans ce cas ce sera un integer

un entier en français dans le texte

pour l'injecter dans ton lisp

tu le transformeras pas ( itoa valeur)

pour mémoire IntegerToAlpha

 

si c'est du style (setq valeur (* 3.14159 1.5))

c'est un real

un réel, en français dans le texte

tu la transformeras pas ( rtos valeur 2 2)

pour mémoire RealToString

le premier 2 c'est pour faire du décimal

le deuxième 2 c'est pour avoir deux décimales.

 

voilà, en souhaitant avec été explicatif...

 

amicalement

Lien vers le commentaire
Partager sur d’autres sites

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

 

-Attedit

n

o

CartA3

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

Lien vers le commentaire
Partager sur d’autres sites

J'ai "presque" réussi en faisant :

 

-attedit

n

n

CartA3

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

 

Lien vers le commentaire
Partager sur d’autres sites

Salut

 

Il serait peut-être intéressant d'approfondir le lisp

 

1) créer un jeu de sélection

dxf 0 = insert, donc un bloc

dxf 2 = nom du bloc

dxf 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 modifier

Condition 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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

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é