All Downloads are FREE. Search and download functionalities are using the official Maven repository.

us.ihmc.scs2.sessionVisualizer.jfx.yoGraphic.YoPolygonFX2D Maven / Gradle / Ivy

package us.ihmc.scs2.sessionVisualizer.jfx.yoGraphic;

import java.util.ArrayList;
import java.util.List;

import javafx.beans.property.DoubleProperty;
import javafx.beans.property.IntegerProperty;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.scene.Node;
import javafx.scene.shape.Polygon;
import us.ihmc.euclid.referenceFrame.ReferenceFrame;
import us.ihmc.euclid.tuple2D.Point2D;
import us.ihmc.scs2.sessionVisualizer.jfx.yoComposite.Tuple2DProperty;

public class YoPolygonFX2D extends YoGraphicFX2D
{
   private List vertices = new ArrayList<>();
   private IntegerProperty numberOfVertices = null;

   private Polygon polygonNode = new Polygon();

   public YoPolygonFX2D()
   {
      polygonNode.idProperty().bind(nameProperty());
      polygonNode.getProperties().put(YO_GRAPHICFX_ITEM_KEY, this);
   }

   public YoPolygonFX2D(ReferenceFrame worldFrame)
   {
      this();
   }

   @Override
   public void render()
   {
      polygonNode.getPoints().clear();

      if (vertices == null)
         return;

      if (numberOfVertices == null)
      {
         for (Tuple2DProperty vertex : vertices)
         {
            if (vertex.containsNaN())
               break;
            polygonNode.getPoints().addAll(vertex.getX(), vertex.getY());
         }
      }
      else
      {
         int n = Math.min(numberOfVertices.get(), vertices.size());
         for (int i = 0; i < n; i++)
         {
            Point2D vertex = vertices.get(i).toPoint2DInWorld();

            if (vertex.containsNaN())
               break;
            polygonNode.getPoints().addAll(vertex.getX(), vertex.getY());
         }
      }
      polygonNode.setFill(fillColor == null ? null : fillColor.get());
      polygonNode.setStroke(strokeColor == null ? null : strokeColor.get());
      double scale = polygonNode.getLocalToSceneTransform().deltaTransform(1.0, 0.0).getX();
      polygonNode.setStrokeWidth(strokeWidth.get() / scale);
   }

   public void setVertices(List vertices)
   {
      this.vertices = vertices;
   }

   public void addVertex(DoubleProperty x, DoubleProperty y)
   {
      addVertex(new Tuple2DProperty(null, x, y));
   }

   public void addVertex(Tuple2DProperty vertex)
   {
      vertices.add(vertex);
   }

   public void setNumberOfVertices(IntegerProperty numberOfVertices)
   {
      this.numberOfVertices = numberOfVertices;
   }

   public void setNumberOfVertices(int numberOfVertices)
   {
      setNumberOfVertices(new SimpleIntegerProperty(numberOfVertices));
   }

   @Override
   public void clear()
   {
      vertices = null;
      numberOfVertices = null;
      fillColor = null;
      strokeColor = null;
      strokeWidth = null;
   }

   @Override
   public YoPolygonFX2D clone()
   {
      YoPolygonFX2D clone = new YoPolygonFX2D();
      clone.setName(getName());
      clone.setVertices(new ArrayList<>(vertices));
      clone.setNumberOfVertices(numberOfVertices);
      clone.setFillColor(fillColor);
      clone.setStrokeColor(strokeColor);
      clone.setStrokeWidth(strokeWidth);
      return clone;
   }

   public List getVertices()
   {
      return vertices;
   }

   public IntegerProperty getNumberOfVertices()
   {
      return numberOfVertices;
   }

   @Override
   public Node getNode()
   {
      return polygonNode;
   }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy