/** * Add a series of connected 2D lines to this builder. * @param transformToWorld the transform from the mult-line local coordinates to world. Not modified. * @param points coordinates of the line end points. Not modified. * @param lineWidth width of the lines. * @param color color of the multi-line. Color accuracy depends on the color palette in use. * @param close whether the end of the given array of points should be connected to the beginning or not. */ public void addMultiLine(RigidBodyTransform transformToWorld, Point2d[] points, double lineWidth, Color color, boolean close) { addMultiLine(transformToWorld, Arrays.asList(points), lineWidth, color, close); }
/** * Add a series of connected 2D lines to this builder. * @param transformToWorld the transform from the mult-line local coordinates to world. Not modified. * @param points coordinates of the line end points. Not modified. * @param lineWidth width of the lines. * @param color color of the multi-line. Color accuracy depends on the color palette in use. * @param close whether the end of the given array of points should be connected to the beginning or not. */ public void addMultiLine(RigidBodyTransform transformToWorld, Point2D[] points, double lineWidth, Color color, boolean close) { addMultiLine(transformToWorld, Arrays.asList(points), lineWidth, color, close); }
private void addMultiLine(JavaFXMultiColorMeshBuilder meshBuilder) { List<Point3d> points = new ArrayList<>(); double radius = 0.4; Random random = new Random(); for (double angle = 0.0; angle < 2.0 * Math.PI; angle += 2.0 * Math.PI / 50.0) { double x = radius * random.nextDouble() * Math.cos(angle); double y = radius * Math.sin(angle); double z = 0.1 * random.nextDouble(); points.add(new Point3d(x, y, z)); } meshBuilder.addMultiLine(points, 0.01, Color.YELLOWGREEN, true); }
private synchronized void processFootstepPath(FootstepPlan plan) { meshBuilder.clear(); SideDependentList<Color> colors = solutionWasReceived.get() ? solutionFootstepColors : intermediateFootstepColors; FramePose3D footPose = new FramePose3D(); RigidBodyTransform transformToWorld = new RigidBodyTransform(); ConvexPolygon2D foothold = new ConvexPolygon2D(); for (int i = 0; i < plan.getNumberOfSteps(); i++) { SimpleFootstep footstep = plan.getFootstep(i); Color regionColor = colors.get(footstep.getRobotSide()); footstep.getSoleFramePose(footPose); footPose.get(transformToWorld); transformToWorld.appendTranslation(0.0, 0.0, 0.01); if (footstep.hasFoothold()) footstep.getFoothold(foothold); else foothold.set(defaultFootPolygon); Point2D[] vertices = new Point2D[foothold.getNumberOfVertices()]; for (int j = 0; j < vertices.length; j++) { vertices[j] = new Point2D(foothold.getVertex(j)); } meshBuilder.addMultiLine(transformToWorld, vertices, 0.01, regionColor, true); meshBuilder.addPolygon(transformToWorld, foothold, regionColor); } meshReference.set(new Pair<>(meshBuilder.generateMesh(), meshBuilder.generateMaterial())); }
private Pair<Mesh, Material> generateMeshAndMaterial(PlanarRegionsListMessage newMessage) { meshBuilder.clear(); double lineWidth = 0.01; RigidBodyTransform transformToWorld = new RigidBodyTransform(); PlanarRegionsList planarRegionsList = PlanarRegionMessageConverter.convertToPlanarRegionsList(newMessage); for (int regionIndex = 0; regionIndex < planarRegionsList.getNumberOfPlanarRegions(); regionIndex++) { PlanarRegion planarRegion = planarRegionsList.getPlanarRegion(regionIndex); int regionId = planarRegion.getRegionId(); Color regionColor = getRegionColor(regionId); planarRegion.getTransformToWorld(transformToWorld); meshBuilder.addMultiLine(transformToWorld, planarRegion.getConcaveHull(), lineWidth, regionColor, true); for (int polygonIndex = 0; polygonIndex < planarRegion.getNumberOfConvexPolygons(); polygonIndex++) { ConvexPolygon2D convexPolygon2d = planarRegion.getConvexPolygon(polygonIndex); regionColor = Color.hsb(regionColor.getHue(), 0.9, 0.5 + 0.5 * ((double) polygonIndex / (double) planarRegion.getNumberOfConvexPolygons())); meshBuilder.addPolygon(transformToWorld, convexPolygon2d, regionColor); } } Material material = meshBuilder.generateMaterial(); Mesh mesh = meshBuilder.generateMesh(); return new Pair<>(mesh, material); }
private Pair<Mesh, Material> generateMeshAndMaterial(PlanarRegionsListMessage newMessage) { meshBuilder.clear(); double lineWidth = 0.01; RigidBodyTransform transformToWorld = new RigidBodyTransform(); PlanarRegionsList planarRegionsList = PlanarRegionMessageConverter.convertToPlanarRegionsList(newMessage); for (int regionIndex = 0; regionIndex < planarRegionsList.getNumberOfPlanarRegions(); regionIndex++) { PlanarRegion planarRegion = planarRegionsList.getPlanarRegion(regionIndex); int regionId = planarRegion.getRegionId(); Color regionColor = getRegionColor(regionId); planarRegion.getTransformToWorld(transformToWorld); meshBuilder.addMultiLine(transformToWorld, planarRegion.getConcaveHull(), lineWidth, regionColor, true); for (int polygonIndex = 0; polygonIndex < planarRegion.getNumberOfConvexPolygons(); polygonIndex++) { ConvexPolygon2D convexPolygon2d = planarRegion.getConvexPolygon(polygonIndex); regionColor = Color.hsb(regionColor.getHue(), 0.9, 0.5 + 0.5 * ((double) polygonIndex / (double) planarRegion.getNumberOfConvexPolygons())); meshBuilder.addPolygon(transformToWorld, convexPolygon2d, regionColor); } } Material material = meshBuilder.generateMaterial(); Mesh mesh = meshBuilder.generateMesh(); return new Pair<>(mesh, material); }
private void processFootMesh(FootstepNode node, FootstepNodeSnapData snapData, boolean valid) { meshBuilder.clear(); RigidBodyTransform planarTransformToWorld = new RigidBodyTransform(); FootstepNodeTools.getNodeTransform(node, planarTransformToWorld); RigidBodyTransform snappedTransformToWorld = new RigidBodyTransform(); ConvexPolygon2D foothold = snapData.getCroppedFoothold(); FootstepNodeTools.getSnappedNodeTransform(node, snapData.getSnapTransform(), snappedTransformToWorld); snappedTransformToWorld.appendTranslation(0.0, 0.0, 0.01); planarTransformToWorld.setTranslationZ(snappedTransformToWorld.getTranslationZ() + 0.1); Color regionColor = valid ? Color.GREEN : Color.RED; regionColor = Color.hsb(regionColor.getHue(), 0.9, 1.0); Point2D[] vertices = new Point2D[foothold.getNumberOfVertices()]; for (int j = 0; j < vertices.length; j++) { vertices[j] = new Point2D(foothold.getVertex(j)); } meshBuilder.addMultiLine(snappedTransformToWorld, vertices, 0.01, regionColor, true); meshBuilder.addPolygon(snappedTransformToWorld, foothold, regionColor); // TODO add mesh of planar footstep meshView.setOpacity(0.9); meshView.setMesh(meshBuilder.generateMesh()); meshView.setMaterial(meshBuilder.generateMaterial()); }