OrcaSlicer latest
OrcaSlicer
Loading...
Searching...
No Matches
Slic3r::GUI::ObjectDataViewModel Class Reference

#include </home/runner/work/OrcaSlicer/OrcaSlicer/src/slic3r/GUI/ObjectDataViewModel.hpp>

Inheritance diagram for Slic3r::GUI::ObjectDataViewModel:
Collaboration diagram for Slic3r::GUI::ObjectDataViewModel:

Public Member Functions

 ObjectDataViewModel ()
 ~ObjectDataViewModel ()
void Init ()
std::map< int, std::map< int, int > > & get_ui_and_3d_volume_map ()
int get_real_volume_index_in_3d (int ui_object_value, int ui_volume_value)
int get_real_volume_index_in_ui (int ui_object_value, int _3d_value)
wxDataViewItem AddPlate (PartPlate *part_plate, wxString name=wxEmptyString, bool refresh=true)
wxDataViewItem AddObject (ModelObject *model_object, std::string warning_bitmap, bool has_lock=false, bool refresh=true)
wxDataViewItem AddVolumeChild (const wxDataViewItem &parent_item, const wxString &name, const Slic3r::ModelVolumeType volume_type, const bool is_text_volume, const bool is_svg_volume, const std::string &warning_icon_name=std::string(), const int extruder=0, const bool create_frst_child=true)
wxDataViewItem AddSettingsChild (const wxDataViewItem &parent_item)
wxDataViewItem AddInfoChild (const wxDataViewItem &parent_item, InfoItemType info_type)
wxDataViewItem AddInstanceChild (const wxDataViewItem &parent_item, size_t num)
wxDataViewItem AddInstanceChild (const wxDataViewItem &parent_item, const std::vector< bool > &print_indicator, const std::vector< int > &plate_indicator)
wxDataViewItem AddLayersRoot (const wxDataViewItem &parent_item)
wxDataViewItem AddLayersChild (const wxDataViewItem &parent_item, const t_layer_height_range &layer_range, const int extruder=0, const int index=-1)
size_t GetItemIndexForFirstVolume (ObjectDataViewModelNode *node_parent)
wxDataViewItem DeletePlate (const int plate_idx)
wxDataViewItem Delete (const wxDataViewItem &item)
wxDataViewItem DeleteLastInstance (const wxDataViewItem &parent_item, size_t num)
void ResetAll ()
void DeleteChildren (wxDataViewItem &parent)
void DeleteVolumeChildren (wxDataViewItem &parent)
void DeleteSettings (const wxDataViewItem &parent)
wxDataViewItem GetItemByPlateId (int plate_idx)
void SetCurSelectedPlateFullName (int plate_idx, const std::string &)
wxDataViewItem GetItemById (int obj_idx)
wxDataViewItem GetItemById (const int obj_idx, const int sub_obj_idx, const ItemType parent_type)
wxDataViewItem GetItemByVolumeId (int obj_idx, int volume_idx)
wxDataViewItem GetItemByInstanceId (int obj_idx, int inst_idx)
wxDataViewItem GetItemByLayerId (int obj_idx, int layer_idx)
wxDataViewItem GetItemByLayerRange (const int obj_idx, const t_layer_height_range &layer_range)
int GetItemIdByLayerRange (const int obj_idx, const t_layer_height_range &layer_range)
int GetIdByItem (const wxDataViewItem &item) const
int GetPlateIdByItem (const wxDataViewItem &item) const
int GetIdByItemAndType (const wxDataViewItem &item, const ItemType type) const
int GetObjectIdByItem (const wxDataViewItem &item) const
int GetVolumeIdByItem (const wxDataViewItem &item) const
int GetInstanceIdByItem (const wxDataViewItem &item) const
int GetLayerIdByItem (const wxDataViewItem &item) const
void GetItemInfo (const wxDataViewItem &item, ItemType &type, int &obj_idx, int &idx)
int GetRowByItem (const wxDataViewItem &item) const
bool IsEmpty ()
bool InvalidItem (const wxDataViewItem &item)
wxString GetName (const wxDataViewItem &item) const
wxBitmap & GetBitmap (const wxDataViewItem &item) const
wxString GetExtruder (const wxDataViewItem &item) const
int GetExtruderNumber (const wxDataViewItem &item) const
unsigned int GetColumnCount () const override
wxString GetColumnType (unsigned int col) const override
void GetValue (wxVariant &variant, const wxDataViewItem &item, unsigned int col) const override
bool SetValue (const wxVariant &variant, const wxDataViewItem &item, unsigned int col) override
bool SetValue (const wxVariant &variant, const int item_idx, unsigned int col)
void SetExtruder (const wxString &extruder, wxDataViewItem item)
void OnPlateChange (const int plate_idx, wxDataViewItem item)
void SetPlateIdx (const int plate_idx, wxDataViewItem item)
bool SetName (const wxString &new_name, wxDataViewItem item)
wxDataViewItem ReorganizeChildren (const int cur_volume_id, const int new_volume_id, const wxDataViewItem &parent)
wxDataViewItem ReorganizeObjects (int current_id, int new_id)
bool IsEnabled (const wxDataViewItem &item, unsigned int col) const override
wxDataViewItem GetParent (const wxDataViewItem &item) const override
wxDataViewItem GetObject (const wxDataViewItem &item) const
wxDataViewItem GetTopParent (const wxDataViewItem &item) const
bool IsContainer (const wxDataViewItem &item) const override
unsigned int GetChildren (const wxDataViewItem &parent, wxDataViewItemArray &array) const override
void GetAllChildren (const wxDataViewItem &parent, wxDataViewItemArray &array) const
bool HasContainerColumns (const wxDataViewItem &WXUNUSED(item)) const override
bool HasInfoItem (InfoItemType type) const
ItemType GetItemType (const wxDataViewItem &item) const
ItemType GetItemType (const wxDataViewItem &item, int &plate_idx) const
InfoItemType GetInfoItemType (const wxDataViewItem &item) const
wxDataViewItem GetItemByType (const wxDataViewItem &parent_item, ItemType type) const
wxDataViewItem GetSettingsItem (const wxDataViewItem &item) const
wxDataViewItem GetInstanceRootItem (const wxDataViewItem &item) const
wxDataViewItem GetLayerRootItem (const wxDataViewItem &item) const
wxDataViewItem GetInfoItemByType (const wxDataViewItem &parent_item, InfoItemType type) const
wxDataViewItem GetObjectItem (const ModelObject *mo) const
wxDataViewItem GetVolumeItem (const wxDataViewItem &parent, int vol_idx) const
bool IsSettingsItem (const wxDataViewItem &item) const
void UpdateSettingsDigest (const wxDataViewItem &item, const std::vector< std::string > &categories)
bool IsPrintable (const wxDataViewItem &item) const
void UpdateObjectPrintable (wxDataViewItem parent_item)
void UpdateInstancesPrintable (wxDataViewItem parent_item)
bool IsVariableHeight (const wxDataViewItem &item) const
void SetVolumeType (const wxDataViewItem &item, const Slic3r::ModelVolumeType type)
ModelVolumeType GetVolumeType (const wxDataViewItem &item)
wxDataViewItem SetPrintableState (PrintIndicator printable, int obj_idx, int subobj_idx=-1, ItemType subobj_type=itInstance)
wxDataViewItem SetObjectPrintableState (PrintIndicator printable, wxDataViewItem obj_item)
wxDataViewItem SetObjectVariableHeightState (VaryHeightIndicator vari_height, wxDataViewItem obj_item)
bool IsColorPainted (wxDataViewItem &item) const
bool IsSupportPainted (wxDataViewItem &item) const
bool IsSinked (wxDataViewItem &item) const
void SetColorPaintState (const bool painted, wxDataViewItem obj_item, bool force=false)
void SetSupportPaintState (const bool painted, wxDataViewItem obj_item, bool force=false)
void SetSinkState (const bool painted, wxDataViewItem obj_item, bool force=false)
void SetAssociatedControl (wxDataViewCtrl *ctrl)
void Rescale ()
void AddWarningIcon (const wxDataViewItem &item, const std::string &warning_name)
void DeleteWarningIcon (const wxDataViewItem &item, const bool unmark_object=false)
void UpdateWarningIcon (const wxDataViewItem &item, const std::string &warning_name)
void UpdateCutObjectIcon (const wxDataViewItem &item, bool has_cut_icon)
bool HasWarningIcon (const wxDataViewItem &item) const
t_layer_height_range GetLayerRangeByItem (const wxDataViewItem &item) const
bool UpdateColumValues (unsigned col)
void UpdateExtruderBitmap (wxDataViewItem item)
void UpdateVolumesExtruderBitmap (wxDataViewItem object_item, bool use_obj_extruder=false)
int GetDefaultExtruderIdx (wxDataViewItem item)
void UpdateItemNames ()
void assembly_name (ObjectDataViewModelNode *item, wxString name)
void assembly_name ()
std::vector< std::tuple< ObjectDataViewModelNode *, wxString, wxString > > get_assembly_name_list () const
void search_object (wxString search_text)
std::vector< std::tuple< ObjectDataViewModelNode *, wxString, wxString > > get_found_list () const
void sys_color_changed ()

Private Member Functions

wxDataViewItem AddRoot (const wxDataViewItem &parent_item, const ItemType root_type)
wxDataViewItem AddInstanceRoot (const wxDataViewItem &parent_item)
void AddAllChildren (const wxDataViewItem &parent)
void ReparentObject (ObjectDataViewModelNode *plate, ObjectDataViewModelNode *object)
wxDataViewItem AddOutsidePlate (bool refresh=true)
void UpdateBitmapForNode (ObjectDataViewModelNode *node)
void UpdateBitmapForNode (ObjectDataViewModelNode *node, const std::string &warning_icon_name, bool has_lock)

Private Attributes

std::vector< ObjectDataViewModelNode * > m_plates
std::vector< ObjectDataViewModelNode * > m_objects
std::vector< wxBitmap > m_volume_bmps
std::vector< wxBitmap > m_text_volume_bmps
std::vector< wxBitmap > m_svg_volume_bmps
std::map< InfoItemType, wxBitmap > m_info_bmps
wxBitmap m_empty_bmp
wxBitmap m_warning_bmp
wxBitmap m_warning_manifold_bmp
wxBitmap m_lock_bmp
ObjectDataViewModelNode * m_plate_outside
wxDataViewCtrl * m_ctrl { nullptr }
std::vector< std::tuple< ObjectDataViewModelNode *, wxString, wxString > > assembly_name_list
std::vector< std::tuple< ObjectDataViewModelNode *, wxString, wxString > > search_found_list
std::map< int, std::map< int, int > > m_ui_and_3d_volume_maps

Detailed Description

Constructor & Destructor Documentation

◆ ObjectDataViewModel()

Slic3r::GUI::ObjectDataViewModel::ObjectDataViewModel ( )
479{
480 m_bitmap_cache = new Slic3r::GUI::BitmapCache;
481
488
489 for (auto item : INFO_ITEMS)
490 m_info_bmps[item.first] = create_scaled_bitmap(item.second.bmp_name);
491
492
493 m_plate_outside = nullptr;
494}
static std::vector< wxBitmap > get_text_volume_bitmaps()
Definition GUI_Factories.cpp:542
static std::vector< wxBitmap > get_volume_bitmaps()
Definition GUI_Factories.cpp:532
static std::vector< wxBitmap > get_svg_volume_bitmaps()
Definition GUI_Factories.cpp:551
std::vector< wxBitmap > m_svg_volume_bmps
Definition ObjectDataViewModel.hpp:352
wxBitmap m_warning_bmp
Definition ObjectDataViewModel.hpp:355
wxBitmap m_lock_bmp
Definition ObjectDataViewModel.hpp:357
std::vector< wxBitmap > m_text_volume_bmps
Definition ObjectDataViewModel.hpp:351
std::map< InfoItemType, wxBitmap > m_info_bmps
Definition ObjectDataViewModel.hpp:353
std::vector< wxBitmap > m_volume_bmps
Definition ObjectDataViewModel.hpp:350
wxBitmap m_warning_manifold_bmp
Definition ObjectDataViewModel.hpp:356
ObjectDataViewModelNode * m_plate_outside
Definition ObjectDataViewModel.hpp:359
static constexpr char WarningIcon[]
Definition ObjectDataViewModel.cpp:62
const std::map< InfoItemType, InfoItemAtributes > INFO_ITEMS
Definition ObjectDataViewModel.cpp:87
static constexpr char WarningManifoldIcon[]
Definition ObjectDataViewModel.cpp:63
static constexpr char LockIcon[]
Definition ObjectDataViewModel.cpp:64
BitmapCache * m_bitmap_cache
Definition ObjectDataViewModel.cpp:42
wxBitmap create_scaled_bitmap(const std::string &bmp_name_in, wxWindow *win, const int px_cnt, const bool grayscale, const std::string &new_color, const bool menu_bitmap, const bool resize, const bool bitmap2, const std::vector< std::string > &array_new_color)
Definition wxExtensions.cpp:448

References create_scaled_bitmap(), Slic3r::GUI::MenuFactory::get_svg_volume_bitmaps(), Slic3r::GUI::MenuFactory::get_text_volume_bitmaps(), Slic3r::GUI::MenuFactory::get_volume_bitmaps(), Slic3r::GUI::INFO_ITEMS, Slic3r::GUI::LockIcon, Slic3r::GUI::m_bitmap_cache, m_info_bmps, m_lock_bmp, m_plate_outside, m_svg_volume_bmps, m_text_volume_bmps, m_volume_bmps, m_warning_bmp, m_warning_manifold_bmp, Slic3r::GUI::WarningIcon, and Slic3r::GUI::WarningManifoldIcon.

Here is the call graph for this function:

◆ ~ObjectDataViewModel()

Slic3r::GUI::ObjectDataViewModel::~ObjectDataViewModel ( )
497{
498 for (auto object : m_objects)
499 delete object;
500 delete m_bitmap_cache;
501 m_bitmap_cache = nullptr;
502}
std::vector< ObjectDataViewModelNode * > m_objects
Definition ObjectDataViewModel.hpp:349

References Slic3r::GUI::m_bitmap_cache, and m_objects.

Member Function Documentation

◆ AddAllChildren()

void Slic3r::GUI::ObjectDataViewModel::AddAllChildren ( const wxDataViewItem & parent)
private
1900{
1901 ObjectDataViewModelNode* node = static_cast<ObjectDataViewModelNode*>(parent.GetID());
1902 if (!node || node->GetChildCount() == 0)
1903 return;
1904
1905 wxDataViewItemArray array;
1906 const size_t count = node->GetChildCount();
1907 for (size_t pos = 0; pos < count; pos++) {
1908 ObjectDataViewModelNode* child = node->GetChildren().Item(pos);
1909 array.Add(wxDataViewItem((void*)child));
1910 ItemAdded(parent, wxDataViewItem((void*)child));
1911 }
1912
1913 for (const auto& item : array)
1914 AddAllChildren(item);
1915
1916 m_ctrl->Expand(parent);
1917};
static unsigned int count
Definition AuxiliaryDataViewModel.cpp:246
void AddAllChildren(const wxDataViewItem &parent)
Definition ObjectDataViewModel.cpp:1899
wxDataViewCtrl * m_ctrl
Definition ObjectDataViewModel.hpp:361
Vec3d pos(const Pt &p)
Definition ReprojectPointsOnMesh.hpp:16

References AddAllChildren(), count, Slic3r::GUI::ObjectDataViewModelNode::GetChildCount(), Slic3r::GUI::ObjectDataViewModelNode::GetChildren(), and m_ctrl.

Referenced by AddAllChildren(), ReorganizeChildren(), and ReorganizeObjects().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ AddInfoChild()

wxDataViewItem Slic3r::GUI::ObjectDataViewModel::AddInfoChild ( const wxDataViewItem & parent_item,
InfoItemType info_type )
729{
730 ObjectDataViewModelNode *root = static_cast<ObjectDataViewModelNode*>(parent_item.GetID());
731 if (!root) return wxDataViewItem(0);
732
733 const auto node = new ObjectDataViewModelNode(root, info_type);
734
735 // The new item should be added according to its order in InfoItemType.
736 // Find last info item with lower index and append after it.
737 const auto& children = root->GetChildren();
738 // If SettingsItem exists, it have to be on the first position always
739 bool is_settings_item = children.size() > 0 && children[0]->GetType() == itSettings;
740 int idx = is_settings_item ? 0 : -1;
741 for (size_t i = is_settings_item ? 1 : 0; i < children.size(); ++i) {
742 if (children[i]->GetType() == itInfo && int(children[i]->GetInfoItemType()) < int(info_type) )
743 idx = i;
744 }
745
746 root->Insert(node, idx+1);
747 node->SetBitmap(m_info_bmps.at(info_type));
748 // notify control
749 const wxDataViewItem child((void*)node);
750 ItemAdded(parent_item, child);
751 return child;
752}
InfoItemType GetInfoItemType(const wxDataViewItem &item) const
Definition ObjectDataViewModel.cpp:2165
@ itInfo
Definition ObjectDataViewModel.hpp:44
@ itSettings
Definition ObjectDataViewModel.hpp:41

