本帖最后由 vectra 于 2017-9-28 23:56 编辑
这个是“为应用程序数据提供一个简单的修改界面”的升级版,原文http://bbs.mjtd.com/thread-113678-1-1.html。
特点:1、开源,方便扩展修改,可以在你的软件中自由使用;
2、纯LISP实现,除DCL文件外无其它依赖项。
使用方法:1、下载附件两个文件,放至任意目录。
2、在CAD 工具->选项 ,“支持文件搜索路径”中增加一项,指定为步骤1中的目录。
3、准备工作完成。
下面来看演示:
示例1:
- (propertybag-edit '(("Diameter" . 100) ("Flow" . 0.) ("Extendedable" . "Yes")) nil nil)
在值的文本框里填入3,按确定,程序返回修改后的属性列表
传入的值是浮点数,修改的文本内容将自动转化为浮点类型。整数同理,目前不支持复杂数据类型。
示例2:添加分隔符、变量别名及说明文字
- (propertybag-edit
- '(("Diameter" . 100) ("Flow" . 0.) ("" . "---") ("Extendedable" . "Yes"))
- '(("Diameter" "直径")
- ("Extendedable" "可扩展" "Extendedable\n指定某种参数可否可进行扩展,可选Yes/No指定某种参数可否可进行扩展,可选Yes/No")
- )
- nil
- )
属性Diameter显示为更易懂的“直径”;
属性标记为空白“”时,提取该属性的值作为分隔符显示在属性列表框中,方便对数据进行分组。
propertybag-edit函数的第二个参数对属性标记进行了解释,显示了更容易阅读的含义,如果添加了解释说明文字,值下方的说明框会列出该属性的详细说明。
示例3:使用列表
- (propertybag-edit
- '(("Diameter" . 100) ("Flow" . 0.) ("" . "---") ("Extendedable" . "Yes"))
- '(("Diameter" "直径")
- ("Extendedable"
- "可扩展"
- "Extendedable\n指定某种参数可否可进行扩展,可选Yes/No指定某种参数可否可进行扩展,可选Yes/No"
- ("Yes" "No")
- )
- )
- nil
- )
在说明文字后面添加一个可选数据表,将会启用列表框,供用户从预设值中选择。如果要限定用户在列表框中选择,可在此列表后增加一个参数t,如:
- (propertybag-edit
- '(("Diameter" . 100) ("Flow" . 0.) ("" . "---") ("Extendedable" . "Yes"))
- '(("Diameter" "直径")
- ("Extendedable"
- "可扩展"
- "Extendedable\n指定某种参数可否可进行扩展,可选Yes/No指定某种参数可否可进行扩展,可选Yes/No"
- ("Yes" "No")
- t
- )
- )
- nil
- )
这将禁用文本编辑控件,用户只能在列表框中选择项目。
示例4:记住上次编辑的行
- (setq $edit-propties-sel "2")
- (propertybag-edit
- '(("Diameter" . 100) ("Flow" . 0.) ("" . "---") ("Extendedable" . "Yes"))
- '(("Diameter" "直径")
- ("Extendedable"
- "可扩展"
- "Extendedable\n指定某种参数可否可进行扩展,可选Yes/No指定某种参数可否可进行扩展,可选Yes/No"
- ("Yes" "No")
- t
- )
- )
- ‘$edit-propties-sel
- )
启动对话框时将预选选定第3行,当选择了其它行时,行号将被保存到变量$edit-propties-sel中,做为下次启动对话框时的预选项。
示例5:公式求解
- (propertybag-edit
- $data
- '(("Diameter"
- "直径"
- "管道的公称直径,单位为mm"
- (32 40 50 65 80 100 125 150 200 250 300 400 500 600)
- )
- ("Flow" "流量" "单位为m3/h。")
- ("Vol"
- "流速"
- "管道内流体在指定流量管径条件下的流速 m/s"
- "(/ {Flow} 3600. (/ (* pi {Diameter} {Diameter}) 4.e6)))"
- )
- )
- '$edit-propties-sel
- )
如果可选数据表为字符串,将自动对字符串表达式进行求解,并将结果显示在该属性值下。任何修改操作都将触发公式更新。
你也可以调用自定义函数来求解,并有花括号“{”、“}”来表示属性的值。
如定义- (defun vol (f d)
- (/ f 3600. (/ (* pi d d) 4.e6))
- )
之后,定义表达式为 "(vol {Flow} {Diameter})" 也可以达到同样的效果。
|