
us.ihmc.scs2.sessionVisualizer.jfx.tools.TrimPolygonMarker Maven / Gradle / Ivy
package us.ihmc.scs2.sessionVisualizer.jfx.tools;
import java.util.List;
import javafx.beans.property.DoubleProperty;
import javafx.collections.ObservableList;
import javafx.css.CssMetaData;
import javafx.css.Styleable;
import javafx.css.StyleableDoubleProperty;
import javafx.css.StyleablePropertyFactory;
import javafx.scene.shape.Polygon;
public class TrimPolygonMarker extends Polygon
{
private static final StyleablePropertyFactory FACTORY = new StyleablePropertyFactory<>(TrimPolygonMarker.getClassCssMetaData());
private static final CssMetaData MARKER_WIDTH = FACTORY.createSizeCssMetaData("-fx-marker-width",
s -> s.markerWidth,
1.0,
false);
private static final CssMetaData MARKER_HEIGHT = FACTORY.createSizeCssMetaData("-fx-marker-height",
s -> s.markerHeight,
1.0,
false);
private final StyleableDoubleProperty markerWidth = new StyleableDoubleProperty(1.0)
{
@Override
public String getName()
{
return "markerWidth";
}
@Override
public Object getBean()
{
return TrimPolygonMarker.this;
}
@Override
public CssMetaData extends Styleable, Number> getCssMetaData()
{
return MARKER_WIDTH;
}
};
private final StyleableDoubleProperty markerHeight = new StyleableDoubleProperty(1.0)
{
@Override
public String getName()
{
return "markerHeight";
}
@Override
public Object getBean()
{
return TrimPolygonMarker.this;
}
@Override
public CssMetaData extends Styleable, Number> getCssMetaData()
{
return MARKER_HEIGHT;
}
};
public TrimPolygonMarker()
{
super();
initListeners();
}
public TrimPolygonMarker(double... points)
{
super(points);
initListeners();
}
public void setPoints(double... points)
{
if (points != null)
{
getPoints().clear();
for (double d : points)
{
getPoints().add(d);
}
updateWidth(1.0, markerWidth.get());
updateHeight(1.0, markerHeight.get());
}
}
private void initListeners()
{
markerWidth.addListener((o, oldValue, newValue) -> updateWidth(oldValue, newValue));
markerHeight.addListener((o, oldValue, newValue) -> updateHeight(oldValue, newValue));
}
private void updateWidth(Number oldWidth, Number newWidth)
{
double scale = newWidth.doubleValue() / oldWidth.doubleValue();
ObservableList points = getPoints();
for (int i = 0; i < points.size(); i += 2)
{
points.set(i, scale * points.get(i));
}
}
private void updateHeight(Number oldHeight, Number newHeight)
{
double scale = newHeight.doubleValue() / oldHeight.doubleValue();
ObservableList points = getPoints();
for (int i = 1; i < points.size(); i += 2)
{
points.set(i, scale * points.get(i));
}
}
public void setMarkerWidth(double width)
{
markerWidth.set(width);
}
public double getMarkerWidth()
{
return markerWidth.get();
}
public DoubleProperty markWidthProperty()
{
return markerWidth;
}
public void setMarkerHeight(double height)
{
markerHeight.set(height);
}
public double getMarkerHeight()
{
return markerHeight.get();
}
public DoubleProperty markHeightProperty()
{
return markerHeight;
}
@Override
public List> getCssMetaData()
{
return FACTORY.getCssMetaData();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy