图形编辑“点-线”联动

合集下载

Moldwizard模块

Moldwizard模块

Moldwizard模块pdiewizard 模块,完全中文攻略!今天看到有人问,正好我知道,大家共享一下,ug 的本身汉化大家都知道了吧,比较简单!但汉化以后,你会发现Moldwizard 等其它模块汉化不完全!其实从18 版本开始Moldwizard 等模块已经带有附属的语言包(不过18的没有中文的),哈哈,只要小小的设置一下就OK 了!找到ug安装目录下的moldwizard 文件夹使用记事本打开mold_def aults.def 文件修改如下文本:MW_Lang ge:moldwizard_simpl_chinese.lng如果操作成功,OK,恭喜你,你现在使用的是完全中文版的Moldwizard 了!相应的,比如pdiewizard 模块,也有类似的设置。

如图,再不会的话,我也没办法了!造型思维*Importing image planes*Creating and importing sketches*Apply ing sketches to geometry*Creating part lines f or v is l representation讨论参数化、变量化方法1、参数化方法参数化设计(Parametric)设计(也叫尺寸驱动Dimension-Driv en)是CAD技术在实际应用中提出的课题,它不仅可使CAD系统具有交互式绘图功能,还具有自动绘图的功能。

目前它是CAD技术应用领域内的一个重要的、且待进一步研究的课题。

利用参数化设计手段开发的专用产品设计系统,可使设计人员从大量繁重而琐碎的绘图工作中解脱出来,可以大大提高设计速度,并减少信息的存储量。

由于上述应用背景,国内外对参数化设计做了大量的研究,目前参数化技术大致可分为如下三种方法:(1)基于几何约束的数学方法;(2)基于几何原理的人工智能方法;(3)基于特征模型的造型方法。

其中数学方法又分为初等方法(Primary Approach)和代数方法(Algebraic Approach)。

青鸟消防股份有限公司 JBF5203型消防控制室图形显示装置使用说明书 V1.0

青鸟消防股份有限公司 JBF5203型消防控制室图形显示装置使用说明书 V1.0

消防控制室图形显示装置JBF5203使用说明书在安装和使用本产品前务必仔细阅读和理解该使用说明书!青鸟消防股份有限公司Jade Bird Fire Co.,Ltd目录第一章系统简介 (1)1.1特点 (1)1.2主性能参数 (2)1.3外形尺寸 (2)1.4接线说明 (2)第二章消防控制室图形显示装置使用及功能 (3)2.1消防控制室图形显示装置使用方式 (3)2.2消防控制室图形显示装置主要功能 (3)2.2.1消防控制室图形显示装置主界面 (3)2.2.2消防控制室图形显示装置正常工作状态 (3)2.2.3消防控制室图形显示装置各类警情监控 (4)2.3操作员管理 (4)2.3.1操作员列表 (4)2.3.2修改密码 (4)2.4信息编辑 (4)2.4.1用户管理 (4)2.4.2楼宇管理 (4)2.4.3楼层管理 (4)2.4.4控制器管理 (4)2.4.5设备管理 (5)2.4.6布点 (5)2.4.7标准层布点 (5)2.4.8清除布点 (5)2.4.9设备图标管理 (5)2.4.10监测系统 (5)2.5系统设置 (5)2.5.1打印设置 (5)2.5.2控制器设置 (5)2.5.3转发设置 (6)2.5.4回路筛选设置 (6)2.5.5基本参数设置 (6)2.5.6数据库备份 (6)2.5.7一键导入 (6)2.5.8批量SVG转PNG (6)2.5.9升级 (6)2.5.10项目合并 (6)2.5.11查岗设置 (6)2.5.12关于 (6)2.6模拟报警 (6)2.7信息查询 (6)2.7.1图例查询 (6)2.7.2设备定位与状态 (7)2.7.3维保记录 (7)2.7.4平面图查询 (7)2.7.5消防控制室管理信息 (7)2.8统计查询 (7)2.8.1报警记录 (7)2.8.2值班记录 (7)2.8.3产品信息记录 (8)2.8.4统计分析 (8)2.8.5查岗统计 (9)第三章故障现象与排除 (9)第四章保养维修 (9)第一章系统简介JBF5203是青鸟消防股份有限公司推出的可以与目前的火灾报警控制器、电气火灾监控设备及可燃气体报警控制器等主机连接的消防控制室图形显示装置。

新普利斯(SIMPLEX)网络系统功能简介

