ahmednassim Posté(e) le 28 octobre 2006 Posté(e) le 28 octobre 2006 je veux savoir comment peut on faire des raccordements parabolique Merci
bonuscad Posté(e) le 28 octobre 2006 Posté(e) le 28 octobre 2006 Covadis a surement de telles fonctions. Sans ce progiciel, autocad n'a pas de fonctions standards pour réaliser ceci. Cependant pour un besoin ponctuel sans devoir acquérir des applications spécifiques, on peut utiliser des routines en lisp pour executer de telle courbes. Pour les paraboles tu peux regarder ce SUJET . Dans le même ordre, je dispose d'une routine pour créer un raccordement progressif (clothoide) entre une droite et un cercle (avec un deltaR raisonnable)Si tu en as besoin fais le savoir. Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
lecrabe Posté(e) le 28 octobre 2006 Posté(e) le 28 octobre 2006 Bonjour Mr Bonuscad Je suis intéressé par ta routine de raccord en mode clothoide ... Merci d'avance, Le Decapode Autodesk Expert Elite Team
didier Posté(e) le 28 octobre 2006 Posté(e) le 28 octobre 2006 coucou, je fais faire la Langue de Vipère de base, pour faire un raccordement Parabolique, il fautchoisir dans le menu : Raccordement parabolique c'est la bonne réponse, non ? cet humour, c'est pour faire toucher du doigt que les questions de base,ne recevront que des reponses du même métal. amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
lecrabe Posté(e) le 28 octobre 2006 Posté(e) le 28 octobre 2006 Hello Didier Je n'ai pas tout compris :casstet: Moi je n'ai jamais eu dans mes menus "Raccord Parabolique" ou "Raccord Clothoide" Ou bien est ce des fonctions intégrées (en standard) depuis longtemps dans Covadis ? ;) Le Decapode "interloqué" Autodesk Expert Elite Team
bonuscad Posté(e) le 28 octobre 2006 Posté(e) le 28 octobre 2006 Je suis intéressé par ta routine de raccord en mode clothoide ... C'est juste une béquille pour pouvoir dessiner un raccordement progressif. Elle a ses limitations (calcule de factorielle selon la méthode de Fresnel), donc un raccordement s'enroulant sur lui même (type escargot) ne pourra être calculé (perte de précision). Un raccordement routier classique doit pouvoir se faire sans problème. (defun factor (y / ) (cond ((= 0 y) 1) (t (* y (factor (1- y)))) ) ) (defun fact (nbr / x) (setq x nbr) (factor (float x)) ) (defun serie (rep / mark rp resul) (setq mark 1 rp rep som 0 ) (repeat (fix (* l 10)) (setq resul (/ (expt tau rp) (* (1+ (* 2 rp)) (fact rp)))) (if (/= (rem mark 2) 0) (setq resul (- resul)) ) (setq som (+ resul som) rp (+ rp 2) mark (1+ mark) ) ) ) (defun cloun (l / k som) (setq r (/ 1 l) tau (/ l (* 2 r)) k (sqrt (* 2 tau)) ) (serie 2) (setq x (* k (+ 1 som))) (serie 3) (setq y (* k (+ (/ tau 3) som)) xm (- x (* r (sin tau))) ym (+ y (* r (cos tau))) dltr (- ym r) ) ) (defun matrix (pt / t_x t_y t_z t_v t_zo nw_x nw_y nw_z) (setq t_x (trans '(1 0 0) 0 1 T) t_y (trans '(0 1 0) 0 1 T) t_z (trans '(0 0 1) 0 1 T) t_v (trans '(0 0 0) 1 0) t_zo (trans '(0 0 0) 0 1) ) (setq nw_x (+ (* (car pt) (car t_x)) (* (cadr pt) (cadr t_x)) (* (caddr pt) (caddr t_x)) (car t_v) ) ) (setq nw_y (+ (* (car pt) (car t_y)) (* (cadr pt) (cadr t_y)) (* (caddr pt) (caddr t_y)) (cadr t_v) ) ) (setq nw_z (+ (* (car pt) (car t_z)) (* (cadr pt) (cadr t_z)) (* (caddr pt) (caddr t_z)) (caddr t_v) ) ) (list nw_x nw_y nw_z) ) (defun c:clothoide ( / d ent_d c ent_c dxf_10 dxf_11 dxf_r dxf_m dxf_g pt_per dxf_ym dxf_dltr lg_clo a_clo l_u lst_r cnt tstd tstl choix p_inf resol_cl l x y xm ym r tau dltr lst_som ) (if (= (getvar "worlducs") 1) (progn (setvar "cmdecho" 0) (setvar "blipmode" 0) (setvar "orthomode" 0) (setvar "osmode" (+ 16384 (rem (getvar "osmode") 16384))) (if (= (getvar "limcheck") 1) (setvar "limcheck" 0)) (command "_.undo" "_control" "_all") (command "_.undo" "_group") (while (not (setq d (nentsel"\nChoix de la droite: ")))) (setq ent_d (entget (car d))) (cond ((and (equal (assoc 210 ent_d) '(210 0.0 0.0 1.0)) (eq (cdr (assoc 0 ent_d)) "LINE")) (while (not (setq c (nentsel"\nChoix du cercle: ")))) (setq ent_c (entget (car c))) (cond ((and (equal (assoc 210 ent_c) '(210 0.0 0.0 1.0)) (or (eq (cdr (assoc 0 ent_c)) "CIRCLE") (eq (cdr (assoc 0 ent_c)) "ARC"))) (setq dxf_10 (trans (cdr (assoc 10 ent_d)) 1 0) dxf_11 (trans (cdr (assoc 11 ent_d)) 1 0) dxf_r (cdr (assoc 40 ent_c)) dxf_m (trans (cdr (assoc 10 ent_c)) 1 0) dxf_g (angle dxf_10 dxf_11) pt_per (inters (list (car dxf_10) (cadr dxf_10)) (list (car dxf_11) (cadr dxf_11)) (list (car dxf_m) (cadr dxf_m)) (list (car (polar dxf_m (+ (/ pi 2) dxf_g) dxf_r)) (cadr (polar dxf_m (+ (/ pi 2) dxf_g) dxf_r)) ) nil ) dxf_ym (distance dxf_m pt_per) dxf_dltr (- dxf_ym dxf_r) ) (cond ((and (not (minusp dxf_dltr)) (<= dxf_dltr (* 4.0 dxf_r))) (setq lg_clo (sqrt (+ (* 24 dxf_dltr dxf_r) (* 6 (expt dxf_dltr 2)))) a_clo (sqrt (* lg_clo dxf_r)) ) (setq l_u (/ lg_clo a_clo)) (cond ((<= l_u (* 4 (sqrt pi))) (cloun l_u) (setq lst_r (mapcar '(lambda (ww) (* ww a_clo)) (list x y xm ym dltr))) ;(prompt "\nErreur commise sur Delta R (en m.) = ") (prin1 (abs (- dxf_dltr (last lst_r)))) ;(prompt "\nDelta R reel : ") (prin1 (rtos dxf_dltr 2 5)) ;(prompt "\nDelta R calcule : ") (prin1 (rtos (last lst_r) 2 5)) (setq cnt 0) (while (not (equal (last lst_r) dxf_dltr 0.00001)) (setq cnt (1+ cnt)) (if (= (rem (1+ cnt) 2) 0) (setq tstd (last lst_r) tstl lg_clo) ) (if (= (rem cnt 2) 0) (setq lg_clo (* (/ dxf_dltr (/ (+ tstd (last lst_r)) 2)) (/ (+ lg_clo tstl) 2))) (setq lg_clo (* (/ dxf_dltr (last lst_r)) lg_clo)) ) (setq a_clo (sqrt (* lg_clo dxf_r))) (setq l_u (/ lg_clo a_clo)) (cloun l_u) (setq lst_r (mapcar '(lambda (ww) (* ww a_clo)) (list x y xm ym dltr))) ;(prompt "\nDelta R calcule : ") (prin1 (rtos (last lst_r) 2 5)) ) (setq choix (mapcar '(lambda (ww) (polar pt_per ww (caddr lst_r))) (list dxf_g (+ pi dxf_g)))) (if (> (distance (car choix) (cadr d)) (distance (cadr choix) (cadr d))) (setq dxf_g (+ pi dxf_g)) ) (setq p_inf (polar pt_per dxf_g (caddr lst_r)) dxf_g (+ pi dxf_g) ) (prompt (strcat "\nPas de résolution de la clothoïde <" (rtos (* 0.1 (sqrt lg_clo)) 2) "> :" ) ) (initget 6) (setq resol_cl (getdist)) (if (not resol_cl) (setq resol_cl (* 0.1 (sqrt lg_clo)))) (command "_.ucs" "_new" "_3point" p_inf pt_per dxf_m) (setq lst_som (list (matrix (list (car lst_r) (cadr lst_r) 0.0))) l (- lg_clo resol_cl)) (while (> l 0.0) (cloun (/ l a_clo)) (setq lst_som (cons (matrix (list (* x a_clo) (* y a_clo) 0.0)) lst_som) l (- l resol_cl)) ) (setq lst_som (cons (trans (list 0.0 0.0 0.0) 1 0) lst_som)) (command "_.ucs" "_world") (if (null (tblsearch "appid" "ID_CLOTHOIDE-BONUSCAD$2002")) (regapp "ID_CLOTHOIDE-BONUSCAD$2002") ) (entmake (append (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") (cons 8 (getvar "CLAYER")) '(100 . "AcDbPolyline") (cons 90 (length lst_som)) ) (mapcar '(lambda (x) (cons 10 (list (car x) (cadr x)))) lst_som) (list (list -3 (list "ID_CLOTHOIDE-BONUSCAD$2002" (cons 1000 "ID_CLOTHOIDE") (cons 1002 "{") (cons 1040 dxf_g) (cons 1010 p_inf) (cons 1040 a_clo) (cons 1040 dxf_dltr) (cons 1040 tau) (cons 1040 lg_clo) (cons 1040 dxf_r) (cons 1010 dxf_m) (cons 1010 (matrix (list (car lst_r) (cadr lst_r) 0.0))) (cons 1002 "}") ) ) ) ) ) (command "_.undo" "_end") (alert (strcat "\nLES ANGLES SONT EXPRIME DANS LES UNITES UTILISES" "\n______________________________" "\nOrientation de l'infini\t: " (angtos dxf_g (getvar "aunits") 4) "\nOrigine clothoïde \t: X= " (rtos (car p_inf) 2 3) " Y= " (rtos (cadr p_inf) 2 3) "\n Rayon a l'origine \t: ...infini..." "\n Parametre A \t: " (rtos a_clo 2 3) "\n Delta R \t: " (rtos dxf_dltr 2 3) "\n Angle TAU \t: " (angtos tau (getvar "aunits") 4) "\n Developpement \t: " (rtos lg_clo 2 3) "\n Rayon du cercle \t: " (rtos dxf_r 2 3) "\n Centre du cercle \t: X= " (rtos (car dxf_m) 2 3) " Y= " (rtos (cadr dxf_m) 2 3) "\nFin le la clothoïde \t: X=" (rtos (car (matrix (list (car lst_r) (cadr lst_r) 0.0))) 2 3) " Y= " (rtos (cadr (matrix (list (car lst_r) (cadr lst_r) 0.0))) 2 3) "\n______________________________" ) ) ) (T (prompt "\nLongueur de clothoïde trop importante pour être résolue") (command "_.undo" "_end") (command "_.u") ) ) ) (T (prompt "\nLa droite coupe le cercle ou ripage trop important; pas de solution .") ) ) ) (T (prompt "\nEntité sélectionnée n'est ni un cercle, ni un arc, ou n'est pas parallèle au SGC!") (command "_.undo" "_end") (command "_.u") ) ) ) (T (prompt "\nEntité sélectionnée n'est pas une ligne, ou n'est pas parallèle au SGC!") (command "_.undo" "_end") (command "_.u") ) ) ) (prompt "\nVous n'êtes pas dans le systeme de coordonnées général ! RECTIFIEZ S.V.P") ) (setvar "cmdecho" 1) (prin1) ) La routine d'info pour utiliser après coup (defun c:idclo ( / esel ename elist xd_list cnt10 cnt40 app_list app_sub_list xd_code xd_data ) (while (not (setq esel (entsel))) ) (setq ename (car esel)) (redraw ename 3) (setq elist (entget ename (list "ID_CLOTHOIDE-BONUSCAD$2002"))) (if (not (setq xd_list (assoc -3 elist))) (princ "\nAucune donnée d'objet étendue n'est associée a une clothoïde.") (setq xd_list (cdr xd_list) cnt10 0 cnt40 0) ) (while xd_list (setq app_list (car xd_list)) (textscr) (princ "\nApplication enregistrée : \t") (princ (car app_list)) (princ "\n\t\tATTENTION *** ATTENTION") (princ "\nToutes modifications de cette polyligne optimisée") (princ "\ninvalident une partie ou toutes ces informations.") (princ "\nIndices de construction d'ORIGINE de cette clothoïde.\n") (setq app_list (cdr app_list)) (while app_list (setq app_sub_list (car app_list)) (setq xd_code (car app_sub_list)) (setq xd_data (cdr app_sub_list)) (cond ((= 1010 xd_code) (cond ((= cnt10 2) (setq cnt10 (1+ cnt10)) (princ "\nFin de la clothoïde : \t") ) ((= cnt10 1) (setq cnt10 (1+ cnt10)) (princ "\nCentre du cercle : \t") ) ((= cnt10 0) (setq cnt10 (1+ cnt10)) (princ "\nOrigine clothoïde : \t") ) ) (princ (strcat (rtos (car xd_data) 2 3) " , " (rtos (cadr xd_data) 2 3) " , " (rtos (caddr xd_data) 2 3) ) ) ) ((= 1040 xd_code) (cond ((= cnt40 5) (setq cnt40 (1+ cnt40)) (princ "\nRayon du cercle : \t") (princ (rtos xd_data 2 3)) ) ((= cnt40 4) (setq cnt40 (1+ cnt40)) (princ "\nLongueur de la clothoïde : \t") (princ (rtos xd_data 2 3)) ) ((= cnt40 3) (setq cnt40 (1+ cnt40)) (princ "\nAngle Tau : \t") (princ (angtos xd_data (getvar "unitmode") 5)) ) ((= cnt40 2) (setq cnt40 (1+ cnt40)) (princ "\nDelta R : \t") (princ (rtos xd_data 2 3)) ) ((= cnt40 1) (setq cnt40 (1+ cnt40)) (princ "\nParamètre de la clothoïde : \t") (princ (rtos xd_data 2 3)) ) ((= cnt40 0) (setq cnt40 (1+ cnt40)) (princ "\nOrientation de l'infini : \t") (princ (angtos xd_data (getvar "unitmode") 5)) ) ) ) (T) ) (setq app_list (cdr app_list)) ) (setq xd_list (cdr xd_list)) ) (redraw ename 4) (prin1) ) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
didier Posté(e) le 28 octobre 2006 Posté(e) le 28 octobre 2006 coucou, pour répondre au "crustacé",je suis sur une machine, au moment présent,qui n'a pas d'AutoCad, encore moins de Covadis,mais dès que je peux, j'envoie un copie d'écran qui fera apparaître ce menu.. ami calmant Éternel débutant... Mon site perso : Programmer dans AutoCAD
(gile) Posté(e) le 28 octobre 2006 Posté(e) le 28 octobre 2006 Encore un super LISP de Bonuscad :D Juste un petit truc, j'aurais écrit différemment la routine matrix, depuis que je me suis intéressé aux matrices. ;;; VXV Retourne le produit scalaire de deux vecteurs (defun vxv (v1 v2) (apply '+ (mapcar '* v1 v2)) ) ;;; Applique une matrice à un vecteur (defun mxv (m v) (mapcar '(lambda (r) (vxv r v)) m) ) (defun matrix (pt) (mapcar '+ (mxv (list (trans '(1 0 0) 0 1 T) (trans '(0 1 0) 0 1 T) (trans '(0 0 1) 0 1 T) ) pt ) (trans '(0 0 0) 1 0) ) ) Mais il me semble bien que cette fonction, quelque soit la manière dont on l'écrit n'est qu'une autre façon, plus compliquée, pour faire : (trans pt 1 0) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
zebulon_ Posté(e) le 30 octobre 2006 Posté(e) le 30 octobre 2006 Bonjour, ( defun c:clot () ; Caractéristiques de la clothoide (setq R (getdist "\n Rayon final de la clothoide : ")) (setq L (getdist "\n Longueur de la clothoide : ")) (setq P (getdist "\n Pas de la clothoide : ")) (setq Ls 0) (setq S '(0 0)) (setq A (sqrt (* R L))) (command "_pline") (command "_non" S) ; Boucle (setq sortie nil) (while (not sortie) (setq Ls (+ Ls P)) (if (> Ls L) (progn (setq Ls L) (setq SORTIE T) ) ) (setq Rs (/ (* A A) Ls)) (setq Ns (/ Ls Rs)) (setq Xs (* Ls (- 1 (* Ns (/ Ns 40))))) (setq Ys (* Ls (- (/ Ns 6) (* Ns Ns (/ Ns 336))))) (setq S (List Xs Ys)) (command "_non" S) ) (command "") (princ) ) C'est ce dont je me sers pour tracer des clothoïdes. Je ne sais pas qui en est l'auteur. J'en profite pour lancer un appel à tout ceux qui font du tracé routier. Merci de tenir compte, dans vos tracés, de la présence éventuelle d'ouvrages d'art et d'éviter de mettre des clothoïdes et des variations de dévers juste à cet endroit. Je parle de petits ouvrages d'art, pas des viaducs bien entendu. Parce que c'est trop bête d'avoir un petit PS de 40 ou 50m de portée et de se colletiner une cloth + variation de dévers. Un ouvrage sur un alignement droit avec des dévers constants, c'est quand même plus simple pour tout le monde quand on fait du béton-armé (du dessinateur au maçon-coffreur) Merci pour eux... Amicalement Zebulon_ C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme) C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)
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