669423907 发表于 2011-7-11 23:00:29

动态切换标注样式,保留标注样式 PU (感谢Gu_xl 版主完美解决)

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

Gu_xl 发表于 2011-7-12 11:14:14

回复 669423907 的帖子


(defun c:tabdim (/ loop i ss dimstyles gr cnt)
(setq dimstyles (vl-sort (gxl-table "dimstyle") '(lambda (a b) (> (atoi a) (atoi b))))
        cnt (length dimstyles)
        i -1
        loop t
        )
(setq ss (ssget '((0 . "DIMENSION"))))
(if ss
    (progn
      (princ "\n*** 键入 A 或 S 切换标注样式 , 回车键或右键结束 *** ")
      (princ "\n")
      (while loop
        (setq gr (grread t 5 1))
        (if (= 2 (car gr))
        (cond ((or (= 97 (cadr gr)) (= 65 (cadr gr)))
             (setq i (1+ i)
                     i (rem i cnt)
                     )
             (setq style (nth i dimstyles))
             (princ (strcat "\r***当前标注样式为: " style "                                     "))
             (gxl-sel-mapcar ss '(lambda (x) (GXL-CH_ENT x 3 style)))
             )
              ((or (= 83 (cadr gr)) (= 115 (cadr gr)))
             (setq i (1- i))
                (if (MINUSP i) (setq i (+ i cnt)))   
             (setq style (nth i dimstyles))
             (princ (strcat "\r***当前标注样式为: " style "                                     "))
             (gxl-sel-mapcar ss '(lambda (x) (GXL-CH_ENT x 3 style)))
             )
              ((= 13 (cadr gr)) (setq loop nil))
              ) ;_ cond
          (if (= 25 (car gr))
          (setq loop nil)
          )
          )
        )
      
      )
    )
    (princ)
)
;;;gxl-table 返回包含在指定符号表中的所有元素
(defun gxl-table (s / d r)
(while (setq d (tblnext s (null d)))
    (setq r (cons (cdr (assoc 2 d)) r))
)
)
;;;(gxl-CH_Ent ent i pt) 用新值pt更新图元ent索引i对应的值
(defun gxl-CH_Ent (ent i pt / en)
(if (assoc i (setq en (entget ent)))
    (setq en (subst (cons i pt) (assoc i en) en))
    (setq en (append en (list (cons i pt))))
    )
    (entmod en)
)
;;;(gxl-Sel-Mapcar ss Fun) 遍历选择集对所包含的图元进行指定函数操作,返回操作后的表
(defun gxl-Sel-Mapcar (ss Fun / nn rtn)
(repeat (setq nn (sslength ss))
(setq rtn (cons (apply Fun (list (ssname ss (setq nn (1- nn))))) rtn))
    )
)

大西瓜 发表于 2024-5-28 19:57:30

加载插件,测试标注样式可以切换,但对于全局比例不为1的样式会失效。全局比例没有随标注样式同步更新,所有看到标注大小有时候没有变化

大西瓜 发表于 2024-5-28 20:43:00

诺捷铝板插件中,有个快捷键切换标注样式的功能用的是Gu_xl版主的代码

669423907 发表于 2011-7-12 10:11:11

非常有创意的程序啊,哪位大师帮帮忙啦!

669423907 发表于 2011-7-12 11:42:24

回复 Gu_xl 的帖子

非常感谢 Gu_xl大师的热情帮助!
现在用手机上,晚上再下!
再次感谢Gu_xl大师!

zhynt 发表于 2011-7-12 12:02:26

是可以实现的
一个例子:
(defun c:tt ()
(setq aaa T)
(setq n 1)
(setq nmin 1)
(setq nmax 10)
(while AAA
    (setq code (grread))
    (setq id (cadr code))
    (cond ((or (= id 97) (= id 63))
           (if (= n nmax)
             (prompt "\n已经到头了!!!")
             (progn (prompt (strcat "\n当前值为" (rtos n)))
                  (setq n (1+ n))
             )
           )
          )
          ((or (= id 115) (= id 83))
           (if (= n nmin)
             (princ "\n已经到头了!!!")
             (progn (princ (strcat "\n当前值为" (rtos n)))
                  (setq n (1- n))
             )
           )
          )
          ((or (= id 122) (= id 90)) (SETQ AAA NIL))
    )
)
)
a----->加
s----->减
z----->退出

634074698 发表于 2011-7-12 16:13:44

好东东

669423907 发表于 2011-7-12 22:04:06

回复 Gu_xl 的帖子

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

669423907 发表于 2011-7-12 22:15:58

回复 zhynt 的帖子

请问zhynt大师,你的程序是控制那个变量或者什么东东的呢?
既然可以用 “Z” 退出,那是不是也可以用一个 ???变量?代码?.....代替 “Esc” ?
我想在每天第一次启动 CAD (加载完所有外挂后) 时向 CAD 发送一个“Esc”,去掉一个外挂的弹出框。不知可否?

669423907 发表于 2011-7-14 10:40:08

回复 Gu_xl 的帖子

请问Gu_xl大师,方不方便加一个功能,把选择要用的标注样式置为当前呢?这样就不用再次选标注样式了。非常感谢你。

Gu_xl 发表于 2011-7-14 11:15:41

(command "dimstyle" "r" 标注样式名称)
页: [1] 2 3 4 5
查看完整版本: 动态切换标注样式的程序,搞机械的很实用啊!(感谢Gu_xl 版主完美解决)