cedwit Posté(e) le 3 octobre 2006 Posté(e) le 3 octobre 2006 Bonjours, j'aimerrai dessinner des polyligne avec une certaine épaisseur et un ou des arc qui servirons de rayon de courbure.Je m'explique, je suis dessinateur en stabilité (coffrage et ferrailage) et donc je voudrais améliorer ma productivité.Pour l'instant je faits les polyligne avec la commande de AUTOCAD, mais cela me prends un peu trop de temps et donc si quelqu'un peus m'aider voir meme me donner les codes lisp.Merci d'avance.
(gile) Posté(e) le 3 octobre 2006 Posté(e) le 3 octobre 2006 Salut, Il me sembe que le plus simple pour programmer les propriétés d'une polyligne, c'est d'utiliser entmake Certains codes sont facultatifs, les valeurs par défaut sont les valeurs courantes (calque, couleur, élévation, direction d'extrusion, espace, fenêtre, couleur ...).Vois les codes DXF dans l'aide aux développeurs >> Références DXF >> Section ENTITES Un exemple pour créer une polyligne à 3 sommets de largeur constante : (entmake (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") (cons 8 . Calque) ; Nom du calque (facultatif) '(100 . "AcDbPolyline") '(90 . 3) ; nombre de sommets '(70 . 1) ; ouverte (0) ou fermée (1) (cons 38 elev) ; élévation (facultatif) (cons 43 larg) ; largeur constante (facultatif) (cons 10 pt1) ; premier sommet (cons 42 courb1) ; courbure (facultatif) (cons 10 pt2) ; deuxième sommet (cons 42 courb2) ; courbure (facultatif) (cons 10 pt3) ; troisième sommet (cons 42 courb3) ; courbure (facultatif) (cons 210 zdir) ; direction d'extrusion (facultatif) ) ) Si les largeurs sont différentes entre les sommets : (entmake (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") (cons 8 . Calque) ; Nom du calque (facultatif) '(100 . "AcDbPolyline") '(90 . 3) ; nombre de sommets '(70 . 1) ; ouverte (0) ou fermée (1) (cons 38 elev) ; élévation (facultatif) (cons 10 pt1) ; premier sommet (cons 40 dep1) ; largeur de départ (cons 41 fin1) ; largeur de fin (cons 42 courb1) ; courbure (facultatif) (cons 10 pt2) ; deuxième sommet (cons 40 dep2) ; largeur de départ (facultatif) (cons 41 fin2) ; largeur de fin (facultatif) (cons 42 courb2) ; courbure (facultatif) (cons 10 pt3) ; troisième sommet (cons 40 dep3) ; largeur de départ (facultatif) (cons 41 fin3) ; largeur de fin (facultatif) (cons 42 courb3) ; courbure (facultatif) (cons 210 zdir) ; direction d'extrusion (facultatif) ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
cedwit Posté(e) le 3 octobre 2006 Auteur Posté(e) le 3 octobre 2006 merci pour l'aide mais je ne veus pas faire un polyligne en 3d mais en 2d .Ce que je veus dire c'est qu'avec 1 fichier lisp, je peus dessiner une poliligne qui a la forme d'un etrier ou d'une droite par exemple
(gile) Posté(e) le 3 octobre 2006 Posté(e) le 3 octobre 2006 Il s'agit bien de polylignes 2D (lwpolyline) Essaye ça : (entmake (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") '(100 . "AcDbPolyline") '(90 . 4) ; nombre de sommets '(70 . 0) ; ouverte (0) ou fermée (1) '(43 . 3) ; largeur constante '(10 0.0 0.0 0.0) ; premier sommet '(42 . 0.0) ; courbure '(10 0.0 10.0 0.0) ; deuxième sommet '(42 . -1) ; courbure '(10 10.0 10.0 0.0) ; troisième sommet '(42 . 0.0) ; courbure '(10 10.0 0.0 0.0) ; quatrième sommet ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
bonuscad Posté(e) le 4 octobre 2006 Posté(e) le 4 octobre 2006 Ce code trouvé ICI Je pense que tu aurais le corps principal d'une fonction pour t'inspirer sur le dessin du ferraillage (defun c:test (/ A D D0 E EN GR LST LST1 LST2 PT) ;;by ElpanovEvgeniy at theswamp.org ;;change very little by qjchen ;; The last changes ;; The task (3) is solved (setq pt (getpoint "\nthe steel start point:")) (setq en (entmakex '((0 . "LWPOLYLINE") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 1) (100 . "AcDbPolyline") (90 . 5) (70 . 0) (43 . 10.0) (38 . 0.0) (39 . 0.0) (10 50.0 20.0) (42 . 0.0) (10 0. 20.0) (42 . 1.0) (10 0. 0.0) (42 . 0.0) (10 0.0 0.0) (42 . 1.0) (10 0.0 20.0) (42 . 0.0) (10 -50. 20.0) (42 . 0.0) (210 0.0 0.0 1.0) ) ) ;_ entmakex lst1 '((50. 20.) (0. 20.) (0. 0.) ) lst2 '((0. 0.) (0. 20.) (-50. 20.) ) e (reverse (vl-member-if (function (lambda (x) (= (car x) 39) ) ;_ lambda ) ;_ function (reverse (entget en)) ) ;_ vl-member-if ) ;_ reverse ) ;_ setq (while (= (car (setq gr (grread nil 5 1))) 5) (setq a (angle pt (cadr gr)) d (distance pt (cadr gr)) ) ;_ setq (setq lst (append (mapcar (function (lambda (p) (list (+ (* (car p) (cos a)) (* (cadr p) (- (sin a))) (car pt) ) ;_ list (+ (* (car p) (sin a)) (* (cadr p) (cos a)) (cadr pt) ) ;_ list ) ;_ list ) ;_ lambda ) ;_ function lst1 ) ;_ mapcar (mapcar (function (lambda (p) (list (+ (* (+ d (car p)) (cos a)) (* (cadr p) (- (sin a))) (car pt) ) ;_ list (+ (* (+ d (car p)) (sin a)) (* (cadr p) (cos a)) (cadr pt) ) ;_ list ) ;_ list ) ;_ lambda ) ;_ function lst2 ) ;_ mapcar ) ;_ append ) ;_ setq (entmod (append e (list (cons 10 (car lst)) '(42 . 0.) (cons 10 (cadr lst)) '(42 . 1.) (cons 10 (caddr lst)) '(42 . 0.) (cons 10 (cadddr lst)) '(42 . 1.) (cons 10 (nth 4 lst)) '(42 . 0.) (cons 10 (nth 5 lst)) '(42 . 0.) ) ;_ list ) ;_ append ) ;_ entmod ) ;_ while (setq pt (mapcar (function -) (cadr lst) (caddr lst)) a (angle (caddr lst) (cadr lst)) d0 (distance (cadr lst) (caddr lst)) lst1 (list (car lst) (cadr lst) (nth 4 lst) (nth 5 lst)) lst2 (list (caddr lst) (cadddr lst)) ) ;_ setq (setq en (entmakex (entget en))) (while (= (car (setq gr (grread nil 5 0))) 5) (setq d (polar pt a (- (distance (cadr gr) (vlax-curve-getClosestPointTo en (cadr gr) ) ;_ vlax-curve-getClosestPointTo ) ;_ distance d0 ) ;_ - ) ;_ polar ) ;_ setq (setq lst (append (mapcar (function (lambda (p) (list (+ (car p) (car d) ) ;_ list (+ (cadr p) (cadr d) ) ;_ list ) ;_ list ) ;_ lambda ) ;_ function lst1 ) ;_ mapcar (mapcar (function (lambda (p) (list (- (car p) (car d) ) ;_ list (- (cadr p) (cadr d) ) ;_ list ) ;_ list ) ;_ lambda ) ;_ function lst2 ) ;_ mapcar ) ;_ append ) ;_ setq (entmod (append e (list (cons 10 (car lst)) '(42 . 0.) (cons 10 (cadr lst)) '(42 . 1.) (cons 10 (nth 4 lst)) '(42 . 0.) (cons 10 (nth 5 lst)) '(42 . 1.) (cons 10 (caddr lst)) '(42 . 0.) (cons 10 (cadddr lst)) '(42 . 0.) ) ;_ list ) ;_ append ) ;_ entmod ) ;_ while (princ) ) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Patrick_35 Posté(e) le 4 octobre 2006 Posté(e) le 4 octobre 2006 Salut BonusC'est bien la première fois que je vois un Autocad chinois @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
bonuscad Posté(e) le 4 octobre 2006 Posté(e) le 4 octobre 2006 Tu dois le connaitre ce chinois vu que tu fréquente le site ? ;) Très "branché" "TheSwamp", il y a des Russes !, des Chinois !, et ... des Francais ! .....:o Un truc que j'ai bien aimé de ce chinois, est une fractale (avec l'aide des membres) pour dessinner des vegétaux en 2D.Il sont vraiment joli et pourrait servir pour rajouter dans une biblio pour du paysager. Voir TheSwamp pour le code. Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
cedwit Posté(e) le 4 octobre 2006 Auteur Posté(e) le 4 octobre 2006 Je vous remercie pour vos truc, mais ce n'est pas vraiment ce que je cherche.En fait ce que je cherche a faire, c'ait une routine en lisp ou en vba qui me servirai a dessiner mes barres d'armature a une distance bien précise que je choisirrai et d'une épaisseur que je choisirai aussi.
(gile) Posté(e) le 4 octobre 2006 Posté(e) le 4 octobre 2006 Re, Je donnais juste un exemple, tu peux bien sûr choisir les valeurs que tu veux. dans la liste entmake,- pour chaque sommet de la polyligne :(10 [surligneur]0.0 0.0 0.0[/surligneur]) ; les coordonnées x y z que tu veux,ou :(cons 10 [surligneur]pt[/surligneur]) ; où pt est une variable qui contient les coordonnées que tu veux. - pour l'épaisseur constante :(43 . [surligneur]3.0[/surligneur]) ; l'épaisseur que tu veuxou(cons 43 [surligneur]ep[/surligneur]) ; où ep est une variable qui contient l'épaiseur que tu veux. - pour la courbure :(40 . [surligneur]-1.0[/surligneur]) ; la courbure que tu veux,ou :(cons 42 bulge) ; où bulge est une variable qui contient la courbure que tu veux. pour la courbure, le bulge correspond à la tangente du quart de l'angle de l'arc (α sur l'image), le bulge est positif si l'angle de l'arc est décrit dans le sens trigonométrique négatif sinon. http://img55.imageshack.us/img55/5571/sanstitrets4.png Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
DenisHen Posté(e) le 13 octobre 2006 Posté(e) le 13 octobre 2006 Salut cedwit, ........servirai a dessiner mes barres d'armature a une distance bien précise que je choisirrai et d'une épaisseur que je choisirai aussi Si tes épaisseurs sont connus, si ce sont toujours les même, 0.10, 0.12, 0.15, 0.18 ou 0.20..... Tu peut te faire des menus... Tu lance la commande "_.pline", puis, grace à une ligne dans le menu, tu dicte à AutoCAD quel va être ton sommet :épaisseure de début du segment : 0.12épaisseur de fin du segment : 0.20 Celà fonctionne seulement si toutes tes épaisseurs sont communes (si tu utilises toujours les mêmes)... J'ai déjà des commandes (pour une interpolation de Z) dans un menu... C'est super simple et super rapide à utiliser... Je ne sais pas si tu y avais penser... Voilà... 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)
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