明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3229|回复: 33

[提问] 研究了好几年的难题、ZOOM+O无法布满视口

[复制链接]
发表于 2022-2-1 17:40:42 | 显示全部楼层 |阅读模式
本帖最后由 xiaocainiao 于 2022-2-5 19:35 编辑

有一个问题研究好久了也没有找到解决方案、就是在视口中使用ZOMM缩放命令中的"O-对象"模式、
想将选择的对象在视口内布满、每次图形都是和视口线差一点无法布满、如下图:

求教一下论坛内的各位大神、看看有没有办法或者相关的变量、
可以用“ZOOM+O”这种模式将对象布满视口

本帖子中包含更多资源

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

x

点评

需要提供一个dwg实例  发表于 2022-2-3 13:51
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2022-2-1 21:45:10 | 显示全部楼层
;包围盒才精确,这个取巧能用就用
(defun c:tt ()
        (if(setq ss(ssget))
                (progn
                        (command "zoom" "o" ss "")
                        (command "zoom" "s" "1.029x")
                )
        )
        (princ)
)
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2022-2-6 08:31:19 | 显示全部楼层

选择矩形布满视口太简单了、用楼上大神的代码都没问题、我现在的问题是选择一些特殊图元不行、找过很多人都没搞定、
你可以试试我发的这个图纸、能不能用你的方法来框选对象布满视口(这个用ZOOM+O是没问题的)、
并且这只是绘图中遇到的几种特殊情况、实际上还有很多特殊情况(比如倾斜的视图状态下布满视口等等){:7_459:}

本帖子中包含更多资源

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

x
回复 支持 1 反对 0

使用道具 举报

发表于 2022-3-18 13:24:04 | 显示全部楼层
本帖最后由 guosheyang 于 2022-3-18 13:25 编辑

你这个分成三种情况,带剪裁框的普通块儿,没剪裁框的动态块儿和多行文字三种情况。上面那个是带剪裁框的普通块儿,先用boundingbox函数求出其包围框角点,再画出矩形(范围延伸到块儿基点处),生成面域,然后用xclip命令画出剪裁框矩形,生成面域,再将生成的两个面域求交,即得到显示块儿部分面域,求出角点;对于下面那个动态块,可以先复制一份,然后炸开,再求包围框角点;对于多行文字,可以复制一份,炸开为单行文字,再求文字包围框角点;最后通过三个角点来求出最大的包围框角点(左下角 右上角),这个也是zoom/w 需要的两个点。这个过程中需要的函数论坛上都有现成的,自己搜索下即可,详细的思路就这样,自己动手呗,那样才能提高水平
发表于 2022-2-1 18:45:51 | 显示全部楼层
本帖最后由 和尚777 于 2022-2-1 19:00 编辑

(defun c:tt (/ e p)
        (setq e(car(entsel)))
        (setq p(GetBox e))
        (command "zoom" "non"(car p) "non" (cadr p))
        (princ)
)
(defun GetBox (ent / ll ur)
        (vla-getboundingbox (vlax-ename->vla-object ent) 'll 'ur)
        (mapcar 'vlax-safearray->list (list ll ur))
)

评分

参与人数 1明经币 +1 收起 理由
zhoupeng220 + 1 很给力!

查看全部评分

 楼主| 发表于 2022-2-1 20:06:10 | 显示全部楼层
和尚777 发表于 2022-2-1 18:45
(defun c:tt (/ e p)
        (setq e(car(entsel)))
        (setq p(GetBox e))

谢谢大神回复、祝您新年快乐!不过这个代码对于一些特殊图元不管事、还有就是不能框选、CAD本身的那个ZOOM+O、碰到特殊的像多行文字、裁剪过的图块和其他的一些特殊图元、都能正确识别出边界、所以一直在找有没有啥设置能让ZOOM+O、直接就布满视口
发表于 2022-2-1 21:43:45 | 显示全部楼层
框选就是取所有图元的包围盒点,再取所有点的最大最小点,再zoom,特殊图元一样是取包围盒只是比较难而已
 楼主| 发表于 2022-2-2 09:42:41 | 显示全部楼层
和尚777 发表于 2022-2-1 21:43
框选就是取所有图元的包围盒点,再取所有点的最大最小点,再zoom,特殊图元一样是取包围盒只是比较难而已

我之前也是想的用包围盒、总是碰到各种特殊情况、导致图形在视口内不居中、但是用ZOMM+O就可以、所以现在就是想看有没有办法让ZOOM+O能够精确的布满视口{:7_410:}
 楼主| 发表于 2022-2-2 09:44:28 | 显示全部楼层
和尚777 发表于 2022-2-1 21:45
;包围盒才精确,这个取巧能用就用
(defun c:tt ()
        (if(setq ss(ssget))

比例这种方法我也试过、不精确、现在就是找不到CAD本身的规律、试了好多种方法都不行{:7_418:}
发表于 2022-2-5 02:24:59 来自手机 | 显示全部楼层
需要研究几年吗?修改视口表记录不用cmd''
 楼主| 发表于 2022-2-5 10:04:21 | 显示全部楼层
你有种再说一遍 发表于 2022-2-5 02:24
需要研究几年吗?修改视口表记录不用cmd''

没太懂你说的是啥意思、不过你可以尝试一下如何用ZOOM+O让对象在视口内居中布满、不用其他方式、其他求对象最大和最小边界那种方法已经找了很多人了、但还是有各种特殊情况无法布满、所以干脆放弃了
发表于 2022-2-5 16:57:55 来自手机 | 显示全部楼层
xiaocainiao 发表于 2022-2-5 10:04
没太懂你说的是啥意思、不过你可以尝试一下如何用ZOOM+O让对象在视口内居中布满、不用其他方式、其他求对 ...

都说不用命令了,用命令还有啥自由度.
继续学深入点吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-23 07:31 , Processed in 0.202737 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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