Copy and paste -> Disabled paste of volumes when nothing is selected and fixed enabling/disabling of paste item in toolbar and edit menu
This commit is contained in:
parent
4718c839f6
commit
4046d517c9
@ -3711,10 +3711,12 @@ void Plater::paste_from_clipboard()
|
|||||||
{
|
{
|
||||||
p->view3D->get_canvas3d()->get_selection().paste_from_clipboard();
|
p->view3D->get_canvas3d()->get_selection().paste_from_clipboard();
|
||||||
}
|
}
|
||||||
|
bool Plater::can_paste_from_clipboard() const
|
||||||
bool Plater::is_selection_clipboard_empty() const
|
|
||||||
{
|
{
|
||||||
return p->view3D->get_canvas3d()->get_selection().is_clipboard_empty();
|
const Selection& selection = p->view3D->get_canvas3d()->get_selection();
|
||||||
|
const Selection::Clipboard& clipboard = selection.get_clipboard();
|
||||||
|
Selection::EMode mode = clipboard.get_mode();
|
||||||
|
return !clipboard.is_empty() && ((mode == Selection::Instance) || selection.is_from_single_instance());
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Plater::can_delete() const { return p->can_delete(); }
|
bool Plater::can_delete() const { return p->can_delete(); }
|
||||||
@ -3726,6 +3728,6 @@ bool Plater::can_split_to_volumes() const { return p->can_split_to_volumes(); }
|
|||||||
bool Plater::can_arrange() const { return p->can_arrange(); }
|
bool Plater::can_arrange() const { return p->can_arrange(); }
|
||||||
bool Plater::can_layers_editing() const { return p->can_layers_editing(); }
|
bool Plater::can_layers_editing() const { return p->can_layers_editing(); }
|
||||||
bool Plater::can_copy() const { return !is_selection_empty(); }
|
bool Plater::can_copy() const { return !is_selection_empty(); }
|
||||||
bool Plater::can_paste() const { return !is_selection_clipboard_empty(); }
|
bool Plater::can_paste() const { return can_paste_from_clipboard(); }
|
||||||
|
|
||||||
}} // namespace Slic3r::GUI
|
}} // namespace Slic3r::GUI
|
||||||
|
@ -184,7 +184,7 @@ public:
|
|||||||
|
|
||||||
void copy_selection_to_clipboard();
|
void copy_selection_to_clipboard();
|
||||||
void paste_from_clipboard();
|
void paste_from_clipboard();
|
||||||
bool is_selection_clipboard_empty() const;
|
bool can_paste_from_clipboard() const;
|
||||||
|
|
||||||
bool can_delete() const;
|
bool can_delete() const;
|
||||||
bool can_delete_all() const;
|
bool can_delete_all() const;
|
||||||
|
@ -1067,15 +1067,21 @@ void Selection::paste_from_clipboard()
|
|||||||
if (!m_valid || m_clipboard.is_empty())
|
if (!m_valid || m_clipboard.is_empty())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if ((m_clipboard.get_mode() == Volume) && is_from_single_instance())
|
switch (m_clipboard.get_mode())
|
||||||
|
{
|
||||||
|
case Volume:
|
||||||
|
{
|
||||||
|
if (is_from_single_instance())
|
||||||
paste_volumes_from_clipboard();
|
paste_volumes_from_clipboard();
|
||||||
else
|
|
||||||
paste_objects_from_clipboard();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool Selection::is_clipboard_empty()
|
break;
|
||||||
{
|
}
|
||||||
return m_clipboard.is_empty();
|
case Instance:
|
||||||
|
{
|
||||||
|
paste_objects_from_clipboard();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Selection::update_valid()
|
void Selection::update_valid()
|
||||||
|
@ -138,19 +138,6 @@ public:
|
|||||||
typedef std::set<int> InstanceIdxsList;
|
typedef std::set<int> InstanceIdxsList;
|
||||||
typedef std::map<int, InstanceIdxsList> ObjectIdxsToInstanceIdxsMap;
|
typedef std::map<int, InstanceIdxsList> ObjectIdxsToInstanceIdxsMap;
|
||||||
|
|
||||||
private:
|
|
||||||
struct Cache
|
|
||||||
{
|
|
||||||
// Cache of GLVolume derived transformation matrices, valid during mouse dragging.
|
|
||||||
VolumesCache volumes_data;
|
|
||||||
// Center of the dragged selection, valid during mouse dragging.
|
|
||||||
Vec3d dragging_center;
|
|
||||||
// Map from indices of ModelObject instances in Model::objects
|
|
||||||
// to a set of indices of ModelVolume instances in ModelObject::instances
|
|
||||||
// Here the index means a position inside the respective std::vector, not ModelID.
|
|
||||||
ObjectIdxsToInstanceIdxsMap content;
|
|
||||||
};
|
|
||||||
|
|
||||||
class Clipboard
|
class Clipboard
|
||||||
{
|
{
|
||||||
Model m_model;
|
Model m_model;
|
||||||
@ -168,6 +155,19 @@ private:
|
|||||||
void set_mode(Selection::EMode mode) { m_mode = mode; }
|
void set_mode(Selection::EMode mode) { m_mode = mode; }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
private:
|
||||||
|
struct Cache
|
||||||
|
{
|
||||||
|
// Cache of GLVolume derived transformation matrices, valid during mouse dragging.
|
||||||
|
VolumesCache volumes_data;
|
||||||
|
// Center of the dragged selection, valid during mouse dragging.
|
||||||
|
Vec3d dragging_center;
|
||||||
|
// Map from indices of ModelObject instances in Model::objects
|
||||||
|
// to a set of indices of ModelVolume instances in ModelObject::instances
|
||||||
|
// Here the index means a position inside the respective std::vector, not ModelID.
|
||||||
|
ObjectIdxsToInstanceIdxsMap content;
|
||||||
|
};
|
||||||
|
|
||||||
// Volumes owned by GLCanvas3D.
|
// Volumes owned by GLCanvas3D.
|
||||||
GLVolumePtrs* m_volumes;
|
GLVolumePtrs* m_volumes;
|
||||||
// Model, not owned.
|
// Model, not owned.
|
||||||
@ -287,7 +287,8 @@ public:
|
|||||||
|
|
||||||
void copy_to_clipboard();
|
void copy_to_clipboard();
|
||||||
void paste_from_clipboard();
|
void paste_from_clipboard();
|
||||||
bool is_clipboard_empty();
|
|
||||||
|
const Clipboard& get_clipboard() const { return m_clipboard; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void update_valid();
|
void update_valid();
|
||||||
|
Loading…
Reference in New Issue
Block a user