找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 606|回复: 1

[转贴]:CAD中若干接口问题的研究

[复制链接]
发表于 2003-2-9 18:12:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
一、概述

  一个功能完善的CAD系统可能包括很多独立的模块,如设计计算、图形处理、数据管理、校核计算、有限元分析、设计优化、数控代码输出等。一些现成的软件系统往往只是针对某一类问题而设计的,如图形软件(AntoCAD等)有很强的图形生成和编辑能力,有限元分析系统(如 ANSYS等)擅长有限元分析计算,数据库管理系统(如dBASE等)适合于建立和管理数据库,我们可以利用这些现成的资源,作为二次开发的某些功能模块,使这些不同的系统间的数据相互交换,是实现大CAD系统或CAD/CAM集成的基础性课题之一。
  所谓数据转换接口,实际上是一种能够实现两个以上系统间信息交换的程序或方法。数据转换接口的核心内容就是由其中一个系统(文件)读出信息,将信息写入另一个系统(文件)。

  二、Windows系统提供的数据交换工具

  在介绍这些CAD系统之间的接口之前,让我们先来看一下Windows系统提供的数据交换工具:剪贴板、OLE技术等。Windows应用程序具有复制、粘贴等功能,这是由应用程序所提供、Windows系统所支持的一种静态数据交换工具。由于剪贴板支持多种数据格式,许多不同的应用程序可以用其交换不同格式的数据,利用剪贴板工具,可以完成CAD中复合文档的大部分工作,我们知道,CAD中的复合文档内容包含多种格式,除文本外,往往还包含有图形、表格等,利用不同的软件系统完成不同格式的内容,再通过剪贴板工具将不同格式的内容组合成一体。作为数据交换的中介——剪贴板只是内存当中的一块区域,因此,在任一时刻,剪贴板中只能保存至多一个数据块,旧的数据总是不断的被新的数据所覆盖。
  Windows中提供的另外一个数据交换工具OLE(对象的链接与嵌入)技术。它使主应用程序与被链接的对象之间建立一种通信关系,主应用程序不必知道有关对象的更多细节,但却可以在自己内部通过与对象关联的应用程序建立联系,从而操纵被链接的对象。当然,这样的应用程序本身必须支持OLE技术。值得重点指出的是对象链接与嵌入之间的区别,链接一个对象到主应用程序中,只是在主应用程序中建立了一个指向对象原始数据的指针,并在主应用程序中形成一个内容映射,对象原始数据本身并没真正存到主应用程序中,这样,主应用程序完成后,占用空间较少。但嵌入对象是将对象本身内容加人主应用程序,并且附加了有关加载对象的信息,因而生成的文件往往较大,占用空间较多。另外还须注意的是:链接的对象在主应用程序中被修改后,对象的原始数据也会随之改动,同样,对象原始文件的修改也会引起被链接对象的改动,但嵌入对象和原始数据之间却是相互孤立的,二者的修改相互都不影响。
  Windows中提供的以上数据交换工具是通用的,不仅适用于CAD系统,其它Windows环境下的软件系统之间也是适用的。

  三、CAD系统之间信息交换标准

  作为预备知识,让我们先来看一下不同CAD系统之间的信息交换标准。
  IGES:是美国国家标准局和工业界共同制定的,它以产品设计图样为直接处理对象,规定了图样数据交换文件的格式规范。现有的不同公司开发的CAD软件,其内部图样数据贮存各不相同,但都可以遵循IGES标准的规定,将其内部图样数据库的数据转换为符合IGES标准的数据文件输出,也可以接受IGES格式的数据文件输入。这样,经过IGES格式数据文件的中介作用,就可以实现在不同CAD系统之间交换设计图样信息。
  这个标准不仅对图形而且对产品设计和制造中的定义数据规定了统一标准格式,它是独立于具体系统的。采用IGES标准文件将系统A中的信息传送到系统B中时,要先将系统A中的信息转换成IGES标准描述,然后再将IGES标准数据文件转换为系统B中的数据文件。
  IGES本身只是描述产品设计和制造信息的数据文件格式规范。它把对产品的定义或工程图样视作许多单元的集合。在IGES中,单元分为三大类:几何单元、标识单元和结构单元。属于几何单元的如定义产品形状的直线、圆及表面等;属于标识单元的如尺寸标注、标题栏等;属于结构单元的如子图形的形成,属性的定义等。
  由于以下介绍的接口不以IGES文件为中性文件,故在此对IGES文件结构不作深入讨论,感兴趣的读者可参阅相关书籍。
  DXF:DXF文件本来只是微机CAD软件AutoCAD用以将内部图样信息传递到外部的数据文件,不是由标准化机构制订的标准。但是,由于AutoCAD软件的流行,因而DXF文件也就成为事实上中性文件的一种类型。DXF文件是可读的,比IGES文件更简单易懂,但是DXF文件格式能定义表达的内容不如IGES丰富,DXF文件是一种ASC II码文本文件,其总体结构分为如下五个段:
  1.标题段 有关图形的总体信息。如系统当前设置状态参数等。
  2.表段 包括以下各项目的定义:线型表;图层表;字体表;视图表。
  3.图块段 包括定义图块实体的描述。
  4.实体段 图中各实体图表的具体描述。该段是DXF文件的核心部分。
  5.文件结束标志EOF。
  DXF文件的基本单位是组,每个组在DXF文件占二行,其首行是组码,第二行是组值。组码除用以表明组值数据类型外,还标明了该组的用途。组码和该组用途的关系是:
  组码  组的用途
  0   标识图素实体、表项或文件头的开始,后随的文字标明具体对象
  1   图素实体的文字说明
  2   名称、属性、特征、图块名等
  3~5  其它文字或名称
  6   线型名
  7   实体名
  8   图层名
  9   变量名标识符(仅用于标题段)
  10  主X坐标(直线或文字起点、圆心等)
  11~18 其它 X坐标
  20   主Y坐标
  21~28 其它 Y坐标
  30   主Z坐标
  31~36 其它 Z坐标
  38  实体的标高,如果非零的话
  39  实体厚度,如果非零的话
  40~48 文字字符高,比例因数等浮点数数值
  49  重复性的值
  50~58 角度值
  62   颜色号
  66  实体跟随标志
  70~78 整数值,如重复次数、标志位、模式等
  所有的变量、表项、实体描述都是先由一个组给出名称,然后由若干个组说明其内容,由这些变量、表项、实体组成各个段。

  四、图形系统与高级语言的接口

  图形处理模块是CAD系统最基本的模块,是整个CAD系统显示、编辑和输出设计结果的环境,而高级语言在数值计算、数值分析方面有着无可比拟的优势。当我们要把已经完成的图形文件作进一步处理时,如对零件进行体积、重量或优化设计等计算时,那么,图形系统与高级语言的接口将是问题解决的关键,也就是说,我们必须把图形系统产生的图形文件转换为一种图形系统和高级语言都能识别的文件格式。根据是否通过中性文件,我们把这种接口的方法分为两类:间接型接口,直接型接口。

  1.间接型接口
  间接型接口实际上由两部分组成:第一部分接口实现图形系统二进制码图形文件与以 ASCⅡ码形式存放的国际标准化图形文件(如IGES文件或DXF文件)之间的相互转换;第二部分接口实现国际标准化图形文件与高级语言图形信息的相互转换。

