这是完整的代码。这是一个快速的工具,可以绘制围栏纠察桩,并沿给定长度的围栏等距分布。该代码工作正常,但现在它只工作一次,用户必须再次启动它才能执行另一段围栏。我想让它工作,让它运行,然后继续运行,只要用户选择一个新的第一点。如果他们按回车键,我希望它能干净地退出。我有一个*错误*捕获例程,它将处理用户按escape键。运行时很容易加载。我正在寻找的技巧是,当被要求输入点时,如何通过按Enter键完全退出。
- (vl-load-com)
- (defun C:pickets (/ picketthk picketoc)
-
- (setq *current_osmode (getvar 'OSMODE)
- *current_pickbox (getvar 'PICKBOX)
- )
- ;;; Set up common variables
- (setq picketthk 0.75
- picketoc 4.
- )
- (prompt "\nSelect First Point\n")
- (setq p1 (getpoint))
- (prompt "\nSelect Second Point\n")
- (setq p2 (getpoint))
- (setvar 'OSMODE 0)
- (setvar 'PICKBOX 0)
- (setq d (distance p1 p2)
- numpickets (/ d picketoc)
- firstbay (+ (/ (- d (* (fix numpickets) picketoc)) 2.) (/ picketthk 2.))
- )
- (if (< firstbay (+ (/ picketoc 2.) (/ picketthk 2.)))
- (setq firstbay (+ firstbay (- (/ picketoc 2.) (/ picketthk 2.))))
- )
- ;;; if the number pf pickets divided by picketoc is has no remainder subtract 1 picket and increase firstbay dimension
- (if (= (/ d (fix numpickets)) (fix (/ d (fix numpickets))))
- (setq numpickets (1- numpickets)
- firstbay (+ firstbay (- picketoc (/ picketthk 2.)))
- )
- )
- (setq count 0)
- (repeat (fix numpickets)
- (DrawPicket "picket" (polar p1 0 (+ firstbay (* picketoc count))))
- (setq count (1+ count))
- )
- (setvar 'OSMODE *current_osmode)
- (setvar 'PICKBOX *current_pickbox)
- (princ)
- ); end pickets
- (defun DrawPicket (PicketBlk pt)
- (entmakex (list
- (cons 0 "INSERT")
- (cons 2 PicketBlk)
- (cons 8 "Pickets")
- (cons 10 pt)
- (cons 41 1.0) ; Scale Factor
- (cons 42 1.0) ; Scale Factor
- (cons 43 1.0) ; Scale Factor
- )
- )
- (princ)
- ); end DrawPicket
|