新普利斯(SIMPLEX)网络系统功能简介

新普利斯(SIMPLEX)网络系统功能简介苏金明1.网络系统的容量:以令牌方式进行点对点通讯的对等式网络,网络系统最多可支持7个复合网络环,每个网络环可附加99个节点,每个节点可连接2000个地址设备,从而网络系统的单环容量就可达198000个地址点,且中文图形控制中心(IMS)单机的容量也可达50000个地址点。

网络上的节点均可通过软件编程来实现各种网络功能。

2.网络系统的组成结构:网络系统组网灵活,方式多样。

主/从式环型网络:所有的网络通讯都经过主机,主机控制全系统,执行所有的网络功能及操作,分机并不需要独立运行,只有在与主机通讯中断时实现独立的工作方式。

主/从式环型网络结构只是从网络管理的角度来定义的而不是从控制器的功能上定义。

网络上的每个节点即互相独立,又互为补充,每个控制器都可以检测和控制本身的系统,也可以控制其他控制器的点,并可以向网络发布它本身所处的状态及其它信息。

无主式环型网络:网络上的每个控制器都可以传送信息,也可以接收其它控制器发送的信息,灵活的编程软件可以设定任意的控制器接收或忽略网络上的信息,每个控制器的地位相同并可自我控制。

环型网络的重要特性:环型网络(STYLE7)功能,为网络的构成与通讯提供更高的可靠性,就像在网络中创建了两个路径,即便一个路径有故障,网络马上可通过第二个路径进行通讯,绝对保证了网络系统的可靠性。

比如:网络线路中有开路、短路故障时,网络可以通过另一条路径来进行完整的网络通讯。

而在网络中有多处故障时,网络会进行重组,使网络功能尽可能完整(系统会自动组成若干个子网络)。

而当系统中有一个控制器有故障时,只有该控制器的监控部分失去功能,而其它部分仍可正常工作,增强了系统功能和抗风险的能力,使风险降至最低,因此环型网络系统是生命力极强的网络,它综合了多种网络连接方法的优点,祛除了各种致命的缺点,为此很多重特大的项目考虑到系统的稳定性及可靠性,广泛采用了环型网络,而且得到了良好的使用效果。

物联网仿行业实训仿真平台使用说明 【物联网行业实训仿真资料】

物联网仿行业实训仿真平台使用说明 【物联网行业实训仿真资料】

“物联网行业实训仿真”软件1.仿真系统介绍“物联网行业实训仿真”软件是一款虚拟的物联网系统安装与维护的学习资源,它不仅有高真实度的实验设备与实验过程,模拟与实际操作高贴合度的实验平台,给学生、老师以身临其境之感,美观的界面、迎合学生的心理、吸引注意力,覆盖现阶段物联网教学中的常用的全部设备在硬件教学实训之前,旨向学员提供一种在仿真实验环境和对象中,进行基础掌握、设备扩展、开发创新的仿真实训教学的新型产品。

其选取具有典型意义的物联网感知层基础设备为基础,结合可灵活部署的移动实训台。

通过网关、移动工控终端和物联网云平台之间,不同的搭配、组合,为学生提供云平台接入、网关直连、平板直连,PC直连四种不同的数据采集、流转、处理模式。

可更好的帮助学生从物联网理论学习过渡到实际动手操作,培养学生在物联网综合应用的动手实践。

2.仿真系统特点物联网基础实训仿真系统为学生的仿真实训提供了一套组态开发平台,该平台包括图形化组态应用和硬件数据源仿真两大模块:其中图形化组态应用系统为底层硬件开发者提供图形化界面定制工具,无需编程即可快速完成具备拖拉布局特效的应用系统的发布;硬件数据源仿真系统为上层软件工程师提供虚拟的硬件数据,通过选择不同的硬件组件单元,并设置数据属性,即可按照用户设定的逻辑为上层应用提供数据支撑。

图2- 1仿真平台架构⚫虚实结合:通过仿真平台可以直观的观察底层的工作原理、数据传输等,同时结合硬件实训产品即可实时的展现实验流程与效果。

⚫时空不受限:仿真平台在教学过程中,老师和学生可不受时间和空间限制,随时方便的进行学习。

⚫创新形态:仿真平台可脱离硬件实训产品进行实训,是一种创新的教学资产形态。

⚫安全省空间:仿真平台在教学过程中,可以让老师和学生避免实际设备产生的不必要的意外和事故;通过虚拟仿真设备和场地,更节约空间。

