[求助][讨论]首次使用OPENDCL开发笔记
<p>本来应该发在OPENDCL子论坛里的<br/>不过那里人气实在低所以发在这里吧</p><p>前几天nonsmall的一个帖子里<br/>第一次注意到opendcl工具插件<br/>这个真是开发vlisp程序的利器<br/>下面是我首次用它做程序<br/>程序远远没有完工<br/>贴出来的目的有几个<br/>1.关于程序功能设置的思路请大家提提意见<br/>2.关于程序功能如何实现,有些地方还不太懂,需要大家帮助<br/>3.推广opendcl这个工具</p><p>这个程序的名字暂定"my图形tree",简称"mytree"<br/>首要功能是用于图档的快速切换及管理<br/>类似于docbar但在界面和功能上将会有很大的不同<br/>docbar 2.0已经做的很好了<br/>但和我所希望的仍有差距<br/>本来想学习arx自己做<br/>现在有了opendcl根据它的特点<br/>某些想法将放弃<br/>但同时也多了些新的思路<br/>自我感觉目前的构想若都能实现<br/>这个程序还是有一定价值的</p><p>程序源码,对话框文件以及对它开发的构想<br/>都将在沙发帖中更新并标以时间区分<br/>而关于程序开发上的疑问将在板凳帖里提出<br/>欢迎大家指教</p> <p>开发思路简介</p><p>本来想用标签控件(tab)来实现文档切换<br/>但是标签控件无法使用右键<br/>而且似乎不能增减选项卡<br/>所以最终决定采用tree控件<br/>采用tree后程序界面由横变竖<br/>占位相对要多一点<br/>但本身我就打算采用简写的方式显示文件名<br/>所以这个问题应该影响不大</p><p>"mytree"中<br/>parent是文件所属文件夹名<br/>child是打开文件名<br/>这样处理的优点是比较直观<br/>且不同文件夹的文件可以分开排序</p><p>目前开发进度<font color="#ee3d11" size="4"><2009年6月11日><br/></font>1.实现已打开图形的分目录显示<br/>2.点击文件名(child)可以切换到相应文档</p><p><br/>预备加入功能</p><p>1.建立名称简写规则并在对话框中实现简写<br/>简写规则分2种<br/>a.默认规则<br/>默认规则用于通常情况下的简写规则<br/>主要可能用于确定parent的缩略方式<br/>比如指定只显示最后1级或2级文件夹名<br/>具体有待考虑<br/>b.定制规则<br/>以ini文件型式放在文件夹内<br/>该文件存在时以文件内的规则优先<br/>{此功能实现后,版本将确定为V1.0}</p><p>2.简写规则建立器<br/>专门用于生成前述的ini文件</p><p>3.将目前单一tree改为3个tree并用分割线隔开<br/>设3个tree纯属个人需要<br/>我画图时一般会打开3类文件<br/>当前项目,过往类似项目--用于参考,标准图库--调用</p><p>4.记录已打开文件或文件夹<br/>形成工程文件以方便今后快速打开文件</p><p>5.对不同类文件可单独进行设置<br/>如参考类图库类不予保存<br/>当前工程类直接保存或建立同步更新文件<br/>同步更新设置将是这个环节的重点<br/>{此功能实现后,版本将确定为V2.0}</p><p>6.定义双击,右键功能<br/>例如:<br/>parent双击调用资源管理器右键调用模拟弹出式菜单或类别设置对话框<br/>child双击保存右键调用模拟弹出式菜单或设置对话框</p><p><font color="#ee3d11" size="4"><2009年6月11日></font><br/></p> <p>目前待解决问题<br/><优先级低>01.无名文件的名称显示方式<br/><优先级低>02.只读文件的确定及后续处理<br/><优先级高>03.当前文档对应child的焦点设置<br/><优先级高>04.文档手工切换时,焦点的相应变化<br/><优先级高>05.文件另存为或无名文件保存后的child刷新<br/><优先级高>06.打开关闭文件后的label刷新<br/><优先级低>07.label修改对应程序流程(暂屏蔽实时修改,待简写规则模块开发时解决)<br/><优先级中>08.实时建立并启用简写规则后的label刷新<br/><优先级低>09.对话框布局(按钮布置及定义,部分放在V2中解决)<br/><优先级低>10.__________</p><p>目前正在试图解决的问题<br/>1.文档切换反应器<br/>2.打开关闭反应器<br/>下一步准备解决的问题<br/>1.对图形文件是否处于只读状态的判断<br/>2.图形修改反应器</p> <p>目前遇到困难</p><p>1.<br/>已打开多个文件的情况下加载mytree<br/>或者mytree加载后文件打开关闭改名等<br/>如何使得每个文件都自动更新tree<br/><font color="#0909f7">目前对于新打开文件<br/>我的方法是在ACAD.mnl的末尾加了一句<br/>(load "mydoc.lsp")(c:1)<br/>每开个文件都执行一次mytree<br/>并在mytree程序的末尾<br/>采用vl-propagate函数在所有文档中刷新数据<br/>这应该不是最佳的解决办法<br/>因为效率太低<br/><br/>关闭改名等<br/>当然是采用反应器<br/>目前还没到这一步<br/></font><br/><font color="#0909f7">2.关于文档切换的焦点转换<br/>我的办法是建立vlr-docmanager-reactor反应器<br/>但是加载了这个反应器<br/>就会不停弹出出错提示<br/>全部点确定后再就可以实现焦点转换<br/>就是不知道问题出在何处<br/></font><br/>3.<br/>另外问个问题<br/>有Vlisp函数帮助大全吗?<br/>最好是中文版的<br/>我手上的帮助文件<br/>有vla-get类,有vla-put类<br/>就是少了vla类的</p> 本帖最后由 作者 于 2009-6-12 2:54:23 编辑 <br /><br /> <p>程序里采用了doslib函数库里的函数<br/>压缩包里是doslib15.arx,doslib16.arx两个文件<br/>我的CAD是2004<br/><br/>(defun s::load_doslib61()<br/> ;;----------load doslib6.1<br/> (cond<br/> ( (= "15" (substr (getvar "acadver") 1 2)) ; Check for <font color="#f76809">AutoCAD 2000, 2000i, or 2002</font><br/> (if (not (member "doslib15.arx" (arx)))<br/> (if (findfile "doslib15.arx") <font color="#f76809">(arxload "doslib15") </font>)<br/> )<br/> )<br/> ( (= "16" (substr (getvar "acadver") 1 2)) ; Check for <font color="#f709f7">AutoCAD 2004, or 2005</font><br/> (if (not (member "doslib16.arx" (arx)))<br/> (if (findfile "doslib16.arx") <font color="#ff00ff">(arxload "doslib16")</font> )<br/> )<br/> )<br/> )<br/> ;;----------ok<br/>(princ)<br/>)</p><p>(s::load_doslib61)</p> 文档切换反应器<br/>个人感觉反应器是应该在文件打开后激活<br/>但是在一次打开多个文件时<br/>不知道如何在最后一个文件打开时再激活反应器 潜力帖,支持你. <p>楼主挺用心的</p><p>应该支持!</p> <p>强烈支持LZ,我现在在学Open DCL,工具感觉比CAD自带DCL工具好用多了,只是现在苦于没有好的中文版教程,只能摸索着学习。</p><p>“本来应该发在OPENDCL子论坛里的,不过那里人气实在低所以发在这里吧。”</p><p></p> 踏破铁鞋无觅处,得来全不费功夫。多谢楼主
页:
[1]
2