Aller au contenu

Les vis en3D?


Aïco

Messages recommandés

Salut et bienvenue,

 

La question que tu pose est récurente parce qu'on touche là les limites d'AutoCAD en 3D.

 

Une recherche sur hélicoïde, hélice, colimaçon, spirale, ressort... te permettra de lire plusieurs sujets à ce propos.

 

Il va falloir passer par de la programation, pour l'instant AutoCAD ne permet pas l'extusion sur un chemin en spline 3D.

 

Je te propose la méthode que j'utilise pour les limons d'escaliers en colimaçon. Tu vas trouver ici un LISP pour dessiner une hélicoïde en plusieurs segments (en fait des arcs d'ellipse).

En dessinant un segment d'hélicoïde par arrête du filet, avec la commande surface réglée, tu peux faire une "portion" de filet en surfacique.

Si tu veux du solide, il faudra solidifier les surfaces avec M2S et faire une soustraction.

Ensuite tu peux reproduire cette portion en réseau hélicoïdal avec ce LISP :

 

Nouvelle version

Ammélioration des entrées utilisateurs concernant les angles, accepte désormais :

- soit l'angle décrit, soit l'angle entre les éléments

- des angles supérieurs à un tour complet

- des entrés directement sous forme de formules mathématiques (du types de celles utilisées avec la calculatrice géométrique d'AutoCAD).

 

En attendant une petite boite de dialogue...

 

;;; C:RES_HEL Crée un réseau hélicoïdal

;;; Redéfinition de *error*
(defun RES_HEL_ERR (msg)
 (if (or
(= msg "Fonction annulée")
(= msg "quitter / sortir abandon")
     )
   (princ)
   (princ (strcat "\nErreur: " msg))
 )
 (command)
 (command "_undo" "_end")
 (setvar "cmdecho" v1)
 (setvar "osmode" v2)
 (setq	*error*	m:err
m:err nil
 )
 (princ)
)

;;;Fonction principale

(defun C:RES_HEL (/ ss nb ang ht axe)
 (setq	m:err	*error*
*error*	RES_HEL_ERR
v1	(getvar "cmdecho")
v2	(getvar "osmode")
 )
 (command "_undo" "_begin")
 (setvar "cmdecho" 0)
 (while (not (setq ss (ssget))))
 (initget 7)
 (setq nb (getint "\nEntrez le nombre d'éléments du réseau: "))
 (initget 1)
 (setq ht (getdist "\nSpécifiez le décalage en hauteur: "))
 (initget 1)
 (setq axe (getpoint "\nSpécifiez le centre du réseau: "))
 (initget "Décrit Elément")
 (if
   (=
     (getkword
"\nPrécisez : angle décrit ou angle entre les éléments [Décrit/Elément] : "
     )
     "Elément"
   )
    (setq ang_t "angle entre les éléments")
    (setq ang_t "angle décrit")
 )
 (initget 4)
 (if (not (setq ang
	  (getreal
	    (strcat "\nEntrez l'" ang_t " ou : ")
	  )
   )
     )
   (setq ang
   (atof
     (angtos (+	(getangle axe "\nSpécifiez le second point: ")
		(getvar "ANGBASE")
	     )
     )
   )
   )
 )
 (if (= ang_t "angle décrit")
   (setq ang (/ ang nb))
 )
 (initget "Horaire Trigonométrique")
 (if
   (=
     (getkword
"\nSpécifiez le sens de rotation [Horaire/Trigonométrique] : "
     )
     "Horaire"
   )
    (setq ang (- ang))
 )
 (if (= (getvar "ANGDIR") 1)
   (setq ang (- ang))
 )
 (setvar "osmode" 0)
 (repeat (1- nb)
   (command "_copy" ss "" axe axe)
   (command "_rotate" ss "" axe ang)
   (command "_move" ss "" '(0 0) (list 0 0 ht))
 )
 (command "_undo" "_end")
 (setvar "cmdecho" v1)
 (setvar "osmode" v2)
 (setq	*error*	m:err
m:err nil
 )
 (princ)
)

 

C'est fastidieux, mais le résultat est correct.

 

Une autre routine dessine une polyligne 3D qui peut servir de chemin d'extrusion mais les objets extrudés ont tendance à partir en vrille (du moins avec moi).

 

En espérant avoir répondu, ne serait-ce que partiellement, à tes attentes.[Edité le 31/12/2005 par (gile)]

 

[Edité le 1/1/2006 par (gile)]

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Mais je crois,

( ce n'est pas mon domaide ! ),

que OLI a mis en téléchargement ce que tu cherches !

 

Des blocs de vis dynamiques....cherches sur le forum !

 

@+

 

 

Ah non, ce n'est pas moi mais Eric il me semble. Du moins a t'il mis en ligne une vis parmétrique

L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai.
"Il vaut mieux mobiliser son intelligence sur des conneries, que sa connerie sur des choses intelligentes" - Devise Shadok.
"ceux qui ne se souviennent pas du passé sont condamnés à le revivre" George Santayana

Ma bibliothèque de blocs électrique :symbole elec.dwg

Lien vers le commentaire
Partager sur d’autres sites

Est ce que ce lisp trouvé ICI pourrait faire l'affaire.

 

Le même en language internationalisé:

;-------------------------------------------------------------------
; THREAD.LSP   Creates 3D solid (ACIS) threads.          3/3/98
;
; Corrected  3/4/98
; Corrected again 3/6/98
;
;                                       written by: Jim Fitzgerald
;
; Credit goes to Bernd Hoffmann and Ken Shearron for showing
; me this modeling technique and helping me spot
; some bugs.
;
;-------------------------------------------------------------------
;
; This is a way to make 3D solid external threads in
; AutoCAD R13 and R14. Just so you know, it's not
; geometrically correct, but it's pretty darn close.
; There is no error trapping or anything like that.
;
; You are prompted for the Nominal thread size
; (actual size like .190 or .112, not #10, #4, etc..),
; threads per inch (tpi), the total length of the thread, and a
; center point. The program works by creating a single thread
; and then arraying it out to the proper length. The threads are
; drawn a little long and then sliced off to the correct length.
; This program only draws the thread, you're on your own drawing
; the rest of the screw. For internal threads, just subtract this from
; another solid.
;
; Note, the threads created by this can make for some rather big files,
; so make sure your system is up to it. Also, it might take a while
; to union all of the single threads together so be patient.
;
;-------------------------------------------------------------------
; This is gratuiciel. Do what you want with it. If you modify it,
; please take my name off of it so I don't have to support your
; software.
;
; All the typical legal stuff applies. I make no claims that
; this actually works. Use it at your own risk. You can't sue me
; for any problems that you have as a result of using this
; (either personal or professional). Don't drink and
; drive. Eat your vegetables, and call your mother.
;-------------------------------------------------------------------

(defun c:thread ( / nom pitch length_t cpt total pt1 pt1z pt2 pt3 ang pt1a
pt1az pt3a pt1b pt1bz pt3b pt4 pt4 pt6 pt7 pt8 pt9 pt10 pt11 pt12 ss
osm)

  ;-------------------------------------------------------------------
  ; Gets the nominal size, tpi, and total length
  ; then calculates a bunch of geometry points.
  ; All running osnaps are turned off as well.
  ;-------------------------------------------------------------------

  (setq nom (getdist "\nNominal size: ")
     pitch (/ 1.0 (getreal "\nThreads per Inch: "))
     length_t (getdist "\nTotal thread length: ")
     cpt (getpoint "Center point: ")
     total (+ (fix (/ length_t pitch)) 2)
     pt1 (list (- (car cpt) (/ nom 2.0)) (cadr cpt))
     pt1z (list (- (car cpt) (/ nom 2.0)) (cadr cpt) 1.0)
     pt2 (polar pt1 (/ (* 30.0 pi) 180.0) 0.1)
     pt3 (list (+ (car pt1) nom) (+ (cadr pt1) (/ pitch 2.0)))
     ang (angle pt1 pt3)
     pt1a (polar pt1 (+ ang (/ pi 2.0)) pitch)
     pt1az (list (car pt1a) (cadr pt1a) 1.0)
     pt3a (polar pt1a ang nom)
     pt1b (polar pt1 (- ang (/ pi 2.0)) pitch)
     pt1bz (list (car pt1b) (cadr pt1b) 1.0)
     pt3b (polar pt1b ang nom)
     pt4 (polar pt3 (/ (* 150.0 pi) 180.0) 0.1)
     pt5 (inters pt1 pt2 pt3 pt4 nil)
     pt6 (list (car pt5) (cadr cpt))
     pt7 (polar pt1 (/ (* 330.0 pi) 180.0) 0.1)
     pt8 (polar pt3 (/ (* 210.0 pi) 180.0) 0.1)
     pt9 (inters pt1 pt7 pt3 pt8 nil)
     pt10 (list (car pt9) (cadr pt3))
     pt11 (polar cpt (/ pi 2.0) pitch)
     pt12 (polar pt11 (/ pi 2.0) length_t)
     osm (getvar "osmode")
  )
  (setvar "osmode" 0)

  ;-------------------------------------------------------------------
  ; Draws two cones which are inverted and offset 1/2 the pitch.
  ; The cones are each sliced at the angle of the crest line
  ; and then unioned together
  ;-------------------------------------------------------------------

  (princ "\nCreating thread...this might take a while.")
  (command "_.pline" pt1 pt5 pt6 "_c")
  (command "_.revolve" "_l" "" pt5 pt6 "")
  (command "_.slice" "_l" "" pt1 pt3 pt1z pt5)
  (command "_slice" "_l" "" pt1a pt3a pt1az pt3)
  (setq ss (ssadd (entlast)))
  (command "_.pline" pt3 pt9 pt10 "_c")
  (command "_.revolve" "_l" "" pt9 pt10 "")
  (command "_.slice" "_l" "" pt1 pt3 pt1z pt9)
  (command "_.slice" "_l" "" pt1b pt3b pt1bz pt3)
  (setq ss (ssadd (entlast) ss))
  (command "_.union" ss "")

  ;-------------------------------------------------------------------
  ; This above solid is sliced in half and then mirrored. This
  ; creates the "helix" in the thread. The height of the single
  ; thread is actually equal to twice the pitch, but the
  ; excess is either absorbed or cut off in the last step
  ;-------------------------------------------------------------------

  (command "_.slice" ss "" "xy" cpt "_b")
  (setq ss (ssadd (entlast) ss))
  (command "_.mirror" "_l" "" pt1 "@10<0" "_y")
  (command "_.union" ss "")

  ;-------------------------------------------------------------------
  ; The thread is arrayed and then unioned together (this part can
  ; take a while). The resulting solid is cut to the specified length.
  ;-------------------------------------------------------------------

  (setq e (entlast))
  (command "_.-array" ss "" "_r" total 1 pitch)
  (repeat (1- total)
     (setq e (entnext e)
        ss (ssadd e ss)
     )
  )
  (command "_.union" ss "")
  (command "_.slice" "_l" "" "_zx" pt11 pt12)
  (command "_.slice" "_l" "" "_zx" pt12 pt11)
  (princ "\nDone")
  (setvar "osmode" osm)
  (princ)
)

 

[Edité le 24/10/2005 par bonuscad]

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Lien vers le commentaire
Partager sur d’autres sites

Encore un très joli coup de Bonuscad !!!

 

La routine marche très bien, il faudrait juste remplacer la variable length qui est le nom d'une fonction AutoLISP pour éviter le message :

 

Affectation à un symbole protégé: LENGTH Voulez vous entrer une boucle d'arrêt ?

 

Une petite traduction des invites et c'est nickel !!!

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Bien vu pour le symbole length ;)

 

Mais sous qu'elle version travailles tu? car je ne me souviens pas d'avoir eu le message.

L'erreur malgré tout, en reste une.

 

Je CORRIGE à la place de l'auteur dans le post précédent.

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Lien vers le commentaire
Partager sur d’autres sites

J'ai eu ce message sous 2006 dans une boite de dialogue qui propose oui ou non pour la boucle d'arrêt.

 

PS : pour voir le "subterfuge" utilisé pour simuler la vis, diminuer le nombre de filets par "inch" (par unité de dessin, en fait) : entrer, par exemple successivement 10 0.2 20 et faire orbite3d.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Désolé les copains ! J’était occupé. ;)

Merci à tous pour votre intéressement.

Bravo Bonuscad ! le programme est au tope (à quelque détaille prêt). :D

Les routines LISP c pas vraiment mon fort !

Quelqu’un pourrais me faire une petite interprétation des lignes de ce programme !?

Thanks !!

 

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Une sorte de pas à pas en image de la création d'un filet, le LISP en fait ensuite un réseau, unit les éléments et coupe à la longueur spécifiée :

http://img361.imageshack.us/img361/2798/vis5ci.jpg

 

Pour les explications, j'ai fait une vague traduction des invites et des commantaires :

; THREAD.LSP Creates 3D solid (ACIS) threads. 3/3/98
;
; Corrected 3/4/98
; Corrected again 3/6/98
;
; written by: Jim Fitzgerald
;
; Credit goes to Bernd Hoffmann and Ken Shearron for showing
; me this modeling technique and helping me spot
; some bugs.
;
;-------------------------------------------------------------------
;
; This is a way to make 3D solid external threads in
; AutoCAD R13 and R14. Just so you know, it's not
; geometrically correct, but it's pretty darn close.
; There is no error trapping or anything like that.
;
; You are prompted for the Nominal thread size
; (actual size like .190 or .112, not #10, #4, etc..),
; threads per inch (tpi), the total length of the thread, and a
; center point. The program works by creating a single thread
; and then arraying it out to the proper length. The threads are
; drawn a little long and then sliced off to the correct length.
; This program only draws the thread, you're on your own drawing
; the rest of the screw. For internal threads, just subtract this from
; another solid.
;
; Note, the threads created by this can make for some rather big files,
; so make sure your system is up to it. Also, it might take a while
; to union all of the single threads together so be patient.
;
;-------------------------------------------------------------------
; This is gratuiciel . Do what you want with it. If you modify it,
; please take my name off of it so I don't have to support your
; software.
;
; All the typical legal stuff applies. I make no claims that
; this actually works. Use it at your own risk. You can't sue me
; for any problems that you have as a result of using this
; (either personal or professional). Don't drink and
; drive. Eat your vegetables, and call your mother.
;-------------------------------------------------------------------
;
; Traduction littérale approximative des invites et commentaires: Gile

(defun c:thread ( / nom pitch length_t cpt total pt1 pt1z pt2 pt3 ang pt1a
pt1az pt3a pt1b pt1bz pt3b pt4 pt4 pt6 pt7 pt8 pt9 pt10 pt11 pt12 ss
osm)

;-------------------------------------------------------------------
; Saisit la taille nominale, le nombre de filets
; par millimètres, et la longueur totale puis calcule
; un tas de points géométriques.
; Tous les accrochages aux objets sont désactivés.
;-------------------------------------------------------------------

(setq nom (getdist "\nTaille nominale: ")
pitch (/ 1.0 (getreal "\nFilets par millimètre: "))
length_t (getdist "\nLongueur totale du filetage: ")
cpt (getpoint "Point d'axe: ")
total (+ (fix (/ length_t pitch)) 2)
pt1 (list (- (car cpt) (/ nom 2.0)) (cadr cpt))
pt1z (list (- (car cpt) (/ nom 2.0)) (cadr cpt) 1.0)
pt2 (polar pt1 (/ (* 30.0 pi) 180.0) 0.1)
pt3 (list (+ (car pt1) nom) (+ (cadr pt1) (/ pitch 2.0)))
ang (angle pt1 pt3)
pt1a (polar pt1 (+ ang (/ pi 2.0)) pitch)
pt1az (list (car pt1a) (cadr pt1a) 1.0)
pt3a (polar pt1a ang nom)
pt1b (polar pt1 (- ang (/ pi 2.0)) pitch)
pt1bz (list (car pt1b) (cadr pt1b) 1.0)
pt3b (polar pt1b ang nom)
pt4 (polar pt3 (/ (* 150.0 pi) 180.0) 0.1)
pt5 (inters pt1 pt2 pt3 pt4 nil)
pt6 (list (car pt5) (cadr cpt))
pt7 (polar pt1 (/ (* 330.0 pi) 180.0) 0.1)
pt8 (polar pt3 (/ (* 210.0 pi) 180.0) 0.1)
pt9 (inters pt1 pt7 pt3 pt8 nil)
pt10 (list (car pt9) (cadr pt3))
pt11 (polar cpt (/ pi 2.0) pitch)
pt12 (polar pt11 (/ pi 2.0) length_t)
osm (getvar "osmode")
)
(setvar "osmode" 0)

;-------------------------------------------------------------------
; Dessine deux cones qui sont inversés et décalés d'un demi pas.
; Chaque cone est coupé à l'angle de la ligne de crête
; et ils sont unis.
;-------------------------------------------------------------------

(princ "\nCréation du filetage...çà peut prendre un peu de temps.")
(command "_.pline" pt1 pt5 pt6 "_c")
(command "_.revolve" "_l" "" pt5 pt6 "")
(command "_.slice" "_l" "" pt1 pt3 pt1z pt5)
(command "_slice" "_l" "" pt1a pt3a pt1az pt3)
(setq ss (ssadd (entlast)))
(command "_.pline" pt3 pt9 pt10 "_c")
(command "_.revolve" "_l" "" pt9 pt10 "")
(command "_.slice" "_l" "" pt1 pt3 pt1z pt9)
(command "_.slice" "_l" "" pt1b pt3b pt1bz pt3)
(setq ss (ssadd (entlast) ss))
(command "_.union" ss "")

;-------------------------------------------------------------------
; Le solide ci-dessus est coupé en deux et une moitié est réfléchie.
; Cela crée "l'hélice" du filetage. La hauteur de ce filet est pour
; l'instant égale au double du pas, mais l'excès sera soit absorbé
; soit coupé à la dernière étape.
;-------------------------------------------------------------------

(command "_.slice" ss "" "xy" cpt "_b")
(setq ss (ssadd (entlast) ss))
(command "_.mirror" "_l" "" pt1 "@10(command "_.union" ss "")

;-------------------------------------------------------------------
; Le filet est multiplié en réseau puis l'ensemble est uni (cette
; partie peut prendre un peu de temps).
; Le solide résultant est coupé à la longueur spécifiée.
;-------------------------------------------------------------------

(setq e (entlast))
(command "_.-array" ss "" "_r" total 1 pitch)
(repeat (1- total)
(setq e (entnext e)
ss (ssadd e ss)
)
)
(command "_.union" ss "")
(command "_.slice" "_l" "" "_zx" pt11 pt12)
(command "_.slice" "_l" "" "_zx" pt12 pt11)
(princ "\nDone")
(setvar "osmode" osm)
(princ)
)

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

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é