找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 4701|回复: 41

(更新 5.26)[测试]:园林苗木标注程序。

[复制链接]

已领礼包: 593个

财富等级: 财运亨通

发表于 2003-5-14 14:31:25 | 显示全部楼层 |阅读模式

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

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

×
Only For 2000+,命令:Ea_LHBZ((绿化标注)、Ea_SetScale(设置比例),欢迎试用并就其标注格式及苗木统计的规则提供意见,下一步将根据你提供的意见提供苗木统计并自动生成表格的功能。


更新:

动态更新词库

命令:Ea_LhBZ     标注命令
命令:Ea_EdLH     标注编辑
命令:Ea_SetScale 比例设置
命令:Ea_MKTitle  统计表表头及表格生成
命令: TXT_TJ      统计图中相同字串的个数

下载:
http://www.xdcad.net/forum/showt ... d=286213#post286213
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2003-5-14 18:21:19 | 显示全部楼层
写法应该是比较标准的了
但是在图上可能有很大的自由性吧!
如标乔林的时候常常都要线把乔木都连上,然后才写什么树多少棵这样子
并不是每一个植栽都会写上规格,而是个别的才写出吧。要是每一个都要写,那还不累死人,也没有必要,一般的用一个总的植栽表就能解决!
如果能够按照此法写出能够自动统计的话,那就是大大的方便了,最好能支持一位小数,并且把灌木面积的平方也写到图就,那就标准了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

 楼主| 发表于 2003-5-14 19:48:32 | 显示全部楼层
最初由 doongs 发布
[B]写法应该是比较标准的了
但是在图上可能有很大的自由性吧!
如标乔林的时候常常都要线把乔木都连上,然后才写什么树多少棵这样子
并不是每一个植栽都会写上规格,而是个别的才写出吧。要是每一个都要写,那还不累?.. [/B]

程序还有几个Bug,修改中。

我也仅是对照那个图写的,最好能将各种标法提供个全面图纸。

程序中除了名称以外其他的都为可选项,没有输入的时候是不标注的。

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

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

发表于 2003-5-15 00:28:04 | 显示全部楼层
eachy  同志,这几天就忙这事呀.
1.标注(不要每格都填,不然就麻烦,当然少了几项标注要完整.)
2.编辑,也要一个命令的.(大多是copy后改.)这点很重要.
3.统计
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

 楼主| 发表于 2003-5-15 01:03:36 | 显示全部楼层
最初由 aeo 发布
[B]eachy  同志,这几天就忙这事呀.
1.标注(不要每格都填,不然就麻烦,当然少了几项标注要完整.)
2.编辑,也要一个命令的.(大多是copy后改.)这点很重要.
3.统计 [/B]

1 所提供所6个选项除第一个名称外,其余的根据需要填写,可以为空
2 程序生成的是属性块,2002中双击即可编辑,Copy后的亦如此编辑
3 统计程序尚未写,这是基础。我没有画过这种图,不知其中的习惯规则,慢慢来。

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

使用道具 举报

发表于 2003-5-15 01:24:01 | 显示全部楼层
乔木数量不要小数,只有灌木统计时需要小数。
在标注苗木规格时设个选项,图上想要标注苗木规格时打个勾,若不想显示时打个x,对话框里的规格始终要填写,便于以后的苗木统计。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-5-15 13:16:47 | 显示全部楼层
其实还有一个更深层次的问题,那就是以前这个图纸可能不是我画的,我也就无法按照这个方法来写植物的标注!统计也就无从说起了,其实大家最常用的还是“黄杨 5棵”“鸢尾3.2M”(这个M上是带平方的)这们的书书写方式,其实在以前有一个乔木统计的程序,对统计乔木已经相当不错了,但是到了灌木这就不行了,我看这个程序一读到小数点就嘎然而止了,把粘数点当成了字母,后面的小数也就无从提取了,让统计无法正确进行,如果能够修改一个这个程序使之支持小数再结合你这个植物标注的话,就更完美了,自己绘的图统计不在话下,就是别人非标准的模式也能够解决了!
-------------------------
乔木统计的lisp原文如下

  1. ;;;----------------------------------------------------------------
  2. ;;;程序入口
  3. ;;;
  4. ;;;
  5. ;;;可以在这里加入你自己的专业处理函数,形成符合自己专业要求的程序
  6. ;;;
  7. ;;;本程序可以免费修改、使用,但在本程序基础上所增添的代码,亦不得
  8. ;;;收取任何形式的费用,不得进行加密或编译成不可阅读的版本。
  9. ;;;
  10. ;;;2002.10.12   by Qlin
  11. ;;;----------------------------------------------------------------
  12. (defun c:treecalc (/ lst_tree)
  13.   ; 数据统计,生成统计数据表
  14.   (setq lst_tree (treecalc_calculate))

  15.   ; 表格进一步处理,可加入排序、规格说明、单位等其它数据形成专业数据表
  16.   
  17.   ; 数据表输出
  18.   ; (可以在这里加入表格绘制或数据输出到文件等功能)
  19.   (princ lst_tree)

  20.   (princ)
  21. );end

  22. ;;;----------------------------------------------------------------
  23. ;;; 统计所选择的文字,返回统计后的表
  24. ;;; 2002.10.12 by Qlin
  25. ;;;----------------------------------------------------------------
  26. (defun treecalc_calculate (/ ss ent1 str1 n lst_n lst_o n1 lst_all)
  27.   (setq n 0)
  28.   (if (setq ss (treecalc_gettext))
  29.     (while (setq ent1 (ssname ss n))
  30.       (setq str1 (cdr (assoc 1 (entget ent1))))
  31.       (setq lst1 (mixstring->list str1))
  32.       (if (> (length lst1) 1) ;判断文字格式
  33.         (if (> (atoi (cadr lst1)) 0) ;判断是否含有数字
  34.           (progn
  35.             (setq  str2 (car lst1)
  36.                   lst_n (list str2 (atoi (cadr lst1))))
  37.             (if (setq lst_o (assoc str2 lst_all))
  38.               (progn
  39.                 (setq n1 (+ (cadr lst_n)(cadr lst_o)))
  40.                 (setq lst_n (list str2 n1))
  41.                 (setq  lst_all (subst lst_n lst_o lst_all))
  42.               );progn
  43.               (setq lst_all (cons lst_n lst_all))
  44.             );if
  45.           );progn
  46.         );if
  47.       );if
  48.       (setq n (1+ n))
  49.     );while
  50.   );if
  51.   (setq lst_all (reverse lst_all))
  52. );end

  53. ;;;----------------------------------------------------------------
  54. ;;; 选定指定图层的文字实体,返回符合要求的选择集
  55. ;;;----------------------------------------------------------------
  56. (defun treecalc_gettext (/ en ss1 lay)
  57.   (while (not en)
  58.     (if (setq en (entsel "\n任选一标注文字以确定参加统计的文字图层:"))
  59.       (if (/= (cdr (assoc 0 (entget (car en)))) "TEXT")
  60.         (progn
  61.           (setq en nil)
  62.           (princ "非文字实体!")
  63.         );progn
  64.         (redraw (car en) 3)
  65.       );if
  66.     );if
  67.   );while
  68.   (setq lay (cdr (assoc 8 (entget (car en)))))
  69.   (princ "\n  选中<")(princ lay)(princ ">层")
  70.   (princ ", 现在选择需计算文字实体:")
  71.   (setq ss1 (ssget (list (cons 0 "TEXT")(cons 8 lay))))
  72. )

  73. ;;;----------------------------------------------------------------
  74. ;;; 将字符串以数字为间隔分解成字符串表
  75. ;;;----------------------------------------------------------------
  76. (defun mixstring->list (str_in / lst_out n len1 lst_n
  77.                       chr_c chr_n chr_p
  78.                       str_c str_id
  79.                       num_add str_add)
  80.   (defun num_add ()
  81.     (if str_id
  82.       (progn
  83.         (if (/= str_c "")(setq lst_out (cons str_c lst_out)))
  84.         (setq  str_c chr_c
  85.               str_id nil
  86.         );setq
  87.       )
  88.       (setq str_c (strcat str_c chr_c))
  89.     );if
  90.   )

  91.   (defun str_add ()
  92.     (if str_id
  93.       (setq str_c (strcat str_c chr_c))
  94.       (progn
  95.         (if (/= str_c "")(setq lst_out (cons str_c lst_out)))
  96.         (setq  str_c chr_c
  97.               str_id T
  98.         );setq
  99.       )
  100.     );if
  101.   )
  102.   
  103.   ;C-1: 加入对输入值的判断
  104.   (if (and str_in (/= str_in ""))
  105.     (setq len1 (strlen str_in))
  106.     (setq len1 0)
  107.   )
  108.   
  109.   (setq n 1
  110.         lst_n (list "0" "1" "2" "3" "4" "5" "6" "7" "8" "9")
  111.         str_c "")

  112.   (repeat len1
  113.     (setq chr_c (substr str_in n 1))
  114.     (cond
  115.       ((member chr_c lst_n)
  116.        (num_add)
  117.       )
  118.       ((= chr_c ".")
  119.        (if (< n len1)
  120.           (setq chr_n (substr str_in (1+ n) 1))
  121.          (setq chr_n "")
  122.        );if
  123.        (if (member chr_n lst_n)
  124.          (num_add)
  125.          (str_add)
  126.         )      
  127.       )
  128.       ((= chr_c "-")
  129.        (if (< n len1)
  130.           (setq chr_n (substr str_in (1+ n) 1))
  131.          (setq chr_n "")
  132.        );if
  133.        (if (or (member chr_n lst_n)(= chr_n "."))
  134.          (num_add)
  135.          (str_add)
  136.         )
  137.       )
  138.       ((= chr_c "+")
  139.        (if (< n len1)
  140.           (setq chr_n (substr str_in (1+ n) 1))
  141.          (setq chr_n "")
  142.        );if
  143.        (if (or (member chr_n lst_n)(= chr_n "."))
  144.          (num_add)
  145.          (str_add)
  146.         )
  147.       )
  148.       ((or (= chr_c "E")(= chr_c "e"))
  149.        (if (< n len1)
  150.           (setq chr_n (substr str_in (1+ n) 1))
  151.          (setq chr_n "")
  152.        );if
  153.        ;C-2: 修改判断条件使之支持‘2e-3’类型的数据
  154.        (if (or
  155.              (and (member chr_n lst_n)(member chr_p lst_n))
  156.              (and (= chr_n "+")(member chr_p lst_n))
  157.              (and (= chr_n "-")(member chr_p lst_n))
  158.            );or
  159.          (num_add)
  160.          (str_add)
  161.         )
  162.       )
  163.       (T(str_add))
  164.     );cond
  165.    
  166.     (setq n (1+ n)
  167.           chr_p chr_c
  168.     )
  169.   );repeat

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

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

 楼主| 发表于 2003-5-15 21:23:47 | 显示全部楼层
程序的关键是中西文拆分,连续的西文要作为一个字串,  mixstring->list  的弊端是判断 chr ,要将所有的字符都判断,其实换个思路就可以解决,中文是大字符 (ASCII chr)大于 126 的是中文,小于的是西文,用 While 循环就可以将西文拆分开,其中要用到 Vl-string->list 函数。
其实晓东工具葙中已经有中西文拆分的函数,完全可以利用现成的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

发表于 2003-5-15 21:57:47 | 显示全部楼层
最初由 eachy 发布
[B]
2 程序生成的是属性块,2002中双击即可编辑,Copy后的亦如此编辑
[/B]


还是用那个生成时的对话框多好.一目了然.

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

使用道具 举报

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

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

发表于 2003-5-18 00:46:41 | 显示全部楼层
1.就点两下,出错.
2.180度方向标.错
3.线和文字在一个块里,想移个地方,就只好重标了.
4.无名块,不是好办法.
5.用了很多ea:...舍不得公开?  :)


还有要植物库,只要名称就行.这样:是小数还是整数,是株还是平方米,才能分清楚.名称里也好有个候选.(能不输入就不输入)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

 楼主| 发表于 2003-5-18 08:35:58 | 显示全部楼层
最初由 aeo 发布
[B]1.就点两下,出错.
2.180度方向标.错
3.线和文字在一个块里,想移个地方,就只好重标了.
4.无名块,不是好办法.
5.用了很多ea:...舍不得公开?  :)


