明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 6608|回复: 11

cad二次开发的一些经验(大家跟帖谈)

    [复制链接]
发表于 2006-11-5 00:55 | 显示全部楼层 |阅读模式

1.如何在让VBA程序在命令行运行

 在命令行输入(COMMAND "VBARUN" "路径+文件名称+!+工程名称+模块名称+宏名称")

        如果宏已经加载可以只输入宏名称,(可以参照VBA命令帮助)

2.经常查看CAD帮助文件,即使只编写LISP程序建议也多看一下VBA的帮助,VBA的所有方法和属性都可以采用VLA-开头的函数实现,比如要想获得打印机列表(打印机介质列表、以及打印样式列表)就可以采用参照LAYOUT。GETPLOTDEVICENAMES的方法获得,相应的VLA函数为RET=VLA-GETPLOTDEVICENAMES(LAYOUT),但需要注意VLA函数返回的数组都是安全数组或者变体,需要用VLAX-VARIANT-VALUE和VLAX-SAFEARRAY->LISP函数来转变为列表以下为获得打印机列表的程序,

(defun c:test()
  (setq acad (vlax-get-acad-object);;;;;获得ACAD程序对象
           doc  (vla-get-activedocument acad);;获得当前活动文挡对象
           layout(vla-get-activelayout doc);;获得当前布局对象
          deviceName-var(vla-getPlotDeviceNames layout);;获得打印机列表的变体对象
          deviceName-safe(vlax-variant-value deviceName-var);;转换为安全数组 
         deviceName-list(vlax-safearray->list deviceName-safe);;转换为lisp的列表
  )
)

vla函数包括3类vla-函数,vla-get-函数,vla-put-函数,分别对应VBA的方法、获得属性、设置属性,

a。vla-get-函数对应VBA的属性,比如object.endpoint属性采用VLA转换为(vla-get-endpoint object),

b。VLA-函数对应VBA的方法,比如object.getboundingbox 转换为VLA函数为(vla-getboundingbox object),

c。vla-put函数对应设置对象属性,比如设置圆的圆心采用即更改circle.center属性转换为vla则为(vla-put-center circle pt_safearray)

