墓石设计系统渲染功能的ObjectARX实现.docx
《墓石设计系统渲染功能的ObjectARX实现.docx》由会员分享,可在线阅读,更多相关《墓石设计系统渲染功能的ObjectARX实现.docx(32页珍藏版)》请在冰点文库上搜索。
墓石设计系统渲染功能的ObjectARX实现
本科毕业论文
(科研训练、毕业设计)
题目:
墓石设计系统渲染功能的ObjectARX实现
******
学院:
软件学院
系:
/
专业:
软件工程
年级:
03复合(转专业)
学号:
********
指导教师(校内):
朱宗番职称:
教授
指导教师(校外):
职称:
2005年05月29日
墓石设计系统渲染功能的ObjectARX实现
[摘要]近些年来,随着墓石设计行业的快速发展,墓石制品公司间争夺客户的竞争越来越激烈。
对于不懂图纸设计的客户来讲,一张色彩斑斓的设计效果图往往比一堆纵横交错的黑线来得更直观和真实。
而要渲染出一张美仑美奂的效果图,往往要耗费设计人员大量宝贵的时间。
在此应用背景下,本文利用VC++和Autodesk公司提供的CAD二次开发工具ObjectARX,针对渲染图片库管理和渲染要素的参数化设定两个方面进行设计,以达到节省设计人员工作时间的目的。
[关键字]墓石设计系统AutoCADObjectARXRenderAPI渲染
ProgrammingRenderFunctionsForStoneDesignUsingObjectARX
[Abstract]AsStoneindustrydevelopsrapidlyinrecentyears,stoneproductcompaniestrytheirbesttoshootcustomersinfiercecompetition.Comparedtoamassofblackcurves,acolorfulpictureismoreattractivetocustomers.Butittakesdesignersalotoftimetorenderamodelintoashiningpicture.Thepaper,whichisbasedonVC++andObjectARXprogrmmelanguage,chieflyresearchshowtomanagedatabasesofrendermaterialsandhowtoconvenientlyconfigurerenderpreferences.
[Keywords]StoneCADDesignSystemAutoCADObjectARXRenderAPIRender
墓石设计系统渲染功能的ObjectARX实现
第一章引言5
第一节什么是墓石设计系统5
第二节什么是墓石渲染6
第三节本文主要内容7
第二章系统总体设计8
第一节系统功能模块图和需求分析8
第二节开发工具(ObjectARX)介绍11
第三节AutoCAD数据库介绍11
第四节RenderAPI库结构解析12
第三章系统详细设计18
第一节三类文本库的设计18
第二节数据库(access)设计20
第三节各功能模块详细设计20
第四章系统运行结果演示26
结束语和感想31
致谢语32
参考文献33
第一章引言
第一节什么是墓石设计系统
墓石指的用石头建成的陵墓。
要建成漂亮的陵墓,不仅要在石材加工厂里把粗糙、不规则的石头磨成方圆有形的石种,还要在设计室里费尽心思地进行造型设计,后一种工作就叫做墓石设计。
在墓石行业发展的初期,设计者采用手工制图,主要依赖的工具是纸和笔,画过的局部造型往往没有可重用性,因此设计过程中存在许多重复劳动。
随着计算机技术的发展,石材设计行业引进了计算机辅助设计(ComputerAidedDesign,简称CAD)技术,从此进入了无纸化设计时代。
计算机辅助设计(ComputerAidedDesign,简称CAD)技术,是指设计人员(或用户〕在产品或工程设计过程中借助于CAD系统(硬件、软件)的帮助来完成设计任务,并达到提高设计质量和缩短设计周期的目的的技术。
而在所有的CAD软件系统中,由美国Autodesk公司开发的AutoCAD是目前国内外最广泛使用的计算机辅助绘图和设计软件包。
本文所进行的二次开发也正是以AutoCAD为平台的。
在墓石设计中,固然包含着需要由人来完成的创造性的工作,但是同时也包含了很多重复性的工作,如大量的计算、绘图等工作。
在CAD技术出现以前,工程设计的全过程都是由人来完成的.而计算机具有运算速度快、存储数据多、精确度高、有记忆和逻辑判断的能力、可处理图形等特点,这些重复性的工作可以由计算机更快、更好地去完成,这就是把CAD技术应用在墓石设计领域的意义所在。
总结起来CAD技术在墓石设计领域具有如下优势:
✧提高效率,采用CAD技术后的结构设计和工程制图的速度大大提高,对于复杂构件和工程细部的设计实现无级缩放,分级设计。
✧有利于成组设计,可以广泛应用标准图和标准设计。
✧修改设计方便,只需对己存储的图纸做局部修改就可成为新图。
✧易于实现产品数据的标准化。
设计单位的产品数据包括设计、图文、技术文档等,标准化,易于设计单位积累产品资源,易于继承历史的知识财富,方便产品数据的存储、传递、转换和理解。
✧降低设计成本,提高设计质量。
目前,在墓石设计业中,CAD技术得到了广泛的应用,CAD技术极大的提高了设计效率和设计精度,减少了设计过程中的差错,并且显著的缩短了设计周期和降低了设计成本。
但是,新的东西往往会带来新的问题。
CAD技术的出现意味着设计人员不仅要懂得设计,还要懂得计算机相关操作知识,而不再是笔一挥就能在图纸上看到所想的东西。
再者,AutoCAD并不是针对单个设计行业开发的,所以很多功能都无法满足设计人员工作的需要。
比如AutoCAD提供了一个渲染库,但却没有提供分类存储,无法进行方便高效的图片库管理。
以上二点促使了CAD二次开发的兴起,开始出现了为墓石行业量身定做的CAD软件,即本文所称的墓石设计系统。
经过二次设计的CAD软件不需要软件操作员有电脑与CAD的专业操作知识,就可以快速、简便地制成设计图纸,把设计人员的构思真实、完美地表现出来。
对于完成后的图纸,系统将自动完成报价与原价管理等工作。
第二节什么是墓石渲染
用CAD软件制图,输出的一堆具有几何意义的线条,并不具有直接的视觉冲击力。
比如画一块长方体的墓碑,显示在屏幕上的就是一个由十二条直线构成的长方体,很难让人们把它和现实生活中见到的有颜色、有质感的墓碑联系起来。
对于非专业设计人员来讲,一张色彩斑斓设计效果图往往比一堆纵横交错的黑线来得更直观和真实。
所以,当设计者设计完墓石造型后,往往要担当起“画家”的角色,把画出来的每一块石头贴附上与石种相配的图片,并在墓石周围画上相宜的景物。
这个工作过程实际上就是模拟现实场景对设计图进行渲染。
渲染完成后,就可以通过网络传输给客户观看了,如图1所示。
图1
第三节本文主要内容
渲染工作并不是一件简单的事情,要模拟出真实的场景,不仅要能模拟出石料品种、石料花纹疏密、石料加工外理方式(磨光面或者粗糙面)等内部属性,还要能模拟出太阳光照、花草树木人等外部属性。
而要模拟出这些属性,就要设定大量不同的参数。
所以AutoCAD软件提供的渲染功能不可避免地具有参数多,设定繁琐,渲染效果不好的缺点。
本文针对墓石设计过程中的渲染工作进行分析和设计,提取墓石渲染过程中主要的工作流程,对以下这两个方面进行了设计:
第一,通过建立石料图片库、外部景观图片库、背景图片库板、地板料图片库、灯光库这五大文本数据库,对渲染图片进行方便高效的管理;第二,把一部分渲染参数固定化,提供精简了参数的MFC界面,用于设定各种渲染配置,从而达到节省设计人员工作时间的目的。
第二章系统总体设计
第一节系统功能模块图和需求分析
图2
系统功能模块图如图2所示。
以下,将给出各个模块的具体需求,每一点描述一个子模块。
1.部材石料选择
部材石料指的是要在石头上贴附的材质图片。
选择图片时,要从石料库中选择对应的石料名称。
所有的石头分为三大类:
墓碑,周边,外栅。
所有的墓碑用一种材质来渲染,周边、外珊也各用一种材质渲染。
根据需要,也可以对个别的石头选择特殊的材质来渲染。
同时为了扩充石料种类库,要求提供石料种类的删除,添加,修改功能。
另外,要求可以记录下最近使用的材质,和上一次渲染时三大类分别用的是什么材质。
2.渲染精度设定
设定渲染精度,精度高则图片清晰度高,精度低则清晰度低。
如果把渲染效果选择为粗糙面,则材质的效果偏暗淡,如果选择为光面,则材质的效果偏亮。
要求记住上次渲染选定的精度和效果。
3.灯光设定
模拟外部灯光,使效果图中出现阴影等效果,增加效果图真实感。
主要设定如下:
✧周围光设定
✧太阳光设定
✧环境光设定
✧自定义模式:
手动设定外部灯光,并提供灯光效果记忆功能,即可见本次的灯光设定命名保存,下次需要时调入使用。
✧固定组合模式:
提供多种常用各种光源的组合模式。
4.背景设定
选择渲染时要用的背景图片,使场景更真实,比如一片天空或一个陵园的景象等。
同时为了扩充背景库,要求提供背景种类的删除,添加,修改功能。
5.地板料铺设
设定渲染所需的内部铺设石料,实际上是铺设地板料,同时提供地板料的添加,删除,修改功能。
6.外部景观设定
外部景观,是指树,人,佛像等为了模拟实际效果而加入的图片。
在选择外部景观时可改变高度,修改其相关属性。
系统要求提供外部景观的添加,删除,修改功能。
第二节开发工具(ObjectARX)介绍
第一小节ObjectARX简介
第一章中介绍的AutoCAD是目前在微机中应用最为广泛的CAD系统,这不仅是因为它功能的强大,更因为其良好的开放性。
Autodesk公司己经提供了四种二次开发手段:
AutoLISP,ADS,ActiveX/VBA(VisualBasicforApplication)及ARX。
AutoLISP是一种解释型语言,只能简单地为AutoCAD添加新的命令。
ADS应用程序是用C语言编写且编译过的,作为外部函数能通过AutoLISP解释器加载并执行。
ActiveX/VBA是通过ActiveX技术向开发人员提供的在第三方开发环境下进行AutoCAD二次开发的应用集,该应用集简单易用、功能强大。
ARX(AcadRuntimeeXtend)应用程序是在VC++环境下编写且编译过的动态连接库,与AutoCAD共享内存空间,是在AutoCAD中运行的高效的二次开发应用程序。
ARX是Autodesk公司推出的最强大的二次开发工具,它不但支持面向对象的程序设计,而且提供了许多应用程序接口(如ODBC)。
具体而言,ARX具有以下显著特征:
✧功能强劲。
ARX充分利用AutoCAD的开放式体系结构,可以监控和处理AutoCAD各种事件,可以定义AutoCAD命令(包括可透明使用的命令),可以定义数据库对象,等等。
可以说,ARX是在兼具了Autolisp良好交互性和ADS良好综合性的基础上,提高了应用程序的智能化程度。
✧面向对象。
ARX继承了标准C++面向对象的特性,提供了访问和控制AutoCAD及处理CAD常见事务的六个主要类库。
它不但可以像标准C++一样自定义或由派生得到新类,而且允许定义参与运行时类型识别的新类。
✧运行性能好。
由于每个ARX应用都是一个动态链接库,它与AutoCAD系统共享同一内存地址空间,所以ARX应用能够直接访问AutoCAD的各种内存对象,既节省了内存开销,又提高了应用程序的运行速度。
ARX上述特性无疑使它成为集成CAD图形软件和标准数据库的编程接口中最佳可选的开发工具。
ARX技术将是CAD软件开发的一个方向。
第二小节ARX类库
ARX类库集是用C++编译的类的集合。
利用ARX进行开发,必须通过ARX类库集来访问AutoCAD数据库。
ObjectARX环境由以下类库和函数库构成:
1.AcRx类库
AcRx库提供了系统级的类,用于动态连接库的初试化和连接、运行时类的注册、识别。
这个库的基类是AcRcObject,它提供了以下工具:
✧对象运行时类的识别和派生分析。
✧在运行时向己有的类附加新的协议。
✧对象的相等和关系测试。
✧对象拷贝。
2.AcEd类库
AcEd库提供用于定义和注册新的AutoCAD命令的类,采用与AutoCAD定义内部命令一样的方式。
定义的新命令成为“本地命令”,和AutoCAD内部命令一样放在同一个内部结构(AcEdConunandstack)中。
该库中有一个重要的类AcEditorReactor,它监视着AutoCAD编辑器的状态,并在指定事件发生时通知应用程序,如一个命令的开始、结束或取消。
3.AcDb类库
AcDb类库提供组成AutoCAD数据库的类。
这个数据库存储了组成AutoCAD图的所有图形对象(称为实体)的所有信息,还存储了非图形对象(例如图层、线型、字型等)的信息。
利用AcDb库,可以查询、处理已有的AutoCAD实体和对象的实例,也可以创建新的实体和对象的实例。
4.AcGi类库
AcGi库提供用于绘制AutoCAD实体的图形界面。
这个库由AcDbEntity的成员函数worldDraw()、viewportDraw()和saveas()使用,这些函数是标准实体函数的一部分。
所有实体类必须定义worldDraw()函数。
AcGiWorldDraw()对象提供一个应用程序编程界面(API)通过它AcDbEntityworldDraw()可以在所有视窗中同步处理这个对象的图形表示。
同样,AcDbEntity对象也提供API界面AcDbEntity:
:
viewportDraw(),可以在单个视窗中对实体进行特别处理。
5.AcGe类库
AcGe库由AcDb库使用,并提供使用工具类如矢量、点、矩阵等,用来提供通用的2D和3D几何操作。
它也提供了简单的几何对象,如点、线、面等。
6.ADS库
ADS库是一个C函数库,一般ARX应用程序通过ADS库函数完成诸如实体选择、选择集操作、数据获取等任务。
ADS库是开发时充分利用AutoCAD界面的很好工具。
第三节AutoCAD数据库介绍
在AutoCAD平台上开发应用程序,就必须要操作AutoCAD的数据库(AutoCADDataBase,简称AcDb。
AutoCAD数据库是按一定结构组织的AutoCAD图形全部有关数据的集合。
存储在AutoCAD数据库中的数据称为数据库对象(AcDbObject),它是一幅AutoCAD图形的基本组成部分,包括可见几何实体对象和不可见的非几何对象等。
几何实体对象在图形中具有图形显示,如line,circle,arc,text,solid,region等。
非几何对象的例子如图层、线型、文字样式等。
符号表(BlockTable)和有名对象字典(NamedobjectDictionary)是AutoCAD数据库的关键组成部分,由于它们又包含了其它对象,因而称为容器对象(ContainerObject)。
容器对象的作用是组织和管理数据库对象。
第四节RenderAPI库结构解析
第一小节RenderAPI简介
Autodesk公司提供的AutoCADRenderAPI是一个专门为AutoCAD渲染功能进行二次开发的应用开发包。
它的设计包括了两个部分:
动态链接库acRender.arx和编程库avlib.lib。
在程序实现过程中,acRender.arx负责与AutoCAD进行通信,而avlib.lib则包含了与acRender.arx通信的各种编程接口。
第二小节RenderAPI结构模式
RenderAPI函数库提供了20个函数,每个函数都实现一个特定的功能,如灯光设定。
与这20个函数配套的是20个不同的结构体,这些结构体有一个共同的字段mode:
mode表示要调用本函数的哪个具体功能,比如灯光设定有多种模式:
灯光删除,灯光添加,灯光编辑等,mode取值AvLightDelete,就表示调用删除灯光的功能。
以下有一段avlib.h函数库示例(以函数av_light为例)。
av_light()
GENERAL
Theav_lightcommandisusedtocreate,modify,andquerylightsandestablishNorthinthedrawing
SYNOPSIS
#include"avlib.h"
AvErrorCodeav_light(AvLightParam*p);
typedefenum{
AvLightIntensity=0x000001,
AvLightColor=0x000002,
AvLightName=0x000004,
AvLightFrom=0x000008,
AvLightTo=0x000010,
AvLightShadowmap=0x000020,
AvLightHotspot=0x000040,
AvLightFalloff=0x000080,
AvLightShadowsoft=0x000100,
AvLightShadowObject=0x000200,
AvLightShadows=0x000400,
AvLightMonth=0x000800,
AvLightDay=0x001000,
AvLightHour=0x002000,
AvLightMinute=0x004000,
AvLightDaylight=0x008000,
AvLightLatitude=0x010000,
AvLightLongitude=0x020000,
AvLightTimezone=0x040000,
AvLightAttenuation=0x080000,
AvLightNewName=0x100000,
AvLightNorthUCS=0x200000,
AvLightNRotation=0x400000,
AvLightTypeFlag=0x800000
}AvLightFlags;
typedefenum{
AvLightNewDistant=0,
AvLightNewPoint,
AvLightNewSpot,
AvLightAmbient,
AvLightAmbientList,
AvLightModify,
AvLightDelete,
AvLightRename,
AvLightNorthLocator,
AvLightNorthLocatorList,
AvLightList,
AvLightListAll,
AvLightUI
}AvLightMode;
typedefenum{
AvAttenuationNone,
AvAttenuationInverse,
AvAttenuationInverseSquare
}AvAttenType;
typedefenum{
AvLightDistant,
AvLightPoint,
AvLightSpot
}AvLightType;
typedefstruct{
AvLightModemode;
doubleintensity;
AvColorcolor;
char*name;
ads_pointfrom;
ads_pointto;
intshadowmapSize;
doublehotspot;
doublefalloff;
doubleshadowSoftness;
AvBooleanshadows;
ads_nameshadowObjects;
intmonth;
intday;
inthour;
intminute;
AvBooleandaylight;
doublelatitude;
doublelongitude;
inttimezone;
AvAttenTypeattenuation;
char*newName;
char*northUCS;
doublenorthRotation;
AvLightTypetype;
structresbuf*stringList;
unsignedlongflags;
}AvLightParam;
DESCRIPTION
av_light()has13modes:
(篇幅所限,本文只列举其中二种模式)
AvLightNewDistant
Createanewdistantlight.Ifanyofthesunangleparametersaresupplied(month,day,hour,minute,daylight,latitude,longitude,timezone)thencalculatethelightlocationusingthecalculatedsunangle.
AvLightParam:
Parameter
Req'd
Values
Default
Description
name
Yes
8character
None
Lightname.
intensity
No
0.0...1.0
1.0
Lightintensity.
color
No
AvColor
(1.0,1.0,1.0)
Lightcolor.
from
No
ads_point
Currentlook-from
Lightlocation.
to
No
ads_point
Currentlook-at
Lighttarget.
shadowmap-
size
No
0...4096
0(noshadowmap)
Shadowmapdimensioninpixels.
shadow-
softness
No
1.0...10.0
1.0
shadow
No
AvBoolean
OFF
Shadow-casingtoggle.
shadowobjects
No
ads_name
None
Selectionsetofobjectswhichboundshadowmaps.
month
No
1...12
9
day
No
1...31
21
hour
No
0...24
15
minute
No
0...59
0
daylight
No
AvBoolean
OFF
Daylightsavingstoggle.
latitude
No
-90.0...90.0
37.62
LatitudeofSanFrancisco
longitude
No
-180.0...180.0
122.37
LongitudeofSanFranci