Aller au contenu

Retrouver la présentation contenant un bloc dont une valeur d\'attribut connue


Messages recommandés

Posté(e)

Bonjour à vous,

 

Comment faire pour retrouver la présentation contenant un bloc dont une valeur d'attribut est connue ?

 

Je pense à une méthode mais peut-être n'est-ce pas la bonne ?

Peut-être y-a-t-il plus simple ?

 

1 - Lister tous les blocs du fichier

 

2 - Faire une boucle sur chacun des blocs pour balayer les valeures d'attribut et vérifier s'il contient la valeure connue

 

3 - Balayer le bloc pour retrouvé le code 410

 

 

D'avance merci pour votre aide.

 

Il n'y a pas d'homme cultivé, il n'y a que des hommes qui se cultivent.

 

Maréchal Foch

Posté(e)

Salut,

 

Je ferais plutôt en sens inverse :

 

- récupérer la liste des présentations (layoutlist)

- dans chacune, sélectionner les blocs pour y chercher la valeur de l'attibut.

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

Posté(e)

Salut Gile,

 

Oui, c'est vrais c'est plus simple !

 

Tu as une nouvelle fois raison.

Contrairement à moi tu as vraiment l'esprit logique.

 

Merci encore.

A+.

 

Il n'y a pas d'homme cultivé, il n'y a que des hommes qui se cultivent.

 

Maréchal Foch

Posté(e)

En fait non, je pense que je suis un peu tordu, c'est plus simple de sélectionner tout les blocs qui ne sont pas dans l'espace objet et de retrouver la valeur de l'attribut.

 

2 petits exemples, l'argument est la valeur de l'attribut à retrouver.

 

Test1 : par la liste des présentations

 

(defun test1 (val / lst ret ss n bl att)
 (setq lst (layoutlist))
 (while (and lst (not ret))
   (if	(and (setq ss (ssget "_X" (list '(0 . "INSERT") (cons 410 (car lst)))))
     (setq n -1)
)
     (while (and (not ret) (setq bl (ssname ss (setq n (1+ n)))))
(if (and (= 1 (cdr (assoc 66 (entget bl))))
	 (setq att (entnext bl))
    )
  (while att
    (if	(= val (cdr (assoc 1 (entget att))))
      (setq ret (car lst))
    )
    (setq att (entnext att))
  )
)
     )
   )
   (setq lst (cdr lst))
 )
 ret
) 

 

test2 : en sélectionnat tous les blocs

 

(defun test2 (val / n ss ret bl att)
 (setq n -1)
 (if (setq ss (ssget "_X" '((0 . "INSERT") (410 . "~Model"))))
   (while (and	(not ret)
	(setq bl (ssname ss (setq n (1+ n))))
   )
     (if (and (= 1 (cdr (assoc 66 (entget bl))))
       (setq att (entnext bl))
  )
(while att
  (if (= val (cdr (assoc 1 (entget att))))
    (setq ret (cdr (assoc 410 (entget att))))
  )
  (setq att (entnext att))
)
     )
   )
 )
 ret
) 

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

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é