第一部分接口一般是图形系统提供的,如 AutoCAD中的DWG文件与 DXF文件接口,在AutoCAD环境中,执行DXFOUT(或IGESOUT)命令,可将当前DWG格式文件输出转换为一个DXF(或IGES)文件;第二部分接口实现起来是比较容易的,因为国际标准化图形文件的数据格式是公开的,而且是以ASCⅡ码形式存放的。第二部分接口的实现实际上就是高级语言对一个己知格式的ASCⅡ码文件的读写操作。在具体应用中,也就是由高级语言开发的计算模块对ASCⅡ码文件的读写操作,获取图形中的相关数据,经过计算,得到最终结果或把优化设计后的数据写人ASCⅡ码文件,以达到修改图形的目的。在AUtoCAD环境中,运行DXFIN命令,可将修改后的ASCⅡ码文件重新转换成DWG格式文件,得到优化设计后的图形。
  间接型接口的主要优点是设计简单,可移植性好。其缺点是转换步骤多,转换时间长,转换的实时性差。

  2.直接型接口
  直接型接口实际上是高级语言对结构复杂的二进制码图形文件进行的读写操作,该方法要求作者具有很高的文件处理能力,能够正确分析图形文件的数据结构。由于系统图形文件的数据格式一般是保密的,文件又是以二进制码的形式存放,分析起来非常困难。由于不同的图形系统存放图形文件的格式不一样,因此接口的可移植性也差。
  但是直接型接口较之间接型接口具有转换步骤少,转换时间短,转换实时性好等优点。
  由于DXF文件与IGES文件是大多数图形系统所支持的,而几乎所有的高级语言都能对ASC Il码文件进行读写操作,因此,上述介绍的间接型接口方法具有通用性。

  3.生成自动绘图命令文件(*.SCR)
  在AutoCAD中,还可以利用 SCR文件作为中性文件,由高级语言编程直接生成SCR文件,在AutoCAD中运行SCR文件绘制图形。AutoCAD提供的SCR文件是一种绘图命令集文件,类似操作系统中的批处理文件,可以执行某一预定任务的命令和参数序列。它也是一ASCⅡ码文件,在AutoCAD中用“SCRIPT”命令从指定的SCR文件中读出命令组,并执行。SCR文件格式为每一AutoCAD命令占一行,命令与参数用空格隔开,并严格遵循AutoCAD命令应答格式。例如用命令文件画出一边长为一个单位的正方形,然后加以擦除工作,可以编辑生成一名为TEST.SCR命令文件来完成。
  LINE,1010,1111,1111,1010,10(画出正方形)
  ERASE L(擦除)
  在AutoCAD环境中,键入SCRIPT命令,如:
  COMAND:SCRIPTJ
  SCRIPT FILE(DEFAULT)(SCR文件名<缺省值>):TESTJ
  此时,TEST.SCR文件中的命令序列得到执行,绘出图形。
