Aller au contenu

Comment dessiner une hélice 3d sur Autocad


Messages recommandés

Posté(e)

: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. :)

Posté(e)

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

Posté(e)

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]

Posté(e)

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.

Posté(e)

: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!!!!

 

 

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité