Aller au contenu

Sélection en un point


x_all

Messages recommandés

Bonjour

 

j'ai les coordonnées d'un point (PT1). Je voudrais sélectionner le bloc qui est inséré sur ces coordonnées (enfin tester si c'est bien le bloc qui m'intéresse).

y a t il un moyen de faire un ssget en un point ou dois je sélectionner tous les blocs dont le nom est le bon et de tester si leur pts d'insertion est PT1 pour trier les autres?

 

les accrochages peuvent m'aider (OSMODE 64) ?

 

bref, je patauge dans le bassin des tout petits ...

 

merci

Lien vers le commentaire
Partager sur d’autres sites

Salut

 

ssget accepte un point comme argument : (ssget pt '((0 . "INSERT")))

 

Sinon, tu peux aussi voir du côté de nentselp qui accepte aussi un point comme argument, mais dans ce cas, bien étudier la liste retournée, le bloc inséré dans l'espace courant devrait correspondre au (last (last (nentselp pt))).

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

Lien vers le commentaire
Partager sur d’autres sites

Bonsoir x_all,

 

Attention avec ssget et les modes de sélection (point, fenêtre, capture), ces modes de sélection sont graphique dons si le point recherché n'est pas visible à l'écran cela va échoué, un autre cas d'école avec les blocs c'est si le point d'insertion n'est pas définie sur une entité graphique du bloc la sélection peu aussi échouer..

 

Si tu as un peu de temps je t'invite à jeter un œil sur cette discussion http://cadxp.com/topic/37447-rechercher-un-bloc/page__view__findpost__p__205935 ou je proposais une sélection par fitres de coordonnées avec ssget.

Ce qui revient à sélectionner tous les blocs et à comparer leurs points d'insertion comme tu l'avais initialement exprimé.

 

A+ et bon WE

Apprendre => Prendre => Rendre

Lien vers le commentaire
Partager sur d’autres sites

!o!

effectivement, ça revient au même, j'avais utiliser ça pour un autre programme et ça me prenait 20 lignes de code la ou 3 suffisent chez toi ...

il est long le chemin...

 

pour en revenir au cas qui me préoccupe, je veux sélectionner les points topo qui sont à chaque extrémité d'une polyligne, donc pour cette partie c'est ok.

Maintenant je bute sur la création d'une polyligne 3d créée à partir des points de la poly2d et suivant une pente régulière en fonction des 2 extrémités...

 

j'ai trouvé des exemples de codes en VBA, mais je voudrai le faire en autolisp car je maitrise pas assez le vb...

Pas évident de créer la liste pour le (entmake d'une poly3d... à moins de passer encore par (command avec une liste de points 3d..... je cherche

 

mais merci pour cet éclairage, je corrigerai peut être mon tir sur l'autre routine si je passe pas à autre chose après celle la...

Lien vers le commentaire
Partager sur d’autres sites

ha lala...

décidément je bute sur le but...

j'ai a peu près fini mes pérégrination, mais je cale sur la création de poly3d car je be connais pas à l'avance le nombre de point de ma poly3d.

je me retrouve avec une liste de points que je voudrais faire passer un par un pour créer une poly3d

par exemple

 (setq	lst-pt '((20.5472 4.74701 100.0)
		(20.3618 5.28143 93.6699)
		(20.1043 5.79738 87.2167)
		(19.7186 6.23934 80.6523)
		(19.2295 6.57499 74.0139)
	)
 )

je ne voie pas comment égrainer cette liste avec un (mapcar? mais je met quelle fonction dans le mapcar?

 

car pour créer ma poly, il va me falloir un truc du type

(command "_3dpoly" pt1 pt2 pt3 pt4 ...)

une idée?

 

j'ai essayè:

(vl-cmdf "POLY3D" (while (setq pt (car lst-pt)) (setq lst-pt (cdr lst-pt))))

 

mais ça ne marche pas et je comprends pas bien pourquoi...

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

j'ai essayè:

(vl-cmdf "POLY3D" (while (setq pt (car lst-pt)) (setq lst-pt (cdr lst-pt))))

 

mais ça ne marche pas et je comprends pas bien pourquoi...

Pour la correction:

(vl-cmdf "POLY3D")
(while lst-pt (vl-cmdf (setq pt (car lst-pt))) (setq lst-pt (cdr lst-pt)))
(vl-cmdf "")

 

Sinon comme évoqué récemment sur le forum, l'emploie d'une boucle foreach me semble plus évident sur ce type de traitement.

(vl-cmdf "_3dpoly")
(foreach p lst-pt (vl-cmdf p))
(vl-cmdf "")

 

A+

Apprendre => Prendre => Rendre

Lien vers le commentaire
Partager sur d’autres sites

je croyais que (vl-cmdf avait besoin de tous les arguments pour valider la commande hors, c'est appelé 3 fois pour une seule polyligne...

Non vl-cmf à besoin d'un argument valide, et tous comme command peut être appelée séquentiellement dans mon exemple (foreach/while), il est appelé pour chaque point.

 

Dans ton exemple si tu évalue ton expression while, tu obtiens nil en sortie

_$ (while (setq pt (car lst-pt)) (setq lst-pt (cdr lst-pt)))
nil

 

Ce qui revient après évaluation de l'expression la plus imbriqué à écrire..

_$ (vl-cmdf "POLY3D" nil)
nil

Expression qui ne peut évidemment pas être interprété par vl-cmdf

 

A+

Apprendre => Prendre => Rendre

Lien vers le commentaire
Partager sur d’autres sites

Sinon en complément à la remarque suivante:

Pas évident de créer la liste pour le (entmake d'une poly3d... à moins de passer encore par (command avec une liste de points 3d..... je cherche

Un code à minima (de (gile) il me semble) avec entmake pour la création de polylignes 3D (AcDb3dPolyline).

(defun makePl3d (pts)
 (entmake '((0 . "POLYLINE") (70 . 8)))
 (foreach p pts (entmake (list '(0 . "VERTEX") (cons 10 p) '(70 . 32))))
 (entmake '((0 . "SEQEND")))
)

(makePl3d lst-pt);Pour tester

 

Pour la culture général et comprendre les polylignes, sur ce forum je conseil la relecture de cette réponse de (gile).

http://cadxp.com/topic/38025-coordonnees-dune-polyligne/page__view__findpost__p__214361

 

A+

 

Nb:

Les points transmis à vl-cmd (command, command-s) -> SCU

Les points transmis à entmake -> SCG

(Au besoin utilise la fonction trans pour passer de l'un à l'autre)

Apprendre => Prendre => Rendre

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é