⚫便利直观:软件完全仿真相关设备和详细的实验设置,更方便老师开展实验教学;通过模拟仿真,更直观的展示底层的原理和数据。

如何在CAD中进行图形联动操作

如何在CAD中进行图形联动操作

如何在CAD中进行图形联动操作CAD(Computer-Aided Design)是一种广泛应用于工程设计领域的计算机辅助设计软件。

它具有丰富的功能和工具,可以帮助设计师在二维和三维空间中创建精确的图形,并进行编辑和修改。

在CAD中,图形联动操作是一项重要的功能,它可以帮助设计师将不同图形之间的关系进行解析和管理。

下面是一些在CAD中进行图形联动操作的技巧和方法:1. 使用点和线进行连接:图形联动操作的首要任务是找到适当的连接点和线。

可以使用CAD软件中的“点”工具来创建点,并使用“线”工具将这些点连接起来。

这样就可以形成图形之间的连接关系。

2. 使用关系工具:CAD软件通常会提供各种各样的关系工具,例如水平关系、垂直关系、平行关系等。

通过应用这些关系工具,可以在不同图形之间建立起约束关系,从而实现图形的联动操作。

3. 使用尺寸工具:在CAD中,尺寸工具可以帮助设计师对图形进行精确的测量和标注。

通过使用尺寸工具,可以将相关的图形之间的尺寸关系定义出来,并在后续的联动操作中进行调整和修改。

4. 使用参数和公式:一些CAD软件支持使用参数和公式来定义图形之间的关系。

通过定义参数和公式,可以使得图形在联动操作中根据特定的规则进行变化和调整。

这可以大大提高设计的灵活性和效率。

5. 使用动态输入:CAD软件通常提供一个动态输入框,可以实时显示鼠标位置的坐标和其他相关信息。

在进行图形联动操作时,可以通过动态输入框显示的数值对图形进行精确定位和调整。

6. 使用图层和组件:在进行图形联动操作时,可以使用CAD软件提供的图层和组件功能。

通过将相关的图形放置在不同的图层或组件中,可以更好地组织和管理图形之间的关联关系。

7. 使用外部引用:一些CAD软件支持将外部图形文件引用到当前图形中。

通过使用外部引用功能,可以在不同图形之间建立起链接,实现联动操作。

这对于多人协作和复杂项目管理非常有用。

最后,要注意的是,图形联动操作需要一定的技术掌握和经验积累。

“BDMap农村不动产登记“图件编绘及辅助建库系统用户手册

“BDMap农村不动产登记“图件编绘及辅助建库系统用户手册

BDMAP农房不动产操作手册一、系统总述1.1系统简介北斗空间农村不动产登记图件编绘及辅助建库系统基于autoCAD2014平台上开发的农村房屋不动产登记权籍调查软件。

系统可直接转换北斗空间农村不动产登记移动端采集的数据,也可直接转换集体土地使用权、南方CASS(地籍图),进行编辑检查,输出成果。

系统功能包括多源数据导入转化,图形绘画和编辑,属性录入和编辑,数据质量质检和处理,输出成果包等,满足农村房屋不动产登记权籍调查的需求。

1.2系统功能1、可将从移动端导出的外业测量数据导入桌面端、格式转换;2、整理查看外业采集的房屋照片、身份证、户口本及权属来源材料;3、结合房屋照片检查修改图形及属性;4、对房屋、房屋附属及宗地数据进行拓扑处理;5、生成房屋平面图、房屋权界线示意图和房屋调查表;6、生成地籍调查表、宗地草图及宗地图;7、生成不动产登记生情书、审批表;8、导出自然幢、宗地、权利人、界址点、界址线等SHP数据;9、编辑输出不动产权籍图(含行政区划要素、地籍要素、房屋要素、地形要素、数字要素和图廓要素)、索引图;10、也可以利用外业纸质草图绘制房屋、房屋附属等房产要素以及宗地界址点、界址线等权籍要素(数据源可采用集体土地使用权国家标准数据库、苍穹标准数据库或Cass数据)。

1.3运行环境1)操作系统要求:Windows7(X86、X64)、Windows 102)CAD要求:AutoCAD20143)Office要求:Microsoft Office20101.4系统安装与卸载1.4.1系统安装1、安装好autoCAD2014 并激活软件。

2、安装好Microsoft office 2010并激活软件。

3、安装BDMap农村不动产软件,针对计算机系统选择对应的安装包。

建议默认路径安装。

