mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-07-14 02:07:54 -06:00
ENH: refine the boundary check logic
take object as unit instead of volume Change-Id: Ie8220b183349aac86193021f6a41a5a836231dce
This commit is contained in:
parent
6631f9eada
commit
29d195c18e
1 changed files with 19 additions and 1 deletions
|
@ -1386,6 +1386,7 @@ bool GLVolumeCollection::check_outside_state(const BuildVolume &build_volume, Mo
|
||||||
const std::vector<BoundingBoxf3>& exclude_areas = curr_plate->get_exclude_areas();
|
const std::vector<BoundingBoxf3>& exclude_areas = curr_plate->get_exclude_areas();
|
||||||
|
|
||||||
for (GLVolume* volume : this->volumes)
|
for (GLVolume* volume : this->volumes)
|
||||||
|
{
|
||||||
if (! volume->is_modifier && (volume->shader_outside_printer_detection_enabled || (! volume->is_wipe_tower && volume->composite_id.volume_id >= 0))) {
|
if (! volume->is_modifier && (volume->shader_outside_printer_detection_enabled || (! volume->is_wipe_tower && volume->composite_id.volume_id >= 0))) {
|
||||||
BuildVolume::ObjectState state;
|
BuildVolume::ObjectState state;
|
||||||
const BoundingBoxf3& bb = volume_bbox(*volume);
|
const BoundingBoxf3& bb = volume_bbox(*volume);
|
||||||
|
@ -1413,7 +1414,7 @@ bool GLVolumeCollection::check_outside_state(const BuildVolume &build_volume, Mo
|
||||||
|
|
||||||
int64_t comp_id = ((int64_t)volume->composite_id.object_id << 32) | ((int64_t)volume->composite_id.instance_id);
|
int64_t comp_id = ((int64_t)volume->composite_id.object_id << 32) | ((int64_t)volume->composite_id.instance_id);
|
||||||
volume->is_outside = state != BuildVolume::ObjectState::Inside;
|
volume->is_outside = state != BuildVolume::ObjectState::Inside;
|
||||||
volume->partly_inside = (state == BuildVolume::ObjectState::Colliding);
|
//volume->partly_inside = (state == BuildVolume::ObjectState::Colliding);
|
||||||
if (volume->printable) {
|
if (volume->printable) {
|
||||||
if (overall_state == ModelInstancePVS_Inside && volume->is_outside) {
|
if (overall_state == ModelInstancePVS_Inside && volume->is_outside) {
|
||||||
overall_state = ModelInstancePVS_Fully_Outside;
|
overall_state = ModelInstancePVS_Fully_Outside;
|
||||||
|
@ -1457,6 +1458,23 @@ bool GLVolumeCollection::check_outside_state(const BuildVolume &build_volume, Mo
|
||||||
BOOST_LOG_TRIVIAL(debug) << "instance includes " << volume->name << " is partially outside of bed";
|
BOOST_LOG_TRIVIAL(debug) << "instance includes " << volume->name << " is partially outside of bed";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (GLVolume* volume : this->volumes)
|
||||||
|
{
|
||||||
|
if (! volume->is_modifier && (volume->shader_outside_printer_detection_enabled || (! volume->is_wipe_tower && volume->composite_id.volume_id >= 0)))
|
||||||
|
{
|
||||||
|
int64_t comp_id = ((int64_t)volume->composite_id.object_id << 32) | ((int64_t)volume->composite_id.instance_id);
|
||||||
|
if (model_state.find(comp_id) != model_state.end())
|
||||||
|
{
|
||||||
|
if (model_state[comp_id] == ModelInstancePVS_Partly_Outside) {
|
||||||
|
volume->partly_inside = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
volume->partly_inside = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (out_state != nullptr)
|
if (out_state != nullptr)
|
||||||
*out_state = overall_state;
|
*out_state = overall_state;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue