Neophyte Posté(e) le 28 mai 2016 Posté(e) le 28 mai 2016 Bonjour, je suis à la recherche d'un lisp me permettant de dessiner des flèches temporaires indiquant le sens de la polyligneSi quelqu'un peut m'aider.Merci.
lecrabe Posté(e) le 28 mai 2016 Posté(e) le 28 mai 2016 Hello Voir ci-dessous ... A mon avis, pas besoin de Lisp/VLisp, j'utilise un type de ligne special et eventuellement apres je re-parametre le type de ligne original !? Bon WE, Bye, lecrabe ------ Comment voir le sens de numerisation des Polylignes ------ Tu peux par exemple utiliser un type de ligne specifique ... ou un programme Lisp/Vlisp ... Solution (Olivier + Patrice) empruntee sur le site georezo.net http://georezo.net/forum/viewtopic.php?id=75178 ;; Exemple de Patrice sur Georezo.net avec Style ISOCP utilisant ISOCP.shx (Hauteur=ZERO : IMPERATIF) *SENS_ISOCP, SENS_ISOCP --->--->--->--- A,5,[">",ISOCP,S=2,X=0,Y=-0.700],5 Ainsi avec ce type de ligne "SENS_ISOCP", tu VOIS le sens de tes Polylignes ! Autodesk Expert Elite Team
Neophyte Posté(e) le 28 mai 2016 Auteur Posté(e) le 28 mai 2016 Je cherche plutôt un lisp qui en dessine plusieurs le long de la polyligne
Steven Posté(e) le 28 mai 2016 Posté(e) le 28 mai 2016 Je cherche plutôt un lisp qui en dessine plusieurs le long de la polyligne Salut, Il y a cette solution qu pourrait te convenir.Elle consiste à te créer un type de ligne dans ton fichier a.cad.lin ou acadiso.lin Steven________________________________________ Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD. Pour le perso Linux Mint et pas de problèmes. Mais pas d'AutoCAD. En rêve; AutoCAD sous Linux.
Neophyte Posté(e) le 28 mai 2016 Auteur Posté(e) le 28 mai 2016 Merci mais je cherche uniquement une solution lisp
didier Posté(e) le 28 mai 2016 Posté(e) le 28 mai 2016 Coucou je te propose ça : (defun c:senspoly (/ ent n pt pt0 pt1 ang dis) (vl-load-com) (setq dis (/ (getvar "viewsize") 20)) (if (and (setq ent (car (entsel))) (= "LWPOLYLINE" (cdr (assoc 0 (entget ent)))) ) (repeat (setq n (fix (vlax-curve-getEndParam ent))) (setq pt (trans (vlax-curve-getPointAtParam ent (- n 0.5)) 0 1) pt0 (trans (vlax-curve-getPointAtParam ent n) 0 1) pt1 (trans (vlax-curve-getPointAtParam ent (1- n)) 0 1) ang (angle pt0 pt1) n (1- n) ) (grvecs (list 1 pt (polar pt (- ang (/ pi 6)) dis) 1 pt (polar pt (+ ang (/ pi 6)) dis))))) (princ) ) Amicalement Éternel débutant… Mon site perso : Programmer dans AutoCAD
Steven Posté(e) le 28 mai 2016 Posté(e) le 28 mai 2016 Salut Didier, Nickel !Je me le garde sous le coude ;) Steven________________________________________ Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD. Pour le perso Linux Mint et pas de problèmes. Mais pas d'AutoCAD. En rêve; AutoCAD sous Linux.
(gile) Posté(e) le 28 mai 2016 Posté(e) le 28 mai 2016 Oups...Je pensais avoir posté ma proposition juste après celle de Patrice 'le crabe'.J'ai dû faire une fausse manip avant se sortir... La 'commande LISP' SENS dessine ne flèche temporaire sur l'entité curviligne (tous types) au point cliqué. La flèche indique le sens de la courbe et s'efface au prochain zoom, panoramique, redess ou regen. (defun c:SENS (/ isCurve drawArrow sel ent) (vl-load-com) ;; Evalue si l'entité est une courbe (defun isCurve (ent / elst) (setq elst (entget ent)) (or (member (cdr (assoc 0 elst)) '("ARC" "CIRCLE" "ELLIPSE" "LWPOLYLINE" "SPLINE" "RAY" "XLINE") ) (and (= (cdr (assoc 0 elst)) "POLYLINE") (zerop (logand 112 (cdr (assoc 70 elst)))) ) ) ) ;; dessine une flèche temporaire (defun drawArrow (pt dir / size) (setq size (/ (getvar 'viewsize) 20.0) ; <- taille de la flèche ang (angle '(0. 0. 0.) (trans dir 0 1 T)) ) (grvecs (list 30 ; <- index de la couleur pt (polar pt (+ ang (* pi 0.85)) size) 30 ; <- index de la couleur pt (polar pt (+ ang (* pi 1.15)) size) ) ) ) (and (setq sel (entsel "\nSélectionnez une entité curviligne: ")) (setq ent (car sel)) (isCurve ent) (setq pt (vlax-curve-getClosestPointTo ent (trans (cadr sel) 1 0))) (drawArrow (trans pt 0 1) (vlax-curve-getFirstDeriv ent (vlax-curve-getParamAtPoint ent pt)) ) ) (princ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Neophyte Posté(e) le 29 mai 2016 Auteur Posté(e) le 29 mai 2016 Merci mais les solutions que vous me proposez ne dessine qu'une seule flèche or la fonction que je souhaite doit en dessiner plusieurs
lecrabe Posté(e) le 29 mai 2016 Posté(e) le 29 mai 2016 Hello SVP tu veux quoi exactement ? Une fleche "virtuelle" comme propose par Gilles et Didier sur :- TOUS les objets curvilignes visibles a l'ecran a un instant T - TOUS les objets curvilignes visibles a l'ecran a un instant T MAIS en plus avec une selection a l'ecran pour ne traiter que CES objets ! OU comme le suggère Didier :Une flèche physique sur les objets curvilignes de la sélection ?? Merci, Bon Dimanche, Bye, lecrabe Autodesk Expert Elite Team
didier Posté(e) le 29 mai 2016 Posté(e) le 29 mai 2016 CoucouExigeant avec ça ! :)Est-ce que c'est le cas aussi avec la solution proposée en réponse #6 ?Ce sont des "flèches" dessinées en vecteurs dont la taille dépend de la hauteur de zoom,Elles n'existent pas en tant qu'entités dans le dessinToi tu voudrais des flèches en tant qu'entités graphiques, c'est ça ?Parce que sur CadXP il nous faut comprendre ce que veulent les gens, on est vachement gentils tut de même ! :rolleyes:Je te rassure c'est possible mais ça se complique si tu veux que ce soit réactif avec une éventuelle inversion de la polyligne.À mon tour de te questionner :Comment connaître à l'avance la taille des flèches à dessiner ? Amicalement Éternel débutant… Mon site perso : Programmer dans AutoCAD
(gile) Posté(e) le 29 mai 2016 Posté(e) le 29 mai 2016 Je plussoie. Demande originale :je suis à la recherche d'un lisp me permettant de dessiner des flèches temporaires indiquant le sens de la polyligneLe LISP que didier a proposé dessine une flèche au milieu de chaque segment de la polyligne sélectionnée.Celui que j'ai proposé dessine une flèche sur le point cliqué lors de la sélection de la courbe.Dans les deux cas, les flèches sont bien "temporaires" et de taille proportionnelle au zoom courant. La demande de "flèche temporaire" laissait supposer que le LISP devait juste servir à une évaluation instantanée et temporaire du sens de la polyligne.J'ai donc du mal à voir en quoi ces LISP ne répondent pas à la demande initiale, à part, peut-être, pour le LISP que j'ai proposé qui ne dessine qu'une seule flèche, mais cette flèche sera toujours instantanément visible puisqu'elle s'affiche sur le point cliqué à l'écran. Si c'est "temporaire" qui n'a pas bien été compris (pour ne pas dire mal exprimé), la solution proposée par lecrabe ou celle, équivalente, de Steven/Olivier Eckmann est très probablement la piste à suivre (simple et sans LISP). Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Neophyte Posté(e) le 29 mai 2016 Auteur Posté(e) le 29 mai 2016 En fait, dans mon programme on vient sélectionner un axe et on insère des blocs à partir de son origine selon un intervalle sauf que parfois le bloc doit s'insérer à l'autre extrémité d'où la nécessité d'inverser le sens de la polyligne, c'est pour ça que j'ai besoin de connaitre son sens.Le problème d'avoir qu'une seule flèche c'est qu'on a tendance à zoomer sur l'axe pour le sélectionner (et ne pas cliquer sur un autre objet autocad) et du coup on ne voit plus la flèche d'où la nécessité d'avoir un lisp qui trace plusieurs flèches
(gile) Posté(e) le 29 mai 2016 Posté(e) le 29 mai 2016 Le problème d'avoir qu'une seule flèche c'est qu'on a tendance à zoomer sur l'axe pour le sélectionner (et ne pas cliquer sur un autre objet autocad) et du coup on ne voit plus la flèche d'où la nécessité d'avoir un lisp qui trace plusieurs flèchesAs-tu essayé le LISP que je propose ?Tu peux zoomer/dé-zoomer tant que tu veux avant de sélectionner la polyligne, tu verras toujours une flèche de même taille par rapport à la fenêtre apparaitre sur le point cliqué lors de la sélection. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
didier Posté(e) le 29 mai 2016 Posté(e) le 29 mai 2016 Coucou (gile) : j'adooooooore plussoyer en réponse #12Pour Néophyte : je lâche l'affaire car je ne comprends plus. Amicalement Éternel débutant… Mon site perso : Programmer dans AutoCAD
lecrabe Posté(e) le 29 mai 2016 Posté(e) le 29 mai 2016 Hello Gilles Tu es "le meilleur" ! J'abandonne comme Didier !!Les Vieux se fatiguent vite... Bonne soirée, Bye, lecrabe Autodesk Expert Elite Team
(gile) Posté(e) le 29 mai 2016 Posté(e) le 29 mai 2016 Hello Gilles Tu es "le meilleur" ! J'abandonne comme Didier !!Les Vieux se fatiguent vite... Bonne soirée, Bye, lecrabe Non je ne suis pas "le meilleur". Le LISP qu'a proposé didier est très proche de celui que j'ai proposé, c'est très probablement parce que la programmation ne supporte pas l'équivoque et qu'écrire une routine commence par analyser scrupuleusement l'objectif et les données initiales (ici le message du demandeurs).Ce qui est lassant, c'est que souvent la réponse correspond à la demande telle que formulée mais ne convient pas au demandeur parce que sa demande est imprécise ou incomplète. PS : je ne pense pas être beaucoup plus jeune que vous ;) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
didier Posté(e) le 30 mai 2016 Posté(e) le 30 mai 2016 Coucou À Néophyte en explication de la réponse #13 : Comme quoi je ne lâche pas si facilement même si de temps en temps j'en ai l'envie. Je te cite : dans mon programme...Puisque tu as un code en cours de travail, du moins c'est ce que je comprends, fais-le partager s'il te plaît, et peut-être qu'avec quelques explications sur son fonctionnement on pourra t'aider à te fabriquer la brique qui manque. Amicalement Éternel débutant… Mon site perso : Programmer dans AutoCAD
lecrabe Posté(e) le 30 mai 2016 Posté(e) le 30 mai 2016 Hello DidierOOPS SORRY, j'ai oublie de t'inclure dans le Gang des "Vieux Meilleurs" avec Gilles !? J'espere que tu ne m'en veux pas trop ??Bonne Semaine, Bye, lecrabe Autodesk Expert Elite Team
didier Posté(e) le 30 mai 2016 Posté(e) le 30 mai 2016 Coucou Je te salue ô Toi qui va finir en surimi !Sache que je ne suis offensé en aucune manière,Mon psychiatre ayant renoncé à traiter ma mégalomanie je fais souvent des rechutesEt je sais que je rapport âge/qualité est en ma faveur.Les autres (j'ai sept milliards de voisins)ne savent pas à quel point je suis fort, intelligent et gentil, et un peu con aussiet ils m'obligent à crier par dessus les toits que je n'aime pas les gens (et ils me le rendent bien)Tout ça pour dire qu'il va vraiment falloir que je reprenne contact avec les médecins des boyaux de la tête ! Amicalement Éternel débutant… Mon site perso : Programmer dans AutoCAD
dilack Posté(e) le 3 juin 2016 Posté(e) le 3 juin 2016 salut à tous,Je viens d'essayer la routine de didier et j'ai une erreur sur la version 2017: erreur: no function definition: VLAX-CURVE-GETENDPARAM Et comme mes connaissance en lisp sont plus que limitées... Coucou je te propose ça : (defun c:senspoly (/ ent n pt pt0 pt1 ang dis) (vl-load-com) (setq dis (/ (getvar "viewsize") 20)) (if (and (setq ent (car (entsel))) (= "LWPOLYLINE" (cdr (assoc 0 (entget ent)))) ) (repeat (setq n (fix (vlax-curve-getEndParam ent))) (setq pt (trans (vlax-curve-getPointAtParam ent (- n 0.5)) 0 1) pt0 (trans (vlax-curve-getPointAtParam ent n) 0 1) pt1 (trans (vlax-curve-getPointAtParam ent (1- n)) 0 1) ang (angle pt0 pt1) n (1- n) ) (grvecs (list 1 pt (polar pt (- ang (/ pi 6)) dis) 1 pt (polar pt (+ ang (/ pi 6)) dis))))) (princ) ) Amicalement
Steven Posté(e) le 3 juin 2016 Posté(e) le 3 juin 2016 salut, Es-tu sûr d'avoir bien recopier tout le code et qu'il ne manque pas un caractère?Parce que lisp fonctionne correctement sur AutoCAD 2017. Steven________________________________________ Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD. Pour le perso Linux Mint et pas de problèmes. Mais pas d'AutoCAD. En rêve; AutoCAD sous Linux.
dilack Posté(e) le 3 juin 2016 Posté(e) le 3 juin 2016 re salut@ Steven: je te dirais que oui, a moins que le ctrl+C et ctrl+v m'est rajouter un espace ou il fallait pas!
didier Posté(e) le 3 juin 2016 Posté(e) le 3 juin 2016 Coucou D'abord c'est UNE espace et pas UN espace mais c'est un détail de langue française Pour ce qui est de la langue LISP je ne sais que dire n'ayant pas cette version et n'ayant donc pas testé je suis dans l'impossibilité de me prononcer.Toutefois, si Steven dit que ça fonctionne, je le croisTu as bien copié le : (vl-load-com) ? Amicalement Éternel débutant… Mon site perso : Programmer dans AutoCAD
dilack Posté(e) le 3 juin 2016 Posté(e) le 3 juin 2016 salut didier... humour on voila ce que j'ai a moins d’être aveugle j'ai bien copier ton lisp... :) Ah bah si tu commences à corriger mes fautes d'orthographe tu n'as pas fini... :) humour off (defun c:senspoly (/ ent n pt pt0 pt1 ang dis) (vl-load-com) (setq dis (/ (getvar "viewsize") 20)) (if (and (setq ent (car (entsel))) (= "LWPOLYLINE" (cdr (assoc 0 (entget ent)))) ) (repeat (setq n (fix (vlax-curve-getEndParam ent))) (setq pt (trans (vlax-curve-getPointAtParam ent (- n 0.5)) 0 1) pt0 (trans (vlax-curve-getPointAtParam ent n) 0 1) pt1 (trans (vlax-curve-getPointAtParam ent (1- n)) 0 1) ang (angle pt0 pt1) n (1- n) ) (grvecs (list 1 pt (polar pt (- ang (/ pi 6)) dis) 1 pt (polar pt (+ ang (/ pi 6)) dis))))) (princ) )
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