d.使用一部分属性的获得和设置没有相应的vla函数,你可以采用(vlax-put-property object '属性名称 属性值)(vlax-get-property object '属性名称 )例如设置当前打印机采用(vlax-put-property layout 'deviceNames "打印机名称")

e,使用vla函数前别忘记运行(vl-load-com)函数啊!!!!!

3.VLAX函数和VL函数也很有用,没事的时候多查查,

评分

参与人数 1威望 +1 金钱 +10 贡献 +5 激情 +5 收起 理由
mccad + 1 + 10 + 5 + 5 【精华】好文章

查看全部评分

发表于 2006-11-15 20:37 | 显示全部楼层
顶回。
发表于 2006-11-16 14:50 | 显示全部楼层
我想用LISP开发一个 小程序 可以独立安装 的那种(对CAD菜单进行整合并增加一点土木专业的简单计算)!看完了  好几本 lisp书籍 可是现在依然 没有想法 !不知道该怎么办?
 楼主| 发表于 2006-11-16 23:20 | 显示全部楼层
去这里下载一个安装程序制作软件,不过自动加载的LSP程序需要自己编,好好看看帮助文件,也挺简单的,我用过挺好用的,http://bbs.mjtd.com/forum.php?mod=viewthread&tid=35156
 楼主| 发表于 2006-11-17 09:38 | 显示全部楼层

对象扩展数据的使用

本帖最后由 作者 于 2008-2-13 19:06:46 编辑

对象扩展数据的使用

.扩展数据可以使自己的图形带有更多的信息,而且不会与其他的一些别人开发的软件产生冲突.

 扩展数据设置  (vla-setxdata object Xtyp xdata)

扩展数据的获得(vla-getxdata object xtyp xdata)

由于扩展数据必须用ACTIVEX,必然需要许多变体和安全数组的问题,大家不要被饶进去出不来了啊。。。。我就饶了好久,不过如果你想要用AXTIVEX编程序就必须要弄明白,除非改用VBA 不过用VBA也有VBA的局限,我现在就在学VBA,

设置扩展数据时第一个数据XTYP的第一个数据必须是1001对应的XDATA第一个数据是设置这些扩展数据的程序名称(必须是字符串)

设置扩展数据的XDATA的类型必须满足DXF的要求,你可以去查看AUTOCAD帮助文件,下面我列举了一些,

1000

扩展数据中的 ASCII 字符串(最多可以包含 255 个字节)

1001 (扩展数据的第一个必须是1001,否则不能添加)

扩展数据的注册应用程序名(最多可以包含 31 个字节的 ASCII 字符串)

1002

扩展数据控制字符串(“{”或“}”)

1003

扩展数据图层名

1004

扩展数据中的字节数据块(最多可以包含 127 个字节)

1005

扩展数据中的图元句柄;最多可以包含 16 个十六进制数字的字符串

1010

扩展数据中的点
DXF:X 值(后跟 1020 和 1030 组)
APP:三维点

1020, 1030

DXF:点的 Y 值和 Z 值

1011

扩展数据中的三维世界空间位置
DXF:X 值(后跟 1021 和 1031 组)
APP:三维点

1021, 1031

DXF:世界空间位置的 Y 值和 Z 值

1012

扩展数据中的三维世界空间位移
DXF:X 值(后跟 1022 和 1032 组)
APP:三维矢量

1022, 1032

DXF:世界空间位移的 Y 值和 Z 值

1013

扩展数据中的三维空间方向
DXF:X 值(后跟 1022 和 1032 组)
APP:三维矢量

1023, 1033

DXF:世界空间方向的 Y 值和 Z 值

1040

扩展数据双精度浮点值

1041

扩展数据距离值

1042

扩展数据缩放比例

1070

扩展数据 16 位有符号整数

1071

扩展数据 32 位有符号长整数

DXF码是可以重复使用的,比方我要对一条直线设置5个字符串的扩展数据可以用5次1000码,读取XDATA码时,数据排列顺序和你设置的顺序相同
 楼主| 发表于 2006-11-17 09:42 | 显示全部楼层

获得扩展数据的程序,供大家参考

本帖子中包含更多资源

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

x
发表于 2006-11-17 11:40 | 显示全部楼层

扩展数据用傳統方法較簡單

(assoc -3 (entget (car (entsel)) '(APPNAME)))

再來一個SetXdata吧!


 

发表于 2006-11-17 23:41 | 显示全部楼层

有没有谁利用COM+Visual Lisp来对AutoCAD 进行开发的呢?COM是Windows 较为常用的一种开发方式,Visual Lisp提供了ActiveX的接口,可以直接调用注册到Windows系统中的COM。

COM中可以包装进特别复杂的界面,再由Visual Lisp进行调用,这样做有一个非常大的好处,没有版本的局限,具体说明如下:

1. COM注册到Windows系统中去;COM的编写可以用Visual Basic, Visual C++, Delphi, C++Builder各种各样的开发工具;尤其是快速开发工具,可以在短时间内开发功能强大的界面、数据库处理等等功能;

2. Visual Lisp的模块由Visual Lisp 编译为*.vlx文件,*.vlx文件与AutoCAD版本没有多大关系,2002以上版本没有变化;调用COM->得到相关的数据->绘图,非常顺的;

3. 通过以上的两种方式,就可避免了ARX应用程序需要针对每一个AutoCAD版本均需要重新编译;

 

 楼主| 发表于 2006-11-17 23:58 | 显示全部楼层

谢谢龙仔,我一直都没弄明白CAD帮助文档中的那个APPLIST是怎么回事,谢谢了哈哈,又被我学到了,我大多数都是看CAD文档学的.....好多不懂,希望大家多指教,

楼上的大虾 能告诉学COM+和VLISP编程需要从那里学起吗?我LISP用的比较多,VBA用的时间都不长呢,虽然看VBA帮助文档挺长时间了,能推荐几本好书最好了

 楼主| 发表于 2006-11-18 01:20 | 显示全部楼层

getxdata 函数

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2024-5-17 13:06 , Processed in 0.184385 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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