Aller au contenu

Tronc de cône 3d plein ou creux et déport


usegomme

Messages recommandés

; usegomme le 17/12/2008
; tronc de cone plein ou creux en 3d  version 1.1

(defun c:trc (/ pd pf pfd eptub b r b2 r2 r3 axered trc h) 
 (if (not tuy:ep) (setq tuy:ep 0));; définie aussi par tuy.lsp
 (setq pd "Epaisseur")
 (while (= pd "Epaisseur")
   (initget "Epaisseur")
   (setq pd (getpoint (strcat "\nPoint de départ de la reduction ou  = "(rtos tuy:ep 2 4)"  :")))
   (if (not pd) (setq pd "Epaisseur"))
   (if (= pd "Epaisseur")
     (progn
       (setq eptub (getdist (strcat "\nEpaisseur tube ou 2 pts <" (rtos tuy:ep 2 4) ">: ")))
       (if eptub (setq tuy:ep eptub))
     ) 
   )
 )
 (initget "Hauteur")
 (if pd (setq pf ( getpoint  pd "\n direction et  : ")))
 (if (or (not pf)(= pf "Hauteur"))
  (progn
  (setq h (getdist "\nHauteur du tronc de cone:")) 
   (setq pf (list (car pd)(cadr pd) h))
  )
 )
 (cond
   ((and pd pf) 
     (command "_undo" "_be")
     (command "_line" "_none" pd "_none" pf "") 
     (setq axered (entlast))
     (command "_ucs" "_zaxis" "_none" pd "_none" pf)
     (setq pd (trans (cdr (assoc 10 (entget axered))) 0 1))
     (setq pf (trans (cdr (assoc 11 (entget axered))) 0 1))
     (command "_circle" "_none" pd)
     (while (not (zerop (getvar "cmdactive")))(command pause))
     (setq b (entlast))
     (setq r (cdr (assoc 40 (entget b))))
     (command "_circle" "_none" pf)
     (while (not (zerop (getvar "cmdactive")))(command pause))
     (setq b2 (entlast))
     (setq r2 (cdr (assoc 40 (entget b2))))
     (initget "Tangent")
     (setq pfd (getpoint pf "\déport [/Tangent]:"))
     (cond ((= pfd "Tangent")(setq pfd nil)
         (setq a (getangle  pf "\n Tangent de quel coté ?"))        
        (if a (setq pfd (polar pf a (- r r2))))
       )
     )
     (if pfd (command "_move" b2 "" "_none" pf "_none" pfd))
     (entdel axered)
     (command "_loft" b b2 "" "")
     (setq trc (entlast))
     ;;;;;;;;;;;;;;;;;;;;;;;;;;;; entonnoir si épaisseur définie 
     (cond 
       ((< 0.0 tuy:ep)
         (if (>= 0 (setq r (- r tuy:ep))) (setq r 0.00001)) 
         (command "_circle" "_none" pd r)
         (setq b (entlast))
         (if (>= 0 (setq r3 (- r2 tuy:ep))) (setq r3 0.00001))
         (if pfd (setq pf pfd))
         (command "_circle" "_none" pf r3)
         (setq b2 (entlast))
          ;;; pour conserver par défaut le dernier rayon valable
         (command "_circle" "_none" pf r2)
         (entdel (entlast))
          ;;;
         (command "_loft" b b2 "" "")
         (command "_subtract" trc "" "_L" "")
       )
     )
     ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;   
     (command "_ucs" "_p")
     (command "_undo" "_e")
   ) 
 ) 
 (princ)
) 

 

 

Une petite modif pour concerver le dernier rayon de cercle valable , c'est à dire sans l'épaisseur

déduite par défaut dans la cde cercle , ce qui permet de repartir avec le bon rayon si par exemple on veut tracer le tube qui prolonge l' entonnoir , avec le même lisp bien sûr.

 

[Edité le 17/12/2008 par usegomme]

Lien vers le commentaire
Partager sur d’autres sites

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é