明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3913|回复: 15

此修改标精度的程序,无法框选修改,求帮忙看看,谢谢

  [复制链接]
发表于 2011-9-15 16:20:16 | 显示全部楼层 |阅读模式
此修改标精度的程序,无法框选修改,求帮忙看看,谢谢,
(defun C:CHJ ()
(VL-LOAD-COM)
;;; 在模型空间中选择标注对象
   (setq dimObj (car (entsel "\n选择要修改精度的尺寸标注: ")))
   (setq str_0 (cdr (assoc 0 (entget dimObj))))
   (while (and (/= str_0 "LWPOLYLINE") (/= str_0 "DIMENSION"))
      (setq dimObj (car (entsel "\n所选对象不是尺寸标注,请重新选择编辑对象: ")))
      (setq str_0 (cdr (assoc 0 (entget dimObj))))
   )
  (setq dimObj (vlax-ename->vla-object dimObj))

  (setq newTolerance (getint "\n输入标注新的公差精度[0~8]: "))
  
  (if (= newTolerance "")
    (setq newTolerance 0)
    (progn
      (COND
       ((= newTolerance 0)(setq newTolerance acDimPrecisionZero))
       ((= newTolerance 1)(setq newTolerance acDimPrecisionOne))
       ((= newTolerance 2)(setq newTolerance acDimPrecisionTwo))
       ((= newTolerance 3)(setq newTolerance acDimPrecisionThree))
       ((= newTolerance 4)(setq newTolerance acDimPrecisionFour))
       ((= newTolerance 5)(setq newTolerance acDimPrecisionFive))
       ((= newTolerance 6)(setq newTolerance acDimPrecisionSix))
       ((= newTolerance 7)(setq newTolerance acDimPrecisionSeven))
       ((= newTolerance 8)(setq newTolerance acDimPrecisionEight))
       (t(progn (princ "标注精度未改变")(VL-EXIT-WITH-VALUE 0)))
      )
    )
   )
   
(vla-put-PrimaryUnitsPrecision dimObj newTolerance)  ; 确定公差精度的改变
   (vla-put-SuppressTrailingZeros dimObj :vlax-false)
;;; 读取并显示替代标注公差精度
  (setq newTolerance (vla-get-PrimaryUnitsPrecision dimObj))
  (princ "标注精度已经设定为: ")(princ newTolerance)(princ "位小数")

  (princ)
)


本帖被以下淘专辑推荐:

  • · 收集|主题: 58, 订阅: 4
发表于 2024-10-8 14:53:48 | 显示全部楼层

xyp1964大师的代码有用,感谢大师的无私奉献!
发表于 2024-7-14 11:34:14 | 显示全部楼层

