明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1675|回复: 5

[已解答] 请教这段代码提取标注原始尺寸时,为何再刷进另一标注时个位数被取整了?请大师修改下

[复制链接]
发表于 2014-10-25 19:44 | 显示全部楼层 |阅读模式
本帖最后由 ★飞飛★ 于 2014-10-26 16:48 编辑
  1. ;;;---------------------------------------------------
  2. (defun c:dg (/ p sn en p1 nam ty e1 e2 st p2 p3 p4 ss );点改文字、属性或标注尺寸为源文字内容。
  3. ;-----------------------------------------------------
  4. (command "undo" "g")
  5. (setq os (getvar "osmode") blp (getvar "blipmode"))
  6. (setvar "blipmode" 0)
  7. (graphscr)
  8. (if (null text0)(setq text0 ""))
  9. (canzhao)
  10. (while  (setq p (entsel "\n点取要改的文字、属性或标注尺寸:"))
  11.    (setq sn  (car p)
  12.    en  (entget sn)
  13.    p1  (to 10)
  14.    nam (to 2)
  15.    ty  (to 0)
  16.    )
  17.    (if (or (= "TEXT" ty) (= "INSERT" ty) (= "DIMENSION" ty))
  18.      (if (or (= "TEXT" ty) (= "DIMENSION" ty))
  19.        (progn ;; 将文字改为参照的文字内容
  20.         (setq e1 (subst (cons 1 st) (assoc 1 en) en))
  21.         (entmod e1)
  22.        ) ;progn
  23.       
  24.        (progn ;; 将属性改为参照的文字内容
  25.         (setq e1 (entget (entnext (cdr (car en)))))
  26.         (setq e1 (subst (cons 1 st) (assoc 1 e1) e1))
  27.         (entmod e1)
  28.         (entmod en)
  29.         (if (or (eq nam "PQ") (eq nam "PQ1"))
  30.     (progn
  31.       (setq e2 (entget (entnext (cdr (car e1)))))
  32.       (setq e2 (subst (cons 1 st) (assoc 1 e2) e2))
  33.       (entmod e2)
  34.       (entmod en)
  35.     )
  36.         )
  37.        ) ;progn
  38.      )
  39.      (progn
  40.        (princ "n所选物体是")
  41.        (princ (cdr (assoc 0 en)))
  42.        (princ ", 不是文字或图块,请重新选择:n")
  43.      )
  44.    )
  45. ) ;while
  46. (setvar "blipmode" blp)
  47. (terpri)
  48. (command "undo" "end")
  49. (princ "★飞飞★ 2012.6.1 修改")
  50. (princ)
  51. )

  52. (defun to (n)
  53.   (cdr (assoc n (entget sn)))
  54. )

  55. (defun canzhao (/ sn p13 p14) ;;提取参照文字或属性内容:
  56.   (setq sn (car (entsel (strcat "\n点取需用参照的文字、属性或标注尺寸<" text0 ">:"))))
  57.   (if (= sn nil)
  58.     (setq st text0)
  59.     (if  (or (= "TEXT" (to 0))
  60.       (= "INSERT" (to 0))
  61.       (= "DIMENSION" (to 0))) ;or
  62.       (if (= "INSERT" (to 0))
  63.   (setq st (entget (entnext (cdr (car (entget sn)))))
  64.         st (cdr (assoc 1 st))) ;;提取属性
  65.   (progn
  66.     (if (= "DIMENSION" (to 0))
  67.       (progn ;;提取尺寸
  68.        (setq p13 (to 13)
  69.        p14 (to 14))
  70.        (if (eq (to 1) "")
  71.          (setq st (* (fix (/ (+ (distance p13 p14) 4) 10)) 10)
  72.          st (itoa st))
  73.          (setq st (to 1))
  74.        )
  75.       )
  76.       (setq st (to 1)) ;;提取文字
  77.     )
  78.   )
  79.       ) ;if
  80.       (setq st "")
  81.     ) ;if
  82.   ) ;if
  83.   (setq text0 st)
  84. )

本帖子中包含更多资源

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

x
 楼主| 发表于 2014-10-25 20:17 | 显示全部楼层
本帖最后由 ★飞飛★ 于 2014-10-25 20:23 编辑

这个问题一直困挠我很长时间了,一直修改不成功。望老师们不吝赐教,另,这段程序对于标注刷文字还是很有用处的,也可以与其它文本、块属性文字互刷,在此贴出源码,待修改完善后,希望能对各位朋友在工作中有所帮助。因为我就经常的用到,而不是手动的去改数字,那样对于我们这些懒人来说太麻烦了,呵呵。
发表于 2014-10-26 15:03 | 显示全部楼层
涵数 rtos 可以设精度
 楼主| 发表于 2014-10-26 15:37 | 显示全部楼层
琴剑江山_10184 发表于 2014-10-26 15:03
涵数 rtos 可以设精度

这个程序里面没有用到rtos函数,我原来也试了这个的,没成功。谢谢
发表于 2014-10-26 15:55 | 显示全部楼层
73行修改为
  1. (setq st (fix (+ (distance p13 p14) 0.5))
 楼主| 发表于 2014-10-26 16:42 | 显示全部楼层
本帖最后由 ★飞飛★ 于 2014-10-26 16:55 编辑
vectra 发表于 2014-10-26 15:55
73行修改为

谢谢vectra老师,原来是这里的BUG。成功!有需要有朋友请上楼顶下载测试成功版本的附件。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-26 21:21 , Processed in 0.356507 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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