本帖最后由 npcer 于 2025-9-12 17:45 编辑

源码来源:http://bbs.mjtd.com/thread-193570-1-1.html
我只是小改了一下表现效果和支持透明命令,代码不到700B,致敬原作者
0→配置视图,1~9→切换视图,'1~'9→透明切换视图
效果预览:


源码:
  1. (vl-load-com)
  2. ;; 保存命名视图
  3. (defun c:0 (/ p num)
  4.   (setvar "cmdecho" 0)
  5.   (while (not (and (setq num (getint "\n视图编号[1-9]: "))
  6.                    (>= num 1)
  7.                    (<= num 9)))
  8.     (princ "\n请输入1到9之间的数字")
  9.   )
  10.   (command "-view" "w" (itoa num)
  11.            (setq p (getpoint "\n第一角点: "))
  12.            (getcorner p "\n对角点: "))
  13.   (princ)
  14. )
  15. ;; 批量定义 c:1 到 c:9
  16. (foreach n '(1 2 3 4 5 6 7 8 9)
  17.   (eval
  18.     (list 'defun
  19.           (read (strcat "c:" (itoa n)))
  20.           '()
  21.           (list 'vl-cmdf "'_.-view" "r" (itoa n) "")
  22.           '(princ)
  23.     )
  24.   )
  25. )
  26. (princ "\n已加载视图切换:0→配置视图,1~9→切换视图,'1~'9→透明切换视图")
  27. (princ)






网友答: 本帖最后由 jun470 于 2025-9-14 10:55 编辑
cghdy 发表于 2025-9-12 19:46
是不是有enter没有键入,运行完没有自动结束,需要多一个空格。

我在楼主的基础上,修改了。
吸收了14楼Qwer1243的修改,代码更简洁了。

下面是优化的代码
0→配置视图,1~9→切换视图'1~'9→透明切换视图  

  1. ;; 保存命名视图
  2. (defun c:0 (/ p num)
  3.   (setvar "cmdecho" 0)
  4.   (initget "1 2 3 4 5 6 7 8 9")
  5.   (setq num (getkword"视图编号:[1/2/3/4/5/6/7/8/9]:<1>"))
  6.   (command "-view" "w" num
  7.            (setq p (getpoint "\n第一角点: "))
  8.            (getcorner p "\n对角点: "))
  9.   (princ)
  10. )
  11. ;; 批量定义 c:1 到 c:9
  12. (foreach n '(1 2 3 4 5 6 7 8 9)
  13.   (eval
  14.     (list 'defun
  15.           (read (strcat "c:" (itoa n)))
  16.           '()
  17.           (list 'command-s "'-view" "r" n "")
  18.           '(princ)
  19.     )
  20.   )
  21. )
  22. (princ "\n已加载视图切换:0→配置视图,1~9→切换视图,'1~'9→透明切换视图")
  23. (princ)





网友答: named view 你自己命名即可,为啥非要1-9呢? 10-99都可以,999,abc, 某个名字...只要不使用那些不支持的特定字符。

vport 左上角默认显示 ViewControl,那里也可以直接切换 View.

还要更快捷一点,我写了一个快捷切换的命令行工具,命令的右键菜单直接可以点选切换View, Save/saveTo/Delete.

1-5 一般大家都已经设置为更加高频的操作,切换 View这个的操作频率实际上很低,分给他们占用实在是得不偿失哦。

网友答:
jun470 发表于 2025-9-12 22:23
我在楼主的基础上,修改了。
吸收了14楼Qwer1243的修改,代码更简洁了。

可能是版本的差异,我CAD2012虽然会提示未知命令1,但不需要额外键入enter,而且按照你修改之后的这一版运行,和我原来的无差别,还是会提示未知命令1,最后,按照你这个写法,我这边还有个BUG,就是输入0之后直接回车框选的视图不会被写入视图1,输入1会提示未找到视图1,除非0--然后手动按1

网友答: 感谢大佬的热心分享

网友答: 本帖最后由 bai2000 于 2025-9-12 18:33 编辑

不错,能不能把1-9调为透明命令,毕竟透明命令实用点,'1~'9→透明切换视图 上撇忒不方便,常错

网友答:
bai2000 发表于 2025-9-12 18:27
不错,能不能把1-9调为透明命令,毕竟透明命令实用点,'1~'9→透明切换视图 上撇忒不方便,常错

能够想出1-9调为透明命令的,都是人才。

网友答: 是不是有enter没有键入,运行完没有自动结束,需要多一个空格。

网友答:
cghdy 发表于 2025-9-12 19:46
是不是有enter没有键入,运行完没有自动结束,需要多一个空格。

有回车确认呀,我这边CAD2012一切正常

网友答:
bai2000 发表于 2025-9-12 18:27
不错,能不能把1-9调为透明命令,毕竟透明命令实用点,'1~'9→透明切换视图 上撇忒不方便,常错

透明命令不就是前面加   '   的嘛。你现在试试在绘图命令中  输入 ‘P     就是用了PAN命令,取消之后,绘图命令还在。透明命令只有少数命令可以支持,所以平时不常用到。

网友答: 本帖最后由 npcer 于 2025-9-12 20:47 编辑
bai2000 发表于 2025-9-12 18:27
不错,能不能把1-9调为透明命令,毕竟透明命令实用点,'1~'9→透明切换视图 上撇忒不方便,常错


1-9透明化可能会导致一些不可预见性问题吧

网友答:
npcer 发表于 2025-9-12 20:44
1-9透明化可能会导致一些不可预见性问题吧

我改了代码,解决了,看9楼
  • 上一篇:分享两个中望能用的自动图层切换与填充图案拉
  • 下一篇:没有了