`

Draw2d 连线三 锚点 TriangleAnchor

阅读更多

关键字:Draw2d、锚点、TriangleAnchor

 

连线的时候能不能连接到画的图中去,在连线二中已经提到了,简单的跟图形连在一起,但是对于特殊的图是有不同的需求的。

如三角形,怎样连接端点。

 

public class TriangleAnchor extends ChopboxAnchor {

	public TriangleAnchor(Triangle triangle) {
		super(triangle);
	}
	
	public Point getLocation(Point reference) {
		Rectangle r = Rectangle.SINGLETON;
		r.setBounds(getBox());
		r.resize(-1, -1);
		
		int size;
		size = Math.min(r.height, r.width / 2);
		r.y += (r.height - size) / 2;
		size = Math.max(size, 1); //Size cannot be negative

		Point head, p2, p3;
		int d1,d2,d3;
		head = new Point(r.x + r.width / 2, r.y);
		p2   = new Point (head.x - size, head.y + size);
		p3   = new Point (head.x + size, head.y + size);

		Point p;
		if(Math.abs(reference.x-p2.x)+Math.abs(reference.y-p2.y) > 
		Math.abs(reference.x-p3.x)+Math.abs(reference.y-p3.y)) {
			p = p3;
		} else {
			p = p2;
		}
		d1 = distance(reference,head);
		d2 = distance(reference,p2);
		d3 = distance(reference,p3);
		
		p = head;
		if(d1<d2 && d1<d3) {
			p = head;
		}
		if(d2<d1 && d2<d3) {
			p = p2;
		}
		if(d3<d1 && d3<d2) {
			p = p3;
		}
		
		return p;
	}

	private int distance(Point p1, Point p2) {
		return Math.abs(p1.x-p2.x)+Math.abs(p1.y-p2.y);
	}

}

 

 

public class HelloWorld2 {
	public static void main(String args[]) {
		Shell shell = new Shell();
		shell.setText("Draw2d Hello World");
		shell.setSize(400, 400);
		shell.open();
		
		// create content 4 shell.
		createContent4Shell(shell);
		
		while (!shell.isDisposed ()) {
			if (!Display.getDefault().readAndDispatch ())
				Display.getDefault().sleep ();
		}
	}

	private static void createContent4Shell(Shell shell) {
		Panel rootFigure = new Panel();
		rootFigure.setLayoutManager(new XYLayout());
		
		IFigure figure1 = new Ellipse();
//		Label figure2 = new Label("ddddddddddddddddd");
		Triangle figure2 = new Triangle();
		
		// --------------------------------------------------------
		// add connection
		PolylineConnection connection = new PolylineConnection();
		connection.setSourceAnchor(new ChopboxAnchor(figure1));
	    
		connection.setTargetAnchor(new TriangleAnchor(figure2));
		// add connection
		// --------------------------------------------------------

		rootFigure.add(figure1,new Rectangle(10,10,60,30));
		rootFigure.add(figure2,new Rectangle(80,90,90,190));
		rootFigure.add(connection);
		
		LightweightSystem lws = new LightweightSystem(shell);
		lws.setContents(rootFigure);
	}
}

 

 


 

这个端点的求法,没有考虑三角形的方向,计算方法参考:

package org.eclipse.draw2d;

import org.eclipse.draw2d.geometry.Point;
import org.eclipse.draw2d.geometry.PointList;
import org.eclipse.draw2d.geometry.Rectangle;

/**
 * A triangular graphical figure.
 */
public final class Triangle
	extends Shape
	implements Orientable

 
 

  • 大小: 6.3 KB
分享到:
评论

相关推荐

    Draw2d Programmer Guide

    Draw2D提供了强大的连接和路由功能,支持自定义锚点(Anchor)、装饰(Decoration)以及路由算法(Routing Algorithm)。 - **锚点**:定义了连接线的起点和终点,可以通过自定义锚点来实现更灵活的连接。 - **装饰...

    JS锚点平滑跳转

    JavaScript 锚点平滑跳转是一种在网页中实现页面内部导航时提供平滑过渡效果的技术。传统的HTML锚点链接可以直接跳转到页面内的某个特定位置,但这种跳转通常是瞬间完成,缺乏用户体验上的平滑性。JS锚点平滑跳转则...

    GEF锚点鼠标定位

    在图形编辑框架(GEF,Graphical Editing Framework)中,锚点(Anchor)是一个关键概念,它是连接模型元素之间的连接线在元素上的固定点。在GEF中,锚点的定位直接影响到连接线的形状和行为,特别是当用户通过鼠标...

    Sprite_锚点与变换

    在DirectX编程中,"Sprite_锚点与变换"是一个重要的概念,主要涉及到2D图形渲染和游戏开发。本文将详细解析标题和描述中的知识点,包括DirectX的基础、锚点的概念以及变换操作。 1. DirectX基础 DirectX是由微软...

    台湾地图锚点.html

    台湾地图锚点

    完整版设置控件锚点.rar

    在UI设计和编程中,控件锚点是一个关键概念,用于确定控件在容器或窗口中的位置和大小如何根据容器的变化而变化。锚点机制允许开发者创建响应式用户界面,这样无论屏幕尺寸如何,界面都能保持良好的布局。下面将详细...

    JS如何实现在页面上快速定位(锚点跳转问题)

    JS实现页面快速定位的技术主要涉及锚点跳转的概念和应用。锚点,也被称作片段标识符,其作用是允许用户点击链接后页面能够跳转到特定的位置。在网页设计中,尤其是在内容较多、页面较长的情况下,合理使用锚点可以...

    实现锚点的带动画效果

    三、CSS3实现动画 1. 过渡(Transition):通过设置`transition`属性,可以使元素在改变状态时有平滑的过渡效果。例如,让页面滚动时,目标元素的高度逐渐变化: ```css #section1 { transition: height 0.5s ...

    unity3d锚点快捷键脚本

    描述中的"ctrl+[:锚点跟随到节点放大缩小和对齐",意味着使用Ctrl+ [ 这个组合键可以实现锚点的特定功能,即让选定的UI元素的锚点与节点对齐,并在放大或缩小过程中保持其位置关系不变。这在调整UI布局时非常实用,...

    html页面锚点跳转

    html页面锚点跳转

    微信小程序 外卖:实现类似锚点功能 (源码)

    微信小程序 外卖:实现类似锚点功能 (源码)微信小程序 外卖:实现类似锚点功能 (源码)微信小程序 外卖:实现类似锚点功能 (源码)微信小程序 外卖:实现类似锚点功能 (源码)微信小程序 外卖:实现类似锚点功能 (源码)...

    jQuery页面滚动显示浮动菜单栏锚点定位效果

    本主题聚焦于利用jQuery实现一个特定的功能——当页面滚动时,展示一个浮动菜单栏,并实现锚点定位效果。这个功能对于提高用户体验,尤其是内容丰富的长页面,是非常有用的,因为它可以帮助用户快速导航到页面的不同...

    秒锚点工具.zip(Unity3D)

    RectTransform是Unity3D中用于2D图形布局的重要组件,它包含了位置、大小、旋转和锚点等属性。通过这个工具,开发者可以预设一组锚点配置,然后应用到多个UI元素上,或者根据不同的需求自定义锚点设置。 虽然描述中...

    jquery锚点带动画跳转

    三、jQuery锚点动画跳转步骤 1. 绑定点击事件:使用`$(document).ready()`确保DOM加载完成后,为所有具有特定类名(如`.scroll-to-anchor`)的锚点链接绑定点击事件。 2. 阻止默认行为:在事件处理函数中,使用`...

    js锚点定位

    本文将深入探讨JavaScript锚点定位的原理、实现方式以及相关的应用技巧。 ### 锚点定位基础 在HTML中,我们可以为任何元素设置一个唯一的`id`属性,例如: ```html 第一部分 ``` 然后在页面的其他地方创建一个...

    锚点导航栏效果

    锚点导航栏是一种常见的网页设计元素,主要用于提升用户体验,帮助用户快速定位到页面中的特定区域。在本项目中,我们讨论的是一个固定在页面右侧的锚点链接导航菜单,其功能是当用户点击导航菜单中的不同栏目时,...

    易语言源码古木设定控件锚点例程.rar

    3. 锚点类型:在易语言的示例中,可能会展示不同类型的锚点设置,如单边锚点(左、上、右、下)和多边锚点(左上、右上、左下、右下等),每种锚点类型会影响控件在窗口大小改变时的响应方式。 4. 事件处理:控件的...

    完整版窗口-控件锚点.rar

    窗口控件锚点是软件开发中的一个重要概念,特别是在GUI(图形用户界面)设计中。它是一种布局管理技术,用于在窗口大小变化时自动调整控件的位置和大小,以保持特定的相对位置关系或比例。这一特性在Windows应用程序...

    小程序源码 外卖:实现类似锚点功能 (代码源)

    小程序源码 外卖:实现类似锚点功能 (代码源)小程序源码 外卖:实现类似锚点功能 (代码源)小程序源码 外卖:实现类似锚点功能 (代码源)小程序源码 外卖:实现类似锚点功能 (代码源)小程序源码 外卖:实现类似锚点...

    易语言古木设定控件锚点例程

    在易语言中,“古木设定控件锚点例程”是一个关于用户界面布局管理的实例,主要涉及到控件的定位和尺寸调整。 控件锚点是窗口或对话框设计中的一个重要概念,它决定了控件如何随着容器(如窗口)大小的变化而自动...

Global site tag (gtag.js) - Google Analytics