还有要植物库,只要名称就行.这样:是小数还是整数,是株还是平方... [/B]

下载地址:http://www.xdcad.net/modrator/file_upload/14/20030518082929_1.swf

1 点两点出错什么意思?
2 180度问题已修改
3  无名块由CAD自动管理,这种情况应用是最佳选择
4  没有什么舍得舍不得,对使用者而言一个文件更方便,如果真舍不得我连程序也不会写。论坛上很多朋友都有我程序的源码,而且每次更新后我都给他们发一份,愿意交流的话上MSN或QQ吧
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

发表于 2003-5-18 21:41:01 | 显示全部楼层
1.没有那一拐,就平着标出.应该有这种情况
3.如果想移动,起点就标不到植物上了.


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

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

 楼主| 发表于 2003-5-18 22:01:16 | 显示全部楼层
我是这样处理数量的,当输入数字中含有 m 时标注m2(上标),不用在对话框中输入m2,没有 m 时仅标数字。
植物名称应该建立一个txt文件,可以自定义的,就像建筑中的词库管理。

补充:作为 txt 文件行数也不要太多,可以分成几个文件,否则加入列表后选择起来也不便,文件中的植物命名规则可以参考 过滤器 中的过滤选项

M玫瑰
M.......

这样读入的时候可以用快捷键,

修改了对话框,程序还在完善。

名称后面的选项是标注汉字还是标注代码(还要看文件的格式)选项。空 label 根据乔灌木选择自动调整为 株数、地径 或 面积、胸径。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-5-22 19:37:06 | 显示全部楼层
乔木

无患子
雪松
日本柳杉
香樟
日本早樱
......
臭椿
白蜡


灌木


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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-24 00:31 , Processed in 0.484224 second(s), 60 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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