13 #include <json/json.h>
16 namespace visualization {
20 Json::Value polygon_array;
22 Json::Value point_object;
26 polygon_array.append(point_object);
28 value[
"class_name"] =
"SelectionPolygonVolume";
29 value[
"version_major"] = 1;
30 value[
"version_minor"] = 0;
31 value[
"bounding_polygon"] = polygon_array;
39 if (!value.isObject()) {
41 "SelectionPolygonVolume read JSON failed: unsupported json "
45 if (value.get(
"class_name",
"").asString() !=
"SelectionPolygonVolume" ||
46 value.get(
"version_major", 1).asInt() != 1 ||
47 value.get(
"version_minor", 0).asInt() != 0) {
49 "SelectionPolygonVolume read JSON failed: unsupported json "
54 axis_min_ = value.get(
"axis_min", 0.0).asDouble();
55 axis_max_ = value.get(
"axis_max", 0.0).asDouble();
56 const Json::Value &polygon_array = value[
"bounding_polygon"];
57 if (polygon_array.size() == 0) {
59 "SelectionPolygonVolume read JSON failed: empty trajectory.");
63 for (
int i = 0; i < (int)polygon_array.size(); i++) {
64 const Json::Value &point_object = polygon_array[i];
75 return std::make_shared<ccPointCloud>();
76 return CropPointCloudInPolygon(input);
79 std::shared_ptr<ccPointCloud> SelectionPolygonVolume::CropPointCloudInPolygon(
85 const ccMesh &input)
const {
87 return std::make_shared<ccMesh>(
nullptr);
90 "ccMesh contains vertices, but no triangles; "
91 "cropping will always yield an empty "
93 return std::make_shared<ccMesh>(
nullptr);
95 return CropTriangleMeshInPolygon(input);
98 std::shared_ptr<ccMesh> SelectionPolygonVolume::CropTriangleMeshInPolygon(
99 const ccMesh &input)
const {
109 const std::vector<Eigen::Vector3d> &input)
const {
114 const std::vector<CCVector3> &input)
const {
115 std::vector<size_t> output_index;
130 std::vector<double> nodes;
132 "Cropping geometry: ");
133 for (
size_t k = 0; k < input.size(); k++) {
135 const auto &
point = input[k];
152 std::sort(nodes.begin(), nodes.end());
153 auto loc = std::lower_bound(nodes.begin(), nodes.end(),
point(u));
154 if (std::distance(nodes.begin(), loc) % 2 == 1) {
155 output_index.push_back(k);
utility::CountingProgressReporter * progress_bar
static std::vector< Eigen::Matrix< double, 3, 1 > > fromArrayContainer(const std::vector< Vector3Tpl< PointCoordinateType >> &container)
std::shared_ptr< ccMesh > SelectByIndex(const std::vector< size_t > &indices, bool cleanup=true) const
const std::vector< CCVector3 > & getVertices() const
ccGenericPointCloud * getAssociatedCloud() const override
Returns the vertices cloud.
virtual unsigned size() const override
Returns the number of triangles.
A 3D cloud and its associated features (color, normals, scalar fields, etc.)
std::shared_ptr< ccPointCloud > SelectByIndex(const std::vector< size_t > &indices, bool invert=false) const
Function to select points from input ccPointCloud into output ccPointCloud.
std::vector< CCVector3 > & getPoints()
static bool EigenVector3dFromJsonArray(Eigen::Vector3d &vec, const Json::Value &value)
static bool EigenVector3dToJsonArray(const Eigen::Vector3d &vec, Json::Value &value)
std::vector< Eigen::Vector3d > bounding_polygon_
Bounding polygon boundary.
double axis_min_
Minimum axis value.
double axis_max_
Maximum axis value.
std::string orthogonal_axis_
One of {x, y, z}.
bool ConvertToJsonValue(Json::Value &value) const override
std::vector< size_t > CropInPolygon(const ccPointCloud &input) const
bool ConvertFromJsonValue(const Json::Value &value) override
std::shared_ptr< ccPointCloud > CropPointCloud(const ccPointCloud &input) const
std::shared_ptr< ccMesh > CropTriangleMesh(const ccMesh &input) const
Generic file read and write utility for python interface.