明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3812|回复: 10

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

[复制链接]
发表于 2003-5-28 11:36:00 | 显示全部楼层 |阅读模式
如果当前十字光标与屏幕不是水平和垂直状态,如何用LSP程序获得屏幕四个角点的坐标呢?(只要介绍个思路就可以了,程序我自己写)
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2003-5-28 16:42:00 | 显示全部楼层

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

发表于 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!
 楼主| 发表于 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" "")
  (princ)
)
 楼主| 发表于 2003-5-29 17:31:00 | 显示全部楼层

不是我想要的:(

这样不能透明执行了,而且我有其它函数也不能用,能不能不使用command命令呢?
另:UCS V是什么意思?UCS的提示里面怎么没有V选项?
发表于 2003-5-29 21:33:00 | 显示全部楼层

llz

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

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

SCREENSIZE 系统变量(只读)
类型:2D 点
不储存
储存目前视埠的尺寸 (X 和 Y),以像素为单位元。
 楼主| 发表于 2003-5-29 22:22:00 | 显示全部楼层

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

你把UCS放成斜的算算就知道不对了
 楼主| 发表于 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)
)
发表于 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)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-6 14:38 , Processed in 0.180374 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表