明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 8258|回复: 48

动态切换标注样式的程序,搞机械的很实用啊!(感谢Gu_xl 版主完美解决)

  [复制链接]
发表于 2011-7-11 23:00 | 显示全部楼层 |阅读模式
本帖最后由 669423907 于 2011-9-3 12:18 编辑

想请高手们帮忙写一个动态切换标注样式的程序,不知是否能达到以下效果:
已有标注样式:  5,7,10,13,15,18,20,23,26,28,30,35,40,45,50,55,60,65,70,80,90,100,120,150.....200....230.....570....2300.....5000.....

1:已有以数字开头(整数)的标注样式十几个(或更多);
2:先选择多个标注样式,按下快捷键A,就把被选中的标注样式改变为下个以数字开头更大的标注样式,
      并动态显示改变后的效果;
3:如果一直按着A,就不停地切换,直到切换到最大的那个标注样式就停下来,右键确定并退出
4:一直按着S键,就以反方向不停地切换,直到切换到最小的那个标注样式就停下来,右键确定并退出
5:过程中可以随时按A或S,右键确定并退出
不知论坛的大师们认为此程序是否可行?!


;保留标注样式的PU
(defun c:pu()
(setvar "clayer""0")
(command "purge" "la" "" "n" ""  "purge" "lt" "" "n" "" "purge" "r" "" "n" ""
"purge" "b" "" "n" "" "purge" "p" "" "n" "" "purge" "st" "" "n" "" )
(princ))
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2011-7-12 11:14 | 显示全部楼层
回复 669423907 的帖子

  1. (defun c:tabdim (/ loop i ss dimstyles gr cnt)
  2.   (setq dimstyles (vl-sort (gxl-table "dimstyle") '(lambda (a b) (> (atoi a) (atoi b))))
  3.         cnt (length dimstyles)
  4.         i -1
  5.         loop t
  6.         )
  7.   (setq ss (ssget '((0 . "DIMENSION"))))
  8.   (if ss
  9.     (progn
  10.       (princ "\n*** 键入 A 或 S 切换标注样式 , 回车键或右键结束 *** ")
  11.       (princ "\n")
  12.       (while loop
  13.         (setq gr (grread t 5 1))
  14.         (if (= 2 (car gr))
  15.         (cond ((or (= 97 (cadr gr)) (= 65 (cadr gr)))
  16.                (setq i (1+ i)
  17.                      i (rem i cnt)
  18.                      )
  19.                (setq style (nth i dimstyles))
  20.                (princ (strcat "\r***当前标注样式为: " style "                                     "))
  21.                (gxl-sel-mapcar ss '(lambda (x) (GXL-CH_ENT x 3 style)))
  22.                )
  23.               ((or (= 83 (cadr gr)) (= 115 (cadr gr)))
  24.                (setq i (1- i))
  25.                 (if (MINUSP i) (setq i (+ i cnt)))   
  26.                (setq style (nth i dimstyles))
  27.                (princ (strcat "\r***当前标注样式为: " style "                                     "))
  28.                (gxl-sel-mapcar ss '(lambda (x) (GXL-CH_ENT x 3 style)))
  29.                )
  30.               ((= 13 (cadr gr)) (setq loop nil))
  31.               ) ;_ cond
  32.           (if (= 25 (car gr))
  33.             (setq loop nil)
  34.             )
  35.           )
  36.         )
  37.       
  38.       )
  39.     )
  40.     (princ)
  41.   )
  42. ;;;gxl-table 返回包含在指定符号表中的所有元素
  43. (defun gxl-table (s / d r)
  44.   (while (setq d (tblnext s (null d)))
  45.     (setq r (cons (cdr (assoc 2 d)) r))
  46.   )
  47. )
  48. ;;;(gxl-CH_Ent ent i pt) 用新值pt更新图元ent索引i对应的值
  49. (defun gxl-CH_Ent (ent i pt / en)
  50.   (if (assoc i (setq en (entget ent)))
  51.     (setq en (subst (cons i pt) (assoc i en) en))
  52.     (setq en (append en (list (cons i pt))))
  53.     )
  54.     (entmod en)
  55.   )
  56. ;;;(gxl-Sel-Mapcar ss Fun) 遍历选择集对所包含的图元进行指定函数操作,返回操作后的表
  57. (defun gxl-Sel-Mapcar (ss Fun / nn rtn)
  58.   (repeat (setq nn (sslength ss))
  59.   (setq rtn (cons (apply Fun (list (ssname ss (setq nn (1- nn))))) rtn))
  60.     )
  61.   )

点评

右键和空格都不能确定和退出,只能ent退出,ESC退出出现错误!不知道怎么回事哦!  发表于 2013-3-7 08:58
看完帖子知道怎么做了~~~下面那句算废话了,感谢G版!  发表于 2012-9-28 21:34
可以将切换过程中某个样式设为当前样式吗?  发表于 2012-9-28 21:25
效果相当好!程序非常给力!  发表于 2011-7-12 22:01

评分

参与人数 1金钱 +50 收起 理由
669423907 + 50

查看全部评分

回复 支持 1 反对 0

使用道具 举报

发表于 2024-5-28 19:57 | 显示全部楼层
加载插件,测试标注样式可以切换,但对于全局比例不为1的样式会失效。全局比例没有随标注样式同步更新,所有看到标注大小有时候没有变化
发表于 2024-5-28 20:43 | 显示全部楼层
诺捷铝板插件中,有个快捷键切换标注样式的功能用的是Gu_xl版主的代码
 楼主| 发表于 2011-7-12 10:11 | 显示全部楼层
非常有创意的程序啊,哪位大师帮帮忙啦!
 楼主| 发表于 2011-7-12 11:42 | 显示全部楼层
回复 Gu_xl 的帖子

非常感谢 Gu_xl大师的热情帮助!
现在用手机上,晚上再下!
再次感谢Gu_xl大师!
发表于 2011-7-12 12:02 | 显示全部楼层
是可以实现的
一个例子:

  1. (defun c:tt ()
  2.   (setq aaa T)
  3.   (setq n 1)
  4.   (setq nmin 1)
  5.   (setq nmax 10)
  6.   (while AAA
  7.     (setq code (grread))
  8.     (setq id (cadr code))
  9.     (cond ((or (= id 97) (= id 63))
  10.            (if (= n nmax)
  11.              (prompt "\n已经到头了!!!")
  12.              (progn (prompt (strcat "\n当前值为" (rtos n)))
  13.                     (setq n (1+ n))
  14.              )
  15.            )
  16.           )
  17.           ((or (= id 115) (= id 83))
  18.            (if (= n nmin)
  19.              (princ "\n已经到头了!!!")
  20.              (progn (princ (strcat "\n当前值为" (rtos n)))
  21.                     (setq n (1- n))
  22.              )
  23.            )
  24.           )
  25.           ((or (= id 122) (= id 90)) (SETQ AAA NIL))
  26.     )
  27.   )
  28. )
a----->加
s----->减
z----->退出

点评

非常感谢zhynt大师一直以来对我的帮助!  发表于 2011-7-12 22:06

评分

参与人数 2金钱 +36 收起 理由
谢谢 + 6 很给力!
669423907 + 30

查看全部评分

发表于 2011-7-12 16:13 | 显示全部楼层
  好东东
 楼主| 发表于 2011-7-12 22:04 | 显示全部楼层
回复 Gu_xl 的帖子

效果相当好!程序非常给力!
非常感谢Gu_xl版主!

本帖子中包含更多资源

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

x
 楼主| 发表于 2011-7-12 22:15 | 显示全部楼层
回复 zhynt 的帖子

请问zhynt大师,你的程序是控制那个变量或者什么东东的呢?
既然可以用 “Z” 退出,那是不是也可以用一个 ???变量?代码?.....代替 “Esc” ?
我想在每天第一次启动 CAD (加载完所有外挂后) 时向 CAD 发送一个“Esc”,去掉一个外挂的弹出框。不知可否?
 楼主| 发表于 2011-7-14 10:40 | 显示全部楼层
回复 Gu_xl 的帖子

请问Gu_xl大师,方不方便加一个功能,把选择要用的标注样式置为当前呢?这样就不用再次选标注样式了。非常感谢你。
发表于 2011-7-14 11:15 | 显示全部楼层
(command "dimstyle" "r" 标注样式名称)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-6-26 19:54 , Processed in 0.165937 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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