Jump to content

Recommended Posts

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...

Link to post
Share on other 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 -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

Link to post
Share on other 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...

Link to post
Share on other 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

Link to post
Share on other 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 -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

Link to post
Share on other 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...

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...