77077 发表于 2014-6-26 17:49:35

写完成了,可是问题也出来了~急救~~~~;;;=================================================================*
;key1动作反应
(defun key1()
(setq n (atoi (get_tile "key1"));取得当前选中项的索引值n
      str (nth n boxlst);从列表框中取出第n个表项:"++D分类四"
   str1 (substr str 1 2);分割出前两位
   str2 (substr str 3);分割出后面诸位
      )
(cond
   ((= str1 "++") (pro1)(pro3 1));加载对应的中类,并加载数据到textbox
   ((= str1 "--") (pro1-));删除对应的中类,并加载数据到textbox
   ((= str1 " +") (pro2)(pro3 2));加载对应的小类,并加载数据到textbox
   ((= str1 " -") (pro2-));删除对应的小类,并加载数据到textbox
   ((= str1 "") (pro3 3));加载数据到textbox
)
)

;加载对应的中类
(defun pro1 ( / lstn)
(setq lstn (vl-remove-if '(lambda (x) (/= (strlen (car x)) 2)) lst)
       lstn (vl-remove-if '(lambda (x) (/= (substr (car x) 1 1) (substr str2 1 1))) lstn)
       lstn (mapcar '(lambda(x) (strcat " +" (car x) (cadr x))) lstn);组成准备插入列表框的表lstn
       )
(setq boxlst (LI-DelLst boxlst n)
      boxlst (LI-append-lstn boxlst n lstn)
      boxlst (LI-append-lstn boxlst n (list (strcat "--" str2)))
      )
(fill-list-box "key1" boxlst)
(set_tile "key1" (itoa n))
)
;删除中类
(defun pro1- ( / lstn)
(setq lstn (vl-remove-if '(lambda (x) (/= (strlen (car x)) 2)) lst)
       lstn (vl-remove-if '(lambda (x) (/= (substr (car x) 1 1) (substr str2 1 1))) lstn)
       )
(repeat (1+ (length lstn))
         (setq boxlst (LI-DelLst boxlst n))
      )
(setq boxlst (LI-append-lstn boxlst n (list (strcat "++" str2))))
(fill-list-box "key1" boxlst)
(set_tile "key1" (itoa n))
)
;加载对应的小类================
(defun pro2 ( / lstn)
(setq lstn (vl-remove-if '(lambda (x) (/= (strlen (car x)) 3)) lst)
       lstn (vl-remove-if '(lambda (x) (/= (substr (car x) 1 2) (substr str2 1 2))) lstn)
       lstn (mapcar '(lambda(x) (strcat "" (car x) (cadr x))) lstn);组成准备插入列表框的表lstn
       )
(setq boxlst (LI-DelLst boxlst n)
      boxlst (LI-append-lstn boxlst n lstn)
      boxlst (LI-append-lstn boxlst n (list (strcat " -" str2)))
      )
(fill-list-box "key1" boxlst)
(set_tile "key1" (itoa n))
)
;删除小类
(defun pro2- ( / lstn)
(setq lstn (vl-remove-if '(lambda (x) (/= (strlen (car x)) 3)) lst)
       lstn (vl-remove-if '(lambda (x) (/= (substr (car x) 1 2) (substr str2 1 2))) lstn)
       )
(repeat (1+ (length lstn))
         (setq boxlst (LI-DelLst boxlst n))
      )
(setq boxlst (LI-append-lstn boxlst n (list (strcat " +" str2))))
(fill-list-box "key1" boxlst)
(set_tile "key1" (itoa n))
)
;读lst取数值填入文本框
(defun pro3 (n / lstx)
(setq lstx (vl-remove-if '(lambda (x) (/= (car x) (substr str2 1 n))) lst))
(set_tile "key2" (nth 0 (car lstx)))
(set_tile "key3" (nth 1 (car lstx)))
)

qyming 发表于 2014-6-28 17:50:26

最后效果怎么样?

77077 发表于 2014-6-29 11:04:53

基本上所有代码都已经贴出来了,整理下就是完整的源码了!

tm20038175 发表于 2014-7-1 12:53:10

有没有说明书?

77077 发表于 2014-7-1 13:04:10

什么说明书?
每个lst项里面包含很多元素("性质代码" "用地性质" "容积率" "建筑密度" "绿地率" "建筑限高" "机动车位比" "自行车位比" "内容说明" "图层名" "图层颜色")
做完以后的界面是

77077 发表于 2014-7-1 13:07:32

最终得到信息表.可以写入图块和文本文件都行~
(("地块编号" "JK-XX-AA-01") ("性质代码" "R11") ("用地性质" "住宅") ("地块面积" "5112.05") ("容积率" "1.1") ("建筑密度" "32") ("绿地率" "35") ("建筑限高" "12")
("地上建筑" "5623.26") ("地下深度" "0") ("地下建筑" "5112.05") ("绿地面积" "1789.22") ("兼容用地" "C") ("兼容比例" "30/70") ("居住人口" "161") ("人口参数" "35")
("机动车位" "84") ("机动车位参数" "1.5") ("自行车位" "17") ("自行车位参数" "0.3") ("配套公建" "公厕-1-80/超市-1-500m2") ("备注信息" "备注"))

qyming 发表于 2014-7-5 12:10:56

把对话框文件也传上来,让我们也学习一下

tianyi1230 发表于 2015-4-25 17:46:05

看来楼主是搞规划设计的!

Rimford 发表于 2015-4-25 19:10:21

这个是真正的技术讨论贴
页: 1 2 [3]
查看完整版本: 飞诗请进,求关于list_box单击打开收拢的效果代码~