可以看出,在AutoCAD中,当需要将计算后的数据生成图形,采用高级语言直接建立SCR文件较之  建立DXF文件或IGES文件更为简洁易懂。

  五、DBF格式数据库与高级语言的接口

  在CAD系统中,可以借用关系数据库作为CAD软件的数据库。为了在CAD环境下实时地生成、调用和更新数据,需要开发高级语言与数据库的接口。
  DBF格式的数据库文件是最常用的数据库格式文件之一,它可由多种数据库软件创建,包括dBASE、Foxpro,乃至最新的面向对象的程序设计语言VisuI Foxpro、Delphi等。
  这种格式的数据库文件与高级语言的接口方法也可分为直接型接口和间接型接口。

  1.直接型接口
  所谓直接型接口,就是不依赖于中性文件,由高级语言直接对数据库文件进行读写操作。当然,必须首先分析DBF文件的数据存储格式,也就是DBF文件的数据结构。
 DBF文件分两部分:文件头部分存储记录的个数,每个记录的字段的个数,字段名等总体信息;文件的主体存储各个记录的内容。
  接口程序的编制步骤如下:
  (1) 由DBF文件建立线性链表。通过读取DBF文件头,可以知道记录的总体情况,然后分配内存空间,建立相应的数据结构;
  (2) 编制对线性表进行删除、插入、遍历等各种操作的子程序;
  (3) 将修改后的线性表写回DBF文件。

  2.间接型接口
  间接型接口就是数据的传递是通过中性文件来实现的。在绝大多数的数据库编程软件中,都有将数据库文件转换为文本文件的功能。文本文件即ASCⅡ码文件,是软件系统之间数据交换最基本的文件格式之一。
  数据转换步骤如下:
  (1) DBF文件转换为TXT文件
  以dBASE为例,在dBASE中,可用“下述命令将DBF数据库文件内容输出到一文本文件中。
  COPY TO(文件名)[FOR 〈表达式〉][FIELD〈 字段名表〉][SDF]/[DELIMITED」
  若在COPY命令中选用了选择项[SDF]或[DELIMITED」时,则产生一个文本文件。文件中的数据可以是当前数据库文件的部分数据或全部数据,取决于命令行中其它选择项的使用,系统会自动再此类文件名后加上扩展名.TXT。这两个选择项的区别在于:用[SDF]产生的是标准格式的数据文件,用[DELIMITED]产生的是通用格式的数据文件。
  标准数据格式是:每一个记录定长;记录从文件头开始存放;每一个记录用回车换行结柬;各记录中的同一数据项的长度及类型都相同,不足的用空格补充。
  通用数据格式是:数据项与数据项之间用逗号分开;字符型数据或逻辑型数据用单、双引号或其它限制符括起来;数字型数据不加任何限制符;记录可以定长,也可以不定长;在每个记录后面用回车换行结柬。
  (2) 将TXT文件中的数据加人到DBF文件中
  在dBASE环境下,利用APPEND命令可以把其它外部软件建立的扩展名为.TXT文件中的数据转移到数据库文件中。传递数据的要求是数据格式要匹配。命令如下:
  APPEND FROM 〈文件名〉〔FOR 〈表达式〉][SDF]/[DELIMITED]命令行中〈文件名〉所指出的文件为提供数据的文件(简称施主);当前被打开的数据库文件为接受数据的文件(简称受主)。
  如果指出了选择项[SDF]或[DELIMITED],可以实现数据文件(.TXT文件)中的数据按规定的格式转移。特别需要指出的是,由于数据文件没有结构,所以数据是按位置转移的,这时要注意施主和受主在同一位置上的数据类型要一致,也就是说,若受主的第一个字段是材料,则施主在相应位置上也应该是与材料有关的数据。
  概括的说,这种数据转换的过程如下:
  (1) 将数据库文件内容输出到文本文件。
  (2) 外部软件从文本文件中读取数据或对其进行处理。
  (3) 将文本文件中的数据输入到数据库文件中。

  3.数据库与面向对象编程语言的接口
  随着软件技术的发展,在出现了面向对象编程的高级语言后,数据库与高级语言的接口问题似乎得到了完美的解决。
  在最新出现的面向对象编程的语言如:Visul BASIC、Delphi中,已将数据库的操作完全融合进程序设计中,也就是说,这一类的编程语言既继承了以前高级语言的全部功能,又具备了数据库编程的能力。
  用该类编程语言操作数据库文件,无需分析数据库文件的存储格式,在读写数据库内容上有了更大的灵活性,在程序设计中,只需在FORM(面向对象程序设计中程序界面的一个窗口)中加人数据源、数据库表、数据显示表格、数据库操作控制器等少许几个控件,然后将数据库表与相应的数据库文件相连接,便可在程序中随意操作数据库文件,因为对于连接并打开的数据库,每一个字段在程序中都是作为一个字段变量,可随意读写字段值。更值得称道的是,该类编程语言通过配备的数据库引擎,可以对多种格式的数据库文件进行操作。在开发数据管理与计算一体的CAD系统中,使用该类编程语言将是最佳选择。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2003-3-12 13:35:06 | 显示全部楼层
我用VFP作为AUTOCAD作二次开发,VFP生成SCR.SCR文件后用“run/n C:\acad14\acad.exe /b SCR”调用ACAD并生成图形,每生成一个图形打开一个CAD窗口,与ACAD14版本配合到也没什么不好。可现在ACAD2002支持多文件编辑,再用生成一个图形打开一个CAD窗口显然不合适。现在想这样做:第一次调用ACAD 用原来的“run/n C:\acad2002\acad.exe /b SCR”命令,第二次调用ACAD时,若此时ACAD窗口已经存在,则应将窗口最大化后并向其传送命令。问题是ACAD窗口最大化后,如何向avad传送命令让其读入SCR(想当于ACAD.exe/b的作用)。这个问题我已多处请教,都没有得到回应,故特请斑竹回复,十分感谢。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-25 13:03 , Processed in 0.409874 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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