References Slic3r::GUI::ObjectDataViewModelNode::GetChildren(), GetInfoItemType(), Slic3r::GUI::ObjectDataViewModelNode::Insert(), Slic3r::GUI::itInfo, Slic3r::GUI::itSettings, and m_info_bmps.

Here is the call graph for this function:

◆ AddInstanceChild() [1/2]

wxDataViewItem Slic3r::GUI::ObjectDataViewModel::AddInstanceChild ( const wxDataViewItem & parent_item,
const std::vector< bool > & print_indicator,
const std::vector< int > & plate_indicator )
832{
833 const wxDataViewItem inst_root_item = AddInstanceRoot(parent_item);
834 if (!inst_root_item) return wxDataViewItem(0);
835
836 ObjectDataViewModelNode* inst_root_node = static_cast<ObjectDataViewModelNode*>(inst_root_item.GetID());
837
838 // Add instance nodes
839 ObjectDataViewModelNode *instance_node = nullptr;
840 size_t counter = 0;
841 while (counter < print_indicator.size()) {
842 instance_node = new ObjectDataViewModelNode(inst_root_node, itInstance, plate_indicator[counter]);
843
844 instance_node->set_printable_icon(print_indicator[counter] ? piPrintable : piUnprintable);
845
846 inst_root_node->Append(instance_node);
847 // notify control
848 const wxDataViewItem instance_item((void*)instance_node);
849 ItemAdded(inst_root_item, instance_item);
850 ++counter;
851 }
852
853 // update object_node printable property
854 UpdateObjectPrintable(parent_item);
855
856 return wxDataViewItem((void*)instance_node);
857}
void UpdateObjectPrintable(wxDataViewItem parent_item)
Definition ObjectDataViewModel.cpp:859
wxDataViewItem AddInstanceRoot(const wxDataViewItem &parent_item)
Definition ObjectDataViewModel.cpp:811
@ itInstance
Definition ObjectDataViewModel.hpp:40
@ piUnprintable
Definition ObjectDataViewModel.hpp:65
@ piPrintable
Definition ObjectDataViewModel.hpp:64

References AddInstanceRoot(), Slic3r::GUI::ObjectDataViewModelNode::Append(), Slic3r::GUI::itInstance, Slic3r::GUI::piPrintable, Slic3r::GUI::piUnprintable, Slic3r::GUI::ObjectDataViewModelNode::set_printable_icon(), and UpdateObjectPrintable().

Here is the call graph for this function:

◆ AddInstanceChild() [2/2]

wxDataViewItem Slic3r::GUI::ObjectDataViewModel::AddInstanceChild ( const wxDataViewItem & parent_item,
size_t num )
817{
818 std::vector<bool> print_indicator(num, true);
819 std::vector<int> plate_indicator(num, -1);
820
821 // if InstanceRoot item isn't created for this moment
822 if (!GetInstanceRootItem(parent_item).IsOk())
823 // use object's printable state to first instance
824 print_indicator[0] = IsPrintable(parent_item);
825
826 return wxDataViewItem((void*)AddInstanceChild(parent_item, print_indicator, plate_indicator));
827}
bool IsPrintable(const wxDataViewItem &item) const
Definition ObjectDataViewModel.cpp:902
wxDataViewItem GetInstanceRootItem(const wxDataViewItem &item) const
Definition ObjectDataViewModel.cpp:2195
wxDataViewItem AddInstanceChild(const wxDataViewItem &parent_item, size_t num)
Definition ObjectDataViewModel.cpp:816

References AddInstanceChild(), GetInstanceRootItem(), and IsPrintable().

Referenced by AddInstanceChild().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ AddInstanceRoot()

wxDataViewItem Slic3r::GUI::ObjectDataViewModel::AddInstanceRoot ( const wxDataViewItem & parent_item)
private
812{
813 return AddRoot(parent_item, itInstanceRoot);
814}
wxDataViewItem AddRoot(const wxDataViewItem &parent_item, const ItemType root_type)
Definition ObjectDataViewModel.cpp:794
@ itInstanceRoot
Definition ObjectDataViewModel.hpp:39

References AddRoot(), and Slic3r::GUI::itInstanceRoot.

Referenced by AddInstanceChild().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ AddLayersChild()

wxDataViewItem Slic3r::GUI::ObjectDataViewModel::AddLayersChild ( const wxDataViewItem & parent_item,
const t_layer_height_range & layer_range,
const int extruder = 0,
const int index = -1 )
928{
929 ObjectDataViewModelNode *parent_node = static_cast<ObjectDataViewModelNode*>(parent_item.GetID());
930 if (!parent_node) return wxDataViewItem(0);
931
932 // BBS
933 wxString extruder_str = extruder == 0 ? _(L("default")) : wxString::Format("%d", extruder);
934
935 // get LayerRoot node
936 ObjectDataViewModelNode *layer_root_node;
937 wxDataViewItem layer_root_item;
938
939 if (parent_node->GetType() & itLayerRoot) {
940 layer_root_node = parent_node;
941 layer_root_item = parent_item;
942 }
943 else {
944 const int root_idx = get_root_idx(parent_node, itLayerRoot);
945 if (root_idx < 0) return wxDataViewItem(0);
946 layer_root_node = parent_node->GetNthChild(root_idx);
947 layer_root_item = wxDataViewItem((void*)layer_root_node);
948 }
949
950 // Add layer node
951 ObjectDataViewModelNode *layer_node = new ObjectDataViewModelNode(layer_root_node, layer_range, index, extruder_str);
952 if (index < 0)
953 layer_root_node->Append(layer_node);
954 else
955 layer_root_node->Insert(layer_node, index);
956
957 // notify control
958 const wxDataViewItem layer_item((void*)layer_node);
959 ItemAdded(layer_root_item, layer_item);
960
961 return layer_item;
962}
#define _(s)
Definition 3mf.cpp:306
#define L(s)
Definition ExtrusionEntity.cpp:25
@ itLayerRoot
Definition ObjectDataViewModel.hpp:42

References _, Slic3r::GUI::ObjectDataViewModelNode::Append(), Slic3r::GUI::get_root_idx(), Slic3r::GUI::ObjectDataViewModelNode::GetNthChild(), Slic3r::GUI::ObjectDataViewModelNode::GetType(), Slic3r::GUI::ObjectDataViewModelNode::Insert(), Slic3r::GUI::itLayerRoot, and L.

Here is the call graph for this function:

◆ AddLayersRoot()

wxDataViewItem Slic3r::GUI::ObjectDataViewModel::AddLayersRoot ( const wxDataViewItem & parent_item)
920{
921 return AddRoot(parent_item, itLayerRoot);
922}

References AddRoot(), and Slic3r::GUI::itLayerRoot.

Here is the call graph for this function:

◆ AddObject()

wxDataViewItem Slic3r::GUI::ObjectDataViewModel::AddObject ( ModelObject * model_object,
std::string warning_bitmap,
bool has_lock = false,
bool refresh = true )
621{
622 // get object node params
623 wxString name = from_u8(model_object->name);
624 int extruder = model_object->config.has("extruder") ? model_object->config.extruder() : 1;
625 int plate_idx = -1;
626 ObjectDataViewModelNode* plate_node = nullptr;
627 for (auto plate : m_plates) {
628 if (plate->m_part_plate != nullptr &&
629 plate->m_part_plate->contain_instance_totally(model_object, 0))
630 {
631 plate_node = plate;
632 plate_idx = plate->m_part_plate->get_index();
633 break;
634 }
635 }
636
637 // create object node
638 //const wxString extruder_str = extruder == 0 ? _(L("default")) : wxString::Format("%d", extruder);
639 const wxString extruder_str = wxString::Format("%d", extruder);
640 auto obj_node = new ObjectDataViewModelNode(name, extruder_str, plate_idx, model_object);
641 // Add warning icon if detected auto-repaire
642 UpdateBitmapForNode(obj_node, warning_bitmap, has_lock);
643
644 if (plate_node != nullptr) {
645 obj_node->m_parent = plate_node;
646 }
647 else {
648 obj_node->m_parent = m_plate_outside;
649 plate_node = m_plate_outside;
650 }
651
652 m_objects.push_back(obj_node);
653 plate_node->GetChildren().push_back(obj_node);
654
655 // notify control
656 wxDataViewItem child((void*)obj_node);
657 wxDataViewItem parent((void*)plate_node);
658
659 if (refresh) {
660 ItemAdded(parent, child);
661 }
662 return child;
663}
void UpdateBitmapForNode(ObjectDataViewModelNode *node)
Definition ObjectDataViewModel.cpp:565
std::vector< ObjectDataViewModelNode * > m_plates
Definition ObjectDataViewModel.hpp:348
wxString from_u8(const std::string &str)
Definition GUI.cpp:544

References Slic3r::ModelObject::config, Slic3r::ModelConfig::extruder(), Slic3r::GUI::from_u8(), Slic3r::GUI::PartPlate::get_index(), Slic3r::GUI::ObjectDataViewModelNode::GetChildren(), Slic3r::ModelConfig::has(), m_objects, Slic3r::GUI::ObjectDataViewModelNode::m_part_plate, m_plate_outside, m_plates, Slic3r::ModelObject::name, and UpdateBitmapForNode().

Here is the call graph for this function:

◆ AddOutsidePlate()

wxDataViewItem Slic3r::GUI::ObjectDataViewModel::AddOutsidePlate ( bool refresh = true)
private
558{
559 wxDataViewItem plate_item = AddPlate(nullptr, _L("Outside"));
560 m_plate_outside = (ObjectDataViewModelNode*)plate_item.GetID();
561
562 return plate_item;
563}
#define _L(s)
Definition OBJ.cpp:34
wxDataViewItem AddPlate(PartPlate *part_plate, wxString name=wxEmptyString, bool refresh=true)
Definition ObjectDataViewModel.cpp:514

References _L, AddPlate(), and m_plate_outside.

Referenced by Init(), and ResetAll().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ AddPlate()

wxDataViewItem Slic3r::GUI::ObjectDataViewModel::AddPlate ( PartPlate * part_plate,
wxString name = wxEmptyString,
bool refresh = true )
515{
516 int plate_idx = part_plate ? part_plate->get_index() : -1;
517 wxString plate_name = name;
518 if (name.empty()) {
519 plate_name = _L("Plate");
520 plate_name += wxString::Format(" %d", plate_idx + 1);
521 if (!part_plate->get_plate_name().empty()) {
522 plate_name += wxString(" (", wxConvUTF8) + from_u8(part_plate->get_plate_name()) + wxString(")", wxConvUTF8);
523 }
524 }
525 auto plate_node = new ObjectDataViewModelNode(part_plate, plate_name);
526
527 bool is_added = false;
528 if (plate_idx >= 0) {
529 for (auto iter = m_plates.begin(); iter != m_plates.end(); iter++) {
530 if (plate_idx < (*iter)->m_plate_idx || (*iter)->m_plate_idx < 0) {
531 m_plates.insert(iter, plate_node);
532 is_added = true;
533 break;
534 }
535 }
536 }
537
538 if (!is_added) {
539 m_plates.push_back(plate_node);
540 }
541
542 wxDataViewItem plate_item(plate_node);
543 if (refresh) {
544 ItemAdded(wxDataViewItem(nullptr), plate_item);
545 }
546
547 for (int obj_idx = 0; obj_idx < m_objects.size(); obj_idx++) {
548 auto obj_node = m_objects[obj_idx];
549 if (part_plate && part_plate->contain_instance_totally(obj_idx, 0)) {
550 ReparentObject(plate_node, obj_node);
551 }
552 }
553
554 return plate_item;
555}
void ReparentObject(ObjectDataViewModelNode *plate, ObjectDataViewModelNode *object)
Definition ObjectDataViewModel.cpp:1919

References _L, Slic3r::GUI::PartPlate::contain_instance_totally(), Slic3r::GUI::from_u8(), Slic3r::GUI::PartPlate::get_index(), Slic3r::GUI::PartPlate::get_plate_name(), m_objects, m_plates, and ReparentObject().

Referenced by AddOutsidePlate(), and Init().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ AddRoot()

wxDataViewItem Slic3r::GUI::ObjectDataViewModel::AddRoot ( const wxDataViewItem & parent_item,
const ItemType root_type )
private
795{
796 ObjectDataViewModelNode *parent_node = static_cast<ObjectDataViewModelNode*>(parent_item.GetID());
797 if (!parent_node) return wxDataViewItem(0);
798
799 // get InstanceRoot node
800 ObjectDataViewModelNode *root_node { nullptr };
801 const bool appended = append_root_node(parent_node, &root_node, root_type);
802 if (!root_node) return wxDataViewItem(0);
803
804 const wxDataViewItem root_item((void*)root_node);
805
806 if (appended)
807 ItemAdded(parent_item, root_item);// notify control
808 return root_item;
809}
static bool append_root_node(ObjectDataViewModelNode *parent_node, ObjectDataViewModelNode **root_node, const ItemType root_type)
Definition ObjectDataViewModel.cpp:772

References Slic3r::GUI::append_root_node().

Referenced by AddInstanceRoot(), and AddLayersRoot().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ AddSettingsChild()

wxDataViewItem Slic3r::GUI::ObjectDataViewModel::AddSettingsChild ( const wxDataViewItem & parent_item)
755{
756 ObjectDataViewModelNode *root = static_cast<ObjectDataViewModelNode*>(parent_item.GetID());
757 if (!root) return wxDataViewItem(0);
758
759 const auto node = new ObjectDataViewModelNode(root, itSettings);
760
761 root->Insert(node, 0);
762 // notify control
763 const wxDataViewItem child((void*)node);
764 ItemAdded(parent_item, child);
765 return child;
766}

References Slic3r::GUI::ObjectDataViewModelNode::Insert(), and Slic3r::GUI::itSettings.

Here is the call graph for this function:

◆ AddVolumeChild()

wxDataViewItem Slic3r::GUI::ObjectDataViewModel::AddVolumeChild ( const wxDataViewItem & parent_item,
const wxString & name,
const Slic3r::ModelVolumeType volume_type,
const bool is_text_volume,
const bool is_svg_volume,
const std::string & warning_icon_name = std::string(),
const int extruder = 0,
const bool create_frst_child = true )
673{
674 ObjectDataViewModelNode *root = static_cast<ObjectDataViewModelNode*>(parent_item.GetID());
675 if (!root) return wxDataViewItem(0);
676
677 // get insertion position according to the existed Layers and/or Instances Items
678 int insert_position = get_root_idx(root, itLayerRoot);
679 if (insert_position < 0)
680 insert_position = get_root_idx(root, itInstanceRoot);
681
682 if (create_frst_child && root->m_volumes_cnt == 0)
683 {
685 const auto node = new ObjectDataViewModelNode(root, root->m_name, type, is_text_volume, is_svg_volume, root->m_extruder, 0);
686 UpdateBitmapForNode(node, root->m_warning_icon_name, root->has_lock());
687
688 insert_position < 0 ? root->Append(node) : root->Insert(node, insert_position);
689 // notify control
690 const wxDataViewItem child((void*)node);
691 ItemAdded(parent_item, child);
692
693 root->m_volumes_cnt++;
694 if (insert_position >= 0) insert_position++;
695 }
696
697 // BBS
698 wxString extruder_str;
699 if (extruder == 0) {
700 if (volume_type == ModelVolumeType::PARAMETER_MODIFIER)
701 extruder_str = _L("default");
702 else
703 extruder_str = root->m_extruder;
704 }
705 else {
706 extruder_str = wxString::Format("%d", extruder);
707 }
708
709 const auto node = new ObjectDataViewModelNode(root, name, volume_type, is_text_volume, is_svg_volume, extruder_str, root->m_volumes_cnt);
710 UpdateBitmapForNode(node, warning_icon_name, root->has_lock() && volume_type < ModelVolumeType::PARAMETER_MODIFIER);
711 insert_position < 0 ? root->Append(node) : root->Insert(node, insert_position);
712
713 // if part with errors is added, but object wasn't marked, then mark it
714 if (!warning_icon_name.empty() && warning_icon_name != root->m_warning_icon_name &&
715 (root->m_warning_icon_name.empty() || root->m_warning_icon_name == WarningManifoldIcon) ) {
716 root->SetWarningIconName(warning_icon_name);
718 }
719
720 // notify control
721 const wxDataViewItem child((void*)node);
722 ItemAdded(parent_item, child);
723 root->m_volumes_cnt++;
724
725 return child;
726}
static int get_root_idx(ObjectDataViewModelNode *parent_node, const ItemType root_type)
Definition ObjectDataViewModel.cpp:462
ModelVolumeType
Definition Model.hpp:355
@ PARAMETER_MODIFIER
Definition Model.hpp:359
@ MODEL_PART
Definition Model.hpp:357

References _L, Slic3r::GUI::ObjectDataViewModelNode::Append(), Slic3r::GUI::get_root_idx(), Slic3r::GUI::ObjectDataViewModelNode::has_lock(), Slic3r::GUI::ObjectDataViewModelNode::Insert(), Slic3r::GUI::itInstanceRoot, Slic3r::GUI::itLayerRoot, Slic3r::GUI::ObjectDataViewModelNode::m_extruder, Slic3r::GUI::ObjectDataViewModelNode::m_name, Slic3r::GUI::ObjectDataViewModelNode::m_volumes_cnt, Slic3r::GUI::ObjectDataViewModelNode::m_warning_icon_name, Slic3r::MODEL_PART, Slic3r::PARAMETER_MODIFIER, Slic3r::GUI::ObjectDataViewModelNode::SetWarningIconName(), UpdateBitmapForNode(), and Slic3r::GUI::WarningManifoldIcon.

