明经CAD社区

 找回密码
 注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 13592|回复: 25

[OpenDCL] 【越飞越高讲堂6】十年磨一剑--openDCL和反应器

    [复制链接]
发表于 2007-7-8 16:28 | 显示全部楼层 |阅读模式

长期以来我就想把Express tools工具中的arc-aligned text的功能扩展。但在我未学编程之前,这一直是个空想。到今天,学LISP也将近一年了,自认为,快要毕业了,(autolisp基本语法,VLISP,对话框,反应器等可算勉强及格了),不是论文的话,总得交一份答卷吧!

(不知道这份答卷能得多少分?请各位提提批评意见和测试。)

 

于是趁着自己稍微学了一下反应器的知识和刚刚接触的openDCL ,编写了一个程序。编这个程序,的确花费我许多时间,一来是我水平有限,经验不够丰富,二来中间插了很多事情,断断续续,说十年磨一剑是夸张了点,但十天半个月是已经超出的。

 

本程序的运行命令为:eee.

本程序需要openDCL.16.ARX或者openDCL.17.ARX支持,最好把程序文件和原代码全部拷贝到搜索路径中。因为反应器和openDCL 以及自己水平的缘故,所以程序可能导致CAD 崩溃,故运行前务必先保存文件。 

没有openDCL.arx的到我的网络硬盘http://highflybird.ys168.com/中去下载。

本程序只能运行于AutoCAD R2004以上。对AutoCAD R2006支持最好。

 

我这个程序有点有点象3dsmax的路径路径追随功能,能沿曲线或者直线路径阵列 CAD 物体:文字,选择集,图块。

也许你们要说,我这个程序不就是用命令MESURE,或者DIVIDE就能完成吗? 当然,如果我的程序仅仅是达到这两个命令的功能,我也就不好意思把这个程序拿出来了。下面我来说说其中几个功能:

1、  如果是文字的话,则你输入一行文字,或者选择文本,则此文字内容可以沿路径阵列相当于express tools 中ArcAlignedText工具的扩展。

2、  如果是你在CAD 中选择物体的话,则选择的物体沿着路径阵列而且阵列后的物体不是块,也不是组,只是原选择集的复制。

3、  如果是选择图块,则从对话框或图形中选择图块沿着路径阵列阵列后的图块可以有随机比例大小。(在某些情况有用)

所有阵列后物体可以跟路径关联,如果是永久关联的话,下次打开文件需要加载程序才能运行。如果关联了鼠标双击反应器,可以对路径或者阵列后的物体双击,则弹出对话框,你可以随时改变参数。如果你对路径作夹点编辑或者移动旋转等变换,则阵列物体跟随路径的形状一起动.

两大突出的功能:

1、  吸星大法。阵列的物体仿佛吸在路径上。路径怎么动,它就怎么动。它长我也长,它缩我也缩。

2、  乾坤大挪移。当你选择另外一条路径关联时,则阵列的物体就自动跑到那条路径上去。

其他还有很多功能就不一一说明了。

 

编写了这次程序后,最大的心得和体会就是:

程序在进入主题前,要进行严格的数据检查,否则程序会出现各种难以预料的错误。令外在程序的结构上最好不要有冗余的程序段,应尽量做到能省则一定省,否则对计算和运行都有影响。

对反应器的深刻体会是:

要避免反应器出错,必须要了解反应器的流程。因为反应器不像一个程序一个流程。它的流程不是线性的,也不是连续的。

要避免删除和恢复删除这之类的错误,如:"; 错误: Automation 错误。 对象已被删除"必须定义四个函数:

:vlr-OpenedForModify  :vlr-erased  :vlr-unerased  :vlr-modified;

要不然就得用到command反应器或者数据库反应器。
顺序一般是删除时: :vlr-OpenedForModify->:vlr-erased->:vlr-modified;
恢复删除时:
:vlr-OpenedForModify->:vlr-unerased->:vlr-modified;
搞清楚了它们的顺序,然后分别定义好各自的函数,(例如我上面的例子),在函数中加上判

