决定进行日常练习:
- (defun C:test ( / oldclp pt1 LoopFlag UserIn TypeUserIn ReturnChar vsz SS SSn in1 in2 )
- (sssetfirst nil nil)
- (while T
- (if (setq pt1 (getpoint "\nSpecify first point" ))
- (progn
- (setq oldclp (getvar 'clipromptlines))
- (setvar 'clipromptlines 1)
- (redraw)
- (princ "\nSpecify second point: ")
- (setq LoopFlag T)
- (while LoopFlag
- (setq UserIn (grread T))
- (setq TypeUserIn (car UserIn))
- (setq ReturnChar (cadr UserIn))
- (cond
- ((= TypeUserIn 5) ; cursor is moved
- (princ "\nSpecify second point: ")
- (setq vsz (* (getvar 'viewsize) 10))
- (or
- (setq in1 (inters pt1 (polar pt1 (angtof "90") vsz) ReturnChar (polar ReturnChar (angtof "0") vsz)))
- (setq in1 (inters pt1 (polar pt1 (angtof "90") vsz) ReturnChar (polar ReturnChar (angtof "180") vsz)))
- (setq in1 (inters pt1 (polar pt1 (angtof "270") vsz) ReturnChar (polar ReturnChar (angtof "0") vsz)))
- (setq in1 (inters pt1 (polar pt1 (angtof "270") vsz) ReturnChar (polar ReturnChar (angtof "180") vsz)))
- )
- (or
- (setq in2 (inters pt1 (polar pt1 (angtof "0") vsz) ReturnChar (polar ReturnChar (angtof "90") vsz)))
- (setq in2 (inters pt1 (polar pt1 (angtof "0") vsz) ReturnChar (polar ReturnChar (angtof "270") vsz)))
- (setq in2 (inters pt1 (polar pt1 (angtof "180") vsz) ReturnChar (polar ReturnChar (angtof "90") vsz)))
- (setq in2 (inters pt1 (polar pt1 (angtof "180") vsz) ReturnChar (polar ReturnChar (angtof "270") vsz)))
- )
- (if (and pt1 in1 in2 ReturnChar)
- (progn
- (redraw)
- (grvecs
- (list
- 1 pt1 in1
- 1 pt1 in2
- 1 ReturnChar in1
- 1 ReturnChar in2
- )
- )
- )
- (redraw)
- )
- )
- ((= TypeUserIn 3) ; LMB is pressed
- (if oldclp (setvar 'clipromptlines oldclp))
- (setq LoopFlag nil)
- (if SS (progn (setq SSn SS) (sssetfirst nil nil)))
- (if (setq SS (ssget "_CP" (list pt1 in1 ReturnChar in2)))
- (progn
- (setq SS (acet-ss-union (list SSn SS))) ; requires express tools!
- (sssetfirst nil SS)
- )
- (setq SS nil)
- )
- )
- (T nil)
- );cond
- );while LoopFlag
- )
- )
- )
- (princ)
- )
这是基于我从塔瓦特、李·麦克、卡布那里学到的。。。 |