| 976 | } |
| 977 | |
| 978 | void ModelViewerWidget::ComputeModelOriginAndScale() { |
| 979 | std::vector<double> x_coords; |
| 980 | std::vector<double> y_coords; |
| 981 | std::vector<double> z_coords; |
| 982 | |
| 983 | if (!reg_image_ids.empty()) { |
| 984 | x_coords.resize(reg_image_ids.size()); |
| 985 | y_coords.resize(reg_image_ids.size()); |
| 986 | z_coords.resize(reg_image_ids.size()); |
| 987 | for (size_t i = 0; i < reg_image_ids.size(); ++i) { |
| 988 | const Image& image = images[reg_image_ids[i]]; |
| 989 | const Eigen::Vector3d proj_center = image.ProjectionCenter(); |
| 990 | x_coords[i] = proj_center.x(); |
| 991 | y_coords[i] = proj_center.y(); |
| 992 | z_coords[i] = proj_center.z(); |
| 993 | } |
| 994 | } else if (point_cloud.has_value() && !point_cloud->empty()) { |
| 995 | x_coords.reserve(point_cloud->size()); |
| 996 | y_coords.reserve(point_cloud->size()); |
| 997 | z_coords.reserve(point_cloud->size()); |
| 998 | for (const auto& point : *point_cloud) { |
| 999 | x_coords.push_back(point.x); |
| 1000 | y_coords.push_back(point.y); |
| 1001 | z_coords.push_back(point.z); |
| 1002 | } |
| 1003 | } else if (surface_mesh.has_value() && !surface_mesh->mesh.vertices.empty()) { |
| 1004 | x_coords.reserve(surface_mesh->mesh.vertices.size()); |
| 1005 | y_coords.reserve(surface_mesh->mesh.vertices.size()); |
| 1006 | z_coords.reserve(surface_mesh->mesh.vertices.size()); |
| 1007 | for (const auto& vertex : surface_mesh->mesh.vertices) { |
| 1008 | x_coords.push_back(vertex.x); |
| 1009 | y_coords.push_back(vertex.y); |
| 1010 | z_coords.push_back(vertex.z); |
| 1011 | } |
| 1012 | } else { |
| 1013 | model_origin_.setZero(); |
| 1014 | model_scale_ = 1; |
| 1015 | return; |
| 1016 | } |
| 1017 | |
| 1018 | model_origin_ = |
| 1019 | -Eigen::Vector3d(Median(x_coords), Median(y_coords), Median(z_coords)); |
| 1020 | model_scale_ = |
| 1021 | 1. / std::max({Percentile(x_coords, 95) - Percentile(x_coords, 5), |
| 1022 | Percentile(y_coords, 95) - Percentile(y_coords, 5), |
| 1023 | Percentile(z_coords, 95) - Percentile(z_coords, 5), |
| 1024 | 1e-6}); |
| 1025 | } |
| 1026 | |
| 1027 | void ModelViewerWidget::Upload() { |
| 1028 | point_colormap_->Prepare(cameras, images, points3D, reg_image_ids); |
nothing calls this directly
no test coverage detected