点击下一步,完成安装1.4.2系统卸载用户可以用两种方法启动“BDmap农村不动产”卸载程序。

1、鼠标单击北斗BDmap农村不动产系统程序组的“卸载BDmap农村不动产”2、在windows的开始菜单中选择设置---控制面板,在控制面板中,选择“添加或者删除程序”程序组,在弹出的对话框中选择“BDmap农村不动产”,然后单击“更改/删除”按钮,然后卸载程序会提示卸载方式,如图所示:建议用户选择“自动”,单击下一步按钮即可完成卸载。

龙软教程

第一节软件安装第一步:双击图标,出现如图1-1所示的对话框:图1-1第二步:点击“下一步”,运行图1-2所示对话框:图1-2选择我同意该许可协议的条款。

点击“下一步”如图1-3所示:图1-3输入名称和公司,点击“下一步”如图1-4所示:图1-4选择安装目录(可放任意盘),点击“下一步”如图1-5所示:图1-5选择或者输入快捷方式文件夹,一般为默认状态即可,点击“下一步”,如图1-6所示:图1-6点击“下一步”,继续安装,如图1-7所示:图1-7如果想终止安装可点“取消”按钮。

图1-8安装完成后会出现注册的彩色图片,如图1-8所示,耐心等待注册完毕后点击完成,安装完毕。

此时桌面上就会出现快捷方式,双击就可以运行程序。

需要注意的是,为了提高程序运行速度,我们双击图标的时候首先运行的是程序的服务,这个需要几秒钟时间,等服务完全启动后,就可以打开软件。

只要服务启动一次,不需要再进行服务启动。

服务启动后在桌面右下角有如图图标。

一、软件注册在安装后且以前也没有安装过此软件没有注册码的情况下,双击桌面上的图标,运行程序会出现如下对话框,如图1-9所示。

图1-9下面有两注册方式:一种是专业模块方式,要安装哪种专业软件就选择哪一种或几种,如安装地测就将地测专业命令前面的复选框打上勾;另一种是坐标加密方式注册软件,如上图左下角所示。

选择完注册方式后,点击“确定”,会出现如图1-10所示对话框。

图1-10将计算机的申请注册码“445558667147”发给龙软公司,注明某矿某人地测空间管理信息系统软件注册,然后龙软公司会返回一个注册码例如“KEVLSYOKZTAW”,将此注册码填写到注册码栏目中,点击“确定”,程序就可以运行了,如图1-11所示。

图1-11二、软件卸载系统的卸载比较简单,执行“开始→所有程序→龙软应用程序→卸载龙软应用程序”,将会弹出如图1-12所示的对话框,单击“下一步”。

图1-12显示卸载进度如图1-13所示,卸载完成后,弹出“卸载成功”对话框,如图1-14所示,点击“完成”即卸载成功。

第03章Auto_CAD机械制图基础教程二维图形绘制


图 3 13 边 界 图 案 填 充 ” 对 话 框
-

图 3 14 填 充 图 案 选 择
-
(1)拾取点 (2)选择对象
单击“拾取点”按钮,对话框关闭,移动 光标到如图 3-12 ( a )所示的 1 区域,单击 鼠标左键,封闭区域的边界线呈虚线状态。 单击鼠标右键结束对象拾取,单击“预览” 按钮,可以看到只有四分之一圆填充了图 案,如图3-12(b)所示。若要一次性完成 整个区域填充,需拾取4个区域。
(3)角度(A):创建一条用户指 定角度的倾斜辅助线,单击一次创建一条 倾斜辅助线,直到用户单击鼠标右键或回 车时结束。
(4)等分(B):让用户先指定一个角的 顶点,再分别确定此角两条边的两个点, 从而创建一条辅助线。该辅助线通过用户 指定的角的顶点,并平分该角。注意,这 个角不一定是实际存在的,可以是想象中 的一个不可见的角。 (5)偏移(O):创建平行于另一 个实体的辅助线,类似于偏移编辑命令。 选择的另一个实体可以是一条辅助线、直 线或复合线实体。
3.2.2 多段线
多段线是AutoCAD中较为重要的一种 图形对象,由多个彼此首尾相连的、 相同或不同宽度的直线段或圆弧段组 成,并作为一个单一的整体对象使用。 单击“多段线 ”按钮, 各选项 的功能及操作方法如下。
(1)圆弧(A):由绘制直线转换成 绘制圆弧。 (2)半宽(H):将多段线总宽度的 值减半。AutoCAD提示输入起点宽度 和终点宽度。用户通过在命令行输入相 应的数值,即可绘制一条宽度渐变的线 段或圆弧。注意,命令行输入的数值将 作为此后绘制图形的默认宽度,直到下 一次修改为止。
3.1.6 绘制正多边形
“正多边形 ”按钮用于绘制3~1024 边的正多边形。下列3种创建方法:

