Aller au contenu

Trouver le calque des blocs


alala

Messages recommandés

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!

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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!

Lien vers le commentaire
Partager sur d’autres sites

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

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é