明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1798|回复: 3

[提问] 标注舍入

[复制链接]
发表于 2023-7-7 23:38:28 | 显示全部楼层 |阅读模式
那个大佬有标注指定舍入的程序吗,分享一下大家学习。

目前只能选出来Ctrl+1打开特性编辑 ;或者在标注样式编辑器的单位里舍入
有没有大佬能写一个框选标注,可以任意指定舍入呢,
因为有时需要舍入有些不需要,在标注样式编辑器的单位最方便,但不通用。
打开特性编辑的话效率出不来。

本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2023-7-8 14:53:53 | 显示全部楼层
本帖最后由 pizi158545086 于 2023-7-9 14:19 编辑

(defun ureal (bit kwd msg def / inp);by院长
  (if def
    (setq msg (strcat "\n" msg "<" (rtos def 2) ">: ")
          bit (* 2 (fix (/ bit 2)))
    )
    (setq msg (strcat "\n" msg ": "))
  )
  (initget bit kwd)
  (setq inp (getreal msg))
  (if inp inp def)
)
;标注取整
(defun c:ZX( / ss len i blk)
                                (setq OLDDIMRND (getvar "DIMRND" ))
                                (setq rnd (Ureal 5 "" "舍入值" rnd))
                (if (setq ss (SSGET ((0 . "*Dimension"))))
                                (progn
                                        (setq len (sslength ss)
                                                                i 0)
                                        (repeat len
                                                (setq blk (ssname ss i))
                                                (vla-put-RondDisance (vlax-ename>vla-object blk ) rnd)
                                                (setq i (1+ i))
                                        )
                                )
                )
                (setvar "DIMRND" OLDDIMRND)
)
 楼主| 发表于 2023-7-9 03:26:10 | 显示全部楼层
pizi158545086 发表于 2023-7-8 14:53
(defun ureal (bit kwd msg def / inp);by院长
  (if def
    (setq msg (strcat "\n" msg ": ")

加载显示   错误: 输入的字符串有缺陷   不知道是什么原因
 楼主| 发表于 2025-6-11 14:14:52 | 显示全部楼层
本帖最后由 KO你 于 2025-6-17 17:43 编辑


快捷键  dfs  标注舍入
(defun c:dfs (/ *error* ss inputStr prec doc i ent dimObj decimals reset)
(vl-load-com)
(if (not (boundp '*dfs-last-prec*))
(setq *dfs-last-prec* 0.0))
(defun *error* (msg)
(if doc (vla-endundomark doc))
(if (not (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*"))
(princ (strcat "\n错误: " msg)))(princ))
(setq doc (vla-get-activedocument (vlax-get-acad-object)))
(vla-startundomark doc)
(setq ss (ssget '((0 . "DIMENSION"))))
(if (null ss)(progn(alert "未选择标注对象!")(exit)))
(initget 0 "F f")
(setq inputStr (getstring
(strcat "\n输入标注舍入精度,按<F>恢复) "(if (> *dfs-last-prec* 0.0)
(strcat "<"(rtos *dfs-last-prec*)">")"")": ")))
(cond((or (equal inputStr "F") (equal inputStr "f"))
(setq reset T)
(setq prec nil))
((equal inputStr "")
(setq reset nil)
(setq prec *dfs-last-prec*))
(T(if (setq prec (distof inputStr))
(progn(setq *dfs-last-prec* prec)
(setq reset nil))
(progn(alert "输入无效,请重新输入数值!")(exit)))))
(if (not reset)
(setq decimals(cond((= (fix prec) prec) 0)
((< prec 0.1) 2)(T 1))))(setq i 0)
(repeat (sslength ss)
(setq ent (ssname ss i))
(setq dimObj (vlax-ename->vla-object ent))
(if reset(progn
(vla-put-RoundDistance dimObj 0.0)
(vla-put-TextOverride dimObj "")
(vla-put-PrimaryUnitsPrecision dimObj
(if (vlax-property-available-p dimObj 'UnitsPrecision)
(vla-get-UnitsPrecision dimObj) 2)))
(progn
(vla-put-RoundDistance dimObj prec)
(vla-put-PrimaryUnitsPrecision dimObj decimals)
(vla-put-TextOverride dimObj "\\A1;<>")))
(setq i (1+ i)))
(vla-endundomark doc)
(princ (strcat "\n成功处理了 " (itoa (sslength ss)) " 个标注。"))
(if reset(progn
(princ " 已恢复标注到默认设置(跟随标注样式)。")))
(princ))
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-12 07:54 , Processed in 0.143826 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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