Aller au contenu

explode...


Bred

Messages recommandés

Suite à mes (nombreux) différent sujet concernant les insertions de blocs, et suite à toutes vos réponses, une petite question suplémentaire :

 

Je voudrais récupérer dans une variable tout les objet exploser avec vla-explode (à forcieri ces objets sont des blocs, vu que j'explose un blocs constitué de plusieur blocs...)

 

Ceci pour pouvoir mettre ces objets dans un calque autre que le calque dans lequel ils ont été créé afin de pouvoir tous les récuperer (vu que je fais l'insertion/explosion en bloucle) avec un (setq sel (ssget "_X" '((8 . "nom_calque"))))

(en fait la commande autocad qui va bien c'est "xplode", mais avec le souci de selection (ou non-selection) d'objet non visible à l'écran, je me retrouve avec des choses bizarres...)

 

(setq a (vla-insertblock (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object)))

(vlax-3d-point pt) chembloc 1 1 1 (/ (* pi Rot) 180)))

(vla-explode a) ;;; > là !!!

(vla-delete a)

 

Mais peut-être que je me trompe dans la méthode ???

 

merci

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

vla-explode retourne un réseau (array) d'objets explosés sous forme de variant.

 

Tu peux récupérer ces objets sous forme de liste de vla-object :

 

(setq a (vla-insertblock (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object)))

(vlax-3d-point pt) chembloc 1 1 1 (/ (* pi Rot) 180)))

(setq b (vlax-safearray->list (vlax-variant-value (vla-explode a))))

(vla-delete a)

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

Lien vers le commentaire
Partager sur d’autres sites

OK...OK...OK...

J'essaye un peu de comprendre tout ça... et je suis un peu largué....

mais bon... je vais y arriver.... :casstet:

 

J'ai compris l'idée (pas le principe ni la manière...) de transformer un variant en LISTE de vla-object... et c'est là où je plante : je veux traiter ces vla-object pour les changer de calques...

 

comme les fonctions vl sont du domaine du "flou artistique" pour moi, j'essaye de transformer desespérément cette liste de Vla-object en entité lisp et je rame sec (j'ai trouvé la manière de transformer UN vla-object en entité comme suit (aide):

 

(setq ename-circle (car (entsel "\nPick a Circle:")))

;;;

(setq vlaobject-circle (vlax-ename->vla-object ename-circle))

;;; #

(setq new-ename-circle (vlax-vla-object->ename vlaobject-circle))

;;;

 

... Mais une LISTE de Vla-object je plante lamentablement.... si vous pouviez me guider...

 

Mais bon... j'imagine que pour changer la liste de vla-object il y a une manière plus .... "vla"... mais je fais avec ce que je sait (ce que vous m'avez appris en fait) pour l'instant....

 

merci d'avance

 

 

 

 

 

 

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Lien vers le commentaire
Partager sur d’autres sites

Salut

Pour parcourir une liste, un (foreach toto b .... ou toto prend un élément de la liste un par un

Sinon, comme tu es en vla, un (vla-put-layer objet-vla "MON_CALQUE") permet de changer le calque de ton objet

 

@+

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

Pour traiter une liste tu peux aussi utiliser (mapcar 'fonction liste)

 

(mapcar 'vlax-vla-object->ename b)

 

Mais comme le dit Patrick_35, si ta routine est en VisualLISP, il est plus cohérent de continuer dans le même style, d'autant que les changements de propriétés sont plus aisés dans ce langage.

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

Lien vers le commentaire
Partager sur d’autres sites

Merci énormément de votre aide.

Si vous pouviez me donner vos avis, après quelque test j'en suis arrivé à ceci (ça fonctionne comme je veux donc j'en suis content) :

 

(setq a (vla-insertblock (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object)))

(vlax-3d-point (list 0.0 0.0 0.0)) "Mon_Bloc" 1 1 1 0))

 

(foreach b (vlax-safearray->list(vlax-variant-value (vla-explode a)))

(vla-put-layer b "MON_CALQUE"))

(vla-delete a)

 

Est-ce assez... propre ???

 

Merci d'avance.

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

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é