Here is the call graph for this function:

◆ AddWarningIcon()

void Slic3r::GUI::ObjectDataViewModel::AddWarningIcon ( const wxDataViewItem & item,
const std::string & warning_name )
2443{
2444 if (!item.IsOk())
2445 return;
2446 ObjectDataViewModelNode *node = static_cast<ObjectDataViewModelNode*>(item.GetID());
2447
2448 if (node->GetType() & itObject) {
2449 UpdateBitmapForNode(node, warning_icon_name, node->has_lock());
2450 return;
2451 }
2452
2453 if (node->GetType() & itVolume) {
2454 UpdateBitmapForNode(node, warning_icon_name, node->has_lock());
2455 if (ObjectDataViewModelNode* parent = node->GetParent())
2456 UpdateBitmapForNode(parent, warning_icon_name, parent->has_lock());
2457 return;
2458 }
2459}
@ itObject
Definition ObjectDataViewModel.hpp:37
@ itVolume
Definition ObjectDataViewModel.hpp:38

References Slic3r::GUI::ObjectDataViewModelNode::GetParent(), Slic3r::GUI::ObjectDataViewModelNode::GetType(), Slic3r::GUI::ObjectDataViewModelNode::has_lock(), Slic3r::GUI::itObject, Slic3r::GUI::itVolume, and UpdateBitmapForNode().

Referenced by UpdateWarningIcon().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ assembly_name() [1/2]

void Slic3r::GUI::ObjectDataViewModel::assembly_name ( )
1569{
1570 assembly_name_list.clear();
1571 for (int i = 0; i < m_plates.size(); ++i) {
1573 }
1575}
wxString GetName(const wxDataViewItem &item) const
Definition ObjectDataViewModel.cpp:1746
std::vector< std::tuple< ObjectDataViewModelNode *, wxString, wxString > > assembly_name_list
Definition ObjectDataViewModel.hpp:362
void assembly_name()
Definition ObjectDataViewModel.cpp:1568
std::vector< std::tuple< ObjectDataViewModelNode *, wxString, wxString > > search_found_list
Definition ObjectDataViewModel.hpp:363

References assembly_name(), assembly_name_list, GetName(), m_plates, and search_found_list.

Referenced by assembly_name(), and assembly_name().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ assembly_name() [2/2]

void Slic3r::GUI::ObjectDataViewModel::assembly_name ( ObjectDataViewModelNode * item,
wxString name )
1578{
1579 auto type = this->GetItemType(wxDataViewItem(item));
1580 if (type != itPlate) {
1581 wxString str = name + ":" + item->GetName();
1582 assembly_name_list.push_back(std::make_tuple(item, str, str));
1583 }
1584 else {
1585 assembly_name_list.push_back(std::make_tuple(item, name, name));
1586 }
1587 for (size_t i = 0; i < item->GetChildCount(); ++i) {
1588 wxString str_name = name + ":" + item->GetName();
1589 if (type == itPlate) {
1590 str_name = name;
1591 }
1592 assembly_name(item->GetNthChild(i), str_name);
1593 }
1594}
ItemType GetItemType(const wxDataViewItem &item) const
Definition ObjectDataViewModel.cpp:2148
@ itPlate
Definition ObjectDataViewModel.hpp:36

References assembly_name(), assembly_name_list, Slic3r::GUI::ObjectDataViewModelNode::GetChildCount(), GetItemType(), Slic3r::GUI::ObjectDataViewModelNode::GetName(), Slic3r::GUI::ObjectDataViewModelNode::GetNthChild(), and Slic3r::GUI::itPlate.

Here is the call graph for this function:

◆ Delete()

wxDataViewItem Slic3r::GUI::ObjectDataViewModel::Delete ( const wxDataViewItem & item)
986{
987 auto ret_item = wxDataViewItem(0);
988 ObjectDataViewModelNode *node = static_cast<ObjectDataViewModelNode*>(item.GetID());
989 if (!node) // happens if item.IsOk()==false
990 return ret_item;
991
992 auto node_parent = node->GetParent();
993 wxDataViewItem parent(node_parent);
994
995 if (node->m_type & itPlate) {
996 for (auto child : node->GetChildren()) {
997 assert((child->GetType() & itObject) != 0);
998
999 if (child->m_plate_idx == node->m_plate_idx)
1001 }
1002
1003 // FIX: should remove from children collection soon, or will conflict GetChildren
1004 m_plates.erase(std::remove(m_plates.begin(), m_plates.end(), node), m_plates.end());
1005 ItemDeleted(parent, wxDataViewItem(node));
1006 delete node;
1007 return parent;
1008 }
1009
1010 if (node->m_type & itObject) {
1011 auto it = find(m_objects.begin(), m_objects.end(), node);
1012 if (it != m_objects.end())
1013 {
1014 // Delete all sub-items
1015 int i = (*it)->GetChildCount() - 1;
1016 while (i >= 0) {
1017 Delete(wxDataViewItem((*it)->GetNthChild(i)));
1018 i = (*it)->GetChildCount() - 1;
1019 }
1020 m_objects.erase(it);
1021 node_parent->GetChildren().Remove(node);
1022 }
1023
1024 ItemDeleted(parent, wxDataViewItem(node));
1025 delete node;
1026 return parent;
1027 }
1028
1029 // first remove the node from the parent's array of children;
1030 // NOTE: MyObjectTreeModelNodePtrArray is only an array of _pointers_
1031 // thus removing the node from it doesn't result in freeing it
1032 if (node->m_type & (itInstanceRoot | itLayerRoot))
1033 {
1034 // node can be deleted by the Delete, let's check its type while we safely can
1035 bool is_instance_root = (node->m_type & itInstanceRoot);
1036
1037 for (int i = int(node->GetChildCount() - 1); i >= (is_instance_root ? 1 : 0); i--)
1038 Delete(wxDataViewItem(node->GetNthChild(i)));
1039
1040 return parent;
1041 }
1042
1043 auto id = node_parent->GetChildren().Index(node);
1044 auto idx = node->GetIdx();
1045
1046
1047 if (node->m_type & (itVolume | itLayer)) {
1048 node_parent->m_volumes_cnt--;
1049 DeleteSettings(item);
1050 }
1051 node_parent->GetChildren().Remove(node);
1052
1053 if (id > 0) {
1054 if (size_t(id) == node_parent->GetChildCount()) id--;
1055 ret_item = wxDataViewItem(node_parent->GetChildren().Item(id));
1056 }
1057
1058 //update idx value for remaining child-nodes
1059 auto children = node_parent->GetChildren();
1060 for (size_t i = 0; i < node_parent->GetChildCount() && idx >= 0; i++)
1061 {
1062 auto cur_idx = children[i]->GetIdx();
1063 if (cur_idx > idx)
1064 children[i]->SetIdx(cur_idx - 1);
1065 }
1066
1067 // if there is last instance item, delete both of it and instance root item
1068 if (node_parent->GetChildCount() == 1 && node_parent->GetNthChild(0)->m_type == itInstance)
1069 {
1070 delete node;
1071 ItemDeleted(parent, item);
1072
1073 ObjectDataViewModelNode* last_instance_node = node_parent->GetNthChild(0);
1074 PrintIndicator last_instance_printable = last_instance_node->IsPrintable();
1075 node_parent->GetChildren().Remove(last_instance_node);
1076 delete last_instance_node;
1077 ItemDeleted(parent, wxDataViewItem(last_instance_node));
1078
1079 ObjectDataViewModelNode* obj_node = node_parent->GetParent();
1080 obj_node->set_printable_icon(last_instance_printable);
1081 obj_node->GetChildren().Remove(node_parent);
1082 delete node_parent;
1083 ret_item = wxDataViewItem(obj_node);
1084
1085#ifndef __WXGTK__
1086 if (obj_node->GetChildCount() == 0)
1087 obj_node->m_container = false;
1088#endif //__WXGTK__
1089 ItemDeleted(ret_item, wxDataViewItem(node_parent));
1090 return ret_item;
1091 }
1092
1093 if (node->m_type & itInstance)
1094 UpdateObjectPrintable(wxDataViewItem(node_parent->GetParent()));
1095
1096 // if there was last layer item, delete this one and layers root item
1097 if (node_parent->GetChildCount() == 0 && node_parent->m_type == itLayerRoot)
1098 {
1099 ObjectDataViewModelNode* obj_node = node_parent->GetParent();
1100 obj_node->GetChildren().Remove(node_parent);
1101 delete node_parent;
1102 ret_item = wxDataViewItem(obj_node);
1103
1104#ifndef __WXGTK__
1105 if (obj_node->GetChildCount() == 0)
1106 obj_node->m_container = false;
1107#endif //__WXGTK__
1108 ItemDeleted(ret_item, wxDataViewItem(node_parent));
1109 return ret_item;
1110 }
1111
1112 // if there is last volume item after deleting, delete this last volume too
1113 if (node_parent->GetChildCount() <= 3) // 3??? #ys_FIXME
1114 {
1115 int vol_cnt = 0;
1116 int vol_idx = 0;
1117 for (size_t i = 0; i < node_parent->GetChildCount(); ++i) {
1118 if (node_parent->GetNthChild(i)->GetType() == itVolume) {
1119 vol_idx = i;
1120 vol_cnt++;
1121 }
1122 if (vol_cnt > 1)
1123 break;
1124 }
1125
1126 if (vol_cnt == 1) {
1127 delete node;
1128 ItemDeleted(parent, item);
1129
1130 ObjectDataViewModelNode* last_child_node = node_parent->GetNthChild(vol_idx);
1131 DeleteSettings(wxDataViewItem(last_child_node));
1132 node_parent->GetChildren().Remove(last_child_node);
1133 node_parent->m_volumes_cnt = 0;
1134 delete last_child_node;
1135
1136#ifndef __WXGTK__
1137 if (node_parent->GetChildCount() == 0)
1138 node_parent->m_container = false;
1139#endif //__WXGTK__
1140 ItemDeleted(parent, wxDataViewItem(last_child_node));
1141
1142 // BBS: Current object is already removed in model.objects,
1143 // but it is still exists in m_objects at the moment.
1144 // So the object index calculated here is not valid.
1145#if 0
1146 wxCommandEvent event(wxCUSTOMEVT_LAST_VOLUME_IS_DELETED);
1147 auto it = find(m_objects.begin(), m_objects.end(), node_parent);
1148 event.SetInt(it == m_objects.end() ? -1 : it - m_objects.begin());
1149 wxPostEvent(m_ctrl, event);
1150#endif
1151 ret_item = parent;
1152
1153 return ret_item;
1154 }
1155 }
1156
1157 // free the node
1158 delete node;
1159
1160 // set m_containet to FALSE if parent has no child
1161#ifndef __WXGTK__
1162 if (node_parent->GetChildCount() == 0)
1163 node_parent->m_container = false;
1164#endif //__WXGTK__
1165 ret_item = parent;
1166
1167 // notify control
1168 ItemDeleted(parent, item);
1169 return ret_item;
1170}
wxDataViewItem Delete(const wxDataViewItem &item)
Definition ObjectDataViewModel.cpp:985
void DeleteSettings(const wxDataViewItem &parent)
Definition ObjectDataViewModel.cpp:1299
@ itLayer
Definition ObjectDataViewModel.hpp:43
PrintIndicator
Definition ObjectDataViewModel.hpp:62
RaycastManager::TrItems::iterator find(RaycastManager::TrItems &items, const RaycastManager::TrKey &key)
Definition RaycastManager.cpp:298

References Delete(), DeleteSettings(), Slic3r::GUI::ObjectDataViewModelNode::GetChildCount(), Slic3r::GUI::ObjectDataViewModelNode::GetChildren(), Slic3r::GUI::ObjectDataViewModelNode::GetIdx(), Slic3r::GUI::ObjectDataViewModelNode::GetNthChild(), Slic3r::GUI::ObjectDataViewModelNode::GetParent(), Slic3r::GUI::ObjectDataViewModelNode::IsPrintable(), Slic3r::GUI::itInstance, Slic3r::GUI::itInstanceRoot, Slic3r::GUI::itLayer, Slic3r::GUI::itLayerRoot, Slic3r::GUI::itObject, Slic3r::GUI::itPlate, Slic3r::GUI::itVolume, Slic3r::GUI::ObjectDataViewModelNode::m_container, m_ctrl, m_objects, Slic3r::GUI::ObjectDataViewModelNode::m_plate_idx, m_plate_outside, m_plates, Slic3r::GUI::ObjectDataViewModelNode::m_type, ReparentObject(), Slic3r::GUI::ObjectDataViewModelNode::set_printable_icon(), and UpdateObjectPrintable().

Referenced by Delete(), DeletePlate(), and ResetAll().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ DeleteChildren()

void Slic3r::GUI::ObjectDataViewModel::DeleteChildren ( wxDataViewItem & parent)
1234{
1235 ObjectDataViewModelNode *root = static_cast<ObjectDataViewModelNode*>(parent.GetID());
1236 if (!root) // happens if item.IsOk()==false
1237 return;
1238
1239 // first remove the node from the parent's array of children;
1240 // NOTE: MyObjectTreeModelNodePtrArray is only an array of _pointers_
1241 // thus removing the node from it doesn't result in freeing it
1242 auto& children = root->GetChildren();
1243 for (int id = root->GetChildCount() - 1; id >= 0; --id)
1244 {
1245 auto node = children[id];
1246 auto item = wxDataViewItem(node);
1247 children.RemoveAt(id);
1248
1249 if (node->m_type == itVolume)
1250 root->m_volumes_cnt--;
1251
1252 // free the node
1253 delete node;
1254
1255 // notify control
1256 ItemDeleted(parent, item);
1257 }
1258
1259 // set m_containet to FALSE if parent has no child
1260#ifndef __WXGTK__
1261 root->m_container = false;
1262#endif //__WXGTK__
1263}

References Slic3r::GUI::ObjectDataViewModelNode::GetChildCount(), Slic3r::GUI::ObjectDataViewModelNode::GetChildren(), Slic3r::GUI::itVolume, Slic3r::GUI::ObjectDataViewModelNode::m_container, and Slic3r::GUI::ObjectDataViewModelNode::m_volumes_cnt.

Here is the call graph for this function:

◆ DeleteLastInstance()

wxDataViewItem Slic3r::GUI::ObjectDataViewModel::DeleteLastInstance ( const wxDataViewItem & parent_item,
size_t num )
1173{
1174 auto ret_item = wxDataViewItem(0);
1175 ObjectDataViewModelNode *parent_node = static_cast<ObjectDataViewModelNode*>(parent_item.GetID());
1176 if (!parent_node) return ret_item;
1177
1178 const int inst_root_id = get_root_idx(parent_node, itInstanceRoot);
1179 if (inst_root_id < 0) return ret_item;
1180
1181 wxDataViewItemArray items;
1182 ObjectDataViewModelNode *inst_root_node = parent_node->GetNthChild(inst_root_id);
1183 const wxDataViewItem inst_root_item((void*)inst_root_node);
1184
1185 const int inst_cnt = inst_root_node->GetChildCount();
1186 const bool delete_inst_root_item = inst_cnt - num < 2 ? true : false;
1187
1188 PrintIndicator last_inst_printable = piUndef;
1189
1190 int stop = delete_inst_root_item ? 0 : inst_cnt - num;
1191 for (int i = inst_cnt - 1; i >= stop;--i) {
1192 ObjectDataViewModelNode *last_instance_node = inst_root_node->GetNthChild(i);
1193 if (i==0) last_inst_printable = last_instance_node->IsPrintable();
1194 inst_root_node->GetChildren().Remove(last_instance_node);
1195 delete last_instance_node;
1196 ItemDeleted(inst_root_item, wxDataViewItem(last_instance_node));
1197 }
1198
1199 if (delete_inst_root_item) {
1200 ret_item = parent_item;
1201 parent_node->GetChildren().Remove(inst_root_node);
1202 parent_node->set_printable_icon(last_inst_printable);
1203 ItemDeleted(parent_item, inst_root_item);
1204 ItemChanged(parent_item);
1205#ifndef __WXGTK__
1206 if (parent_node->GetChildCount() == 0)
1207 parent_node->m_container = false;
1208#endif //__WXGTK__
1209 }
1210
1211 // update object_node printable property
1212 UpdateObjectPrintable(parent_item);
1213
1214 return ret_item;
1215}
@ piUndef
Definition ObjectDataViewModel.hpp:63

References Slic3r::GUI::get_root_idx(), Slic3r::GUI::ObjectDataViewModelNode::GetChildCount(), Slic3r::GUI::ObjectDataViewModelNode::GetChildren(), Slic3r::GUI::ObjectDataViewModelNode::GetNthChild(), Slic3r::GUI::ObjectDataViewModelNode::IsPrintable(), Slic3r::GUI::itInstanceRoot, Slic3r::GUI::ObjectDataViewModelNode::m_container, Slic3r::GUI::piUndef, Slic3r::GUI::ObjectDataViewModelNode::set_printable_icon(), and UpdateObjectPrintable().

Here is the call graph for this function:

◆ DeletePlate()

