明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3215|回复: 26

[讨论] 阿甘计算器怎么改一下能提取标注的数值呀

[复制链接]
发表于 2020-4-23 07:54 | 显示全部楼层 |阅读模式
本帖最后由 xj6019 于 2020-4-23 11:00 编辑

论坛找了几个版本的阿甘计算器,都是不能提取标注数值
以下代码求大佬赐教,怎么才能提取标注数值,我自己改了很多次,都没成功,无奈再次求助大神们吧,谢谢!!
;提取数字和运算符
(defun GL:GetNumber (ope / en num i regex ss text tn)
  (setq regex (vlax-create-object "Vbscript.RegExp")) ;引用正则表达式控件
  (vlax-put-property regex "IgnoreCase" 0)            ;不忽略大小写
  (vlax-put-property regex "Global" 1)                ;全文匹配,而不是只匹配第一处
  (setq ss (ssget '((0 . "*TEXT,TCH_ELEVATION,DIMENSION"))))    ;只拾取文字、天正标高  求助加上可以提取标注数值
  (if ss
  (progn
  (setq i 0 Num "")
  (repeat (sslength ss)
    (setq en (ssname ss i))
    (setq GL-ed (entget en))        
    (setq text (cdr (assoc 1 GL-ed)))
    (vlax-put-property regex "Pattern" "[^0-9\\+\\-\\*\\/\\.\\(\\)]") ;匹配数字和运算符
    (setq text (vlax-invoke-method regex "Replace" text ""))
    (if (/= text "")
         (progn
      (if (= Num "") ;表达式加括号
        (if (wcmatch text "*`+*,*`-*,*`**,*`/*")
         (setq Num (strcat"(" text ")") TN nil)
         (setq Num text TN nil)
        )
        (setq TN T)
      )
      (if TN ;表达式加括号
        (if (wcmatch text "*`+*,*`-*,*`**,*`/*")
          (setq Num (strcat Num ope "(" text ")"))
          (setq Num (strcat Num ope text))
        )
      )
      ;(if (= Num "")(setq Num text TN nil)(setq TN T));表达式不加括号
      ;(if TN (setq Num (strcat Num ope text)));表达式不加括号
     )
    )
    (setq i (1+ i))
  )
  ))
  Num
)





本帖子中包含更多资源

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

x

评分

参与人数 1明经币 +1 收起 理由
xmq1103 + 1 很给力!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2020-4-23 13:29 | 显示全部楼层
xj6019 发表于 2020-4-23 11:56
现在提取的数精确的太多了,得12位呢,导致后期的插入就没法用了,我觉得提取的标注精确到三四位  足够了

把那句改为: (if (= "DIMENSION" (cdr (assoc 0 GL-ed))) (setq text (atof (rtos (cdr (assoc 42 GL-ed)) 2 3))) (setq text (cdr (assoc 1 GL-ed))))

标注组码1是图面显示的数字,可以手动改,如果组码1是空格就等于42组码,就是真实数字
 楼主| 发表于 2020-4-23 11:56 | 显示全部楼层
start4444 发表于 2020-4-23 11:09
(setq text (cdr (assoc 1 GL-ed)))    >>>    (if (= "DIMENSION" (cdr (assoc 0 GL-ed))) (setq text (cd ...

现在提取的数精确的太多了,得12位呢,导致后期的插入就没法用了,我觉得提取的标注精确到三四位  足够了
发表于 2020-5-5 16:43 | 显示全部楼层
start4444 发表于 2020-4-23 11:09
(setq text (cdr (assoc 1 GL-ed)))    >>>    (if (= "DIMENSION" (cdr (assoc 0 GL-ed))) (setq text (cd ...

大神你能帮这个帖子最后的问题一起解决下  然后贴下代码吗  我也很需要
发表于 2020-4-23 11:09 | 显示全部楼层
(setq text (cdr (assoc 1 GL-ed)))    >>>    (if (= "DIMENSION" (cdr (assoc 0 GL-ed))) (setq text (cdr (assoc 42 GL-ed))) (setq text (cdr (assoc 1 GL-ed))))

点评

精确的位数可调吗?看别的介绍明白一个事,这个有两种提取方式,一个是你写的提取实际标注的数值,一个是提取显示标注的数值,两种提取方式区别是什么,能分别教给我一下吗  发表于 2020-4-23 12:25

评分

参与人数 1明经币 +1 收起 理由
xj6019 + 1 很给力!

查看全部评分

 楼主| 发表于 2020-4-23 11:36 | 显示全部楼层
start4444 发表于 2020-4-23 11:09
(setq text (cdr (assoc 1 GL-ed)))    >>>    (if (= "DIMENSION" (cdr (assoc 0 GL-ed))) (setq text (cd ...

漂亮!!只要小数点后3位,怎么控制?
 楼主| 发表于 2020-4-23 14:14 | 显示全部楼层
start4444 发表于 2020-4-23 13:29
把那句改为: (if (= "DIMENSION" (cdr (assoc 0 GL-ed))) (setq text (atof (rtos (cdr (assoc 42 GL-ed ...

明白了,谢谢!
发表于 2020-4-23 15:45 | 显示全部楼层
“插算式” “插结果” 好像没用
 楼主| 发表于 2020-4-23 16:00 | 显示全部楼层
对 确实还不行,我还在找原因,没明白怎么回事,为什么一插入就出错,有明白的也希望指点一二
 楼主| 发表于 2020-4-23 16:02 | 显示全部楼层
start4444 发表于 2020-4-23 13:29
把那句改为: (if (= "DIMENSION" (cdr (assoc 0 GL-ed))) (setq text (atof (rtos (cdr (assoc 42 GL-ed ...

看回帖的有问的了,确实插入结果和算式提示出错,没法插入,要是有时间的话,再烦请看看
现在我倒是够用的,修修更好

点评

生成字体的时候对应标注的组码参数要补充判断调整,自己解决一下  发表于 2020-4-23 18:26
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-13 00:32 , Processed in 0.186151 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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