brunomu Posté(e) le 6 juillet 2010 Posté(e) le 6 juillet 2010 Bonjour Forum ! Quand on fait des détails soignés, je trouve super galère de faire des isolants bien dessinés : les types de lignes fournis par Autodesk ont plein de défauts (isolant de largeur constante uniquement, petits bouts de ligne au bout du motif, aspect moche aux angles des polylignes, impossible de gérer proprement la fin du motif, motif « zigzag » non paramétrable, angles du type de ligne « batting » trop ouvert,…). Pour contourner la difficulté, je dessine des polylignes en zigzag avec l’angle que je veux, mais c’est vite galère.D’où l’idée de créer un LISP qui permettrait, en désignant les 2 extrémités d’un rectangle, la création automatique d’une polyligne en zigzag qui remplisse le rectangle. Problème : je ne sais pas le faire en LISP !Est-ce que les cracks du Forum pourraient m’aider ? (je pense que ça rendrait service à beaucoup de gens). Deux améliorations possibles : - pouvoir indiquer l’angle maxi entre 2 segments successifs- plutôt que de saisir un rectangle, on pourrait saisir les 4 sommets d’un trapèze, car parfois l’isolant s’amincit Par avance merci à celui/celle qui voudra bien s’y coller (à moins que ça n’existe déjà ?! [Edité le 6/7/2010 par gloub]
Patrick_35 Posté(e) le 6 juillet 2010 Posté(e) le 6 juillet 2010 Salut Problème : je ne sais pas le faire en LISP !C'est le moment ou jamais de commencer Est-ce que les cracks du Forum pourraient m’aider ? (je pense que ça rendrait service à beaucoup de gens).Avec plaisir.Si tu pouvais mettre une image à disposition pour bien comprendre ce que tu souhaites faire. @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
brunomu Posté(e) le 6 juillet 2010 Auteur Posté(e) le 6 juillet 2010 Merci pour ta réponse. Voilà l'image : http://yfrog.com/2pcrationisolantj A l'étape 1, on saisit les contours du rectangle qui sera rempli d'isolant (rectangle plutôt allongé).A l'étape 2 : le LISP crée une polyligne qui remplit parfaitement le rectangleL'étape 3 n'est là que pour montrer le résultat sans le rectangle de saisie. J'espère que ça explique clairement ce que j'imagine. [Edité le 6/7/2010 par gloub]
Patrick_35 Posté(e) le 6 juillet 2010 Posté(e) le 6 juillet 2010 Si tu pouvais changer de site, je ne peux voir l'image (filtre) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
brunomu Posté(e) le 6 juillet 2010 Auteur Posté(e) le 6 juillet 2010 Comme ça, ça va ? http://img84.imageshack.us/img84/1159/crationisolant.jpg [Edité le 6/7/2010 par gloub]
Patrick_35 Posté(e) le 7 juillet 2010 Posté(e) le 7 juillet 2010 Ah, c'est parfait :D Tu as un angle mini et maxi ? @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
brunomu Posté(e) le 7 juillet 2010 Auteur Posté(e) le 7 juillet 2010 Merci pour ta réponse. L'idéal serait de laisser ce choix à l'utilisateur.Perso, je choisis mini = 30°, maxi = 40°.
Patrick_35 Posté(e) le 8 juillet 2010 Posté(e) le 8 juillet 2010 Salut Donc 4 routines (c'est noël avant l'heure :D ) Isol qui fais ce que tu as demandéIsold La même chose qu'Isol, mais en dynamique et avec la possibilité d'orienter le rectangleIsolmin Pour indiquer l'angle miniIsolmax Pour indiquer l'angle maxi @+ [Edité le 8/7/2010 par Patrick_35] Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
brunomu Posté(e) le 8 juillet 2010 Auteur Posté(e) le 8 juillet 2010 Waouh ! J'espérais une 2CV d’occasion et tu m’a livré une Rolls neuve ! Merci merci. Bon, comme la Rolls est neuve, elle a besoin d’un petit rodage et d’un passage au garage.J’ai de petits problèmes, que je ne sais pas résoudre (et vu la complexité des LISP, je vois bien que je n’aurais pas su les écrire tout seul…) :- ISOL fonctionne seulement en SCG (UCS world), pour des rectangles horizontaux- ISOLD fonctionne seulement en SCG. Ce serait plus simple si la commande marchait dans le SCU. Dans un SCU, la commande crée d’office un motif très (trop) long- avec ISOLD, j’arrive à saisir précisément le 1er point du rectangle, mais pas le 2ème ; donc le motif d’isolant ne s’arrête pas exactement à un point précis- ce serait peut-être mieux d’intégrer à la commande le choix des valeurs par défaut ISOLMIN et ISOLMAX (un peu comme dans la commande NUAGEREV / REVCLOUD) Mais bon, c’est déjà super. Encore une fois : merci beaucoup !
Patrick_35 Posté(e) le 9 juillet 2010 Posté(e) le 9 juillet 2010 Salut J’ai de petits problèmes, que je ne sais pas résoudre (et vu la complexité des LISP, je vois bien que je n’aurais pas su les écrire tout seul…) :Il faut bien se lancer un jour :DComment crois-tu qu'on y arrive ;)Petit à petit, l'oiseau fait son nid et en plus, je pense que plus d'une personne sur ce site serait capable de t'aider - ISOL fonctionne seulement en SCG (UCS world), pour des rectangles horizontauxC'est corrigé, je me suis un peu mélangé les pinceaux. - ISOLD fonctionne seulement en SCG. Ce serait plus simple si la commande marchait dans le SCU. Dans un SCU, la commande crée d’office un motif très (trop) longIdem qu'avec ISOL - avec ISOLD, j’arrive à saisir précisément le 1er point du rectangle, mais pas le 2ème ; donc le motif d’isolant ne s’arrête pas exactement à un point précisMAintenant, pendant la saisie dynamique, un appuie sur tab permet de saisir un point (par accrobj ou coordonnées) - ce serait peut-être mieux d’intégrer à la commande le choix des valeurs par défaut ISOLMIN et ISOLMAX (un peu comme dans la commande NUAGEREV / REVCLOUD)J'ai fais un peu différemment. Pendant la saisie dynamique, avec les touches + et -, tu peux augmenter/diminuer l'angle maxi et mini.Je conserve quand même les deux commandes qui déterminent les angles. Donc, une nouvelle version. @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
brunomu Posté(e) le 9 juillet 2010 Auteur Posté(e) le 9 juillet 2010 C'est génial, bravo et merci ! Je ne sais pas combien tu as passé de temps là-dessus (j'espère pas trop). Pour ce qui me concerne, ça va m'en faire gagner pas mal. Quant à maîtriser AUTOLISP, j'ai essayé de m'y mettre, mais faute d'avoir trouvé un manuel compréhensible pour un – relativement – novice en programmation, je n'ai jamais réussi à "rentrer" dedans. Je me contente donc de bidouiller. Si tu connais un bouquin ou un tutoriel sur internet, je suis preneur (encore que, comme je suis tout le temps charrette, il faudra que j'ingurgite le tout à mes heures perdues, càd pas grand-chose). Merci encore.
Patrick_35 Posté(e) le 9 juillet 2010 Posté(e) le 9 juillet 2010 C'est génial, bravo et merci !De rien Je ne sais pas combien tu as passé de temps là-dessus (j'espère pas trop). Pour ce qui me concerne, ça va m'en faire gagner pas mal.A peine une matinée Quant à maîtriser AUTOLISP, j'ai essayé de m'y mettre, mais faute d'avoir trouvé un manuel compréhensible pour un – relativement – novice en programmation, je n'ai jamais réussi à "rentrer" dedans. Je me contente donc de bidouiller.Il faut bien commencer un jour Si tu connais un bouquin ou un tutoriel sur internet, je suis preneur (encore que, comme je suis tout le temps charrette, il faudra que j'ingurgite le tout à mes heures perdues, càd pas grand-chose).Tu as l'aide, et surtout ce site Merci encore.C'est un plaisir, et ça m'a permis de jouer avec grread Une nouvelle version, car les mouvements de la souris avec la saisie dynamique ne me convenaient pas vraiment @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
brunomu Posté(e) le 13 juillet 2010 Auteur Posté(e) le 13 juillet 2010 Merci d'avoir poursuivi tes efforts. Jusqu'ici j'ai utilisé ISOLD.Je viens de faire un essai avec ISOL, mais ça ne marche pas, ou plutôt : ça marche dans le SCG, mais ça ne fait, au mieux, que créer la diagonale du rectangle, quelles que soient les valeurs d'ISOLMIN et/ou ISOLMAX. Keskispass ? PS : je ne connais pas grread, je sais encore moins jouer avec. Qu'est-ce qu'on gagne ? ;-)
Patrick_35 Posté(e) le 13 juillet 2010 Posté(e) le 13 juillet 2010 Ah oui, j'ai été un peu radin avec les parenthèses ;) La mise à jour @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
brunomu Posté(e) le 15 juillet 2010 Auteur Posté(e) le 15 juillet 2010 On frise la perfection ! Dernier souci, je pense : isol ne marche que quand le rectangle saisi est horizontal (quand il est vertical, ça crée la diagonale). En tous cas, merci encore !
Patrick_35 Posté(e) le 15 juillet 2010 Posté(e) le 15 juillet 2010 Ah ouiLa version corrigée. @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
brunomu Posté(e) le 16 juillet 2010 Auteur Posté(e) le 16 juillet 2010 Nickel-chrome. Merci !!!!!!!!!!!!!
DenisHen Posté(e) le 20 février 2011 Posté(e) le 20 février 2011 Bonjour à tous... Je ne voudrais pas pinailler mais l'isolant se dessine plus souvent, et c'est plus "joli" comme une sorte de petit "serpentin", une sorte su "S" contigus... J'ai une image exemple mais je n'arriva pas à la poster... Et c'est infiniment plus complexe à dessiner... Denis... 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)
lili2006 Posté(e) le 20 février 2011 Posté(e) le 20 février 2011 Bonjour à toutes et tous, J'ai une image exemple mais je n'arriva pas à la poster... Un post à consulter alors,... Civil 3D 2025 - COVADIS_18.3c https://www.linkedin...3%ABt-95313341/
DenisHen Posté(e) le 20 février 2011 Posté(e) le 20 février 2011 Re Merci Lili2006, je tente le truc... Voici donc ma jolie image... http://www.phalenecad.fr/CadXP/Isolant.jpg Tada ! !C'est une coupe ( mais en plan, c'est la même symbolique d'un mur et de son doublade De gauche à droite : 2cm de crépis, 20cm de parpaing, une couche de colle, 10cm d'isolant et le BA13... Voilà qui est fait... Le mieux est d'en faire un type de ligne pour pouvoir en faire une multiligne ( car l'isolant peut faire plusieurs épaisseurs 10, 12, 16, 18... Et il peut aussi être coupé pas la menuiserie...) Et maintenant, je sais poster des images ! ! Et bon dimanche... Sous vos applaudissements... Denis... 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)
lili2006 Posté(e) le 20 février 2011 Posté(e) le 20 février 2011 Re, Et bon dimanche... Sous vos applaudissements... Génération MARTIN,... ;) Civil 3D 2025 - COVADIS_18.3c https://www.linkedin...3%ABt-95313341/
eklundh80 Posté(e) le 14 mai 2020 Posté(e) le 14 mai 2020 Salut à tous, est-ce que quelqu'un aurait ces 4 routines en stock ? (liens hs)J'ai fait un bloc dynamique avec une option réseau, mais ce n'est pas très concluantwbloc isolation
lecrabe Posté(e) le 14 mai 2020 Posté(e) le 14 mai 2020 Hello Routine sortie de mon stock de 3000 routines !Testee et Validee sur AutoCAD 2021 ... SVP tu testes la routine de notre REGRETTE Patrick_35 ci-dessous ! Et SVP tu nous diras, si elle est OK pour toi !?Et si OK sur quelle version de AutoCAD, tu la fais tourner !? LA SANTE (Stay Safe), Bye, lecrabe "triste"Automne 2020, la retraite ;; ;; Routines Isolation par P35 -- Vers 1.20 15/07/2010 ;; ;; A utiliser avec le Type de Ligne ISOLATION ou Equivalent ... ;; ;; ISOL / ISOLD : on tire en Dynamique les Coins d un Rectangle ;; Et la Diagonale se dessine en consequence ... ;; ;; https://cadxp.com/topic/28002-un-lisp-pour-creer-une-polyligne-qui-represente-un-isolant/ ;; ;; Donc 4 routines (c'est Noel avant l'heure :D ) ;; ;; Isol : qui fais ce que tu as demande ;; Isold : La meme chose qu'Isol, mais en dynamique et avec la possibilite d'orienter le rectangle ;; Isolmin : Pour indiquer l'angle mini ;; Isolmax : Pour indiquer l'angle maxi ;; (defun c:isold(/ ang bas deb dir dis ent fin lec lst nbr pol pt1 pt2 pt3 pt4 pt5 pt6 pt7 s sor tot *errisol* deg rad round) (defun *errisol* (msg) (or (member (strcase msg) '("FUNCTION CANCELLED" ""QUIT / EXIT ABORT"" "FONCTION ANNULEE" "QUITTER / SORTIR ABANDON")) (princ (strcat "\nErreur : " msg)) ) (setq *error* s) (and ent (entdel ent)) (and pol (entdel pol)) (princ) ) (defun deg(ang) (* 180.0 (/ ang pi)) ) (defun rad (ang) (* pi (/ ang 180.0)) ) ; Arrondi de (gile) (defun round (num prec) (if (zerop (setq prec (abs prec))) num (* prec (fix ((if (minusp num) - +) (/ num prec) 0.5)) ) ) ) (or angle_mini (setq angle_mini 30)) (or angle_maxi (setq angle_maxi 40)) (setq s *error* *error* *errisol* ) (and (setq pt1 (getpoint "\n1er Point : ")) (setq pt4 (getpoint pt1 "\nSecond point : ")) ) (while (not sor) (setq lec (grread T 7 0)) (cond ((equal lec '(2 9)) (setq pt5 (getpoint "\nSpecifier le point : ")) (setq lec (list 5 pt5) sor t ) ) ((equal lec '(2 43)) (setq angle_mini (1+ angle_mini) angle_maxi (1+ angle_maxi) lec (grread T 1 0) ) ) ((equal lec '(2 45)) (setq angle_mini (1- angle_mini) angle_maxi (1- angle_maxi) lec (grread T 1 0) ) ) ((or (and (eq (car lec) 2) (member (cadr lec) '(13 32))) (member (car lec) '(3 25)) ) (setq sor t) ) ) (and (eq (car lec) 5) (not (equal (cadr lec) pt1)) (progn (setq bas (angle pt1 pt4) dir (angle (polar pt1 bas (/ (distance pt1 pt4) 2)) (cadr lec)) ) (if (> bas pi) (setq deb (- bas pi) fin bas ) (setq deb bas fin (+ bas pi) ) ) (and (> deb (* pi 2)) (setq deb (- (* pi 2) deb))) (and (> fin (* pi 2)) (setq fin (- fin (* pi 2)))) (if (and (>= dir deb) (<= dir fin)) (setq ang 90) (setq ang -90) ) (and (> bas pi) (setq ang (- ang))) (and ent (entdel ent)) (setq ent (entmakex (list (cons 0 "LWPOLYLINE") (cons 100 "AcDbEntity") (cons 100 "AcDbPolyline") (cons 90 5) (cons 10 (trans pt1 1 0)) (cons 10 (trans (setq pt2 (polar pt1 (rad (+ (deg bas) ang)) (distance pt1 (cadr lec)))) 1 0)) (cons 10 (trans (setq pt3 (polar pt2 bas (distance pt1 pt4))) 1 0)) (cons 10 (trans pt4 1 0)) (cons 10 (trans pt1 1 0)) ) ) ) (setq pt5 (inters pt4 pt3 pt1 (polar pt1 (rad (+ (deg bas) (- 90 (/ (+ angle_mini angle_maxi) 2)))) (distance pt1 pt4)) nil) nbr (round (/ (distance pt4 pt3) (distance pt4 pt5)) 1.0) ) (and (zerop nbr)(setq nbr 1.0)) (setq dis (/ (distance pt4 pt3) nbr) tot dis bas nil lst (list (cons 10 (trans pt1 1 0))) ) (while (<= tot (distance pt3 pt4)) (if bas (setq pt6 pt1 pt7 pt2 bas nil ) (setq pt6 pt4 pt7 pt3 bas T ) ) (setq lst (cons (cons 10 (trans (polar pt6 (angle pt6 pt7) tot) 1 0)) lst) tot (+ tot dis) ) ) (and pol (entdel pol)) (setq pol (entmakex (append (list (cons 0 "LWPOLYLINE") (cons 100 "AcDbEntity") (cons 100 "AcDbPolyline") (cons 90 (length lst)) ) lst ) ) ) ) ) ) (and ent (entdel ent)) (setq *error* s) (princ) ) (defun c:isol(/ bas dif dir lst nbr pt1 pt2 pt3 pt4 pt5 pt6 pt7 tot deg rad round) (defun deg(ang) (* 180.0 (/ ang pi)) ) (defun rad (ang) (* pi (/ ang 180.0)) ) ; Arrondi de (gile) (defun round (num prec) (if (zerop (setq prec (abs prec))) num (* prec (fix ((if (minusp num) - +) (/ num prec) 0.5)) ) ) ) (or angle_mini (setq angle_mini 30)) (or angle_maxi (setq angle_maxi 40)) (and (setq pt1 (getpoint "\nPremier coin : ")) (setq pt3 (getcorner pt1 "\nDeuxieme coin : ")) (progn (setq pt2 (list (car pt3) (cadr pt1) 0.0) pt4 (list (car pt1) (cadr pt3) 0.0) ) (cond ((> (distance pt1 pt2) (distance pt2 pt3)) (setq dif 0) ) (T (setq dif 180 pt5 pt1 pt1 pt2 pt2 pt3 pt3 pt4 pt4 pt5 ) ) ) (setq pt5 (inters pt4 pt3 pt1 (polar pt1 (rad (+ (deg (angle pt1 pt2)) (/ (+ angle_mini angle_maxi) 2) dif)) (distance pt1 pt4)) nil) nbr (round (/ (distance pt4 pt3) (distance pt4 pt5)) 1.0) ) (and (zerop nbr)(setq nbr 1.0)) (setq dis (/ (distance pt4 pt3) nbr) tot dis lst (list (cons 10 (trans pt1 1 0))) ) (while (<= tot (distance pt3 pt4)) (if bas (setq pt6 pt1 pt7 pt2 bas nil ) (setq pt6 pt4 pt7 pt3 bas T ) ) (setq lst (cons (cons 10 (trans (polar pt6 (angle pt6 pt7) tot) 1 0)) lst) tot (+ tot dis) ) ) (entmakex (append (list (cons 0 "LWPOLYLINE") (cons 100 "AcDbEntity") (cons 100 "AcDbPolyline") (cons 90 (length lst)) ) lst ) ) ) ) (princ) ) (defun c:isolmin(/ def rep) (initget 7) (if angle_mini (setq def (rtos angle_mini)) (setq def "30") ) (and (setq rep (getreal (strcat "\nAngle minimum <" def ">: "))) (setq angle_mini rep) ) (princ) ) (defun c:isolmax(/ def rep) (initget 7) (if angle_maxi (setq def (rtos angle_maxi)) (setq def "40") ) (and (setq rep (getreal (strcat "\nAngle maximum <" def ">: "))) (setq angle_maxi rep) ) (princ) ) Autodesk Expert Elite Team
eklundh80 Posté(e) le 18 mai 2020 Posté(e) le 18 mai 2020 Salut, Merci pour ces routines.Cela fonctionne comme le souhaitait l'auteur de ce post. Je suis sur Autocad 2016.Mais je pensais que cela créait une polyligne avec le motif de l'isolant, Je me suis dit: si je mettais en pratique les explications sur DA-Code (il est super ce site, merci Didier) "bulge, vlax-curve"mais en cherchant sur le net je suis tombé sur ce lien qui semble bien fonctionné InsulBattPoly.zip Merci lecrabe pour le partage des routines
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