Aller au contenu

lisp align text sur element adt


Messages recommandés

Posté(e)

MM Boujour

utilisateur de lisp des grands jedi de cadxp j utilise ce lisp ci dessous pour aligner rapidement mes textes sur ligne et poly. Travaillant sur Autodesk Architectural Desktop et essayant d' utiliser que des elements AEC j ai de moins en moins de ligne et poly dans mon dessin.quelqu'un est capable de modifier ou creer un lisp qui permet l' alignement des textes sur les elements aec (mur, grille de poteau...)..

Merci d' avance.

ps: j ai le meme lisp pour aligner les blocs.

 

(defun atxerr (ch)

(cond

((eq ch "Function cancelled") nil)

((eq ch "quit / exit abort") nil)

((eq ch "console break") nil)

(T (princ ch))

)

(setvar "cmdecho" 1)

(setvar "angdir" old_adir)

(setvar "angbase" old_abase)

(setvar "osmode" old_osmd)

(setq *error* olderr)

(princ)

)

(defun near_vertex_arr (obj / obj dxf_obj obj_vlax pt_sel par pt_first pt_snd i bulge e_next)

(setq dxf_obj (entget (car obj)))

(vl-load-com)

(setq

obj_vlax (vlax-ename->vla-object (car obj))

pt_sel (vlax-curve-getClosestPointTo obj_vlax (trans (osnap (cadr obj) "_near") 1 0))

par (vlax-curve-getParamAtPoint obj_vlax pt_sel)

pt_first (trans (vlax-curve-getPointAtParam obj_vlax (fix par)) 0 1)

pt_snd (trans (vlax-curve-getPointAtParam obj_vlax (1+ (fix par))) 0 1)

i 0

)

(cond

((eq (cdr (assoc 0 dxf_obj)) "LWPOLYLINE")

(while (or (/= (caar dxf_obj) 42) (if (< i (fix par)) (setq i (1+ i))))

(setq bulge (cdadr dxf_obj) dxf_obj (cdr dxf_obj))

)

)

(T

(setq e_next (entnext (car obj)))

(repeat (fix par) (setq e_next (entnext e_next)))

(setq bulge (cdr (assoc 42 (entget e_next))))

)

)

(list pt_first pt_snd bulge)

)

(defun c:aq ( / olderr old_abase old_adir e_txt dxf_txt e_seg ent dxf_ent typent l_2pt dxf_11 x_alpha)

(setq old_osmd (getvar "osmode") old_abase (getvar "angbase") old_adir (getvar "angdir"))

(setvar "osmode" 0)

(setvar "angbase" 0)

(setvar "angdir" 0)

(setvar "cmdecho" 0)

(setq olderr *error* *error* atxerr)

(while (null (setq e_txt (entsel "\nChoix du texte a aligner: "))))

(cond

((or

(and

(= (setq typent (cdr (assoc 0 (setq dxf_txt (entget (car e_txt)))))) "TEXT")

(not (member (assoc 72 dxf_txt) '((72 . 3) (72 . 5))))

)

(= typent "MTEXT")

)

(while (null (setq e_seg (entsel "\nAligner le texte sur le segment --> "))))

(setq typent (cdr (assoc 0 (setq dxf_ent (entget (car e_seg))))))

(cond

((or (eq typent "XLINE") (eq typent "RAY"))

(setq dxf_11 (cdr (assoc 11 dxf_ent)))

(setq x_alpha (atan (/ (cadr dxf_11) (car dxf_11))))

(grdraw (trans (cdr (assoc 10 dxf_ent)) 0 1) (polar (trans (cdr (assoc 10 dxf_ent)) 0 1) x_alpha (distance (getvar "vsmin") (getvar "vsmax"))) -1 1)

)

((eq typent "LINE")

(setq x_alpha (angle (cdr (assoc 10 dxf_ent)) (cdr (assoc 11 dxf_ent))))

(grdraw (trans (cdr (assoc 10 dxf_ent)) 0 1) (trans (cdr (assoc 11 dxf_ent)) 0 1) -1 1)

)

((or (eq typent "LWPOLYLINE")

(and

(eq typent "POLYLINE")

(zerop (boole 1 118 (cdr (assoc 70 dxf_ent))))

)

)

(setq l_2pt (near_vertex_arr e_seg))

(grdraw (car l_2pt) (cadr l_2pt) -1 1)

(if (zerop (caddr l_2pt))

(setq x_alpha (angle (trans (car l_2pt) 1 0) (trans (cadr l_2pt) 1 0)))

(progn (setq x_alpha nil) (princ "\nNe peut obtenir un angle depuis ce type d'objet!"))

)

)

(T

(princ "\nNe peut obtenir un angle depuis ce type d'objet!")

(redraw)

)

)

(cond

(x_alpha

(entmod (subst (cons 50 x_alpha) (assoc 50 dxf_txt) dxf_txt))

(princ "\n ou [Click+gauche] pour tourner de 90°/ ou [Click+droit] pour finir!.")

(while (and (not (member (setq key (grread nil 4 0)) '((2 13)))) (/= (car key) 25))

(setq x_alpha (+ (/ pi 2.0) x_alpha))

(entmod (subst (cons 50 x_alpha) (assoc 50 dxf_txt) dxf_txt))

)

(redraw)

)

)

)

(T (princ "\nCe n'est pas du texte, ou alors il est fixé ou aligné!"))

)

(setvar "angdir" old_adir)

(setvar "angbase" old_abase)

(setvar "osmode" old_osmd)

(setq *error* olderr)

(setvar "cmdecho" 1)

(princ)

)

 

Posté(e)

Bonjour,

 

Bien qu'ayant pondu ce lisp, je ne pense pas pouvoir t'aider.

"Because", pas Architectural Desktop et donc pas d'objet AEC .

 

Et puis un extrait de discussion sur le quel je suis tombé, me dit que cela risque d'être difficile

 

Le DXF non supporté par Autodesk Architectural Desktop ?

 

. . . .

 

Tony Tanzillo m'a rapporté que dans le groupe de discussion autodesk.aec.arch-desktop.customization, Peter Funk (responsable des interfaces de programmation dans la division génie civil d'Autodesk) a annoncé qu'Autodesk abandonnera le support des codes DXF au niveau des objets d'Autodesk Architectural Desktop. Cela n'aura pas d'impact réel sur la communauté des utilisateurs, mais peut poser des problèmes aux développeurs indépendants.

 

Selon M Funk, le DXF n'est pas adapté dans le cas d'objets complexes comme des portes ou des fenêtres. De toutes façons, le seul programme capable actuellement de lire des DXF générés par Autodesk Architectural Desktop est Autodesk Architectural Desktop lui même.

 

Autodesk reconnaît cependant que l'usage du DXF simplifie le travail avec ActiveX et Autolisp. C'est pourquoi ils pensent proposer des alternatives.

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

Merci de ta reponse bonuscad et je me doutais un petit peu de celle ci.

Milles excuses pour avoir oublié que tu l' avais pondu et je profite de ta reponse pour te remercier pour tous tes lisps que j utilise et me font gagner du temps.

un grand merci.

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é