第十八章ACIS的实例代码.ppt
《第十八章ACIS的实例代码.ppt》由会员分享,可在线阅读,更多相关《第十八章ACIS的实例代码.ppt(39页珍藏版)》请在三一办公上搜索。
1、第十八章 ACIS的实例代码,18.1 用Scheme语言生成ACIS程序18.2 用Windows控制台环境编译ACIS程序18.3 用ACIS AppWizard生成应用程序框架,18.1 用Scheme语言生成ACIS程序,ACIS从实用角度而言(不准确地说),是一个大型的专门用于几何造型的类库,而它的运行环境正如上一章所述,是Scheme和C+;本章将就ACIS的Scheme程序、C+的Windows控制台程序和C+的AppWizard应用程序,进行实例讲解。,用Scheme语言生成ACIS程序,本节主要介绍Scheme语言的使用规则,简要讲解其基本概念如表达式、变量、函数、简单几何造
2、型功能等,并附有可以直接运行的例程代码。,Scheme语言基础语法,ACIS中的Scheme解释器是用C+设计的,ACIS中的几何造型功能通过对标准Scheme命令的扩展实现,这些扩展命令也是用C+设计的,它们支持ACIS中的高级造型功能,如模型着色和零件管理功能。与C+相比,Scheme是一种快速程序设计语言,而且简洁易学。Scheme语言的语法规则很少,总结如下:通过交互地调用Scheme过程来执行程序;Scheme过程及其参数都被包含在一对圆括号里;圆括号里的部分被称为Scheme表达式;表达式中包含过程名称和过程参数,具体格式如下:(过程名称参数1,参数2,)分号“;”引导的部分为程序
3、注释。(如何运行ACIS Scheme解释器,请参看17.3.1节),表达式,由于Scheme是一种解释型的程序开发语言,其表达式只能在解释器中执行。运行ACIS的Scheme AIDE解释程序后,就可以在它的“acis”提示符下输入表达式,在表达式的结束处按回车就可以执行该表达式。以下是几个典型的算术表达式:acis输入:(*5 6)回车输出:30acis(*5 6 7)210在Scheme的表达式中,操作符(如*)后面可以跟任意多个参数,但是其间一定要用空格隔开;并且一个表达式里可以包含一个或者多个表达式,如:acis(*(+1 2)(*5 6)90,理论上,表达式之间互相嵌套的层数是没有
4、限制的,程序员只要匹配好括号就行了。上面表达式的例子中使用了两个标准的Scheme内部过程进行乘法和加法运算,而ACIS Scheme还扩充了ACIS造型器专用的过程,用户可以按照上述标准Scheme过程方法调用这些造型过程,如下面命令可产生立方体:acis输入:(solid:block(position 0 0 0)(position 10 10 10)回车输出:#entity 1 0上述命令产生了一个正方体,如图17.1.1,共调用了两个ACIS Scheme过程(position和solid:block),#entity 1 0是该正方体的默认名称。,外部描述符,Scheme表达式产生的
5、每个对象都有一个外部描述符和一个内部描述符。虽然外部描述符看上去比较简单,它在与用户交互过程中有重要作用。它会将一个过程的执行结果反馈给用户,例如我们前面举的一些例子中,如果表达式的计算结果不被用作其他表达式的参数,也就是说该表达式未被嵌套在其他表达式中,则Scheme解释器自动将表达式执行结果的外部描述符输出,对于算术运算来说其外部描述符只是一些简单的数字,如30,210,90等。ACIS的对象也具有外部描述符,当一个含有ACIS造型功能的过程被调用后,它所产生的ACIS对象的描述符就会被解释器输出,其一般格式如下:#type_of_object下面,我们看一个关于ACIS对象的例子:;产生
6、一个position对象acis(position 10,20,30)#position 10,20,30,这个position对象的外部描述符表示了一个x=10,y=20,z=30的坐标点。从ACIS的ENTITY类派生的对象的外部描述符与position对象的外部描述符类似,稍微复杂之处就是,这些东西被组织到所谓的零件(PART)单元中。在ACIS Scheme解释器开始运行时,它会自动产生一个编号为1的默认零件。下面就是关于ACIS的ENTITY对象的Scheme例子:;产生一个长方体acis(solid:block(position 0 0 0)(position 10 10 10)#
7、entity 1 0过程solid:block产生了一个ACIS实体对象,#entity 1 0是它的外部描述符,该描述符由两部分组成,即实体号(1)和零件号(0),实体号可以作为其他过程的参数。下面就是一个使用实体号的例子:;删除一个实体acis(entity:delete(entity 1)()注意:“()”表示空元素,Scheme语言的列表结构中会自动地在列表末尾增加它。,变量,在Scheme语言中可以用变量名称记录变量的数值,如17.1.1节中的例子所示,一个过程的返回值,如果不保存在一个变量中,没有多大用途。Scheme语言中的变量和过程都可以用一个符号表示,定义变量和过程的操作符是
8、define,它可以命名一个表达式,语法如下:(define名称表达式)下面是两个变量定义的例子:;定义数值变量pacis(define p(*10 10 10)pacisp;调用变量p1000;定义ACIS变量p1acis(define p1(position 10 10 10)p1acisp1;调用变量p1#position 10 10 10上述例子中p是一个数值变量,p1是一个position对象变量。,函数,Scheme语言中的函数定义也是通过define命令实现的,语法如下所示。在这个例子中,函数参数x是一个局部变量,即只有在定义它的函数中有意义。;定义函数“square”acis(
9、defiine(square x)(*x x)squareacis(square 6)36用define命令产生的函数以及变量是全局性的,对于一些简单的任务(用30到50行程序即可以完成的任务),完全可以使用这个命令进行处理。而从程序的可读性和避免变量名的冲突来说,还需要其他一些更复杂的处理。,Scheme中的读写操作,在ACIS Scheme解释器里进行SAT文件的读写操作要比C+中的操作简单得多,下面就是一个完整的SAT文件的读写过程:;产生一个BODY对象(solid:block(position 0 0 0)(position 10 10 10);将它保存到save.sat文件中(pa
10、rt:save“E:/save.sat”);将BODY删除(part:clear);从文件save.sat中读入刚保存的实体(part:load“E:/save.sat”),用Scheme产生基本几何体,用ACIS Scheme可以很快捷地产生基本几何体,如,在ACIS Scheme解释器里输入如下命令就可以产生一个球体:acis(view:gl);生成一个视图窗口acis(solid:sphere(position(0 0 0)20)#entity 1 1;零件0中的第一个实体下面是几个产生基本几何体的函数:solid:block(position 左下角顶点坐标)(position 右上角
11、顶点坐标);立方体solid:sphere(position 圆心坐标)半径;球体solid:cylinder(position下圆心坐标)(position上圆心坐标)20;圆柱体solid:cone(position 下圆心坐标)(position 顶点坐标)25 0;圆锥体,ACIS Scheme中的集合运算,ACIS Scheme中的集合运算与C+中的集合运算基本一样,惟一不同的是它可以将多个实体一起进行运算,这要比C+中的一次只能计算两个实体方便。下面是一个例子,为了与C+进行比较,这里仍然对两个圆柱进行求并运算。;两个正交的圆柱(define c1(solid:cylinder(p
12、osition 0 0-50)(position 0 0 50)20)(define c2(solid:cylinder(position 0 0-50)(position 0 0 50)20);t1是将实体沿与x轴垂直的方向旋转90度的函数(define t1(transform:rotation(position 0 0 0)(gvector 1 0 0)90)(entity:transform c1 t1);把c1旋转90度(define cross(solid:unite c1 c2);c1和c2两个圆柱将被删除,ACIS Scheme中的布尔运算,ACIS Scheme中提供了强大的
13、布尔运算功能,不仅有效实体之间可以进行布尔运算,其他的一些几何实体之间也可以进行布尔运算。下面是一个平面与双圆锥体之间的布尔运算:;生成两个顶点重合的圆锥,即顶对顶,并将它们进行求并运算,然后将其结果与一个平面进行差运算(define c1(solid:cone(position 40 0 0)(position 0 0 0)25 0);产生圆锥c1(define c2(solid:cone(position-40 0 0)(position 0 0 0)25 0);产生圆锥c2(define c3(solid:unite c1 c2);求并(define plane(face:plane(p
14、osition-100 100 5)200 200(gvector 0 0-1);产生平面plane(define cut(sheet:face plane);生成平面片(bool:subtract c3 cut);求差在上述例子中为了在一个三维实体和一个二维平面片之间进行布尔差运算,没有使用适用于三维实体的solid:subtract函数,而是使用了更通用的bool:subtract函数。,Scheme语言总结,一个完整的Scheme程序由表达式和定义组成。这里,我们总结一下Scheme语言中的定义格式。定义可以出现在程序的顶部,这时的定义被称为声明。定义也可以作为一个主程序的开始,如一个函
15、数或者过程的开始。定义的格式有如下4种:(1)(define变量表达式),这是一种基本定义格式,一般变量的定义就是这种格式;(2)(define(变量形式参数程序体),如定义局部函数的lambda语句就是这种定义格式,下面计算阶乘的数值函数的定义就采用了这种定义方式:(define factorial(lambda(num)(if(=num 0)1(*num(factorial(-num 1)注意:(define(变量形式参数)程序体),这种格式也是一种常用的函数定义的格式方法。以这种格式定义上面例子里的factorial函数,程序如下:(define(factorial num)(if(=n
16、um 0)1(*num(factorial(-num 1)(3)(begin(定义1定义2),这也是一种基本的定义格式。它可以同时定义多个变量。本节主要介绍了Scheme语言的一些基本编程常识和几个基本几何造型的生成,在利用该语言进行系统开发时需要注意如下几个Scheme编程的特点:(1)变量与表达式的执行顺序,如果要让程序严格按照编写顺序执行,必须使用let*或者begin函数;(2)圆括号的数量既不能多也不能少。如(newline)是正确的,而(newline)则是一个错误表达式;(3)由于Scheme解释器对程序语句进行的检查不能返回出错程序所在的行号,所以一个函数或者过程不能太长,否则
17、就会给程序的调试带来麻烦;(4)在let表达式中产生的BODY对象,在函数或者过程结束后不能被自动删除。,第十八章 ACIS的实例代码,18.1 用Scheme语言生成ACIS程序18.2 用Windows控制台环境编译ACIS程序18.3 用ACIS AppWizard生成应用程序框架,18.2 用Windows控制台环境编译ACIS程序,本节主要通过几个实例程序讲解在C+中如何用Windows控制台环境编译和运行ACIS程序,同时给出几个在此环境下的简单几何造型的例程。,ACIS C+程序基本结构,在上一节中介绍了ACIS平台上用Scheme语言进行系统开发的一些常识,而利用C+在ACIS
18、平台上进行系统开发时,除了遵循C+语言的规定之外,还要注意ACIS的一些特点,下面是一个典型的ACIS C+程序结构:#include/含有系统函数的声明#include“ACIS头文件”/含有ACIS API函数和类的声明void main()api_start_modeller(0);/生成内部数据结构 api_initialisze_”组件”;/API函数和直接函数调用 api_terminate_”组件”;api_stop_modeller();/删除内部数据结构关于如何用Visual C+进行ACIS程序的编译和连接,在第十七章的第三节中已有详细讲解,这里不再赘述。,用API函数生成
19、基本几何体,ACIS一共提供了生成7种基本形状的方法,包括4种旋转曲面体(球体、圆锥体、圆环以及圆柱)和3种多面体(立方体、棱柱以及棱锥)。下面是用API函数生成一个立方体的C+程序,该程序首先生成一个立方体,而后用ACIS中的调试功能将这个立方体的数据写入磁盘文件中。#include#include“construct/kernapi/api/cstrapi.hxx”/声明了构造API函数#include“kernel/kernapi/api/api.hxx”/声明了start和stopAPI函数#include“kernel/kerndata/top/body.hxx”/声明了BODY类#
20、include“kernel/kerndata/data/debug.hxx”/声明了一些调试函数,void main()api_start_modeller(0);/生成内部数据结构 api_initialisze_constructors();BODY*block;/定义一个BODY实体 api_make_cuboid(100,50,200,block);/造出一个立方体FILE*output=fopen(“cube.dbg”,”w”);/生成cube.dbg同时打开一个文件debug_size(block.output);/用debug_size把block写入打开的文件fclose(o
21、utput);/关闭文件/API函数和直接函数调用 api_terminate_constructors();api_stop_modeller();/删除内部数据结构,程序的执行过程分析,启动造型器,它将产生一些基本的ACIS数据结构,在调用其他任何ACIS功能之前必须进行这个处理;初始化应用到的组件,由于ACIS组件之间存在一定的依赖关系,如果程序中使用两个组件,而其中一个组件是建立在另一个组件之上的,那么只需要初始化这个组件,ACIS会自动将另一个组件初始化;声明一个指针,该指针被指向将生成的BODY对象;调用ACIS的API函数构造几何体;打开一个文件;调用调试功能中的函数debug_
22、size将block的数据结构以及其中每一部分所占的内存空间写入(5)中打开的文件中;关闭文件;中断组件,释放组件所占用的资源;停止造型器。,运行该程序后将生成cube.dbg文件,用一个文本编辑器打开此文件,其内容如下:1 body record,32 bytes1 lump record,32 bytes1 shell record,40 bytes6 face records,264 bytes6 loop records,192 bytes24 coedge records,1056 bytes12 edge records,864 bytes8 vertex records,192
23、bytes12 curve records,1344 bytes8 point records,384 bytesTotal storage 5360 bytes可见函数api_make_cuboid至少产生了85个对象,每个对象都需要一定的内存和一个指针来表示它们。,模型文件的读写,因为一个单一的几何造型系统不可能提供所有用户需要的功能,这时会出现下述情况,用户在一个造型系统中生成零件的模型,而在另一个系统(如有限元分析系统)进行模型分析,当这两个系统之间交换模型数据时,就需要一个可以被两个系统都接受的文件格式;而目前,一般以ACIS文件格式为标准;ACIS的模型文件一般被称为SAT文件,它
24、包括文本文件(.sat)和二进制文件(.sab),ACIS的API函数api_save_entity_list可以生成SAT文件。,写SAT文件,/该程序生成一个棱柱并将其保存到一个文件里#include/含有函数printf的声明#include“construct/kernapi/api/cstrapi.hxx”/声明了构造API函数#include“kernel/kernapi/api/api.hxx”/声明了start和stopAPI函数#include“kernel/kerndata/top/alltop.hxx”/声明了BODY类#include“kernel/kerndata/l
25、ists/lists.hxx”/声明了一些调试函数#include“kernel/kerndata/savres/fileinfo.hxx”/声明了fileinfo类void save_ent(char*,ENTITY*);/声明子函数void main()api_start_modeller(0);/生成内部数据结构 api_initialisze_constructors();BODY*pris;/定义一个BODY实体 api_make_prism(100,150,200,7,pris);/造出一个7棱柱save_ent(“E:/save.sat”,pris);/调用save_ent函数把
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第十八 ACIS 实例 代码

链接地址:https://www.31ppt.com/p-5327281.html