断语句,这样就不会出错了。

 

openDCL的体会就是:openDCL对话框的操作实在太简便了,而且多了很多autocad中DCL中不能完成的功能。我就是即学即会的。

 

我想尽力去赶超Express Tools,但我深知这是不可能的,也是不现实的。J

这个程序中有几个小小的错误,我正在想办法解决:

1、  鼠标双击的错误:在鼠标双击弹出对话框后,如果进行交互操作可能有错误提示:但并不影响程序进行。

2、  选择集的错误,有好几个,因为选择集最麻烦了,不像图块或者文字。

3、  乾坤大挪移后的关联问题,也没仔细考虑清楚。

其他隐藏的就还暂时没发现,所以这个版本不能是正式版本,需要做很多调整。大家多提意见啊,谢谢了!



本帖子中包含更多资源

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

x

评分

参与人数 1威望 +1 明经币 +2 金钱 +20 贡献 +5 激情 +5 收起 理由
mccad + 1 + 2 + 20 + 5 + 5 【精华】好程序

查看全部评分

本帖被以下淘专辑推荐:

发表于 2007-7-8 17:34 | 显示全部楼层

沙发.

支持一下,能做出一百多K的这种程序.可见根底很不错.

发表于 2007-7-8 22:47 | 显示全部楼层
支持,要做这种程序也很不容易,恐怕我十年也学不会……
发表于 2007-7-9 08:54 | 显示全部楼层

这么棒的程序!太帅了,楼主花大心思啦!向您学习!

发表于 2007-7-9 19:00 | 显示全部楼层
太帅了,值得向楼主学习
发表于 2007-7-11 00:23 | 显示全部楼层
只能说是强人!
发表于 2007-7-11 21:35 | 显示全部楼层
本帖最后由 作者 于 2007-7-11 21:37:48 编辑

版主真是利害,这几天也是着用看看OPENDCL
不过发现这软体的输出LSP是要自己手动执行
真是不方便.
另外官网下载点
https://sourceforge.net/project/showfiles.php?group_id=187950
下载回来 4.0 (RC1) 安装后的 OpenDCL.16.arx 及 OpenDCL.17.arx
在使用版主的程序为何会缺少 ODCL_PROJECT_LOAD 函数
但使用您所提供的 OpenDCL.16.arx 及 OpenDCL.17.arx 却不会发生这情况
发现这两组的大小有异,不知道为何呢?

另外版主或是其他高手,有人知道
OpenDCL.Runtime.4.0.2.0.msm
这档案是做什么用的吗?

最后希望版主可以提供些您在使用OPENDCL上的编写技巧,
给大家参考学习一下.谢谢~

 楼主| 发表于 2007-7-12 13:38 | 显示全部楼层

我以前的用的openDCL的版本是4.0.1.16,但现在的版本4.0.2.1有很多地方都做了改变,以前所有的以ODCL开头的函数现在都变成了DCL的函数,所以程序不能运行。另外新版本的支持路径为\common\openDCL 和openDCL Studio,所以要使得我的程序能运行,还需做一些代码上的改动。明天我发上修改过后的英文版。
关于做个openDCL教程或技巧,我会做的,只怕得不好,请大家多担待。

我估计以后ACAD的lisp的对话框可能是openDCL了。

发表于 2007-7-12 19:59 | 显示全部楼层
原来如此,果真是版本问题.
要麻烦版主修改了.
期待修正后的版本了
另外请问反应器在于 永久反应器 与 暂时反应器
在维护上哪种比较方便.
先谢了~
发表于 2007-7-13 12:55 | 显示全部楼层

太牛了,继续努力楼主

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

本版积分规则

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

GMT+8, 2018-7-23 13:57 , Processed in 0.250561 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.3

© 2001-2013 Comsenz Inc.

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