明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3645|回复: 27

[提问] 关于选择屏幕外的对象(附图)

  [复制链接]
发表于 2020-9-15 22:10:04 | 显示全部楼层 |阅读模式
请教一个问题:
(defun c:13(/ p1 p2)
(sssetfirst)
(setq p1 (getpoint (strcat "\n请指定框选第一点:")) )
(setq p2 (getcorner p1 (strcat "\n请指定框选第一点:")) )
(sssetfirst nil (XY框选 p1 p2 ()) )
)

;屏幕外框选 wangyonggao8 2018-6-30 file:///C:\Users\ADMINI~1\AppData\Local\Temp\%W@GJ$ACOF(TYDYECOKVDYB.pnghttp://bbs.mjtd.com/forum.php?mod=viewthread&tid=177750&highlight=ssget
;(XY框选 (getpoint) (getpoint) '((0 . "insert")))
(defun XY框选(d1 d2 filter / minX minY maxX maxY)
(setq  minX (min (car d1) (car d2))
    minY (min (cadr d1) (cadr d2))
    maxX (max (car d1) (car d2))
    maxY (max (cadr d1) (cadr d2))
)
(if filter
  (ssget "x"
     (append (list '(-4 . "<and")
           '(-4 . ">=,>=,*")
           (list 10 minX minY 0)
           '(-4 . "<=,<=,*")
           (list 10 maxX maxY 0)
         )
         (append filter '((-4 . "and>")))
     )
  )
  (ssget "x"
     (list '(-4 . "<and")
       '(-4 . ">=,>=,*")
       (list 10 minX minY 0)
       '(-4 . "<=,<=,*")
       (list 10 maxX maxY 0)
       '(-4 . "and>")
     )
  )
)
)


以上程序,可以选到屏幕外的对象,但我发现有一个问题,在什么都没有选中的时候,它却自动选中了一个矩形框(如图)


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2020-9-16 11:48:28 | 显示全部楼层
;999返回当前视窗左下角和右上角 坐标
(defun viewbox(/ a b c d x)
  (setq        b (getvar "viewsize")
                        c (car (getvar "screensize"))
                        d (cadr (getvar "screensize"))
                        a (* b (/ c d))
                        x (setq x (getvar "viewctr"))
                        x (trans x 1 2)
                        c (list (- (car x) (/ a 2.0)) (- (cadr x) (/ b 2.0)) 0.0)
                        d (list (+ (car x) (/ a 2.0)) (+ (cadr x) (/ b 2.0)) 0.0)
                        c (trans c 2 1)
                        d (trans d 2 1)
  )
  (list c d)
)

点评

谢谢指导!  发表于 2020-9-16 11:50
回复 支持 1 反对 0

使用道具 举报

发表于 2020-9-16 11:03:23 | 显示全部楼层
看看这个函数对你有无帮助
;;当前视图屏幕角点坐标
(defun dt:viewport-getcoords (/ height width size middle)
  (setq height (getvar "viewsize"))
  (setq size (getvar "screensize"))
  (setq middle (getvar "viewctr"))
  (setq width (* (/ height (cadr size)) (car size)))
  (list        (list (- (car middle) (/ width 2.0))
              (- (cadr middle) (/ height 2.0))
        )
        (list (+ (car middle) (/ width 2.0))
              (+ (cadr middle) (/ height 2.0))
        )
  )
)
发表于 2020-9-15 23:18:57 | 显示全部楼层
PL线比较特殊
10点对比较多的的原因?
不光是封闭PL线
不封闭的单段PL线
也可能会选中
发表于 2020-9-15 23:23:27 | 显示全部楼层
个人建议啊
尽量避免屏幕外选择
虽然看起来屏幕不晃很爽
但是很多时候会误选和漏选
最常见的例子是
块和块心相距十万八千里的情况
实时缩放窗口确保选择无误
其实没啥大不了的
 楼主| 发表于 2020-9-16 08:17:00 | 显示全部楼层
本帖最后由 669423907 于 2020-9-16 08:37 编辑
masterlong 发表于 2020-9-15 23:23
个人建议啊
尽量避免屏幕外选择
虽然看起来屏幕不晃很爽

谢谢你的回复,如果这样是否会好一些:
(defun c:13(/ p1 p2)
(sssetfirst)
(setq p1 (getpoint (strcat "\n请指定框选第一点:")) )
(setq p2 (getcorner p1 (strcat "\n请指定框选第一点:")) )
(if
如果 p1 在屏幕内,则 (sssetfirst nil (ssget "c" p1 p2))
(sssetfirst nil (XY框选 p1 p2 nil))
)
)

请教一下,如何判断 p1 在屏幕内?
 楼主| 发表于 2020-9-16 10:32:33 | 显示全部楼层
请问大师们,如何判断点p1在屏幕内?
发表于 2020-9-16 11:45:49 | 显示全部楼层
上面的函数没有考虑ucs的影响
发表于 2020-9-16 11:49:21 | 显示全部楼层
本帖最后由 masterlong 于 2020-9-16 12:04 编辑

黄明儒收集的函数
原作者是谁不知道
发表于 2020-9-16 11:53:10 | 显示全部楼层
本帖最后由 自贡黄明儒 于 2020-9-16 11:58 编辑

从程序来看,是会选中的呀
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-4-30 11:41 , Processed in 0.204168 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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