明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4475|回复: 11

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

  [复制链接]
发表于 2004-11-5 22:15:00 | 显示全部楼层 |阅读模式
各位兄台,这是俺的拜山贴,小弟这厢有理啦


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


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


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


因为我对编程不是很专业,可能有些话不是太准确,各位多包涵。
发表于 2004-11-6 17:24:00 | 显示全部楼层
完全可以实现,在VB中使用COM方式操作AutoCAD,但是前提是你必须了解AutoCAD VBA所提供的方法和属性等。
 楼主| 发表于 2004-11-6 20:39:00 | 显示全部楼层
谢谢,不好意思,我现在只是学了VB的基本知识,大体上会编写VB,对于你说的com方式操作AUTOCAD很陌生,想请教一下关于这方面的有没有介绍的比较详细的资料或者书籍,能麻烦介绍一些吗.
发表于 2004-11-6 21:59:00 | 显示全部楼层
COM方式连接AutoCAD很简单,本站就可以找到相应的代码。


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


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


       

本帖子中包含更多资源

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

x
 楼主| 发表于 2004-11-7 15:46:00 | 显示全部楼层
呵呵,你给的程序我一时还有些看不懂,看来还是自己缺的太多,回去再研究研究.有了问题再及时向你请教,真是麻烦版主了,多谢
发表于 2004-11-9 11:54:00 | 显示全部楼层
刚买了老大的Atuocad VBA 开发精彩实例教程,有些问题。书中例子都与CAD2004有关,但我公司采用的都是CAD2002,可否通用。由于公司要求,我需要在VB下面编写一个小程序,主要通过VB打开CAD2002里相关的图纸 我写了下面的一段程序 Private Sub Command1_Click() '点击command1,运行程序
On Error Resume Next '不知道什么意思啊,好像去了会出错,请教
Dim acadapp As acadapplication
Set acadapp = GetObject("d:\a.dwg") '打开d盘下面的a图纸
ZoomAll
acadapp.Visible = True
End Sub
发表于 2004-11-9 12:18:00 | 显示全部楼层
楼上的,建议你多看点VB的书籍,会更有帮助的“On Error Resume Next                        ”是出错继续向下的意思,就是忽略错误,如果你的代码有错误,去掉这句当然要提示你了。至于后面的代码,还差的太多,在本网站上有关于VBA的文章,多看看,就会有所了解。多努力。
 楼主| 发表于 2004-11-15 23:01:00 | 显示全部楼层
原本想把程序用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中使用,如果有的话,应该用哪些命令.没有的话,我应该用什么样的方法好些


       

本帖子中包含更多资源

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

x
 楼主| 发表于 2004-11-15 23:07:00 | 显示全部楼层
呵呵,虽说和来这的前一个星期相比补充了不少东西,不过感觉基础还是比较差,若是能给出例子更好,给出一些相关的信息也是求之不得.先谢过
发表于 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)
;; required in AutoCAD 2000, not R14
(if (car (atoms-family 1 '("vl-load-com"))) (vl-load-com))
;; get the main AutoCAD application object
(setq acadApp (vlax-get-acad-object))
;; load VB ActiveX DLL into AutoCAD's address space (either line will work)
;;(setq vbApp (vlax-invoke acadApp "GetInterfaceObject" "MyProject.MyClass")
(setq vbApp (vla-GetInterfaceObject acadApp "MyProject.MyClass"))
(if (not vbApp)
(princ "\nError loading ActiveX DLL.")
(vlax-invoke vbApp "MyFn"
7 ; arg1, an integer
1.5 ; arg2, a 'double'
)
)
) 相对应的VB DLL中的接口函数为: Sub MyVBAProject()
Dim oMyApp as Object
dim vReturn as Variant
set oMyApp = ThisDrawing.Application.GetInterfaceObject( "MyProject.MyClass"
)
vReturn = oMyApp.MyFn(7,1.5)
End Sub 如果还有什么问题,可以与我联系,我做过这方面的程序。我的email:iceberg7512@163.com
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-28 00:39 , Processed in 0.203464 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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