Bred Posté(e) le 17 mai 2006 Posté(e) le 17 mai 2006 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...
(gile) Posté(e) le 17 mai 2006 Posté(e) le 17 mai 2006 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
Bred Posté(e) le 17 mai 2006 Auteur Posté(e) le 17 mai 2006 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...
Patrick_35 Posté(e) le 17 mai 2006 Posté(e) le 17 mai 2006 SalutPour parcourir une liste, un (foreach toto b .... ou toto prend un élément de la liste un par unSinon, comme tu es en vla, un (vla-put-layer objet-vla "MON_CALQUE") permet de changer le calque de ton objet @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
(gile) Posté(e) le 18 mai 2006 Posté(e) le 18 mai 2006 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
Bred Posté(e) le 18 mai 2006 Auteur Posté(e) le 18 mai 2006 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...
(gile) Posté(e) le 19 mai 2006 Posté(e) le 19 mai 2006 Est-ce assez... propre ??? L'essentiel est que çà marche, mais là, difficile de faire plus concis ! Bravo. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Patrick_35 Posté(e) le 19 mai 2006 Posté(e) le 19 mai 2006 Juste un point de détail, c'est le nom des variables qui pourraient être un peut plus clair pour la compréhention du lisp, sinon, rien à redire @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Bred Posté(e) le 19 mai 2006 Auteur Posté(e) le 19 mai 2006 Merci à vous deux.......et à mon prochain souci !!!... Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant