VB在ACADWIN中的使用

skxlkm

skxlkm

2016-02-19 16:31

只要你有一台电脑或者手机,都能关注图老师为大家精心推荐的VB在ACADWIN中的使用,手机电脑控们准备好了吗?一起看过来吧!
AutoCAD是一个常用工业绘图平台,用户在使用时经常要用Lisp或ADS进行二次开发,但Lisp处理数据库能力差,编制界面困难,而ADS要求较高.相比之下,VisualBasic(以下简称VB)编写独立程序的速度快,编制界面容易,可进行快速计算,可操作数据库。ACADWIN是AUTOCAD的Windows版程序,具有WINDOWS的许多特点。可以利用DDE进行VB与ACADWIN之间的通讯,实现AutoCAD编程。
  
  VB在ACADWIN的应用文件
  因为ACADWINR12不支持如PastLink的直接DDE方法,所以要有一个控件与VB相联系,以进行数据传递。这里主要用到以下几个文件:
  1):DDEBAS.EXE这是VB/DDE服务器程序,必须在运行VB应用程序前调入,在命令行下键入:(XLOAD“DDEBAS”)。
  2):ACADVB.DLL,VB应用程序的动态连接库。
  3):GLOBAL.BAS,VB应用程序的全程变量的定义文件。
  4):ADSFUNCS.BAS,VB应用程序对ADS库标准函数的调用。
  5):ADSFUNCS.FRM,标准ACADWIN的初始VB窗口。
  6):NEW.FRM,用于新建标准初始VB窗口。
  
  后4个文件在ACADWIN/VB/NEW目录下,编程时只要打开NEWPROJ.MAK就都有了,但NEW.FRM可以不要,只要把启动文件定为ADSFUNC.FRM即可。
  
  VB在ACADWIN的使用方法
  为了实现DDE通讯,先要在ADSFUNCS.FRM中增加一个用于通讯的TEXT(文本框)控件,并在特性表中将其NAME命名为ACADTEXT,TEXT的CAPTION置为空串(减少窗体不必要的信息),VISIBLE特性呈为TURE。用linkapp函数初始化并关闭连接。
  过程linkapp代码如下:
  
  sublinkapp(linkascontonl,appnameasstring,topicasstring)
  link.linkmode=0'关闭通讯
  link.linktopic=appname “|” topic'置通讯主题
  link.linkmode=2'手工通讯
  endsub
  增加一个过程unlinkapp,其代码如下:
  subunlinkapp(linkascontonl)
  link.linkmode=0'关闭通讯
  endsub
  在窗体事件中,增加如下代码:
  subform_load()
  LINKAPPACADTEXT,“AUTOCAD.DDE”,“SYSTEM”
  endsub
  subform_unload(cancelasinteger)
  UNLINKAPPACADTEXT
  endsub
  
  如画圆“CIRCLE”,先在ADSFUNC.FRM中增加一个命令钮COMMAND1,将其CAPTION置为“C
  IRCLE”,在子过程中增加以下代码:
  SUBCOMMAND1_CLICK()
  ACADTEXT.LINKEXECUTE“[^3^3CIRCLE]”
  ENDSUB
  
  至此可以实现绘图命令。如果要实现复杂的功能,如捕捉特征点,获得特性,参数化绘图,等能否让完成界面及计算功能,把参数传给一个Lisp程序,然后再将程序调入环境中完成绘图呢?答案是肯定的这就要用到“SendKey"语句。该语句功能是向具有焦点的窗口发送字符,就象从键盘中键入一样。这时先用函数FindACAD()找到ACADWIN的句柄,再用AcadACTIVE函授激活ACADWIN,使其具有焦点,这时就可以用SendKey了。
  
  如有一个Lisp程序YZ.LSP,主函数为“C:YZ()”,可先在ADSFUNC.FRM中增加一个命令钮COMMAND2,将其CAPTION置为“YZ”,在子过程中增加以下代码:
  
  SUBCOMMAND2_CLICK()
  hwndAcad=FindAcad()
  AcadActivate(hwndAcad)
  SendKeys“{(}load ‘yz '{)}”,-1
  SendKeys“{enter}”,-1
  SendKeys“yz”,-1
  ENDSUB
  
  以上方法可以实现通过VB的界面选取参数,进行计算;用Lisp进行绘图。有两个问题值得注意:一:如要进行参数的传递,可以先用VB写临时数据文件,再用Lisp读此临时数据文件。二:因为与窗体布置不一定使ACADWIN和VB应用程序两者同时可见,Lisp程序执行完毕,不能自动返回到VB应用程序,这时可以通过调用WindowsAPI函数SetWindowPos来使应用程序总浮在最上面,避免了来回切换窗口。这种技术的实现在本报已有介绍.
  
  在ADSFUNCS.BAS中也定义了很多ADS函数可供调用。如ACADWINVBASVU中有一个例子ASVU.EXE,就是应用Ads_getvar及Ads_setvar函数,在SYSVARS.MAK的intervai.bas可以看到。但DDE的链接方式要改变,在启动窗体或函授中加上:
  
  DDE_TIMEOUT=-1'等待一个DDE事件
  openDDE'ADSFUNCS.BAS中一个函数,初始化DDE链接->

展开更多 50%)
分享

猜你喜欢

VB在ACADWIN中的使用

编程语言 网络编程
VB在ACADWIN中的使用

在VB中如何使用ping命令

编程语言 网络编程
在VB中如何使用ping命令

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

教你在VB中如何使用注册表

编程语言 网络编程
教你在VB中如何使用注册表

在VB应用程序中恰当的使用声音

编程语言 网络编程
在VB应用程序中恰当的使用声音

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

在VB中“遥控”鼠标

编程语言 网络编程
在VB中“遥控”鼠标

在VB中使用UDP协议

编程语言 网络编程
在VB中使用UDP协议

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

如何去除Win10任务栏通知区域的操作中心图标

如何去除Win10任务栏通知区域的操作中心图标

jsp中生成图片缩略图的代码

jsp中生成图片缩略图的代码
下拉加载更多内容 ↓