明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 672|回复: 9

[经验] 文字选择问题

[复制链接]
发表于 2019-1-5 14:37 | 显示全部楼层 |阅读模式
大神谁能吧下面的程序改成文字能选择单行多行和属性文字,数字最后能计算,谢谢大神了。
(DEFUN C:jf()
(setq jd 4)(princ "\精度为4")
(if (= jd nil) (setq jd 4))
(princ "\nselect object:")
(setq s (ssget))
(setq n (sslength s))
(setq k 0 )(setq mm 0.0)
(while (< k n)
      (setq name (ssname s k))
      (setq a (entget name))
      (setq t1 (assoc '0 a))
      (setq t1 (cdr t1))
      (if (= t1 "TEXT") (PROGN
          (setq tx (assoc '1 a))
          (setq tx (cdr tx))
          (setq tx (atof tx))
          (setq mm (+ tx mm))
         ))
      (if (= t1 "DIMENSION") (PROGN
          (setq tx (assoc '1 a))
          (setq tx (cdr tx))
          (if (and (/= tx "")(/= tx "<>"))(setq tx (atof tx)))
          (if (or (= tx "")(= tx "<>"))(progn
              (setq tx (assoc '42 a))
              (setq tx (cdr tx))
              ))
          (if (= k 0) (setq MM TX) (setq mm (+ tx mm)))
         ))
      (setq k (+ k 1))
)
(setq mm (rtos mm 2 jd))
  (princ "\n总和: ")(princ mm)

;;;;;;;;;;;;;;;;;;;;;;
发表于 2019-1-5 15:02 | 显示全部楼层
  1. (defun c:tt ()
  2.   (defun dxf (code s1) (cdr (assoc code (entget s1))))
  3.   (princ "\n选择: ")
  4.   (setq ss (ssget '((0 . "*text,DIMENSION"))))
  5.   (setq i -1)
  6.   (setq mm 0.0)
  7.   (while (setq s1 (ssname ss (setq i (1+ i))))
  8.     (setq t1 (DXF 0 s1))
  9.     (cond ((member t1 '("TEXT" "MTEXT"))
  10.            (setq mm (+ (atof (DXF 1 s1)) mm))
  11.           )
  12.           ((= t1 "DIMENSION")
  13.            (setq tx (DXF 1 s1))
  14.            (if (and (/= tx "") (/= tx "<>"))
  15.              (setq tx (atof tx))
  16.            )
  17.            (if (or (= tx "") (= tx "<>"))
  18.              (setq tx (DXF 42 s1))
  19.            )
  20.            (setq mm (+ tx mm))
  21.           )
  22.     )
  23.   )
  24.   (princ "\n总和: ")
  25.   (princ (rtos mm 2 3))
  26.   (princ)
  27. )
 楼主| 发表于 2019-1-5 15:43 | 显示全部楼层

您好我刚才测试了一下,块中的属性文字还是不能选择,有办法解决吗
 楼主| 发表于 2019-1-5 20:45 | 显示全部楼层
有人帮忙解决吗
发表于 2019-1-5 21:55 | 显示全部楼层
(defun c:tt ()
  (defun dxf (code s1)
    (cdr (assoc code (entget s1)))
  )
  (princ "\n选择: ")
  (setq ss (ssget '((0 . "ATTRIB,*text,DIMENSION"))))
  (setq i -1)
  (setq mm 0.0)
  (while (setq s1 (ssname ss (setq i (1+ i))))
    (setq t1 (dxf 0 s1))
    (cond
      ((member t1 '("TEXT" "MTEXT"))
        (setq mm (+ (atof (dxf 1 s1)) mm))
      )
      ((member t1 '("ATTRIB"))
        (setq mm (+ (atof (dxf 2 s1)) mm))
      )
      ((= t1 "DIMENSION")
        (setq tx (dxf 1 s1))
        (if (and
              (/= tx "")
              (/= tx "<>")
            )
          (setq tx (atof tx))
        )
        (if (or
              (= tx "")
              (= tx "<>")
            )
          (setq tx (dxf 42 s1))
        )
        (setq mm (+ tx mm))
      )
    )
  )
  (princ "\n总和: ")
  (princ (rtos mm 2 3))
  (princ)
)
 楼主| 发表于 2019-1-5 22:26 | 显示全部楼层
wudechao 发表于 2019-1-5 21:55
(defun c:tt ()
  (defun dxf (code s1)
    (cdr (assoc code (entget s1)))

您好,我刚才测试了快中的属性文字还是不让选择,应该还是优点问题
发表于 2019-1-5 23:54 | 显示全部楼层
  1. ;; tt(数字求和)
  2. (defun c:tt ()
  3.   (defun get-Attibutes (s1 / lst x)
  4.     (mapcar '(lambda (x) (setq lst (cons (vla-Get-TextString x) lst)))
  5.             (vlax-safearray->list
  6.               (vlax-variant-value
  7.                 (vla-GetAttributes (vlax-ename->vla-object s1))
  8.               )
  9.             )
  10.     )
  11.     lst
  12.   )
  13.   (defun dxf (code s1) (cdr (assoc code (entget s1))))
  14.   (princ "\n选择: ")
  15.   (setq ss (ssget '((0 . "*TEXT,DIMENSION,ATTRIB,ATTDEF,INSERT"))))
  16.   (setq i -1)
  17.   (setq mm 0.0)
  18.   (while (setq s1 (ssname ss (setq i (1+ i))))
  19.     (setq et (DXF 0 s1))
  20.     (cond ((member et '("TEXT" "MTEXT"))
  21.            (setq mm (+ (atof (DXF 1 s1)) mm))
  22.           )
  23.           ((and        (member et '("ATTRIB" "ATTRIB"))
  24.                 (setq tx (distof (DXF 2 s1)))
  25.            )
  26.            (setq mm (+ tx mm))
  27.           )
  28.           ((= et "DIMENSION")
  29.            (setq tx (DXF 1 s1))
  30.            (if (and (/= tx "") (/= tx "<>"))
  31.              (setq tx (atof tx))
  32.            )
  33.            (if (or (= tx "") (= tx "<>"))
  34.              (setq tx (DXF 42 s1))
  35.            )
  36.            (setq mm (+ tx mm))
  37.           )
  38.           ((and (= et "INSERT") (= (DXF 66 s1) 1))
  39.            (setq lst (get-Attibutes s1)
  40.                  lst (vl-remove-if-not '(lambda (x) (distof x)) lst)
  41.                  tx  (apply '+ (mapcar 'distof lst))
  42.            )
  43.            (setq mm (+ tx mm))
  44.           )
  45.     )
  46.   )
  47.   (princ "\n总和: ")
  48.   (princ (rtos mm 2 3))
  49.   (princ)
  50. )
 楼主| 发表于 2019-1-6 09:15 | 显示全部楼层
本帖最后由 流_星 于 2019-1-6 12:13 编辑

高手您好:程序试了,现在能选择块了,是把块内的所以数字求和。
其实我想的事,同一个块中的任意几个属性数据求和,或是,几个块的属性任意求和,能吗?
谢谢
发表于 2019-1-6 16:26 | 显示全部楼层
流_星 发表于 2019-1-6 09:15
高手您好:程序试了,现在能选择块了,是把块内的所以数字求和。
其实我想的事,同一个块中的任意几个属 ...

典型的瞎折腾!
 楼主| 发表于 2019-1-6 17:47 | 显示全部楼层
主要是工作需要,我在找找相关的资料吧谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-4 06:59 , Processed in 0.280669 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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