Check if object's size appears to be zero, when loading the model file.

This commit is contained in:
YuSanka 2021-10-07 09:12:31 +02:00
parent 7340488aaf
commit c15be26bff
3 changed files with 25 additions and 0 deletions

View File

@ -513,6 +513,22 @@ void Model::convert_from_meters(bool only_small_volumes)
} }
} }
static constexpr const double zero_volume = 0.0000000001;
int Model::removed_objects_with_zero_volume()
{
if (objects.size() == 0)
return 0;
int removed = 0;
for (int i = int(objects.size()) - 1; i >= 0; i--)
if (objects[i]->get_object_stl_stats().volume < zero_volume) {
delete_object(size_t(i));
removed++;
}
return removed;
}
void Model::adjust_min_z() void Model::adjust_min_z()
{ {
if (objects.empty()) if (objects.empty())

View File

@ -1124,6 +1124,7 @@ public:
void convert_from_imperial_units(bool only_small_volumes); void convert_from_imperial_units(bool only_small_volumes);
bool looks_like_saved_in_meters() const; bool looks_like_saved_in_meters() const;
void convert_from_meters(bool only_small_volumes); void convert_from_meters(bool only_small_volumes);
int removed_objects_with_zero_volume();
// Ensures that the min z of the model is not negative // Ensures that the min z of the model is not negative
void adjust_min_z(); void adjust_min_z();

View File

@ -2438,6 +2438,14 @@ std::vector<size_t> Plater::priv::load_files(const std::vector<fs::path>& input_
}; };
if (!is_project_file) { if (!is_project_file) {
if (int deleted_objects = model.removed_objects_with_zero_volume(); deleted_objects > 0) {
MessageDialog(q, format_wxstr(_L_PLURAL(
"Object size from file %s appears to be zero.\n"
"This object has been removed from the model",
"Objects size from file %s appear to be zero.\n"
"These objects have been removed from the model", deleted_objects), from_path(filename)) + "\n",
_L("Object size is zero"), wxICON_INFORMATION | wxOK).ShowModal();
}
if (imperial_units) if (imperial_units)
// Convert even if the object is big. // Convert even if the object is big.
convert_from_imperial_units(model, false); convert_from_imperial_units(model, false);