LISP新手帮助。。。
对lisp很陌生,想知道如何获得点列表(例如X1 Y1 X2 Y2)或在当前绘图空间范围内绘制矩形。我需要能够在任何缩放时执行此操作,换句话说,不只是最大化,我不需要图形的限制,只需要围绕当前显示的内容绘制一个框。谢谢大家! 以下函数将返回当前视图范围的列表:
(defun LM:WindowExtents nil ;; © Lee Mac 2011
(
(lambda ( c v ) (list (trans (mapcar '- c v) 1 0) (trans (mapcar '+ c v) 1 0)))
(getvar 'VIEWCTR)
(
(lambda ( h s ) (list (* h s) h))
(/ (getvar 'VIEWSIZE) 2.) (apply '/ (getvar 'SCREENSIZE))
)
)
)
可以使用Rectang命令调用:
(defun c:test ( / lst )
(setq lst (LM:WindowExtents))
(command "_.rectang" "_non" (car lst) "_non" (cadr lst))
(princ)
)
或者,使用entmake(以下内容也适用于所有UCS/View):
(defun c:test ( / lst nrm )
(setq nrm (trans '(0. 0. 1.) 1 0 t)
lst (mapcar 'trans (LM:WindowExtents) '(0 0) (list nrm nrm))
)
(entmakex
(list
(cons 0 "LWPOLYLINE")
(cons 100 "AcDbEntity")
(cons 100 "AcDbPolyline")
(cons 90 4)
(cons 70 1)
(cons 10 (carlst))
(cons 10 (list (caadr lst) (cadarlst)))
(cons 10 (cadr lst))
(cons 10 (list (caarlst) (cadadr lst)))
(cons 210 nrm)
)
)
(princ)
)
页:
[1]