试试这个:
- (defun c:gridline (/ *error* varLst oldVars tpt bpt ang llpt l1 lrpt l2 l1mid l2mid)
- ; --- Error Trap ---
- (defun *error* (msg)
- (mapcar 'setvar varLst oldVars)
- (if (= msg "")
- (princ "\nFunction Complete.")
- (princ "\nError or Esc pressed... ")
- ) ;_ end if
- (princ)
- ) ; end of *error*
- (setq varLst (list "CMDECHO" "CLAYER" "OSMODE")
- oldVars (mapcar 'getvar varLst)
- ) ; end setq
- ; --- Error Trap ---
- (setvar "cmdecho" 0)
- (defun makelay (x)
- (if (not (tblsearch "Layer" x))
- (command "-layer" "m" x "")
- ) ;_ end if
- ) ;_ end defun
- (if (and
- (setq tpt (getpoint "\nSelect Top Point of Gridline: "))
- (setq bpt (getpoint "\nSelect Base Point of Gridline: "))
- ) ;_ end and
- (progn
- (setq ang (angle tpt bpt))
- (setvar "osmode" 0)
- (makelay "Concrete")
- (setvar "clayer" "Concrete")
- (command "_line"
- (setq llpt (polar tpt (+ ang (/ pi 2)) 1200))
- (polar llpt ang (distance tpt bpt))
- ""
- ) ;_ end command
- (setq l1 (entlast))
- (command "_line"
- (setq lrpt (polar tpt (- ang (/ pi 2)) 1200))
- (polar lrpt ang (distance tpt bpt))
- ""
- ) ;_ end command
- (setq l2 (entlast))
- (command "_chprop" l1 l2 "" "lt" "awthidden2" "")
- (setq l1mid (polar llpt ang (/ (distance tpt bpt) 2)))
- (setq l2mid (polar lrpt ang (/ (distance tpt bpt) 2)))
- (makelay "Dimensions")
- (setvar "clayer" "Dimensions")
- (command "_dimaligned" l1mid l2mid l1mid)
- (alert
- "\nI'm not sure what you would like done with the block...
- \nCheers
- \nLee Mac."
- ) ;_ end alert
- ) ;_ end progn
- (alert "\nProgram Requires Two Selected Points.")
- ) ;_ end if
- (*error* "")
- ) ;_ end defun
|