CAD二次开发讲座及工具
hvac_wh
hvac_wh Lv.7
2006年04月03日 16:02:54
只看楼主

AutoCAD二次开发语言及工具介绍AutoCAD荣登全球绘图软件的龙头宝座,主要是因为它具有开放的体系结构。它允许用户和开发者采用高级编程语言对其进行扩充和修改,即二次开发,能最大限度地满足用户的特殊要求。AutoCAD第一版于1982年11月由AutoDESK公司推出,目前大家广泛使用的是AutoCAD 2000或2002,最新版本是AutoCAD 2004,其二次开发语言及工具也在不断地涌现,本文做些介绍。

AutoCAD二次开发语言及工具介绍

AutoCAD荣登全球绘图软件的龙头宝座,主要是因为它具有开放的体系结构。它允许用户和开发者采用高级编程语言对其进行扩充和修改,即二次开发,能最大限度地满足用户的特殊要求。AutoCAD第一版于1982年11月由AutoDESK公司推出,目前大家广泛使用的是AutoCAD 2000或2002,最新版本是AutoCAD 2004,其二次开发语言及工具也在不断地涌现,本文做些介绍。

1 AutoLISP

AutoLISP的全名是LIST Processing Language,她出现于1985年推出的AutoCAD R2.18中,是一种嵌入在AutoCAD内部的编程语言,是LISP原版的一个子集,她一直是低版本AutoCAD的首选编程语言。它是一种表处理语言,是被解释执行的,任何一个语句键入后就能马上执行,它对于交互式的程序开发非常方便。其缺点是继承了LISP语言的编程规则而导致繁多的括号。

3 ADS

ADS的全名是AutoCAD Development System,它是AutoCAD的C语言开发系统,ADS本质上是一组可以用C语言编写AutoCAD应用程序的头文件和目标库,它直接利用用户熟悉的各种流行的C语言编译器,将应用程序编译成可执行的文件在AutoCAD环境下运行,这种可以在AutoCAD环境中直接运行的可执行文件叫做ADS应用程序。ADS由于其速度快,又采用结构化的编程体系,因而很适合于高强度的数据处理,如二次开发的机械设计CAD、工程分析CAD、建筑结构CAD、土木工程CAD、化学工程CAD、电气工程CAD等。

4 ObjectARX

ObjectARX是一种崭新的开发AutoCAD应用程序的工具,她以C++为编程语言,采用先进的面向对象的编程原理,提供可与AutoCAD直接交互的开发环境,能使用户方便快捷地开发出高效简洁的Auto CAD应用程序。ObjectARX并没有包含在AutoCAD中,可在AutoDESK公司网站中去下载,其最新版本是ObjectARX for AutoCAD 2000,它能够对AutoCAD的所有事务进行完整的、先进的、面向对象的设计与开发,并且开发的应用程序速度更快、集成度更高、稳定性更强。ObjectARX从本质上讲,是一种特定的C++编程环境,她包括一组动态链接库(DLL),这些库与AutoCAD在同一地址空间运行并能直接利用AutoCAD核心数据结构和代码,库中包含一组通用工具,使得二次开发者可以充分利用AutoCAD的开放结构,直接访问AutoCAD数据库结构、图形系统以及CAD几何造型核心,以便能在运行期间实时扩展AutoCAD的功能,创建能全面享受AutoCAD固有命令的新命令。ObjectARX的核心是两组关键的API,即AcDb(Auto CAD数据库)和AcEd(Auto CAD编译器),另外还有其它的一些重要库组件,如AcRX(Auto CAD实时扩展)、AcGi(Auto CAD图形接口)、AcGe(Auto CAD几何库)、ADSRX(Auto CAD开发系统实时扩展)。ObjectARX 还可以按需要加载应用程序;使用ObjectARX进行应用开发还可以在同一水平上与Windows系统集成,并与其它Windows应用程序实现交互操作。

5 VisualLISP

VisualLISP已经被完整地集成到AutoCAD 2000中,她为开发者提供了崭新的、增强的集成开发环境,一改过去在AutoCAD中内嵌AtuoLISP运行引擎的机制,这样开发者可以直接使用AutoCAD中的对象和反应器,进行更底层的开发。其特点为自身是AutoCAD 2000中默认的代码编辑工具;用它开发AutoLISP程序的时间被大大地缩短,原始代码能被保密,以防盗版和被更改;能帮助大家使用ActiveX对象及其事件;使用了流行的有色代码编辑器和完善的调试工具,使大家很容易创建和分析LISP程序的运行情况。在VisualLISP中新增了一些函数:如基于AutoLISP的ActiveX/COM自动化操作接口;用于执行基于Auto CAD内部事件的LISP程序的对象反应器;新增了能够对操作系统文件进行操作的函数。

