找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 24786|回复: 58

[原创]:实战 OpenDCL

[复制链接]

已领礼包: 593个

财富等级: 财运亨通

发表于 2009-1-6 15:38:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
这是一个 OpenDCL 的简单实例,写的比较粗燥

1 OpenDCL Studio 界面
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2009-2-6 11:10:36 | 显示全部楼层
这么好的东西,怎么没加积分啊!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 0 反对 1

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

 楼主| 发表于 2009-1-6 16:22:13 | 显示全部楼层
写 Lisp 之前先要做些前期工作,因为要图块插入,获取图块列表是必须的,另外插入匿名块是不能用 command 的,要用到 Vla-insertblock,先来看看这两部分

获取图块列表,这个经常用到,作为一个通用函数

  1. ;;;功  能  返回包含在指定符号表中的所有元素
  2. ;;;参  数  一个符号表名称
  3. ;;;示  例  (ybl-table "block")
  4. ;;;作  者  Michael Puckett
  5. (defun ybl-table (s / d r)
  6.   (while (setq d (tblnext s (null d)))
  7.     (setq r (cons (cdr (assoc 2 d)) r))
  8.   )
  9.   (reverse r)
  10. )


Vla-InsertBlock


  1. 插入图形文件或当前图形中已定义的命名块。

  2. 参阅 | 示例

  3. 语法

  4. RetVal = object.InsertBlock(InsertionPoint, Name, Xscale, Yscale, ZScale, Rotation [, Password])

  5. Object

  6. ModelSpace, PaperSpace, Block
  7. 使用该方法的对象和集合。

  8. InsertionPoint

  9. Variant[变体] [变体] (三元素双精度数组); 为输入项
  10. 该三维WCS坐标指定了插入块到图形中的位置。

  11. Name

  12. String[字符串]; 为输入项
  13. 插入的 AutoCAD 图形文件名称或图块名称。如果为文件名,则必须包含 .dwg 扩展名和任何路径信息以便 AutoCAD 找到该文件。

  14. Xscale Double[双精度]; 为输入项X向的比例。默认值等于 1.0。必须为正数。

  15. Yscale Double[双精度]; 为输入项Y向的比例。默认值等于 1.0。必须为正数。

  16. Zscale Double[双精度]; 为输入项Z向的比例。默认值等于 1.0。必须为正数。

  17. Rotation Double[双精度]; 为输入项旋转角。默认值等于 0.0 弧度。

  18. Password   Variant[变体]; 为输入项;可选项

  19. RetVal

  20. BlockRef 对象   返回新创建的块参照对象。

  21. 说明

  22. 插入块到其它块中将创建嵌套的块。

  23. 试图带未初始化 Name 参数调用 InsertBlock 方法将产生意外结果。
复制代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 1 反对 0

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

 楼主| 发表于 2009-1-6 15:49:29 | 显示全部楼层
2 增加窗体,目前有 6 种窗体形式
Model Dialog   普通窗体,此时控制权在窗体上,不能在绘图区操作

Modeless Dialog 好像叫非模态对话框,鼠标可以在 CAD 内操作,对话框不消失,鼠标可以再次激化对话框

Contrl Bar 控制条,没用过

Options Tab   用过天正的就知道了,就是在 Options 中增加自己的设定

File Dialog  Windows 风格的文件选择对话框

Palette Autocad 面板

设计对话框,首先选择上面的一种窗体,然后调整大小,接着选择左边的控件在窗体上拉出控件并调整大小
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

 楼主| 发表于 2009-1-6 15:52:02 | 显示全部楼层
这是一个简单的插入图块程序设计过程,可以显示匿名块
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

 楼主| 发表于 2009-1-6 16:00:14 | 显示全部楼层
对话框设计好了,接下来的工作就是指定每个控件的“事件(Events)”,也就是控件的动作,比如选择变化、双击、右击、取消、拖动等等。

这里首先要对 窗体设置事件,然后对每个控件设计事件
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

 楼主| 发表于 2009-1-6 16:01:25 | 显示全部楼层
对控件设置 “事件”
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

 楼主| 发表于 2009-1-6 16:01:56 | 显示全部楼层
控件“事件”设置
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

 楼主| 发表于 2009-1-6 16:03:11 | 显示全部楼层
事件设置完成,对话框就设置好了,接下来的工作就是将各个“事件”的控制命令 复制到 lisp 文件中
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2009-1-6 16:10:04 | 显示全部楼层
有中文版的教程。感觉就是舒服。。。
ea费心了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

 楼主| 发表于 2009-1-6 16:13:42 | 显示全部楼层
最后把 文件保存为 lsp 文件, 文件 -〉另存为,将后缀改为 lsp
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2009-1-6 16:14:00 | 显示全部楼层
终于有odcl的教程了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

 楼主| 发表于 2009-1-6 16:14:43 | 显示全部楼层
这是保存后的 文件,后面要将这个表加入到 Lisp 文件,作为一个变量
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2009-1-6 16:32:53 | 显示全部楼层
不错,还未学会
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

 楼主| 发表于 2009-1-6 16:43:18 | 显示全部楼层
