Aller au contenu

dessiner un Ecrou H en LISP


Messages recommandés

Posté(e)

Bonsoir à toutes et à tous,

 

je prend le relais du message suivant, d'un nouvel arrivant Yatch qui a eu des petits soucis pour publier son sujet dans le Forum... :casstet: c'est pas grave, ce sera une donation...!!! :D

 

Bienvenu à toi. :D

 

Son message original :

Bonjour,

je suis un petit nouveau qui doit réaliser un exo en lisp.

Ecrire un macro permettant d'insérer un écrou dans un dessin.

Je ne maitrise pas encore bien le lisp et si par hasard quelqu'un avait déjà réaliser ce type de programme et qu'il pouvait me mettre sur la voie.....

 

Merci

 

Voici le cahier des charges en PDF...

 

Je pense que tous nos amies et amis LISPeux... (c'est pas une maladie) doivent avoir ça dans leur tablette !

 

Merci de vos réponses à Yatch

 

Christian

 

[Edité le 1/12/2004 par rebcao]

Formateur, Consultant Expert AutoCAD, REVIT MEP, INVENTOR, télécharger , des Outils AutoCAD...

cad123 @ wanadoo.fr (enlever les espaces de part et d'autre de @)

Posté(e)

Voiçi deux programme qui peuvent servir de base pour créer celui qui répondra à tes besoins.

Le premier que tu retrouveras sur WWW.afralisp.com

 

;;;*THIS PARAMETRIC ROUTINE DRAWS MECHANICAL BOLTS (GR. 4.6)

;;;*ELEVATION

;;;*Written by K. Ramage October 1994.

;;;*--------------------------------------------------------

(defun C:BOLT (/ siz size file fp item data maxs count

chrct numb dlist N S W E P1 P2

P3 P4 P5 P6 P7 P8 P9 P10 P11

P12 P13 P14 ANG IP P15 P16 P17 P18

P19 P20 P21 P22 P23 P24 P25 NAMES

)

;;;*---------------------------------------------------------

;;;*CONVERT TO RADIANS

(setq N (* pi (/ 90.0 180.0))

S (* pi (/ 270.0 180.0))

W pi

E 0

ANG (* pi (/ 30.0 180.0))

) ;setq

;;;*----------------------------------------------------------

;;;*INITIALISE

(initerr)

(setvar "CMDECHO" 0)

(setvar "BLIPMODE" 0)

(setq NAMES '("M6" "M8" "M10" "M12" "M16" "M20" "M24" "M30" "M36"))

(setq dcl_id (load_dialog "BOLT.dcl"))

(if (not (new_dialog "BOLT" dcl_id))

(setq userclick nil)

)

(start_list "selections")

(mapcar 'add_list NAMES)

(end_list)

(action_tile

"cancel"

"(done_dialog) (setq userclick nil)"

)

(action_tile

"accept"

(strcat

"(progn (setq SIZ (atof (get_tile \"selections\")))"

" (done_dialog)(setq userclick T))"

)

)

(start_dialog)

(unload_dialog dcl_id)

(if userclick

(progn

(setq SIZ (fix SIZ))

(setq SIZ (nth SIZ NAMES))

;;;*----------------------------------------------------------

;;;*FILE & INFORMATION RETRIEVAL ROUTINE.

(setq dlist nil

size (strcat "*" siz)

file (findfile "BOLT.DAT")

fp (open file "r")

item (read-line fp)

);setq

(while item

(if (= item size)

(setq data (read-line fp)

item nil

);setq

(setq item (read-line fp))

);if

);while

(if data

(progn

(setq maxs (strlen data)

count 1 chrct 1

);setq

(while (< count maxs)

(if (/= "," (substr data count 1))

(setq chrct (1+ chrct))

(setq numb (atof (substr data (1+ (- count chrct)) chrct))

dlist (append dlist (list numb))

chrct 1

);setq

);if

(setq count (1+ count))

);while

(setq numb (atof (substr data (1+ (- count chrct))))

dlist (append dlist (list numb))

);setq

);progn

);if data

(close fp)

;;;*-----------------------------------------------------------

;;;*-----------------------------------------------------------

;;;*THIS ROUTINE DRAWS A MECHANICAL BOLT.

;;;*

(mapcar 'set '(B A C) dlist)

(initget 1)

(setq IP (getpoint "\nInsertion Point: "))

(setvar "OSMODE" 0)

(setq B1 (* (sin ANG) (/ A 2))

B2 (* B1 2)

R (/ B2 (sin ANG))

R1 (sqrt (- (* R R) (* B1 B1)))

TH (- R R1)

P1 (polar IP W B1)

P2 (polar P1 W (/ B1 2))

P3 (polar P1 W (- B1 TH))

P4 (polar P3 W TH)

P5 (polar P4 N TH)

P6 (polar P5 N (- C TH TH))

P7 (polar P6 N TH)

P8 (polar P7 E TH)

P9 (polar P8 E (- (/ B1 2) TH))

P10 (polar P9 E (/ B1 2))

P11 (polar P10 E B1)

P12 (polar P11 E B1)

P13 (polar P12 E (/ B1 2))

P14 (polar P12 E (- B1 TH))

P15 (polar P14 E TH)

P16 (polar P15 S TH)

P17 (polar P16 S (- C TH TH))

P18 (polar P17 S TH)

P19 (polar P18 W TH)

P20 (polar P19 W (- (/ B1 2) TH))

P21 (polar P20 W (/ B1 2))

P22 (polar P1 N TH)

P23 (polar P10 S TH)

P24 (polar P12 S TH)

P25 (polar P21 N TH)

) ;setq

(mark)

(command "PLINE" IP "W" "0.0" "" P4 P6

P8 P14 P16 P18 IP "" "PLINE"

P1 P23 "" "PLINE" P21 P24 ""

"PLINE" P6 "ARC" "S" P9 P23 ""

"PLINE" P23 "ARC" "S" P11 P24 ""

"PLINE" P24 "ARC" "S" P13 P16 ""

) ;command

(prompt "\nRotation Angle: ")

(command "ROTATE"

(catch)

""

IP

pause

) ;command

);progn

);if

(reset)

(princ)

) ;defun C:BOLT

;;*----------------------------------------------------------------------

(defun MARK ( / val)

(setq val (getvar "cmdecho"))

(setvar "cmdecho" 0)

(if (setq #mark (entlast))

nil

(progn

(entmake '( (0 . "POINT") (10 0.0 0.0 0.0)))

(setq #mark (entlast))

(entdel #mark)

) )

(setvar "cmdecho" val)

(princ)

)

;*

;;;*-------------------------------------------------------------------

;* CATCH starts at MARK and retrieves to the end of the database.

(defun CATCH ( / ss)

(if #mark

(progn

(setq ss (ssadd))

(while (setq #mark (entnext #mark))

(ssadd #mark ss)

);while

ss

);progn then

(prompt "\n#MARK not set. Run MARK before CATCH.\n") ;else

);if

);defun

(princ)

;* end of CATCH.LSP

;;;*---------------------------------------------------------

(defun initerr ()

(setq oldlayer (getvar "clayer"))

(setq oldsnap (getvar "osmode"))

(setq oldpick (getvar "pickbox"))

(setq temperr *error*)

(setq *error* trap)

; (mark)

(princ)

) ;defun

;;;*===========================================================

(defun trap (errmsg)

(command nil nil nil)

(if (not (member errmsg '("console break" "Function Cancelled"))

)

(princ (strcat "\nError: " errmsg))

) ;

; (command "erase" (catch) "")

(setvar "clayer" oldlayer)

(setvar "blipmode" 1)

(setvar "menuecho" 0)

(setvar "highlight" 1)

(setvar "blipmode" 1)

(setvar "osmode" oldsnap)

(setvar "pickbox" oldpick)

(princ "\nError Resetting Enviroment ")

(terpri)

(setq *error* temperr)

(princ)

) ;defun

;;;*===========================================================

(defun reset ()

(princ "\nRestoring Settings")

(setq *error* temperr)

(setvar "clayer" oldlayer)

(setvar "blipmode" 1)

(setvar "menuecho" 0)

(setvar "highlight" 1)

(setvar "blipmode" 1)

(setvar "osmode" oldsnap)

(setvar "pickbox" oldpick)

(princ)

) ;defun

 

(princ)

 

Et le fichier DCL de la boîte de dialogue:

 

dcl_settings : default_dcl_settings { audit_level = 3; }

BOLT : dialog {

label = "Boulons - Elevation";

: list_box {

label = "Dimension :";

key = "selections";

height = 12;

}

:row {

: button {

label = "OK";

key = "accept";

width = 8;

fixed_width = true;

}

: button {

label = "Cancel";

is_cancel = true;

key = "cancel";

width = 8;

fixed_width = true;

}

}

:text_part {

label = "Conçu et créé";

}

:text_part {

label = "par Kenny Ramage";

}

}

Le fichier .dat

;;;*BOLT ELEVATION DATA

*M6

10.0,11.5,4.38

*M8

13.0,15.0,5.88

*M10

17.0,19.9,7.45

*M12

19.0,21.9,8.45

*M16

24.0,27.7,10.45

*M20

30.0,34.6,13.9

*M24

36.0,41.6,15.9

*M30

46.0,53.1,20.05

*M36

55.0,63.5,24.05

;;;*-------------------

;

 

Le deuxième:

 

;Tip1638: BOLT.LSP Hex Bolts ©2000, Vito Messina

 

(defun C:BOLTS ()

(setq XOSMODE (getvar "osmode"))

(setvar "OSMODE" 0)

(setq DEFBS BS)

(setq DEFLG LG)

(setq DEFT TT)

(setq DEFWT WT)

(setq DEFANG ANG)

(setq DEFHEADOP HEADOP)

(princ "\nEntrer diametre du boulon <")

(princ DEFBS)

(setq BS (getreal " in >:"))

(if (= BS NIL)

(setq BS DEFBS)

) ;_ end of if

(princ "Dessine tête de boulon(D) seulement ou (E)boulon en entier <")

(princ DEFHEADOP)

(setq HEADOP (getstring ">:"))

(if (= HEADOP "")

(setq HEADOP DEFHEADOP)

) ;_ end of if

(setq HEADOP (strcase HEADOP))

(if (= HEADOP "E")

(progn (princ "Entrer longueur de l'étreinte (gap) <")

(princ DEFLG)

(setq LG (getreal " in >:"))

(if (= LG NIL)

(setq LG DEFLG)

) ;_ end of if

(princ "Montrer corps du boulon comme(S)olid/(H)idden-caché/(N)one-aucun <")

(princ DEFT)

(setq TT (getstring ">:"))

(if (= TT "")

(setq TT DEFT)

) ;_ end of if

(setq TT (strcase TT))

) ;_ end of progn

) ;_ end of if

(if (= HEADOP "D")

(setq LG 0.0)

) ;_ end of if

(princ "Entrer épaisseur de la rondelle <")

(princ DEFWT)

(setq WT (getreal " in>:"))

(if (= WT NIL)

(setq WT DEFWT)

) ;_ end of if

(princ "\nEntrer orientation angle <")

(princ DEFANG)

(setq ANG (getreal " Degeers >:"))

(if (= ANG NIL)

(setq ANG DEFANG)

) ;_ end of if

(setq ANG (+ ANG 90.0))

(command "ucs" "z" ANG "")

(princ)

(setq P0 (getpoint "\n Sélectionné point d'insertion: "))

;(setq p0 (list (- (car p0) wt) (cadr p0)))

(setq HEADOP (strcase HEADOP))

(setq B (/ 1.0 2.0)) ;bolt rad

(setq C1 (/ 15.0 16.0)) ;width across corners

(setq C2 (/ 7.0 16.0))

(setq CH (/ 11.0 16.0)) ;head height

(setq C3 (/ 21.0 32.0))

(setq C4 (/ 7.0 16.0))

(setq C5 (/ 1.5 1.0))

(setq C6 (/ 1.0 8.0)) ;champher

(setq C7 (/ 1.0 4.0))

(setq C8 (/ 3.0 8.0)) ;3 threads

(setq WD (* 1.125 BS)) ;washer dia

(setq BD (* BS B)) ;bolt dia

(setq LH (* CH BS)) ;head height

(setq LT (* C8 BS))

(setq LB (+ LH LG))

(setq L1 (* C1 BS))

(setq L2 (* C2 BS))

(setq L3 (* C3 BS))

(setq L4 (* C4 BS))

(setq L5 (* C5 BS))

(setq L6 (* C6 BS))

(setq LB1 (- LB L6))

(setq CL1 (+ LB L1 C7 C7 LT)) ;length of cl

(setq CL (+ L1 C7))

(setq BD1 (- BD L6))

(setq THL (+ BS BS C7)) ;head washer

(setq W1 (list (car P0) (+ (cadr P0) WT)))

(setq W2 (list (+ (car W1) WD) (cadr W1)))

(setq W3 (list (car W2) (- (cadr W2) WT)))

(setq W4 (list (- (car W3) L1 WD) (cadr W3)))

(setq W5 (list (+ (car P0) L4) (cadr P0))) ;Bolt Head

(setq P1 (list (+ (car P0) L1) (+ (cadr P0) WT)))

(setq P2 (list (car P1) (+ (cadr P1) L2)))

(setq P3 (list (car P0) (+ (cadr P1) LH)))

(setq P4 (list (+ (car P3) L3) (cadr P3)))

(setq P5 (list (+ (car P0) L4) (+ (cadr P0) WT)))

(setq P6 (list (car P5) (+ (cadr P5) L2)))

(setq P7 (list (- (car P0) L4) (+ (cadr P0) WT)))

(setq P8 (list (car P7) (+ (cadr P7) L2))) ;center line

(setq P9 (list (car P0) (+ (cadr P0) CL)))

(setq P10 (list (car P9) (- (cadr P9) CL1 WT WT))) ;Bolt Shank

(setq P11 (list (+ (car P0) BD) (- (cadr P0) LB WT)))

(setq P12 (list (car P11) (- (cadr P11) LT)))

(setq P13 (list (- (car P0) BD) (- (cadr P0) LB WT)))

(setq P14 (list (car P13) (- (cadr P13) LT)))

(setq P15 (list (car P0) (- (cadr P0) LB LT L6 WT)))

(setq P16 (list (+ (car P15) BD1) (cadr P15)))

(setq PS1 (list (+ (car P0) BD) (cadr P0)))

(setq PS2 (list (car PS1) (- (cadr PS1) LG))) ;thread

(setq P17 (list (- (car P12) L6) (+ (cadr P15) WT)))

(setq P18 (list (car P17) (+ (cadr P17) LT))) ;draw center line

(command "line" P9 P10 "")

(command "chprop" "l" "" "LType" "center" "") ;draw bolt head

(command "line" P1 P2 "")

(command "mirror" "l" "" P9 P10 "")

(command "line" P3 P4 "")

(command "mirror" "l" "" P9 P10 "")

(command "line" P7 P8 "")

(command "mirror" "l" "" P9 P10 "")

(command "arc" P6 P4 P2 "")

(command "mirror" "l" "" P9 P10 "")

(command "arc" P6 P3 P8 "")

(command "mirror" "l" "" P9 P10 "") ;draw head washer

(command "line" W1 W2 "")

(command "mirror" "l" "" P9 P10 "")

(command "line" W2 W3 "")

(command "mirror" "l" "" P9 P10 "")

(command "line" W3 W4 "")

(command "mirror" "l" "" P9 P10 "")

(if (= HEADOP "E")

(progn ;draw bolt shank

(command "line" P11 P12 "")

(command "mirror" "l" "" P9 P10 "")

(command "line" P13 P14 "")

(command "mirror" "l" "" P9 P10 "")

(command "line" P12 P14 "")

(command "mirror" "l" "" P9 P10 "")

(command "line" P15 P16 "")

(command "mirror" "l" "" P9 P10 "")

(command "line" P16 P12 "")

(command "mirror" "l" "" P9 P10 "")

(if (= TT "N")

(setq PS1 PS2)

) ;_ end of if

(if (= TT "H")

(command "line" PS1 PS2 "")

) ;_ end of if

(command "chprop" "l" "" "LType" "hidden" "")

(command "mirror" "l" "" P9 P10 "")

(if (= TT "S")

(command "line" PS1 PS2 "")

) ;_ end of if

(command "mirror" "l" "" P9 P10 "") ;draw thread

(command "line" P17 P18 "")

(command "chprop" "l" "" "LType" "hidden" "")

(command "mirror" "l" "" P9 P10 "") ;nut

(setq P0 (list (car P0) (- (cadr P0) LG)))

(setq P1 (list (+ (car P0) L1) (- (cadr P0) WT)))

(setq P2 (list (car P1) (- (cadr P1) L2)))

(setq P3 (list (car P0) (- (cadr P1) LH)))

(setq P4 (list (+ (car P3) L3) (cadr P3)))

(setq P5 (list (+ (car P0) L4) (- (cadr P0) WT)))

(setq P6 (list (car P5) (- (cadr P5) L2)))

(setq P7 (list (- (car P0) L4) (- (cadr P0) WT)))

(setq P8 (list (car P7) (- (cadr P7) L2))) ;nut washer

(setq W11 (list (car P0) (- (cadr P0) WT)))

(setq W21 (list (+ (car W11) WD) (cadr W11)))

(setq W31 (list (car W21) (+ (cadr W21) WT)))

(setq W41 (list (- (car W31) L1 WD) (cadr W31))) ;DRAW NUT

(command "line" P0 P1 "")

(command "mirror" "l" "" P9 P10 "")

(command "line" P1 P2 "")

(command "mirror" "l" "" P9 P10 "")

(command "line" P3 P4 "")

(command "mirror" "l" "" P9 P10 "")

(command "line" P5 P6 "")

(command "mirror" "l" "" P9 P10 "")

(command "line" P7 P8 "")

(command "arc" P6 P4 P2 "")

(command "mirror" "l" "" P9 P10 "")

(command "arc" P6 P3 P8 "") ;draw nut washer

(command "line" W11 W21 "")

(command "mirror" "l" "" P9 P10 "")

(command "line" W21 W31 "")

(command "mirror" "l" "" P9 P10 "")

(command "line" W31 W41 "")

(command "mirror" "l" "" P9 P10 "")

) ;_ end of progn

) ;_ end of if

(command "ucs" "w" "")

(setq ANG (- ANG 90.0))

(redraw)

(setvar "OSMODE" XOSMODE)

(princ)

) ;_ end of defun

 

Salut,

 

François

 

Posté(e)

Rebcao,c'est très gentil de ta part de vouloir aider Yatch, mais faire son exercice n'est pas lui rendre service. Il peut poser autant de questions qu'il veut, on sera toujours là pour l'aider et l'accompagner à réaliser son Lisp. De plus, c'est un excellent exercice pour ceux qui veulent aussi s'y mettre

 

Un proverbe (chinois je pense) dit que si on veut nourrir une personne, ne lui donne pas à manger mais apprend lui à pécher

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

Merci X13 et Sebcao

 

Cela va me permettre d' avancer sur ce sujet.

Je ne faisais que des choses très basique comme des polylignes,calculs de surfaces,recherche de caractères,une cornière, un ipe où l'on retrouve les différentes fonctions utilisé dans l'exercice de l'écrou mais réussir a synthétiser l'ensemble n'est pas toujours si évident.

Merci pour cette base de programme avec des philosophies d'approche différentes qui vont me permettre de réaliser mon propre programme.

Même si Patrick 35 ne semble pas d'accord sur le principe et je peux le comprendre, c' est aussi un moyen d' apprendre que de décortiquer un programme pour le comprendre et le refaire.

 

Amicalement.

Posté(e)

Salut X13 et Patrick_35 le Breton,

 

Je pense que s'il fallait aider Yatch à programmer cet exercice via CADxp, il y aurait de sacré message...et ça risquerait de durer...

 

Par contre, je pense que Yatch reviendra plus tard lorsqu'il aura compris la philosophie de ce formidable langage.... ou tout simplement pour comprendre ce source...

 

Par contre, attention, le source de X13 fait appel à des commandes anglaises, exemple :

 

LINE ne marchera pas, il faut remplacer par _LINE

 

Christian

Formateur, Consultant Expert AutoCAD, REVIT MEP, INVENTOR, télécharger , des Outils AutoCAD...

cad123 @ wanadoo.fr (enlever les espaces de part et d'autre de @)

Posté(e)

Bonjour à tous

Je n’ai absolument rien contre à ce que l’on donne un exemple, au contraire si on s ‘en inspire pour faire le sien, c’est juste pour ne pas faire un copier/coller et un 20/20 à un truc auquel on n’a rien compris. D’autant plus que savoir manipuler ce langage permet de faire des gains de temps fabuleux pour son travail et de mieux maîtriser Autocad.

Et s’il y a un gros fil de messages, ce n'est pas grave, ça permet de soulever des points que ne sont pas toujours facile à comprendre

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

Bonjour,

 

J'ai trouvé l'exercice amusant, je me suis donc amusé à faire une routine, bien que ce ne soit pas mon domaine (J'ai une formation de technicien topographe).

Je la transmets ici car je n'ais pas parfaitement respecté l'énoncé, donc tu ne pourras la présenter comme solution. Mon but était de te monter les possibilités du lisp..

Le résultat peut paraître sophistiqué, mais le programme est relativement simple (pas de boucles, pas de fonctions récursives ou fonctions complexe), c'est plus proche d'un script (execution ligne par ligne)

Si la vriable "SHORTCUTMENU" est à 11. Tu pourras choisir par le click-droit les diamètres nnominaux.

 

Voici la bête (pas de test approfondis, c'était pour le fun)

(defun c:ecrou ( / old_osmd typ_ecr pt_ins rot_ecr diam_n d l_plat pas h_ecr d_i s0 s1 s2 r_c h_c)
(setvar "cmdecho" 0)
(setq old_osmd (getvar "osmode"))
(initget "Standard Haut Bas _Standard Up Down")
(setq typ_ecr (getkword "\nType d'écrou [standard/Haut/Bas]: "))
(if (not typ_ecr) (setq typ_ecr "Standard"))
(initget 9)
(setq pt_ins (getpoint "\nSpécifier le point d'insertion de l'écrou: "))
(setq rot_ecr (getorient pt_ins "\nSpécifier l'orientation de l'écrou<0.0>: "))
(if (not rot_ecr) (setq rot_ecr 0.0))
(initget 1 "1.6 2 2.5 3 4 5 6 8 10 12 14 16 20 24 30 36 42 48")
(setq diam_n (getkword "\nDonner le diamètre nominal[1.6/2/2.5/3/4/5/6/8/10/12/14/16/20/24/30/36/42/48]: "))
(cond
	((eq diam_n "1.6") (setq d 1.6 l_plat 3.2 pas 0.35))
	((eq diam_n "2") (setq d 2.0 l_plat 4.0 pas 0.4))
	((eq diam_n "2.5") (setq d 2.5 l_plat 5.0 pas 0.45))
	((eq diam_n "3") (setq d 3.0 l_plat 5.5 pas 0.5))
	((eq diam_n "4") (setq d 4.0 l_plat 7.0 pas 0.7))
	((eq diam_n "5") (setq d 5.0 l_plat 10.0 pas 0.8))
	((eq diam_n "6") (setq d 6.0 l_plat 10.0 pas 1.0))
	((eq diam_n "8") (setq d 8.0 l_plat 13.0 pas 1.25))
	((eq diam_n "10") (setq d 10.0 l_plat 16.0 pas 1.5))
	((eq diam_n "12") (setq d 12.0 l_plat 18.0 pas 1.75))
	((eq diam_n "14") (setq d 14.0 l_plat 21.0 pas 2.0))
	((eq diam_n "16") (setq d 16.0 l_plat 24.0 pas 2.0))
	((eq diam_n "20") (setq d 20.0 l_plat 30.0 pas 2.5))
	((eq diam_n "24") (setq d 24.0 l_plat 36.0 pas 3.0))
	((eq diam_n "30") (setq d 30.0 l_plat 46.0 pas 3.5))
	((eq diam_n "36") (setq d 36.0 l_plat 55.0 pas 4.0))
	((eq diam_n "42") (setq d 42.0 l_plat 65.0 pas 4.5))
	((eq diam_n "48") (setq d 48.0 l_plat 75.0 pas 5.0))
)
(cond
	((eq typ_ecr "Standard") (setq h_ecr (* 0.8 d)))
	((eq typ_ecr "Up") (setq h_ecr d))
	((eq typ_ecr "Down") (setq h_ecr (* 0.5 d)))
)
(setvar "osmode" 0)
(setq d_i (- d (* 1.0825 pas)))
(command "_.ucs" "_origin" pt_ins)
(if (not (zerop rot_ecr)) (command "_.ucs" "_z" (angtos rot_ecr)))
(command "_.polygon" "6" '(0.0 0.0 0.0) "_circumscribed" (/ l_plat 2.0))
(command "_.extrude" "_last" "" h_ecr 0.0)
(setq s0 (entlast))
(command "_.cylinder" '(0.0 0.0 0.0) (/ d_i 2.0) h_ecr)
(setq s1 (entlast))
(command "_.subtract" s0 "" s1 "")
(setq s0 (entlast))
(setq r_c (/ (/ l_plat 2.0) (cos (/ pi 6.0))))
(setq h_c (* r_c (/ (sin (/ pi 6.0)) (cos (/ pi 6.0)))))
(command "_.cone" '(0.0 0.0 0.0) r_c h_c)
(setq s1 (entlast))
(command "_.cylinder" '(0.0 0.0 0.0) r_c h_c)
(setq s2 (entlast))
(command "_.subtract" s2 "" s1 "")
(setq s1 (entlast))
(command "_.move" s1 "" '(0.0 0.0 0.0) (list 0.0 0.0 (- h_ecr (* (sin (/ pi 6.0)) (- r_c (/ l_plat 2.0))))))
(command "_.subtract" s0 "" s1 "")
(setq s0 (entlast))
(command "_.cone" '(0.0 0.0 0.0) (/ d 2.0) (- (* (/ d 2.0) (/ (sin (/ pi 6.0)) (cos (/ pi 6.0))))))
(setq s1 (entlast))
(command "_.move" s1 "" '(0.0 0.0 0.0) (list 0.0 0.0 h_ecr))
(command "_.subtract" s0 "" s1 "")
(setq s0 (entlast))
(command "_.cone" '(0.0 0.0 0.0) r_c (- h_c))
(setq s1 (entlast))
(command "_.cylinder" '(0.0 0.0 0.0) r_c (- h_c))
(setq s2 (entlast))
(command "_.subtract" s2 "" s1 "")
(setq s1 (entlast))
(command "_.move" s1 "" '(0.0 0.0 0.0) (list 0.0 0.0 (* (sin (/ pi 6.0)) (- r_c (/ l_plat 2.0)))))
(command "_.subtract" s0 "" s1 "")
(setq s0 (entlast))
(command "_.cone" '(0.0 0.0 0.0) (/ d 2.0) (* (/ d 2.0) (/ (sin (/ pi 6.0)) (cos (/ pi 6.0)))))
(setq s1 (entlast))
(command "_.subtract" s0 "" s1 "")
(command "_.vpoint" "_rotate" (angtos (- (* 2.0 pi) (/ pi 4.0))) (angtos (/ pi 6.0)))
(command "_shademode" "_gouraud")
(setvar "osmode" old_osmd)
(setvar "cmdecho" 1)
(prin1)
)

Tu peux mettre les commande s "_.vpoint" et "_.shademode" en rem ";"

NB: Créé sous une version 2002

 

Bruno V.

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

Posté(e)

Salut Didier,

 

Je viens de prendre connaissance de ta réponse, et j'avoue que je suis surpris.

 

Toi qui recommande de poser des questions claires et précises, je trouve que ta réponse n'est pas assez argumentée car je ne comprends pas le sens de ta réponse.

 

Si tu as une "totomobile" avec GPS ABS et tous les "trucs" en "S" , je pourrais dire aussi que c'est n'importe quoi, que c'est n'est plus de la conduite "pure", mais pourtant cela existe et devient le standard et on pourrait dire aussi que c'est de l'anti-automobile.

 

PS: Je confirme que c'était pou le fun, magré qu'il m'arrive de concevoir des ouvrages d'art en 3D, je ne vais pas jusqu'a mettre les écrous sur les poutres métalliques. Pour moi cette routine n'a aucune utilité, je laisse les personnes de la partie apprécier....

Je l'ai fais en 3D car dans l'énoncé il été demandé des coupes 2D, et comme dit Patrick_35, je voulais éviter le copier coller d'une solution toute faite sans aucune réflexion.

 

Sans rancune ;)

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

  • 3 ans après...
Posté(e)

Salut Bonuscad

Ton écrou est sympa , c'est marrant de le voir se constuire seul et l' écriture du lisp est instructive pour les poireaux de mon genre.

Pour autocad 2007 et + , les options de la commande extrusion ayant changées, à la ligne:

(command "_.extrude" "_last" "" h_ecr 0.0)

Il faut supprimer le 0.0 final pour éviter le blocage du lisp.

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é