xiaocainiao 发表于 2022-2-1 17:40:42

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

本帖最后由 xiaocainiao 于 2022-2-5 19:35 编辑

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

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

和尚777 发表于 2022-2-1 21:45:10

;包围盒才精确,这个取巧能用就用
(defun c:tt ()
        (if(setq ss(ssget))
                (progn
                        (command "zoom" "o" ss "")
                        (command "zoom" "s" "1.029x")
                )
        )
        (princ)
)

xiaocainiao 发表于 2022-2-6 08:31:19

你有种再说一遍 发表于 2022-2-5 21:37
喏喏喏喏喏喏喏喏喏

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

guosheyang 发表于 2022-3-18 13:24:04

本帖最后由 guosheyang 于 2022-3-18 13:25 编辑

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

和尚777 发表于 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))
)

xiaocainiao 发表于 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、直接就布满视口

和尚777 发表于 2022-2-1 21:43:45

框选就是取所有图元的包围盒点,再取所有点的最大最小点,再zoom,特殊图元一样是取包围盒只是比较难而已

xiaocainiao 发表于 2022-2-2 09:42:41

和尚777 发表于 2022-2-1 21:43
框选就是取所有图元的包围盒点,再取所有点的最大最小点,再zoom,特殊图元一样是取包围盒只是比较难而已

我之前也是想的用包围盒、总是碰到各种特殊情况、导致图形在视口内不居中、但是用ZOMM+O就可以、所以现在就是想看有没有办法让ZOOM+O能够精确的布满视口{:7_410:}

xiaocainiao 发表于 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''

xiaocainiao 发表于 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让对象在视口内居中布满、不用其他方式、其他求对 ...

都说不用命令了,用命令还有啥自由度.
继续学深入点吧
页: [1] 2 3 4
查看完整版本: 研究了好几年的难题、ZOOM+O无法布满视口