找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2923|回复: 11

[求助] 关于TREE的,应该可以写简洁些,求高手支招~~~~

[复制链接]
发表于 2014-8-10 23:13:30 | 显示全部楼层 |阅读模式

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

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

×
新手上路,第一次做ODCL,求高手帮忙
下面这串代码能执行,可是感觉很烦躁,应该可以精简吧,求高手支招!
原来用DCL写,从txt文件读取,很简洁,怎么用odcl写就这么烦躁呢?
txt文件如下:


  1. (defun c:YDCOOD_Form1_OnInitialize (/)
  2.   (setq ph (dcl_Tree_AddParent YDCOOD_Form1_TREE "H:建设用地"))
  3.   (setq pe (dcl_Tree_AddParent YDCOOD_Form1_TREE "E:非建设用地"))
  4.   (setq ph1 (dcl_Tree_AddChild YDCOOD_Form1_TREE(list(list Ph "H1:城乡居民点建设用地"))))
  5.   (setq ph2 (dcl_Tree_AddChild YDCOOD_Form1_TREE(list(list Ph "H2:区域交通设施用地"))))
  6.   (setq ph3 (dcl_Tree_AddChild YDCOOD_Form1_TREE(list(list Ph "H3:区域公用设用地"))))
  7.   (setq ph4 (dcl_Tree_AddChild YDCOOD_Form1_TREE(list(list Ph "H4:特殊用地"))))
  8.   (setq ph5 (dcl_Tree_AddChild YDCOOD_Form1_TREE(list(list Ph "H5:采矿用地"))))
  9.   (setq ph9 (dcl_Tree_AddChild YDCOOD_Form1_TREE(list(list Ph "H9:其它建设用地"))))
  10.   (setq ph11 (dcl_Tree_AddChild YDCOOD_Form1_TREE(list(list Ph1 "H11:城市建设用地"))))
  11.   (setq ph12 (dcl_Tree_AddChild YDCOOD_Form1_TREE(list(list Ph1 "H12:镇建设用地"))))
  12.   (setq ph13 (dcl_Tree_AddChild YDCOOD_Form1_TREE(list(list Ph1 "H13:乡建设用地"))))
  13.   (setq ph21 (dcl_Tree_AddChild YDCOOD_Form1_TREE(list(list Ph2 "H21:铁路用地"))))
  14.   (setq ph22 (dcl_Tree_AddChild YDCOOD_Form1_TREE(list(list Ph2 "H22:公路用地"))))
  15.   (setq ph23 (dcl_Tree_AddChild YDCOOD_Form1_TREE(list(list Ph2 "H23:港口用地"))))
  16.   (setq ph24 (dcl_Tree_AddChild YDCOOD_Form1_TREE(list(list Ph2 "H24:机场用地"))))
  17.   (setq ph25 (dcl_Tree_AddChild YDCOOD_Form1_TREE(list(list Ph2 "H25:管道运输用地"))))
  18.   (setq ph41 (dcl_Tree_AddChild YDCOOD_Form1_TREE(list(list Ph4 "H41:军事用地"))))
  19.   (setq ph42 (dcl_Tree_AddChild YDCOOD_Form1_TREE(list(list Ph4 "H42:安保用地"))))
  20.   (setq pe1 (dcl_Tree_AddChild YDCOOD_Form1_TREE(list(list pe "E1:水域"))))
  21.   (setq pe11 (dcl_Tree_AddChild YDCOOD_Form1_TREE(list(list pe1 "E11:自然水域"))))
  22.   (setq pe12 (dcl_Tree_AddChild YDCOOD_Form1_TREE(list(list pe1 "E12:水库"))))
  23.   (setq pe13 (dcl_Tree_AddChild YDCOOD_Form1_TREE(list(list pe1 "E13:坑塘沟渠"))))
  24.   (setq pe2 (dcl_Tree_AddChild YDCOOD_Form1_TREE(list(list pe "E2:农林用地"))))
  25.   (setq pe9 (dcl_Tree_AddChild YDCOOD_Form1_TREE(list(list pe "E9:其他非建设用地"))))
  26.   ;;;;加载城市建设用地
  27.   (setq CR (dcl_Tree_AddChild YDCOOD_Form1_TREE(list(list Ph11 "R:居住用地"))))
  28.   (setq CR1 (dcl_Tree_AddChild YDCOOD_Form1_TREE(list(list CR "R1:一类居住用地"))))
  29.   (setq CR2 (dcl_Tree_AddChild YDCOOD_Form1_TREE(list(list CR "R2:二类居住用地"))))
  30.   (setq CR3 (dcl_Tree_AddChild YDCOOD_Form1_TREE(list(list CR "R3:三类居住用地"))))
  31.   (setq CR4 (dcl_Tree_AddChild YDCOOD_Form1_TREE(list(list CR "R4:城中村居住用地"))))
  32.   (setq CR5 (dcl_Tree_AddChild YDCOOD_Form1_TREE(list(list CR "R5:混合用地"))))
  33.   (setq CA (dcl_Tree_AddChild YDCOOD_Form1_TREE(list(list Ph11 "A:公共管理与公共服务设施用地"))))
  34.   (setq CS (dcl_Tree_AddChild YDCOOD_Form1_TREE(list(list Ph11 "B:商业服务业设施用地"))))
  35.   (setq CM (dcl_Tree_AddChild YDCOOD_Form1_TREE(list(list Ph11 "M:物流仓储用地"))))
  36.   (setq CW (dcl_Tree_AddChild YDCOOD_Form1_TREE(list(list Ph11 "W:道路与交通设施用地"))))
  37.   (setq CS (dcl_Tree_AddChild YDCOOD_Form1_TREE(list(list Ph11 "S:道路与交通设施用地"))))
  38.   (setq CU (dcl_Tree_AddChild YDCOOD_Form1_TREE(list(list Ph11 "U:公共设施用地"))))
  39.   (setq CG (dcl_Tree_AddChild YDCOOD_Form1_TREE(list(list Ph11 "G:绿地与广场用地"))))
  40. )


