在窗口块的左侧,当捕捉到空白时,可以看到LISP可以完美地工作。在右侧,我突出显示了完成命令后行的结束位置。他们抓到了错误的地方。我试着缩小和增大光圈大小,没有差别。
http://imgur.com/fFb8Q3u 选择时请尝试启用osnap,当您到达实际绘制线的部分时,请将其禁用。
gr.Rlx
成功了!明亮的非常感谢。
这是供将来寻找它的人使用的代码。
(defun c:grl3 (/ bb cl l os p1 p2 p3 p4)
(setq os (getvar 'OSMODE))
(setq cl (getvar 'CLAYER))
(setvar 'OSMODE 183)
(command "LAYER" "M" "Doors & Windows" "C" "21" "" "")
(setq p1 (getpoint "Pick First Corner: ")
p2 (getcorner p1 "\n Pick Diagonal Corner: ")
l (list p1 p2)
bb (list (apply 'mapcar (cons 'min l)) (apply 'mapcar (cons 'max l)))
p3 (car bb) p4 (cadr bb)
p1 (list (car p3) (cadr p4))
p2 (list (car p4) (cadr p3))
)
(setvar 'OSMODE 0)
(command "_LINE" (list (+ (car p1) 4) (cadr p1)) (list (+ (car p3) 4) (cadr p3)) "")
(command "_LINE" (list (car p1) (- (cadr p1) 4)) (list (car p4) (- (cadr p4) 4)) "")
(command "_LINE" (list (- (car p2) 4) (cadr p2)) (list (- (car p4) 4) (cadr p4)) "")
(command "_LINE" (list (car p2) (+ (cadr p2) 4)) (list (car p3) (+ (cadr p3) 4)) "")
(setvar 'CLAYER cl)
(setvar 'OSMODE os)
(princ)
) 更改4个命令语句以暂时关闭osnap。
正在运行的osap不会受到影响。
(command "_LINE" "NON" (list (+ (car p1) 4) (cadr p1)) (list (+ (car p3) 4) (cadr p3)) "")
(command "_LINE" "NON" (list (car p1) (- (cadr p1) 4)) (list (car p4) (- (cadr p4) 4)) "")
(command "_LINE" "NON" (list (- (car p2) 4) (cadr p2)) (list (- (car p4) 4) (cadr p4)) "")
(command "_LINE" "NON" (list (car p2) (+ (cadr p2) 4)) (list (car p3) (+ (cadr p3) 4)) "")
这也行。谢谢 使用entmakex的另一种方法:
(entmakex (list '(0 . "LINE") (cons 10 (list (car p1) (- (cadr p1) 4))) (cons 11 (list (+ (car p3) 4) (cadr p3)))))
(entmakex (list '(0 . "LINE") (cons 10 (list (car p1) (- (cadr p1) 4))) (cons 11 (list (car p4) (- (cadr p4) 4)))))
(entmakex (list '(0 . "LINE") (cons 10 (list (- (car p2) 4) (cadr p2))) (cons 11 (list (- (car p4) 4) (cadr p4)))))
(entmakex (list '(0 . "LINE") (cons 10 (list (car p2) (+ (cadr p2) 4))) (cons 11 (list (car p3) (+ (cadr p3) 4)))))
这三种方法之间真的有区别吗?一个人的表现是否比其他人更好? Entmaking会更快,并且不会受到osnap的影响。
虽然对于这个小程序来说,几乎不会有什么不同。
ymg公司 太棒了谢谢你的帮助。 下面是另一种书写方式:
(defun c:grl2 ( / pt1 pt2 tmp )
(if
(and
(setq pt1 (getpoint "\nSpecify first corner: "))
(if (zerop (getvar 'worlducs))
(setq pt2 (getpointpt1 "\nSpecify opposite corner: "))
(setq pt2 (getcorner pt1 "\nSpecify opposite corner: "))
)
)
(progn
(setq tmp (mapcar 'max pt1 pt2)
pt1 (mapcar 'min pt1 pt2)
pt2 tmp
)
(ln (cons(+ (car pt1) 4) (cdrpt1)) (cons (+ (car pt1) 4) (cdr pt2)))
(ln (cons(- (car pt2) 4) (cdrpt1)) (cons (- (car pt2) 4) (cdr pt2)))
(ln (vl-list* (car pt1) (+ (cadr pt1) 4) (cddr pt1)) (vl-list* (car pt2) (+ (cadr pt1) 4) (cddr pt2)))
(ln (vl-list* (car pt1) (- (cadr pt2) 4) (cddr pt1)) (vl-list* (car pt2) (- (cadr pt2) 4) (cddr pt2)))
)
)
(princ)
)
(defun ln ( a b )
(entmake (list '(0 . "LINE") '(8 . "Doors & Windows") (cons 10 (trans a 1 0)) (cons 11 (trans b 1 0))))
)
页:
1
[2]