wxDataViewItem Slic3r::GUI::ObjectDataViewModel::DeletePlate ( const int plate_idx)
974{
975 wxDataViewItem ret_item(nullptr);
976 for (auto plate : m_plates) {
977 if (plate->m_plate_idx == plate_idx) {
978 ret_item = Delete(wxDataViewItem(plate));
979 }
980 }
981
982 return ret_item;
983}

References Delete(), and m_plates.

Here is the call graph for this function:

◆ DeleteSettings()

void Slic3r::GUI::ObjectDataViewModel::DeleteSettings ( const wxDataViewItem & parent)
1300{
1301 ObjectDataViewModelNode *node = static_cast<ObjectDataViewModelNode*>(parent.GetID());
1302 if (!node) return;
1303#if NEW_OBJECT_SETTING
1304 node->set_action_icon(false);
1305 ItemChanged(parent);
1306#else
1307 // if volume has a "settings"item, than delete it before volume deleting
1308 if (node->GetChildCount() > 0 && node->GetNthChild(0)->GetType() == itSettings) {
1309 auto settings_node = node->GetNthChild(0);
1310 auto settings_item = wxDataViewItem(settings_node);
1311 node->GetChildren().RemoveAt(0);
1312 delete settings_node;
1313 // BBS
1314 if (node->GetChildCount() == 0) {
1315 node->m_container = false;
1316 }
1317 ItemDeleted(parent, settings_item);
1318 }
1319#endif
1320}

References Slic3r::GUI::ObjectDataViewModelNode::GetChildCount(), Slic3r::GUI::ObjectDataViewModelNode::GetChildren(), Slic3r::GUI::ObjectDataViewModelNode::GetNthChild(), Slic3r::GUI::ObjectDataViewModelNode::GetType(), Slic3r::GUI::itSettings, Slic3r::GUI::ObjectDataViewModelNode::m_container, and Slic3r::GUI::ObjectDataViewModelNode::set_action_icon().

Referenced by Delete(), and DeleteVolumeChildren().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ DeleteVolumeChildren()

void Slic3r::GUI::ObjectDataViewModel::DeleteVolumeChildren ( wxDataViewItem & parent)
1266{
1267 ObjectDataViewModelNode *root = static_cast<ObjectDataViewModelNode*>(parent.GetID());
1268 if (!root) // happens if item.IsOk()==false
1269 return;
1270
1271 // first remove the node from the parent's array of children;
1272 // NOTE: MyObjectTreeModelNodePtrArray is only an array of _pointers_
1273 // thus removing the node from it doesn't result in freeing it
1274 auto& children = root->GetChildren();
1275 for (int id = root->GetChildCount() - 1; id >= 0; --id)
1276 {
1277 auto node = children[id];
1278 if (node->m_type != itVolume)
1279 continue;
1280
1281 auto item = wxDataViewItem(node);
1282 DeleteSettings(item);
1283 children.RemoveAt(id);
1284
1285 // free the node
1286 delete node;
1287
1288 // notify control
1289 ItemDeleted(parent, item);
1290 }
1291 root->m_volumes_cnt = 0;
1292
1293 // set m_containet to FALSE if parent has no child
1294#ifndef __WXGTK__
1295 root->m_container = false;
1296#endif //__WXGTK__
1297}

References DeleteSettings(), Slic3r::GUI::ObjectDataViewModelNode::GetChildCount(), Slic3r::GUI::ObjectDataViewModelNode::GetChildren(), Slic3r::GUI::itVolume, Slic3r::GUI::ObjectDataViewModelNode::m_container, and Slic3r::GUI::ObjectDataViewModelNode::m_volumes_cnt.

Here is the call graph for this function:

◆ DeleteWarningIcon()

void Slic3r::GUI::ObjectDataViewModel::DeleteWarningIcon ( const wxDataViewItem & item,
const bool unmark_object = false )
2462{
2463 if (!item.IsOk())
2464 return;
2465
2466 ObjectDataViewModelNode *node = static_cast<ObjectDataViewModelNode*>(item.GetID());
2467
2468 if (!node->GetBitmap().IsOk() || !(node->GetType() & (itVolume | itObject)))
2469 return;
2470
2471 node->SetWarningIconName(std::string());
2472 UpdateBitmapForNode(node);
2473
2474 if (unmark_object)
2475 {
2476 wxDataViewItemArray children;
2477 GetChildren(item, children);
2478 for (const wxDataViewItem& child : children)
2479 DeleteWarningIcon(child);
2480 }
2481}
unsigned int GetChildren(const wxDataViewItem &parent, wxDataViewItemArray &array) const override
Definition ObjectDataViewModel.cpp:2078
void DeleteWarningIcon(const wxDataViewItem &item, const bool unmark_object=false)
Definition ObjectDataViewModel.cpp:2461

References DeleteWarningIcon(), Slic3r::GUI::ObjectDataViewModelNode::GetBitmap(), GetChildren(), Slic3r::GUI::ObjectDataViewModelNode::GetType(), Slic3r::GUI::itObject, Slic3r::GUI::itVolume, Slic3r::GUI::ObjectDataViewModelNode::SetWarningIconName(), and UpdateBitmapForNode().

Referenced by DeleteWarningIcon(), and UpdateWarningIcon().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ get_assembly_name_list()

std::vector< std::tuple< ObjectDataViewModelNode *, wxString, wxString > > Slic3r::GUI::ObjectDataViewModel::get_assembly_name_list ( ) const
inline
546{ return assembly_name_list; }

References assembly_name_list.

◆ get_found_list()

std::vector< std::tuple< ObjectDataViewModelNode *, wxString, wxString > > Slic3r::GUI::ObjectDataViewModel::get_found_list ( ) const
inline
548{ return search_found_list; }

References search_found_list.

◆ get_real_volume_index_in_3d()

int Slic3r::GUI::ObjectDataViewModel::get_real_volume_index_in_3d ( int ui_object_value,
int ui_volume_value )
inline
373 {
374 if (m_ui_and_3d_volume_maps.find(ui_object_value) != m_ui_and_3d_volume_maps.end()) {
375 auto cur_map = m_ui_and_3d_volume_maps[ui_object_value];
376 if (cur_map.find(ui_volume_value) != cur_map.end()) { return cur_map[ui_volume_value]; }
377 }
378 return ui_volume_value;
379 }
std::map< int, std::map< int, int > > m_ui_and_3d_volume_maps
Definition ObjectDataViewModel.hpp:364

References m_ui_and_3d_volume_maps.

◆ get_real_volume_index_in_ui()

int Slic3r::GUI::ObjectDataViewModel::get_real_volume_index_in_ui ( int ui_object_value,
int _3d_value )
inline
381 {
382 if (m_ui_and_3d_volume_maps.find(ui_object_value) != m_ui_and_3d_volume_maps.end()) {
383 auto cur_map = m_ui_and_3d_volume_maps[ui_object_value];
384 for (auto item : cur_map) {
385 if (item.second == _3d_value) {
386 return item.first;
387 }
388 }
389 }
390 return _3d_value;
391 }

References m_ui_and_3d_volume_maps.

◆ get_ui_and_3d_volume_map()

std::map< int, std::map< int, int > > & Slic3r::GUI::ObjectDataViewModel::get_ui_and_3d_volume_map ( )
inline

◆ GetAllChildren()

void Slic3r::GUI::ObjectDataViewModel::GetAllChildren ( const wxDataViewItem & parent,
wxDataViewItemArray & array ) const
2113{
2114 ObjectDataViewModelNode *node = static_cast<ObjectDataViewModelNode*>(parent.GetID());
2115 if (!node) {
2116 for (auto plate : m_plates)
2117 array.Add(wxDataViewItem((void*)plate));
2118 }
2119 else if (node->GetChildCount() == 0)
2120 return;
2121 else {
2122 const size_t count = node->GetChildren().GetCount();
2123 for (size_t pos = 0; pos < count; pos++) {
2124 ObjectDataViewModelNode *child = node->GetChildren().Item(pos);
2125 array.Add(wxDataViewItem((void*)child));
2126 }
2127 }
2128
2129 wxDataViewItemArray new_array = array;
2130 for (const auto& item : new_array)
2131 {
2132 wxDataViewItemArray children;
2133 GetAllChildren(item, children);
2134 WX_APPEND_ARRAY(array, children);
2135 }
2136}
void GetAllChildren(const wxDataViewItem &parent, wxDataViewItemArray &array) const
Definition ObjectDataViewModel.cpp:2112

References count, GetAllChildren(), Slic3r::GUI::ObjectDataViewModelNode::GetChildCount(), Slic3r::GUI::ObjectDataViewModelNode::GetChildren(), and m_plates.

Referenced by GetAllChildren(), Rescale(), and UpdateColumValues().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetBitmap()

wxBitmap & Slic3r::GUI::ObjectDataViewModel::GetBitmap ( const wxDataViewItem & item) const
1756{
1757 ObjectDataViewModelNode *node = static_cast<ObjectDataViewModelNode*>(item.GetID());
1758 return node->m_bmp;
1759}

References Slic3r::GUI::ObjectDataViewModelNode::m_bmp.

◆ GetChildren()

unsigned int Slic3r::GUI::ObjectDataViewModel::GetChildren ( const wxDataViewItem & parent,
wxDataViewItemArray & array ) const
override
2079{
2080 ObjectDataViewModelNode *node = static_cast<ObjectDataViewModelNode*>(parent.GetID());
2081 if (!node)
2082 {
2083 int node_count = 0;
2084 for (auto plate : m_plates)
2085 array.Add(wxDataViewItem((void*)plate));
2086 node_count += m_plates.size();
2087 /* FIX: should only return first layer children
2088 for (auto object : m_objects) {
2089 if (object->GetParent() == nullptr) {
2090 array.Add(wxDataViewItem((void*)object));
2091 node_count++;
2092 }
2093 }*/
2094 return node_count++;
2095 }
2096
2097 if (node->GetChildCount() == 0)
2098 {
2099 return 0;
2100 }
2101
2102 unsigned int count = node->GetChildren().GetCount();
2103 for (unsigned int pos = 0; pos < count; pos++)
2104 {
2105 ObjectDataViewModelNode* child = node->GetChildren().Item(pos);
2106 array.Add(wxDataViewItem((void*)child));
2107 }
2108
2109 return count;
2110}

References count, Slic3r::GUI::ObjectDataViewModelNode::GetChildCount(), Slic3r::GUI::ObjectDataViewModelNode::GetChildren(), and m_plates.

Referenced by DeleteWarningIcon(), Slic3r::GUI::update_selection(), and UpdateCutObjectIcon().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetColumnCount()

unsigned int Slic3r::GUI::ObjectDataViewModel::GetColumnCount ( ) const
inlineoverride
449{ return 3;}

◆ GetColumnType()

wxString Slic3r::GUI::ObjectDataViewModel::GetColumnType ( unsigned int col) const
override
1780{
1781 if (col == colName || col == colFilament)
1782 return wxT("DataViewBitmapText");
1783 // BBS
1784 if (/*col == colPrint || */col == colEditing)
1785 return wxT("DataViewBitmap");
1786 return wxT("string");
1787}
@ colEditing
Definition ObjectDataViewModel.hpp:57
@ colName
Definition ObjectDataViewModel.hpp:49
@ colFilament
Definition ObjectDataViewModel.hpp:52

References Slic3r::GUI::colEditing, Slic3r::GUI::colFilament, and Slic3r::GUI::colName.

◆ GetDefaultExtruderIdx()

int Slic3r::GUI::ObjectDataViewModel::GetDefaultExtruderIdx ( wxDataViewItem item)
1650{
1651 ItemType type = GetItemType(item);
1652 if (type == itObject)
1653 return 0;
1654
1655 if (type == itVolume && GetVolumeType(item) == ModelVolumeType::MODEL_PART) {
1656 wxDataViewItem obj_item = GetParent(item);
1657 int extruder_id = GetExtruderNumber(obj_item);
1658 if (extruder_id > 0) extruder_id--;
1659 return extruder_id;
1660 }
1661
1662 return -1;
1663}
wxDataViewItem GetParent(const wxDataViewItem &item) const override
Definition ObjectDataViewModel.cpp:2015
ModelVolumeType GetVolumeType(const wxDataViewItem &item)
Definition ObjectDataViewModel.cpp:2281
int GetExtruderNumber(const wxDataViewItem &item) const
Definition ObjectDataViewModel.cpp:1770
ItemType
Definition ObjectDataViewModel.hpp:34

References GetExtruderNumber(), GetItemType(), GetParent(), GetVolumeType(), Slic3r::GUI::itObject, Slic3r::GUI::itVolume, and Slic3r::MODEL_PART.

Here is the call graph for this function:

◆ GetExtruder()

wxString Slic3r::GUI::ObjectDataViewModel::GetExtruder ( const wxDataViewItem & item) const
1762{
1763 ObjectDataViewModelNode *node = static_cast<ObjectDataViewModelNode*>(item.GetID());
1764 if (!node) // happens if item.IsOk()==false
1765 return wxEmptyString;
1766
1767 return node->m_extruder;
1768}

References Slic3r::GUI::ObjectDataViewModelNode::m_extruder.

◆ GetExtruderNumber()

int Slic3r::GUI::ObjectDataViewModel::GetExtruderNumber ( const wxDataViewItem & item) const
1771{
1772 ObjectDataViewModelNode *node = static_cast<ObjectDataViewModelNode*>(item.GetID());
1773 if (!node) // happens if item.IsOk()==false
1774 return 0;
1775
1776 return atoi(node->m_extruder.c_str());
1777}

References Slic3r::GUI::ObjectDataViewModelNode::m_extruder.

Referenced by GetDefaultExtruderIdx().

Here is the caller graph for this function:

◆ GetIdByItem()

int Slic3r::GUI::ObjectDataViewModel::GetIdByItem ( const wxDataViewItem & item) const
1438{
1439 if(!item.IsOk())
1440 return -1;
1441
1442 ObjectDataViewModelNode *node = static_cast<ObjectDataViewModelNode*>(item.GetID());
1443 auto it = find(m_objects.begin(), m_objects.end(), node);
1444 if (it == m_objects.end())
1445 return -1;
1446
1447 return it - m_objects.begin();
1448}

References m_objects.

Referenced by GetObjectIdByItem().

Here is the caller graph for this function:

◆ GetIdByItemAndType()

int Slic3r::GUI::ObjectDataViewModel::GetIdByItemAndType ( const wxDataViewItem & item,
const ItemType type ) const
1464{
1465 wxASSERT(item.IsOk());
1466
1467 ObjectDataViewModelNode *node = static_cast<ObjectDataViewModelNode*>(item.GetID());
1468 if (!node || node->m_type != type)
1469 return -1;
1470 return node->GetIdx();
1471}

References Slic3r::GUI::ObjectDataViewModelNode::GetIdx(), and Slic3r::GUI::ObjectDataViewModelNode::m_type.

Referenced by GetInstanceIdByItem(), GetLayerIdByItem(), and GetVolumeIdByItem().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetInfoItemByType()

wxDataViewItem Slic3r::GUI::ObjectDataViewModel::GetInfoItemByType ( const wxDataViewItem & parent_item,
InfoItemType type ) const
2233{
2234 if (! parent_item.IsOk())
2235 return wxDataViewItem(0);
2236
2237 ObjectDataViewModelNode *node = static_cast<ObjectDataViewModelNode*>(parent_item.GetID());
2238 for (size_t i = 0; i < node->GetChildCount(); i++) {
2239 const ObjectDataViewModelNode* child_node = node->GetNthChild(i);
2240 if (child_node->m_type == itInfo && child_node->m_info_item_type == type)
2241 return wxDataViewItem((void*)child_node);
2242 }
2243
2244 return wxDataViewItem(0); // not found
2245}

References Slic3r::GUI::ObjectDataViewModelNode::GetChildCount(), Slic3r::GUI::ObjectDataViewModelNode::GetNthChild(), Slic3r::GUI::itInfo, Slic3r::GUI::ObjectDataViewModelNode::m_info_item_type, and Slic3r::GUI::ObjectDataViewModelNode::m_type.

Here is the call graph for this function:

◆ GetInfoItemType()

InfoItemType Slic3r::GUI::ObjectDataViewModel::GetInfoItemType ( const wxDataViewItem & item) const
2166{
2167 if (!item.IsOk())
2168 return InfoItemType::Undef;
2169 ObjectDataViewModelNode *node = static_cast<ObjectDataViewModelNode*>(item.GetID());
2170 return node->m_info_item_type;
2171}
@ Undef
Definition ObjectDataViewModel.hpp:76

References Slic3r::GUI::ObjectDataViewModelNode::m_info_item_type, and Slic3r::GUI::Undef.

Referenced by AddInfoChild().

Here is the caller graph for this function:

◆ GetInstanceIdByItem()

int Slic3r::GUI::ObjectDataViewModel::GetInstanceIdByItem ( const wxDataViewItem & item) const
1484{
1485 return GetIdByItemAndType(item, itInstance);
1486}
int GetIdByItemAndType(const wxDataViewItem &item, const ItemType type) const
Definition ObjectDataViewModel.cpp:1463

References GetIdByItemAndType(), and Slic3r::GUI::itInstance.

Referenced by Slic3r::GUI::MenuFactory::append_menu_item_printable(), and Slic3r::GUI::MenuFactory::append_menu_item_set_printable().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetInstanceRootItem()