上面两项是基本的 Autolisp/Vlisp Lisp 内容,使用 OpenDCL 还要对 OpenDCL Runtime 加载,下面是 Stuido 的 Sample 中的代码,写的比较复杂



  1. (defun LoadRunTime ( / )
  2.     ;; Demand load the OpenDCL.##.ARX. This requires the OpenDCL Runtime or Studio to be installed on each PC first.
  3.     (cond
  4.       ( (= 'EXRXSUBR (type dcl_getversionex)) )
  5.       ( (= 2 (boole 1 (getvar "DEMANDLOAD") 2))
  6.         (command "OpenDCL")
  7.         (if (/= 'EXRXSUBR (type dcl_getversionex))
  8.           (progn
  9.             (alert "The OpenDCL Runtime module failed to load. Please repair the OpenDCL installation and try again.")
  10.             (exit)
  11.           )
  12.         )
  13.       )
  14.       ( (progn
  15.           (alert "The OpenDCL Runtime module cannot be loaded because demand loading is disabled.\nLoad the OpenDCL ARX file manually, or enable demand loading for commands by setting the DEMANDLOAD system variable to 2 or 3.\nSee the "ManualLoading.lsp" sample for a demonstration.")
  16.           (exit)
  17.         )
  18.       )
  19.     )
  20. )


  21. (defun LoadODCLProj (proj / fn)
  22.     ;; Call (dcl_PROJECT_LOAD with the <CONTROL>. No re-load, no ProjectAliasName
  23.     ;; Note that without the re-load flag the ODCL is only loaded once, each time (dcl_PROJECT_LOAD is called it tests first if the sProject is already loaded.
  24.     (cond
  25.       ;; Search the support paths for the .ODCL file & load it.
  26.        ( (if (setq fn (findfile proj))
  27.            (dcl_PROJECT_LOAD fn)
  28.        ))
  29.       ;; Load the .ODCL file from the default installed "Samples" folder.
  30.        ( (if
  31.            (or
  32.              (setq fn (vl-registry-read "HKEY_LOCAL_MACHINE\\SOFTWARE\\OpenDCL" "SamplesFolder")) ;_ 32-bit location
  33.              (setq fn (vl-registry-read "HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\OpenDCL" "SamplesFolder")) ;_ 64-bit location
  34.            )
  35.            (dcl_PROJECT_LOAD (strcat fn proj))
  36.        ))
  37.       ;; The project failed to load, so report or log the error exit now (or take corrective action and try again)
  38.       (T (alert (strcat """ proj "" failed to load, you may need to add it to an Acad support path for it to load correctly!"))
  39.         (EXIT)
  40.       )
  41.     )
  42. )


  43. (princ)

另外一个手动加载代码

  1. ;;; ManualLoading.lsp
  2. ;;; For OpenDCL Ver 4.0
  3. ;;; Edit kwb 20070225 GMT00:00:00
  4. ;;; Edit orw 20070518 GMT07:30:xx :: added 64 bit arx file selection
  5. ;;;                                       returns "OpenDCL.x64.17.ARX"
  6. ;;; Last Edit kwb as suggested by MichaelP 20070608 GMT00:30:xx
  7. ;;;                :: change location of dcl_GETVERSIONEX test.
  8. ;;

  9. ;; This code block loads the OpenDCL.##.arx files if not already loaded
  10. ;; Note, Loader will return T if loaded or nil otherwise.
  11. ;;
  12. ;; If the OpenDCL.##.arx is loaded at startup or demand loaded
  13. ;; this routine need never run.
  14. (OR dcl_GETVERSIONEX
  15.     (   (lambda ( / proc_arch arxname arxpath )

  16.             ;;  Determine the appropriate arx module for
  17.             ;;  the processor and the AutoCAD version.

  18.             (setq arxname
  19.                 (strcat "OpenDCL"
  20.                     (if
  21.                         (and
  22.                             (setq proc_arch (getenv "PROCESSOR_ARCHITECTURE"))
  23.                             (< 1 (strlen proc_arch))
  24.                             (eq "64" (substr proc_arch (1- (strlen proc_arch))))
  25.                         )
  26.                         ".x64."
  27.                         "."
  28.                     )
  29.                     (substr (getvar "acadver") 1 2)
  30.                     ".arx"
  31.                 )
  32.             )            
  33.             ;;  Alert the user of a failure to:
  34.             ;;
  35.             ;;      (A) Find the arxfile, or
  36.             ;;      (B) Load the arxfile.
  37.             ;;
  38.             ;;      and return nil.
  39.             ;;
  40.             ;;  Otherwise just quietly return t.
  41.             
  42.             (cond
  43.                 (   (null (setq arxpath (findfile arxname)))
  44.                     (alert (strcat "Couldn't find " arxname ".\nYou may need to add it to an Acad support path"))
  45.                 )
  46.                 (   (null (arxload arxpath 'nil))
  47.                     (alert (strcat "Failed to load " arxname "."))
  48.                 )
  49.                 (   t   )
  50.             )
  51.         )
  52.     )
  53. )

这些代码就是自动查找符合 CAD 版本的OpenDCL  ARX 并加载,看不懂没关系,下面我们进行简化
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

发表于 2009-1-6 16:50:38 | 显示全部楼层
顶!谁有中文版的HELP?贴一个
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-22 05:42 , Processed in 0.227336 second(s), 63 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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