明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2250|回复: 20

[提问] 请问如何判断直线的两个端点都在屏幕上?

[复制链接]
发表于 2018-6-10 18:36 | 显示全部楼层 |阅读模式
5明经币
请问如何判断直线的两个端点都在屏幕上?
附件: 您需要 登录 才可以下载或查看,没有账号?注册

最佳答案

查看完整内容

;; 如果p1 p2 都在屏幕内,则 (cond ((and (ssget p1 '((0 . "LINE"))) (ssget p1 '((0 . "LINE"))) ) (command "dimlinear" p1 p2 "\\") ) (T ;;否则 (while (not (setq oo (getpoint o"\n请指定标注第二点: ")))) (command "dimlinear" o oo pause) ))
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2018-6-10 18:36 | 显示全部楼层
;; 如果p1 p2 都在屏幕内,则
(cond
((and
   (ssget p1 '((0 . "LINE")))
   (ssget p1 '((0 . "LINE")))
  )
  (command "dimlinear" p1 p2 "\\")
)
(T
  ;;否则
  (while (not (setq oo (getpoint o"\n请指定标注第二点: "))))
  (command "dimlinear" o oo pause)
))
回复

使用道具 举报

发表于 2018-6-10 18:52 | 显示全部楼层
Command: L
LINE Specify first point: 0,0

Specify next point or [Undo]: 2,2

Specify next point or [Undo]:

Command: '_zoom
Specify corner of window, enter a scale factor (nX or nXP), or
[All/Center/Dynamic/Extents/Previous/Scale/Window/Object] <real time>: _w
Specify first corner: Specify opposite corner:
===>使该线端点屏幕外

Command: (ssget '(0 0))
nil

Command: (ssget '(2 2))
nil

回复

使用道具 举报

 楼主| 发表于 2018-6-10 19:14 | 显示全部楼层
Andyhon 发表于 2018-6-10 18:52
Command: L
LINE Specify first point: 0,0

看得不是很懂,不能用 zoom 吧?我是要:
(setq o(getpoint"\n请点选直线:"))
(setq ss(ssget"c"o o))
然后判断直线 ss 的两个端点是否都在当前屏幕可见的范围之内
回复

使用道具 举报

发表于 2018-6-10 20:04 | 显示全部楼层
重点不在zoom...
如上例当 LINE 的两端点皆在屏幕外时
用以 ssget 作选取点返回 nil
回复

使用道具 举报

发表于 2018-6-10 20:13 | 显示全部楼层
本帖最后由 elitefish 于 2018-6-10 20:16 编辑

返回当前屏幕的左下角与右上角坐标,两点均在该范围内就算在屏幕上,函数在下贴
回复

使用道具 举报

发表于 2018-6-10 20:15 | 显示全部楼层
  1. (defun EF:View-Vport (
  2.                       /
  3.                       VSMax VSMin ViewCTR
  4.                       fHeight fWidth fScale
  5.                       )  
  6.   (setq VSMax (getvar 'VSMAX))
  7.   (setq VSMin (getvar 'VSMIN))
  8.   
  9.   (setq VIEWCTR (getvar 'VIEWCTR))
  10.   
  11.   (setq fHeight (- (cadr VSMax) (cadr VSMin)))
  12.   (setq fWidth (- (car VSMax) (car VSMin)))
  13.   (setq fScale (/ fWidth fHeight))
  14.   
  15.   (setq fHeight (getvar 'VIEWSIZE))
  16.   (setq fWidth (* fHeight fScale))

  17.   (setq VSMin (mapcar '- ViewCTR (list (/ fWidth 2) (/ fHeight 2) 0)))
  18.   (setq VSMax (mapcar '+ ViewCTR (list (/ fWidth 2) (/ fHeight 2) 0)))
  19.   (list VSMin VSMax)
  20.   )
回复

使用道具 举报

 楼主| 发表于 2018-6-10 22:03 | 显示全部楼层
唉,还是看不懂,,,
回复

使用道具 举报

发表于 2018-6-10 22:42 | 显示全部楼层
那儿卡了? 请拿您的 实地图面(*.dwg)来说事...
回复

使用道具 举报

发表于 2018-6-11 09:21 | 显示全部楼层
  1. ;;gxl-Sys-GetScreenCoords 取得当前绘图区屏幕的左下角和右上角的坐标
  2. ;;返回:((x1 y1 z1)  (x2 y2 z2))
  3. (defun gxl-Sys-GetScreenCoords (/ c03 c08 c04 c05 c07 c06 c09 c01 c02)
  4.   (setq        c03 (getvar "viewctr")
  5.         c03 (trans c03 1 2)
  6.         c08 (getvar "viewsize")
  7.         c04 (getvar "screensize")
  8.         c07 (car c04)
  9.         c06 (cadr c04)
  10.         c09 (/ (* c08 c07) c06)
  11.         c01 (list (- (car c03) (* 0.5 c09)) (- (cadr c03) (* 0.5 c08)))
  12.         c02 (list (+ (car c03) (* 0.5 c09)) (+ (cadr c03) (* 0.5 c08)))
  13.         c01 (trans c01 2 1)
  14.         c02 (trans c02 2 1)
  15.   )
  16.   (list c01 c02)
  17. )
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-24 01:06 , Processed in 0.414100 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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