wxDataViewItem Slic3r::GUI::ObjectDataViewModel::GetInstanceRootItem ( const wxDataViewItem & item) const
2196{
2197 return GetItemByType(item, itInstanceRoot);
2198}
wxDataViewItem GetItemByType(const wxDataViewItem &parent_item, ItemType type) const
Definition ObjectDataViewModel.cpp:2173

References GetItemByType(), and Slic3r::GUI::itInstanceRoot.

Referenced by AddInstanceChild(), UpdateInstancesPrintable(), and UpdateObjectPrintable().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetItemById() [1/2]

wxDataViewItem Slic3r::GUI::ObjectDataViewModel::GetItemById ( const int obj_idx,
const int sub_obj_idx,
const ItemType parent_type )
1381{
1382 if (size_t(obj_idx) >= m_objects.size()) {
1383 printf("Error! Out of objects range.\n");
1384 return wxDataViewItem(0);
1385 }
1386
1387 auto item = GetItemByType(wxDataViewItem(m_objects[obj_idx]), parent_type);
1388 if (!item)
1389 return wxDataViewItem(0);
1390
1391 auto parent = static_cast<ObjectDataViewModelNode*>(item.GetID());
1392 for (size_t i = 0; i < parent->GetChildCount(); i++)
1393 if (parent->GetNthChild(i)->m_idx == sub_obj_idx)
1394 return wxDataViewItem(parent->GetNthChild(i));
1395
1396 return wxDataViewItem(0);
1397}

References GetItemByType(), and m_objects.

Here is the call graph for this function:

◆ GetItemById() [2/2]

wxDataViewItem Slic3r::GUI::ObjectDataViewModel::GetItemById ( int obj_idx)
1323{
1324 if (size_t(obj_idx) >= m_objects.size())
1325 {
1326 printf("Error! Out of objects range.\n");
1327 return wxDataViewItem(0);
1328 }
1329 return wxDataViewItem(m_objects[obj_idx]);
1330}

References m_objects.

Referenced by Slic3r::GUI::MenuFactory::append_menu_item_settings(), GetItemByInstanceId(), GetItemByLayerId(), GetItemByVolumeId(), and SetPrintableState().

Here is the caller graph for this function:

◆ GetItemByInstanceId()

wxDataViewItem Slic3r::GUI::ObjectDataViewModel::GetItemByInstanceId ( int obj_idx,
int inst_idx )
1400{
1401 return GetItemById(obj_idx, inst_idx, itInstanceRoot);
1402}
wxDataViewItem GetItemById(int obj_idx)
Definition ObjectDataViewModel.cpp:1322

References GetItemById(), and Slic3r::GUI::itInstanceRoot.

Referenced by SetPrintableState().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetItemByLayerId()

wxDataViewItem Slic3r::GUI::ObjectDataViewModel::GetItemByLayerId ( int obj_idx,
int layer_idx )
1405{
1406 return GetItemById(obj_idx, layer_idx, itLayerRoot);
1407}

References GetItemById(), and Slic3r::GUI::itLayerRoot.

Here is the call graph for this function:

◆ GetItemByLayerRange()

wxDataViewItem Slic3r::GUI::ObjectDataViewModel::GetItemByLayerRange ( const int obj_idx,
const t_layer_height_range & layer_range )
1410{
1411 if (size_t(obj_idx) >= m_objects.size()) {
1412 printf("Error! Out of objects range.\n");
1413 return wxDataViewItem(0);
1414 }
1415
1416 auto item = GetItemByType(wxDataViewItem(m_objects[obj_idx]), itLayerRoot);
1417 if (!item)
1418 return wxDataViewItem(0);
1419
1420 auto parent = static_cast<ObjectDataViewModelNode*>(item.GetID());
1421 for (size_t i = 0; i < parent->GetChildCount(); i++)
1422 if (parent->GetNthChild(i)->m_layer_range == layer_range)
1423 return wxDataViewItem(parent->GetNthChild(i));
1424
1425 return wxDataViewItem(0);
1426}

References GetItemByType(), Slic3r::GUI::itLayerRoot, and m_objects.

Referenced by GetItemIdByLayerRange().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetItemByPlateId()

wxDataViewItem Slic3r::GUI::ObjectDataViewModel::GetItemByPlateId ( int plate_idx)
1333{
1334 for (auto plate : m_plates) {
1335 if (plate->m_plate_idx == plate_idx)
1336 return wxDataViewItem(plate);
1337 }
1338 return wxDataViewItem(nullptr);
1339}

References m_plates.

◆ GetItemByType()

wxDataViewItem Slic3r::GUI::ObjectDataViewModel::GetItemByType ( const wxDataViewItem & parent_item,
ItemType type ) const
2174{
2175 if (!parent_item.IsOk())
2176 return wxDataViewItem(0);
2177
2178 ObjectDataViewModelNode *node = static_cast<ObjectDataViewModelNode*>(parent_item.GetID());
2179 if (node->GetChildCount() == 0)
2180 return wxDataViewItem(0);
2181
2182 for (size_t i = 0; i < node->GetChildCount(); i++) {
2183 if (node->GetNthChild(i)->m_type == type)
2184 return wxDataViewItem((void*)node->GetNthChild(i));
2185 }
2186
2187 return wxDataViewItem(0);
2188}

References Slic3r::GUI::ObjectDataViewModelNode::GetChildCount(), Slic3r::GUI::ObjectDataViewModelNode::GetNthChild(), and Slic3r::GUI::ObjectDataViewModelNode::m_type.

Referenced by GetInstanceRootItem(), GetItemById(), GetItemByLayerRange(), GetLayerRootItem(), and GetSettingsItem().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetItemByVolumeId()

wxDataViewItem Slic3r::GUI::ObjectDataViewModel::GetItemByVolumeId ( int obj_idx,
int volume_idx )
1355{
1356 if (size_t(obj_idx) >= m_objects.size()) {
1357 printf("Error! Out of objects range.\n");
1358 return wxDataViewItem(0);
1359 }
1360
1361 auto parent = m_objects[obj_idx];
1362 if (parent->GetChildCount() == 0 ||
1363 (parent->GetChildCount() == 1 && parent->GetNthChild(0)->GetType() & itSettings )) {
1364 if (volume_idx == 0)
1365 return GetItemById(obj_idx);
1366
1367 printf("Error! Object has no one volume.\n");
1368 return wxDataViewItem(0);
1369 }
1370
1371 for (size_t i = 0; i < parent->GetChildCount(); i++) {
1372 auto child = parent->GetNthChild(i);
1373 if (child->m_idx == volume_idx && child->GetType() & itVolume)
1374 return wxDataViewItem(parent->GetNthChild(i));
1375 }
1376
1377 return wxDataViewItem(0);
1378}

References GetItemById(), Slic3r::GUI::itSettings, Slic3r::GUI::itVolume, and m_objects.

Referenced by SetPrintableState().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetItemIdByLayerRange()

int Slic3r::GUI::ObjectDataViewModel::GetItemIdByLayerRange ( const int obj_idx,
const t_layer_height_range & layer_range )
1429{
1430 wxDataViewItem item = GetItemByLayerRange(obj_idx, layer_range);
1431 if (!item)
1432 return -1;
1433
1434 return GetLayerIdByItem(item);
1435}
wxDataViewItem GetItemByLayerRange(const int obj_idx, const t_layer_height_range &layer_range)
Definition ObjectDataViewModel.cpp:1409
int GetLayerIdByItem(const wxDataViewItem &item) const
Definition ObjectDataViewModel.cpp:1488

References GetItemByLayerRange(), and GetLayerIdByItem().

Here is the call graph for this function:

◆ GetItemIndexForFirstVolume()

size_t Slic3r::GUI::ObjectDataViewModel::GetItemIndexForFirstVolume ( ObjectDataViewModelNode * node_parent)
965{
966 assert(node_parent->m_volumes_cnt > 0);
967 for (size_t vol_idx = 0; vol_idx < node_parent->GetChildCount(); vol_idx++)
968 if (node_parent->GetNthChild(vol_idx)->GetType() == itVolume)
969 return vol_idx;
970 return -1;
971}

References Slic3r::GUI::ObjectDataViewModelNode::GetChildCount(), Slic3r::GUI::ObjectDataViewModelNode::GetNthChild(), Slic3r::GUI::ObjectDataViewModelNode::GetType(), Slic3r::GUI::itVolume, and Slic3r::GUI::ObjectDataViewModelNode::m_volumes_cnt.

Referenced by ReorganizeChildren().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetItemInfo()

void Slic3r::GUI::ObjectDataViewModel::GetItemInfo ( const wxDataViewItem & item,
ItemType & type,
int & obj_idx,
int & idx )
1666{
1667 wxASSERT(item.IsOk());
1668 type = itUndef;
1669
1670 ObjectDataViewModelNode *node = static_cast<ObjectDataViewModelNode*>(item.GetID());
1671 if (!node ||
1672 node->GetIdx() <-1 ||
1673 ( node->GetIdx() == -1 &&
1674 !(node->GetType() & (itObject | itSettings | itInstanceRoot | itLayerRoot | itInfo))
1675 )
1676 )
1677 return;
1678
1679 idx = node->GetIdx();
1680 type = node->GetType();
1681
1682 ObjectDataViewModelNode *parent_node = node->GetParent();
1683 if (!parent_node) return;
1684
1685 // get top parent (Object) node
1686 while (parent_node->m_type != itObject)
1687 parent_node = parent_node->GetParent();
1688
1689 auto it = find(m_objects.begin(), m_objects.end(), parent_node);
1690 if (it != m_objects.end())
1691 obj_idx = it - m_objects.begin();
1692 else
1693 type = itUndef;
1694}
@ itUndef
Definition ObjectDataViewModel.hpp:35

References Slic3r::GUI::ObjectDataViewModelNode::GetIdx(), Slic3r::GUI::ObjectDataViewModelNode::GetParent(), Slic3r::GUI::ObjectDataViewModelNode::GetType(), Slic3r::GUI::itInfo, Slic3r::GUI::itInstanceRoot, Slic3r::GUI::itLayerRoot, Slic3r::GUI::itObject, Slic3r::GUI::itSettings, Slic3r::GUI::itUndef, m_objects, and Slic3r::GUI::ObjectDataViewModelNode::m_type.

Here is the call graph for this function:

◆ GetItemType() [1/2]

ItemType Slic3r::GUI::ObjectDataViewModel::GetItemType ( const wxDataViewItem & item) const
2149{
2150 if (!item.IsOk())
2151 return itUndef;
2152 ObjectDataViewModelNode *node = static_cast<ObjectDataViewModelNode *>(item.GetID());
2153 return node->m_type < 0 ? itUndef : node->m_type;
2154}

References Slic3r::GUI::itUndef, and Slic3r::GUI::ObjectDataViewModelNode::m_type.

Referenced by Slic3r::GUI::MenuFactory::append_menu_item_printable(), Slic3r::GUI::MenuFactory::append_menu_item_set_printable(), Slic3r::GUI::MenuFactory::append_menu_item_settings(), assembly_name(), GetDefaultExtruderIdx(), GetVolumeType(), SetVolumeType(), Slic3r::GUI::ObjectLayers::update_layers_list(), Slic3r::GUI::update_selection(), and UpdateVolumesExtruderBitmap().

Here is the caller graph for this function:

◆ GetItemType() [2/2]

ItemType Slic3r::GUI::ObjectDataViewModel::GetItemType ( const wxDataViewItem & item,
int & plate_idx ) const
2157{
2158 if (!item.IsOk())
2159 return itUndef;
2160 ObjectDataViewModelNode *node = static_cast<ObjectDataViewModelNode*>(item.GetID());
2161 plate_idx=node->m_plate_idx;
2162 return node->m_type < 0 ? itUndef : node->m_type;
2163}

References Slic3r::GUI::itUndef, Slic3r::GUI::ObjectDataViewModelNode::m_plate_idx, and Slic3r::GUI::ObjectDataViewModelNode::m_type.

◆ GetLayerIdByItem()

int Slic3r::GUI::ObjectDataViewModel::GetLayerIdByItem ( const wxDataViewItem & item) const
1489{
1490 return GetIdByItemAndType(item, itLayer);
1491}

References GetIdByItemAndType(), and Slic3r::GUI::itLayer.

Referenced by GetItemIdByLayerRange().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetLayerRangeByItem()

t_layer_height_range Slic3r::GUI::ObjectDataViewModel::GetLayerRangeByItem ( const wxDataViewItem & item) const
1494{
1495 wxASSERT(item.IsOk());
1496
1497 ObjectDataViewModelNode *node = static_cast<ObjectDataViewModelNode*>(item.GetID());
1498 if (!node || node->m_type != itLayer)
1499 return { 0.0f, 0.0f };
1500 return node->GetLayerRange();
1501}

References Slic3r::GUI::ObjectDataViewModelNode::GetLayerRange(), Slic3r::GUI::itLayer, and Slic3r::GUI::ObjectDataViewModelNode::m_type.

Referenced by Slic3r::GUI::ObjectLayers::update_layers_list().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetLayerRootItem()

wxDataViewItem Slic3r::GUI::ObjectDataViewModel::GetLayerRootItem ( const wxDataViewItem & item) const
2201{
2202 return GetItemByType(item, itLayerRoot);
2203}

References GetItemByType(), and Slic3r::GUI::itLayerRoot.

Here is the call graph for this function:

◆ GetName()

wxString Slic3r::GUI::ObjectDataViewModel::GetName ( const wxDataViewItem & item) const
1747{
1748 ObjectDataViewModelNode *node = static_cast<ObjectDataViewModelNode*>(item.GetID());
1749 if (!node) // happens if item.IsOk()==false
1750 return wxEmptyString;
1751
1752 return node->m_name;
1753}

References Slic3r::GUI::ObjectDataViewModelNode::m_name.

Referenced by assembly_name().

Here is the caller graph for this function:

◆ GetObject()

wxDataViewItem Slic3r::GUI::ObjectDataViewModel::GetObject ( const wxDataViewItem & item) const
2032{
2033 // the invisible root node has no parent
2034 if (!item.IsOk())
2035 return wxDataViewItem(0);
2036
2037 ObjectDataViewModelNode* node = static_cast<ObjectDataViewModelNode*>(item.GetID());
2038 if (node->m_type & itPlate)
2039 return wxDataViewItem(0);
2040
2041 if (node->m_type & itObject)
2042 return item;
2043
2044 ObjectDataViewModelNode* parent_node = node->GetParent();
2045 while (parent_node->m_type != itObject)
2046 parent_node = parent_node->GetParent();
2047
2048 return wxDataViewItem((void*)parent_node);
2049}

References Slic3r::GUI::ObjectDataViewModelNode::GetParent(), Slic3r::GUI::itObject, Slic3r::GUI::itPlate, and Slic3r::GUI::ObjectDataViewModelNode::m_type.

Referenced by GetObjectIdByItem(), and Slic3r::GUI::update_selection().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetObjectIdByItem()

int Slic3r::GUI::ObjectDataViewModel::GetObjectIdByItem ( const wxDataViewItem & item) const
1474{
1475 return GetIdByItem(GetObject(item));
1476}
int GetIdByItem(const wxDataViewItem &item) const
Definition ObjectDataViewModel.cpp:1437
wxDataViewItem GetObject(const wxDataViewItem &item) const
Definition ObjectDataViewModel.cpp:2031

References GetIdByItem(), and GetObject().

Referenced by Slic3r::GUI::MenuFactory::append_menu_item_printable(), and Slic3r::GUI::MenuFactory::append_menu_item_set_printable().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetObjectItem()

wxDataViewItem Slic3r::GUI::ObjectDataViewModel::GetObjectItem ( const ModelObject * mo) const
2207{
2208 for (auto object_node : m_objects) {
2209 if (object_node->m_model_object == mo) {
2210 return wxDataViewItem(object_node);
2211 }
2212 }
2213
2214 return wxDataViewItem(nullptr);
2215}

References m_objects.

◆ GetParent()

wxDataViewItem Slic3r::GUI::ObjectDataViewModel::GetParent ( const wxDataViewItem & item) const
override
2016{
2017 // the invisible root node has no parent
2018 if (!item.IsOk())
2019 return wxDataViewItem(0);
2020
2021 ObjectDataViewModelNode *node = static_cast<ObjectDataViewModelNode*>(item.GetID());
2022 assert(node != nullptr && node->valid());
2023
2024 // objects nodes has no parent too
2025 if (node->m_type == itPlate)
2026 return wxDataViewItem(0);
2027
2028 return wxDataViewItem((void*)node->GetParent());
2029}

References Slic3r::GUI::ObjectDataViewModelNode::GetParent(), Slic3r::GUI::itPlate, Slic3r::GUI::ObjectDataViewModelNode::m_type, and Slic3r::GUI::ObjectDataViewModelNode::valid().

Referenced by Slic3r::GUI::MenuFactory::append_menu_item_settings(), GetDefaultExtruderIdx(), and Slic3r::GUI::update_selection().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetPlateIdByItem()

