3DMTHREAD公制螺纹.lsp
上传用户:sd555111
上传日期:2014-05-17
资源大小:31k
文件大小:5k
源码类别:

CAD

开发平台:

MathCAD

  1. ;-------------------------------------------------------------------
  2. ; THREAD.LSP   Creates 3D solid (ACIS) threads.          3/3/98
  3. ;
  4. ; Corrected  3/4/98
  5. ; Corrected again 3/6/98
  6. ;
  7. ;                                       written by: Jim Fitzgerald
  8. ;
  9. ; Credit goes to Bernd Hoffmann and Ken Shearron for showing
  10. ; me this modeling technique and helping me spot
  11. ; some bugs.
  12. ;
  13. ;-------------------------------------------------------------------
  14. ;
  15. ; This is a way to make 3D solid external threads in
  16. ; AutoCAD R13 and R14. Just so you know, it's not
  17. ; geometrically correct, but it's pretty darn close.
  18. ; There is no error trapping or anything like that.
  19. ;
  20. ; You are prompted for the Nominal thread size
  21. ; (actual size like .190 or .112, not #10, #4, etc..),
  22. ; threads per inch (tpi), the total length of the thread, and a
  23. ; center point. The program works by creating a single thread
  24. ; and then arraying it out to the proper length. The threads are
  25. ; drawn a little long and then sliced off to the correct length.
  26. ; This program only draws the thread, you're on your own drawing
  27. ; the rest of the screw. For internal threads, just subtract this from
  28. ; another solid.
  29. ;
  30. ; Note, the threads created by this can make for some rather big files,
  31. ; so make sure your system is up to it. Also, it might take a while
  32. ; to union all of the single threads together so be patient.
  33. ;
  34. ;-------------------------------------------------------------------
  35. ; This is freeware. Do what you want with it. If you modify it,
  36. ; please take my name off of it so I don't have to support your
  37. ; software.
  38. ;
  39. ; All the typical legal stuff applies. I make no claims that
  40. ; this actually works. Use it at your own risk. You can't sue me
  41. ; for any problems that you have as a result of using this
  42. ; (either personal or professional). Don't drink and
  43. ; drive. Eat your vegetables, and call your mother.
  44. ;-------------------------------------------------------------------
  45. (defun c:3dmthread ( / nom pitch length cpt total pt1 pt1z pt2 pt3 ang pt1a
  46. pt1az pt3a pt1b pt1bz pt3b pt4 pt4 pt6 pt7 pt8 pt9 pt10 pt11 pt12 ss
  47. osm)
  48.    ;-------------------------------------------------------------------
  49.    ; Gets the nominal size, tpi, and total length
  50.    ; then calculates a bunch of geometry points.
  51.    ; All running osnaps are turned off as well.
  52.    ;-------------------------------------------------------------------
  53.    (setq nom (getdist "外(大)径值d(公制): ")
  54.       pitch (getreal "单位螺纹数(公制): ")
  55.       length (getdist "总长度(公制): ")
  56.       cpt (getpoint "指定中心点(公制): ")
  57.       total (+ (fix (/ length pitch)) 2)
  58.       pt1 (list (- (car cpt) (/ nom 2.0)) (cadr cpt))
  59.       pt1z (list (- (car cpt) (/ nom 2.0)) (cadr cpt) 1.0)
  60.       pt2 (polar pt1 (/ (* 30.0 pi) 180.0) 0.1)
  61.       pt3 (list (+ (car pt1) nom) (+ (cadr pt1) (/ pitch 2.0)))
  62.       ang (angle pt1 pt3)
  63.       pt1a (polar pt1 (+ ang (/ pi 2.0)) pitch)
  64.       pt1az (list (car pt1a) (cadr pt1a) 1.0)
  65.       pt3a (polar pt1a ang nom)
  66.       pt1b (polar pt1 (- ang (/ pi 2.0)) pitch)
  67.       pt1bz (list (car pt1b) (cadr pt1b) 1.0)
  68.       pt3b (polar pt1b ang nom)
  69.       pt4 (polar pt3 (/ (* 150.0 pi) 180.0) 0.1)
  70.       pt5 (inters pt1 pt2 pt3 pt4 nil)
  71.       pt6 (list (car pt5) (cadr cpt))
  72.       pt7 (polar pt1 (/ (* 330.0 pi) 180.0) 0.1)
  73.       pt8 (polar pt3 (/ (* 210.0 pi) 180.0) 0.1)
  74.       pt9 (inters pt1 pt7 pt3 pt8 nil)
  75.       pt10 (list (car pt9) (cadr pt3))
  76.       pt11 (polar cpt (/ pi 2.0) pitch)
  77.       pt12 (polar pt11 (/ pi 2.0) length)
  78.       osm (getvar "osmode")
  79.    )
  80.    (setvar "osmode" 0)
  81.    ;-------------------------------------------------------------------
  82.    ; Draws two cones which are inverted and offset 1/2 the pitch.
  83.    ; The cones are each sliced at the angle of the crest line
  84.    ; and then unioned together
  85.    ;-------------------------------------------------------------------
  86.    (princ "nCreating mthread...this might take a while.")
  87.    (command "pline" pt1 pt5 pt6 "c")
  88.    (command "revolve" "l" "" pt5 pt6 "")
  89.    (command "slice" "l" "" pt1 pt3 pt1z pt5)
  90.    (command "slice" "l" "" pt1a pt3a pt1az pt3)
  91.    (setq ss (ssadd (entlast)))
  92.    (command "pline" pt3 pt9 pt10 "c")
  93.    (command "revolve" "l" "" pt9 pt10 "")
  94.    (command "slice" "l" "" pt1 pt3 pt1z pt9)
  95.    (command "slice" "l" "" pt1b pt3b pt1bz pt3)
  96.    (setq ss (ssadd (entlast) ss))
  97.    (command "union" ss "")
  98.    ;-------------------------------------------------------------------
  99.    ; This above solid is sliced in half and then mirrored. This
  100.    ; creates the "helix" in the thread. The height of the single
  101.    ; thread is actually equal to twice the pitch, but the
  102.    ; excess is either absorbed or cut off in the last step
  103.    ;-------------------------------------------------------------------
  104.    (command "slice" ss "" "xy" cpt "b")
  105.    (setq ss (ssadd (entlast) ss))
  106.    (command "mirror" "l" "" pt1 "@10<0" "y")
  107.    (command "union" ss "")
  108.    ;-------------------------------------------------------------------
  109.    ; The thread is arrayed and then unioned together (this part can
  110.    ; take a while). The resulting solid is cut to the specified length.
  111.    ;-------------------------------------------------------------------
  112.    (setq e (entlast))
  113.    (command "array" ss "" "r" total 1 pitch)
  114.    (repeat (1- total)
  115.       (setq e (entnext e)
  116.          ss (ssadd e ss)
  117.       )
  118.    )
  119.    (command "union" ss "")
  120.    (command "slice" "l" "" "zx" pt11 pt12)
  121.    (command "slice" "l" "" "zx" pt12 pt11)
  122.    (princ "nDone")
  123.    (setvar "osmode" osm)
  124.    (princ)
  125. )