mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-07-11 08:47:52 -06:00
Mdel preview renders the actual colors of the filaments based on the filaments currently loaded in the AMS
Ported from BambuStudio
This commit is contained in:
parent
4590c765c6
commit
27f140fb18
20 changed files with 1441 additions and 400 deletions
|
@ -287,7 +287,7 @@ PrintSequence PartPlate::get_real_print_seq(bool* plate_same_as_global) const
|
|||
if (curr_plate_seq == PrintSequence::ByDefault) {
|
||||
curr_plate_seq = global_print_seq;
|
||||
}
|
||||
|
||||
|
||||
if(plate_same_as_global)
|
||||
*plate_same_as_global = (curr_plate_seq == global_print_seq);
|
||||
|
||||
|
@ -2145,6 +2145,27 @@ int PartPlate::remove_instance(int obj_id, int instance_id)
|
|||
return result;
|
||||
}
|
||||
|
||||
BoundingBoxf3 PartPlate::get_objects_bounding_box()
|
||||
{
|
||||
BoundingBoxf3 bbox;
|
||||
for (std::set<std::pair<int, int>>::iterator it = obj_to_instance_set.begin(); it != obj_to_instance_set.end(); ++it)
|
||||
{
|
||||
int obj_id = it->first;
|
||||
int instance_id = it->second;
|
||||
|
||||
if ((obj_id >= 0) && (obj_id < m_model->objects.size()))
|
||||
{
|
||||
ModelObject* object = m_model->objects[obj_id];
|
||||
if ((instance_id >= 0) && (instance_id < object->instances.size()))
|
||||
{
|
||||
BoundingBoxf3 instance_bbox = object->instance_bounding_box(instance_id);
|
||||
bbox.merge(instance_bbox);
|
||||
}
|
||||
}
|
||||
}
|
||||
return bbox;
|
||||
}
|
||||
|
||||
//translate instance on the plate
|
||||
void PartPlate::translate_all_instance(Vec3d position)
|
||||
{
|
||||
|
@ -4083,6 +4104,7 @@ int PartPlateList::notify_instance_update(int obj_id, int instance_id, bool is_n
|
|||
PartPlate* plate = m_plate_list[obj_id - 1000];
|
||||
plate->update_slice_result_valid_state( false );
|
||||
plate->thumbnail_data.reset();
|
||||
plate->no_light_thumbnail_data.reset();
|
||||
plate->top_thumbnail_data.reset();
|
||||
plate->pick_thumbnail_data.reset();
|
||||
|
||||
|
@ -4113,12 +4135,14 @@ int PartPlateList::notify_instance_update(int obj_id, int instance_id, bool is_n
|
|||
plate->update_states();
|
||||
plate->update_slice_result_valid_state();
|
||||
plate->thumbnail_data.reset();
|
||||
plate->no_light_thumbnail_data.reset();
|
||||
plate->top_thumbnail_data.reset();
|
||||
plate->pick_thumbnail_data.reset();
|
||||
return 0;
|
||||
}
|
||||
plate->update_slice_result_valid_state();
|
||||
plate->thumbnail_data.reset();
|
||||
plate->no_light_thumbnail_data.reset();
|
||||
plate->top_thumbnail_data.reset();
|
||||
plate->pick_thumbnail_data.reset();
|
||||
}
|
||||
|
@ -4164,7 +4188,7 @@ int PartPlateList::notify_instance_update(int obj_id, int instance_id, bool is_n
|
|||
{
|
||||
//found a new plate, add it to plate
|
||||
plate->add_instance(obj_id, instance_id, false, &boundingbox);
|
||||
|
||||
|
||||
// spiral mode, update object setting
|
||||
if (plate->config()->has("spiral_mode") && plate->config()->opt_bool("spiral_mode") && !is_object_config_compatible_with_spiral_vase(object)) {
|
||||
if (!is_new) {
|
||||
|
@ -4180,6 +4204,7 @@ int PartPlateList::notify_instance_update(int obj_id, int instance_id, bool is_n
|
|||
|
||||
plate->update_slice_result_valid_state();
|
||||
plate->thumbnail_data.reset();
|
||||
plate->no_light_thumbnail_data.reset();
|
||||
plate->top_thumbnail_data.reset();
|
||||
plate->pick_thumbnail_data.reset();
|
||||
BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(": add it to new plate %1%") % i;
|
||||
|
@ -4217,6 +4242,7 @@ int PartPlateList::notify_instance_removed(int obj_id, int instance_id)
|
|||
plate->remove_instance(obj_id, instance_to_delete);
|
||||
plate->update_slice_result_valid_state();
|
||||
plate->thumbnail_data.reset();
|
||||
plate->no_light_thumbnail_data.reset();
|
||||
plate->top_thumbnail_data.reset();
|
||||
plate->pick_thumbnail_data.reset();
|
||||
}
|
||||
|
@ -5141,6 +5167,8 @@ int PartPlateList::store_to_3mf_structure(PlateDataPtrs& plate_data_list, bool w
|
|||
%(i+1) %plate_data_item->plate_thumbnail.width %plate_data_item->plate_thumbnail.height %plate_data_item->plate_thumbnail.pixels.size();
|
||||
plate_data_item->config.apply(*m_plate_list[i]->config());
|
||||
|
||||
if (m_plate_list[i]->no_light_thumbnail_data.is_valid())
|
||||
plate_data_item->no_light_thumbnail_file = "valid_no_light";
|
||||
if (m_plate_list[i]->top_thumbnail_data.is_valid())
|
||||
plate_data_item->top_file = "valid_top";
|
||||
if (m_plate_list[i]->pick_thumbnail_data.is_valid())
|
||||
|
@ -5256,6 +5284,13 @@ int PartPlateList::load_from_3mf_structure(PlateDataPtrs& plate_data_list)
|
|||
}
|
||||
}
|
||||
|
||||
if (m_plater && !plate_data_list[i]->no_light_thumbnail_file.empty()) {
|
||||
if (boost::filesystem::exists(plate_data_list[i]->no_light_thumbnail_file)) {
|
||||
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": plate %1%, load no_light_thumbnail_file from %2%.")%(i+1) %plate_data_list[i]->no_light_thumbnail_file;
|
||||
m_plate_list[index]->load_thumbnail_data(plate_data_list[i]->no_light_thumbnail_file, m_plate_list[index]->no_light_thumbnail_data);
|
||||
}
|
||||
}
|
||||
|
||||
/*if (m_plater && !plate_data_list[i]->pattern_file.empty()) {
|
||||
if (boost::filesystem::exists(plate_data_list[i]->pattern_file)) {
|
||||
//no need to load pattern data currently
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue