乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 171|回复: 9

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

[复制链接]

11

主题

28

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
72
发表于 2004-11-5 22:15:00 | 显示全部楼层 |阅读模式
各位兄台,这是俺的拜山贴,小弟这厢有理啦
前来此地是有一事不明,最近在编程过程中遇到的。望能得到各位大侠的帮助。这段时间刚学了VB,boss要我编个程序,大体是要输入某个三维图形的外表参数,通过程序输出其内部各层参数。因为图形是带弧度的,编程算参数比较麻烦。所以我有个想法,就是将三维图形的外表参数输入改为CAD图输入,通过对CAD图操作,从图形中的某些元素的特性直接得到内部参数。
具体点说,想实现的是:在程序中打开CAD图后,用户选取图中某个元素,然后按下确定键,程序自动在CAD图上进行复制、移动、剪切等功能,完成后读出图形中某些元素的参数,反馈到VB进行参数计算。
现在问题就是不知用VB编出的程序能不能读CAD图并通过命令进行CAD操作。若是可以的话,我应该补充哪方面的知识。我看了一点VBA方面的东西,但好像它是把CAD作为平台,而我是想用VB编出个程序实现这些内容。
因为我对编程不是很专业,可能有些话不是太准确,各位多包涵。
回复

使用道具 举报

34

主题

372

帖子

7

银币

中流砥柱

Rank: 25

铜币
508
发表于 2004-11-6 17:24:00 | 显示全部楼层
完全可以实现,在VB中使用COM方式操作AutoCAD,但是前提是你必须了解AutoCAD VBA所提供的方法和属性等。
回复

使用道具 举报

11

主题

28

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
72
发表于 2004-11-6 20:39:00 | 显示全部楼层
谢谢,不好意思,我现在只是学了VB的基本知识,大体上会编写VB,对于你说的com方式操作AUTOCAD很陌生,想请教一下关于这方面的有没有介绍的比较详细的资料或者书籍,能麻烦介绍一些吗.
回复

使用道具 举报

34

主题

372

帖子

7

银币

中流砥柱

Rank: 25

铜币
508
发表于 2004-11-6 21:59:00 | 显示全部楼层
COM方式连接AutoCAD很简单,本站就可以找到相应的代码。
至于书籍,你到网上书店搜索VBA就能找到很多。
给你贴一个最简单的VB连接AutoCAD的实例吧。
        
请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:wvbi0i3bmon.rar 
下载次数:0  文件大小:2.24 KB  售价:2银币 [记录]
下载权限: 不限 以上或 Vip会员   [开通Vip]   [签到领银币]  [免费赚银币]

回复

使用道具 举报

11

主题

28

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
72
发表于 2004-11-7 15:46:00 | 显示全部楼层
呵呵,你给的程序我一时还有些看不懂,看来还是自己缺的太多,回去再研究研究.有了问题再及时向你请教,真是麻烦版主了,多谢
回复

使用道具 举报

0

主题

2

帖子

1

银币

初来乍到

Rank: 1

铜币
2
发表于 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
回复

使用道具 举报

12

主题

38

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
86
发表于 2004-11-9 12:18:00 | 显示全部楼层
楼上的,建议你多看点VB的书籍,会更有帮助的“On Error Resume Next                        ”是出错继续向下的意思,就是忽略错误,如果你的代码有错误,去掉这句当然要提示你了。至于后面的代码,还差的太多,在本网站上有关于VBA的文章,多看看,就会有所了解。多努力。
回复

使用道具 举报

11

主题

28

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
72
发表于 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)的修剪这一过程该怎么解决,有没有好的想法.我在的书里看到好象没有直接的参数调用修剪指令,以前有个帖子上有个直线修剪的例子,但我这个修剪的对象是样条曲线,有点不知该怎么办了.
问题2.上图画完后,我想得到各个样条曲线的弧长.目前知道在CAD里用list命令显示的文本框里有弧长的数据,但不知VBA中有没有直接获取弧长的方法(最好是能得到最高点到样条曲线两端点的两个弧长),因为需要得到数据这一步用程序完成.
问题3.得到数据后,能不能将数据直接转到VB中使用,如果有的话,应该用哪些命令.没有的话,我应该用什么样的方法好些
        
请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:n1flocejk2c.rar 
下载次数:0  文件大小:11.01 KB  售价:2银币 [记录]
下载权限: 不限 以上或 Vip会员   [开通Vip]   [签到领银币]  [免费赚银币]

回复

使用道具 举报

11

主题

28

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
72
发表于 2004-11-15 23:07:00 | 显示全部楼层
呵呵,虽说和来这的前一个星期相比补充了不少东西,不过感觉基础还是比较差,若是能给出例子更好,给出一些相关的信息也是求之不得.先谢过
回复

使用道具 举报

16

主题

84

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
148
发表于 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
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-16 15:03 , Processed in 0.519829 second(s), 78 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表