G2.toff Posté(e) le 9 mars 2016 Posté(e) le 9 mars 2016 Bonjour, J'ai un ami qui recherche une solution pour "déformer" une polyligne sur autocad, j'ai pensais a un lisp par exemple. Je joins une image vite fait d'un résultat souhaité (si j'ai tout compris a son explication). Il part d'une polyligne lisse (ou contour) et redessine manuellement une polyligne complétement aléatoirement afin de matérialiser par exemple une limite végétale ou un contour de zone végétalisée. aujourd'hui il fait apparaitre sa limite brute (courbe ou droite) et redessines plus ou moins par dessus une polyligne ou un contour en réalisant une multitude de clic pour pointer de nouveaux sommets.....sacrément pénible je pense. Pensez vous qu'il soit possible de créer un lisp qui intégrerait une amplitude de déformation (hauteur des pointes) et une discrétisation (longueur de segmentation), le tout aléatoirement afin d'obtenir une polyligne ou contour complétement déformés comme sur l'exemple (en blanc). Cordialement.Toff.
bonuscad Posté(e) le 9 mars 2016 Posté(e) le 9 mars 2016 Bonjour, Un truc à ma disposition (qui n'est pas de moi), qui se rapproche de ton souhait.Ca peut être une base de départ... ; GRASS.LSP ; Realistic Grass for Elevations ; (c)1994, Watson Kilbourne ; Draws row of grass with random height, ; spacing and angle in elevation ; Random number generator, from 0.000 to 0.999 (defun rn ( / md mx nc) (if (not sd) (setq sd (getvar "DATE"))) (setq md 65536 mx 25173 nc 13849 sd (rem (+ (* mx sd) nc) md) ) (/ sd md) ) (defun c:GRASS ( / sp ep gh dn dx an p1 p2 p3 p4 p5 sd) (initget 9) (setq sp (trans (getpoint "\nPoint de départ de l'herbe: ") 1 0)) (initget 41) (setq ep (trans (getpoint (trans sp 0 1) "\nPoint final de l'herbe: ") 1 0)) (initget 6) (setq gh (getdist "\nHauteur approximative de l'herbe <2.5>: ")) (if (not gh) (setq gh 2.5)) (initget 6) (setq dn (getint "\nFacteur de densité de 1à 6 <3>: ")) (if (or (not dn) (> dn 6)) (setq dn 3)) (setq dx (distance sp ep) an (angle sp ep) p1 sp p2 sp ) (while (< (distance p2 sp) dx) (setq p2 (polar p1 an (/ (+ (rn) (/ gh 2)) dn)) p3 (polar p2 (* pi 0.5) (* gh (rn))) p4 (polar p3 (* pi 0.6) (* gh (rn))) p5 (polar p4 (* pi 0.4) (* gh (rn))) ) (entmake (append '((0 . "LINE")) (list (cons 8 (getvar "clayer"))) (list (cons 10 p3) (cons 11 p5)))) (setq p1 p2) ) (princ) ) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
x_all Posté(e) le 9 mars 2016 Posté(e) le 9 mars 2016 je ne suis pas sur qu'il y a une fonction "random" en autolisp... je serai curieux de savoir tien... edit ha ben tien !) quelques trucs sur autocad
Tramber Posté(e) le 9 mars 2016 Posté(e) le 9 mars 2016 L'image ne déforme pas une polyligne mais une ligne.Donc y a -t-il un électrocardiogramme par segment ou tout du long ?Déjà la question que je me pose....je ne suis pas sur qu'il y a une fonction "random" en autolisp...je serai curieux de savoir tien...A ma connaissance, seulement par le tampon du temps :P Par une fonction de date à l'instant t. C'est le seul moyen. Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
DenisHen Posté(e) le 9 mars 2016 Posté(e) le 9 mars 2016 Salut à tous, Il y a quelques années, un aimable membre de CadXP m'avait écrit ce petit truc :(defun c:tirage (/ modulus multiplier increment random) (princ "\nTirage :") (if (not seed) (setq seed (getvar "DATE")) ) ;_ Fin:if (setq nombre (setq modulus 65536 multiplier 25173 increment 13849 seed (rem (+ (* multiplier seed) increment) modulus) random (/ seed modulus) ) ;_ Fin:setq ) ;_ Fin:setq (setq numero_sorti (fix (* 250 nombre))) )Mais comme le dit Tramber, c'est issu de la date. Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
bonuscad Posté(e) le 9 mars 2016 Posté(e) le 9 mars 2016 Ce qui donnerait en faisant une modification rapide (sans ENTMAKE) pour faire une polyligne. (defun rn ( / md mx nc) (if (not sd) (setq sd (getvar "DATE"))) (setq md 65536 mx 25173 nc 13849 sd (rem (+ (* mx sd) nc) md) ) (/ sd md) ) (defun c:GRASS ( / sp ep gh dn dx an p1 p2 p3 p4 p5 sd) (initget 9) (setq sp (trans (getpoint "\nPoint de départ de l'herbe: ") 1 0)) (initget 41) (setq ep (trans (getpoint (trans sp 0 1) "\nPoint final de l'herbe: ") 1 0)) (initget 6) (setq gh (getdist "\nHauteur approximative de l'herbe <2.5>: ")) (if (not gh) (setq gh 2.5)) (initget 6) (setq dn (getint "\nFacteur de densité de 1à 6 <3>: ")) (if (or (not dn) (> dn 6)) (setq dn 3)) (setq dx (distance sp ep) an (angle sp ep) p1 sp p2 sp ) (setvar "CMDECHO" 0) (command "_.pline" "_none" (trans sp 0 1)) (while (< (distance p2 sp) dx) (setq p2 (polar p1 an (/ (+ (rn) (/ gh 2)) dn)) p3 (polar p2 (* pi 0.5) (* gh (rn))) p4 (polar p3 (* pi 0.6) (* gh (rn))) p5 (polar p4 (* pi 0.4) (* gh (rn))) ) ;(entmake (append '((0 . "LINE")) (list (cons 8 (getvar "clayer"))) (list (cons 10 p3) (cons 11 p5)))) (command "_none" (trans p3 0 1)) (setq p1 p2) ) (command "_none" (trans ep 0 1) "") (setvar "CMDECHO" 1) (princ) ) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Tramber Posté(e) le 9 mars 2016 Posté(e) le 9 mars 2016 Il part d'une polyligne lisse Mea culpa, c'est peut-être la réponse à ma question. Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
Olivier Eckmann Posté(e) le 9 mars 2016 Posté(e) le 9 mars 2016 Bonjour, <Humour ON>La fonction MAINLEV après 2 ou 3 whisky devrait faire l'affaire<Humour OFF> Olivier
G2.toff Posté(e) le 9 mars 2016 Auteur Posté(e) le 9 mars 2016 Merci pour vos réponses hyper rapides....et hyper efficaces ! Olivier, je lui ai proposé ta solution, mais il rencontre 2 problèmes, le 1er c'est qu'il est comme moi "mainlev" connait pas (ou plutôt il veut plus connaitre) et le 2ème c'est qu'il tient pas l'alcool ! (rires forts) Pour répondre à certains, en fait il redessine une polyligne avec plein de sommets en essayant de ne pas dépasser sa polyligne lisse qui ne lui sert de repère et visiblement il matérialise des zones, donc des contours. Ce sont des zones des massifs végétaux qu'il dessine de cette manière afin de les distinguer des autres zones du dessin qui sont représentées avec des polyligne lisses. Bonuscad, je viens de lui transmettre et d'essayer ta solution (le dernier lisp) qui correspond à ce qu'il m'a décrit. Il a sauté au plafond, car il ne pensait pas que ce soit possible et surtout avoir si vite une réponse si proche de ce qu'il suhaite. Sauf qu'il veut savoir si on peut éviter "d'arrèter" la fonction dés le second point et donc faire une polyligne, si on peut réaliser des courbes dans la polyligne ou si trop complexe Est-ce que l'on peut juste sélectionner une polyligne lisse(composée de droite et de courbes etc...) et la transformer en polyligne "tordue" avec ces 2 contraintes. Voilà, déjà merci.... Cordialement.Toff
G2.toff Posté(e) le 9 mars 2016 Auteur Posté(e) le 9 mars 2016 Bonjour, <Humour ON>La fonction MAINLEV après 2 ou 3 whisky devrait faire l'affaire<Humour OFF> Olivier Ya aussi la fonction JAITROBU non ????
-Olivier- Posté(e) le 10 mars 2016 Posté(e) le 10 mars 2016 Ya aussi la fonction JAITROBU non ???? Sauf que la fonction MAINLEV existe réellement (regarde dans les Express Tool) Elle évite de devoir cliquer façon mitraillette.Olivier
G2.toff Posté(e) le 10 mars 2016 Auteur Posté(e) le 10 mars 2016 Sauf que la fonction MAINLEV existe réellement (regarde dans les Express Tool) Elle évite de devoir cliquer façon mitraillette.Olivier Bonjour, En effet, en plus je connaissais pas, finalement ma blague ratée m'aura été utile ! Je passais par des trucs de fou d'un tuto pour créer des polylignes perso....je vaus regarder cette fonction du coup ! Finalement merci bien Olivier....comme quoi on en apprend toujours... CordialementToff
Olivier Eckmann Posté(e) le 10 mars 2016 Posté(e) le 10 mars 2016 Bonjour, c'état de l'humour pour les whisky, mais comme indiqué par -Olivier- , la fonction MAINLEV est bien une fonction AutoCAD (à taper au clavier) avec la possibilité de dessiner des lignes ou polyligne et de fixer le pas de création des sommets. Ensuite la polyligne est dessinée au fur et à mesure que l'on bouge la souris. Les 3 verres de whisky, c'était juste pour trembler un peu, mais ça marche aussi avec un bon hoquet ou une boule de souris un peu encrassée. Nos réponses se sont croisées. Olivier
bonuscad Posté(e) le 10 mars 2016 Posté(e) le 10 mars 2016 Si MAINLEV te convient bien, je ne cherche pas à améliorer la fonction GRASS. Le désaventage de mainlev est que l'incrémentation est relativement régulière à moins d'avoir des accélération subite du curseur, ce qui n'est pas trop évident au niveau de la maitrise des directions... Par contre grass ne marche pas bien pour des directions proche de la verticale (à l'origine c'est pour simuler de l'herbe sur un plan proche de l'horizontale), il faudrait revoir le code en profondeur. Je pense que Mainlev ne va pas si mal, mais ça demande une certaine dextérité sur la mainiement de la souris pour avoir un effet aléatoire... ou alors avoir un dessinateur atteint de la maladie de Parkinson. Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
G2.toff Posté(e) le 10 mars 2016 Auteur Posté(e) le 10 mars 2016 Si MAINLEV te convient bien, je ne cherche pas à améliorer la fonction GRASS. Le désaventage de mainlev est que l'incrémentation est relativement régulière à moins d'avoir des accélération subite du curseur, ce qui n'est pas trop évident au niveau de la maitrise des directions... Par contre grass ne marche pas bien pour des directions proche de la verticale (à l'origine c'est pour simuler de l'herbe sur un plan proche de l'horizontale), il faudrait revoir le code en profondeur. Je pense que Mainlev ne va pas si mal, mais ça demande une certaine dextérité sur la mainiement de la souris pour avoir un effet aléatoire... ou alors avoir un dessinateur atteint de la maladie de Parkinson. En effet, il a opté pour la fonction MAINLEV qui lui va très bien....le lisp "grass" ne permettant pas les courbes il ne lui convient pas trop finalement. De plus il trouve que le coté "a main levée" lui permet de maitriser au mieux ce a quoi il veut arriver. Merci encore à tous. CordialementToff
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