int Slic3r::GUI::ObjectDataViewModel::GetPlateIdByItem ( const wxDataViewItem & item) const
1451{
1452 if (!item.IsOk())
1453 return -1;
1454
1455 ObjectDataViewModelNode* node = static_cast<ObjectDataViewModelNode*>(item.GetID());
1456 auto it = find(m_plates.begin(), m_plates.end(), node);
1457 if (it == m_plates.end())
1458 return -1;
1459
1460 return it - m_plates.begin();
1461}

References m_plates.

◆ GetRowByItem()

int Slic3r::GUI::ObjectDataViewModel::GetRowByItem ( const wxDataViewItem & item) const
1697{
1698 if (m_objects.empty())
1699 return -1;
1700
1701 int row_num = 0;
1702
1703 for (size_t i = 0; i < m_objects.size(); i++)
1704 {
1705 row_num++;
1706 if (item == wxDataViewItem(m_objects[i]))
1707 return row_num;
1708
1709 for (size_t j = 0; j < m_objects[i]->GetChildCount(); j++)
1710 {
1711 row_num++;
1712 ObjectDataViewModelNode* cur_node = m_objects[i]->GetNthChild(j);
1713 if (item == wxDataViewItem(cur_node))
1714 return row_num;
1715
1716 if (cur_node->m_type == itVolume && cur_node->GetChildCount() == 1)
1717 row_num++;
1718 if (cur_node->m_type == itInstanceRoot)
1719 {
1720 row_num++;
1721 for (size_t t = 0; t < cur_node->GetChildCount(); t++)
1722 {
1723 row_num++;
1724 if (item == wxDataViewItem(cur_node->GetNthChild(t)))
1725 return row_num;
1726 }
1727 }
1728 }
1729 }
1730
1731 return -1;
1732}

References Slic3r::GUI::ObjectDataViewModelNode::GetChildCount(), Slic3r::GUI::ObjectDataViewModelNode::GetNthChild(), Slic3r::GUI::itInstanceRoot, Slic3r::GUI::itVolume, m_objects, and Slic3r::GUI::ObjectDataViewModelNode::m_type.

Here is the call graph for this function:

◆ GetSettingsItem()

wxDataViewItem Slic3r::GUI::ObjectDataViewModel::GetSettingsItem ( const wxDataViewItem & item) const
2191{
2192 return GetItemByType(item, itSettings);
2193}

References GetItemByType(), and Slic3r::GUI::itSettings.

Here is the call graph for this function:

◆ GetTopParent()

wxDataViewItem Slic3r::GUI::ObjectDataViewModel::GetTopParent ( const wxDataViewItem & item) const
2052{
2053 // the invisible root node has no parent
2054 if (!item.IsOk())
2055 return wxDataViewItem(0);
2056
2057 ObjectDataViewModelNode *node = static_cast<ObjectDataViewModelNode*>(item.GetID());
2058 if (node->m_type == itPlate)
2059 return item;
2060
2061 ObjectDataViewModelNode *parent_node = node->GetParent();
2062 while (parent_node->m_type != itPlate)
2063 parent_node = parent_node->GetParent();
2064
2065 return wxDataViewItem((void*)parent_node);
2066}

References Slic3r::GUI::ObjectDataViewModelNode::GetParent(), Slic3r::GUI::itPlate, and Slic3r::GUI::ObjectDataViewModelNode::m_type.

Here is the call graph for this function:

◆ GetValue()

void Slic3r::GUI::ObjectDataViewModel::GetValue ( wxVariant & variant,
const wxDataViewItem & item,
unsigned int col ) const
override
1790{
1791 wxASSERT(item.IsOk());
1792
1793 ObjectDataViewModelNode *node = static_cast<ObjectDataViewModelNode*>(item.GetID());
1794 switch (col)
1795 {
1796 case colPrint:
1797 variant << node->m_printable_icon;
1798 break;
1799 case colHeight:
1800 variant << node->m_variable_height_icon;
1801 break;
1802 case colName:
1803 variant << DataViewBitmapText(node->m_name, node->m_bmp);
1804 break;
1805 case colFilament:
1806 variant << DataViewBitmapText(node->m_extruder, node->m_extruder_bmp);
1807 break;
1808 // BBS
1809 case colSupportPaint:
1810 variant << node->m_support_icon;
1811 break;
1812 case colSinking:
1813 variant << node->m_sinking_icon;
1814 break;
1815 case colColorPaint:
1816 variant << node->m_color_icon;
1817 break;
1818 case colEditing:
1819 variant << node->m_action_icon;
1820 break;
1821 default:
1822 ;
1823 }
1824}
@ colSinking
Definition ObjectDataViewModel.hpp:56
@ colColorPaint
Definition ObjectDataViewModel.hpp:55
@ colSupportPaint
Definition ObjectDataViewModel.hpp:54
@ colHeight
Definition ObjectDataViewModel.hpp:50
@ colPrint
Definition ObjectDataViewModel.hpp:51

References Slic3r::GUI::colColorPaint, Slic3r::GUI::colEditing, Slic3r::GUI::colFilament, Slic3r::GUI::colHeight, Slic3r::GUI::colName, Slic3r::GUI::colPrint, Slic3r::GUI::colSinking, Slic3r::GUI::colSupportPaint, Slic3r::GUI::ObjectDataViewModelNode::m_action_icon, Slic3r::GUI::ObjectDataViewModelNode::m_bmp, Slic3r::GUI::ObjectDataViewModelNode::m_color_icon, Slic3r::GUI::ObjectDataViewModelNode::m_extruder, Slic3r::GUI::ObjectDataViewModelNode::m_extruder_bmp, Slic3r::GUI::ObjectDataViewModelNode::m_name, Slic3r::GUI::ObjectDataViewModelNode::m_printable_icon, Slic3r::GUI::ObjectDataViewModelNode::m_sinking_icon, Slic3r::GUI::ObjectDataViewModelNode::m_support_icon, and Slic3r::GUI::ObjectDataViewModelNode::m_variable_height_icon.

Referenced by SetName().

Here is the caller graph for this function:

◆ GetVolumeIdByItem()

int Slic3r::GUI::ObjectDataViewModel::GetVolumeIdByItem ( const wxDataViewItem & item) const
1479{
1480 return GetIdByItemAndType(item, itVolume);
1481}

References GetIdByItemAndType(), and Slic3r::GUI::itVolume.

Here is the call graph for this function:

◆ GetVolumeItem()

wxDataViewItem Slic3r::GUI::ObjectDataViewModel::GetVolumeItem ( const wxDataViewItem & parent,
int vol_idx ) const
2218{
2219 ObjectDataViewModelNode* obj_node = (ObjectDataViewModelNode*)parent.GetID();
2220
2221 // BBS
2222 if (obj_node != nullptr) {
2223 for (auto child : obj_node->GetChildren()) {
2224 if (child->GetType() == itVolume && child->GetIdx() == vol_idx)
2225 return wxDataViewItem(child);
2226 }
2227 }
2228
2229 return wxDataViewItem(nullptr);
2230}

References Slic3r::GUI::ObjectDataViewModelNode::GetChildren(), and Slic3r::GUI::itVolume.

Here is the call graph for this function:

◆ GetVolumeType()

ModelVolumeType Slic3r::GUI::ObjectDataViewModel::GetVolumeType ( const wxDataViewItem & item)
2282{
2283 if (!item.IsOk() || GetItemType(item) != itVolume)
2285
2286 ObjectDataViewModelNode *node = static_cast<ObjectDataViewModelNode*>(item.GetID());
2287 return node->GetVolumeType();
2288}
@ INVALID
Definition Model.hpp:356

References GetItemType(), Slic3r::GUI::ObjectDataViewModelNode::GetVolumeType(), Slic3r::INVALID, and Slic3r::GUI::itVolume.

Referenced by GetDefaultExtruderIdx().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ HasContainerColumns()

bool Slic3r::GUI::ObjectDataViewModel::HasContainerColumns ( const wxDataViewItem & WXUNUSEDitem) const
inlineoverride
485{ return true; }

◆ HasInfoItem()

bool Slic3r::GUI::ObjectDataViewModel::HasInfoItem ( InfoItemType type) const
2139{
2140 for (ObjectDataViewModelNode* obj_node : m_objects)
2141 for (size_t j = 0; j < obj_node->GetChildCount(); j++)
2142 if (obj_node->GetNthChild(j)->GetInfoItemType() == type)
2143 return true;
2144
2145 return false;
2146}

References m_objects.

◆ HasWarningIcon()

bool Slic3r::GUI::ObjectDataViewModel::HasWarningIcon ( const wxDataViewItem & item) const
2484{
2485 if (!item.IsOk())
2486 return false;
2487
2488 ObjectDataViewModelNode *node = static_cast<ObjectDataViewModelNode*>(item.GetID());
2489 return node->has_warning_icon();
2490}

References Slic3r::GUI::ObjectDataViewModelNode::has_warning_icon().

Here is the call graph for this function:

◆ Init()

void Slic3r::GUI::ObjectDataViewModel::Init ( )
505{
506 PartPlateList& list = wxGetApp().plater()->get_partplate_list();
507
508 if (list.get_plate_count() > 0)
509 AddPlate(list.get_plate(0));
510
512}
wxDataViewItem AddOutsidePlate(bool refresh=true)
Definition ObjectDataViewModel.cpp:557

References AddOutsidePlate(), AddPlate(), Slic3r::GUI::PartPlateList::get_plate(), and Slic3r::GUI::PartPlateList::get_plate_count().

Here is the call graph for this function:

◆ InvalidItem()

bool Slic3r::GUI::ObjectDataViewModel::InvalidItem ( const wxDataViewItem & item)
1735{
1736 if (!item)
1737 return true;
1738
1739 ObjectDataViewModelNode* node = static_cast<ObjectDataViewModelNode*>(item.GetID());
1740 if (!node || node->invalid())
1741 return true;
1742
1743 return false;
1744}

References Slic3r::GUI::ObjectDataViewModelNode::invalid().

Here is the call graph for this function:

◆ IsColorPainted()

bool Slic3r::GUI::ObjectDataViewModel::IsColorPainted ( wxDataViewItem & item) const
2343{
2344 ObjectDataViewModelNode* node = static_cast<ObjectDataViewModelNode*>(item.GetID());
2345 if (!node)
2346 return false;
2347
2348 return node->m_color_enable;
2349}

References Slic3r::GUI::ObjectDataViewModelNode::m_color_enable.

◆ IsContainer()

bool Slic3r::GUI::ObjectDataViewModel::IsContainer ( const wxDataViewItem & item) const
override
2069{
2070 // the invisible root node can have children
2071 if (!item.IsOk())
2072 return true;
2073
2074 ObjectDataViewModelNode *node = static_cast<ObjectDataViewModelNode*>(item.GetID());
2075 return node->IsContainer();
2076}

References Slic3r::GUI::ObjectDataViewModelNode::IsContainer().

Here is the call graph for this function:

◆ IsEmpty()

bool Slic3r::GUI::ObjectDataViewModel::IsEmpty ( )
inline
437{ return m_objects.empty(); }

References m_objects.

◆ IsEnabled()

bool Slic3r::GUI::ObjectDataViewModel::IsEnabled ( const wxDataViewItem & item,
unsigned int col ) const
override
2004{
2005 bool ret;
2006
2007 wxASSERT(item.IsOk());
2008 ObjectDataViewModelNode *node = static_cast<ObjectDataViewModelNode*>(item.GetID());
2009
2010 // disable extruder selection for the non "itObject|itVolume" item
2011 ret = !(col == colFilament && node->m_extruder.IsEmpty());
2012 return ret;
2013}

References Slic3r::GUI::colFilament, and Slic3r::GUI::ObjectDataViewModelNode::m_extruder.

◆ IsPrintable()

bool Slic3r::GUI::ObjectDataViewModel::IsPrintable ( const wxDataViewItem & item) const
903{
904 ObjectDataViewModelNode* node = static_cast<ObjectDataViewModelNode*>(item.GetID());
905 if (!node)
906 return false;
907
908 return node->IsPrintable() == piPrintable;
909}

References Slic3r::GUI::ObjectDataViewModelNode::IsPrintable(), and Slic3r::GUI::piPrintable.

Referenced by AddInstanceChild().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ IsSettingsItem()

bool Slic3r::GUI::ObjectDataViewModel::IsSettingsItem ( const wxDataViewItem & item) const
2248{
2249 if (!item.IsOk())
2250 return false;
2251 ObjectDataViewModelNode *node = static_cast<ObjectDataViewModelNode*>(item.GetID());
2252 return node->m_type == itSettings;
2253}

References Slic3r::GUI::itSettings, and Slic3r::GUI::ObjectDataViewModelNode::m_type.

◆ IsSinked()

bool Slic3r::GUI::ObjectDataViewModel::IsSinked ( wxDataViewItem & item) const
2361{
2362 ObjectDataViewModelNode *node = static_cast<ObjectDataViewModelNode *>(item.GetID());
2363 if (!node) return false;
2364
2365 return node->m_sink_enable;
2366}

References Slic3r::GUI::ObjectDataViewModelNode::m_sink_enable.

◆ IsSupportPainted()

bool Slic3r::GUI::ObjectDataViewModel::IsSupportPainted ( wxDataViewItem & item) const
2352{
2353 ObjectDataViewModelNode* node = static_cast<ObjectDataViewModelNode*>(item.GetID());
2354 if (!node)
2355 return false;
2356
2357 return node->m_support_enable;
2358}

References Slic3r::GUI::ObjectDataViewModelNode::m_support_enable.

◆ IsVariableHeight()

bool Slic3r::GUI::ObjectDataViewModel::IsVariableHeight ( const wxDataViewItem & item) const
911 {
912 ObjectDataViewModelNode* node = static_cast<ObjectDataViewModelNode*>(item.GetID());
913 if (!node)
914 return false;
915
916 return node->IsVaribaleHeight() == hiVariable;
917}
@ hiVariable
Definition ObjectDataViewModel.hpp:71

References Slic3r::GUI::hiVariable, and Slic3r::GUI::ObjectDataViewModelNode::IsVaribaleHeight().

Here is the call graph for this function:

◆ OnPlateChange()

void Slic3r::GUI::ObjectDataViewModel::OnPlateChange ( const int plate_idx,
wxDataViewItem item )
1886{
1887 ObjectDataViewModelNode* node = static_cast<ObjectDataViewModelNode*>(item.GetID());
1888
1889 ObjectDataViewModelNode* parent_plate = m_plate_outside;
1890 for (auto plate : m_plates) {
1891 if (plate->m_plate_idx == plate_idx) {
1892 parent_plate = plate;
1893 }
1894 }
1895
1896 ReparentObject(parent_plate, node);
1897}

References m_plate_outside, m_plates, and ReparentObject().

Here is the call graph for this function:

◆ ReorganizeChildren()

wxDataViewItem Slic3r::GUI::ObjectDataViewModel::ReorganizeChildren ( const int cur_volume_id,
const int new_volume_id,
const wxDataViewItem & parent )
1941{
1942 auto ret_item = wxDataViewItem(0);
1943 if (current_volume_id == new_volume_id)
1944 return ret_item;
1945 wxASSERT(parent.IsOk());
1946 ObjectDataViewModelNode *node_parent = static_cast<ObjectDataViewModelNode*>(parent.GetID());
1947 if (!node_parent) // happens if item.IsOk()==false
1948 return ret_item;
1949
1950 size_t shift = GetItemIndexForFirstVolume(node_parent);
1951
1952 ObjectDataViewModelNode *deleted_node = node_parent->GetNthChild(current_volume_id+shift);
1953 node_parent->GetChildren().Remove(deleted_node);
1954 ItemDeleted(parent, wxDataViewItem(deleted_node));
1955 node_parent->Insert(deleted_node, new_volume_id+shift);
1956 ItemAdded(parent, wxDataViewItem(deleted_node));
1957
1958 // If some item has a children, just to add a deleted item is not enough on Linux
1959 // We should to add all its children separately
1960 AddAllChildren(wxDataViewItem(deleted_node));
1961
1962 //update volume_id value for child-nodes
1963 auto children = node_parent->GetChildren();
1964 int id_frst = current_volume_id < new_volume_id ? current_volume_id : new_volume_id;
1965 int id_last = current_volume_id > new_volume_id ? current_volume_id : new_volume_id;
1966 for (int id = id_frst; id <= id_last; ++id)
1967 children[id+shift]->SetIdx(id);
1968
1969 return wxDataViewItem(node_parent->GetNthChild(new_volume_id+shift));
1970}
size_t GetItemIndexForFirstVolume(ObjectDataViewModelNode *node_parent)
Definition ObjectDataViewModel.cpp:964

References AddAllChildren(), Slic3r::GUI::ObjectDataViewModelNode::GetChildren(), GetItemIndexForFirstVolume(), Slic3r::GUI::ObjectDataViewModelNode::GetNthChild(), and Slic3r::GUI::ObjectDataViewModelNode::Insert().

Here is the call graph for this function:

◆ ReorganizeObjects()

