3DMTHREAD公制螺纹.lsp
资源名称:cadlisp1.rar [点击查看]
上传用户:sd555111
上传日期:2014-05-17
资源大小:31k
文件大小:5k
源码类别:
CAD
开发平台:
MathCAD
- ;-------------------------------------------------------------------
- ; 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 freeware. 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:3dmthread ( / nom pitch length 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 "外(大)径值d(公制): ")
- pitch (getreal "单位螺纹数(公制): ")
- length (getdist "总长度(公制): ")
- cpt (getpoint "指定中心点(公制): ")
- total (+ (fix (/ length 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)
- 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 mthread...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)
- )