Bill Tillman 发表于 2022-7-6 07:25:32

基于Ex设置视口比例

好的,这是另一个线程的后续,我想我终于有了这个。我刚刚试用过,它适用于所有布局选项卡上的四种尺寸的纸张。不知怎么的,虽然我觉得这可以被清理干净,提高效率。这是我自2012年1月以来一直致力于的全自动流程。一直以来,我们都想把它带到一个即使不懂AutoCAD的人也可以使用它的地方,现在有了这个部署,我们真的很接近了。无论部件图形最终的大小如何,这都会在每个布局上创建一个视口,然后将模型空间的范围居中。它快速检查CustomScale,然后稍微调整以匹配我们在此处使用的可接受比例:
 

(defun zoomit (_tabname _tl _br)
(command "._CLAYER" "Viewports")
(setvar "CTAB" _tabname)
(command "._PSPACE")
(command "._ZOOM" "A")
(command "._MVIEW" _tl _br)
(setq _vp1 (entlast))
(setq _vpscale (vlax-get-property (vlax-ename->vla-object _vp1) 'CustomScale))
; Determine what scale will work best based on currently zoomed Viewport
(if (and (>= _vpscale 0.0167) (<= _vpscale 0.02))
   (progn
   (setq _vvpscale "1:60")(vlax-put-property (vlax-ename->vla-object _vp1) 'CustomScale (/ 1.0 60))
   ); end progn
); end if

(if (and (>= _vpscale 0.02) (< _vpscale 0.025))
   (progn
   (setq _vvpscale "1:50")
   (vlax-put-property (vlax-ename->vla-object _vp1) 'CustomScale (/ 1.0 50))
   ); end progn
); end if
(if (and (>= _vpscale 0.025) (< _vpscale 0.033))
(progn
    (setq _vvpscale "1:40")
    (vlax-put-property (vlax-ename->vla-object _vp1) 'CustomScale (/ 1.0 40))
); end progn
); end if

(if (and (>= _vpscale 0.033) (<= _vpscale 0.05))
(progn
    (setq _vvpscale "1:30")
    (vlax-put-property (vlax-ename->vla-object _vp1) 'CustomScale (/ 1.0 30))
); end progn
); end if

(if (and (>= _vpscale 0.05) (< _vpscale 0.0625))
(progn
    (setq _vvpscale "1:20")
    (vlax-put-property (vlax-ename->vla-object _vp1) 'CustomScale (/ 1.0 20))
); end progn
); end if

(if (and (>= _vpscale 0.0625) (< _vpscale 0.0833))
(progn
    (setq _vvpscale "1:16")
    (vlax-put-property (vlax-ename->vla-object _vp1) 'CustomScale (/ 1.0 16))
); end progn
); end if

(if (and (>= _vpscale 0.0833) (< _vpscale 0.1))
(progn
    (setq _vvpscale "1:12")
    (vlax-put-property (vlax-ename->vla-object _vp1) 'CustomScale (/ 1.0 12))
); end progn
); end if

(if (and (> _vpscale 0.1) (< _vpscale 0.125))
(progn
    (setq _vvpscale "1:10")
    (vlax-put-property (vlax-ename->vla-object _vp1) 'CustomScale (/ 1.0 10))
); end progn
); end if

(if (and (>= _vpscale 0.125) (< _vpscale 0.25))
(progn
    (setq _vvpscale "1:8")
    (vlax-put-property (vlax-ename->vla-object _vp1) 'CustomScale (/ 1.0 )
); end progn
); end if

(if (and (>= _vpscale 0.25) (< _vpscale 0.5))
(progn
    (setq _vvpscale "1:4")
    (vlax-put-property (vlax-ename->vla-object _vp1) 'CustomScale (/ 1.0 4))
); end progn
); end if

(if (and (>= _vpscale 0.5) (< _vpscale 1.0))
(progn
    (setq _vvpscale "1:2")
    (vlax-put-property (vlax-ename->vla-object _vp1) 'CustomScale (/ 1.0 2))
); end progn
); end if

(if (>= _vpscale 1)
(progn
    (setq _vvpscale "1:1")
    (vlax-put-property (vlax-ename->vla-object _vp1) 'CustomScale (/ 1.0 1))
); end progn
); end if

(princ); exit quietly
); end zoomit function

 
这仍然不是最终形式。总会有一些奇怪的情况发生,但我试图处理任何可能的情况。嘿,哇。。。为什么字体在代码顶部附近发生变化。这只是我的机器还是其他人看到了字体的变化?

BIGAL 发表于 2022-7-6 08:01:53

“缩放A全部”使用与“缩放E范围”不同的限制,如果不设置限制,则“缩放E范围”会查找对象之间的最大距离,其通常与“范围”相同。如果你有一个很大的作业集限制并使用Z a,那么使用“E”可能更安全。这是一个方便的技巧。
 
快速一点0,0和10001000
限值0,0 500500
Z A你只看到1点吗
Z E看到2点了吗?
 
也许用COND代替IF来设置刻度,然后用defun
 
(COND(and(>=\u vpscale 0.02)(<u vpscale 0.025))(setq \u vpscale“1:50”)(vlax put property(vlax ename->vla object \u vp1)'CustomScale(/1.0 50))(and(>=\u vpscale 0.0167)(

Bill Tillman 发表于 2022-7-6 08:17:41

谢谢你的指点。我知道所有这些(如果…)都有点草率,我想像你对COND的建议这样的东西会更合适,并且更容易跟踪流。
 
这个过程的问题是,我们永远不知道图纸会有多大。尽管我们最终会对其设定一些限制。我一直在使用的技巧是使它从最小值一直工作到无穷大。相信我,我的一些测试有一英里长一英里宽的绘图组件。并不是说我们曾经或可能建造和运输这样一个组件。但我的目标是让它可以适应任何尺寸,然后我们可以在以后进行裁剪。我们现在就要走下舞台了。因此,我需要这样一个过程来获得正面、侧面和平面图,以及一些注释和尺寸,所有这些都是正面的,并集中在四个布局选项卡上。这是美国,所以我们使用8-1/2英寸x 11,11 x 17,17 x 22和24 x 36。我要提醒这些家伙,一旦这在网上出现,国际用户来自其他国家,我们不仅要调整公制,还要调整不同尺寸的纸张。

BIGAL 发表于 2022-7-6 08:30:45

复印和粘贴也可能更容易,因为纸张尺寸没有太大差别,A4是210x297,字母是11x8.5?如果你选择了一个较小的尺寸和一个余量公差,它应该工作正常,但在毫米。对于视口的比例值,度量是相同的,只是一组不同的数字。例如A1 1:100=10 1:500=2 1:250=4位更容易计算出1000/mm的比例是1000的倍数。
 
一旦dwg达到一定的物理对象大小,您可以查看多个vports。使用extmin和extmax需要2个视图4个视图等,然后需要设置代码的范围限制,以便在不需要大量返工的情况下工作。我们有一个特殊的软件,改变比例会根据图纸大小改变视口的数量(非Autocad),它完全基于web。
页: [1]
查看完整版本: 基于Ex设置视口比例