第二章 图形的创意思维


和富有创意的图形,往往能给观者全新的视觉与创意 构思等思维上的享受。创意构思具有如下的特点:
1、新视角
创新的魅力在于同样的事物不同的看法,从新的角度
展示就的事物,于司空见惯的缝隙中发现新的空间, 创意必须与众不同,独具卓识。
2、联动性
联动是将事物与事物之间互为关联或看似不关联的因
素并置起来,展开联想的翅膀,使视知觉与创造性思 维跨越语言的阻碍,让思绪飞翔在更广阔烂漫的艺术 空间里。
图形发散创意
文字发散思维导图
4、跳跃性
从思维的进程来说,跳跃性表现为省略思维步骤,加
大思维前进的步伐,思维的跨度大,具有明显的跳跃 性,从而创造出新奇的作品。(参加课本31页,关于 蘑菇的形的联想。)
第二节 图形创意思维训练
一、点线面是绘画、设计的基本元素
二、图形的联想思维训练
学习要点及目标?培养对图形的创意思维?了解并掌握图形的创意表现特点?掌握图形基本元素的语言传递第二章图形的创意思维?第一节创意思维?第二节图形创意思维训练?第三节想象与联想的翅膀第一节创意思维?创意思维是指营造意境创造意念
学习要点及目标
培养对图形的创意思维
了解并掌握图形的创意表现特点 掌握图形基本元素的语言传递
联想-图形创意的基础
客观事物之间是通过各种方式相互联系的,
这种联系正是联想的桥梁。通过这座桥梁, 可以找出表面毫无关系,甚至相隔遥远的事 物之间内在的关联性。一般来说,联想可以 分为接近联想、类似联想、对比联想、因果 联想等。就图形创意而言,通过联想,可以 开拓创意思维,打开创意思维的通道,使五 行的思想朝着有型的图像转化,并创造出新 的形象。
(一)具象素材
1、实体形象
2、影像 3、民间工艺作品形象

插补、直线插补、联动与插补

什么是插补、直线插补、联动与插补什么是插补?试由直线的逐点比较工作节拍说明其插补过程:答:插补是在组成轨迹的直线段或曲线段的起点和终点之间,按一定的算法进行数据点的密化工作,以确定一些中间点。

从而为轨迹控制的每一步提供逼近目标。

逐点比较法是以四个象限区域判别为特征,每走一步都要将加工点的瞬时坐标与相应给定的图形上的点相比较,判别一下偏差,然后决定下一步的走向。

如果加工点走到图形外面去了,那么下一步就要向图形里面走;如果加工点已在图形里面,则下一步就要向图形外面走,以缩小偏差,这样就能得到一个接近给定图形的轨迹,其最大偏差不超过一个脉冲当量(一个进给脉冲驱动下工作台所走过的距离)。

什么叫直线插补这个概念般是用在计算机图形显示,或则数控加工的近似走刀等情况下的。

以数控加工为例子:一个零件的轮廓往往是多种多样的,有直线、有圆弧、也有可能是任意曲线、样条线等。

数控机床的刀具往往是不能以曲线的实际轮廓去走刀的,而是近似地以若干条很小的直线去走刀,走刀的方向一般是x和y方向。

插补方式有:直线插补、圆弧插补、抛物线插补、样条线插补等。

所谓直线插补就是只能用于实际轮廓是直线的插补方式(如果不是直线,也可以用逼近的方式把曲线用一段段线段去逼近,从而每一段线段就可以用直线插补了)。

首先假设在实际轮廓起始点处沿x方向走一小段(一个脉冲当量), 发现终点在实际轮廓的下方,则下一条线段沿y方向走一小段,此时如果线段终点还在实际轮廓下方,则继续沿y方向走一小段,直到在实际轮廓上方以后,再向x方向走一小段,依次循环类推.直到到达轮廓终点为止。

这样,实际轮廓就由一段段的折线拼接而成,虽然是折线,但是如果我们每一段走刀线段都非常小(在精度允许范围内),那么此段折线和实际轮廓还是可以近似地看成相同的曲线的--------这就是直线插补。