10楼的方法最好,语句简洁,测试结果很好,实现速度快。赞一个
发表于 2020-1-6 13:08:26 | 显示全部楼层
10楼的方法最好,语句简洁,测试结果很好,实现速度快。赞一个
发表于 2011-9-16 06:06:24 | 显示全部楼层
entsel本身就只能单选。如果要框选,请用
(setq ss (ssget "x" '((-4 . "<OR")(0 . "LWPOLYLINE)(0 . "DIMENSION")(-4 . "OR>"))))
(setq n 0)
(setq newTolerance (getint "\n输入标注新的公差精度[0~8]: "));;;先设置后选择,不然每次都提示输入,那框选就没有意义了
(repeat (sslength ss)
(setq str_0 (ssname n ss))
(setq n (1+ n))
(setq dimObj (vlax-ename->vla-object dimObj))
;;;接你原来改精度的部分
)
 楼主| 发表于 2011-9-16 11:43:57 | 显示全部楼层
cabinsummer 发表于 2011-9-16 06:06
entsel本身就只能单选。如果要框选,请用
(setq ss (ssget "x" '((-4 . "vla-object dimObj))
;;;接你原来 ...

非常感谢,图像是你女儿吗,很可爱呀

点评

别人家的  发表于 2011-9-16 19:15
发表于 2011-12-16 11:25:10 | 显示全部楼层
发表于 2011-12-22 00:49:22 | 显示全部楼层
最近正好在想有这样的工具就好了。。
发表于 2012-4-26 14:10:59 | 显示全部楼层
正好想写一个按颜色修改标注的程序,谢谢!
发表于 2012-4-26 20:51:21 | 显示全部楼层
cabinsummer版主把你写的那加上去怎么不行。

(defun C:DJD ()
(VL-LOAD-COM)
  (setq ss (ssget "x" '((-4 . "<OR")(0 . "LWPOLYLINE")(0 . "DIMENSION")(-4 . "OR>"))))
    (setq n 0)
(setq newTolerance (getint "\n输入标注新的公差精度[0~8]: "))   
   (repeat (sslength ss)
     (setq str_0 (ssname n ss))
     (setq n (1+ n))
     (setq dimObj (vlax-ename->vla-object dimObj))

     (progn
      (COND
       ((= newTolerance 0)(setq newTolerance acDimPrecisionZero))
       ((= newTolerance 1)(setq newTolerance acDimPrecisionOne))
       ((= newTolerance 2)(setq newTolerance acDimPrecisionTwo))
       ((= newTolerance 3)(setq newTolerance acDimPrecisionThree))
       ((= newTolerance 4)(setq newTolerance acDimPrecisionFour))
       ((= newTolerance 5)(setq newTolerance acDimPrecisionFive))
       ((= newTolerance 6)(setq newTolerance acDimPrecisionSix))
       ((= newTolerance 7)(setq newTolerance acDimPrecisionSeven))
       ((= newTolerance 8)(setq newTolerance acDimPrecisionEight))
       (t(progn (princ "标注精度未改变")(VL-EXIT-WITH-VALUE 0)))
      )
     )
)
   (vla-put-PrimaryUnitsPrecision dimObj newTolerance)  ; 确定公差精度的改变
   (vla-put-SuppressTrailingZeros dimObj :vlax-false)

;;; 读取并显示替代标注公差精度
  (setq newTolerance (vla-get-PrimaryUnitsPrecision dimObj))
  (princ "标注精度已经设定为: ")(princ newTolerance)(princ "位小数")
  (princ)
)
发表于 2012-4-26 23:12:36 来自手机 | 显示全部楼层
好帖,留名。。。。
发表于 2012-4-26 23:39:43 | 显示全部楼层
本帖最后由 xyp1964 于 2012-4-26 23:40 编辑
  1. (defun c:tt ()
  2.   (if (setq ss (ssget '((0 . "DIMENSION"))))
  3.     (progn
  4.       (setq nt (getint "\n输入标注新的公差精度[0~8]: ")
  5.             n  0
  6.       )
  7.       (repeat (sslength ss)
  8.         (setq s1 (ssname ss n)
  9.               n         (1+ n)
  10.               ob (vlax-ename->vla-object s1)
  11.               nn (COND ((= nt 0) acDimPrecisionZero)
  12.                        ((= nt 1) acDimPrecisionOne)
  13.                        ((= nt 2) acDimPrecisionTwo)
  14.                        ((= nt 3) acDimPrecisionThree)
  15.                        ((= nt 4) acDimPrecisionFour)
  16.                        ((= nt 5) acDimPrecisionFive)
  17.                        ((= nt 6) acDimPrecisionSix)
  18.                        ((= nt 7) acDimPrecisionSeven)
  19.                        ((= nt 8) acDimPrecisionEight)
  20.                        (t nil)
  21.                  )
  22.         )
  23.         (if nn
  24.           (progn (vla-put-PrimaryUnitsPrecision ob nn)
  25.                  (vla-put-SuppressTrailingZeros ob :vlax-false)
  26.           )
  27.         )
  28.       )
  29.       (if (< nn 9)
  30.         (progn (princ "标注精度已经设定为: ")
  31.                (princ nt)
  32.                (princ "位小数")
  33.         )
  34.       )
  35.     )
  36.   )
  37.   (princ)
  38. )
发表于 2012-4-27 00:03:06 | 显示全部楼层
;;直接用command的方法
  1. (defun c:tt ()
  2.   (if (and (setq nt (getint "\n输入标注新的公差精度[0~8]: "))
  3.            (setq ss (ssget '((0 . "DIMENSION"))))
  4.       )
  5.     (progn
  6.       (setvar 'DIMDEC nt)
  7.       (command "dim" "upd" ss "" "e")
  8.     )
  9.   )
  10.   (princ)
  11. )
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 05:47 , Processed in 0.210950 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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