明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: ygrzz

[求助]如何把直径标注前的直径符号改为M

  [复制链接]
发表于 2007-2-1 13:48:00 | 显示全部楼层
(defun C:test (/ IDX SS en blkname blks DOC dimblkdef txtstr)
  (IF (SETQ SS (SSGET '((0 . "*DIMENSION"))))
    (PROGN
      (SETQ IDX 0)
      (WHILE (<= IDX (1- (SSLENGTH SS)))
 (SETQ en (SSNAME SS IDX))
 (setq blkname (cdr (assoc 2 (entget en))))
 (setq
   blks (vla-get-blocks
   (SETQ
     DOC (vla-get-activedocument (vlax-get-acad-object))
   )
        )
 )
 (setq dimblkdef (vla-item blks blkname))
 (vlax-for subobj dimblkdef
   (if (= (vla-get-objectname subobj) "AcDbMText")
     (progn
       (setq txtstr (vla-get-textstring subobj))
       (if (vl-string-search "\\U+2205" txtstr)
  (PROGN
    (setq txtstr (vl-string-subst "M" "\\U+2205" txtstr))
    (vla-put-textstring subobj txtstr)
  )
       )
       (if (vl-string-search "%%C" txtstr)
  (PROGN
    (setq txtstr (vl-string-subst "M" "%%C" txtstr))
    (vla-put-textstring subobj txtstr)
  )
       )
       (if (vl-string-search "%%c" txtstr)
  (PROGN
    (setq txtstr (vl-string-subst "M" "%%c" txtstr))
    (vla-put-textstring subobj txtstr)
  )
       )
     )
   )
 )
 (SETQ IDX (1+ IDX))
      )
      (VLA-REGEN DOC acActiveViewport)
    )
  )
  (princ)
)
发表于 2007-2-1 19:28:00 | 显示全部楼层

alin的程序和ZZXXQQ的程序,都只能处理图中的其中一个标注,这是不够的。

ZZXXQQ的程序用文字替代方式,更加不合理。

本帖子中包含更多资源

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

x
 楼主| 发表于 2007-2-1 20:32:00 | 显示全部楼层
对一般线性标注按常规处理另建前缀标注当然可以
改下拉菜单(熟悉菜单格式的话)如下也不错
               [线性标注螺纹M ]^C^C_dimlinear \\t;M<>;
               [线性标注螺纹4-M ]^C^C_dimlinear \\t;4-M<>;
               [线性标注直径φ ]^C^C_dimlinear \\t;%%C<>;
改lisp也简单,
(defun c:4m () (command "dimlinear" pause pause "t" "4-M<>"))

但是直径标注dimdiameter套上去
(defun c:4m () (command "dimdiameter" pause "t" "4-M<>"))
出来的结果那个直径符号也一并出来了
还非得用前面2位斑竹程序去整不可,
当然不嫌烦的话标注的过程中输入选项“T”再打上实际数值也不反对

2斑竹已曲同工,测试结果都很好


 楼主| 发表于 2007-2-1 21:19:00 | 显示全部楼层
悄悄问下alin ,程序好长哦,开个玩笑~~~`一定花了你不少时间,谢过了!
看见有好多人写过公差标注,我觉得有一点是相通的,读取标注原值
ZZXXQQ也是读取了标注原值,肯定不会出错的


 楼主| 发表于 2007-2-1 22:45:00 | 显示全部楼层
 (IF (= TY "AcDbDiametricDimension")

ZZXXQQ斑竹,你就干脆作个对线性标注的判断,如果是一般线性标注
直接加"M"可以不
 楼主| 发表于 2007-2-1 23:05:00 | 显示全部楼层
坐标尺寸标注(AcDbOrdinateDimension)
 (IF
 (= TY "AcDbOrdinateDimension")
。。。。?
发表于 2007-2-2 08:16:00 | 显示全部楼层
区别是ZZXXQQ的程序重新计算尺寸值,有可能篡改你图中医编辑过的尺寸值,还有精度的问题,比如用ZZXXQQ的程序%%c70的尺寸值有可能改成M69.88
发表于 2007-2-2 11:39:00 | 显示全部楼层
ygrzz发表于2007-2-1 22:45:00 (IF (= TY \"AcDbDiametricDimension\")ZZXXQQ斑竹,你就干脆作个对线性标注的判断,如果是一般线性标注直接加\"M\"可以不
  1. (DEFUN C:TEST ()
  2. (SETVAR "CMDECHO" 0)
  3. (PROMPT "\nSelect Dimension(s) :")
  4. (IF (SETQ SS (SSGET '((0 . "DIMENSION")))) (PROGN
  5.   (SETQ I -1)
  6.   (REPEAT (SSLENGTH SS)
  7.    (SETQ ENT (ENTGET (SSNAME SS (SETQ I (1+ I))))
  8.          TY (CDR (ASSOC 100 (REVERSE ENT))))
  9.    (COND
  10.     ((= TY "AcDbDiametricDimension")
  11.      (SETQ D (DISTANCE (CDR (ASSOC 10 ENT)) (CDR (ASSOC 15 ENT)))
  12.     DTX (STRCAT "M" (RTOS D 2 3))
  13.     TX (CDR (ASSOC 1 ENT)))
  14.      (IF (OR (= TX "") (= TX "<>"))
  15.       (SETQ ENT (SUBST (CONS 1 DTX) (ASSOC 1 ENT) ENT))
  16.       (SETQ ENT (SUBST (CONS 1 (STRCAT "M" TX)) (ASSOC 1 ENT) ENT))
  17.      )
  18.      (ENTMOD ENT)
  19.     )
  20.     ((= TY "AcDbAlignedDimension")
  21.      (SETQ TX (CDR (ASSOC 1 ENT)))
  22.      (IF (OR (= TX "") (= TX "<>"))
  23.       (SETQ ENT (SUBST (CONS 1 "M<>") (ASSOC 1 ENT) ENT))
  24.       (SETQ ENT (SUBST (CONS 1 (STRCAT "M" TX)) (ASSOC 1 ENT) ENT))
  25.      )
  26.      (ENTMOD ENT)
  27.     )
  28.    )
  29.   )
  30. ))
  31. (SETVAR "CMDECHO" 1)
  32. (PRINC)
  33. )
发表于 2007-2-2 12:43:00 | 显示全部楼层
个人比较赞同alin  的观点
发表于 2007-2-2 18:35:00 | 显示全部楼层

两个程式都值得学习哦!谢谢了

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

本版积分规则

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

GMT+8, 2025-6-21 00:14 , Processed in 0.232374 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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