wxDataViewItem Slic3r::GUI::ObjectDataViewModel::ReorganizeObjects ( int current_id,
int new_id )
1973{
1974 if (current_id == new_id)
1975 return wxDataViewItem(nullptr);
1976
1977 ObjectDataViewModelNode* deleted_node = m_objects[current_id];
1978 ObjectDataViewModelNode* new_node = m_objects[new_id];
1979 ObjectDataViewModelNode* plate_node = deleted_node->m_parent;
1980
1981 m_objects.erase(m_objects.begin() + current_id);
1982 plate_node->GetChildren().Remove(deleted_node);
1983 ItemDeleted(wxDataViewItem(deleted_node->m_parent), wxDataViewItem(deleted_node));
1984
1985 m_objects.emplace(m_objects.begin() + new_id, deleted_node);
1986 int plate_child_index = plate_node->GetChildIndex(new_node);
1987 if (current_id < new_id)
1988 plate_node->Insert(deleted_node, plate_child_index+1);
1989 else {
1990 //should not happen
1991 plate_node->Insert(deleted_node, plate_child_index);
1992 }
1993 ItemAdded(wxDataViewItem(deleted_node->m_parent), wxDataViewItem(deleted_node));
1994
1995 //ItemChanged(wxDataViewItem(nullptr));
1996
1997 // If some item has a children, just to add a deleted item is not enough on Linux
1998 // We should to add all its children separately
1999 AddAllChildren(wxDataViewItem(deleted_node));
2000 return wxDataViewItem(deleted_node);
2001}

References AddAllChildren(), Slic3r::GUI::ObjectDataViewModelNode::GetChildIndex(), Slic3r::GUI::ObjectDataViewModelNode::GetChildren(), Slic3r::GUI::ObjectDataViewModelNode::Insert(), m_objects, and Slic3r::GUI::ObjectDataViewModelNode::m_parent.

Here is the call graph for this function:

◆ ReparentObject()

void Slic3r::GUI::ObjectDataViewModel::ReparentObject ( ObjectDataViewModelNode * plate,
ObjectDataViewModelNode * object )
private
1920{
1921 assert(plate != nullptr && (plate->m_type & itPlate) != 0);
1922 assert(object != nullptr && (object->m_type & itObject) != 0);
1923
1924 ObjectDataViewModelNode* old_plate = object->m_parent;
1925 assert(old_plate != nullptr && (old_plate->m_type & itPlate) != 0);
1926 if (old_plate == plate)
1927 return;
1928
1929 old_plate->GetChildren().Remove(object);
1930 ItemDeleted(wxDataViewItem(old_plate), wxDataViewItem(object));
1931
1932 object->m_plate_idx = plate->m_plate_idx;
1933 object->m_parent = plate;
1934 plate->Append(object);
1935 ItemAdded(wxDataViewItem(plate), wxDataViewItem(object));
1936}

References Slic3r::GUI::ObjectDataViewModelNode::Append(), Slic3r::GUI::ObjectDataViewModelNode::GetChildren(), Slic3r::GUI::itObject, Slic3r::GUI::itPlate, Slic3r::GUI::ObjectDataViewModelNode::m_parent, Slic3r::GUI::ObjectDataViewModelNode::m_plate_idx, and Slic3r::GUI::ObjectDataViewModelNode::m_type.

Referenced by AddPlate(), Delete(), and OnPlateChange().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ Rescale()

void Slic3r::GUI::ObjectDataViewModel::Rescale ( )
2398{
2405
2406 for (auto item : INFO_ITEMS)
2407 m_info_bmps[item.first] = create_scaled_bitmap(item.second.bmp_name);
2408
2409 wxDataViewItemArray all_items;
2410 GetAllChildren(wxDataViewItem(0), all_items);
2411
2412 for (wxDataViewItem item : all_items)
2413 {
2414 if (!item.IsOk())
2415 continue;
2416
2417 ObjectDataViewModelNode *node = static_cast<ObjectDataViewModelNode*>(item.GetID());
2418 node->msw_rescale();
2419
2420 switch (node->m_type)
2421 {
2422 case itObject:
2423 case itVolume:
2424 UpdateBitmapForNode(node);
2425 break;
2426 case itLayerRoot:
2427 node->m_bmp = create_scaled_bitmap(LayerRootIcon);
2428 break;
2429 case itLayer:
2430 node->m_bmp = create_scaled_bitmap(LayerIcon);
2431 break;
2432 case itInfo:
2433 node->m_bmp = m_info_bmps.at(node->m_info_item_type);
2434 break;
2435 default: break;
2436 }
2437
2438 ItemChanged(item);
2439 }
2440}
static constexpr char LayerIcon[]
Definition ObjectDataViewModel.cpp:61
static constexpr char LayerRootIcon[]
Definition ObjectDataViewModel.cpp:60

References create_scaled_bitmap(), Slic3r::GUI::MenuFactory::get_svg_volume_bitmaps(), Slic3r::GUI::MenuFactory::get_text_volume_bitmaps(), Slic3r::GUI::MenuFactory::get_volume_bitmaps(), GetAllChildren(), Slic3r::GUI::INFO_ITEMS, Slic3r::GUI::itInfo, Slic3r::GUI::itLayer, Slic3r::GUI::itLayerRoot, Slic3r::GUI::itObject, Slic3r::GUI::itVolume, Slic3r::GUI::LayerIcon, Slic3r::GUI::LayerRootIcon, Slic3r::GUI::LockIcon, Slic3r::GUI::ObjectDataViewModelNode::m_bmp, m_info_bmps, Slic3r::GUI::ObjectDataViewModelNode::m_info_item_type, m_lock_bmp, m_svg_volume_bmps, m_text_volume_bmps, Slic3r::GUI::ObjectDataViewModelNode::m_type, m_volume_bmps, m_warning_bmp, m_warning_manifold_bmp, Slic3r::GUI::ObjectDataViewModelNode::msw_rescale(), UpdateBitmapForNode(), Slic3r::GUI::WarningIcon, and Slic3r::GUI::WarningManifoldIcon.

Here is the call graph for this function:

◆ ResetAll()

void Slic3r::GUI::ObjectDataViewModel::ResetAll ( )
1218{
1219 // BBS
1220 // FIX: should remove from children collection soon, or will conflict GetChildren
1221 while (!m_plates.empty()) {
1222 auto plate = m_plates.front();
1223 Delete(wxDataViewItem(plate));
1224 }
1225
1226 m_plates.clear();
1227 m_plate_outside = nullptr;
1228 m_objects.clear();
1229
1231}

References AddOutsidePlate(), Delete(), m_objects, m_plate_outside, and m_plates.

Here is the call graph for this function:

◆ search_object()

void Slic3r::GUI::ObjectDataViewModel::search_object ( wxString search_text)
1597{
1598 if (search_text.empty()) {
1600 }
1601 else {
1602 search_found_list.clear();
1603 search_text = search_text.MakeLower();
1604
1605 for (const auto& [model_node, name, tip] : assembly_name_list) {
1606 wxString sub_str = name;
1607 sub_str = sub_str.MakeLower();
1608
1609 wxString new_str = "";
1610 size_t search_text_len = search_text.length();
1611 size_t curr_str_len = 0;
1612 size_t pos = sub_str.find(search_text);
1613 while (pos != wxString::npos) {
1614 wxString new_search_str = "<b>" + name.Mid(curr_str_len + pos, search_text_len) + "</b>";
1615 new_str += name.Mid(curr_str_len, pos) + new_search_str;
1616 curr_str_len += search_text_len + pos;
1617 sub_str = sub_str.substr(pos + search_text_len);
1618 pos = sub_str.find(search_text);
1619 }
1620
1621 if (curr_str_len > 0 && curr_str_len < name.length()) {
1622 new_str += name.substr(curr_str_len);
1623 }
1624 if (!new_str.empty())
1625 search_found_list.push_back(std::tuple(model_node, new_str, tip));
1626 }
1627 }
1628}

References assembly_name_list, and search_found_list.

◆ SetAssociatedControl()

void Slic3r::GUI::ObjectDataViewModel::SetAssociatedControl ( wxDataViewCtrl * ctrl)
inline
524{ m_ctrl = ctrl; }

References m_ctrl.

◆ SetColorPaintState()

void Slic3r::GUI::ObjectDataViewModel::SetColorPaintState ( const bool painted,
wxDataViewItem obj_item,
bool force = false )
2369{
2370 ObjectDataViewModelNode* node = static_cast<ObjectDataViewModelNode*>(obj_item.GetID());
2371 if (!node)
2372 return;
2373
2374 node->set_color_icon(painted, force);
2375 ItemChanged(obj_item);
2376}

References Slic3r::GUI::ObjectDataViewModelNode::set_color_icon().

Here is the call graph for this function:

◆ SetCurSelectedPlateFullName()

void Slic3r::GUI::ObjectDataViewModel::SetCurSelectedPlateFullName ( int plate_idx,
const std::string & custom_name )
1341 {
1342 for (auto plate : m_plates) {
1343 if (plate->m_plate_idx == plate_idx) {
1344 wxString plate_full_name =_L("Plate");
1345 plate_full_name += wxString::Format(" %d", plate_idx + 1);
1346 if (!custom_name.empty()) {
1347 plate_full_name += wxString(" (", wxConvUTF8) + from_u8(custom_name) + wxString(")", wxConvUTF8);
1348 }
1349 plate->SetName(plate_full_name);
1350 }
1351 }
1352}

References _L, Slic3r::GUI::from_u8(), and m_plates.

Here is the call graph for this function:

◆ SetExtruder()

void Slic3r::GUI::ObjectDataViewModel::SetExtruder ( const wxString & extruder,
wxDataViewItem item )
1843{
1844 if (!item.IsOk())
1845 return;
1846
1847 // BBS. Don't support to set extruder for plate.
1848 ObjectDataViewModelNode* node = (ObjectDataViewModelNode*)item.GetID();
1849 if (node->GetType() & itPlate) {
1850 return;
1851 }
1852
1853 node->UpdateExtruderAndColorIcon(extruder);
1854 if (node->GetType() == itObject)
1855 UpdateVolumesExtruderBitmap(item, true);
1856
1857 // BBS
1858 ItemChanged(item);
1859}
void UpdateVolumesExtruderBitmap(wxDataViewItem object_item, bool use_obj_extruder=false)
Definition ObjectDataViewModel.cpp:1639

References Slic3r::GUI::ObjectDataViewModelNode::GetType(), Slic3r::GUI::itObject, Slic3r::GUI::itPlate, Slic3r::GUI::ObjectDataViewModelNode::UpdateExtruderAndColorIcon(), and UpdateVolumesExtruderBitmap().

Here is the call graph for this function:

◆ SetName()

bool Slic3r::GUI::ObjectDataViewModel::SetName ( const wxString & new_name,
wxDataViewItem item )
1862{
1863 if (!item.IsOk())
1864 return false;
1865
1866 // The icon can't be edited so get its old value and reuse it.
1867 wxVariant valueOld;
1868 GetValue(valueOld, item, colName);
1869
1870 DataViewBitmapText bmpText;
1871 bmpText << valueOld;
1872
1873 // But replace the text with the value entered by user.
1874 bmpText.SetText(new_name);
1875
1876 wxVariant value;
1877 value << bmpText;
1878 if (SetValue(value, item, colName)) {
1879 ItemChanged(item);
1880 return true;
1881 }
1882 return false;
1883}
void SetText(const wxString &text)
Definition ExtraRenderers.hpp:49
void GetValue(wxVariant &variant, const wxDataViewItem &item, unsigned int col) const override
Definition ObjectDataViewModel.cpp:1789
bool SetValue(const wxVariant &variant, const wxDataViewItem &item, unsigned int col) override
Definition ObjectDataViewModel.cpp:1826

References Slic3r::GUI::colName, GetValue(), DataViewBitmapText::SetText(), and SetValue().

Here is the call graph for this function:

◆ SetObjectPrintableState()

wxDataViewItem Slic3r::GUI::ObjectDataViewModel::SetObjectPrintableState ( PrintIndicator printable,
wxDataViewItem obj_item )
2318{
2319 ObjectDataViewModelNode* node = static_cast<ObjectDataViewModelNode*>(obj_item.GetID());
2320 if (!node)
2321 return wxDataViewItem(0);
2322 node->set_printable_icon(printable);
2323 ItemChanged(obj_item);
2324
2325 UpdateInstancesPrintable(obj_item);
2326
2327 return obj_item;
2328}
void UpdateInstancesPrintable(wxDataViewItem parent_item)
Definition ObjectDataViewModel.cpp:881

References Slic3r::GUI::ObjectDataViewModelNode::set_printable_icon(), and UpdateInstancesPrintable().

Here is the call graph for this function:

◆ SetObjectVariableHeightState()

wxDataViewItem Slic3r::GUI::ObjectDataViewModel::SetObjectVariableHeightState ( VaryHeightIndicator vari_height,
wxDataViewItem obj_item )
2331 {
2332
2333 ObjectDataViewModelNode* node = static_cast<ObjectDataViewModelNode*>(obj_item.GetID());
2334 if (!node)
2335 return wxDataViewItem(0);
2336 node->set_variable_height_icon(vari_height);
2337 ItemChanged(obj_item);
2338
2339 return obj_item;
2340}

References Slic3r::GUI::ObjectDataViewModelNode::set_variable_height_icon().

Here is the call graph for this function:

◆ SetPlateIdx()

void Slic3r::GUI::ObjectDataViewModel::SetPlateIdx ( const int plate_idx,
wxDataViewItem item )

◆ SetPrintableState()

wxDataViewItem Slic3r::GUI::ObjectDataViewModel::SetPrintableState ( PrintIndicator printable,
int obj_idx,
int subobj_idx = -1,
ItemType subobj_type = itInstance )
2295{
2296 wxDataViewItem item = wxDataViewItem(0);
2297 if (subobj_idx < 0)
2298 item = GetItemById(obj_idx);
2299 else
2300 item = subobj_type&itInstance ? GetItemByInstanceId(obj_idx, subobj_idx) :
2301 GetItemByVolumeId(obj_idx, subobj_idx);
2302
2303 ObjectDataViewModelNode* node = static_cast<ObjectDataViewModelNode*>(item.GetID());
2304 if (!node)
2305 return wxDataViewItem(0);
2306 node->set_printable_icon(printable);
2307 ItemChanged(item);
2308
2309 if (subobj_idx >= 0)
2311
2312 return item;
2313}
wxDataViewItem GetItemByVolumeId(int obj_idx, int volume_idx)
Definition ObjectDataViewModel.cpp:1354
wxDataViewItem GetItemByInstanceId(int obj_idx, int inst_idx)
Definition ObjectDataViewModel.cpp:1399

References GetItemById(), GetItemByInstanceId(), GetItemByVolumeId(), Slic3r::GUI::itInstance, Slic3r::GUI::ObjectDataViewModelNode::set_printable_icon(), and UpdateObjectPrintable().

Here is the call graph for this function:

◆ SetSinkState()

void Slic3r::GUI::ObjectDataViewModel::SetSinkState ( const bool painted,
wxDataViewItem obj_item,
bool force = false )
2389{
2390 ObjectDataViewModelNode *node = static_cast<ObjectDataViewModelNode *>(obj_item.GetID());
2391 if (!node) return;
2392
2393 node->set_sinking_icon(painted, force);
2394 ItemChanged(obj_item);
2395}

References Slic3r::GUI::ObjectDataViewModelNode::set_sinking_icon().

Here is the call graph for this function:

◆ SetSupportPaintState()

void Slic3r::GUI::ObjectDataViewModel::SetSupportPaintState ( const bool painted,
wxDataViewItem obj_item,
bool force = false )
2379{
2380 ObjectDataViewModelNode* node = static_cast<ObjectDataViewModelNode*>(obj_item.GetID());
2381 if (!node)
2382 return;
2383
2384 node->set_support_icon(painted, force);
2385 ItemChanged(obj_item);
2386}

References Slic3r::GUI::ObjectDataViewModelNode::set_support_icon().

Here is the call graph for this function:

◆ SetValue() [1/2]

bool Slic3r::GUI::ObjectDataViewModel::SetValue ( const wxVariant & variant,
const int item_idx,
unsigned int col )
1835{
1836 if (size_t(item_idx) >= m_objects.size())
1837 return false;
1838
1839 return m_objects[item_idx]->SetValue(variant, col);
1840}

References m_objects.

◆ SetValue() [2/2]

bool Slic3r::GUI::ObjectDataViewModel::SetValue ( const wxVariant & variant,
const wxDataViewItem & item,
unsigned int col )
override
1827{
1828 wxASSERT(item.IsOk());
1829
1830 ObjectDataViewModelNode *node = static_cast<ObjectDataViewModelNode*>(item.GetID());
1831 return node->SetValue(variant, col);
1832}

References Slic3r::GUI::ObjectDataViewModelNode::SetValue().

Referenced by SetName().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ SetVolumeType()

void Slic3r::GUI::ObjectDataViewModel::SetVolumeType ( const wxDataViewItem & item,
const Slic3r::ModelVolumeType type )
2266{
2267 if (!item.IsOk() || GetItemType(item) != itVolume)
2268 return;
2269
2270 ObjectDataViewModelNode *node = static_cast<ObjectDataViewModelNode*>(item.GetID());
2271 node->SetVolumeType(volume_type);
2272 node->SetBitmap(m_volume_bmps[int(volume_type)]);
2274 node->SetExtruder(""); // hide extruder
2275 else if (node->GetExtruder().IsEmpty())
2276 node->SetExtruder("default"); // show extruder ans set it to default
2277 node->UpdateExtruderAndColorIcon();
2278 ItemChanged(item);
2279}