6 VBA

VBA 即Mcrosoft office中的Visual Basic for Applications,它被集成到AutoCAD 2000中。VBA为开发者提供了一种新的选择,也为用户访问AutoCAD 2000中丰富的技术框架打开一条新的通道。VBA和AutoCAD 2000中强大的ActiveX自动化对象模型的结合,代表了一种新型的定制AutoCAD的模式构架。通过VBA,我们可以操作AutoCAD,控制ActiveX和其它一些应用程序,使之相互之间发生互易活动。
免费打赏
hvac_wh
2006年04月03日 17:06:51
12楼
开发工具10
用ObjectARX开发AutoCAD 2000应用程序
回复
hvac_wh
2006年04月03日 17:11:54
13楼
开发工具11
ARX函数-vlisp函数
回复
hvac_wh
2006年04月03日 17:20:30
14楼
开发工具12
用ObjectARX开发AutoCAD 2000应用程序
本网站有下载,此处不提供下载
回复
hvac_wh
2006年04月03日 17:21:23
15楼
开发工具13
AutoCAD 2002 DXF 参考
回复
hvac_wh
2006年04月03日 17:23:38
16楼
开发工具14
幻灯片、剖面线浏览工具
回复
hvac_wh
2006年04月03日 17:24:43
17楼
开发工具15
字库浏览工具
回复
hvac_wh
2006年04月03日 17:26:30
18楼
开发工具16
字库反编译程序
回复
hvac_wh
2006年04月03日 17:36:48
19楼
第二讲分解autocad幻灯库
autocad是目前应用最为广泛的一种计算机辅助设计软件,随着autocadr14的推出,它的功能也变得越来越强大,幻灯片功能就是其强大功能之一。为了管理好大量杂乱无章的幻灯片,我们可以用autocad提供的sldlib命令将众多的幻灯片作为一个slb幻灯库文件。这在设计autocad的图标式菜单时尤其重要,同时也可以节省硬盘的存储空间。但是,除非我们保留了所有的幻灯片,否则当我们想要往幻灯库里加入一些新的幻灯片或抽取一部分幻灯片时,就产生了问题,因为sldlib命令需要输入加进幻灯库的所有幻灯片文件,而且不具备相反的功能。

  重新制作所有的幻灯片显然不可取,而autocad又没有提供将幻灯库文件转换为幻灯片文件的功能,所以我们只有分析幻灯库文件的结构,作出相应的转换程序。经过对幻灯库文件的分析,发现其结构如下:

  相对偏移地址字节数内容
  0032文件头
  32~36*n+3236*n目录区(n为幻灯片总个数)
  36*n+32~内容区
  文件的开头为幻灯库文件的标识,共有32个字节,内容为“autocadslidelibrary1.0ι015ι012ι032ι00ι00ι00ι00”。然后是幻灯片的目录区,每个幻灯片为一个目录项,每个目录项占36个字节,其中前面32个字节为幻灯片的文件名(unix系统中幻灯片文件名为32个字符),后4个字节为此幻灯片在幻灯库文件中的地址偏移量。目录区共有36*n个字节。目录区的后面是内容区,在内容区中,每个幻灯片按照在目录区中的排列顺序将自身原封不动地复制进来。
  清楚了幻灯库文件的结构后,我们就可以作出以下的转换程序,将幻灯库文件中的所有幻灯片文件分解出来。程序以autocad提供的acad.slb为例,说明了整个转换过程。
  另外,市场上许多autocad幻灯片都是以幻灯库的形式发放,也可籍此转换程序将其中的幻灯片分解出来,供自己所用。

  //slbsld.cpp分解autocad幻灯库中的幻灯片文件
  #includeΙstdio.hΛ
  #includeΙio.hΛ
  #includeΙconio.hΛ
  #includeΙstdlib.hΛ
  #includeΙstring.hΛ
  #defineslbhead“autocadslidelibrary1.0ι015ι012ι032ι00ι00ι00ι00”
  #definemax200

  //预设一个幻灯片总数的最大值

  structslb{
  unsignedcharname[36];
  unsignedlongaddress;
  unsignedlonglength;
  }sld[max];
  voidmain(){
  registerinti,j,sum;
  char*id;
  charch;
  file*slbfile,*sldfile;
  unsignedlongfilesize;
  if((slbfileΚfopen(″acad.slb″,″rb″))ΚΚnull){
  putch(7);
  printf(″cann'topenslbfile!ιn″);
  exit(1);
  }
  fread(id,32,1,slbfile);
  if(strcmp(id,slbhead)!Κ0)
  {//判断是否autocad幻灯库文件
  putch(7);
  printf(″thisfileisnotanautocadslbfile!ιn″);
  fclose(slbfile);
  exit(1);
  }
  fread(sld[0].name,32,1,slbfile);
  fread(&sld[0].address,4,1,slbfile);
  sumΚ(sld[0].address-32)/36-1;
  //计算幻灯片总数。如果sumΛmax,可将max加大。
  filesizeΚfilelength(fileno(slbfile));
  //计算幻灯库文件的大小
  for(iΚ1;iΙsum;i++){
  fread(sld[i].name,32,1,slbfile);
  fread(&sld[i].address,4,1,slbfile);
  sld[i-1].lengthΚsld[i].address-sld[i-1].address;
  //计算每一个幻灯片的大小
  }
  sld[sum-1].lengthΚfilesize-sld[sum-1].address;
  for(iΚ0;iΙsum;i++){
  strcat(sld[i].name,″.sld″);
  if((sldfileΚfopen(sld[i].name,″wb″))ΚΚnull){
  putch(7);
  fclose(slbfile);
  printf(″can'tcreatsldfile!ιn″);

  exit(1);
  }
  for(jΚ0;jΙsld[i].length;j++){
  chΚfgetc(slbfile);
  fputc(ch,sldfile);
  }
  fclose(sldfile);
  }
  fclose(slbfile);
  }
回复
hvac_wh
2006年04月03日 17:38:48
20楼
第三讲 如何在R14下改变中西文的比例
原来的AutoCAD R12中文版的hztxt.shx写中文时,就会发现中西文的比例不协调,在同一字高下,西文比汉字大一号,非常难看。而AutoCAD R14并不提供改变中西文比例的命令,笔者经过摸索,找到一种改变中西文比例的方法。
  在AutoCAD中,扩展名为.shx、.shp的字体是一种用矢量描述的形文件。在描述矢量的命令集中有两个命令专用码可用来改变矢量的高度,它们是:
  003——用下一个字节除矢量长度。
  004——用下一个字节乘矢量长度。
  下面以最常用的单线字体txt.shp(可在AutoCAD R12的souse子目录下找到)中的西文“A”为例来说明如何改变西文的高度。
  在西文字体文件(注意:不是大字体文件)中,每个字符的定义行必须是下列格式:
  *shapenumber,defbytes,shapename
  其中:shapenumber ——字符的编号。
     defbytes ——定义字符所用的字节数。
     Shapename ——字符的名字。
  在txt.shp中,大写字母“A”的定义如下:
  *65,21,uca
  2,14,8,(-2,-6),1,024,043,04D,02C,2,047,1,040,2,02E,14,8,(-4,-3),0
  假定西文缩小到原来的4/5时,中西文的比例就比较协调了。由于在字形文件中不允许出现小数或分数,因此,4/5就得分解为乘4除以5。这样只须在字母“A”的矢量定义的前面加上004,4,003,5就可实现缩小1/4了。但是,必须注意到,AutoCAD并不会在写完字符“A”以后,自动把比例因子0.8(4/5)改回到1,那么“A”以后的所有字符(包括汉字)都将是原来的4/5了,这当然不是我们的本意,为此,应在缩小1/4后,再扩大到原来的1.25倍(除以4/5),即在矢量定义的末尾添上004,5,003,4(乘5除以4)。同时,因为增加了8个字节,字节数21应变为29。这样,一个完整的完成字母“A”缩小1/4的矢量描述为:
  *65,29,uca
  004,4,003,5,2,14,8,(-2,-6),1,024,043,04D,02C,2,047,1,040,2,02E,14,8,(-4,-3),004,5,003,4,0
  将常用的26个字母的大小写及10个阿拉伯数字按上述办法改写一道,即可满足工程绘图需要了。如果将上述方法编成一个小程序,就可随心所欲地改变中西文的比例。最后,将txt.shp编译成txt.shx就可以直接使用txt.shx字体了。

本人从事CAD开发研究多年,对现有字库进行改造,利用附件提供的字库,能很好地满足工程设计的需要。基本上做到了中、西文比例协调,对于结构一些特殊的字库,如钢筋等的输入,标点符号,上标下标都能很好地显示。已经在几个大的设计院使用。使用方法:在命令项中将字库中文定义为HZTXT.SHX,西文为txt.shx
附件:字库
回复
xuxiangbi
2006年04月30日 15:07:35
21楼
OBJECTARX

不能用啊
回复

相关推荐

APP内打开