联动与插补决定质点空间位置需要三个坐标,决定刚体空间位置需要六个坐标。

一个运动控制系统可以控制的坐标的个数称做该运动控制系统的轴数。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Visual C++图形编辑“点-线”联动摘要以统筹图绘制程序的编制为例,详细给出了应用Visual C++开发工具及MFC实现图形编辑中的节点-箭线联动方法。

该方法对于实现GIS应用、标图应用和统筹图应用中的类似功能有较好的参考价值。

关键词节点;箭线;编辑联动1 引言很多的图形应用如统筹图应用、GIS应用、标图应用中都存在着编辑联动的问题。

所谓编辑联动,是指在对一个图元编辑修改包括位置的变动后,其他图元由于与这个图元有某种关系,而能自动同步被修改。

按图元类型,可将图形联动划分为点-点、点-线、点-面、线-线、线-面、面-面等6种。

文中以统筹图为例,讨论节点-箭线联动编辑问题。

节点与箭线图元的实现以VC自带面向对象图形例程DRAWCLI基础,添加自定义类CDrawNode和CDrawArrow来实现。

依据功能设计,程序的主要工作包括:(1) 基本图元的绘制。

包括绘制节点和箭线。

绘制的节点图形表示为圆心标有编号圆圈;箭线的两侧标注有文字说明,且文字行与箭线保持平行,箭线带有起节点和终节点。

(2) 处理图元及相互位置关系。

包括删除操作和移动操作。

删除某一节点,与该节点相连的箭线全部删除,且调整编号在其后面的节点编号,删除箭线不影响节点。

移动节点时,与之相连的箭线相应移动,其关键是准确计算箭线的位置。

2 基本图元及联动2.1基本图元实现设在VC++6.0的环境下已建立了工程Draw.dsp。

节点类和箭线类都是以CDrawObj为基类派生。

在建立这两个类之前,需要添加以下全局变量enum DrawShape{…,circle,arrow,…};//图元类型以及相应的工具circleTool和arrowTool(arrow)、arrowlineTool2.1.1节点类CDrawNode的设计class CDrawNode : public CDrawObj{public:CDrawNode(const CRect& position,int Radius);void SetCircleIndex(int Index){ m_nIndex=Index}; 设置节点编号virtual int GetObjIndex(){ return m_nIndex} ; //获取编号public:int m_Radius; //节点半径int m_CentreX,m_CentreY;//圆心//在圆中心写上编号,要考虑编号的位数情况virtual void Draw(CDC* pDC,CDrawView* pView);protected:int m_nIndex;//编号CDrawNode* m_pDrawObj;friend class CCircleTool;};绘制节点的工具CCircleTool在鼠标左键按下OnLButtonDown的消息处理函数中,实际分配内存,产生一个节点对象。

