### GEF进阶知识点详解 #### 一、Anchor(锚点)的概念及作用 - **定义**:在GEF(Graphical Editing Framework)程序中,Anchor(锚点)指的是连接两个图形元素时线的两端所在的位置。锚点所在的具体图形被称为锚点的所有者。 - **类型**:分为SourceAnchor(源锚点)和TargetAnchor(目标锚点),分别代表连接线的起始点和终点。 - **默认实现**:GEF中默认提供了多种Anchor的实现方式,其中最常见的`ChopboxAnchor`是基于两个图形中心点的连线与边界相交的位置来确定锚点。 #### 二、自定义Anchor的需求背景 - **问题**:在使用默认的`ChopboxAnchor`时,当两个图形间有多条连接线时,这些线的锚点会相互重叠,导致无法区分或选择特定的连接线。 - **解决方案**: - **方案一**:提供自定义的`ConnectionRouter`(连线路由器)来避免线之间的重叠。 - **方案二**:实现自定义的Anchor,允许用户手动调整锚点位置以避免线之间的重叠。 #### 三、ShapesExample案例分析 - **原始情况**:GEF的Shapes示例程序中,用户可以在画布上放置椭圆和矩形,并用两种样式的线连接它们。但由于使用了`ChopboxAnchor`,该示例不支持在两个图形间创建多条连线或移动锚点。 - **改进方向**:在Shapes示例的基础上,通过实现一个可手动调整位置的锚点来解决问题。 #### 四、自定义Anchor的设计与实现步骤 1. **确定锚点的表示策略** - **思考问题**:需要明确想要哪些位置作为锚点,例如圆形或矩形的边界上的任意点。 - **本例策略**:选择使用椭圆边界的任意点作为锚点,通过角度表示位置。 - **实现方式**:使用一个变量存储角度值,根据该值计算出中心射线与边界的交点,作为图形的锚点。 2. **修改Model** - **目的**:为了支持锚点的表示,需要在模型中添加表示角度的变量。 - **具体操作**:在模型中添加一个表示角度的变量,对于每条连接线,需要添加两个成员变量分别表示SourceAnchor和TargetAnchor的角度值。 - **好处**:这样可以将锚点的信息保存在模型中,便于后续的数据存储和读取。 3. **实现ConnectionAnchor接口** - **接口功能**:定义了获取和设置锚点位置的方法。 - **实现过程**:根据模型中定义的角度值计算出具体的坐标位置,并返回该坐标作为锚点。 4. **修改EditPart** - **作用**:负责处理用户交互,如响应鼠标事件等。 - **实现细节**:需要实现响应用户拖动锚点的功能,更新模型中锚点的角度值,并调用相应的绘制方法更新界面。 #### 五、总结 - 通过上述步骤,可以有效地解决在两个图形间创建多条连线时出现的锚点重叠问题,提高了连接线的可区分性和用户体验。 - 实现自定义Anchor不仅增强了应用程序的功能性,还展示了如何利用GEF框架进行定制化开发的能力。 #### 六、参考资料 - **IBM社区文档**:“GEF进阶,第一部分:Anchor”(http://www.ibm.com/developerworks/cn/opensource/os-ecl-gef/part1/index.html) - **其他资源**:了解更多的GEF教程和技术文档,可以帮助开发者更好地理解和运用GEF框架的各种特性。 #### 七、相关链接 - **Opensource技术文档库**:提供更多关于开源项目的文档资料。 - **developerWorks中国**:提供丰富的技术文章和教程,涵盖多个领域。 通过以上内容的详细介绍,读者可以更加深入地理解GEF框架中关于Anchor的知识点及其实际应用方法。
剩余37页未读,继续阅读
- hyszy2014-03-25关于图形处理中的锚点和连线很有帮助
- 粉丝: 67
- 资源: 16
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助