Aller au contenu

Supprimer les côtes dans les blocs


LUDWIG

Messages recommandés

Bonjour,,

 

Toujours dans mon optique de nettoyage et normalisation de dessin, je cherche à éliminer toutes les côtes. Pas de problème :

 

 (defun c:supcot	()
;****suppression des côtes du dessin
 (if (/= nil (setq nom (entnext)))(setq entitytyp (cdr (assoc 0 (entget (setq nom (entnext)))))))
 (while nom
   (if	(= "DIMENSION" entitytyp) (entdel nom))
   (if (/= nil (setq nom (entnext nom)))(setq entitytyp (cdr (assoc 0 (entget nom)))))
   ) ;_ Fin de while
)

 

Sauf que bien sûr endel ne supprime pas les côtes dans le blocs (l'aide est d'ailleurs claire sur ce point).

 

J'essaye donc de supprimer la côte avec un subst dans la définition du bloc. Je sais que ça ne va pas marcher mais je ne connais pas la commande qui supprime un bout de liste dans une liste (subst remplace un bout de liste par un autre dans une liste).

 

   (setq bloc_prop (tblnext "block" T))
 (setq constituant_id (cdr (assoc -2 bloc_prop)))
 (while bloc_prop
   (while constituant_id
     (if(= (cdr (assoc 0 (entget (setq n (cdr (assoc -2 bloc_prop)))))) "DIMENSION")
[b] 	(setq bloc_prop (subst "" (cons -2 constituant_id) bloc_prop))
(entmod bloc_prop)[/b]	)
 (setq constituant_id (entnext constituant_id))
     ) ;_ Fin de while
   (setq bloc_prop (tblnext "block"))
   ) ;_ Fin de while
 ) ;_ Fin de defun

Autocad 2021 - Revit 2022 - Windows 10

Lien vers le commentaire
Partager sur d’autres sites

Salut ludwig,

 

il existe des fonctions visuallisp qui permettent ces modifications dans des listes:

 

vl-remove :

(vl-remove element-to-remove list)

 

vl-remove-if :

(vl-remove-if predicate-function list)

 

vl-remove-if-not :

(vl-remove-if-not predicate-function list)

 

Des infos sont disponibles dans l'aide.

 

Sinon sur le forum "routines lisp" il y a un post très interessant sur ce genre de routine avec les particularités du langage Lisp c'est ici : http://www.cadxp.com/sujetXForum-5535.htm

 

 

 

 

www.le-metal.net, sur la métallerie
Lien vers le commentaire
Partager sur d’autres sites

Il me semble entendre des bulles pétiller ;)

 

Plus sérieusement, je pense que ça devrait te convenir

 

(vl-load-com)
(setq a (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))))
(vlax-for bl a
 (vlax-for ent bl
   (if (= (vla-get-objectname ent) "AcDbRotatedDimension")
     (vla-delete ent)
   )
 )
)
(vla-regen (vla-get-activedocument (vlax-get-acad-object)) acActiveViewport)

 

@+

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

ARGH ! AcDbRotatedDimension correspond uniquement aux côtes pivotées.

 

J'ai essayé de mettre un caractère générique ("*Dim*) mais ça ne fonctionne pas...

 

Comment prendre toutes les côtes ?

Autocad 2021 - Revit 2022 - Windows 10

Lien vers le commentaire
Partager sur d’autres sites

Salut

Ah Exact, en faisant une recherche rapide, j'ai trouvé ces classes

AcDbDimension

AcDbAlignedDimension

AcDb3PointAngularDimension

AcDbOrdinateDimension

AcDbRotatedDimension

AcDbRadialDimension

AcDbDiametricDimension

AcDb...Dimension ?

 

Donc pour simplifier, il suffit de remplacer

(if (= (vla-get-objectname ent) "AcDbRotatedDimension")

par

(if (vl-string-search "Dimension" (vla-get-objectname ent))

et à la limite, pour plus de sécurité, par

(if (and (vl-string-search "AcDb" (vla-get-objectname ent))(vl-string-search "Dimension" (vla-get-objectname ent)))

 

@+

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é