kclement Posté(e) le 30 octobre 2006 Posté(e) le 30 octobre 2006 Bonjour à tous, J'ai trouvé sur internet ce lisp plutôt sympa pour dessiner une flèche en polyligne : ;; dessine une flèche : les valeurs DIMSCALE et DIMASZ peuvent être changées pour modifier l'aspect ;;(defun c:ARROW ( / SP ANGP ARRANG LENG EP) (setq SP (getpoint "\n Starting point for arrow")) (setq ANGP (getpoint SP "\n Select arrow angle")) (setq ARRANG (angle sp angp)) (if (= 0.0 (getvar "DIMASZ")) (setq LENG 1.0)(setq LENG (getvar "DIMASZ"))) (setq EP (polar sp arrang (* LENG (getvar "DIMSCALE")))) (command "_PLINE" sp "_W" "0.0" (* 0.5 LENG (getvar"DIMSCALE")) EP "_W" "0.0" "0.0" "ARC")) Mon souci est qu'il utilise les valeurs DIMSCALE et DIMASZ qui définissent les proportions de la flèche, mais j'aimerais qu'à la place on ait des invites qui demandent la taille de la flèche et ses proportions (rapport hauteur/largeur). Voilà, j'espère que ce sujet vous intéressera !
(gile) Posté(e) le 30 octobre 2006 Posté(e) le 30 octobre 2006 Quelque chose comme ça ? (defun c:ARROW (/ SP ANGP ARRANG LENG EP) (setq LENG (getdist "\nLongueur de la pointe: ")) (setq RAP (getreal "\nRapport hauteur\\largeur de la pointe: ")) (setq SP (getpoint "\nPoint de départ de la flèche: ")) (setq ANGP (getpoint SP "\nAngle de la flèche")) (setq ARRANG (angle sp angp)) (setq EP (polar sp arrang LENG)) (command "_.PLINE" sp "_W" "0.0" (* LENG RAP) EP "_W" "0.0" "0.0" "_ARC" ) ) [Edité le 30/10/2006 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
kclement Posté(e) le 30 octobre 2006 Auteur Posté(e) le 30 octobre 2006 WOW ! Merci ! :) C'est tout à fait ça ! J'ai juste été surprise par le rapport hauteur/largeur qui me parait à l'envers. Il y aurait un moyen d'arranger ça (sans vouloir trop en demander bien sûr !!!)? Encore merci en tous cas !
(gile) Posté(e) le 30 octobre 2006 Posté(e) le 30 octobre 2006 Il y aurait un moyen d'arranger ça C'est fait, j'ai modifié le code ci-dessus. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
yalta Posté(e) le 31 octobre 2006 Posté(e) le 31 octobre 2006 Bonjour...........et merci ;) Gile pour ce lisp, voilà une flèche de repère qui me sera bien utile.Parcontre serait-ce possible d'avoir la même chose c'est à dire tjs la flèche mais, ensuite, avec une polyligne plutôt qu'un arc et lui donner par défaut une épaisseur de 0.13mm...?? :exclam: :exclam: STP.Merci d'avance,Sylvain
esbe Posté(e) le 31 octobre 2006 Posté(e) le 31 octobre 2006 Bonjour a tous Un grand merci pour ce lisp Tres, tres pratique mais je vote aussi pour une polyligne mais sans epaisseur si possible !! ;) On dirait une lettre au Père Noël bonne journée
Pieroka Posté(e) le 31 octobre 2006 Posté(e) le 31 octobre 2006 salut,ce qui serait bien, ça serait que les dernières valeurs entrées soient par défaut , comme dans l'outil "décaler" par exemple, qu'on ai juste à faire "entrée" pour valider la longueur de la flèche précédente et le rapport...etc Formateur Autocad - Revit - Sketchup - Photoshop
(gile) Posté(e) le 31 octobre 2006 Posté(e) le 31 octobre 2006 Bonsoir, J'ai essayé de faire une réponse polyvalente avec une fonction plus aboutie. Les dimensions proposées par défaut pour la pointe de la flèche sont celles des flèches des cotes courantes (type Fermée pleine). Les valeurs utilisées (longueur de la pointe et rapport hauteur/largeur) seront reproposées au prochain lancement de la commande dans le dessin. Après le dessin de la pointe, l'utilisateur reprend la main, et peut dessiner des segments droits ou en arc. Le repérage polaire par rapport au dernier segment est activé pour faciliter le dessin d'un segment dans le prolongement de la pointe. Nouvelle version (defun c:ARROW (/ asn pol arrow_err leng ratio start ang) (defun arrow_err (msg) (if (= msg "Fonction annulée") (princ) (princ (strcat "\nErreur: " msg)) ) (command) (setvar "AUTOSNAP" asn) (setvar "POLARMODE" pol) (setq *error* m:err m:err nil ) (princ) ) (setq asn (getvar "AUTOSNAP") pol (getvar "POLARMODE") m:err *error* *error* arrow_err ) (if (not *arrow-length*) (setq *arrow-length* (if (= 0 (getvar "DIMASZ")) (if (= 0 (getvar "DIMSCALE")) 1.0 (getvar "DIMSCALE") ) (if (= 0 (getvar "DIMSCALE")) (getvar "DIMASZ") (* (getvar "DIMSCALE") (getvar "DIMASZ")) ) ) ) ) (if (not *arrow-ratio*) (setq *arrow-ratio* (/ 1.0 3)) ) (if (not (setq leng (getdist (strcat "\nLongueur de la pointe (rtos *arrow-length*) ">: " ) ) ) ) (setq leng *arrow-length*) (setq *arrow-length* leng) ) (if (not (setq ratio (getreal (strcat "\nRapport hauteur/largeur de la pointe (rtos *arrow-ratio*) ">: " ) ) ) ) (setq ratio *arrow-ratio*) (setq *arrow-ratio* ratio) ) (initget 1) (setq start (getpoint "\nPoint de départ de la flèche: ")) (initget 1) (setq ang (getorient start "\nAngle de la flèche")) (command "_.pline" start "_W" 0.0 (* leng ratio) (polar start ang leng) "_W" 0.0 0.0 ) (if (= 0 (getvar "ORTHOMODE")) (progn (setvar "POLARMODE" (+ pol (boole 2 1 pol))) (setvar "AUTOSNAP" (+ asn (boole 2 24 asn))) ) ) (while (not (zerop (getvar "CMDACTIVE"))) (command pause) ) (setvar "AUTOSNAP" asn) (setvar "POLARMODE" pol) (setq *error* m:err m:err nil ) (princ) ) Pour Yalta,Si tu veux donner une largeur de polyligne de 0.13 au(x) segment(s), remplace : (command "_.PLINE" start "_W" 0.0 (* leng ratio) (polar start ang leng) "_W" [surligneur]0.0 0.0[/surligneur] ) par : (command "_.PLINE" start "_W" 0.0 (* leng ratio) (polar start ang leng) "_W" [surligneur]0.13 0.13[/surligneur] )[Edité le 31/10/2006 par (gile)] [Edité le 1/11/2006 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
yalta Posté(e) le 2 novembre 2006 Posté(e) le 2 novembre 2006 ...nous n'avons plus aucune raison d'en douter Esbe, le Père Noël existe bien........... ;) Tout simplement un grand merci à toi Gile :) :D ;)
kclement Posté(e) le 7 novembre 2006 Auteur Posté(e) le 7 novembre 2006 Là, j'avoue, je reste bouche-bée ! :o Merci encore !!!
(gile) Posté(e) le 8 novembre 2006 Posté(e) le 8 novembre 2006 Une petite modification/amélioration. Plutôt que de valider les valeurs par défaut à chaque lancement, entrer "L" ou "R" pour modifier ces valeurs (Longueur et Ratio) avant de spécifier le premier point. (defun c:ARROW (/ arrow_err asn pol leng ratio start ang) (defun arrow_err (msg) (if (= msg "Fonction annulée") (princ) (princ (strcat "\nErreur: " msg)) ) (command) (setvar "AUTOSNAP" asn) (setvar "POLARMODE" pol) (setq *error* m:err m:err nil ) (princ) ) (setq asn (getvar "AUTOSNAP") pol (getvar "POLARMODE") m:err *error* *error* arrow_err ) (if (not *arrow-length*) (setq *arrow-length* (if (= 0 (getvar "DIMASZ")) (if (= 0 (getvar "DIMSCALE")) 1.0 (getvar "DIMSCALE") ) (if (= 0 (getvar "DIMSCALE")) (getvar "DIMASZ") (* (getvar "DIMSCALE") (getvar "DIMASZ")) ) ) ) ) (if (not *arrow-ratio*) (setq *arrow-ratio* (/ 1.0 3)) ) (prompt (strcat "\nParamètres courants pour la pointe.\tLongueur: " (rtos *arrow-length*) "\tRatio: " (rtos *arrow-ratio*) ) ) (while (not (vl-consp start)) (initget 1 "Longueur Ratio") (setq start (getpoint "\nPoint de départ de la flèche ou [Longueur/Ratio]: " ) ) (cond ((= start "Longueur") (if (setq leng (getdist (strcat "\nLongueur de la pointe (rtos *arrow-length*) ">: " ) ) ) (setq *arrow-length* leng) ) ) ((= start "Ratio") (if (setq ratio (getreal (strcat "\nRapport hauteur/largeur de la pointe (rtos *arrow-ratio*) ">: " ) ) ) (setq *arrow-ratio* ratio) ) ) ) ) (setq leng *arrow-length* ratio *arrow-ratio* ) (initget 1) (setq ang (getorient start "\nAngle de la flèche")) (command "_.pline" start "_W" 0.0 (* leng ratio) (polar start ang leng) "_W" 0.0 0.0 ) (if (= 0 (getvar "ORTHOMODE")) (progn (setvar "POLARMODE" (+ pol (boole 2 1 pol))) (setvar "AUTOSNAP" (+ asn (boole 2 24 asn))) ) ) (while (not (zerop (getvar "CMDACTIVE"))) (command pause) ) (setvar "AUTOSNAP" asn) (setvar "POLARMODE" pol) (setq *error* m:err m:err nil ) (princ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Patrick_35 Posté(e) le 8 novembre 2006 Posté(e) le 8 novembre 2006 Avec une sauvegarde de ces valeurs dans le dessin afin déviter le des rechercher ? @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
(gile) Posté(e) le 8 novembre 2006 Posté(e) le 8 novembre 2006 Avec une sauvegarde de ces valeurs dans le dessin afin déviter le des rechercher ? Oui, les valeurs sont sauvegardées dans me dessin pour la session dans des variables globales.Tu pensais peut-être à des Xdata pour ne pas limiter à la session ? Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Patrick_35 Posté(e) le 8 novembre 2006 Posté(e) le 8 novembre 2006 Non, simplement à des vlax-ldata @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
(gile) Posté(e) le 8 novembre 2006 Posté(e) le 8 novembre 2006 C'est une bonne idée, je n'ai pas encore le réflexe. Je vais y réfléchir... Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
(gile) Posté(e) le 8 novembre 2006 Posté(e) le 8 novembre 2006 Voilà, les données sont conservées dans le dessin au delà de la session. Il suffisait de remplacer :- les (not *arrow-length*) par (not (vlax-ldata-get "arrow" "length"))- les (rtos *arrow-length*) par (rtos (vlax-ldata-get "arrow" "length"))et les (setq *arrow-length* ...) par (vlax-ldata-put "arrow" "length" ...)de même pour *arrow_ratio* ... (defun c:ARROW (/ arrow_err asn pol leng ratio start ang) (vl-load-com) (defun arrow_err (msg) (if (= msg "Fonction annulée") (princ) (princ (strcat "\nErreur: " msg)) ) (command) (setvar "AUTOSNAP" asn) (setvar "POLARMODE" pol) (setq *error* m:err m:err nil ) (princ) ) (setq asn (getvar "AUTOSNAP") pol (getvar "POLARMODE") m:err *error* *error* arrow_err ) (if (not (vlax-ldata-get "arrow" "length")) (vlax-ldata-put "arrow" "length" (if (= 0 (getvar "DIMASZ")) (if (= 0 (getvar "DIMSCALE")) 1.0 (getvar "DIMSCALE") ) (if (= 0 (getvar "DIMSCALE")) (getvar "DIMASZ") (* (getvar "DIMSCALE") (getvar "DIMASZ")) ) ) ) ) (if (not (vlax-ldata-get "arrow" "ratio")) (vlax-ldata-put "arrow" "ratio" (/ 1.0 3)) ) (prompt (strcat "\nParamètres courants pour la pointe.\tLongueur: " (rtos (vlax-ldata-get "arrow" "length")) "\tRatio: " (rtos (vlax-ldata-get "arrow" "ratio")) ) ) (while (not (vl-consp start)) (initget 1 "Longueur Ratio") (setq start (getpoint "\nPoint de départ de la flèche ou [Longueur/Ratio]: " ) ) (cond ((= start "Longueur") (if (setq leng (getdist (strcat "\nLongueur de la pointe (rtos (vlax-ldata-get "arrow" "length")) ">: " ) ) ) (vlax-ldata-put "arrow" "length" leng) ) ) ((= start "Ratio") (if (setq ratio (getreal (strcat "\nRapport hauteur/largeur de la pointe (rtos (vlax-ldata-get "arrow" "ratio")) ">: " ) ) ) (vlax-ldata-put "arrow" "ratio" ratio) ) ) ) ) (setq leng (vlax-ldata-get "arrow" "length") ratio (vlax-ldata-get "arrow" "ratio") ) (initget 1) (setq ang (getorient start "\nAngle de la flèche")) (command "_.pline" start "_W" 0.0 (* leng ratio) (polar start ang leng) "_W" 0.0 0.0 ) (if (= 0 (getvar "ORTHOMODE")) (progn (setvar "POLARMODE" (+ pol (boole 2 1 pol))) (setvar "AUTOSNAP" (+ asn (boole 2 24 asn))) ) ) (while (not (zerop (getvar "CMDACTIVE"))) (command pause) ) (setvar "AUTOSNAP" asn) (setvar "POLARMODE" pol) (setq *error* m:err m:err nil ) (princ) ) [Edité le 8/11/2006 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
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