References Slic3r::GUI::ObjectDataViewModelNode::GetExtruder(), GetItemType(), Slic3r::GUI::itVolume, m_volume_bmps, Slic3r::MODEL_PART, Slic3r::PARAMETER_MODIFIER, Slic3r::GUI::ObjectDataViewModelNode::SetBitmap(), Slic3r::GUI::ObjectDataViewModelNode::SetExtruder(), Slic3r::GUI::ObjectDataViewModelNode::SetVolumeType(), and Slic3r::GUI::ObjectDataViewModelNode::UpdateExtruderAndColorIcon().

Here is the call graph for this function:

◆ sys_color_changed()

void Slic3r::GUI::ObjectDataViewModel::sys_color_changed ( )
1631{
1632 for (ObjectDataViewModelNode *item : m_objects) {
1633 item->sys_color_changed();
1634 ItemChanged(wxDataViewItem((void *) item));
1635 }
1636}

References m_objects.

◆ UpdateBitmapForNode() [1/2]

void Slic3r::GUI::ObjectDataViewModel::UpdateBitmapForNode ( ObjectDataViewModelNode * node)
private
566{
567 bool is_volume_node = node->GetType() & itVolume;
568 int vol_type = static_cast<int>(node->GetVolumeType());
569 // Extended range to include Precise Seam modifier types
570 is_volume_node &= (vol_type >= int(ModelVolumeType::MODEL_PART) && vol_type <= int(ModelVolumeType::PRECISE_SEAM_NEUTRAL));
571
572 if (!node->has_warning_icon() && !node->has_lock()) {
573 node->SetBitmap(is_volume_node ? (
574 node->is_text_volume() ? m_text_volume_bmps.at(vol_type) :
575 node->is_svg_volume() ? m_svg_volume_bmps.at(vol_type) :
576 m_volume_bmps.at(vol_type)) : m_empty_bmp);
577 return;
578 }
579
580 std::string scaled_bitmap_name = std::string();
581 if (node->has_warning_icon())
582 scaled_bitmap_name += node->warning_icon_name();
583 if (node->has_lock())
584 scaled_bitmap_name += LockIcon;
585 if (is_volume_node)
586 scaled_bitmap_name += std::to_string(vol_type);
587 scaled_bitmap_name += (wxGetApp().dark_mode() ? "-dm" : "-lm");
588
589 wxBitmap* bmp = m_bitmap_cache->find(scaled_bitmap_name);
590 if (bmp == nullptr) {
591 std::vector<wxBitmap> bmps;
592 if (node->has_warning_icon())
593 bmps.emplace_back(node->warning_icon_name() == WarningIcon ? m_warning_bmp : m_warning_manifold_bmp);
594 if (node->has_lock()) {
595 if (!bmps.empty()) // ORCA: Add spacing between icons if there are multiple
596 bmps.emplace_back(create_scaled_bitmap("dot", nullptr, int(wxGetApp().em_unit() / 10) * 4));
597 bmps.emplace_back(m_lock_bmp);
598 }
599 if (is_volume_node) {
600 if (!bmps.empty()) // ORCA: Add spacing between icons if there are multiple
601 bmps.emplace_back(create_scaled_bitmap("dot", nullptr, int(wxGetApp().em_unit() / 10) * 4));
602 bmps.emplace_back(
603 node->is_text_volume() ? m_text_volume_bmps[vol_type] :
604 node->is_svg_volume() ? m_svg_volume_bmps[vol_type] :
605 m_volume_bmps[vol_type]);
606 }
607 bmp = m_bitmap_cache->insert(scaled_bitmap_name, bmps);
608 }
609
610 node->SetBitmap(*bmp);
611}
wxBitmap * find(const std::string &name)
Definition BitmapCache.hpp:29
wxBitmap * insert(const std::string &name, size_t width, size_t height)
Definition BitmapCache.cpp:81
wxBitmap m_empty_bmp
Definition ObjectDataViewModel.hpp:354
@ PRECISE_SEAM_NEUTRAL
Definition Model.hpp:369
int em_unit(wxWindow *win)
Definition wxExtensions.cpp:424

References create_scaled_bitmap(), em_unit(), Slic3r::GUI::ObjectDataViewModelNode::GetType(), Slic3r::GUI::ObjectDataViewModelNode::GetVolumeType(), Slic3r::GUI::ObjectDataViewModelNode::has_lock(), Slic3r::GUI::ObjectDataViewModelNode::has_warning_icon(), Slic3r::GUI::ObjectDataViewModelNode::is_svg_volume(), Slic3r::GUI::ObjectDataViewModelNode::is_text_volume(), Slic3r::GUI::itVolume, Slic3r::GUI::LockIcon, Slic3r::GUI::m_bitmap_cache, m_empty_bmp, m_lock_bmp, m_svg_volume_bmps, m_text_volume_bmps, m_volume_bmps, m_warning_bmp, m_warning_manifold_bmp, Slic3r::MODEL_PART, Slic3r::PRECISE_SEAM_NEUTRAL, Slic3r::GUI::ObjectDataViewModelNode::SetBitmap(), Slic3r::GUI::ObjectDataViewModelNode::warning_icon_name(), and Slic3r::GUI::WarningIcon.

Referenced by AddObject(), AddVolumeChild(), AddWarningIcon(), DeleteWarningIcon(), Rescale(), UpdateBitmapForNode(), and UpdateCutObjectIcon().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ UpdateBitmapForNode() [2/2]

void Slic3r::GUI::ObjectDataViewModel::UpdateBitmapForNode ( ObjectDataViewModelNode * node,
const std::string & warning_icon_name,
bool has_lock )
private
614{
615 node->SetWarningIconName(warning_icon_name);
616 node->SetLock(has_lock);
618}

References Slic3r::GUI::ObjectDataViewModelNode::SetLock(), Slic3r::GUI::ObjectDataViewModelNode::SetWarningIconName(), and UpdateBitmapForNode().

Here is the call graph for this function:

◆ UpdateColumValues()

bool Slic3r::GUI::ObjectDataViewModel::UpdateColumValues ( unsigned col)
1504{
1505 switch (col)
1506 {
1507 case colPrint:
1508 case colName:
1509 case colEditing:
1510 return true;
1511 case colFilament:
1512 {
1513 wxDataViewItemArray items;
1514 GetAllChildren(wxDataViewItem(nullptr), items);
1515
1516 if (items.IsEmpty()) return false;
1517
1518 for (auto item : items)
1520
1521 return true;
1522 }
1523 default:
1524 printf("MyObjectTreeModel::SetValue: wrong column");
1525 }
1526 return false;
1527}
void UpdateExtruderBitmap(wxDataViewItem item)
Definition ObjectDataViewModel.cpp:1530

References Slic3r::GUI::colEditing, Slic3r::GUI::colFilament, Slic3r::GUI::colName, Slic3r::GUI::colPrint, GetAllChildren(), and UpdateExtruderBitmap().

Here is the call graph for this function:

◆ UpdateCutObjectIcon()

void Slic3r::GUI::ObjectDataViewModel::UpdateCutObjectIcon ( const wxDataViewItem & item,
bool has_cut_icon )
2501{
2502 if (!item.IsOk())
2503 return;
2504 ObjectDataViewModelNode* node = static_cast<ObjectDataViewModelNode*>(item.GetID());
2505 if (node->has_lock() == has_lock)
2506 return;
2507
2508 node->SetLock(has_lock);
2509 UpdateBitmapForNode(node);
2510
2511 if (node->GetType() & itObject) {
2512 wxDataViewItemArray children;
2513 GetChildren(item, children);
2514 for (const wxDataViewItem &child : children)
2515 UpdateCutObjectIcon(child, has_lock);
2516 }
2517 ItemChanged(item);
2518}
void UpdateCutObjectIcon(const wxDataViewItem &item, bool has_cut_icon)
Definition ObjectDataViewModel.cpp:2500

References GetChildren(), Slic3r::GUI::ObjectDataViewModelNode::GetType(), Slic3r::GUI::ObjectDataViewModelNode::has_lock(), Slic3r::GUI::itObject, Slic3r::GUI::ObjectDataViewModelNode::SetLock(), UpdateBitmapForNode(), and UpdateCutObjectIcon().

Referenced by UpdateCutObjectIcon().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ UpdateExtruderBitmap()

void Slic3r::GUI::ObjectDataViewModel::UpdateExtruderBitmap ( wxDataViewItem item)
1531{
1532 if (!item.IsOk())
1533 return;
1534 ObjectDataViewModelNode* node = static_cast<ObjectDataViewModelNode*>(item.GetID());
1535 node->UpdateExtruderAndColorIcon();
1536}

References Slic3r::GUI::ObjectDataViewModelNode::UpdateExtruderAndColorIcon().

Referenced by UpdateColumValues().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ UpdateInstancesPrintable()

void Slic3r::GUI::ObjectDataViewModel::UpdateInstancesPrintable ( wxDataViewItem parent_item)
882{
883 const wxDataViewItem inst_root_item = GetInstanceRootItem(parent_item);
884 if (!inst_root_item)
885 return;
886
887 ObjectDataViewModelNode* obj_node = static_cast<ObjectDataViewModelNode*>(parent_item.GetID());
888 const PrintIndicator obj_pi = obj_node->IsPrintable();
889
890 ObjectDataViewModelNode* inst_root_node = static_cast<ObjectDataViewModelNode*>(inst_root_item.GetID());
891 const size_t child_cnt = inst_root_node->GetChildren().Count();
892
893 for (size_t i=0; i < child_cnt; i++)
894 {
895 ObjectDataViewModelNode* inst_node = inst_root_node->GetNthChild(i);
896 // and set printable state for object_node to piUndef
897 inst_node->set_printable_icon(obj_pi);
898 ItemChanged(wxDataViewItem((void*)inst_node));
899 }
900}

References Slic3r::GUI::ObjectDataViewModelNode::GetChildren(), GetInstanceRootItem(), Slic3r::GUI::ObjectDataViewModelNode::GetNthChild(), Slic3r::GUI::ObjectDataViewModelNode::IsPrintable(), and Slic3r::GUI::ObjectDataViewModelNode::set_printable_icon().

Referenced by SetObjectPrintableState().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ UpdateItemNames()

void Slic3r::GUI::ObjectDataViewModel::UpdateItemNames ( )
1539{
1540 wxDataViewItemArray changed_items;
1541
1542 for (auto obj_node : m_objects) {
1543 ModelObject* mo = obj_node->m_model_object;
1544 wxString new_obj_name = from_u8(mo->name);
1545 if (obj_node->m_name != new_obj_name) {
1546 obj_node->m_name = new_obj_name;
1547 changed_items.push_back(wxDataViewItem(obj_node));
1548 }
1549
1550 for (auto child_node : obj_node->GetChildren()) {
1551 if ((child_node->GetType() & itVolume) == 0)
1552 continue;
1553
1554 assert(child_node->GetIdx() < mo->volumes.size());
1555
1556 ModelVolume* mv = mo->volumes[child_node->GetIdx()];
1557 wxString new_vol_name = from_u8(mv->name);
1558 if (child_node->m_name != new_vol_name) {
1559 child_node->m_name = new_vol_name;
1560 changed_items.push_back(wxDataViewItem(child_node));
1561 }
1562 }
1563 }
1564
1565 ItemsChanged(changed_items);
1566}

References Slic3r::GUI::from_u8(), Slic3r::GUI::itVolume, m_objects, Slic3r::ModelObject::name, Slic3r::ModelVolume::name, and Slic3r::ModelObject::volumes.

Here is the call graph for this function:

◆ UpdateObjectPrintable()

void Slic3r::GUI::ObjectDataViewModel::UpdateObjectPrintable ( wxDataViewItem parent_item)
860{
861 const wxDataViewItem inst_root_item = GetInstanceRootItem(parent_item);
862 if (!inst_root_item)
863 return;
864
865 ObjectDataViewModelNode* inst_root_node = static_cast<ObjectDataViewModelNode*>(inst_root_item.GetID());
866
867 const size_t child_cnt = inst_root_node->GetChildren().Count();
869 for (size_t i=0; i < child_cnt; i++)
870 if (inst_root_node->GetNthChild(i)->IsPrintable() & piPrintable) {
871 obj_pi = piPrintable;
872 break;
873 }
874 // and set printable state for object_node to piUndef
875 ObjectDataViewModelNode* obj_node = static_cast<ObjectDataViewModelNode*>(parent_item.GetID());
876 obj_node->set_printable_icon(obj_pi);
877 ItemChanged(parent_item);
878}

References Slic3r::GUI::ObjectDataViewModelNode::GetChildren(), GetInstanceRootItem(), Slic3r::GUI::ObjectDataViewModelNode::GetNthChild(), Slic3r::GUI::ObjectDataViewModelNode::IsPrintable(), Slic3r::GUI::piPrintable, Slic3r::GUI::piUnprintable, and Slic3r::GUI::ObjectDataViewModelNode::set_printable_icon().

Referenced by AddInstanceChild(), Delete(), DeleteLastInstance(), and SetPrintableState().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ UpdateSettingsDigest()

void Slic3r::GUI::ObjectDataViewModel::UpdateSettingsDigest ( const wxDataViewItem & item,
const std::vector< std::string > & categories )
2257{
2258 if (!item.IsOk()) return;
2259 ObjectDataViewModelNode *node = static_cast<ObjectDataViewModelNode*>(item.GetID());
2260 if (!node->update_settings_digest(categories))
2261 return;
2262 ItemChanged(item);
2263}

References Slic3r::GUI::ObjectDataViewModelNode::update_settings_digest().

Here is the call graph for this function:

◆ UpdateVolumesExtruderBitmap()

void Slic3r::GUI::ObjectDataViewModel::UpdateVolumesExtruderBitmap ( wxDataViewItem object_item,
bool use_obj_extruder = false )
1640{
1641 if (!obj_item.IsOk() || GetItemType(obj_item) != itObject)
1642 return;
1643 ObjectDataViewModelNode* obj_node = static_cast<ObjectDataViewModelNode*>(obj_item.GetID());
1644 for (auto child : obj_node->GetChildren())
1645 if (child->GetVolumeType() == ModelVolumeType::MODEL_PART)
1646 child->UpdateExtruderAndColorIcon(use_obj_extruder ? obj_node->GetExtruder() : "");
1647}

References Slic3r::GUI::ObjectDataViewModelNode::GetChildren(), Slic3r::GUI::ObjectDataViewModelNode::GetExtruder(), GetItemType(), Slic3r::GUI::itObject, Slic3r::MODEL_PART, and Slic3r::GUI::ObjectDataViewModelNode::UpdateExtruderAndColorIcon().

Referenced by SetExtruder().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ UpdateWarningIcon()

void Slic3r::GUI::ObjectDataViewModel::UpdateWarningIcon ( const wxDataViewItem & item,
const std::string & warning_name )
2493{
2494 if (warning_icon_name.empty())
2495 DeleteWarningIcon(item, true);
2496 else
2497 AddWarningIcon(item, warning_icon_name);
2498}
void AddWarningIcon(const wxDataViewItem &item, const std::string &warning_name)
Definition ObjectDataViewModel.cpp:2442

References AddWarningIcon(), and DeleteWarningIcon().

Here is the call graph for this function:

Member Data Documentation

◆ assembly_name_list

std::vector<std::tuple<ObjectDataViewModelNode*, wxString, wxString> > Slic3r::GUI::ObjectDataViewModel::assembly_name_list
private

◆ m_ctrl

wxDataViewCtrl* Slic3r::GUI::ObjectDataViewModel::m_ctrl { nullptr }
private
361{ nullptr };

Referenced by AddAllChildren(), Delete(), and SetAssociatedControl().

◆ m_empty_bmp

wxBitmap Slic3r::GUI::ObjectDataViewModel::m_empty_bmp
private

Referenced by UpdateBitmapForNode().

◆ m_info_bmps

std::map<InfoItemType, wxBitmap> Slic3r::GUI::ObjectDataViewModel::m_info_bmps
private

◆ m_lock_bmp

wxBitmap Slic3r::GUI::ObjectDataViewModel::m_lock_bmp
private

◆ m_objects

◆ m_plate_outside

ObjectDataViewModelNode* Slic3r::GUI::ObjectDataViewModel::m_plate_outside
private

◆ m_plates

◆ m_svg_volume_bmps

std::vector<wxBitmap> Slic3r::GUI::ObjectDataViewModel::m_svg_volume_bmps
private

◆ m_text_volume_bmps

std::vector<wxBitmap> Slic3r::GUI::ObjectDataViewModel::m_text_volume_bmps
private

◆ m_ui_and_3d_volume_maps

std::map<int,std::map<int, int> > Slic3r::GUI::ObjectDataViewModel::m_ui_and_3d_volume_maps
private

◆ m_volume_bmps

std::vector<wxBitmap> Slic3r::GUI::ObjectDataViewModel::m_volume_bmps
private

◆ m_warning_bmp

wxBitmap Slic3r::GUI::ObjectDataViewModel::m_warning_bmp
private

◆ m_warning_manifold_bmp

wxBitmap Slic3r::GUI::ObjectDataViewModel::m_warning_manifold_bmp
private

◆ search_found_list

std::vector<std::tuple<ObjectDataViewModelNode*, wxString, wxString> > Slic3r::GUI::ObjectDataViewModel::search_found_list
private

The documentation for this class was generated from the following files: