ARainey 发表于 2022-7-6 09:08:31

LISP新手帮助。。。

对lisp很陌生,想知道如何获得点列表(例如X1 Y1 X2 Y2)或在当前绘图空间范围内绘制矩形。我需要能够在任何缩放时执行此操作,换句话说,不只是最大化,我不需要图形的限制,只需要围绕当前显示的内容绘制一个框。
 
谢谢大家!

Lee Mac 发表于 2022-7-6 10:43:37

以下函数将返回当前视图范围的列表:
 
(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]
查看完整版本: LISP新手帮助。。。