Aller au contenu

intégrer DRAWORDER et TEXTMASK ou équivalent en LISP


Messages recommandés

Posté(e)

Je suis en train de créer un AutoLISP qui créé des lignes de repère personnalisée au bureau.

La commande "_leader" a dû être abandonné par DECRET patronal.

 

- Je travaille avec AutoCAD 2005 (pas besoin de dire en version pleine :cool: )

 

- je trace donc des lignes (avec toutes les caractéristiques) c'est OK

- j'ajoute un texte Mulltiligne (avec le bon style ) çà c'est OK

- je souligne avec le bon décalage chaque ligne de texte correspondant à cette ligne de repère (utilisation des code DXF 10, 40, 41, 42, 43, 44.

Mon problème est :

je désirerait cacher ce qu'il y a derrière les textes.

Or (command "TEXTMASK") me retourne comme quoi cette commande ne fonctionne pas.

J'ai cherché un autre moyen.

Avec AutoCAD 2005 dans les propriétés on a la possibilité de masqué un teste multiligne j'ai donc lu les codes DXF du texte à chaque état de masquage :

 

Entité non masquée:
"Bibliothèque:"
(0 . "STYLE") (2 . "Standard") (70 . 0) (40 . 0.0) (41 . 1.0) (50 . 0.0) (71 . 0) (42 . 0.2) (3 . "txt") (4 . "")
"Contenu entité:"
(-1 . ) (0 . "MTEXT") (330 . ) (5 . "169")  (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbMText") (10 -0.100979 8.16674 0.0) (40 . 0.2) (41 . 4.82053) (71 . 1) (72 . 5) (1 . "Texte de test Masquage") (7 . "Standard") (210 0.0 0.0 1.0)(11 1.0 0.0 0.0) (42 . 4.33333) (43 . 0.266667) (50 . 0.0) (73 . 1) (44 . 1.0)

"Contenu entité devenue masquée:"
(-1 . ) ...
[surligneur] (90 . 3) (63 . 9) (421 . 13158600) (45 . 1.5)[/surligneur]
[surligneur] (441 . 7668844)[/surligneur]

"Contenu entité devenue masquée:"
texte surligné effacé et remplacé par  [surligneur] (90 . 2)[/surligneur]

 

Or malheureusement en testant sur plusieurs Textes multiligne la valeur de la paire pointée 441 change.

je suis bloqué là

 

Bon mais ensuite lorsque ce texte multiligne est masqué les lignes soulignant le texte sont masquée elles aussi (la soulution du soulignement du texte %%u est insatisfaisante par DECRET patronal)

 

et un command ("DRAWORDER") ou (ai_draworder "_F") Entity .... ne fonctionne pas.

Je trouverai dommage de devoir supprimer à chaque masquage de texte les lignes pour relancer instantanément aprèsle soulignage.

je suis bloqué là

 

1ère question : quelqu'un a-t-il trouvé à quoi correspond le code 441 et comment la calculer ? (elle change à chaque nouveau MTEXT") (la solution de rajouter encore un solide n'est pas satisfaisante http:// http://www.cadxp.com/sujetXForum-2471.htm)

2ème question : comment intégrer draworder dans un lisp car je viens de chercher dans le forum et la solution proposée ne fonctionne pas chez moi [surligneur] ((command "_.draworder" (cdar dxf_ent) "" "_above" mask_txt)[/surligneur])

 

Dessinateur AutoCAD, Modeleur BIM, consultant informatique logiciels métier

Lenovo ThinkStation P330 i9 9900K 32Gb RAM 512 SSD + 1To

GstarCAD, Fisa-CAD, Revit, FisaBIM CVC, Microsoft Office

 

PlaquetteDeplianteMars2024.pdf

Posté(e)

merci Patrick_35

 

 (foreach n1 ARG_EntLINE
     (command "_.draworder"
       (cdr (assoc -1 n1))
       ""
       "_above"
       (cdr (assoc -1 ARG_EntMTEXT))
       "")
 )

 

en sachant que

ARG_EntMTEXT = (entget .....) du texte

ARG_EntLINE = (list (enget...)..) de toutes les lignes attaché au texte

 

il me reste l'histoire du masquage de ce f*** texte

 

Dessinateur AutoCAD, Modeleur BIM, consultant informatique logiciels métier

Lenovo ThinkStation P330 i9 9900K 32Gb RAM 512 SSD + 1To

GstarCAD, Fisa-CAD, Revit, FisaBIM CVC, Microsoft Office

 

PlaquetteDeplianteMars2024.pdf

Posté(e)

ça me donne rien, ca reste sur la ligne de commande.

(c:textmask)(cdr (assoc -1 ARG_EntMTEXT))""

et trop d'argument pour celle là

(c:textmask (cdr (assoc -1 ARG_EntMTEXT)) "")

Dessinateur AutoCAD, Modeleur BIM, consultant informatique logiciels métier

Lenovo ThinkStation P330 i9 9900K 32Gb RAM 512 SSD + 1To

GstarCAD, Fisa-CAD, Revit, FisaBIM CVC, Microsoft Office

 

PlaquetteDeplianteMars2024.pdf

Posté(e)

le problème c'est que je reste bloqué dans la fonction c:textmask

car même :

 

 (sssetfirst nil (ssadd (cdr (assoc -1 ARG_EntMTEXT))))(c:textmask)_P

ne donne rien

Dessinateur AutoCAD, Modeleur BIM, consultant informatique logiciels métier

Lenovo ThinkStation P330 i9 9900K 32Gb RAM 512 SSD + 1To

GstarCAD, Fisa-CAD, Revit, FisaBIM CVC, Microsoft Office

 

PlaquetteDeplianteMars2024.pdf

Posté(e)

le code 441 correspond au couleur 32 bits donc pour avoir du vide de cher vide

 

il faut affecter au 441 (2 à la puissance 32) - 1

 

et là malheur AutoCAD ne le gère pas avec la fonction expt

 Commande: (expt 2 30)
1073741824

Commande: (expt 2 31)
-2147483648

 

Alors je prend ma bonne Casio fx 7000

 

2^32=4.294.967.296

 

affectez donc 4.294.967.295 au code 441 pour le masquage du texte multiligne

(pour les versions autoCAD 2005)

Dessinateur AutoCAD, Modeleur BIM, consultant informatique logiciels métier

Lenovo ThinkStation P330 i9 9900K 32Gb RAM 512 SSD + 1To

GstarCAD, Fisa-CAD, Revit, FisaBIM CVC, Microsoft Office

 

PlaquetteDeplianteMars2024.pdf

Posté(e)

Salut, j'ai trouvé

 

Il faut bien sûre charger le lisp textmask.lsp

 

et ensuite par exemple

 

(command "_.wipeout" "_frame" "_off")
(acet-textmask-make-wipeout (car (entsel)) 0.35)

 

@+

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

Posté(e)

J'ai cherché de mon coté et j'ai trouvé autrement Patrick_35.(merci quand même :cool: )

 

J'utilise une fonctionnalité de AutoCAD 2005

(comme tout le BE a une version 2005 c'est OK)

 

ARG_EntMTEXT = (entget (car (entsel))) d'un texte MULTILIGNE

(nth 0 PUBLIC_STYLE_TXT) = 1.05 (pour le calcul de l'offset de wipeout)

 

 (if (assoc 90 ARG_EntMTEXT)
   (setq ARG_EntMTEXT (subst (cons 90 3) (assoc 90 ARG_EntMTEXT) ARG_EntMTEXT))
   (setq ARG_EntMTEXT (append ARG_EntMTEXT (list (cons 90 3)))))
 (if (assoc 63 ARG_EntMTEXT)
   (setq ARG_EntMTEXT (subst (cons 63 9) (assoc 63 ARG_EntMTEXT) ARG_EntMTEXT))
   (setq ARG_EntMTEXT (append ARG_EntMTEXT (list (cons 63 9)))))
 (if (assoc 421 ARG_EntMTEXT)
   (setq ARG_EntMTEXT (subst (cons 421 13158600) (assoc 421 ARG_EntMTEXT) ARG_EntMTEXT))
   (setq ARG_EntMTEXT (append ARG_EntMTEXT (list (cons 421 13158600)))))
 (if (assoc 45 ARG_EntMTEXT)
   (setq ARG_EntMTEXT (subst (cons 45 (sqrt (nth 0 PUBLIC_STYLE_TXT))) (assoc 45 ARG_EntMTEXT) ARG_EntMTEXT))
   (setq ARG_EntMTEXT (append ARG_EntMTEXT (list (cons 45 (sqrt (nth 0 PUBLIC_STYLE_TXT)))))))
 (if (assoc 441 ARG_EntMTEXT)
   (setq ARG_EntMTEXT (subst (cons 441 -1) (assoc 441 ARG_EntMTEXT) ARG_EntMTEXT))
   (setq ARG_EntMTEXT (append ARG_EntMTEXT (list (cons 441 -1)))))
 (entmod ARG_EntMTEXT)

 

Remarque ce code ne fonctionne qu'à partir d'autoCAD 2005 il est inopérant pour les versions antérieures (testé sur une 2004)

 

Nota : le code DXF 45 correspond à l'offset de la commande WipeOUT mais il est totalement modifiable indépendamment .... ouf! pour moi environ 25 % c'est largement suffisant

Dessinateur AutoCAD, Modeleur BIM, consultant informatique logiciels métier

Lenovo ThinkStation P330 i9 9900K 32Gb RAM 512 SSD + 1To

GstarCAD, Fisa-CAD, Revit, FisaBIM CVC, Microsoft Office

 

PlaquetteDeplianteMars2024.pdf

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é