如何用代码实现布局视口裁剪?
本帖最后由 zilong136 于 2024-5-27 06:23 编辑在布局视口经常要放大样,常用的命令是视口裁剪(vpclip),如果是输入这个命令的话,就只能绘制裁剪的路径,我们习惯是先绘制这个路径,然后右键选择视口对象~视口裁剪~选择事先绘制好的路径。
[*](Defun C:vv12 ()
[*](prompt "\n vv12:剪裁视口")
[*](command "vpclip" )
[*](princ)
[*])
大家好像还没有发现你用少量代码换完整功能
你有种再说一遍 发表于 2024-5-26 18:38
大家好像还没有发现你用少量代码换完整功能
没办法,目前只会最简单的代码。 期待大神出手 本帖最后由 e2002 于 2024-5-28 17:55 编辑
vpclip 命令,先是选择需要裁剪的视口对象,然后提示选择裁剪的边界曲线对象,此时输入命令选项P,则可以临时绘制一个边界对象。
我猜测你的习惯是: 先绘制一个多段线,然后再选择要裁剪的视口对象。
这就是个人喜好的问题,而默认的命令的操作方式和你习惯的思维和操作方式并不符合,所以希望能有个更加符合你操作习惯的等价功能命令。
抽空写了个简单的版本,待后续和大家一起逐步改进。
(defun C:VpClipUser ( / enlast0 en el g70 v70 bLoop esl enVP elVP sType)
(if (and (= (getvar "TILEMODE") 0)
(= (getvar "CVPORT") 1)
)
(progn
(setq enlast0 (entlast)
bLoop T
)
(command "_.pline")
(while bLoop
(if (= (getvar "CMDACTIVE") 1)
(command PAUSE)
(progn
(command)
(setq bLoop nil)
)
);__2_fi
);_while
(setq en (entlast))
(if (not (equal enlast0 en))
(progn
(setq el (entget en)
g70 (assoc 70 el)
v70 (cdr g70)
)
(if (member v70 '(0 128))
(progn
(setq el (subst (cons 70 (+ v70 1)) g70 el))
(entmod el)
(entupd en)
)
);_3_fi
(setq bLoop T)
(while bLoop
(if (setq esl (entsel "\nSpecify the viewport object for clip:"))
(progn
(setq enVP(car esl)
elVP(entget enVP)
sType (cdr (assoc 0 elVP))
)
(if (= sType "VIEWPORT")
(progn
(setq bLoop nil)
(vl-cmdf "_.vpclip" enVP en)
)
(princ "\nNot VIEWPORT object.")
);_5_fi
);_4_then
(progn
(setq bLoop nil)
(princ "\nNot pick an object!")
);_4_else
);_4_fi
);_while
);__progn
(princ "\nCreate a bounding object canceled!")
);__fi
);_progn
(princ "\nOnly use in PaperSpace!")
);_if
);_defun
本帖最后由 zilong136 于 2024-5-29 01:36 编辑
e2002 发表于 2024-5-28 17:54
vpclip 命令,先是选择需要裁剪的视口对象,然后提示选择裁剪的边界曲线对象,此时输入命令选项P,则可以临 ...
是这个意思,但命令能不能用圆、矩形等来绘制,不能局限于多段线。 还可以设计为另一种操作方式:
在右键菜单中增加一个自定义项:“使用此对象裁剪视口”,操作过程为:点击曲线对象,右击出现对象编辑弹出菜单,选择“使用此对象裁剪视口”,按提示点选视口对象,完成。
有空我再搞一下。
本帖最后由 e2002 于 2024-5-29 16:31 编辑
Viewport对象的右键对象编辑菜单,显然已经有了 VPClip:
e2002 发表于 2024-5-29 16:21
还可以设计为另一种操作方式:
在右键菜单中增加一个自定义项:“使用此对象裁剪视口”,操作过程为:点 ...
默认右键有这个功能,就是想用LISP把这个功能写出来。
页:
[1]