Aller au contenu

Trouver Ellipse, Spline, etc dans Bloc (Statique ou Dynamique) et sous-Bloc


Messages recommandés

Posté(e)

Hello

 

SVP je cherche une routine que je puisse adapter a mes besoins !

Malheureusement je n'ai pas trouve mon bonheur !?

 

Avec la selection rapide, il est facile de trouver : Bloc, Ellipse, Spline, Hachure, Hachure de type SOLID, etc

Mais a l'interieur d'un Bloc (Statique ou Dynamique), comment faire ?

De plus parfois on a des blocs imbriques (Je deteste !) ...

 

Donc voila mon CDC/CCTP :

 

- Selection AutoCAD classique

- Ne retenir que les Blocs (Statiques ou Dynamiques) pour le traitement qui suit ...

- Traitement Bloc par Bloc ...

- Rentrer dans la structure du Bloc (Statique ou Dynamique) et voir (simplement pour le selectionner)

si il contient au moins UNE Ellipse ou UNE Spline ou UNE Hachure ou etc

- Si Bloc imbrique, on PLONGE dedans !

- Donc un code Lisp/VLisp avec qq commentaires / exemples (suivant le type d'entite cherchee) a l'interieur ...

Qq superbes lignes bien expliquees , et je commenterais suivant les besoins du moment !

- Ajouter (Oui/Non) le Bloc au jeu de selection courant si il correspond aux criteres ...

- Passer au Bloc suivant

 

A la sortie, on dispose simplement d'une selection (ou RIEN) de N Blocs qui correspondent aux criteres de choix ...

 

Ainsi par un DEPLACER P ou COPIER P ou Forcer la couleur, je pourrais aller examiner/analyser ces Blocs ulterieurement ...

 

Voyez vous ce que je veux dire !?

 

Merci d'avance pour votre aide !

 

Bye, lecrabe

Autodesk Expert Elite Team

Posté(e)

Salut,

 

Un petit truc vite fait :

 

;; BLOCKFILTER
;; Sélectionne les blocs contenant au moins une entité de type LWPOLYLINE
;; possibilité de modifier le type d'entité recherchée dans le code

(defun c:BlockFilter (/ hasent selSet i blockRef)

 ;; hasent (sous-routine)
 ;; Retourne T (true) si la référence de bloc contient une entité du type spécifié, nil (false) sinon.
 ;;
 ;; Arguments
 ;; blockRef  : référence de bloc (ENAME)
 ;; dxfName   ; nom DXF du type d'entité à rechercher (STRING)
 ;;             La chaîne doit être identique à celles du droupe DXF 0 ("LWPOLYLINE", "SPLINE", "HATCH", ...)
 (defun hasent	(blockRef entType / ent found dxfName)
   (setq ent (cdr
	(assoc -2 (tblsearch "BLOCK" (cdr (assoc 2 (entget blockRef)))))
      )
   )
   (while (and ent (not found))
     (setq dxfName (cdr (assoc 0 (entget ent))))
     (if (= dxfName entType)
(setq found T)
(if (= dxfName "INSERT")
  (setq found (hasent ent entType))
)
     )
     (setq ent (entnext ent))
   )
   found
 )

 ;; fonction principale : traitement du jeu de sélection
 (if (setq selSet (ssget '((0 . "INSERT"))))
   (repeat (setq i (sslength selSet))
     (setq blockRef (ssname selSet (setq i (1- i))))
     ;; appel de la fonction 'hasent' pour filtrer le jeu de sélection
     (or
(hasent blockRef "LWPOLYLINE") ; <- remplacer par le type d'entité recherché
(ssdel blockRef selSet)
     )
   )
 )
 (sssetfirst nil selSet)
 (princ)
)

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

Posté(e)

Bon Matin Gilles

 

MERCI ta routine fonctionne parfaitement sur l'entite que j'ai testee : ELLIPSE

et ce jusque avec des Ellipses imbriquees sur 2 niveaux de profondeur dans les blocs et sous-blocs ...

 

Cela va me permettre de trouver facilement dans les dessins (A l'interieur des Blocs) les entites interdites : ELLIPSE, SPLINE, etc ...

 

Bonne Semaine au Grand Maitre Lisp/VLisp/Dotnet, Bye, lecrabe

Autodesk Expert Elite Team

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é