blob: efe76e16622e4d531e83ba3685b6bc1b45afbfdc [file] [log] [blame]
/*******************************************************************************
* Copyright 2005-2006, CHISEL Group, University of Victoria, Victoria, BC,
* Canada. All rights reserved. This program and the accompanying materials are
* made available under the terms of the Eclipse Public License v1.0 which
* accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors: The Chisel Group, University of Victoria
*******************************************************************************/
package org.eclipse.zest.core.viewers;
/**
* An extension to the IEntityConnectinStyleProvider that allows styling
* specific to bezier curves.
*
* Bezier curves are defined by a set of four points: two point in the layout
* (start and end), and two related control points (also start and end). The
* control points are defined relative to their corresponding layout point. This
* definition includes an angle between the layout point and the line between
* the two layout points, as well as a ratio distance from the corresponding
* layout point. The ratio distance is defined as a fraction between 0 and 1 of
* the distance between the two layout points. Using this definition allows
* bezier curves to have a consistant look regardless of the actual positions of
* the nodes in the layouts.
*
* @author Del Myers
*
*/
// @tag zest(bug(152530-Bezier(fix))) : users can style bezier curves.
interface IEntityConnectionStyleBezierExtension {
/**
* Gets the angle between the start point, and the line between the start
* and end, which will define the position of the start control point. If
* the start angle, and the end angle are the same sign, the two control
* points are guaranteed to be on the same side of the line.
*
* @param source
* the source node to base on.
* @param dest
* the destination node to base on.
* @return the start angle or <code>Double.NaN</code> for defaults.
*/
double getStartAngle(Object source, Object dest);
/**
* Gets the angle between the end point, and the line between the start and
* end, which will define the position of the end control point. If the
* start angle, and the end angle are the same sign, the two control points
* are guaranteed to be on the same side of the line.
*
* @param source
* the source node to base on.
* @param dest
* the destination node to base on.
* @return the end angle or <code>Double.NaN</code> for defaults.
*/
double getEndAngle(Object source, Object dest);
/**
* Gets the distance between the start point and the start control point, as
* a fraction of the distance between the start point and end point.
*
* @param source
* the source node to base on.
* @param dest
* the destination node to base on.
* @return the start distance or <code>Double.NaN</code> for defaults.
*/
double getStartDistance(Object source, Object dest);
/**
* Gets the distance between the end point and the end control point, as a
* fraction of the distance between the start point and end point.
*
* @param source
* the source node to base on.
* @param dest
* the destination node to base on.
* @return the end distance or <code>Double.NaN</code> for defaults.
*/
double getEndDistance(Object source, Object dest);
}