triper 发表于 2004-11-5 22:15:00

请教关于VB与CAD之间数据交换的问题

各位兄台,这是俺的拜山贴,小弟这厢有理啦


前来此地是有一事不明,最近在编程过程中遇到的。望能得到各位大侠的帮助。这段时间刚学了VB,boss要我编个程序,大体是要输入某个三维图形的外表参数,通过程序输出其内部各层参数。因为图形是带弧度的,编程算参数比较麻烦。所以我有个想法,就是将三维图形的外表参数输入改为CAD图输入,通过对CAD图操作,从图形中的某些元素的特性直接得到内部参数。


具体点说,想实现的是:在程序中打开CAD图后,用户选取图中某个元素,然后按下确定键,程序自动在CAD图上进行复制、移动、剪切等功能,完成后读出图形中某些元素的参数,反馈到VB进行参数计算。


现在问题就是不知用VB编出的程序能不能读CAD图并通过命令进行CAD操作。若是可以的话,我应该补充哪方面的知识。我看了一点VBA方面的东西,但好像它是把CAD作为平台,而我是想用VB编出个程序实现这些内容。


因为我对编程不是很专业,可能有些话不是太准确,各位多包涵。

zfbj 发表于 2004-11-6 17:24:00

完全可以实现,在VB中使用COM方式操作AutoCAD,但是前提是你必须了解AutoCAD VBA所提供的方法和属性等。

triper 发表于 2004-11-6 20:39:00

谢谢,不好意思,我现在只是学了VB的基本知识,大体上会编写VB,对于你说的com方式操作AUTOCAD很陌生,想请教一下关于这方面的有没有介绍的比较详细的资料或者书籍,能麻烦介绍一些吗.

zfbj 发表于 2004-11-6 21:59:00

COM方式连接AutoCAD很简单,本站就可以找到相应的代码。


至于书籍,你到网上书店搜索VBA就能找到很多。


给你贴一个最简单的VB连接AutoCAD的实例吧。


       

triper 发表于 2004-11-7 15:46:00

呵呵,你给的程序我一时还有些看不懂,看来还是自己缺的太多,回去再研究研究.有了问题再及时向你请教,真是麻烦版主了,多谢

yfji8373 发表于 2004-11-9 11:54:00

刚买了老大的Atuocad VBA 开发精彩实例教程,有些问题。书中例子都与CAD2004有关,但我公司采用的都是CAD2002,可否通用。由于公司要求,我需要在VB下面编写一个小程序,主要通过VB打开CAD2002里相关的图纸


我写了下面的一段程序


Private Sub Command1_Click()                                                                                                                       '点击command1,运行程序<BR>On Error Resume Next                                                                                                                                                                                                                               '不知道什么意思啊,好像去了会出错,请教<BR>Dim acadapp As acadapplication<BR>Set acadapp = GetObject("d:\a.dwg")                                       '打开d盘下面的a图纸<BR>ZoomAll<BR>acadapp.Visible = True<BR>End Sub

tjdxtm 发表于 2004-11-9 12:18:00

楼上的,建议你多看点VB的书籍,会更有帮助的“On Error Resume Next                        ”是出错继续向下的意思,就是忽略错误,如果你的代码有错误,去掉这句当然要提示你了。至于后面的代码,还差的太多,在本网站上有关于VBA的文章,多看看,就会有所了解。多努力。

triper 发表于 2004-11-15 23:01:00

原本想把程序用VB直接编完拉倒,后来BOSS改变主意,要求把CAD的部分用VBA编,其它用VB编.于是又恶补了一阵VBA,大体上也有了个了解.但还是有些问题目前没法解决,请各位高手帮忙解答.


先说明一下,编的这个程序主要用于一种模型加工工艺.简单的说这种工艺就是实体的制作是一层一层粘起来的,根据实体的最外层尺寸,要用程序计算出里面每层的尺寸.由于实体中有不规则曲线,用程序计算比较麻烦,而且要求精度也不必过高,所以想到用CAD画出图后直接读取一些不好计算的数据.目前整个程序的设定过程为:


开始---&gt;1.打开程序(VB语言),输入一些参数---&gt;2.进入CAD,调用工程(VBA),画图,得到想要的数据----&gt;3.关闭CAD,把参数返回到VB,进行剩余计算---&gt;将最后计算结果用EXCEL表格给出---&gt;结束(也希望能对这个过程提出宝贵意见)


目前很多问题集中在2,3两个阶段


问题1.上传的文件里,第二步(2)的修剪这一过程该怎么解决,有没有好的想法.我在&lt;VBA开发指南&gt;的书里看到好象没有直接的参数调用修剪指令,以前有个帖子上有个直线修剪的例子,但我这个修剪的对象是样条曲线,有点不知该怎么办了.


问题2.上图画完后,我想得到各个样条曲线的弧长.目前知道在CAD里用list命令显示的文本框里有弧长的数据,但不知VBA中有没有直接获取弧长的方法(最好是能得到最高点到样条曲线两端点的两个弧长),因为需要得到数据这一步用程序完成.


问题3.得到数据后,能不能将数据直接转到VB中使用,如果有的话,应该用哪些命令.没有的话,我应该用什么样的方法好些


       

triper 发表于 2004-11-15 23:07:00

呵呵,虽说和来这的前一个星期相比补充了不少东西,不过感觉基础还是比较差,若是能给出例子更好,给出一些相关的信息也是求之不得.先谢过

iceberg2509 发表于 2004-11-17 00:17:00

你大致可以这样:引导程序启动用Vlisp,然后调用VB ActiveX DLL,输入参数后,用varaint类型变量返回给vlisp,再用vlisp读取图形数据,再把数据返回给VB ActiveX DLL作处理,最后输出数据至excel,因为vb操纵excel是很简单的事情。以下是个vlisp如何调用vb ActiveX DLL的例子:


;;=================Vlisp与VB ActiveX DLL接口函数


(defun showDialog (/ acadApp vbApp retVal retList) <BR>        ;; required in AutoCAD 2000, not R14 <BR>        (if (car (atoms-family 1 '("vl-load-com"))) (vl-load-com)) <BR>        ;; get the main AutoCAD application object <BR>        (setq acadApp (vlax-get-acad-object)) <BR>        ;; load VB ActiveX DLL into AutoCAD's address space (either line will work) <BR>        ;;(setq vbApp (vlax-invoke acadApp "GetInterfaceObject" "MyProject.MyClass") <BR>        (setq vbApp (vla-GetInterfaceObject acadApp "MyProject.MyClass")) <BR>        (if (not vbApp) <BR>               (princ "\nError loading ActiveX DLL.") <BR>               (vlax-invoke vbApp "MyFn" <BR>                                                                                                                                                                               7                                                       ; arg1, an integer <BR>                                                                                                                                                                               1.5                                       ; arg2, a 'double' <BR>               ) <BR>        ) <BR>)


相对应的VB DLL中的接口函数为:


Sub MyVBAProject() <BR>Dim oMyApp as Object <BR>dim vReturn as Variant <BR>set oMyApp = ThisDrawing.Application.GetInterfaceObject( "MyProject.MyClass" <BR>) <BR>vReturn = oMyApp.MyFn(7,1.5) <BR>End Sub


如果还有什么问题,可以与我联系,我做过这方面的程序。我的email:iceberg7512@163.com
页: [1] 2
查看完整版本: 请教关于VB与CAD之间数据交换的问题