找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1998|回复: 12

[原创]:建筑面积 (取得面积及面积相加)

[复制链接]
发表于 2008-12-17 17:30:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
建筑面积计算:
命令:ara
包括: 取得面积 数字相加 搜索轮廓 三个模块。
当然搜索轮廓是用现成的。天正的命令.
主要是 取得面积 数字相加

且当作互相学习吧。。。


  1.   [FONT=courier new]
  2. //保存对话框文件为archarea.dcl

  3. archarea:dialog {
  4.     label = " 建筑面积 2008-12-17 [蔡建伟]" ;
  5.     :boxed_row {
  6.         :radio_button {
  7.             key = "getarea" ;
  8.             label = "取得面积" ;
  9.         }
  10.         :radio_button {
  11.             key = "numberadd" ;
  12.             label = "数字相加" ;
  13.         }
  14.         :radio_button {
  15.             key = "searchout" ;
  16.             label = "搜索轮廓" ;
  17.         }
  18.     }
  19.     :row {
  20.         :boxed_column {
  21.             key = "setting" ;
  22.             label = "设置" ;
  23.             :popup_list {
  24.                 key = "layer" ;
  25.                 label = "图层" ;
  26.             }
  27.             :popup_list {
  28.                 key = "style" ;
  29.                 label = "样式" ;
  30.             }
  31.             :edit_box {
  32.                 key = "height" ;
  33.                 label = "字高" ;
  34.             }
  35.         }
  36.         :boxed_column {
  37.             key = "unit" ;
  38.             fixed_width = true ;
  39.             label = "单位" ;
  40.             :radio_button {
  41.                 key = "mm" ;
  42.                 label = "平方毫米" ;
  43.             }
  44.             :radio_button {
  45.                 key = "cm" ;
  46.                 label = "平方厘米" ;
  47.             }
  48.             :radio_button {
  49.                 key = "m" ;
  50.                 label = "平方米" ;
  51.             }
  52.         }
  53.     }
  54.     spacer_1;
  55.     ok_cancel_help;
  56. }

  57.   [/FONT]




  1.   [FONT=courier new]
  2. (defun C:ARA () (C:ARCHAREA))
  3. (defun C:ARCHAREA (/                 CLAYER               PT
  4.                    TEXT                 TEXTSTYLE     JW-SS->ENAMES
  5.                    TEST                 PLUSNUMBER    JW-STRING-NUMBER
  6.                    NUMBERADD         JW-TBLNEXT    GETTILE
  7.                   )
  8.   ;;++++++++++++++++++++++++++++++++++++++++++
  9.   ;;             通用函数                     
  10.   ;;++++++++++++++++++++++++++++++++++++++++++
  11.   (defun JW-TBLNEXT
  12.                     (NAME ITEM / LIST0 LIST1 LISTN)
  13.     (if        (setq LIST0 (tblnext NAME t))
  14.       (progn
  15.         (setq
  16.           LISTN        (cons (cdr (assoc ITEM LIST0))
  17.                       LISTN
  18.                 )
  19.         )
  20.         (while (setq LIST1 (tblnext NAME))
  21.           (setq
  22.             LISTN (cons        (cdr (assoc ITEM LIST1))
  23.                         LISTN
  24.                   )
  25.           )
  26.         )
  27.       )
  28.     )
  29.     (reverse LISTN)
  30.   )

  31.   ;;++++++++++++++++++++++++++++++++++++++++++
  32.   ;;             数字相加                     
  33.   ;;++++++++++++++++++++++++++++++++++++++++++

  34.   (defun NUMBERADD (/                 A              NUMBERSTRS   RESULT
  35.                     SS                 JW-STRING-NUMBER           PLUSNUMBER
  36.                     JW-SS->ENAMES              TEST           ENAMES
  37.                    )
  38.     (defun JW-STRING-NUMBER
  39.            (STRING / I LST LST1 LST2 NUMBERASCII RETURN)
  40.       (setq NUMBERASCII (vl-string->list ".0123456789"))
  41.       (setq LST1 (vl-string->list STRING))
  42.       (setq LST2 '()
  43.             LST         '()
  44.             I         0
  45.       )
  46.       (repeat (length LST1)
  47.         (if (= (and (member (nth I LST1) NUMBERASCII))
  48.                (and (member (nth (1+ I) LST1) NUMBERASCII))
  49.             )
  50.           (setq LST (cons (nth I LST1) LST))
  51.           (setq        LST2 (append LST2 (list (cons (nth I LST1) LST)))
  52.                 LST  '()
  53.           )
  54.         )
  55.         (setq I (1+ I))
  56.       )
  57.       (setq RETURN (mapcar 'vl-list->string (mapcar 'reverse LST2)))
  58.       RETURN
  59.     )

  60.     (defun PLUSNUMBER (E / NUMBERS RE RESULT RETURN V1)
  61.       (if (and (member (cdr (assoc 0 (entget E))) '("TEXT" "TCH_TEXT"))
  62.                (setq V1 (cdr (assoc 1 (entget E))))
  63.                (setq RE (JW-STRING-NUMBER V1))
  64.           )
  65.         (progn
  66.           (setq
  67.             RETURN
  68.              (vl-remove-if-not '(lambda (X) (numberp (read X))) RE)
  69.           )
  70.           (setq NUMBERS (mapcar 'read RETURN))
  71.           (setq RESULT (apply '+ NUMBERS))
  72.         )
  73.       )
  74.       RETURN
  75.     )

  76.     (defun JW-SS->ENAMES (SS / ENAMES I)
  77.       (repeat (setq I (sslength SS))
  78.         (setq ENAMES (cons (ssname SS (setq I (1- I))) ENAMES))
  79.       )
  80.     )

  81.     (defun TEST        (LST)
  82.       (if (= (length LST) 1)
  83.         (strcat (car LST))
  84.         (strcat (car LST) "+" (TEST (cdr LST)))
  85.       )
  86.     )

  87.     (if        (and (setq SS (ssget '((0 . "TEXT,TCH_TEXT"))))
  88.              (setq PT (getpoint "\n指定点: "))
  89.         )
  90.       (progn
  91.         (setq NUMBERSTRS '())
  92.         (setq ENAMES (JW-SS->ENAMES SS))
  93.         (foreach E ENAMES
  94.           (if (setq A (PLUSNUMBER E))
  95.             (setq NUMBERSTRS (append A NUMBERSTRS))
  96.           )
  97.         )
  98.         (if (and NUMBERSTRS
  99.                  (setq RESULT (apply '+ (mapcar 'read NUMBERSTRS)))
  100.             )
  101.           (progn
  102.             (princ
  103.               (strcat (TEST NUMBERSTRS) "=" (vl-princ-to-string RESULT))
  104.             )
  105.             (setq TEXT (strcat "总和= " (vl-princ-to-string RESULT)))
  106.             (setvar "clayer" "ARCHAREA")
  107.             (setvar "textstyle" "ARCHAREA")
  108.             (command "._text" PT *HEIGHT "0" TEXT)
  109.             (setvar "clayer" CLAYER)
  110.             (setvar "textstyle" TEXTSTYLE)
  111.           )
  112.         )
  113.       )
  114.     )
  115.     (princ)
  116.   )
  117.   ;;++++++++++++++++++++++++++++++++++++++++++
  118.   ;;             主程序                      
  119.   ;;++++++++++++++++++++++++++++++++++++++++++
  120.   (setvar "cmdecho" 0)
  121.   (command "._undo" "begin")
  122.   (setq CLAYER (getvar "clayer"))
  123.   (setq TEXTSTYLE (getvar "textstyle"))
  124.   (if (not (tblsearch "style" "ARCHAREA"))
  125.     (command "-style" "ARCHAREA" "宋体" "0" "1" "0" "n" "n")
  126.   )
  127.   (if (not (tblsearch "layer" "ARCHAREA"))
  128.     (command "-layer" "m" "ARCHAREA" "c" 2 "ARCHAREA" "")
  129.   )
  130.   (setvar "clayer" CLAYER)
  131.   (setvar "textstyle" TEXTSTYLE)

  132.   (setq LAYERS (JW-TBLNEXT "layer" 2))
  133.   (setq STYLES (JW-TBLNEXT "style" 2))

  134.   (setq DCLFNA "archarea.dcl")
  135.   (setq DCLNA "archarea")
  136.   (setq OKID 50)
  137.   (while (= OKID 50)
  138.     ;;对话框
  139.     (setq DCLID (load_dialog DCLFNA))
  140.     (if        (< DCLID 0)
  141.       (progn
  142.         (alert (strcat DCLFNA " 文件不存在!!!"))
  143.         (exit)
  144.       )
  145.     )
  146.     (if        (not (new_dialog DCLNA DCLID ""))
  147.       (exit)
  148.     )

  149.     ;;填充列表
  150.     (start_list "layer")
  151.     (mapcar 'add_list LAYERS)
  152.     (end_list)
  153.     (start_list "style")
  154.     (mapcar 'add_list STYLES)
  155.     (end_list)

  156.     ;;设置控件
  157.     (set_tile "getarea"
  158.               (if *GETAREA
  159.                 *GETAREA
  160.                 "1"
  161.               )
  162.     )
  163.     (set_tile "numberadd"
  164.               (if *NUMBERADD
  165.                 *NUMBERADD
  166.                 "0"
  167.               )
  168.     )
  169.     (set_tile "searchout"
  170.               (if *SEARCHOUT
  171.                 *SEARCHOUT
  172.                 "0"
  173.               )
  174.     )
  175.     (set_tile "layer"
  176.               (if *LAYER
  177.                 *LAYER
  178.                 (itoa (vl-position "ARCHAREA" LAYERS))
  179.               )
  180.     )
  181.     (set_tile "style"
  182.               (if *STYLE
  183.                 *STYLE
  184.                 (itoa (vl-position "ARCHAREA" STYLES))
  185.               )
  186.     )
  187.     (set_tile "height"
  188.               (if *HEIGHT
  189.                 *HEIGHT
  190.                 "300"
  191.               )
  192.     )
  193.     (set_tile "mm"
  194.               (if *UNITMM
  195.                 *UNITMM
  196.                 "1"
  197.               )
  198.     )
  199.     (set_tile "cm"
  200.               (if *UNITCM
  201.                 *UNITCM
  202.                 "0"
  203.               )
  204.     )
  205.     (set_tile "m"
  206.               (if *UNITM
  207.                 *UNITM
  208.                 "0"
  209.               )
  210.     )

  211.     (cond ((= *SEARCHOUT "1")
  212.            (mode_tile "setting" 1)
  213.            (mode_tile "unit" 1)
  214.           )
  215.           ((= *NUMBERADD "1")
  216.            (mode_tile "setting" 0)
  217.            (mode_tile "unit" 1)
  218.           )
  219.           ((= *GETAREA "1")
  220.            (mode_tile "unit" 0)
  221.            (mode_tile "unit" 0)
  222.           )
  223.     )

  224.     (defun GETTILE ()
  225.       (setq *GETAREA (get_tile "getarea"))
  226.       (setq *NUMBERADD (get_tile "numberadd"))
  227.       (setq *SEARCHOUT (get_tile "searchout"))
  228.       (setq *LAYER (get_tile "layer"))
  229.       (setq *STYLE (get_tile "style"))
  230.       (setq *HEIGHT (get_tile "height"))
  231.       (setq *UNITMM (get_tile "mm"))
  232.       (setq *UNITCM (get_tile "cm"))
  233.       (setq *UNITM (get_tile "m"))
  234.     )

  235.     (action_tile "cancel" "(DONE_DIALOG 0)")
  236.     (action_tile "accept" "(gettile)(DONE_DIALOG 1)")
  237.     (action_tile "help" "(gettile)(DONE_DIALOG 2)")
  238.     (action_tile "getarea" "(gettile)(DONE_DIALOG 3)")
  239.     (action_tile "numberadd" "(gettile)(DONE_DIALOG 4)")
  240.     (action_tile "searchout" "(gettile)(DONE_DIALOG 5)")


  241.     (setq OKID (start_dialog))
  242.     (unload_dialog DCLID)

  243.     (cond
  244.       ((= OKID 0) '())
  245.       ((= OKID 1)
  246.        (cond
  247.          ((= *GETAREA "1")
  248.           (while
  249.             (and (setq E (car (entsel "\n选择填充或曲线: ")))
  250.                  (setq PT (getpoint "\n指定点: "))
  251.             )
  252.              (command "._area" "o" E)
  253.              (cond ((= *UNITM "1")
  254.                     (setq
  255.                       TEXT (strcat "面积="
  256.                                    (rtos (* (getvar "area") 0.0001) 2 1)
  257.                                    "平方米"
  258.                            )
  259.                     )
  260.                    )
  261.                    ((= *UNITCM "1")
  262.                     (setq TEXT (strcat "面积="
  263.                                        (rtos (* (getvar "area") 0.01) 2 1)
  264.                                        "平方厘米"
  265.                                )
  266.                     )
  267.                    )
  268.                    ((= *UNITMM "1")
  269.                     (setq TEXT (strcat "面积="
  270.                                        (rtos (* (getvar "area") 1) 2 1)
  271.                                        "平方毫米"
  272.                                )
  273.                     )
  274.                    )
  275.              )
  276.              (setvar "clayer" "ARCHAREA")
  277.              (setvar "textstyle" "ARCHAREA")
  278.              (command "._text" PT *HEIGHT "0" TEXT)
  279.              (setvar "clayer" CLAYER)
  280.              (setvar "textstyle" TEXTSTYLE)
  281.           )
  282.          )
  283.          ((= *NUMBERADD "1") (NUMBERADD))
  284.          ((= *SEARCHOUT "1")
  285.            (princ
  286.              "\n用天正建筑7中的<工具>-<其它工具>-<搜索轮廓> 输入命令: T71_TSeOutline"
  287.            )
  288.            (alert "输入命令: T71_TSeOutline")
  289.          )
  290.        )
  291.       )
  292.       ((= OKID 2)
  293.        (alert
  294.          "\n文字对象只适用于TEXT和TCH_TEXT\n\n数字相加不考虑正负号的影响\n\n取得填充面积CAD2006版本以下会失效
  295.          \n\n搜索轮廓使用的是天正7的命令如:T71_TSeOutline"
  296.        )
  297.        (setq OKID 50)
  298.       )
  299.       ((= OKID 3)
  300.        (setq OKID 50)
  301.       )
  302.       ((= OKID 4)
  303.        (setq OKID 50)
  304.       )
  305.       ((= OKID 5)
  306.         (setq OKID 50)
  307.       )
  308.     )
  309.   )

  310.   (command "._undo" "end")
  311.   (setvar "cmdecho" 1)
  312.   (princ)
  313. )
  314. (princ)
  315.   [/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2008-12-17 20:12:21 | 显示全部楼层
这个附件下载不了啊,无法下载.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-12-18 08:37:08 | 显示全部楼层
;;ZML写的递归函数

[php]
(defun TEST (LST)
  (if (= (length LST) 1)
    (strcat (car LST))
    (strcat (car LST) "+" (TEST (cdr LST)))
  )
)

(TEST '("1" "2" "3" "4"))
->"1+2+3+4"
[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 39个

财富等级: 招财进宝

发表于 2008-12-31 10:16:07 | 显示全部楼层
这个附件下载不了啊,无法下载.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-12-31 15:37:12 | 显示全部楼层
为什么要下载附件???
都贴出来了。。。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2009-1-14 22:37:30 | 显示全部楼层
程序很好用,有所不足的是:图层及文字样式虽有按钮及列表,但选择不了其它,只能用程序内定的。恳请改进!!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2009-1-15 13:58:21 | 显示全部楼层
不错!萝卜头的程序做的不错!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2009-1-16 11:08:47 | 显示全部楼层
不错,挺好用。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2009-2-9 18:02:01 | 显示全部楼层
好用啊
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2009-2-12 18:28:31 | 显示全部楼层
收到,非常感谢,正好学习下
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-5-26 02:40:49 | 显示全部楼层
本帖最后由 flytodayddc 于 2013-5-26 02:42 编辑

:( 未命名.JPG


2006是这个样子的~~烦请老大修改下。谢谢
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1094个

财富等级: 财源广进

发表于 2020-3-6 09:21:03 | 显示全部楼层
是我需要的,感谢源码分享!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

发表于 2020-3-8 19:58:56 | 显示全部楼层
学习了,谢谢分享
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-9-21 04:35 , Processed in 0.229372 second(s), 58 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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