明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 5454|回复: 41

能在cad窗口中实现象数字相关表格么?

  [复制链接]
发表于 2004-2-4 18:32:00 | 显示全部楼层 |阅读模式



能在cad窗口中实现象EXCEL一样的数字相关表格么?


如上图中 E=A+B+C+D 如果修改A ,B或 C,D 中任意一个 侧E 也会发生相应的变化,

本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2004-2-5 12:43:00 | 显示全部楼层
能!要用到反应器的知识了。
 楼主| 发表于 2004-2-5 19:13:00 | 显示全部楼层
能帮忙写一段让我学学么?
发表于 2004-2-8 13:29:00 | 显示全部楼层
是呀,能让我们学学嘛?现在图纸特别多,能这样可以节省很多时间呀
发表于 2004-2-8 14:20:00 | 显示全部楼层
说具体点,不要用如什么什么的,因为这些关系一旦写好了,要改就可能比较麻烦。
 楼主| 发表于 2004-2-8 21:24:00 | 显示全部楼层
表格第一列a是序号,第二列b是规格,第三列c是长度,第四列d是数量,第五列e是单重,第六列f总重.


主要是根据第二列的规格来确定其计算方法,即每行有可能会不同的计算方法


先做一个算型钢的,


                                                                         b相对应得每米重 * c         =         e                          e * d = f
发表于 2004-2-9 16:16:00 | 显示全部楼层
结果数字就是等号后面的,数据就是等号前面的加载后命令:ass
  1. (vl-load-com)
  2. (defun UnFormat (Mtext KeepLF / Text Str)
  3.    (cond
  4.        ((= (type Mtext) 'VLA-Object))
  5.        ((= (type Mtext) 'ENAME)
  6.            (setq Mtext (vlax-ename->vla-object Mtext))
  7.        )
  8.        (1 (setq Mtext nil))
  9.    )
  10.    (and
  11.        Mtext
  12.        (= (vlax-get Mtext 'ObjectName) "AcDbMText")
  13.        (setq Mtext (vlax-get Mtext 'TextString))
  14.        (setq Text "")
  15.        (while (/= Mtext "")
  16.            (cond
  17.                ((wcmatch (strcase (setq Str (substr Mtext 1 2))) "\\[\\{}`~]")
  18.                    (setq Mtext (substr Mtext 3)
  19.                                Text     (strcat Text Str)
  20.                    )
  21.                )
  22.                ((wcmatch (substr Mtext 1 1) "[{}]")
  23.                    (setq Mtext (substr Mtext 2))
  24.                )
  25.                ((and KeepLF (wcmatch (strcase (substr Mtext 1 2)) "\\P"))
  26.                    (setq Mtext (substr Mtext 3)
  27.                                Text   (strcat Text "\\P")
  28.                    )
  29.                )
  30.                ((wcmatch (strcase (substr Mtext 1 2)) "\\[LOP]")
  31.                    (setq Mtext (substr Mtext 3))
  32.                )
  33.                ((wcmatch (strcase (substr Mtext 1 2)) "\\[ACFHQTW]")
  34.                    (setq Mtext (substr Mtext (+ 2 (vl-string-search ";" Mtext))))
  35.                )
  36.                ((wcmatch (strcase (substr Mtext 1 2)) "\\S")
  37.                    (setq Str     (substr Mtext 3 (- (vl-string-search ";" Mtext) 2))
  38.                                Text   (strcat Text (vl-string-translate "#^\" "     " Str))
  39.                                Mtext (substr Mtext (+ 4 (strlen Str)))
  40.                    )
  41.                    (print Str)
  42.                )
  43.                (1
  44.                    (setq Text (strcat Text (substr Mtext 1 1))
  45.                                Mtext (substr Mtext 2)
  46.                    )
  47.                )
  48.            )
  49.        )
  50.    )
  51.    Text
  52. )(defun GetTxt(ent / ents)
  53.    (setq ents (entget ent))
  54.    (if (= (cdr (assoc 0 ents)) "TEXT")
  55.        (cdr (assoc 1 ents))
  56.        (Unformat ent nil)
  57.    )
  58. )(defun MakeEx(ent Handle / ss ename vname datatype data n)
  59.    (setq n nil)
  60.    (setq vname (vlax-ename->vla-object ent))
  61.    (setq datatype (vlax-make-safearray vlax-vbInteger (cons 0 (length handle))))
  62.    (vlax-safearray-fill datatype (append '(1001) (repeat (length handle) (setq n (append n (list 1000))))))
  63.    (setq data (vlax-make-safearray vlax-vbvariant (cons 0 (length handle))))
  64.    (vlax-safearray-fill data (append '("ForCal_meflying") Handle))
  65.    (vla-setxdata vname datatype data)
  66. )(defun GetEx(obj appname / xtypeOut xdataOut)
  67.    (vla-getxdata obj "" 'xtypeOut 'xdataOut)
  68.    (cdr (mapcar 'vlax-variant-value (vlax-safearray->list xdataOut)))
  69. )(defun Cal (notifier-object reactor-object parameter-list / handles i ent txt Datas Result ents)
  70.    (setq Datas nil)
  71.    (setq handles (GetEx notifier-object "ForCal_meflying"))
  72.    (setq i 1)
  73.    (repeat (1- (length handles))
  74.        (setq ent (handent (nth i handles)))
  75.        (setq txt (GetTxt ent))
  76.        (setq Datas (append Datas (list (atof txt))))
  77.        (setq i (1+ i))
  78.    )
  79.    (setq ent (handent (car handles)))
  80.    (setq Result (apply '* Datas))
  81.    (setq ents (entget ent))
  82.    (setq ents (subst (cons 1 (rtos Result)) (assoc 1 ents) ents))
  83.    (entmod ents)
  84.    (princ)
  85. )
  86. (defun MakeReactor (ent)
  87.    (setq circleReactor (vlr-object-reactor (list (vlax-ename->vla-object ent))
  88.                  "Reactor" '((:vlr-modified . Cal))))
  89. )(defun c:Ass( / handles entresult ss handResult ent i)
  90.    (setq handles nil)
  91.    (setq entResult (car (entsel "选择结果数字...")))
  92.    (prompt "选择数据文字...")
  93.    (setq ss (ssget '((0 . "TEXT,MTEXT"))))
  94.    (setq handResult (cdr (assoc 5 (entget entResult))))
  95.    (setq i 0)
  96.    (repeat (sslength ss)
  97.        (setq ent (ssname ss i))
  98.        (setq handles (append handles (list (cdr (assoc 5 (entget ent))))))
  99.        (setq i (1+ i))
  100.    )
  101.    (setq i 0)
  102.    (repeat (length handles)
  103.        (setq ent (ssname ss i))
  104.        (MakeEx ent (cons handResult handles))
  105.        (MakeReactor ent)
  106.        (setq i (1+ i))
  107.    )
  108.    (princ)
  109. )
 楼主| 发表于 2004-2-9 20:56:00 | 显示全部楼层
谢谢斑竹的帮助!!
发表于 2004-2-9 21:55:00 | 显示全部楼层
好程序!!
发表于 2004-2-10 09:10:00 | 显示全部楼层
好程序,这样可以解决不少图纸中的相关数字问题了,我想改一下用到自己的图中,但这个程序有点难,不怎么看得懂,版本能否就每个函数的用途和输入、输出参数作一下说明?谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-10-1 15:49 , Processed in 0.191155 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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