/*
* This file is part of LaTeXDraw.
* Copyright (c) 2005-2017 Arnaud BLOUIN
* LaTeXDraw is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License as published by the Free Software
* Foundation; either version 2 of the License, or (at your option) any later version.
* LaTeXDraw is distributed without any warranty; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*/
package net.sf.latexdraw.models.interfaces.shape;
import net.sf.latexdraw.models.interfaces.prop.IArrowable;
/**
* The API for arrows.
* @author Arnaud BLOUIN
*/
public interface IArrow extends IArrowable {
/**
* Copies the parameters of the given arrow to the current arrow.
* The owner of the arrow to copy is not copied to the current arrow.
* @param model The arrow to copy. Cannot be null.
* @since 3.0
*/
void copy(final IArrow model);
/**
* @return The full thickness of the line shape that has the arrow.
* @since 3.0
*/
double getLineThickness();
/**
* @return True if the current arrow has a style.
* @since 3.0
*/
boolean hasStyle();
/**
* Defines the style of the arrow.
* @param arrowStyle The new style of the arrow.
* @since 3.0
*/
void setArrowStyle(final ArrowStyle arrowStyle);
/**
* @return The length of the arrow computed from the provided formula:
* length = arrowlength x (num x linewidth + dim)
* @since 3.0
*/
double getArrowShapeLength();
/**
* @return The style of the arrow.
* @since 3.0
*/
ArrowStyle getArrowStyle();
/**
* @return True if the arrow is the left arrow of its shape.
* @since 3.0
*/
boolean isLeftArrow();
/**
* @return True if the arrow if inverted in its shape.
* @since 3.0
*/
boolean isInverted();
/**
* @return The shape that contains the arrow.
* @since 3.0
*/
IArrowableShape getShape();
/**
* @return The line that can be used to locate the arrow.
* @since 3.0
*/
ILine getArrowLine();
/**
* @return The radius of the rounded arrow styles.
* @since 3.0
*/
double getRoundShapedArrowRadius();
/**
* @return The width of the bar arrow styles.
* @since 3.0
*/
double getBarShapedArrowWidth();
/**
* @return The length of the brackets of bracket arrow styles.
* @since 3.0
*/
double getBracketShapedArrowLength();
/**
* @return The width of arrow styles.
* @since 3.0
*/
double getArrowShapedWidth();
}