看看我的帖子http://www.cadtutor.net/forum/showthread.php?94680-AutoLisp循环函数重新定义变量
Ps我的版本
- ; draw pits with 100mm walls aligned to line
- ; By Alan H 2011
- (setq oldsnap (getvar "osmode"))
- (setq oldlayer (getvar "clayer"))
- (command "_layer" "n" "Design-Drainage-Pits" "c" 4 "Design-Drainage-Pits" "")
- (setvar "clayer" "Design-Drainage-Pits")
- (if (not AH:getval) (load "getval"))
- (ah:getval "Please enter PitL m eg 0.9: " " edit_width = 8;" " edit_limit = 6;")
- (setq pitl (Atof item))
- (ah:getval "Please enter PitW eg 0.6: " " edit_width = 8;" " edit_limit = 6;")
- (setq pitw (Atof item))
- (setq pt1 (getpoint "\npick 1st point to place pit : "))
- (setq pt2 (getpoint "\nPick 2nd point for orientation"))
- (setvar "osmode" 0)
- (setq pt7 (getpoint "\Pick pt on pit side : "))
- (setq ang (angle pt1 pt2))
- (setq ang5 (angle pt2 pt7))
- (setq diffang (- ang ang5))
- (if (> diffang 1.5707)
- (setq ang2 (- ang 1.570796))
- (setq ang2 (+ ang 1.570796))
- )
- (setq ang3 (+ ang 3.1415926))
- (setq ang4 (- ang 1.570796))
- (setq pt3 (polar pt1 ang PitL))
- (setq pt4 (polar pt3 ang2 PitW))
- (setq pt5 (polar pt4 ang3 PitL))
- (command "pline" pt1 pt3 pt4 pt5 "c")
- (setq pt6 (polar pt1 ang 50.0))
- (command "offset" 0.1 pt4 pt6 "")
- (setvar "osmode" oldsnap)
- (setvar "clayer" oldlayer)
- (princ)
- ;; Input Dialog box with variable title
- ;; By Ah June 2012
- ;; code (ah:getval title)
- (defun AH:getval (title width limit / fo)
- (setq fname "C://acadtemp//getval.dcl")
- (setq fo (open fname "w"))
- (write-line "ddgetval : dialog {" fo)
- (write-line " : row {" fo)
- (write-line ": edit_box {" fo)
- (write-line (strcat " key = " (chr 34) "key1" (chr 34) ";") fo)
- (write-line (strcat " label = " (chr 34) title (chr 34) ";" ) fo)
- ; these can be replaced with shorter value etc
- ;(write-line " edit_width = 18;" fo)
- ;(write-line " edit_limit = 15;" fo)
- (write-line width fo)
- (write-line limit fo)
- (write-line " is_enabled = true;" fo)
- (write-line " }" fo)
- (write-line " }" fo)
- (write-line "ok_only;}" fo)
- (close fo)
- (setq dcl_id (load_dialog "c:\\acadtemp\\getval"))
- (if (not (new_dialog "ddgetval" dcl_id))
- (exit))
- (action_tile "key1" "(setq item $value)(done_dialog)")
- (mode_tile "key1" 2)
- (start_dialog)
- ; returns the value of item
- )
|