Aller au contenu

Trouver le calque des blocs


Messages recommandés

Posté(e)

Bonjour,

 

Je souhaite automatiser quelques fonctions sur les blocs et je voulais passer par du Vlisp.

 

Afin de lister mes blocs je fait donc un :

(vlax-for MesBlocs(vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))

 

Et je pensait pourvoir ensuite faire un simple "vla-get-layer" pour chaque objet de la collection de blocs.

 

Hors ce n'est pas possible (et un vlax-dump-object me le confirme malheureusement) car la propriété n'existe pas.

 

Dans un même temps si je sélectionne un bloc et que je fait un "vla-get-layer" dessus j'ai bien mon info.

 

Avez vous une méthode pour atteindre chaque bloc en Vlisp de manière a obtenir son calque (et mieux si possible, les calques des éléments qui le compose)?

 

merci d'avance.

C'est en forgeant que l'on devient forgerons.

Et c'est en sciant que Léonard DeVinci!

Posté(e)

Bonjour,,

 

Il me semble que tu fait une petite confusion, que ce soit en Vlisp ou en AutoLisp, il ne faut pas confondre une définition de bloc et une référence de bloc.

Afin de lister mes blocs je fait donc un :

(vlax-for MesBlocs(vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))

Dans ton exemple tu pointes la table des blocs AcadBlock (BLOCK en dxf).

 

si je sélectionne un bloc et que je fait un "vla-get-layer" dessus j'ai bien mon info.

Normal la tu interroges une référence de bloc AcadBlockReference(INSERTen dxf)... La tu obtiendra le calque d'insertion.

 

A+

Apprendre => Prendre => Rendre

Posté(e)

Il n'y a donc pas de collections des références de bloc insérés dans le plan? :huh:

Il ne me reste plus qu'a faire du ssget si je ne me trompe pas!?

C'est en forgeant que l'on devient forgerons.

Et c'est en sciant que Léonard DeVinci!

Posté(e)

Salut

 

Si tu veux pousser la compréhension plus loin, l'espace objet est un bloc dans autocad

(vlax-dump-object (vla-item (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) 0))

Tu peux parcourir ce bloc avec une boucle vlax-for pour y trouver les blocs.

C'est long et fastidieux et rien ne vaut un bon vieux ssget avec le filtre qui va bien pour optimiser ta recherche, mais cette méthode est utile quand on utilise ObjectDbx (ou tout autre document ouvert dans autocad, mais qui n'est pas le document actif), car le ssget ne fonctionne pas dans ce cas.

 

@+

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

Posté(e)

Salut,

 

C'est long et fastidieux et rien ne vaut un bon vieux ssget avec le filtre qui va bien pour optimiser ta recherche

Je n'en suis pas si sûr, en interne, un (ssget "_x" ...) fait bien la même chose en parcourant les espaces objet et papier (à moins d'avoir filtré avec le groupe 410) et en appliquant le filtre à toutes les entités...

Il faudrait faire des tests.

 

En tout cas, en .NET parcourir un espace en testant les entités n'est pas plus long qu'utiliser une sélection et permet souvent de faire des choses que les filtres classiques ne permettent pas.

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

Posté(e)

Et bien merci à tous pour toutes ces informations.

Je ne sait pas pourquoi mais j'était persuadé que l'on avait accés à la collection des reférences de bloc inséré dans le plan quelque part.

 

Donc ici "en gros" on tape dans les même tables que lorsque que l'on fait un tblsearch!?

C'est en forgeant que l'on devient forgerons.

Et c'est en sciant que Léonard DeVinci!

Posté(e)

Re,

 

À ma connaissance, le plus rapide pour trouver les références d'un (ou plusieurs) bloc(s) est de passer par la définition du bloc, plus précisément l'objet "BLOCK_RECORD" correspondant à la définition de bloc dans lequel sont enregistrées toutes les références pour ce bloc.

Voir ce sujet.

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

Posté(e)

Et bien, vraiement très instructif tout ça!

Encore merci j'ai découvert de nouvelles fonction et méthodes grâce à tout cela!

C'est en forgeant que l'on devient forgerons.

Et c'est en sciant que Léonard DeVinci!

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é