private void computeScanMesh() { LidarScanMessage message = newMessageToRender.getAndSet(null); if (message == null) return; Point3D32 scanPoint = new Point3D32(); scanMeshBuilder.clear(); int numberOfScanPoints = message.getScan().size() / 3; for (int i = 0; i < numberOfScanPoints; i++) { double alpha = i / (double) numberOfScanPoints; Color color = Color.hsb(alpha * 240.0, 1.0, 1.0); MessageTools.unpackScanPoint(message, i, scanPoint); scanMeshBuilder.addMesh(MeshDataGenerator.Tetrahedron(SCAN_POINT_SIZE), scanPoint, color); } MeshView scanMeshView = new MeshView(scanMeshBuilder.generateMesh()); scanMeshView.setMaterial(scanMeshBuilder.generateMaterial()); scanMeshToRender.set(scanMeshView); scanMeshBuilder.clear(); }
private void computeScanMesh() { LidarScanMessage message = newMessageToRender.getAndSet(null); if (message == null) return; Point3f scanPoint = new Point3f(); scanMeshBuilder.clear(); for (int i = 0; i < message.getNumberOfScanPoints(); i++) { double alpha = i / (double) message.getNumberOfScanPoints(); Color color = Color.hsb(alpha * 240.0, 1.0, 1.0); message.getScanPoint(i, scanPoint); scanMeshBuilder.addMesh(MeshDataGenerator.Tetrahedron(SCAN_POINT_SIZE), scanPoint, color); } MeshView scanMeshView = new MeshView(scanMeshBuilder.generateMesh()); scanMeshView.setMaterial(scanMeshBuilder.generateMaterial()); scanMeshToRender.set(scanMeshView); scanMeshBuilder.clear(); }
@Override public void run() { if (!enable.get()) return; LidarScanMessage message = newMessageToRender.getAndSet(null); if (message == null) return; Point3D32 scanPoint = new Point3D32(); meshBuilder.clear(); int numberOfScanPoints = message.getScan().size() / 3; for (int i = 0; i < numberOfScanPoints; i++) { double alpha = i / (double) numberOfScanPoints; Color color = Color.hsb(alpha * 240.0, 1.0, 1.0); MessageTools.unpackScanPoint(message, i, scanPoint); meshBuilder.addMesh(MeshDataGenerator.Tetrahedron(SCAN_POINT_SIZE), scanPoint, color); } MeshView scanMeshView = new MeshView(meshBuilder.generateMesh()); scanMeshView.setMaterial(meshBuilder.generateMaterial()); scanMeshToRender.set(scanMeshView); meshBuilder.clear(); }
private UIOcTreeNodeMeshView createSubTreeMeshView(UIOcTreeNode subTreeRoot) { meshBuilder.clear(); Iterable<UIOcTreeNode> iterable = createLeafIterable(subTreeRoot, treeDepthForDisplay.getValue()); for (UIOcTreeNode node : iterable) { if (!node.isPartOfRegion() || !hidePlanarRegionNodes.getValue()) addNodeMesh(meshBuilder, displayType.getValue(), coloringType.getValue(), node); } OcTreeKey rootKey = subTreeRoot.getKeyCopy(); Mesh mesh = meshBuilder.generateMesh(); Material material = meshBuilder.generateMaterial(); UIOcTreeNodeMeshView meshView = new UIOcTreeNodeMeshView(rootKey, mesh, material); meshBuilder.clear(); return meshView; }
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()); }