找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 891|回复: 9

怎樣才可將數據輸出成為TEXT?

[复制链接]
发表于 2005-6-7 00:46:36 | 显示全部楼层 |阅读模式

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

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

×
小弟是看到一個LISP計算多快面積
但卻沒有做輸出TEXT功能
希望能有高手可以幫忙添加一下
並說明一下


(defun c:aream (/ olderr oldcmdecho errexit undox restore ss1 nr en tot_area)
  (defun errexit (s)
    (restore)
  )

  (defun undox ()
    (command "._undo" "_E")
    (setvar "cmdecho" oldcmdecho)
    (setq *error* olderr)
    (princ)
  )

  (setq olderr  *error*
        restore undox
        *error* errexit
  )
  (setq oldcmdecho (getvar "cmdecho"))
  (setvar "cmdecho" 0)
  (command "._UNDO" "_BE")
  (if (setq ss1 (ssget '((-4 . "<OR")
                         (0 . "POLYLINE")
                         (0 . "LWPOLYLINE")
                         (0 . "CIRCLE")
                         (0 . "ELLIPSE")
                         (0 . "SPLINE")
                         (0 . "REGION")
                         (-4 . "OR>")
                        )
                )
      )
    (progn
      (setq nr 0)
      (setq tot_area 0.0)
      (setq en (ssname ss1 nr))
      (while en
        (command "._area" "_O" en)
        (setq tot_area (+ tot_area (getvar "area")))
        (setq nr (1+ nr))
        (setq en (ssname ss1 nr))
      )
      (princ "\nTotal Area = ")
      (princ tot_area)
    )
  )
  (restore)
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 11306个

财富等级: 富甲天下

