/*******************************************************************************
* 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 IConnectinStyleProvider 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 bug(152530-Bezier(fix)) : users can style bezier curves.
public interface IConnectionStyleBezierExtension {
/**
* 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 rel the relationship to base on.
* @return the start angle or <code>Double.NaN</code> for defaults.
*/
double getStartAngle(Object rel);
/**
* 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 rel the relationship to base on.
* @return the end angle or <code>Double.NaN</code> for defaults.
*/
double getEndAngle(Object rel);
/**
* 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 rel the relationship to base on.
* @return the start distance or <code>Double.NaN</code> for defaults.
*/
double getStartDistance(Object rel);
/**
* 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 rel the relationship to base on.
* @return the end distance or <code>Double.NaN</code> for defaults.
*/
double getEndDistance(Object rel);
}