小菜123 发表于 2003-5-28 11:36:00

[求助]用lisp获取屏幕角点坐标的问题

如果当前十字光标与屏幕不是水平和垂直状态,如何用LSP程序获得屏幕四个角点的坐标呢?(只要介绍个思路就可以了,程序我自己写)

meflying 发表于 2003-5-28 16:42:00

搜索一下,我记得龙龙仔有给过几个变量,可以取得这些坐标

Taoyimaier 发表于 2003-5-28 19:13:00

这也是我在该网站上学到的,

;;;用来获得当前绘图区的坐下角和右上角坐标值 Design by Taoyi
(defun forall:getscreen        (/          tempos   viewcnt          viewH
                       viewW          fact       viewW1          Hhalf
                       Whalf          pnt_leftdown          pnt_rightdown
                       return
                        )
(setq tempos (getvar "osmode"))
(setvar "osmode" 0)
(setq viewcnt (getvar "viewctr"))
(setq viewH (getvar "viewsize"))
(setq viewW (getvar "screensize"))
(setq fact (/ viewH (cadr viewW)))
(setq viewW1 (* fact (car viewW)))
(setq Hhalf (/ viewH 2))
(setq Whalf (/ viewW1 2))
(setq        pnt_leftdown
       (list (- (car viewcnt) Whalf) (- (cadr viewcnt) Hhalf))
)
(setq        pnt_rightup
       (list (+ (car viewcnt) Whalf) (+ (cadr viewcnt) Hhalf))
)
(setvar "osmode" tempos)
(setq return (cons pnt_leftdown pnt_rightup))
)
;;;The function return a list which contain two point cordinate!

小菜123 发表于 2003-5-29 10:22:00

这个程序有问题

这个程序默认当前屏幕十字光标是水平的,如果不水平,结果就错了

龙龙仔 发表于 2003-5-29 12:26:00

這樣...

(defun C:TT ()
(command "_.UCS" "V")
(setq CTR (getvar "VIEWCTR"))
(setq SIZE (getvar "VIEWSIZE"))
(setq SCREEN (getvar "SCREENSIZE"))
(setq SCALE (/ (car SCREEN) (cadr SCREEN)))
(setq XSIZE (* SCALE SIZE))
(setq RT (list (+ (car CTR) (/ XSIZE 2)) (+ (cadr CTR) (/ SIZE 2))))
(setq LB (list (- (car CTR) (/ XSIZE 2)) (- (cadr CTR) (/ SIZE 2))))
(command "_.line" RT LB "")
(command "_.UCS" "P")
(princ)
)

小菜123 发表于 2003-5-29 17:31:00

不是我想要的:(

这样不能透明执行了,而且我有其它函数也不能用,能不能不使用command命令呢?
另:UCS V是什么意思?UCS的提示里面怎么没有V选项?

spring 发表于 2003-5-29 21:33:00

llz

利用3个系统变量,可算出...
VIEWCTR 系统变量 (只读)
类型:3D 点
储存于:图面
储存目前视埠内的视景中心点。以 UCS 坐标表示。

VIEWSIZE 系统变量 (只读)
类型:实数
储存于:图面
储存目前视埠内的视景高度。以图面单位来表示。

SCREENSIZE 系统变量(只读)
类型:2D 点
不储存
储存目前视埠的尺寸 (X 和 Y),以像素为单位元。

小菜123 发表于 2003-5-29 22:22:00

你把UCS放成斜的算算就知道不对了

你把UCS放成斜的算算就知道不对了

小菜123 发表于 2003-5-29 22:38:00

搞好了

搞好了,(fp) 返回两个角点坐标的表:

(defun fp (/ c03 c08 c04 c05 c07 c06 c09 c01 c02)
(setq        c03 (getvar "viewctr")
        c03 (trans c03 1 2)
        c08 (getvar "viewsize")
        c04 (getvar "screensize")
        c07 (car c04)
        c06 (cadr c04)
        c09 (/ (* c08 c07) c06)
        c01 (list (- (car c03) (* 0.5 c09)) (- (cadr c03) (* 0.5 c08)))
        c02 (list (+ (car c03) (* 0.5 c09)) (+ (cadr c03) (* 0.5 c08)))
      c01 (trans c01 2 1)
      c02 (trans c02 2 1))
(list c01 c02)
)

wkq004 发表于 2016-10-16 01:09:05

Taoyimaier 发表于 2003-5-28 19:13
;;;用来获得当前绘图区的坐下角和右上角坐标值 Design by Taoyi
(defun forall:getscreen        (/          tempos   ...

最后返回值笔误了,应该用list
(list pnt_leftdown pnt_rightup)
页: [1] 2
查看完整版本: [求助]用lisp获取屏幕角点坐标的问题