2.1.2箭线类CDrawArrow的设计class CDrawArrow: public CDrawObj{public:CDrawRect(const CRect& position);void SetProjectName(CString name){m_ProjectName=name;};void SetProjectTime(int time) { m_ProjectTime=time;};CString GetProjectName() { return m_ProjectName;}void SetProjectTime(int time){ return m_ProjectTime;} bool m_bForeConnect;//箭线始节点标志bool m_bBackConnect;//箭线终节点标志int m_ForeConnect; //箭线连接的始节点序号int m_BackConnect; //箭线连接的终节点序号virtual int GetObjIndex() {return o};//绘制时,计算平行于箭线的说明文字的角度,位置,项目名称总在线的上方virtual void Draw(CDC* pDC,CDrawView* pView);enum ArrowType{ none, pureArrow, openArrow,stealthArrow, diamondArrow, ovalArrow};enum Shape { rectangle, roundRectangle, ellipse,line,arrow };protected:CString m_ProjectName; //项目名称int m_ProjectTime; //时间Shape m_nShape;ArrowType m_lArrow, m_rArrow; //for arrow only int m_lArrowSize, m_rArrowSize; //for arrow onlyprivate:void DrawArrow(ArrowType arrowType, POINT p1, POINT p2, int arrowSize, CDC *,int, int , int, CBrush *);friend class CArrowTool;};绘制箭线的工具CArrowTool在OnLButtonDown中实际生成箭线对象,并记录箭线所连的开始节点,箭线的终节点确定在后面说明。

2. 2图元联动操作2.2.1删除节点及箭线void CDrawView::OnEditClear(){CDrawDoc* pDoc=(CDrawDoc*)GetDocument();POSITION pos = m_selection.GetHeadPosition();while (pos != NULL){CDrawObj* pObj = m_selection.GetNext(pos);GetDocument()->Remove(pObj); //删除节点CDrawNode* pDrawCircle=(CDrawNode*)pObj;nIndex=pDrawCircle->GetObjIndex();//获取节点编号,若不是节点对象,返回0if(nIndex){pDoc->m_nIndex=nIndex;pos=GetDocument()->m_objects.GetHeadPosition();int i=0;int num=pDoc->m_objects.GetCount();m_num=pDoc->m_nIndex;while(i<num){//序号位于被删除节点之后的所有节点序号减1CDrawNode*pDrawCircle=(CDrawNode*)pDoc->m_objects.GetNext(pos);if(pDrawCircle->GetObjIndex()>m_num){pDrawCircle->SetCircleIndex(m_num);m_num++;}i++;}pos=pDoc->m_objects.GetHeadPosition();if(pos!=NULL){i=0;num=pDoc->m_objects.GetCount();while(i<num){//删除与接点相连的所有箭线CDrawRect*pDrawRect=(CDrawRect*)pDoc->m_objects.GetNext(pos);if(pDrawRect!=NULL){if(nIndex==pDrawRect->m_ForeConnect){pDoc->Remove(pDrawRect);pDrawRect->Remove();}if(nIndex==pDrawRect->m_BackConnect){pDoc->Remove(pDrawRect);pDrawRect->Remove();}if(nIndex<pDrawRect->m_ForeConnect){pDrawRect->m_ForeConnect--;}if(nIndex<pDrawRect->m_BackConnect){pDrawRect->m_BackConnect--;}}i++;}}Invalidate();pDoc->m_nIndex=m_num;}pObj->Remove();}m_selection.RemoveAll();UINT nFlags;OnLButtonDown(nFlags,CPoint(0,0));OnLButtonUp(nFlags,CPoint(0,0));}2.2.2用鼠标移动某一节点时,同步移动与其相连接的箭线void CSelectTool::OnMouseMove(CDrawView* pView, UINT nFlags, const CPoint& point){if (pView->GetCapture() != pView){…CPoint local = point;int BackConnect;pView->ClientToDoc(local);POSITION pos;if (c_drawShape == arrow)//判断鼠标移动绘制箭线过程中是否与某一节点相连//此时函数是CRectTool::OnMouseMove()调用selectTool.OnMouseMove();而跳到这里{CRect circlerect;CDrawNode* pForeCircle;CDrawNode* pBackCircle;pos=pView->GetDocument()->m_objects.GetHeadPosition();if(pos!=NULL){int i=0;int num=pView->GetDocument()->m_objects.GetCount();while(i<num){CDrawNode*pDrawCircle=(CDrawNode*)pView->GetDocument()->m_objects.GetNext(p os);if(pDrawCircle!=NULL){int index=pDrawCircle->GetObjIndex();if(index){//判断circlerect=pDrawCircle->m_position;pView->DocToClient(circlerect);if(circlerect.PtInRect(point)){local=pDrawCircle->GetHandle(8);BackConnect=pDrawCircle->GetObjIndex();}}}i++;}}}CPoint delta = (CPoint)(local - lastPoint);pos = pView->m_selection.GetHeadPosition();while (pos != NULL){CDrawObj* pObj = pView->m_selection.GetNext(pos);CRect position = pObj->m_position;if (c_drawShape == arrow){//记录终节点pObj->m_BackConnect=BackConnect;pObj->m_bBackConnect=true;}//以下实现移动节点,使所有的箭线跟随节点同步移动if (selectMode == move){if(pView->m_selection.GetCount()==1){CDrawNode* pDrawCircle=(CDrawNode*)pObj;int Index=pDrawCircle->GetObjIndex();if(Index) //移动节点{POSITIONRectpos=pView->GetDocument()->m_objects.GetHeadPosition();if(Rectpos!=NULL){int i=0;int num=pView->GetDocument()->m_objects.GetCount();while(i<num){//所有与之相连箭线同步移动CDrawRect*pDrawObj=(CDrawRect*)pView->GetDocument()->m_objects.GetNext(Rect pos);if(pDrawObj!=NULL){if(Index==pDrawObj->m_ForeConnect){//节点是箭线始节点CRectdeltarect=pDrawObj->m_position;deltarect.BottomRight()+=delta;intlength=deltarect.top-deltarect.bottom;intwidth=deltarect.left-deltarect.right;//节点移动,箭线与节点的连接点改变,计算连接点位置if(abs(length)<abs(width)&&width<0)deltarect.BottomRight()=pDrawCircle->GetHandle(8);if(abs(length)<abs(width)&&width>0)deltarect.BottomRight()=pDrawCircle->GetHandle(4);if((abs(length)>abs(width)&&width>0&&length<0)|| (abs(length)>abs(width)&&width<0&&length<0))deltarect.BottomRight()=pDrawCircle->GetHandle(2);if((abs(length)>abs(width)&&length>0&&width>0)||(abs(length)>abs(width)&&length>0&&width<0))deltarect.BottomRight()=pDrawCircle->GetHandle(6);int nIndex=pDrawObj->m_BackConnect;POSITIONcirclepos=pView->GetDocument()->m_objects.GetHeadPosition();if(circlepos!=NULL){int i=0;int num=pView->GetDocument()->m_objects.GetCount();while(i<num){CDrawNode*pDrawNode=(CDrawNode*)pView->GetDocument()->m_objects.GetNext(cir clepos);if(pDrawNode!=NULL){if(nIndex==pDrawNode->GetObjIndex()){//计算箭线的新位置if(abs(length)<abs(width)&&width<0)deltarect.TopLeft()=pDrawNode->GetHandle(4);if(abs(length)<abs(width)&&width>0)deltarect.TopLeft()=pDrawNode->GetHandle(8);if((abs(length)>abs(width)&&width>0&&length<0)||(abs(length)>abs(width)&&width<0&&length<0))deltarect.TopLeft()=pDrawNode->GetHandle(6);if((abs(length)>abs(width)&&length>0&&width>0)||(abs(length)>abs(width)&&length>0&&width<0))deltarect.TopLeft()=pDrawNode->GetHandle(2);}}i++;}}}pDrawObj->MoveTo(deltarect,pView);}if(Index==pDrawObj->m_BackConnect){//节点是箭线终节点CRect deltarect=pDrawObj->m_position;deltarect.TopLeft()+=delta;int length=deltarect.top-deltarect.bottom;int width=deltarect.left-deltarect.right;if(abs(length)<abs(width)&&width<0)deltarect.TopLeft()=pDrawCircle->GetHandle(4);if(abs(length)<abs(width)&&width>0)deltarect.TopLeft()=pDrawCircle->GetHandle(8);if((abs(length)>abs(width)&&width>0&&length<0)|| (abs(length)>abs(width)&&width<0&&length<0))deltarect.TopLeft()=pDrawCircle->GetHandle(6);if((abs(length)>abs(width)&&length>0&&width>0)||(abs(length)>abs(width)&&length>0&&width<0))deltarect.TopLeft()=pDrawCircle->GetHandle(2);int nIndex=pDrawObj->m_ForeConnect;POSITIONcirclepos=pView->GetDocument()->m_objects.GetHeadPosition();if(pos!=NULL) {int i=0;intnum=pView->GetDocument()->m_objects.GetCount();while(i<num){ CDrawNode*pDrawNode=(CDrawNode*)pView->GetDocument()->m_objects.GetNext(cir clepos);if(pDrawNode!=NULL){if(nIndex==pDrawNode->GetObjIndex()){if(abs(length)<abs(width)&&width<0)deltarect.BottomRight()=pDrawNode->GetHandle(8);if(abs(length)<abs(width)&&width>0)deltarect.BottomRight()=pDrawNode->GetHandle(4);if((abs(length)>abs(width)&&width>0&&length<0)||(abs(length)>abs(width)&&width<0&&length<0))deltarect.BottomRight()=pDrawNode->GetHandle(2);if((abs(length)>abs(width)&&length>0&&width>0)||(abs(length)>abs(width)&&length>0&&width<0))deltarect.BottomRight()=pDrawNode->GetHandle(6);}}i++;}}}pDrawObj->MoveTo(deltarect,pView); }}i++;}}}}position += delta;pObj->MoveTo(position, pView);}else if (nDragHandle != 0)pObj->MoveHandleTo(nDragHandle, local, pView);}lastPoint = local;if (selectMode == size && c_drawShape == selection){c_last = point;SetCursor(pView->m_selection.GetHead()->GetHandleCursor(nDragH andle));return; // bypass CDrawTool}c_last = point;if (c_drawShape == selection)CDrawTool::OnMouseMove(pView, nFlags, point);}3 结语至此,基本上就达到了预定目标。

相关文档
最新文档