明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 818|回复: 10

如何用代码实现布局视口裁剪?

[复制链接]
发表于 2024-5-26 13:49:39 | 显示全部楼层 |阅读模式
本帖最后由 zilong136 于 2024-5-27 06:23 编辑

在布局视口经常要放大样,常用的命令是视口裁剪(vpclip),如果是输入这个命令的话,就只能绘制裁剪的路径,我们习惯是先绘制这个路径,然后右键选择视口对象~视口裁剪~选择事先绘制好的路径。
  • (Defun C:vv12 ()
  •   (prompt "\n vv12:剪裁视口")
  •   (command "vpclip" )
  •   (princ)
  • )

点评

很好,你开始了使用Auto LISP这个工具来解决问题的第一步... 等会我写个初步的简版代码,后续你们可以继续完善。  发表于 2024-5-27 16:47
发表于 2024-5-26 18:38:18 来自手机 | 显示全部楼层
大家好像还没有发现你用少量代码换完整功能
 楼主| 发表于 2024-5-26 20:53:11 | 显示全部楼层
你有种再说一遍 发表于 2024-5-26 18:38
大家好像还没有发现你用少量代码换完整功能

没办法,目前只会最简单的代码。
发表于 2024-5-27 15:53:00 | 显示全部楼层
期待大神出手
发表于 2024-5-28 17:54:04 | 显示全部楼层
本帖最后由 e2002 于 2024-5-28 17:55 编辑

vpclip 命令,先是选择需要裁剪的视口对象,然后提示选择裁剪的边界曲线对象,此时输入命令选项P,则可以临时绘制一个边界对象。

我猜测你的习惯是: 先绘制一个多段线,然后再选择要裁剪的视口对象。
这就是个人喜好的问题,而默认的命令的操作方式和你习惯的思维和操作方式并不符合,所以希望能有个更加符合你操作习惯的等价功能命令。

抽空写了个简单的版本,待后续和大家一起逐步改进。

  1. (defun C:VpClipUser ( / enlast0 en el g70 v70 bLoop esl enVP elVP sType)
  2.   (if (and (= (getvar "TILEMODE") 0)
  3.            (= (getvar "CVPORT") 1)
  4.       )
  5.     (progn
  6.       (setq enlast0 (entlast)
  7.             bLoop T
  8.       )
  9.       (command "_.pline")
  10.       (while bLoop
  11.         (if (= (getvar "CMDACTIVE") 1)
  12.           (command PAUSE)
  13.           (progn
  14.             (command)
  15.             (setq bLoop nil)
  16.           )
  17.         );__2_fi
  18.       );_while
  19.       (setq en (entlast))
  20.       (if (not (equal enlast0 en))
  21.         (progn
  22.           (setq el (entget en)
  23.                 g70 (assoc 70 el)
  24.                 v70 (cdr g70)
  25.           )
  26.           (if (member v70 '(0 128))
  27.             (progn
  28.               (setq el (subst (cons 70 (+ v70 1)) g70 el))
  29.               (entmod el)
  30.               (entupd en)
  31.             )
  32.           );_3_fi
  33.           (setq bLoop T)
  34.           (while bLoop
  35.             (if (setq esl (entsel "\nSpecify the viewport object for clip:"))
  36.               (progn
  37.                 (setq enVP  (car esl)
  38.                       elVP  (entget enVP)
  39.                       sType (cdr (assoc 0 elVP))
  40.                 )
  41.                 (if (= sType "VIEWPORT")
  42.                   (progn
  43.                     (setq bLoop nil)
  44.                     (vl-cmdf "_.vpclip" enVP en)
  45.                   )
  46.                   (princ "\nNot VIEWPORT object.")
  47.                 );_5_fi
  48.               );_4_then
  49.               (progn
  50.                 (setq bLoop nil)
  51.                 (princ "\nNot pick an object!")
  52.               );_4_else
  53.             );_4_fi
  54.           );_while
  55.         );__progn
  56.         (princ "\nCreate a bounding object canceled!")
  57.       );__fi
  58.     );_progn
  59.     (princ "\nOnly use in PaperSpace!")
  60.   );_if
  61. );_defun


 楼主| 发表于 2024-5-29 01:21:04 | 显示全部楼层
本帖最后由 zilong136 于 2024-5-29 01:36 编辑
e2002 发表于 2024-5-28 17:54
vpclip 命令,先是选择需要裁剪的视口对象,然后提示选择裁剪的边界曲线对象,此时输入命令选项P,则可以临 ...

是这个意思,但命令能不能用圆、矩形等来绘制,不能局限于多段线。

点评

这就是我希望大家来改进的地方啊,是希望你们自己写出来,可选其他的各种曲线。  发表于 2024-5-29 16:15
发表于 2024-5-29 16:21:58 | 显示全部楼层
还可以设计为另一种操作方式:

在右键菜单中增加一个自定义项:“使用此对象裁剪视口”,操作过程为:点击曲线对象,右击出现对象编辑弹出菜单,选择“使用此对象裁剪视口”,按提示点选视口对象,完成。

有空我再搞一下。
发表于 2024-5-29 16:29:38 | 显示全部楼层
本帖最后由 e2002 于 2024-5-29 16:31 编辑

Viewport对象的右键对象编辑菜单,显然已经有了 VPClip:



本帖子中包含更多资源

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

x
 楼主| 发表于 2024-6-5 04:35:54 | 显示全部楼层
e2002 发表于 2024-5-29 16:21
还可以设计为另一种操作方式:

在右键菜单中增加一个自定义项:“使用此对象裁剪视口”,操作过程为:点 ...

默认右键有这个功能,就是想用LISP把这个功能写出来。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-10-18 14:53 , Processed in 0.189535 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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