Aller au contenu

Routine Lisp pouvant être simplifiée


Maximilien

Messages recommandés

Voici une routine que je viens de créer mais elle me parait boiteuse voire même obsolète. (j'e^père ne pas avoir inventé l'eau chaude).

 

Comme je connais pas trop la gestion des entites, j'ai "pondu" un truc pareil avec le peu de connaissances que j'ai.

 

Je me doute parmi vous savent qu'en 3 ou quatre fonctions ceci aurait pu être fait mais je vous demande de l'aide c'est justement pour savoir si c'est simplifiable

 

D'ailleurs je vais certainemement décomposer cette fonction en plusieurs plus simple.

 

Je recois des plans d'architecte dont tous les styles de textes sont en "txt.shx"

Je voudrais pouvoir les forcer en Arial Narrow par exemple sans toucher à AutoCAD.fmp

le souci c'est que je n'ai pas trouver de fonction qui me liste tous les styles de texte contenu dans le fichier DWG.

 

pour cela je liste tous les éléments et je trie ceux qui contiennent le Type_Selection voulu

j'obtiens une Liste de toutes les entités de ce type.

De celles-ci j'extrait les noms d'entités (Elements_Temporaire) pour en faire une liste.

Elle liste est ensuite triée et vidée de sa redondance pour être une Liste ne contenant qu'une seule fois la Liste nominatives des entités

 

Pour l'instant je me suis focaliser sur le type "TEXT" mais je vais certainement l'étendre à l'ensemble des entités.

 

(defun ListElements (Type_Selection /

ListeSSGET Elements_Resultante

Elements_Temporaire

boucle1 boucle2

Valeur Valeur_Test

Sel_All_Elts ListeSel_All_Elts

)

;;;

;;; Selection de tous les éléments de type : Type_Selection

;;;

(setq Valeur (list

(cons 2 "BLOCK_RECORD")

(cons 2 "COTSTYLE")

(cons 0 "DICTIONARY")

(cons 2 "LTYPE")

(cons 0 "MLIGNESTYLE")

(cons 7 "MTEXT")

(cons 7 "TEXT")

)

)

(Setq ListeSSGET (cons 0 Type_Selection))

(setq Elements_Resultante nil)

(setq Valeur nil)

(setq Sel_All_Elts (ssget "X" (list ListeSSGET)))

(if Sel_All_Elts

(progn

(setq ListeSel_All_Elts (ssnamex Sel_All_Elts))

(setq boucle1 0)

(setq Elements_Temporaire nil)

(while (/= (nth boucle1 ListeSel_All_Elts) nil)

(progn

(setq Valeur (entget (nth 1 (nth boucle1 ListeSel_All_Elts))))

(setq boucle2 0)

(while (/= (nth boucle2 Valeur) nil)

(progn

(if (= (nth 0 (nth boucle2 Valeur)) 7)

(setq Elements_Temporaire

(append Elements_Temporaire

(list (cdr (nth boucle2 Valeur)))

)

)

)

(setq boucle2 (+ boucle2 1))

)

)

(setq boucle1 (+ 1 boucle1))

)

)

(if Elements_Temporaire

(Setq Elements_Temporaire (acad_strlsort Elements_Temporaire))

)

(setq Elements_Resultante

(append Elements_Resultante

(list (nth 0 Elements_Temporaire))

)

)

(setq Valeur_Test (nth 0 Elements_Temporaire))

(setq boucle1 1)

(setq boucle2 0)

(while (< boucle1 (length Elements_Temporaire))

(progn

(if (/= (nth boucle1 Elements_Temporaire)

Valeur_Test

)

(progn

(setq Elements_Resultante

(append Elements_Resultante

(list (nth boucle1 Elements_Temporaire))

)

)

(setq Valeur_Test (nth boucle1 Elements_Temporaire))

(setq boucle2 (+ boucle2 1))

)

)

(setq boucle1 (+ boucle1 1))

)

)

)

)

Elements_Resultante

)

 

Si vous avez des ropositions n'hésitez pas surtout que le résultat de ce travail collectif sera certainement déplacé par Patrick ;)

 

tu comprendras Patrick que je n'aurai pas eu la prétention de ne pas mettre cette routine "boiteuse" dans les routines

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

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

AutoCAD, Revit, GstarCAD, Fisa-CAD, Microsoft Office

 

PlaquetteDeplianteMars2024.pdf

Lien vers le commentaire
Partager sur d’autres sites

Salut,

Une routine pour forcer tous les styles de texte en Arial Narrow

 

(defun c:sty(/ cmd reg ts st)
 (setq cmd (getvar "cmdecho") reg (getvar "regenmode"))
 (setvar "cmdecho" 0)
 (setvar "regenmode" 0)
 (command "_.undo" "_group")
 (setq ts "Arialn.ttf") ; c'est le style Arial Narrow
 (setq st (tblnext "style" t))
 (princ "\nTraitement en cours...")(princ)
 (while st
   (command "_.style" (cdr (assoc 2 st)) ts "" "" "" "" "")
   (setq st (tblnext "style"))
 )
 (command "_.regen")
 (command "_.undo" "_end")
 (setvar "cmdecho" cmd)
 (setvar "regenmode" reg)
 (princ)
)

 

Je me suis servi de la commande style d'autocad pour changer le style de texte, ce qui me parait un peu plus simple que de sélectionner toutes les entités et de changer la police

 

@+

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

Maximilien,

 

Il y a aussi la variable système FONTALT si la police est introuvé mais encore FONTMAP qui définit l'emplacement d'un fichier où toutes les correspondances sont données. Tu n'as qu'à alterner entre 2 fichier pour FONTMAP.

 

Serge

 

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é