x_all Posté(e) le 1 août 2015 Posté(e) le 1 août 2015 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 quelques trucs sur autocad
(gile) Posté(e) le 1 août 2015 Posté(e) le 1 août 2015 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
x_all Posté(e) le 1 août 2015 Auteur Posté(e) le 1 août 2015 merci beaucoup... encore une fois ;) quelques trucs sur autocad
VDH-Bruno Posté(e) le 1 août 2015 Posté(e) le 1 août 2015 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
x_all Posté(e) le 1 août 2015 Auteur Posté(e) le 1 août 2015 !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... quelques trucs sur autocad
x_all Posté(e) le 2 août 2015 Auteur Posté(e) le 2 août 2015 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 poly3dpar 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... quelques trucs sur autocad
VDH-Bruno Posté(e) le 3 août 2015 Posté(e) le 3 août 2015 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
x_all Posté(e) le 3 août 2015 Auteur Posté(e) le 3 août 2015 je comprend pas bien pourquoi, mais effectivement ça marche impec..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... quoi qu'il en soit, tu me tires une fière chandelle du pied! merci quelques trucs sur autocad
VDH-Bruno Posté(e) le 3 août 2015 Posté(e) le 3 août 2015 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
VDH-Bruno Posté(e) le 3 août 2015 Posté(e) le 3 août 2015 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
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