请教关于VB与CAD之间数据交换的问题
各位兄台,这是俺的拜山贴,小弟这厢有理啦前来此地是有一事不明,最近在编程过程中遇到的。望能得到各位大侠的帮助。这段时间刚学了VB,boss要我编个程序,大体是要输入某个三维图形的外表参数,通过程序输出其内部各层参数。因为图形是带弧度的,编程算参数比较麻烦。所以我有个想法,就是将三维图形的外表参数输入改为CAD图输入,通过对CAD图操作,从图形中的某些元素的特性直接得到内部参数。
具体点说,想实现的是:在程序中打开CAD图后,用户选取图中某个元素,然后按下确定键,程序自动在CAD图上进行复制、移动、剪切等功能,完成后读出图形中某些元素的参数,反馈到VB进行参数计算。
现在问题就是不知用VB编出的程序能不能读CAD图并通过命令进行CAD操作。若是可以的话,我应该补充哪方面的知识。我看了一点VBA方面的东西,但好像它是把CAD作为平台,而我是想用VB编出个程序实现这些内容。
因为我对编程不是很专业,可能有些话不是太准确,各位多包涵。 完全可以实现,在VB中使用COM方式操作AutoCAD,但是前提是你必须了解AutoCAD VBA所提供的方法和属性等。 谢谢,不好意思,我现在只是学了VB的基本知识,大体上会编写VB,对于你说的com方式操作AUTOCAD很陌生,想请教一下关于这方面的有没有介绍的比较详细的资料或者书籍,能麻烦介绍一些吗. COM方式连接AutoCAD很简单,本站就可以找到相应的代码。
至于书籍,你到网上书店搜索VBA就能找到很多。
给你贴一个最简单的VB连接AutoCAD的实例吧。
呵呵,你给的程序我一时还有些看不懂,看来还是自己缺的太多,回去再研究研究.有了问题再及时向你请教,真是麻烦版主了,多谢 刚买了老大的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 楼上的,建议你多看点VB的书籍,会更有帮助的“On Error Resume Next ”是出错继续向下的意思,就是忽略错误,如果你的代码有错误,去掉这句当然要提示你了。至于后面的代码,还差的太多,在本网站上有关于VBA的文章,多看看,就会有所了解。多努力。 原本想把程序用VB直接编完拉倒,后来BOSS改变主意,要求把CAD的部分用VBA编,其它用VB编.于是又恶补了一阵VBA,大体上也有了个了解.但还是有些问题目前没法解决,请各位高手帮忙解答.
先说明一下,编的这个程序主要用于一种模型加工工艺.简单的说这种工艺就是实体的制作是一层一层粘起来的,根据实体的最外层尺寸,要用程序计算出里面每层的尺寸.由于实体中有不规则曲线,用程序计算比较麻烦,而且要求精度也不必过高,所以想到用CAD画出图后直接读取一些不好计算的数据.目前整个程序的设定过程为:
开始--->1.打开程序(VB语言),输入一些参数--->2.进入CAD,调用工程(VBA),画图,得到想要的数据---->3.关闭CAD,把参数返回到VB,进行剩余计算--->将最后计算结果用EXCEL表格给出--->结束(也希望能对这个过程提出宝贵意见)
目前很多问题集中在2,3两个阶段
问题1.上传的文件里,第二步(2)的修剪这一过程该怎么解决,有没有好的想法.我在<VBA开发指南>的书里看到好象没有直接的参数调用修剪指令,以前有个帖子上有个直线修剪的例子,但我这个修剪的对象是样条曲线,有点不知该怎么办了.
问题2.上图画完后,我想得到各个样条曲线的弧长.目前知道在CAD里用list命令显示的文本框里有弧长的数据,但不知VBA中有没有直接获取弧长的方法(最好是能得到最高点到样条曲线两端点的两个弧长),因为需要得到数据这一步用程序完成.
问题3.得到数据后,能不能将数据直接转到VB中使用,如果有的话,应该用哪些命令.没有的话,我应该用什么样的方法好些
呵呵,虽说和来这的前一个星期相比补充了不少东西,不过感觉基础还是比较差,若是能给出例子更好,给出一些相关的信息也是求之不得.先谢过 你大致可以这样:引导程序启动用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