mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-07-14 10:17:55 -06:00
Dependencies check in debug mode
Some common resources can depend on each other - this checks that the requirements are consistent
This commit is contained in:
parent
3db3a61520
commit
7e797eaaf8
2 changed files with 33 additions and 7 deletions
|
@ -43,11 +43,24 @@ SelectionInfo* CommonGizmosDataPool::selection_info()
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
|
// Check the required resources one by one and return true if all
|
||||||
|
// dependencies are met.
|
||||||
bool CommonGizmosDataPool::check_dependencies(CommonGizmosDataID required) const
|
bool CommonGizmosDataPool::check_dependencies(CommonGizmosDataID required) const
|
||||||
{
|
{
|
||||||
// This should iterate over currently required data. Each of them should
|
// This should iterate over currently required data. Each of them should
|
||||||
// be asked about its dependencies and it must check that all dependencies
|
// be asked about its dependencies and it must check that all dependencies
|
||||||
// are also in required and before the current one.
|
// are also in required and before the current one.
|
||||||
|
for (auto& [id, data] : m_data) {
|
||||||
|
// in case we don't use this, the deps are irrelevant
|
||||||
|
if (! (int(required) & int(CommonGizmosDataID(id))))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
|
||||||
|
CommonGizmosDataID deps = data->get_dependencies();
|
||||||
|
assert(int(deps) == (int(deps) & int(required)));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
#endif // NDEBUG
|
#endif // NDEBUG
|
||||||
|
@ -57,7 +70,7 @@ bool CommonGizmosDataPool::check_dependencies(CommonGizmosDataID required) const
|
||||||
|
|
||||||
void SelectionInfo::on_update()
|
void SelectionInfo::on_update()
|
||||||
{
|
{
|
||||||
const Selection& selection = m_common->get_canvas()->get_selection();
|
const Selection& selection = get_pool()->get_canvas()->get_selection();
|
||||||
if (selection.is_single_full_instance())
|
if (selection.is_single_full_instance())
|
||||||
m_model_object = selection.get_model()->objects[selection.get_object_idx()];
|
m_model_object = selection.get_model()->objects[selection.get_object_idx()];
|
||||||
else
|
else
|
||||||
|
@ -71,7 +84,7 @@ void SelectionInfo::on_release()
|
||||||
|
|
||||||
int SelectionInfo::get_active_instance()
|
int SelectionInfo::get_active_instance()
|
||||||
{
|
{
|
||||||
const Selection& selection = m_common->get_canvas()->get_selection();
|
const Selection& selection = get_pool()->get_canvas()->get_selection();
|
||||||
return selection.get_instance_idx();
|
return selection.get_instance_idx();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -81,9 +94,9 @@ int SelectionInfo::get_active_instance()
|
||||||
|
|
||||||
void InstancesHider::on_update()
|
void InstancesHider::on_update()
|
||||||
{
|
{
|
||||||
const ModelObject* mo = m_common->selection_info()->model_object();
|
const ModelObject* mo = get_pool()->selection_info()->model_object();
|
||||||
int active_inst = m_common->selection_info()->get_active_instance();
|
int active_inst = get_pool()->selection_info()->get_active_instance();
|
||||||
GLCanvas3D* canvas = m_common->get_canvas();
|
GLCanvas3D* canvas = get_pool()->get_canvas();
|
||||||
|
|
||||||
if (mo && active_inst != -1) {
|
if (mo && active_inst != -1) {
|
||||||
canvas->toggle_model_objects_visibility(false);
|
canvas->toggle_model_objects_visibility(false);
|
||||||
|
@ -95,7 +108,7 @@ void InstancesHider::on_update()
|
||||||
|
|
||||||
void InstancesHider::on_release()
|
void InstancesHider::on_release()
|
||||||
{
|
{
|
||||||
m_common->get_canvas()->toggle_model_objects_visibility(true);
|
get_pool()->get_canvas()->toggle_model_objects_visibility(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -85,13 +85,22 @@ public:
|
||||||
// Returns whether the resource is currently maintained.
|
// Returns whether the resource is currently maintained.
|
||||||
bool is_valid() const { return m_is_valid; }
|
bool is_valid() const { return m_is_valid; }
|
||||||
|
|
||||||
|
#ifndef NDEBUG
|
||||||
|
// Return a bitmask of all resources that this one relies on.
|
||||||
|
// The dependent resource must have higher ID than the one
|
||||||
|
// it depends on.
|
||||||
|
virtual CommonGizmosDataID get_dependencies() const { return CommonGizmosDataID::None; }
|
||||||
|
#endif // NDEBUG
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
CommonGizmosDataPool* m_common = nullptr;
|
|
||||||
virtual void on_release() = 0;
|
virtual void on_release() = 0;
|
||||||
virtual void on_update() = 0;
|
virtual void on_update() = 0;
|
||||||
|
CommonGizmosDataPool* get_pool() const { return m_common; }
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool m_is_valid = false;
|
bool m_is_valid = false;
|
||||||
|
CommonGizmosDataPool* m_common = nullptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -125,6 +134,10 @@ class InstancesHider : public CommonGizmosDataBase
|
||||||
public:
|
public:
|
||||||
explicit InstancesHider(CommonGizmosDataPool* cgdp)
|
explicit InstancesHider(CommonGizmosDataPool* cgdp)
|
||||||
: CommonGizmosDataBase(cgdp) {}
|
: CommonGizmosDataBase(cgdp) {}
|
||||||
|
#ifndef NDEBUG
|
||||||
|
CommonGizmosDataID get_dependencies() const override { return CommonGizmosDataID::SelectionInfo; }
|
||||||
|
#endif // NDEBUG
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void on_update() override;
|
void on_update() override;
|
||||||
void on_release() override;
|
void on_release() override;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue