明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4395|回复: 10

舍去和修改尺寸标注小数点后数值

[复制链接]
发表于 2012-9-21 22:23:39 | 显示全部楼层 |阅读模式
1明经币
本帖最后由 sz721 于 2012-9-21 22:24 编辑

选择需要修改的标注,使其尺寸数值取整或保留小数点一位(都为 .5)。如果小数点后数值为 0.1~0.4 则舍去小数取整。如果小数点后数值为 0.5~0.9 则保留小数并一律改为 0.5 。整数不做改变。效果如下:

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

最佳答案

查看完整内容

(defun c:tt( / e en rd rd1 sd1 ti%) (princ "\n选择要修改的尺寸:") (setq sd1 (ssget '((0 . "DIMENSION")))) (setq ti% 0) (repeat (sslength sd1) (setq en (ssname sd1 ti%)) (setq e (entget en)) (setq rd (cdr (assoc 42 e))) (if (equal (fix rd) (fix (+ 0.5 rd)) 0) (setq rd1 (rtos (fix rd) 2 0)) (setq rd1 (rtos (+ (fix rd) 0.5) 2 1)) ) (en ...

点评

牵涉到图元对象最好以图样(*.Dwg)为准  发表于 2012-9-21 23:05
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2012-9-21 22:23:40 | 显示全部楼层
本帖最后由 cable2004 于 2012-9-25 02:09 编辑

(defun c:tt( / e en rd rd1 sd1 ti%)
  (princ "\n选择要修改的尺寸:")
  (setq sd1 (ssget '((0 . "DIMENSION"))))
  (setq ti% 0)
  (repeat  (sslength sd1)
     (setq en (ssname sd1 ti%))
     (setq e (entget en))
     (setq rd (cdr (assoc 42 e)))
     (if (equal (fix rd) (fix (+ 0.5 rd)) 0)
         (setq rd1 (rtos (fix rd) 2 0))
         (setq rd1 (rtos (+ (fix rd) 0.5) 2 1))
    )
  (entmod (subst (cons 1  rd1) (assoc 1 e) e))
    (setq ti%(+ 1 ti%))
)
)

本帖子中包含更多资源

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

x
回复

使用道具 举报

发表于 2012-9-21 22:41:47 | 显示全部楼层
设置标注样式可以满足要求
回复

使用道具 举报

发表于 2012-9-21 22:44:49 | 显示全部楼层
本帖最后由 nigma 于 2012-9-21 22:45 编辑

这个在autocad里面有控制的吧
例如DIMRND=0.5就可以了。
回复

使用道具 举报

 楼主| 发表于 2012-9-21 22:55:07 | 显示全部楼层
本帖最后由 sz721 于 2012-9-21 22:58 编辑
nigma 发表于 2012-9-21 22:44
这个在autocad里面有控制的吧
例如DIMRND=0.5就可以了。


主要是我要修改别人的图纸,况且设置0.5的话,数值碰到0.8或0.9就会进1。
回复

使用道具 举报

发表于 2012-9-23 11:26:36 | 显示全部楼层
这个好说,
回复

使用道具 举报

发表于 2012-9-24 23:09:52 | 显示全部楼层
本帖最后由 lyqiezi 于 2012-9-24 23:10 编辑

(defun c:cc5()
  (princ "\n选择要修改的尺寸:")
  (setq sd1 (ssget '((0 . "DIMENSION"))))
  (setq ti% 0)
  (if (/= sd1 nil)
     (while
        (<= ti%
          (- (sslength sd1) 1)
        )
      (setq en (ssname sd1 ti%))
      (setq e (entget en))
      (setq od (assoc 1 e))
      (setq rd (cdr (assoc 42 e)))
      (setq dt1 (cdr od))
      (if (= dt1 "")
          (setq dt1 (rtos rd 2 2))
       )
      (setq xsd (vl-string-search "." dt1))
      (if (/= xsd nil)
        (progn
          (setq ndt1 (substr dt1 1 xsd))
          (setq ndt2 (atof (substr dt1 (+ xsd 2) 1)))
          (if (<= ndt2 4)
               (setq ndt2 "")
               (setq ndt2 ".5")
          )
        (setq ndt (strcat ndt1 ndt2))
        (setq nd (cons 1 ndt))  
        (setq e (subst nd od e))
        (entmod e)
       )
      )
     (setq ti%(+ 1 ti%))
     )
   )
   (prin1)
   )
回复

使用道具 举报

发表于 2012-9-24 23:13:23 | 显示全部楼层
搞了半天,终于搞出来了
尺寸标注的42跟1是不同的格式,看着算出来的数都对,结果一开始只对修改过的尺寸有效,害我找了老半天的问题,好不容易才发现一个是字符,一个是数值
回复

使用道具 举报

发表于 2012-9-24 23:42:47 | 显示全部楼层
如果用vba做的话,很简单,一个for循环就可以了,建议楼主发一个dwg格式的上来,方便调试代码
回复

使用道具 举报

发表于 2012-9-25 07:36:20 | 显示全部楼层
本帖最后由 xyp1964 于 2012-9-25 07:36 编辑

需要考虑伪尺寸的情况

  1. ;; 伪源码需要e派工具箱的支持
  2. (defun c:tt ()
  3.   (setq i -1)
  4.   (princ "\n选择要修改的尺寸: ")
  5.   (if (setq ss (ssget '((0 . "DIMENSION"))))
  6.     (while (setq s1 (ssname ss (setq i (1+ i))))
  7.       (setq tx (xyp-dxf 1 s1)
  8.             rd (if (= tx "")
  9.                  (xyp-dxf 42 s1)
  10.                  (distof tx)
  11.                )
  12.             r0 (fix rd)
  13.             r1 (if (equal r0 (fix (+ 0.5 rd)) 0)
  14.                  (rtos r0 2 0)
  15.                  (rtos (+ r0 0.5) 2 1)
  16.                )
  17.       )
  18.       (xyp-SubUpd s1 1 r1)
  19.     )
  20.   )
  21.   (princ)
  22. )

点评

院长提供的是伪源码,我使用外文系统无法测试。  发表于 2012-9-25 09:11
应加上tx内容为"<>"的判断  发表于 2012-9-25 09:10
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-8-28 00:21 , Processed in 0.197470 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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