Aller au contenu

SVP Routine: Selection facile des Objets Annotatifs


lecrabe

Messages recommandés

Hello

 

Trouver facilement Tel ou Tel Type d'objets annotatifs dans un DWG

ou plutot dans une Selection m'a toujours "titiller" !?

 

Donc SVP je desire une Routine (VLisp sans doute) "simple" qui :

 

- On Pose une question (Text/MText ou Hatch/Hachure ou Dim/Cotation ou Leader/MLeader)

Valeur par defaut = Text/MText

- A partir d'une Selection d'objets (Annotatifs ou NON !) classique de l'utilisateur (dans l'onglet Objet en principe)

- Ne retienne dans la selection QUE les Objets Annotatifs CONCERNES !

 

Ainsi a la sortie, j'ai (dans ma selection courante) par exemple

TOUS les Texts/MTexts ANNOTATIFS depuis ma selection de depart ...

 

En plus si la routine était Scriptable: TIP-TOP !

 

Merci d'avance, Bye, lecrabe

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Hello

 

1) J'ai programme en Lisp pur de 1990 a 2000 environ !

 

2) Je n'envisage pas de replonger dans la programmation ?!

 

3) De plus je crois que le Mode Annotatif est "spécial" ? Peut être dans les Dictionnaires ?!

 

Bye, lecrabe

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Mais c'est qu'il deviendrait impatient le décapode...

 

Voilà un petit truc qui devrait répondre à la demande.

Noter que pour les lignes de repère non multiple (ancienne mode) seul le texte peut être annotatif, ils sont donc traités dans la catégorie "Texte mtexte"

 

(Pas testé en profondeur)

;; Supprime du jeu de sélection les objets non annotatifs
(defun filterAnnot (ss / i ent dict)
 (if ss
   (repeat (setq i (sslength ss))
     (setq ent (ssname ss (setq i (1- i))))
     (if (not (setq dict (cdadr (member '(102 . "{ACAD_XDICTIONARY") (entget ent)))))
       (ssdel ent ss)
       (if (not (setq dict (cdr (assoc -1 (dictsearch dict "AcDbContextDataManager")))))
         (ssdel ent ss)
         (if (not (dictsearch dict "ACDB_ANNOTATIONSCALES"))
           (ssdel ent ss)
         )
       )
     )
   )
 )
 ss
)

;; Sélectionne les objet annotatifs par type
(defun c:selannot (/ kw ss fr)
 (initget "Texte Hachure Cotation Repere")
 (setq kw (getkword
            "\nChoisir une option [Texte mtexte/Hachure/Cotation/ligne de Repere multiple] <Texte>: "
          )
       fr (cond
            ((= kw "Hachure") '((0 . "HATCH")))
            ((= kw "Cotation") '((0 . "DIMENSION")))
            ((= kw "Repere") '((0 . "MULTILEADER")))
            (T '((0 . "TEXT,MTEXT")))
          )
 )
 (sssetfirst nil (filterAnnot (ssget fr)))
)

Modifié par (gile)
corrections dans le code

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

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é