明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1585|回复: 1

[OpenDCL] 求助,用opendcl做扩展属性对话框的问题

[复制链接]
发表于 2015-5-19 12:42 | 显示全部楼层 |阅读模式
本帖最后由 lameduck 于 2015-5-26 16:59 编辑

新手,opendcl不是很熟悉,附件中程序准备实现扩展属性输入的功能,就像特性一样!
但是控件触发都不能实现我想要的结果!步骤是拾取对象->有属性就显示->更改对话框->更新属性。
更新属性不能触发
麻烦哪位高手帮忙指点一下!
  1. (defun C:pro()
  2.   (vl-load-com)
  3.   (setq cmdecho (getvar "CMDECHO"))
  4.   (setvar "CMDECHO" 0)
  5.   (command "_OPENDCL")
  6.   (setvar "CMDECHO" cmdecho)
  7.   (Setq Lxd (Dcl_Project_Load "F:/pro.odcl"))
  8.   (dcl_Form_Show "pro" "form1")
  9. (princ)
  10. )
  11. (defun c:pro_Form1_OnDocActivated (/)
  12.   (c:pro_Form1_OnInitialize)
  13. )
  14. (defun c:pro_Form1_OnEnteringNoDocState (/)
  15.   (dcl_Form_Close pro_Form1)
  16. )

  17. ;;初始化
  18. (defun c:pro_Form1_OnInitialize(/)
  19.     (dcl_ComboBox_SetCurSel pro_Form1_ComboBox1 -1)
  20.     (dcl_Control_SetText pro_Form1_TextBox2 "")
  21.     (dcl_Control_SetText pro_Form1_TextBox3 "")
  22.     (dcl_Control_SetText pro_Form1_TextBox4 "")
  23.     (dcl_OptionList_SetCurSel pro_Form1_OptionList1 -1)
  24.     (dcl_OptionList_SetCurSel pro_Form1_OptionList2 -1)
  25.     (dcl_OptionList_SetCurSel pro_Form1_OptionList3 -1))

  26. ;;拾取对象若有扩展属性在相应的位置显示
  27. (defun c:pro_Form1_TextButton1_OnClicked()
  28.   (c:pro_Form1_OnInitialize)
  29.   (setq ss(car(entsel)))
  30.   (redraw ss 3)
  31.   (if (getxdata ss "obname") (dcl_Control_setText pro_Form1_ComboBox1 (getxdata ss "obname")))
  32.   (if(getxdata ss "floorno") (dcl_Control_SetText pro_Form1_TextBox2 (getxdata ss "floorno")))
  33.   (if(getxdata ss "topfloor") (dcl_Control_SetText pro_Form1_TextBox3 (getxdata ss "topfloor")))
  34.   (if(getxdata ss "buildno") (dcl_Control_SetText pro_Form1_TextBox4 (getxdata ss "buildno")))
  35.   (if(getxdata ss "areacal") (dcl_Control_SetCurrentSelection pro_Form1_OptionList1 (areacal_m (getxdata ss "areacal"))))
  36.   (if(getxdata ss "arearatio") (dcl_Control_SetCurrentSelection pro_Form1_OptionList2 (arearatio_m (getxdata ss "arearatio"))))
  37.   (if(getxdata ss "buildfunction") (dcl_Control_SetCurrentSelection pro_Form1_OptionList3 (buildfunction_m (getxdata ss "buildfunction"))))
  38.   (dcl_Control_SetEnabled pro_Form1_TextButton1 T)
  39. )

  40. ;;;获取实体扩展对象
  41. (defun getxdata(ob xpro / proxdata a)
  42.   (setq proxdata(entget ob (list xpro)))
  43.   (setq  a(cdr(cadr(cadr(assoc -3 proxdata)))))
  44. )
  45. ;;;改变实体扩展对象
  46. (defun changexdata(ob xpro input / proxdata e else_xdata)
  47. (setq proxdata(entget ob))
  48. (setq else_xdata(cdr(assoc -3 (entget ob '("*")))))
  49. (setq else_xdata(vl-remove-if '(lambda(x) (= (car x) xpro)) else_xdata))
  50. (if (not else_xdata)
  51.     (setq proxdata(cons  (list -3 (list xpro(cons 1000 input))) proxdata))
  52.     (setq proxdata(cons (cons -3 (cons (list xpro(cons 1000 input)) else_xdata)) proxdata)))
  53.   (regapp xpro)
  54.   (entmod proxdata)
  55. )

  56. ;;;加入实体扩展对象         
  57. (defun putxdata(ob xpro input / proxdata else_xdata)
  58.   (setq proxdata(entget ob))  
  59.   (setq else_xdata(cdr(assoc -3 (entget ob '("*")))))
  60.   (if (not else_xdata)
  61.     (setq proxdata(cons  (list -3 (list xpro(cons 1000 input))) proxdata))
  62.     (setq proxdata(cons (cons -3 (cons (list xpro(cons 1000 input)) else_xdata)) proxdata)))
  63.   (regapp xpro)
  64.   (entmod proxdata)
  65.   )

  66. (defun obname_m(str)
  67.   (cond ((= str "建筑物") (setq a 0))
  68.   ((= str "建筑物附属") (setq a 1))
  69.   ((= str "夹层") (setq a 1)))
  70. a)
  71. (defun areacal_m(str)
  72.   (cond ((= str "2") (setq a 0))
  73.         ((= str "1") (setq a 1))
  74.   ((= str "0.5") (setq a 2))
  75.   ((= str "0") (setq a 3))
  76.   ((= str "-1") (setq a 4)))
  77.   a)

  78. (defun arearatio_m(str)
  79.   (cond ((= str "不计容") (setq a 0))
  80.   ((= str "计容") (setq a 1))
  81.   ((= str "计容") (setq a 2)))
  82.   a)

  83. (defun buildfunction_m(str)
  84.   (cond ((= str "住宅") (setq a 0))
  85.   ((= str "商业") (setq a 1))
  86.   ((= str "办公") (setq a 2))
  87.   ((= str "其他") (setq a 3)))
  88.   a)
  89.   

  90. (defun isint(s) ;;判断是否为整数是为T否为nil
  91.   (cond ((not (=(type s) 'str)) nil)
  92.   ((= (type(read s)) 'int) T)
  93.   (T nil)
  94.   ))
  95. ;;更改属性
  96. (defun c:pro_Form1_TextButton2_OnClicked (/)
  97.   (setq Value(dcl_Control_getText pro_Form1_ComboBox1)
  98.   f_NewValue(dcl_Control_getText pro_Form1_TextBox2)
  99.   t_NewValue(dcl_Control_getText pro_Form1_TextBox3)
  100.   bn_NewValue(dcl_Control_getText pro_Form1_TextBox4)
  101.   ac_Value(dcl_OptionList_GetButtonCaption pro_Form1_OptionList1 (dcl_OptionList_GetCurSel pro_Form1_OptionList1))
  102.   ar_Value(dcl_OptionList_GetButtonCaption pro_Form1_OptionList2 (dcl_OptionList_GetCurSel pro_Form1_OptionList2))
  103.   bf_Value(dcl_OptionList_GetButtonCaption pro_Form1_OptionList3 (dcl_OptionList_GetCurSel pro_Form1_OptionList3)))
  104.   (if (or (not(isint t_NewValue)) (equal t_NewValue "w"))
  105.     (progn (alert "顶层请输入整数或W") (exit)))
  106.   (if (not(isint f_NewValue))
  107.     (progn (alert "层数请输入整数")(exit)))
  108.   (if Value
  109.     (if (getxdata ss "obname")
  110.     (changexdata ss "obname" Value)
  111.     (putxdata ss "obname" Value)))
  112.   (if f_NewValue
  113.     (if (getxdata ss "floorno")
  114.     (changexdata ss "floorno" f_NewValue)
  115.     (putxdata ss "floorno" f_NewValue)))
  116.   (if t_NewValue
  117.     (if (getxdata ss "topfloor")
  118.       (changexdata ss "topfloor" t_NewValue)
  119.       (putxdata ss "topfloor" t_NewValue)))
  120.   (if bn_NewValue
  121.     (if (getxdata ss "buildno")
  122.     (changexdata ss "buildno" bn_NewValue)
  123.     (putxdata ss "buildno" bn_NewValue)))
  124.   (if ac_Value
  125.     (if (getxdata ss "areacal")
  126.     (changexdata ss "areacal" ac_Value)
  127.     (putxdata ss "areacal" ac_Value)))
  128.   (if ar_Value
  129.     (if (getxdata ss "arearatio")
  130.     (changexdata ss "arearatio" ar_Value)
  131.     (putxdata ss "arearatio" ar_Value)))
  132.   (if bf_Value
  133.     (if (getxdata ss "buildfunction")
  134.     (changexdata ss "buildfunction" bf_Value)
  135.     (putxdata ss "buildfunction" bf_Value)))
  136.   (dcl_Control_SetEnabled pro_Form1_TextButton2 T)
  137. )

本帖子中包含更多资源

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

x
 楼主| 发表于 2015-6-25 17:06 | 显示全部楼层
引发事件设置成1,哎!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-4-27 07:43 , Processed in 0.341217 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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