图形编辑(精选8篇)
图形编辑 篇1
0 引言
GEF是流行的开源框架,可为模型提供图形化表示和编辑环境。可用于创建状态图、类图、GUI软件和流程图等应用[1]。
1 GEF抽象机制与设计模式
1.1 MVC体系结构
MVC是一种通用的Web应用体系结构。模型(Model)代表数据,是持有业务数据的对象,是用户要实施的或在遗留系统中已经存在的。模型必须拥有某种通告机制。视图(View)负责在界面上呈现数据,定义了在屏幕上的显示,用户要能用鼠标和键盘修改视图。
模型和视图分别实施,相互没有依赖,这有利于重用。视图是模型状态的函数,是模型的图形化表示。通过控制器(Controller)实施模型和视图之间的唯一关联。控制器定义了在视图改变时模型的响应机制、在模型改变时视图的响应机制,负责处理用户输入并根据模型刷新视图。通过定义控制器和视图之间的接口,视图更新方便。用户在图形界面上操作触发对模型的修改,模型变化触发了视图更新。
1.2 GEF与MVC的映射
GEF框架基于MVC结构解除用户界面、行为和表示之间的耦合。包括如下组件:GEF包的palette工具为用提供编辑能力、请求(Request)/命令(command)提供基于Redo/Undo方式的编辑机制;Draw2d包提供绘制图形功能。
模型由用户定义,可用Java对象表示,也可用Eclipse建模框架(EMF)构造。
GEF的图形表示经由Draw2D框架完成,即把用Draw2d创建的Figures映射到MVC的视图。视图要用类org.eclipse.draw2d.Figure的createFigure()方法创建。Figure用于在GraphicalViewer中显示图形,TreeItems用于在大纲TreeViewer中显示信息。
图形编辑功能基于GEF包,实施org.eclipse.draw2d.IFigure中的Ifigure接口。
MVC的控制器映射到GEF的EditParts,用以显示模型的图形编辑器、EditPolicies和用户定义的控制器(侦听器)。通常选择GraphicalEditPart为控制器。
EditPart了解模型和视图。模型侦听器要注册在EditPart.activate()中,而注销则要在EditPart.deactivate()中实现。若检测到模型发生了变化,则要相应地更新视图。Editpart#isActive返回控制器的当前状态。
GEF利用MVC的优势体现在每个Figure都有其EditPart,EditPart通过EditPolicy修改模型。
GEF提倡MVC的1:1映射,但也能实现一个模型对多个控制器,此时需要额外责任以保持控制器和模型同步。
1.3 GEF的几种常用设计模型
GEF通过使用设计模式实现其灵活性和扩展性。GEF最常用的设计模式是命令、工厂、观察者、职责链和状态[1,2]。
命令:用来封装修改模型的指令,是GEF修改模型的机制。通过继承抽象类Command,提供Redo/Undo功能。该类具有execute()、undo()和redo()和canExecute()方法。用canExecute()方法得到反馈以确认操作是否许可。
工厂:工厂方法模式用于创建Figure、抽象工厂模式用于创建EditPart。
观察者:是一种对象行为模式,监听模型和视图的控制器就是典型的观察者。
职责链:用来决定处理请求(Request)的编辑策略(EditPolicy)。通过将Request传递给多个对象,并给这些对象处理请求的机会,从而将请求的发送者和接受者解除耦合。多个编辑策略可以收到请求和返回命令。这些命令是以链方式组织的。
状态:对于键盘、鼠标输入,GEF编辑器通过选择工具来选择行为。允许Graphical Editor在内部状态发生改变时修改编辑器的行为。用户切换工具可以改变编辑器的状态。
2 GEF的关键技术与事件流
2.1 GEF关键技术
Draw2D是基于eclipse的SWT的标准2D绘图框架,是一个轻量级图形系统,寄生于某个重量级控件中,其目的只在于显示对象,而不储存和管理任何数据。GUI由Draw2d Figures树定义,可用parent.add(child)把figure添加在父节点下,也可用parent.remove(child)从父节点删除子节点。Figure类实施Ifigure接口,该接口可用于在需要figures属性的情形。
EditPartViewer,在SWT控件上为每个模型安装一个视图。模型可有多个视图,每个视图都有其EditParts和Draw2dFigures。EditParts组织成树型结构,其根是RootEditPart。
EditPartFactory,定义EditPart与具体模型的相关性。
命令栈(CommandStack),实施Redo/Undo功能,每个编辑域都有其命令栈。命令通过命令栈调用execute()执行。
工具面板(Palette),用PaletteViewer为用户展现的工具。用户可使用PaletteViewer选择活动工具(ActiveTool)。由EditPartViewers为编辑域(EditDomain)派遣的事件都被转发给活动工具。
编辑策略,对模型的行为被重构为编辑策略。编辑策略为EditParts带来了编辑功能。编辑策略定义了要用EditPart完成的工作。对一控制器可有多个行为,每个编辑策略被赋予一角色(Role)。编辑策略可动态安装和删除。GEF内部通信通过转发给编辑策略的请求实现。
请求与响应,把用户操作视同为请求。在调用语境下理解请求。语境由活动工具(由用户从工具面板中选择)决定。用户使用工具产生请求。把该请求移交给选中的editpart,后者则返回一个命令。这可通过对编辑策略实施责任链实现,编辑策略确定能否处理请求,若不能则传递给下个编辑策略。其声明顺序即为请求被传递的顺序。有能力的编辑策略随即创建命令。该命令被返回给那个启动请求的工具。命令的执行引起对模型的修改(响应)。获得此效果的另一机制是用程序创建请求并传递给Editparts,产生的命令随后在命令栈中执行。
2.2 GEF事件流
如图1所示,GEF事件流如下:
(1)用户通过鼠标和键盘与编辑器交互,点击相关可视化控件,产生事件;
(2)SWT控件捕获到键盘或者鼠标的事件,在传递到EditPartViewer处理后,继续将事件传递给EditDomain处理,然后转发给PaletteViewer中的活动工具。参考SWT的Canvas接口(SWT Events)、GraphicalViewer和IFigure接口(实现类为GraphicalViewerImpl,Figure)、Draw2D的LightWeightSystem,Events、EditDomain类以及SelectionTool,SelectEditPartTracker类(其超类为TargetingTool类);
(3)活动工具注释该事件序以构造请求,GEF用请求说明对模型要执行的操作,参考SelectionRequest类;
(4)活动工具把请求提交给编辑策略,EditParts把请求转发给编辑策略,比编辑策略用于为请求构建命令并做出反馈响应,参考AbstractEditPart的performRequest()方法,AbstractGraphicalEditPart类;
(5)在从EditPart获取到命令后,活动通过命令栈(CommandStack)执行命令,命令栈是实施Redo/Undo功能的机制,参考CompoundCommand类;
(6)命令栈执行命令(execute),同于修改模型,进而更新视图。
被GraphicalViewer安装在控件之上的Draw2d使用EventDispatcher,后者把得到的事件传递给Draw2d。若该事件被Draw2d消费,则该过程结束(事件类中有检测事件是否被消费的方法),否则,被转送给编辑域,进而被转发给活动工具。
3 一种基于GEF的图形编辑器
GEF开发的软件可作为Eclipse的插件。要开发脱离Eclipse平台的独立软件运行,可实施为Rich Client Platform(RCP)。图形编辑器构造实例如图2所示。
图形编辑器实施步骤是,首先,创建模型XXXModel;其次,创建模型对应的控制器XXXEditPart;第三,创建EditPartFactory,在其中连接模型和控制器;第四,在编辑器中创建GraphicalViewer并显示图形。
t图形编辑器实例具体实施过程如下。把GEF建立在RCP上,代码src包有gef.tutorial.step包,其中有如下类:Application、Perspective、ApplicationActionBarAdvisor、ApplicalicationWorkbenchAdvisor、ApplicationWorkbenchWindowAdvisor和Acrivator。
在代码包src中增加如下程序:放置视图相关类的gef.tutorial.step.ui包、放置模型相关类的gef.tutorial.step.model包、放置控制器相关类的gef.tutorial.step.editparts包、放置种命令相关类的gef.tutorial.step.commands包、放置策略相关类的gef.tutorial.step.policies包、放置编辑器相关类的gef.tutorial.step.actions包、放置图标静态变量相关类的gef.tutorial.step.helper包。
这种编辑器的各模块的角色定义良好:模型存储业务数据,视图展现数据,控制器实施前两者的绑定逻辑,有利于编写清晰的代码。
4 结语
GEF可用于编辑任何模型,包括用Eclipse Modeling Framework(EMF)构造的模型。Graphical Modeling Framework(GMF)为使用或扩展基于EMF模型的GEF提供了简易的基础设施。
摘要:GEF可用于模型开发图形化表示和编辑环境。本文分析了GEF与MVC映射机制,研究了GEF设计模式,探讨了其关键技术和事件流,介绍了一种基于GEF的图形编辑器。本研究有助于实施基于GEF的编辑器。
关键词:GEF,映射机制,设计模式,关键技术,事件流
参考文献
[1]Eclipse Project[EB/OL].www.eclipse.org/gef/.
[2]邵兵,石立川,王晗.GEF框架中的设计模式[EB/OL].IBM developer Works.www.ibm.com/developerworks/cn/opensource.
图形编辑 篇2
实例3 编辑多线
Step 1 打开图形文件
启动AutoCAD 系统,打开第6章中创建的实例文件“exam6-4.dwg”;
Step 2 隐藏辅助线
建立一个名为“xline”的图层,并将所有辅助线的图层改为“xline”,然后关闭该层。
Step 3 编辑多线
选择菜单【Modify(修改)】→【Object(对象)】→【Multiline…(多线)】,系统将弹出“Multiline Edit Tools(多线编辑工具)”对话框,如图7-14所示。
用户可在该对话框中单击图像控件,则对话框底部将显示其描述。选择其中的“Merged Tee(T形合并)”项,并单击OK按钮退出对话框,并进行如下操作: Command: _mledit
Select first mline:
//选择某个“T”形相交的多线(相当于“T”的竖线部分)
Select second mline:
//选择与其相交的另一条多线(相当于“T”的横线部分)
Select first mline or [Undo]:
//连续进入如上操作
当完成所有“T”形连接的修改后,我们就最终完成了全部的绘制工作,最终结果如图7-15所示。
Step 4 保存文件
将以上所做的修改保存下来。
实例说明
多线编辑命令的调用方式为:
工具栏:“Modify II(修改 II)”→
菜单:【Modify(修改)】→【Object(对象)】→【Multiline…(多线)】
命令行:mledit
调用该命令行,弹出“Multiline Edit Tools(多线编辑工具)”对话框,其中提供了12种修改工具,可分别用于处理十字交叉的多线(第一列)、T形相交的多线(第二列)、处理角点结合和顶点(第三列)、处理多线的剪切或接合(第四列)。下面分别介绍如下:
(1) “Closed Cross(十字闭合)”:在两条多线之间创建闭合的十字交叉。
(2) “Open Cross(十字打开)”:在两条多线之间创建开放的十字交叉。AutoCAD 打断第一条多线的所有元素以及第二条多线的外部元素。
(3) “Merged Cross(十字合并)”:在两条多线之间创建合并的十字交叉,操作结果与多线的选择次序无关。
(4) “Close Tee(T形闭合)”:在两条多线之间创建闭合的 T 形交叉。AutoCAD 修剪第一条多线或将它延伸到与第二条多线的交点处。
(5) “Open Tee(T形打开)”:在两条多线之间创建开放的 T 形交叉。AutoCAD 修剪第一条多线或将它延伸到与第二条多线的交点处。
(6) “Merged Tee(T形合并)”:在两条多线之间创建合并的 T 形交叉。AutoCAD 修剪第一条多线或将它延伸到与第二条多线的交点处。
(7) “Corner Joint(角点结合)”:在两条多线之间创建角点结合。AutoCAD 修剪第一条多线或将它延伸到与第二条多线的交点处。
(8) “Add Vertex(添加顶点)”:向多线上添加一个顶点。
(9) “Delete Vertex(删除顶点)”:从多线上删除一个顶点。
(10) “Cut Single(单个剪切)”:剪切多线上的选定元素。
(11) “Cut All(全部剪切)”:剪切多线上的所有元素并将其分为两个部分。
(12) “Weld All(全部接合)”:将已被剪切的多线线段重新接合起来。
小 结
本章介绍了如何利用夹点和编组来对图形进行编辑,从而使编辑操作更为灵活。
使用快速选择和对象过滤器可以对选择集进行过滤,以便去掉不符合过滤条件的对象。
当多个图形对象重叠在一起时,用户可以改变它们之间的显示和打印次序。
此外,针对填充图案、多段线、样条曲线和多线等对象,AutoCAD均提供了相应了编辑命令来进行修改。
图形编辑 篇3
教学方法:教与学一体化, 即一体化教学。
教学场地:计算机机房, 即讲与练结合。
教学过程:如下。
1 新课的引出
良好得导入新课, 如同桥梁, 联系着旧课与新课, 导入新课乃整个课堂教学的准备程序, 对这一环节的精心设计, 巧妙安排和恰当应用, 可以起到先声夺人的作用。新授内容与学生已学内容有着密切联系, 教师应有针对性地引导学生复习已学知识, 在此基础上, 再经教师启发, 点拨, 使“复习”到“新授”过渡得自然、连贯。
编辑命令是在讲完二维绘图命令后进行, 作为复习二维图形的需要, 首先让学生绘制出正三边形, 如图1, 然后老师绘出一个带倒圆角的正三边形, 如图2, 让学生比较1、2图的不同点, 并指出实际生活中倒圆角的应用非常广泛, 再让学生画相交的二条水平线与二条垂直线, 如图3, 提问学生如何变为图4的图形, 由此引出倒圆角、修剪命令的概念, 引出编辑命令的讲解, 即由问题引出新课。
2 根据图例要求确定编辑命令的学习顺序
CAD软件中编辑命令的顺序为:删除、复制、镜像、阵列、移动等, 教材中都是按先后顺序介绍命令的执行过程, 如果照书本讲命令的操作过程, 学生感到枯糙、又不知道如何应用、课堂沉梦, 因此, 作为教师应精心组织教学过程, 灵活讲解编辑命令。本讲课在引出新课后, 按如下顺序讲解各个命令, 达到了教学目的。
(1) 以上由图1到图2首先给学生讲解圆角命令的操作过程, 即执行下拉菜单:修改—圆角—R—回车—指定倒圆角半径—回车—指定第一倒角边—指定第二倒角边, 完成一个倒圆角。后两个圆角让学生自己练习完成。
(2) 下一步要求将图形2变为图形5, 让学生从修改命令中根据字面理解应该用哪个命令, 学生很容易判断出用偏移命令, 此时给学生讲偏移命令的操作。即执行下拉菜单:修改—偏移—指定偏移距离—回车—指定偏移对象—指定偏移方向。
(3) 下一步要求将图形5变为图形6, 学生从编辑命令中很容易想到用镜像命令。即执行下拉菜单:修改—镜像—指定镜像对象—回车—指定镜像线的第一点—指定镜像线的第二点—选择是否删除原对象 (此时选择N) —回车。
(4) 下一步要求将图形6变为图形7, 必须用修剪命令。即执行下拉菜单:修改—修剪—选择修剪边界 (此时可以将所有图形全部选中) —回车—选择修剪对象。讲完修剪命令后, 再让学生用删除命令试一试, 使学生很容易理解修剪与删除的应用与区别
这样根据图形的变化一步一个命令, 比按下拉菜单中的顺序讲编辑命令效果好, 而且能激发学生的学习欲望, 也培养了学生根据实际问题选择命令的能力。
3 兴趣教学贯穿在教学中
当完成了上述操作后, 学生感到很兴奋, 此时再让学生将两个三角带填充为不同的颜色, (颜色可由学生自定) , 即复习图案填充方法, 再将一个图形变为两个, 学习复制命令。将复制出的另一个图形比例缩放为0.5, 学习缩放命令。如图8所示。将缩小为0.5的图形环形阵列为6个, 学习环形阵列方法, 如图9, 也可将缩小为0.5的图形矩形阵列为2行2列, 如图1 0所示。这样在图样的变化中、又学习了复制、缩放、环形阵列与矩形阵列方法, 图形的变化具有很强的目的性、针对性、和一定的趣味性。
4 在练习中提高绘图编辑技能
以上图例的完成是通过教师的操作、演示并让学生与老师一步一步共同完成, 在整个绘图过程中, 教师与学生一直在互动交流, 真正体现学生主动参与, 这样能使学生以最快的速度知道各个编辑命令的功能, 并立竿见影见到了效果, 此时再让学生自己完成一个综合的图形, 如图11, 并将图形变化为图12、图13。既复习了编辑命令, 又提高了绘图编辑技能。课内练习图例的设计要有代表性、针对性、趣味性。并应用到所学到的编辑命令, 以巩固编辑命令操作方法。
要熟悉掌握编辑命令还有一定的过程, 一个重要的环节是上机作大量的图例练习, 练习图形应该用到较多的编辑命令、并且是有趣的图形, 这样就把枯燥的命令与有趣的图形结合起来, 调动了学生的积极性。在练习中、要求学生灵活应用编辑命令、仔细看命令行的提示, 并培养学生用多种方法来完成一个图形的能力, 在实际中灵活应用编辑命令, 提高思维能力、动手能力。
总之、AutoCAD是一门实际性很强的课程, 要讲好CAD编辑命令, 二维绘图命令要掌握好, 教师要作到备课的精心, 方法的科学, 组织的严密, 还要精心地设计出一个综合有趣的并能应用到多数编辑命令的图形, 并注意一堂课前后的连贯性, 备课时作到心中有数。并让学生做一类似的综合练习图, 达到基本上掌握编辑命令的操作方法, 课后还要有较多的时间上机练习才能熟悉编辑命令, 这就要求教师设计一本好的上机指导书, 把要学习的命令融入到具体的练习中、练习中的图例要有知识性、趣味性、实用性, 使学生进一步巩固、熟悉各种命令的实际应用及操作过程, 整个教学过程强调学以致用, 这些都需要教师精心设计, 合理安排, 以达到良好的教学效果。
参考文献
[1]徐亚娥.AutoCAD 2006上机指导与练习[M].西安电子科技大学出版社, 2007, 3.
图形编辑 篇4
摘 要 该文介绍了一种建立在DOS界面下生成图素文件的通用图形编辑程序的设计方法。
目前用作DDC的PC总线工控机(IPC)大部分工作在DOS界面上,而DOS不具有像Windows那样美观方便的图形用户接口(GUI)。生成工艺流程图等复杂图形若用程序设计语言直接编程需花费大量精力和代码,且不易修改。设计出数据文件小,占用内存少的图形编辑软件是控制界的一个研究课题。这里介绍一种生成图素数据文件的通用图形编辑软件的设计方法。
一、数据结构与数据文件格式
由于所有的操作都基本建立在图素的基础之上,故数据结构也以图素为中心。以下以圆、直线、矩形、字符串为例,其它图素类似。
1.定义所需图素
struct circle /*定义圆 */
{
int x,y,r; /* 圆心,半径 */
char linecolor,linestyle; /* 圆外围线的`颜色,线型 */
char fillcolor,fillstyle; /* 填充颜色,模式 */
};
struct line /* 定义直线 */
{
int x1,y1;
int x2,y2;
char linecolor,linestyle,linethick; /* 线颜色,模式,粗细 */
};
struct box /* 定义矩形 */
{
int x1,y1;
int x2,y2;
char linecolor,linestyle;
char fillcolor,fillstyle;
};
struct string /* 定义字符串 */
{
int x,y;
char str[10]
char backcolor,dir;
char str-color,str-style;
};
.
. /* 定义其它图素 */
.
2.将各图素置于一条链表之中
typedef struct tagElementList
{
char ElementType; /* 标识元素类别 */
int ElementID; /* 元素标识符,在接口中用来控制其属性 */
union tagElement {
struct circle circle;
struct box box;
struct string string;
struct line line;
.
. /* 可在此说明其它元素 */
.
}Element;
struct tagElementList *next;
}ElementList;
利用这种数据结构可在内存中形成一个图素链表,所有操作都可以此链表为基础。
3.定义几个指针,以备各种操作
ElementList *List-head. *List-end,*List-temp, *List-here;
4.定义一个全局变量,记录图素个数
static int Elementcount=0;
图形文件格式为:第一字节(char),表示整个图形的背景颜色;接下来一个字(word),对应于Elementcount,表示图素个数;后面是内存链表中每个图素的属性值。
二、图形编辑功能的实现
本软件包含的图形编辑功能主要有:作图、修改、移动、删除、复制,下面仅举几例说明实现的方法。
1.作图
以圆为例,其它图形类似。
drawcircle
{
int i;
char s[20],c;
int cx,cy,cr;
int cls,clc,cfc,cfs;
movecursor(); /* 移动光标,确定圆心 */
cx=cursor-x;
cy=cursor-y;
movecursor(); /* 确定半径 */
cr=(int)sqrt((cursor-x-cx)*(cursor-x-cx) (cursor-y-cy)*(cursor-y-cy);
setcolor(WHITE);
circle (cx,cy,cr); /*
图形编辑 篇5
在教学中使用动态绘图有着静态绘图无法比拟的优点, 然而在Flash中如何使这些用程序绘制的图形可以用鼠标选中并再次编辑呢?解决这一问题可使其交互性进一步提高。现以绘制函数图像的具体实例说一说在Flash中如何实现动态图形的选中与编辑。
实例最终效果:制作一个可以精确绘制数学函数图像的Flash, 可以任意添加函数图像, 用鼠标单击其中一个函数图像时可选中相应的图像, 并且可以对其进行删除或再编辑等操作。
2 设计思路
(1) 创建基类为“Movie Clip”的类, 在类中定义存储函数参数的变量并编写画函数图像的函数。
(2) 每添加一个函数图像创建一个相应类的对象, 当改变函数的参数信息时, 由对象中的绘图函数绘制出函数图像, 同时将参数信息保存到对象中的相应变量里。
(3) 创建对象的同时为其添加需要的鼠标侦听事件。
(4) 当鼠标单击这些动态图形时, 通过重绘不同颜色的函数图像达到选中的效果, 同时将对象中变量保存的函数参数信息返还给相应的组件, 这样就可以对这些动态图形再次进行编辑了。
3 实现过程
3.1 准备工作
首先启动Adobe Flash cs4创建一个新的Flash Action Script3.0文件, 使用默认的舞台大小550×400, 在用程序绘制动态图像前, 先用Flash绘图工具制作界面和一些静态的图形, 这样可以简化程序, 当然在制作的过程中也要使用一些技巧才能使这些静态图形快速绘制完成并与程序绘制图形准确的结合。
(1) 绘制坐标系和网格线
以窗口坐标系上的点 (275, 200) 为坐标原点绘制直角坐标系, 并绘制上网格, 如图1所示, 此步使用属性面板和对齐面板可轻松完成, 注意每个两个刻度间的长度都是20个像素, 因为后面动态绘图是以20个像素为一个单位长度, 当然也可以只画坐标系或都不画, 并不影响动态图形选中与编辑效果的实现。
(2) 绘制界面
锁定原有图层, 在上层添加一个新图层, 绘制如图2所示的界面, 图2中间网格部分是下层内容的。单击关键帧选中本层所绘制的界面, 按F8将其转换为影片剪辑元件, 名称为“界面”, 再按“del”键将其删除。
(3) 在“界面”元件中添加内容
插入一个影片剪辑元件, 名称为“抛物线方程”, 用文字工具输入文字, 插入3个Numeric Stepper组件, 实例名称分别为:a1, b1, c1。
在属性面板中对3个组件实例的参数都设置如下:
maxmum:10;minmum:-10;step Size:0.1;value:0。
打开“界面”元件, 将“抛物线方程”元件拖入其中, 摆放到合适的位置, 实例名称为:pwxfc。
在适当的位置插入3个“Button”组件, 在属性面板参数中将其“Label”值分别设为“添加抛物线”、“确定”和“删除”, 实例名分别为:add_pwx、ok和shanchu。如图3所示。
(4) 打开库面板, 右击“界面”元件, 在快捷菜单中选择“属性”, 在元件属性中设置类为“jm”。
(5) 以“动态图形的选中与编辑.fla”为文件名保存。
3.2 编写动态绘图程序
(1) 新建一个“Action Script”文件, 保存为“pwx_mc.as”, 与“动态图形的选中与编辑.fla”放在同一文件夹中。
在其中输入如下内容:
(2) 打开“动态绘形的选中与编辑.fla”在其第一帧上输入语句如下:
图形编辑 篇6
关键词:文档串行化,图像保存
1 曲线属性的保存原理
将曲线的属性进行保存,其实是将曲线的坐标值,以及各条曲线所在的道,每个道的属性设置等保存成文件,写入磁盘中,再打开时,将磁盘中的文件打开,然后将文件中对应的数据读出来,并赋值给程序中的对应变量,再调用OnDraw函数刷新客户区绘制图形即可。
使用CArchive类对文件进行读写操作,可以实现文件的保存和再编辑功能。CArchive类将对象数据保存到永久设备上(比如磁盘)的过程叫串行化。一个CArchive类对象与一个文件相关,CArchive重载了操作符<<和>>,他们既支持基本的数据类型(如int,float,),也支持CObject类的派生类,为用户提供了非常方便的编程接口。
下面说明使用CArchive类来实现文件保存的原理:
首先,在菜单栏的文件栏中新建一个子项ID_FILE_SAVE(文件保存),当用户点击这一项时,弹出保存对话框,输入要保存到的文件的名称,按确定键后,系统会自动调用文档文件中的Serialize(CA rchive&)函数,并自动将刚刚输入的文件名与ar对象关联,if(ar.IsStoring())
{ar<<m_curvenumber<<……//如果是文件保存,则将数据保存到ar关联的文件中。}
else
[ar>>m_curvenumber>>……}//如果是文件的打开,则将数据从ar关联的文件中取出赋值给程序中对应的变量。
2 曲线属性保存的具体实现方法
下面具体说明,如何对曲线属性进行保存。要保存曲线的属性值,需要保存的关键数据如下:绘制测井曲线的数据源CA rray<double,double>DataArray,测井数据转化为设备坐标后的值CArray<double,double>DataArraytemp,测井数据对应的曲线属性StruCurvePage,坐标属性StruA xisPage,及道属性StruDaoPage,其中StruCurvePage,StruAxisPage和StruDaoPage为动态的结构体数组,定义如下:
CURVEPAGE,和PSTRUAXISPAGE为_自定义的结构体类型,因为CArray的基类为CObject,已经对Serialize函数进行了重载,所以不必重新定义,但是自定义的结构体类型,要实现串行化需要重载Serializ函数,以结构体STRU_AXISPAGE为例说明如下:
如下图为双感应测井曲线保存前和保存后再次打开的图形,可以看出打开后的图形与之前保存的完全相同。
3 总结
本文主要讲述了如何利用VC++的文档串行化技术实现测井曲线的属性保存到磁盘,事实证明这种方法简单易操作,并可以完美的达到预想的结果,可以应用到测井软件的开发中。
参考文献
[1]孙鑫,余安平.VC++深入详解[M].电子工业出版社:662-669.
[2]潘爱民,王国印.Visual C++技术内幕(第四版)[M].清华大学出版社.481-482.
图形编辑 篇7
关键词:Eclipse,GEF,MVC,图形编辑器,业务模式
在不同的行业类型、领域当中,客户的需求也存在差异,分析不同领域客户的需求得出功能需求,将后者封装为一个个的组件,把它们组织为规则进行调用。即流程就是从不同行业客户需求得到相应行业的领域模型,制定出本行业对应的业务模型。简言之,业务模式就是企业业务的一种描述方式,将企业业务需求封装为一个个的规则和方法,进而将它们以程序开发方式进行描述。目前多数企业中所谓的业务模式应该都已规则化,但是业务模式大量的规则和方法不仅使开发人员耗时而且总会不可避免的出错。为了减少软件开发的出错率,从而提高软件开发的速度,进而对业务模式进行可视化配置。GEF图形编辑器是Eclipse平台中用于开发图形编辑插件的框架,可为模型提供图形化表示和编辑环境,因此,基于GEF设计了业务模式图形编辑器。
1 Eclipse简介
Eclipse是由多家软件开发公司参与设计、研发和推广的集应用程序框架、开发环境、运行时于一体的可扩展的多功能系统。而从本质上来看,Eclipse就是一个基于Java语言开发的一个框架和一组服务,用于通过插件组件构建开发环境,通过开发插件,Eclipse能扩展到任何语言的开发,甚至能成为图片绘制的工具。
平台(Platform)平台运行库是Eclipse内核,启动时检查已安装插件,并创建关于插件的注册表信息,为降低启动时间和资源使用,平台在实际需要任何插件时才加载该插件。除了内核外,其他所有功能都是作为插件来实现。
工作区(Workspace)工作区是负责管理用户资源的插件。这包括用户创建的项目、那些项目中的文件,以及文件变更和其他资源。工作区还负责通知其他插件关于资源变更的信息,比如文件创建、删除和更改[1]。
2 MVC设计模式以及GEF架构简介
模型-视图-控制器(Model View Controller,MVC)把软件系统分为3个基本部分:模型(Model)、视图(View)和控制器(Controller)[2,3]。模型代表应用程序的数据和用于控制访问和修改这些数据的业务规则,用户是看不到模型的,模型需要通过视图被展现给用户,所以用户直接操作视图,然而视图也仅仅是对数据进行采集以及提供客户的请求,不负责处理业务流程,后者是模型的责任。控制器在MVC设计模式的角色就是将模型和视图联系在一起,它也不处理业务信息,它将用户的请求转发给模型,让模型知道客户的请求是什么,然后模型根据客户的请求返回给用户想要的视图。在MVC模式中模型和视图是存在依赖的,它们之间是多对多的关系。
GEF (Graphical Editor Framework)是Eclipse平台下的图形编辑插件,可用于为已有的应用创建一个图形编辑器界面。GEF运用基于SWT绘图插件Draw2d在Eclipse中创建图形环境。利用GEF提供的公共方法或者在特殊的领域下可以扩展它们。GEF使用能简洁地改变应用于视图模型的MVC架构。GEF的设计目标就是减少存在于视图和模型之间的关系。这样做的好处是可以根据需要任意对模型和视图进行组合,根本不受使用框架的限制,GEF的控制器就是指EditPart,它是GEF的核心部分,一方面要负责将模型的改变通知给视图;另一方面还要将用户在视图上进行的操作传递给模型。GEF是一个能为大多数程序提供链接和构造基础的完整应用。包括但不仅限于:流构造器、图形界面构造器、UML图表编辑器(例如流程图和类图),以及似于HTML的所见即所得的文本编辑器[4,5]。
GEF框架的总体结构如图1所示。
3 业务模式图形编辑器的设计与实现
图形编辑器可以用来创建和编辑简单的图形,它可以对两类图形对象进行操作,长方形和椭圆形。可以使用两种连接类型(实线连接和虚线连接)之一来连接任意的两个图形对象。每个连接都是直接连接,简单地说就是起始于一个源对象,在目标对象上结束。并且,每个连接的方向由箭头标出[6]。图2是根据业务模式内容设计出的图形化管理工具,GEF与Eclipse平台的整合使得编辑器运行环境的风格和Eclipse平台的开发环境是相同的:菜单工具栏、项目结构区、编辑区、以及提示区等,如图2所示。
3.1 图形化工具的功能
“工具”里提供“流程定义”、“数据定义”、“服务定义”和“视图定义”。
(1) 流程定义:
封装了业务流程的操作状态以及状态之间的相互转换。
(2) 数据定义:
包括全局数据对象和附加数据对象,封装了业务模式中的主要数据。
(3) 服务定义:
包括命令对象、记录对象、查询织入对象和编辑织入对象,封装了业务流程中要执行的命令操作和对日志和报表等其他附加操作。
(4) 视图定义:
包括查询结果视图、查询条件视图和编辑视图,封装了要展示的视图定义和设计。
3.2 图形化工具设计方案
文中提出的基于GEF框架的业务模式主要有模式数据、模式视图和模式控制器3大部分组成。其中数据和视图部分没有直接联系,是通过控制器间进行通信。为了减轻控制器的负担,采用请求和编辑策略及命令模式,使每个部分保持最小的依赖关系,从而可以达到松耦合的目的[7]。
3.2.1 数据部分
数据是根据业务模式中的规则和逻辑来设计。它被封装在业务模式的XML文件中。基于不同要求的数据分别设计了对应的流程定义模型、数据定义模型、服务定义模型和视图定义模型等子模型,并将它们抽象为节点模型。模型对应的业务处理流程相对于其它层来说是黑箱操作,用户在视图上的各种操作请求会被发送给控制器,由控制器根据请求类型通知模型调用相应的操作方法,并根据最终的处理结果刷新视图[8],在此把侦听器侦听属性的行为抽象到父类当中,因此,定义一个实现PropertyChangeListener 接口的AbstractNodeModel 类,并将AbstractDiagramModel作为所有图形及连接的根对象,该类封装了模型中一些公用操作,在里面可以注册和删除属性变更监听器,所有其他的模型对象继承它即可。在模型编辑器中还有表示图的Diagram和连接的Connection。
3.2.2 视图
视图是对XML文件中数据的展示。在设计的业务模式图形管理工具中,每个模型对象都对应自己的视图,平台总视图由PlatformManView类实现,模型对象对应的视图由WizardDialog类创建并实现图形的显示、布局和编辑。编辑区是视图展示和修改的主要区域,根据业务模式的需要可以新增或者删除节点模型对应的视图,所有模型的属性以及与其它模型的关联关系都是在编辑区进行修改。
Connection模型对应的视图直接用draw2d中的PolylineConnection类实现。视图并不和Model直接打交道,而是通过控制器与Model进行交互。模型要被作为事件源,控制器作为监听器注册到模型中,模型发生变化通过控制器进行刷新视图。
3.2.3 控制器
控制器负责对XML文件进行读取、修改和删除等操作。在GEF中控制器其实就是EditPart,EditPart又是由许多编辑策略(EditPolicy)组成的[9]。这些策略类是注册在控制器当中,当用户发出请求命令时,会根据不同的角色把请求分给特定的EditPart中注册的编辑策略,在编辑策略里有接口getCommand,可以创建Command对象,由该对象直接修改模型。而每一个模型与EditPart又是一一对应的,编辑器会根据不同的模型通过实现工厂类EditPartFactory从而创建不同的EditPart对象,每个EditPart对象中都有activate()方法和deactivate()方法,分别用来将控制器注册到模型和将它从模型中取消注册。这样当模型发生变化时,就会触发事件通知控制器,控制器根据不同的事件进行刷新视图。从而实现了模型与视图没有任何的依赖关系却可以保持一致,这也就是所说的控制器就是模型和视图的双向通道。关键部分UML类图如图3所示。
4 设计过程中的其它功能组件的开发
基于Eclipse平台,java类实现的功能组件的开发很多,在此简要说下在图形编辑器实现过程中对服务组件的查找功能,编辑每个视图时都有选取控制类或者行为类的操作,当单击行为类属性窗体的按钮时,会弹出选择所需控件的对话框,此时会把XML文件中对应的类给选中,如果发现不是此类,则要单击旁边的选择自定义组件按钮,此时会列出XML文件中定义的所有操作类,选中类会在右边显示类的路径和对类的注释。可以找到自己要添加的行为类。具体实现过程:在类ControlLib_SelectControlDialog中创建AbstractTre类的组件库树对象,通过参数配置使该对象会引用ControlLib.xml文件中的关键类将首选类显示到对话框当中,当单击自定义按钮时会调用BeansTypeHierachy类进行自定义组件库的查找,创建IJavaSearchScope对象调用对应XMl中的自定义类。图形展示如图4所示。
5 结 语
基于Eclipse开发平台和MVC模式的GEF框架,结合Java类实现功能组件的开发,将业务模式内容进行图形化管理,增强了和用户的友好性,使得用户从繁琐的容易出错的xml文件编写任务中解脱了出来,另外,由于该编辑器使用Eclipse 插件的形式开发,使得用户不用切换开发环境,即可进行图形的编辑操作[10]。他们只需在编辑器中创建需要的视图对象、编辑属性等。这不仅缩短了开发周期,也创造更多的应用价值。
参考文献
[1]胡博,朱建彬,杨荣,等.基于GEF框架的本体图形编辑器的设计与实现[J].武汉科技学院学报,2008,21(6):10-14.
[2]百度百科词条:MVC模式[EB/OL].[2010-07-21].http://baike.baidu.com/view/739359.html.
[3]刘绪斌,王良,闫有朋.Eclipse GEF框架中命令模式的应用研究[J].计算机技术与发展,2010,20(8):100-103.
[4]于希涛.基于Eclipse平台的可视化数据库建模工具的研究与开发[D].青岛:中国海洋大学,2009.
[5]刘冰,施洪杰,王泽生.Eclipse中图形编辑器的研究[J].科技信息,2009(3):74-75.
[6]MAJEWSKI Bo.A shape diagram editor[J/OL].[2004-11-8].http://www.eclipse.org/articles/Article-GEF-dia-gram-editor/shape.
[7]赵晓辉,张璟,李军怀,等.基于GEF框架的报表设计引擎设计与实现[J].计算机工程与设计,2009,30(19):4567-4570.
[8]叶苏南,彭宏,覃姜维.基于MVC架构的数据挖掘平台的设计与实现[J].计算机工程与设计,2010,31(5):1013-1016.
[9]刘佳.基于GEF的可视化编辑器开发[J].软件导刊,2008(7):131-133.
[10]黄飞龙,窦竹梅.基于图形编辑框架的SCA组件编辑器设计与实现[J].计算机技术与信息发展科协论坛,2010(1):57-58.
图形编辑 篇8
嵌入式GIS(Embedded Geographic Information System)是一个蓬勃兴起的应用领域,它是地理信息系统GIS(Geographic Information System)与嵌入式软硬件技术相结合的一个产物,能为各种专用嵌入式设备提供GIS应用平台,使其能对空间数据进行获取、存储、管理、查询、分析、显示,提供决策支持,是原有的GIS领域的分支与延伸、补充与发展。随着嵌入式硬件设备、嵌入式操作系统、导航定位技术以及移动互联技术的不断发展,嵌入式GIS已经被越来越广泛地应用在经济建设和现代化国防中。然而,目前国内以Vx Works实时多任务操作系统作为GIS软件使用平台的研究还很少,在特种运行环境和特种用途的GIS图形编辑的工具型GIS软件还没有,而国内某些行业的特殊工程需要这种工具型GIS软件,因此即时开展这个专题的研究工作就显得十分必要和迫切。
1 GIS图形编辑工具软件总体设计框架
GIS图形编辑软件主要功能可以划分为地图编辑和背景图的操作两部分。地图编辑功能包括:(1)新建、打开、删除、保存、另存为、关闭等;(2)基本图元绘制:点、直线、折线、弧线、圆、椭圆、扇形、矩形、方形、多边形;(3)图元的标注,以及图元特殊标记符的绘制;(4)提供颜色选择、线条选择、线宽选择、填充颜色以及样式选择。背景图功能有:(1)已有背景图加载、图层管理;(2)背景图放大、缩小、开窗放大、漫游,图层分层显示;(3)量算:计算两点之间的距离、方位,多点连线计算距离,计算封闭区域的面积;(4)背景图图元拾取和信息查询、修改、删除等功能;(5)系统配色功能。
系统采用自顶向下的设计方法。对于一张完整的地图,是由很多不同的图层组成的,按照图元的属性可分为点图层、线图层、面图层。点图层又可根据点代表不同的现实意义(功能)建立不同的图层,同理不同的线图层、面图层也代表了用户特殊的功能定义。框架如图1所示。在整个系统设计的过程中,从地图数据保存到读取地图背景图文件、修改、拾取、信息查询都遵循以下拓扑结构。
2 开发环境介绍
2.1 Vx Works
Vx Works[1]是一种嵌入式的实时操作系统,是专门为实时嵌入式系统设计开发的,为程序员提供了高效的实时多任务调度、中断管理、实时的系统资源以及实时的任务通信。在各种CPU平台上提供统一的编程接口和一致的运行特性,因此基于Vx Works操作系统的应用程序可以在不同CPU平台上轻松移植。Vx Works是一个运行在目标机上的高性能、可裁减的嵌入式实时操作系统,以其良好的可靠性和卓越的实时性被广泛地应用在通信,军事,航空,航天等高精尖技术及实时性要求极高的领域中。
2.2 Tilcon
Tilcon[2]是多平台图形用户界面开发工具,其IDS(Interface Development Suite)集成开发环境能够在嵌入式实时操作系统下设计出健壮且交互性极强的“人—机—环”应用软件。由于Tilcon本身已附带大量高性能成熟专业控件,所以软件设计者无需再调用C语言的ugl Line()等绘图函数以画线填充的方式来完成图形用户界面(GUI)设计,设计者可使用拖动控件的方式快速而方便地构建框架资源,最大限度地简化GUI开发过程,而且通过简单地修改控件属性参数就能定制出各种3D风格效果的虚拟仪表窗口面板。
因为采用了矢量引擎等高级图形应用特征,使其图形用户界面和框架程序代码处于相互独立状态,两者之间的驱动数据信息只经由API通信接口函数传递[3],所以GUI开发过程也不会影响到系统的安全性与稳定性,具有极高的可靠度和跨平台特性,适用于Wind River Vx Works 5.5/6.2等嵌入式实时操作系统。
2.3 Tornado
Tornado是基于软总线的开发环境,是一种层次结构,包括Manager、项目工具(Project Tools)、内部总线(Internal BUS)、符号服务器(Symbol Server)和通信服务器(Communication Server)。Tornado[1]是交叉开发环境运行在主机的部分,是开发和调试Vx Works系统不可缺少的组成部分,Tornado的基本目的和工作就是将与操作系统及应用程序运行无关的工作,如编辑、编译、测试、配置等工作与目标机分离开来,使这些工作一方面不会与操作系统争资源,另一方面通过将它们作成一个集成开发环境来方便系统的开发和调试工作。同时由于该集成开发环境与目标机通过统一的接口连接,并为接口提供丰富的API,使得用户可以方便地添加和修改开发工具。
2.4 开发环境的构架
本开发系统的目标机采用安装Vx Works操作系统的x68的PC,用一般的安装XP系统的PC机作为宿主机和开发机,具体框架如图2所示。
Vx Works的开发环境由两部分组成,即运行在主机上的集成开发环境Tornado和运行在目标机上的操作系统本身。Tornado完成应用程序的编辑、编译、调试、系统配置等,Vx Works则是应用程序的最终执行环境,同时Vx Works支持动态下载、调试。Tornado和Target通过以太网连接。
3 系统程序设计
3.1 系统界面设计
本系统的界面界面设计由Tilcon界面开发工具完成。Tilcon界面开发工具为实时应用的人机界面开发提供一套可视化的、功能强大的集成开发包。通过界面开发工具,可以可视化地设计每一个人机界面窗口,所见所得的创建窗口、菜单、按钮以及其它用户界面控件,提供功能全面的窗口和绘图功能。系统中涉及不同的图层,但整个界面设计实际上只有一个背景窗口,也就是说完整的一幅背景图是多个不同的图层叠加的效果,每一个图层都是一个逻辑意义的存在,因此在绘图背景窗口设计时不需要设计多个背景图窗口。部分界面如图2所示,空白区域为绘图区。
3.2 典型程序设计
程序源代码的编辑都是在Tornado环境下进行的,Tornado支持C语言、C++语言以及由Tilcon提供的API函数。整个应用运行机制为:通过监控实时数据[4]、消息响应和点击按钮等与外界进行交互。
Tornado的主函数可以由用户自己命名,本系统的主函数的名字为mapeditor,系统的大概结构如下:
系统的Tilcon控件的外观和消息响应等特征可以在该控件的属性对话框中静态设置,也可以在程序中使用TRT_SetValue(...)函数来设置。整个系统中,每一个Tilcon控件的ID唯一且互不相同,对控件的操作是通过识别ID来进行的。
在任何领域内的GIS软件开发中,对地图文件的读取、保存、放大、缩小、开窗放大、漫游等操作都需要进行频繁的经纬度与像素坐标转换计算。由于我国经纬坐标跨度比较小,本系统采用柱面坐标投影的方式进行转换计算。
4 数据保存
整个系统需要保存的数据以不同的文件方式存在:以.twd为后缀的Tilcon界面文件,文件可移植性性很强,只要是支持Tilcon的开发环境都可以使用;以.gis后缀的图层文件,保存各个图层中图元的信息;以.dat为后缀的背景图文件,包含了一张完整的地图的所有数据;以.cfg为后缀的配置文件,主要记录了用户使用软件的一些信息、临时修改地图文件的一些数据、以及整个硬盘中文件的个数以及类型。以上所有的文件都遵从前面讲到的自顶向下的设计方式,每个文件的文件头记录了文件的类型属性,便于文件的读取与保存。文件头决定了文件的读取和保存数据的方式,这是在进行软件开发时要注意的。不同的开发者采用的方式不同,这也是为什么有的软件工具不能打开某个文件的原因之一。
5 结论
本文完成了一类基于Ternado和Tidcon的嵌入式图形编辑软件的开发,初步实现了地图编辑和背景图操作,具有实时性强、移植性强和便于二次开发等优点。经过不断充实,本图形编辑软件应用前景十分广泛。
参考文献
[1]罗国庆.VxWorks与嵌入式软件开发[M].北京:机械工业出版社,2003.
[2]李阳,黄治华,刘晓亮.嵌入式图形系统Tilcon及应用研究[J].计算机与数字工程,2008,220(36):110-112.
[3]姜飞,王屹华,崔晓宇.VxWorks下Tilcon嵌入式图形用户界面设计与实现[J].工业控制计算机,2008,21(3):29-33.
【图形编辑】推荐阅读:
矢量图形编辑06-25
绘制与编辑图形教案10-07
立体图形与平面图形09-22
立体图形与平面图形教案08-17
编辑与编辑意识11-10
开放图形和封闭图形的教案10-24
图形的运动《轴对称图形》教案05-08
空间与图形《图形与位置》复习教案10-17
汉字图形07-20
图形文字07-20