Aller au contenu

Selectionner une extrémité d\'une ligne


Messages recommandés

Posté(e)

Bonjour,

Voici mon problème (je débute en lisp), j'ai une ligne et un point sur cette ligne, Je veux selectionner la ligne sur un côté et qu'elle m'enregistre l'extrémité de ce côté (et non l'autre). Ensuite, qu'elle me donne la distance de l'extrémité au point.

 

Dans mon lisp je bloque sur cette partie.

 

En vous remerciant par avance.

 

PS: quelqu'un connais un tuto sur le Visual lisp car il y a plus de fonction que le lisp mais je ne comprend pas encore les plus qu'ils apportent.

 

Posté(e)

salut,

 

en lisp tu peux chercher les coordonnées des deux points formant la ligne

avec le code dxf 10 et 11.

ex: (cdr (assoc 10 (entget la_ligne))) ou (cdr (assoc 11 (entget la_ligne)))

 

Ensuite pour demander un clic tu as (getpoint), ensuite tu peux tester si l'utilisateur a bien cliqué une des deux extrémités.

pour chercher le point, il faudra faire une sélection avec un ssget en te servant des coordonnées de la ligne, attention!!! il faut que ta ligne soit visible à l'écran pour que le ssget te renvoie bien tout se trouvant sur la ligne,

normalement tu as ton point et la ligne (plus d'autre chose si quelque chose passe ou se trouve sur ta ligne), là tu récupère les coordonnées du point avec le code dxf 10

et pour finir tu calcules la distance entre les deux points

Tous pour lisp, Lisp pour tous!

Avec Revit, cela ne vas trop vite...

Posté(e)

Ok, pas de souci en passant par le code 10 et 11 de la ligne, seulement je cherche que en 1 clic il m'enregistre la ligne ainsi que de l'extrémité la plus près du clic (donc soit 10 ou soit 11), je ne sais pas à l'avance si c'est le 10 ou le 11 qu'il me faut.

J'espère que je me fait comprendre.

 

Posté(e)

Je te donne une piste :

 

Utilise la fonction NENTSEL, elle te permet d'obtenir l'entité et le point cliqué (disons le point utilisé pour selectionner).

 

Ensuite, tu n'as plus qu'à comparer les distances avec la fonction du même nom ?

 

(setq ent(nentsel))

(setq pt(cadr ent))

(setq enti(car ent))

(distance pt(cdr(assoc 10(entget enti))))

(distance pt(cdr(assoc 11(entget enti))))

 

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Posté(e)

Pour compléter ce que donne Tramber,

 

On peut aussi utiliser entsel si la ligne n'est pas imbriquée dans un bloc (ou xref).

 

(setq ent (entsel))

(setq pt (cadr ent))

(setq ent (car ent))

 

pt est le point au centre du curseur (donc pas forcement exactement sur la ligne) exprimé en coordonnées SCU courant.

Les données DXF pour une ligne sont exprimées en coordonnées SCG pour que la fonction distance retourne la distance réelle quelque soit le SCU courant, il faut utiliser trans pour traduire soit le point cliqué soit les données DXF.

Si on veut avoir le point sur la ligne le plus proche du point cliqué (coordonnées SCU), on peut utiliser la fonction osnap avec l'accrochage "Proche" (_near" en langage international).

 

Exemple :

(setq pt (trans (osnap pt "_nea") 1 0)

 

et ensuite :

(distance pt (cdr (assoc 10 (entget ent ))))

 

 

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

Posté(e)

Je ne veux pas faire mon rabat-joie mais il faut choisir le bon forum.

Ici, normalement, on publie des routines toutes faites.

 

Alors ce qu'on ne sait pas très bien c'est si tu veux travailler et publier ou "débuter en lisp" et te faire aider...etc....

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)

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é