2013用地类别.txt

12.96 KB, 下载次数: 2

用地分类

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
 楼主| 发表于 2014-8-10 23:19:32 | 显示全部楼层
原来用DCL写的时候,只需要在大类中类小类前面加特殊符号判断下就行


取出大类组成boxlst
(mapcar '(lambda(x) (strcat "++" (car x) (cadr x))) boxlst);组成新表boxlst
(fill-list-box "k-lstbox" boxlst);填充表项
被点击后,++变成--,同时读取中类添加到列表.依次类推.感觉很简单,难道ODCL返古了?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-10 23:23:42 | 显示全部楼层
DCL编写的,界面一般,不过代码很简洁
QQ截图20140810232239.jpg
ODCL写的,界面漂亮,不过代码头疼
QQ截图20140810232023.jpg

点评

先看一下这个论坛的以前教学帖的例子。 多用MAPCAR 和 表的操作。 可以很简洁的,使用OPENDCL没错。  详情 回复 发表于 2014-8-10 23:58
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 859个

财富等级: 财运亨通

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

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2014-8-10 23:58:08 | 显示全部楼层
77077 发表于 2014-8-10 23:23
DCL编写的,界面一般,不过代码很简洁

ODCL写的,界面漂亮,不过代码头疼

先看一下这个论坛的以前教学帖的例子。

多用MAPCAR 和 表的操作。

可以很简洁的,使用OPENDCL没错。

点评

东哥,给几个例子来学习学习啊,关于tree的~  详情 回复 发表于 2014-8-11 00:23
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-11 00:23:50 | 显示全部楼层
XDSoft 发表于 2014-8-10 23:58
先看一下这个论坛的以前教学帖的例子。

多用MAPCAR 和 表的操作。

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

使用道具 举报

 楼主| 发表于 2014-8-11 00:25:27 | 显示全部楼层
mapcar和lst倒是可以说能理解了,现在第一次学odcl,所以摸不着头脑。
上面这个是我模仿odcl例子来写的~
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-11 04:29:26 | 显示全部楼层
自己摸索一下弄出来了,初步练到第三层,唉,
晓东论坛defun都是高手,不屑于回答这种初级问题~


  1. (defun c:ydcood_ydcood_OnInitialize ( / )
  2. (foreach x lst
  3.     (setq P (dcl_Tree_AddParent ydcood_ydcood_tree (strcat (car(car x)) ":" (cadr (car x)))))
  4.     (setq lst1 (cdr x))
  5.     (foreach y lst1
  6.        (setq P1 (dcl_Tree_AddChild ydcood_YDCOOD_Tree (list(list p (strcat (car(car y)) ":" (cadr (car y)))))))
  7.        (setq lst2 (cdr y))
  8.        (foreach z lst2
  9.           (dcl_Tree_AddChild ydcood_YDCOOD_Tree (list(list p1 (strcat (car z) ":" (cadr z)))))
  10.           )
  11.      )
  12. )
  13. )

点评

是因为很多都回答过了,就这个ODCL论坛以前就好多TREE的教学帖子,先找找看。  详情 回复 发表于 2014-8-11 08:22
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2014-8-11 08:22:18 | 显示全部楼层
77077 发表于 2014-8-11 04:29
自己摸索一下弄出来了,初步练到第三层,唉,
晓东论坛defun都是高手,不屑于回答这种初级问题~

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

使用道具 举报

 楼主| 发表于 2014-8-11 12:02:00 | 显示全部楼层
论坛已有的都是直接写入节点,节点数量及层数都在可控范围内,那个在odcl的Samples里面有.
我要的是根据list自动填写.节点数量级层数由list决定.我需要的这个tree有6层.

点评

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

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

发表于 2014-8-11 12:30:39 | 显示全部楼层
77077 发表于 2014-8-11 12:02
论坛已有的都是直接写入节点,节点数量及层数都在可控范围内,那个在odcl的Samples里面有.
我要的是根据list ...

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-8-11 13:20:08 来自手机 | 显示全部楼层
77077 发表于 2014-8-11 12:02
论坛已有的都是直接写入节点,节点数量及层数都在可控范围内,那个在odcl的Samples里面有.
我要的是根据list ...

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-17 20:24 , Processed in 0.437596 second(s), 58 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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