AutoCAD下分形图形参数化
设计软件的实现
郭冬梅 刘广武
(航天机电集团第三研究院8357所,天津300141)
孙兰凤
(.天津大学机械学院,天津300072)
摘 要:运用ObjectARX在AutoCAD环境下开发分形的应用程序,将分形实现了参数化绘图,并直接引入到设计领域中。文中介绍了具体实现的方法、过程。
关 键 词:分形;参数化设计 中图分类号:TP 391.41
文献标识码:A 文 章 编 号:1003-0158(2001)04-0101-06
自从Mandelbrot在计算机上绘出了第一张Mandelbrot集图形以来,人们对这一领域表现出了极大的关注。分形图形层次丰富、内涵深刻,体现了各种类型的混沌和有序,为非规整形状图形的计算机描述和处理提供了有利工具。并且只有用计算机才能产生出来,任何高明的画家均无法绘制。但是,由于分形的理论、建模、编程不为一般设计人员所熟悉,使其使用受到了很大限制,目前将计算机分形图形直接应用于设计行业的成果并不多。如果将分形图形计算机生成实现参数化设计,改变少量参数就能得到递归层次不同的相似图形,使之从抽象的理论研究进入到实际设计应用中,可以减少设计人员编制、调试绘图程序的时间,有力于推广分形技术的应用,具有可观的实用价值[4]。本文首次用ObjectARX开发了分形应用程序,现以分形生成的一种形式L-system分形为例介绍这种方案的具体实现方法。
1 基于 L-system的分形图形概述
L-系统是用形式语言描述植物形态与生长的拓扑结构,将其引入计算机图形学后形成了现在广为运用的模拟自然景物的L-系统方法。理论上说,L-系统可生成无限嵌套的结构,是特别类型的迭代过程。它的中心是并行重写系统。从一个初始图ω出发根据重写规则集P改写
收稿日期:2000-10-25
作者简介:郭冬梅(1972-),女,河北永清人,工程师,硕士,主要研究领域为计算机辅助设计及图形学。
・102・ 工 程 图 学 学 报 2001年
初始元的一部分,如此迭代嵌套以生成最终图形。用L-系统可以生成典型的分形。尽管生成
,
一个复杂的L-系统常常需要花费大量的时间,但是指定L-系统的公式往往非常简单[1][2]。 先定义如下的图形符号:
F— 向前走一步,步长为d,画线; f — 向前走一步,步长为d,不画线; + — 向左(逆时针方向)转δ角;
- — 向右(顺时针方向)转δ角; [ — 压栈;
] — 出栈。
统一了这些规则以后,在绘图时,要输入这些确定其形状特征的参数,即可输出图形。以图2为例,则输入参数如下:
初始元ω:F-F-F-F 重写规则集P:F+F-F-F+F 初始元角度:δ=900 步长比率因子:step=3 迭代次数:layer=5
下面是此系统的生成算法步骤: (1)数据输入函数
1)由用户输入ω,P,δ,n,step5个参数。
2)判断输入参数是否满足指定范围,若满足,则传递数据;否则要重新输入,或按ESC键退出。
(2)L—system主函数DrawTur1( ) 1)i <=0;str<=(nth ,i ,ω)。
2)i>(length ω)结束;否则转至3)。
3)如果:str=F,则调用DrawTur2( ),转至4)。
如果:str=+,则初始角度angle=angle+δ,转至4)。 如果:str=-,则初始角度angle=angle-δ,转至4)。
4)i<= i+1转至2)。
(3)L—system递归函数DrawTur2(str ) 1)j<=0。
2)j>(length P)则结束;否则转至3)。 3)str<=(nth j p)。
如果:str=F,则求出下一状态位置,向前移动一步,并画线,递归调用DrawTur2(angle step n ),转至4)。
如果:str=+,则angle=angle+δ,转至4)。 如果:str=-,则angle=angle-δ,转至4)。
如果:str=[,则将此点位置记录在TS中,即压入堆栈,转至4)。
如果:str= ],则从堆栈中弹出TS作为当前点位置,但不画线,转至4)。 (4)j<= j+1,转至2)。
第4期 郭冬梅等:AutoCAD下分形图形参数化设计软件的实现 ・103・
2 参数化设计软件方案的确定
AutoCAD是目前国内最为流行的微机绘图软件,成为大多数设计人员使用的工具。但它除了具有完善的绘图、编辑功能外,一个重要的功能是它可以和高级语言交换数据。在AutoCAD提供的各种开发工具中,以C/C++开发工具的效率最高、功能最强。AutoCAD2000使用一种特定的C/C++编程环境——ObjectARX。ObjectARX(以下简称ARX)应用程序与AutoCAD在同一地址空间内运行并能直接利用AutoCAD核心数据库结构和代码。由于AutoCAD软件自身的很大一部分就是用ARX实现的,使用ARX能以无缝集成的技术方法向AutoCAD增加自定义的新实体和设计对象,以及创建全面享受AutoCAD固有命令之特权的新命令。
ARX应用程序以C++为基本开发语言,具有面向对象编程方式的数据可封装性、可继承性及多态性等特点。用其开发的工程CAD软件具有模块性好、独立性强、连接简单、使用方便、内部功能高效实用以及代码可重用性强等优点,并且支持MFC,能简洁高效地实现许多复杂功能。此外,考虑到其运行速度较快、保密性好、交互式界面容易生成等因素,绘图程序决定采用ARX编写。
在使用ObjectARX3.0开发应用程序时,需要使用Windows 9X/NT4/2000操作系统平台,Microsoft VisualC++6.0以上版本的编译器,并同时在硬盘上安装好AutoCAD 2000和 ObjectARX3.0开发系统。
此外作为程序的完善部分,在AutoCAD中定制下拉菜单和工具条来加载、运行程序,使不熟悉该命令的用户也能运用自如。
3 设计中的主要步骤及技术关键
3.1 按照ARX的要求设置Visual C++的工作环境
建立项目文件和进行项目设置。为了在以后正确地编译和链接应用程序,必须进行正确的项目设置。建立的项目文件须把ObjectARX应用程序与MFC动态链接,从而可以使用ObjectARX中的AdUi和AcUi类库。 3.2 创建对话框
ObjectARX提供了两种方法创建用户界面,PDB格式和基于MFC的用户界面。采用MFC的用户界面,这种Windows风格的对话框其外观和内建于AutoCAD的用户界面完全相同。
首先向项目文件中增加对话框资源,然后从控件工具栏中选择适当的控件资源,以满足在AutoCAD中运行程序时的需要。同时要修改对话框特性包括标题(Caption)、ID号、文字样式、窗口样式等。接下来使用ClassWizard创建与之相关的对话框类,并增加相应的变量和消息处理的函数。本例中的对话框设置如同运行程序时的结果。参见图1。 3.3 创建处理程序
包括增添由CacUiDialog派生的类,处理消息的函数,并向处理程序中添加必要的代码。 3.4 修改基本文件
在创建项目文件时自动生成了.cpp,.def,.cpp,.h等4个基本文件,必须进一步修改,为程序
・104・ 工 程 图 学 学 报 2001年
增加与ObjectARX的接口。 3.5 编写主程序代码
首先要加入与各个编辑框相关联的消息处理函数,同时设定参数的有效范围,增加一个Bool型函数,当输入的参数超出指定范围,显示一个消息框,提示用户重新输入。根据给出的算法编写主程序,实现绘图功能,并放到与OK按钮相关联的函数,即要求用户输入参数后,系统读取编辑框中的数据,点击OK按钮,开始运行程序,最后绘出图形。
由于用ARX的acedCommand函数可以直接调用AutoCAD的命令来完成绘图部分,所以这部分程序比完全在Visual C++中实现要少一半左右,而且简单易学。
3.6 编译、链接和运行应用程序
完成上述过程后,即可对程序利用Microsoft Visual C++提供的强大的集成调试器来进行编译和链接。当没有错误后,自动生成.arx 后缀的可执行文件。
然后,将在AutoCAD中加载应用程序。有多种方法,如可使用 “arx”命令。加载以后,就可在Command:提示行上直接输入应用程序中所定义的AutoCAD外部命令。 3.7 定制下拉菜单
由于每次重新打开AutoCAD软件要使用该命令都需要加载应用程序,还要找到执行文件的地址,会感到很麻烦,所以定制一个下拉菜单项是必要的。简要过程如下: (1)在AutoCAD安装目录下的Support子目录中的ACAD.MNU中* * *POP10后面加入* * *POP11,增加一个自定义的主菜单项如名为“Fractal”,在其后增添已经能运行的新命令作为菜单项,同时先加载应用程序。假设执行程序在E盘,命令名及程序名均为“Lsystem” 的语句为:
ID_U Lsystem [&Lsystem]^C^C(arxload \"E:/ Lsystem /Debug/ Lsystem.arx\"); Lsystem;^P (2)启动AutoCAD后执行 Menu命令加载以定制的菜单文件,这时可看到自定制的菜单“Fractal”以加到AutoCAD的标准菜单“help”之后了。这样,以后在点击该菜单会自动加载程序并运行此命令,如同使用AutoCAD的固有命令一样方便。 3.8 自定义工具条的生成
如果认为只有命令名的下拉菜单不够直观,可生成带有图标的工具条。工具条是快速、高效的启动AutoCAD的一种途径,这样点击图标也会自动加载程序并运行该命令,提高绘图效率。步骤如下:
(1)创建一个新工具条。
(2)定制工具条属性和图标。包括工具条按钮名称、图标、按钮注释信息以及与该按钮对应的命令。打开Toolbar对话框,右击工具条,启动Button Properties对话框,在Macro文本框中加载一个Autolisp程序,如本例为:
^C^C(arxload \"E:/Shu/Debug/Shu.arx\");Shu;^P 然后在Button Icon区单击Edit,打开Button Editor对话框定制图标。定制完毕后新的工具条已出现在AutoCAD中。 3.9 程序的运行结果
启动AutoCAD,无论是点击工具条或者下拉菜单都执行此命令。首先出现对话框,如图1所示。按要求依次设定参数,输入的参数如符合要求,即运行程序,生成所需图形。
这是一个L—系统的通用程序。该方法主要用于生成新颖图案以及模拟植物。由于字符和
第4期 郭冬梅等:AutoCAD下分形图形参数化设计软件的实现 ・105・
产生式是确定的,故该模型不是随机的。它经过几何解释及对数据进行变换和真实性处理,以产生最终图形。图形的复杂程度随字符和产生式而定。某些形式看虽然很简短的产生式,未必生成简单结构的图形。应用很简单,只要自己构思生成文法规则,给定指定的参数,即可立即绘出不同递归层次的图形。该方法对于分形图形的其它生成方法如随机L系统,迭代函数IFS方法以及随机插值法等也同样适用,图3是本系统的几个设计应用图例。
图1 分形图形生成界面
图2 程序运行结果
图3 设计图例
由于是在AutoCAD中产生的图形,而且图形由基本图素组成,继而可使用AutoCAD的工具对每个图素单元进行编辑、修改、叠加、增加个人属性等等,有别于其他的剪贴图片。基于此点,原程序中一般不加入颜色、线型等属性。而有如使用AutoCAD的基本命令一样,主张个性化,由用户修改属性或随层确定。
4 结 束 语
本文首次提出用ObjectARX开发分形的应用程序,实现了参数化的分形系统设计。
・106・ 工 程 图 学 学 报 2001年
VisualC++与AutoCAD相结合,为CAD工作提供了极其强大而有效的手段。分形图形与AutoCAD相结合,成为AutoCAD的一个新实体,扩充了AutoCAD的绘图功能,运行该程序时,可进行交互输入产生所需的图形,实用方便。通过计算机的图形显示,可以表达出这些无限嵌套的精细内容,使分形之美充分的体现出来,有利于分形理论的发展;同时将分形图形放到了AutoCAD的图形编辑器中,如虎添翼,十分快捷方便。有望成为设计师的好助手,具有潜在的商业价值。尤其在当前,创意制作,平面设计,图案造型设计非常流行的时代,当设计师四处寻找艺术灵感,自感江郎才尽时,这些令人叹为观止的分形图案,定会使人耳目一新。而参数化技术使得使用者不必去考虑望而生畏的数学理论、计算机算法和程序。作为普通人,也可以创作出独具特色的艺术图形。可以肯定分形图案在自然界真实物体模拟、仿真形体生成、计算机动画、艺术装饰纹理、图案设计和创意制作等具有广泛的应用价值。
参 考 文 献
[1] 齐东旭. 分形及其计算机生成[M]. 北京: 科学出版社, 1994.
[2] 郭冬梅. 计算机分形图形技术的研究[J]. 计算机应用, 2000(增刊): 47~49.
[3] 贾瑞玉. 分形几何在图案造型设计中的应用[J]. 安徽大学学报(自然科学版), 1999(3): 67~70. [4] 陈昭炯. 一个实用的分形CAD系统设计[J]. 福州大学学报(自然科学版), 1999(2): 15~18.
The Realization of Parametric Design for Fractal
Graphics in AutoCAD
GUO Dong-mei Liu Guangwu
(The 8357 Research Institute of the 3rd Research Academacy of CAMEC, Tianjin 30014, China)
SUN Lan-feng
(Tianjin University, Tianjin 300072, China)
Abstract: This paper introduces the technology of parametric design for fractal graphics. Using ObjectARX to develop application programs for second development in AutoCAD, so as to vitalize it in a practical design system directly. An example shows an application to this realization process.
Key words: fractal; parametric design
因篇幅问题不能全部显示,请点此查看更多更全内容