Bessé Posté(e) le 2 juin 2005 Posté(e) le 2 juin 2005 :P Bonjours à tous. Est ce que quelqu 'un à une méthode pour déssiner une hélice en 3D sur Autocad 2005. Pour déssiner les pales de l'hélice, j'ai éssayer de faire une extrusion suivant une polyligne 3D et une spline, mais sans aucun résultat. :mad: D'avance merci à celui ou celle qui pourra m'aider. :)
Eric Posté(e) le 2 juin 2005 Posté(e) le 2 juin 2005 Bonjour Avec les focntions de base d'AutoCAD c'est assez complexe à faire Mais il existe un lisp qui va créer une polyligne 3D avec de très petit segment de lignes en forme d'hélicoide qui te servira de chemin pour ton extrusion Va voir ce message (un peu en bas) tu trouveras ce lisp A plus Eric Eric est formateur, revendeur sur AutoCAD LT, DraftSight, ZWCAD, SketchUp et PDF2CAD
Eric Posté(e) le 2 juin 2005 Posté(e) le 2 juin 2005 Euh je viens de me rendre compte que tu voulais une hélice et pas une hélicoide :red: Bon ben ça c'est pas simple non plus, il va peut être falloir envisager l'utilisation de surfaces plutôt que de solides Eric est formateur, revendeur sur AutoCAD LT, DraftSight, ZWCAD, SketchUp et PDF2CAD
bonuscad Posté(e) le 2 juin 2005 Posté(e) le 2 juin 2005 Bonjour Peut être une aide à la construction vers ce lien Je ne sais pas si cela te seras d'un grand secours car je ne suis pas un pro dans les hélices. ;) Je te donne la version corrigée identique mais avec les commandes internationalisées et francisées. ; draw a helix ; mfuccaro@hotmail.com ; ----- November.2002 ----- ; (defun c:helix( / spin ri rf h tu segs old fil points h1 r1 s end i fi r x y ) (setq spin -1); -1=CW, 1=CCW (setq ri (getdist "\nRayon de la base: ") rf (getdist "\nRayon au sommet: ")) (initget (+ 1 4)) (setq h (getdist "Hauteur: ")) (initget (+ 1 2 4)) (setq tu (getreal "\nNombre de rotations: ")) (setq segs (getint "\nNombre de segments par révolution <20>: ")); more=smoother (if (= segs nil)(setq segs 20)) (setq old (getvar "osmode")) (setvar "cmdecho" 0) (setq fi1 (/ (* 2 PI) segs) i 0) (setq points (fix (* tu segs)) h1 (/ h points) r1 (/ (- rf ri) points) s (getpoint "Centre de la base: ") end (list (car s) (cadr s) (+ h (caddr s)))) (setvar "osmode" 0 ) (command "_.line" s end "") (command "_.chprop" "_l" "" "_c" 1 "") (command "_.3dpoly") (setq i 0) (repeat (1+ points) (setq fi (* i fi1) h (* i h1) r (+ ri (* i r1))) (setq x (* r (cos fi)) y (* spin r (sin fi))) (command (list (+ (car s) x) (+ (cadr s) y) (+ (caddr s) h))) (setq i (1+ i))) (command "") (setvar "osmode" old)) (princ "\nRoutine chargé. Taper HELIX au message commande.") (princ) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
gile Posté(e) le 2 juin 2005 Posté(e) le 2 juin 2005 Salut, S'il s'agit de dessiner une hélicoïde, voici un LISP qui utilise des arcs d'ellipse plutôt que des segments de droite. Le nombre de segments elliptiques, donné par l'utilisateur, définit la "résolution" de la courbe. Cette fonction est la base du ressort 3D ;;; 10/04/05 Fonction Hélicoïde ;;; c:helicoide Crée une succession d'arcs elliptiques jointifs figurant une hélicoïde. ;;; Le nombre d'arcs décrivant la longueur d'une spire est défini par l'utilisateur. ;;; Redéfinition de *ERROR* (defun hel_err (msg) (if (/= msg "Fonction annulée") (princ (strcat "\nErreur: " msg)) ) (command) (command "_ucs" "_restore" "scu_init") (command "scu" "_del" "scu_init") (command "_undo" "_end") (RESTORE_VAR) (setq *error* m:err m:err nil var_lst nil ) (princ) ) ;;; SAVE&SET_VAR & RESTORE_VAR ;;; ;;; SAVE&SET_VAR Enregistre la valeur initiale de la variable système dans une liste associative ;;; et lui attribue sa nouvelle valeur ;;; ex: (SAVE&SET_VAR "osmode" 0) -> !varlist (("osmode" . 43)) (getvar "osmode") 0 (defun SAVE&SET_VAR (var value) (if (getvar var) (progn (setq varlist (cons (cons var (getvar var)) varlist)) (setvar var value) ) (princ (strcat "\nErreur: variable AutoCAD rejetée: " var)) ) ) ;;; RESTORE_VAR Restaure leurs valeurs initiales aux variables système de "varlist" (defun RESTORE_VAR () (foreach pair varlist (if (/= (getvar (car pair)) (cdr pair)) (setvar (car pair) (cdr pair)) ) ) (setq varlist nil) ) ;;; ADD_Z Ajoute "val" à la coordonnée Z du point "pt" -accepte les points type (x y)- (defun ADD_Z (pt val) (setq pt (trans pt 0 0)) (list (car pt) (cadr pt) (+ (caddr pt) val)) ) ;;; Fonction principale (defun c:helicoide (/ seg sp long sens pas ray axe pt1 pt2 pt3 ang pointA point1 point2 point3 arc) (setq m:err *error* *error* hel_err ) (command "_undo" "_begin") (SAVE&SET_VAR "cmdecho" 0) (command "_ucs" "_save" "scu_init") (princ "helicoide") ;; Saisie des données (if (not (numberp *seg_prec*)) (setq *seg_prec* 12) ; Nombre de segments par défaut ) (if (setq seg (getint (strcat "\nEntrez le nombre de segments par spire <" (itoa *seg_prec*) ">: " ) ) ) (setq *seg_prec* seg) ; Nouvelle valeur du nombre de segments (setq seg *seg_prec*) ; Valeur précédente (ou défaut) ) (while (< seg 2) (alert "Le nombre de segments par spire ne peut être inférieur à 2." ) (setq seg (getint "\nEntrez le nombre de segments par spire: ") *seg_prec* seg ) ) (initget "Segments" 7) (if (= (setq sp (getint "\nEntrez le nombre de spires ou [segments]: ")) "Segments" ) (progn (initget 7) (setq long (getint "\nEntrez le nombre de segments à tracer: ")) ) (setq long (* sp seg)) ) (initget "Droite Gauche") (if (not (setq sens (getkword "\nIndiquez le sens du pas (Droite/Gauche) : ")) ) (setq sens "Droite") ; Sens du pas par défaut (Droite) ) (initget 7) (setq pas (getdist "\nSpécifiez la valeur du pas de l'hélice: ")) (initget "Diamètre" 7) (if (= (setq ray (getdist "\nSpécifiez le rayon de l'hélice ou [Diamètre]: ")) "Diamètre" ) (progn (initget 7) (setq ray (/ (getdist "Spécifiez le diamètre de l'hélice: ") 2)) ) ) (initget 1) (setq axe (getpoint "\nSpécifiez le point à la base de l'axe: ")) ;; Conversion des données (if (equal sens "Gauche") ; Pas à gauche (setq pas (- pas) seg (- seg) ) ) (setq pt2 (polar axe 0 ray) pt1 (polar axe (+ (angle axe pt2) (/ (* 2 pi) seg)) ray) ang (atan (distance pt2 pt1) (/ pas seg)) ; Angle de l'ellipse axe (ADD_Z axe (- (/ pas (* seg 2)))) ) ;; Tracé de l'hélicoïde (SAVE&SET_VAR "osmode" 0) (repeat long (setq pt1 pt2 axe (ADD_Z axe (/ pas seg)) pt2 (polar axe (+ (angle axe pt1) (/ (* 2 pi) seg)) ray) pt2 (ADD_Z pt2 (/ pas (* seg 2))) pt3 (polar axe (+ (angle axe pt1) (/ pi seg)) ray) pointA (trans axe 1 0) point1 (trans pt1 1 0) point2 (trans pt2 1 0) point3 (trans pt3 1 0) ) (command "_ucs" "_new" "3" axe pt1 pt3) (command "_ellipse" "_arc" "c" (trans pointA 0 1) ; Centre de l'ellipse (trans point3 0 1) ; Extrémité du petit axe (/ ray (sin ang)) ; Demie longueur du grand axe (trans point1 0 1) ; Départ de l'arc (trans point2 0 1) ; Fin de l'arc ) (command "_ucs" "_restore" "scu_init") ) (command "_ucs" "_delete" "scu_init") (command "_undo" "_end") (RESTORE_VAR) (setq *error* m:err m:err nil ) (princ) ) S'ils'agit de dessiner les pales d'une hélice, j'essayerais en transformant des surfaces réglées en solides avec le LISP Maille2S ou M2S qu'on doit pouvoir trouver sur le net (mais je ne sais pas où). Et ensuite je "taillerais" dans ces solides avec les opérations booléennes. Un ou des segments d'helicoide (CF ci-dessus) pourraient servir de base pour les surfaces réglées. A plus... [Edité le 2/6/2005 par gile]
gile Posté(e) le 2 juin 2005 Posté(e) le 2 juin 2005 Mille excuses, la routine ne pouvait fonctionner : j'avais oublié d'y inclure la définition de ADD_Z.L'erreur est maintenant réparée.
Bessé Posté(e) le 3 juin 2005 Auteur Posté(e) le 3 juin 2005 :P Bonjours et merci à tous. Je vais me plonger dans vos réponses qui font plaisir de bon matin. Bon week à tous et à la semaine prochaine pour pour le compte rendu détaillé de réussite (grace à vous) ou non. :casstet: TCHATCHAOOO!!!!
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