loloz78 Posté(e) le 28 août 2008 Posté(e) le 28 août 2008 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.
bseb67 Posté(e) le 28 août 2008 Posté(e) le 28 août 2008 salut, en lisp tu peux chercher les coordonnées des deux points formant la ligneavec 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...
loloz78 Posté(e) le 28 août 2008 Auteur Posté(e) le 28 août 2008 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.
Tramber Posté(e) le 28 août 2008 Posté(e) le 28 août 2008 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 ./__\. (.°=°.)
(gile) Posté(e) le 28 août 2008 Posté(e) le 28 août 2008 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
loloz78 Posté(e) le 29 août 2008 Auteur Posté(e) le 29 août 2008 Merci de vos réponses,je vais les tester et je vous tiens au courant.
Tramber Posté(e) le 29 août 2008 Posté(e) le 29 août 2008 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 ./__\. (.°=°.)
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