发表于 2005-6-7 08:44:12 | 显示全部楼层
...
(princ "\nTotal Area = ")
(princ tot_area)
(COMMAND "TEXT" PAUSE "" "" (RTOS TOT_AREA 2 3))
...
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-6-7 10:24:45 | 显示全部楼层
((-4 . " (0 . "POLYLINE")这个条件判断事不是少个运算符呀
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-6-7 19:51:41 | 显示全部楼层
谢谢楼上兄弟的解答
但想再请问若输出的单位还要在做计算该怎么处理呢
如要输出公顷或公亩
及要怎样设定载入的字型呢

烦请各位高手解答一下
谢谢

附上代码

(defun c:areamm (/ olderr oldcmdecho errexit undox restore ss1 nr en tot_area )
  (defun errexit (s)   
    (restore)
  )

  (defun undox ()
    (command "._undo" "_E")
    (setvar "cmdecho" oldcmdecho)
    (setq *error* olderr)
    (princ)
  )

  (setq olderr  *error*
        restore undox
        *error* errexit
  )

  (setq oldcmdecho (getvar "cmdecho"))
  (setvar "cmdecho" 0)
  (command "._UNDO" "_BE")

  (if (setq ss1 (ssget '((-4 . "<OR")
                         (0 . "POLYLINE")
                         (0 . "LWPOLYLINE")
                         (0 . "CIRCLE")
                         (0 . "ELLIPSE")
                         (0 . "SPLINE")
                         (0 . "REGION")
                         (-4 . "OR>")
                        )
                )
      )
    (progn
      (setq nr 0)
      (setq tot_area 0.0)
      (setq en (ssname ss1 nr))

      (while en
        (command "._area" "_O" en)
        (setq tot_area (+ tot_area (getvar "area")))
        (setq nr (1+ nr))
        (setq en (ssname ss1 nr))
      )

         (princ "\nTotal Area = ")
         (princ tot_area)

  )
  )

     (COMMAND "TEXT" PAUSE "" "" (RTOS tot_area 2 3))

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

使用道具 举报

发表于 2005-6-12 01:36:35 | 显示全部楼层
计算可以试试偶的“总图建筑面积标注”程序。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-6-12 17:42:55 | 显示全部楼层
謝謝斑竹的回答
您提供的程序
我經過使用發現
需要設定比例
但是一般習慣應該是畫的時候就已經指定了
是否可以省去這些設定或是將這些設定分開來做

可以做成只選以封閉的線段嗎
因為有時計算的時候
如果面積裡面還有面積
是否會扣除內部面積呢


另外可以請問關於上面的程序
tot_area 這文字變數可以在做計算嗎?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-6-12 18:25:38 | 显示全部楼层
  1. [FONT=courier new]
  2. (defun c:test ()
  3.   (setvar "cmdecho" 0)
  4.   (command "._UNDO" "_BE")
  5.   (if (setq ss1 (ssget '((0 . "*POLYLINE,CIRCLE,ELLIPSE,SPLINE,REGION"))))
  6.     (progn
  7.       (setq nr -1
  8.             tot_area 0.0
  9.       )
  10.       (while (setq en (ssname ss1 (setq nr (1+ nr))))
  11.         (command "._area" "_O" en)
  12.         (setq tot_area (+ tot_area (getvar "area")))
  13.       )
  14.       (princ (strcat "\nTotal Area(㎡) = " (rtos tot_area 2 2)))
  15.       (princ (strcat "\nTotal Area(公顷) = "
  16.                      (rtos (/ tot_area 10000) 2 2)
  17.              )
  18.       )
  19.       (princ (strcat "\nTotal Area(亩) = "
  20.                      (rtos (* tot_area 0.0015) 2 2)
  21.              )
  22.       )
  23.     )
  24.   )
  25.   (COMMAND "TEXT"
  26.            PAUSE
  27.            ""
  28.            ""
  29.            (strcat (RTOS tot_area 2 3) "㎡")
  30.   )
  31.   (command "._UNDO" "E")
  32.   (princ)
  33. )[/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-6-12 20:31:21 | 显示全部楼层
谢谢斑竹的回答
另外参考了您之前的LISP

;;; 建图层: (mala "层名" 颜色号)
(Defun MKLA (a b)
  (If (= (Tblsearch "layer" a) nil)
    (Command "layer" "m" a "c" b a "")
    (Command "layer" "t" a "s" a "c" b a "")
  )
)

想到说如果写入面积时可以写到相关的图层那就更好了
因此若这样的话

(mkla "米平方" 8)
  (COMMAND "TEXT"
            PAUSE
           ""
           ""
           (strcat (RTOS tot_area 2 3) "㎡")
  )

就可以放到相关的层
但是如果要放两个单位就要连点两次
才可以输入两个单位并放到相关的层上面
是否有办法做一次就行了呢

烦请各位高手能够解答一下
谢谢


下面是我将3个单位放到3个层上面去
      (while (setq en (ssname ss1 (setq nr (1+ nr))))
        (command "._area" "_O" en)
        (setq tot_area (+ tot_area (getvar "area")))
      )
      (princ (strcat "\nTotal Area(㎡) = " (rtos tot_area 2 2)))
      (princ (strcat "\nTotal Area(公顷) = "
                     (rtos (/ tot_area 10000) 2 2)
             )
      )
      (princ (strcat "\nTotal Area(亩) = "
                     (rtos (* tot_area 0.0015) 2 2)
             )
      )
    )
  )

(mkla "米平方" 8)
  (COMMAND "TEXT"
            PAUSE
           ""
           ""
           (strcat (RTOS tot_area 2 3) "㎡")
  )

(mkla "公顷" 8)
  (COMMAND "TEXT"
            PAUSE
           ""
           ""
           (strcat (RTOS (/ tot_area 10000) 2 3) "公顷")
  )

(mkla "亩" 8)
  (COMMAND "TEXT"
            PAUSE
           ""
           ""
           (strcat (RTOS (* tot_area 0.0015) 2 3) "亩")
  )


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

使用道具 举报

发表于 2005-6-12 22:21:17 | 显示全部楼层
总的不错,但点三次不觉得累吗?
完整代码:
  1. [FONT=courier new]
  2. (load "xyp_lib");加载通用函数
  3. ;|
  4. 如果已经下载xyp_lib并放到搜索路径下可以不再下载!
  5. 利用以下任何一种方式即可加载和运行通用函数内的所有子程序:
  6. 1.在acad.lsp中增加(load"xyp_lib")
  7. 2.在每个程序内增加(load"xyp_lib")
  8. 3.在command下,输入(load"xyp_lib")
  9. 4.在菜单.mnl中增加(load"xyp_lib")
  10. 通用函数下载地址:[url]http://www.xdcad.net/forum/attachment.php?s=&postid=1606661[/url]
  11. (可在签名栏直接下载)
  12. |;
  13. (defun c:test ()
  14.   (cmdla0)
  15.   (jzhz)
  16.   (if (setq ss1 (ssget '((0 . "*POLYLINE,CIRCLE,ELLIPSE,SPLINE,REGION"))))
  17.     (progn
  18.       (setq i -1
  19.             tot_area 0.0
  20.             th (* sc 300)
  21.       )
  22.       (while (setq en (ssname ss1 (setq i (1+ i))))
  23.         (command "._area" "_O" en)
  24.         (setq tot_area (+ tot_area (getvar "area")))
  25.       )
  26.       (setq A1 (strcat (rtos tot_area 2 3) "平方米")
  27.             A2 (strcat (rtos (/ tot_area 10000) 2 3) "公顷")
  28.             A3 (strcat (rtos (* tot_area 0.0015) 2 3) "亩")
  29.       )
  30.       (princ (strcat "\nTotal Area = " A1))
  31.       (princ (strcat "\nTotal Area = " A2))
  32.       (princ (strcat "\nTotal Area = " A3))
  33.       (setq pt1        (getpoint "\n标注位置 : ")
  34.             pt2        (polar pt1 (* pi 1.5) (* sc 500))
  35.             pt3        (polar pt2 (* pi 1.5) (* sc 500))
  36.       )
  37.       (mkla "米平方" 8)
  38.       (COMMAND "TEXT" "j" "mc" pt1 th "0" A1)
  39.       (mkla "公顷" 8)
  40.       (COMMAND "TEXT" "j" "mc" pt2 th "0" A2)
  41.       (mkla "亩" 8)
  42.       (COMMAND "TEXT" "j" "mc" pt3 th "0" A3)
  43.     )
  44.   )
  45.   (cmdla1)
  46. )
  47. [/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-6-12 23:39:50 | 显示全部楼层
谢谢版主的解答
另想请问这几行的意思代表什么呢
好像很多的LISP都有这段
  (jzhz)
  (if (setq ss1 (ssget '((0 . "*POLYLINE,CIRCLE,ELLIPSE,SPLINE,REGION"))))
    (progn
      (setq i -1
            tot_area 0.0
            th (* sc 300)
      )
      (while (setq en (ssname ss1 (setq i (1+ i))))
        (command "._area" "_O" en)
        (setq tot_area (+ tot_area (getvar "area")))
      )


      (setq pt1        (getpoint "\n标注位置 : ")
            pt2        (polar pt1 (* pi 1.5) (* sc 500))
            pt3        (polar pt2 (* pi 1.5) (* sc 500))
      )
      (mkla "米平方" 8)
      (COMMAND "TEXT" "j" "mc" pt1 th "0" A1)
      (mkla "公顷" 8)
      (COMMAND "TEXT" "j" "mc" pt2 th "0" A2)
      (mkla "亩" 8)
      (COMMAND "TEXT" "j" "mc" pt3 th "0" A3)



另在询问关于
在 *.MUS中增加变更线型选项
id_changeed          [->变更线型...  ]
                     [&直线 Continuous       ]*^C^C$s=change SELECT SI AU \CHPROP P ;LT Continuous;;
                     [&虚线 HIDDEN           ]*^C^C$s=change SELECT SI AU \CHPROP P ;LT HIDDEN;;
                     [&虚线 HIDDEN2          ]*^C^C$s=change SELECT SI AU \CHPROP P ;LT HIDDEN2;;                  
                     [&地界线 ACAD_ISO05W100 ]*^C^C$s=change SELECT SI AU \CHPROP P ;LT ACAD_ISO05W100;;
                     [&建筑线 ACAD_ISO04W100 ]*^C^C$s=change SELECT SI AU \CHPROP P ;LT ACAD_ISO04W100;;
                     [<-&虚线 ACAD_ISO02W100 ]*^C^C$s=change SELECT SI AU \CHPROP P ;LT

但是该怎样才可只也加入目前物件比例及整体比例的设定呢

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-28 06:51 , Processed in 0.543317 second(s), 48 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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