本帖最后由 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
|