Aller au contenu

selection d\'objet ( blocs ) par son calque


Messages recommandés

Posté(e)

Bonjour à tous,

 

je continue mon programme mais je ne comprend pas la commande

" ( vlax-invoke obl1 list Intersectwith obj2 acExtendNone )

 

Par contre je voudrais sélectionner tous les blocs que j'ai inséré et seulement ces objets.

 

Je pensais utiliser le calque qui contient ces blocs mais je ne suis pas sur.

 

Je ne parviens pas à les sélectionner puis à les exploser.

 

j'ai la commande explode mais je ne sais pas comment l'intégrer.

 

merci et à +

Posté(e)

Salut

 

je continue mon programme mais je ne comprend pas la commande

" ( vlax-invoke obl1 list Intersectwith obj2 acExtendNone )

Tu recherches l'intersection entre deux objets

 

Par contre je voudrais sélectionner tous les blocs que j'ai inséré et seulement ces objets.

Tu peux créer un jeu de selection au fur et à mesure de tes insertions

par exemple

(setq js (ssadd))
(command "_.insert ....)
(ssadd (entlast) js)
....
....
(command "_.insert ....)
(ssadd (entlast) js)
....
....

 

Je pensais utiliser le calque qui contient ces blocs

C'est une solution

par exemple

(setq js (ssget "_x" (list (cons 0 "INSERT") (cons 8 "MON_CALQUE"))))

Là, tu sélectionne tous les blocs sur le calque "MON_CALQUE"

Si te ne veux que quelques blocs sur ce calque, tu peux aussi faire

(setq js (ssadd))
(foreach ent (list "bloc1" "bloc2" "bloc3")
 (mapcar '(lambda(x) (ssadd (cadr x) js)) (ssnamex (ssget "x" (list (cons 0 "INSERT") (cons 2 ent)(cons 8 "MON_CALQUE")))))
)

 

Ton jeu de sélection étant créé,il est maintenant facile de décomposer le tout.

je te laisse chercher un peu ;)

 

@+

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,

 

Tu as posté deux fois le même message, tu as eu deux réponses similaires, je poste mon complément de réponse dans ce fil, mais c'est au hasard, j'aurais pu le faire dans l'autre.

 

L'expression que tu donnes ( vlax-invoke obl1 list Intersectwith obj2 acExtendNone ), est inexacte, la sintaxe correcte est :

 

(vlax-invoke obj1 'Intersectwith obj2 acExtendNone) 

 

Cette expression retourne la liste des coordonnées de la (ou des) intersection(s) entre obj1 et obj2 (ou nil s'il n'y a pas d'intersection).

obj1 et obj2 sont de type VLA-OBJECT (l'équivalent de ENAME à utiliser avec les fonctions Visual LISP)

 

La fonction vlax-ename->vla-object permet de traduire un ENAME en VLA-OBJECT

 

Exemple :

 

Créer un cercle de centre 0,0 et de rayon 1.0 et récupérer son nom d'entité (ename) dans la variable ent1, une ligne de -2.0,0.0 à 2.0,0.0 et récupérer son nom d'entité (ename) dans la variable ent2:

 

(entmake (list '(0 . "CIRCLE") '(10 0.0 0.0 0.0) '(40 . 1.0)))
(setq ent1 (entlast))
(entmake (list '(0 . "LINE") '(10 -2.0 0.0 0.0) '(11 2.0 0.0 0.0)))
(setq ent2 (entlast)) 

 

Traduire ces noms d'entités en vla-object :

 

(setq obj1 (vlax-ename->vla-object ent1)
     obj2 (vlax-ename->vla-object ent2)
) 

 

Récupérer les ntersections des deux objets :

 

(vlax-invoke obj1 'Intersectwith obj2 acExtendNone) 

 

Le résultat est : (1.0 0.0 0.0 -1.0 0.0 0.0) où (1.0 0.0 0.0) et (-1.0 0.0 0.0) sont les coordonnées des deux points d'intersection.

 

Si tu veux avoir le résultat sous forme d'une liste de points tu peux utiliser la rooutine 3d-Coord->Pt-Lst

 

;;; 3d-coord->pt-lst Convertit une liste de coordonnées 3D en liste de points
;;; (3d-coord->pt-lst '(1.0 2.0 3.0 4.0 5.0 6.0)) -> ((1.0 2.0 3.0) (4.0 5.0 6.0))

(defun 3d-coord->pt-lst	(lst)
 (if lst
   (cons (list (car lst) (cadr lst) (caddr lst))
  (3d-coord->pt-lst (cdddr lst))
   )
 )
)

 

L'expression :

 

(3d-coord->pt-lst  (vlax-invoke obj1 'Intersectwith obj2 acExtendNone))

 

Retournera : ((1.0 0.0 0.0) (-1.0 0.0 0.0))

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

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é