git-svn-id: svn://db.shs.com.ru/libs@635 a8b55f48-bf90-11e4-a774-851b48703e85

This commit is contained in:
2019-11-27 11:19:39 +00:00
parent 7e3abd62fd
commit 988c4e1150
7 changed files with 83 additions and 11 deletions

View File

@@ -184,8 +184,6 @@ void Scene::selectObject(ObjectBase * o, bool add_to_selection) {
else o->setSelected(!o->isSelected()); else o->setSelected(!o->isSelected());
gatherSelection(); gatherSelection();
} }
foreach (Mesh * m, geometries)
m->selected_changed = true;
emitSelectionChanged(); emitSelectionChanged();
} }
@@ -197,8 +195,38 @@ void Scene::selectObjects(QList<ObjectBase *> ol, bool add_to_selection) {
o->setSelected(true); o->setSelected(true);
} }
gatherSelection(); gatherSelection();
foreach (Mesh * m, geometries) emitSelectionChanged();
m->selected_changed = true; }
void Scene::selectObjectsByMesh() {
QList<ObjectBase * > csl = selected_;
QSet<Mesh*> sml;
foreach (ObjectBase * o, csl)
if (o->mesh())
sml << o->mesh();
QList<ObjectBase * > ol = root_->children(true);
foreach (ObjectBase * o, ol) {
if (sml.contains(o->mesh()))
o->setSelected(true);
}
gatherSelection();
emitSelectionChanged();
}
void Scene::selectObjectsByMaterial() {
QList<ObjectBase * > csl = selected_;
QSet<Material*> sml;
foreach (ObjectBase * o, csl)
if (o->material())
sml << o->material();
QList<ObjectBase * > ol = root_->children(true);
foreach (ObjectBase * o, ol) {
if (sml.contains(o->material()))
o->setSelected(true);
}
gatherSelection();
emitSelectionChanged(); emitSelectionChanged();
} }

View File

@@ -72,6 +72,8 @@ public:
void setSelectionMode(SelectionMode mode) {sel_mode_ = mode;} void setSelectionMode(SelectionMode mode) {sel_mode_ = mode;}
void selectObject(ObjectBase * o, bool add_to_selection = false); void selectObject(ObjectBase * o, bool add_to_selection = false);
void selectObjects(QList<ObjectBase * > ol, bool add_to_selection = false); void selectObjects(QList<ObjectBase * > ol, bool add_to_selection = false);
void selectObjectsByMesh();
void selectObjectsByMaterial();
void clearSelection(); void clearSelection();
QList<ObjectBase * > selectedObjects(bool top_only = false) const; QList<ObjectBase * > selectedObjects(bool top_only = false) const;
ObjectBase * selectedObject() const; ObjectBase * selectedObject() const;

View File

@@ -193,8 +193,6 @@ protected:
void keyReleaseEvent(QKeyEvent * e); void keyReleaseEvent(QKeyEvent * e);
void focusOutEvent(QFocusEvent *); void focusOutEvent(QFocusEvent *);
void renderSelection();
void checkCaps(); void checkCaps();
private: private:

View File

@@ -140,7 +140,7 @@ void RendererBase::reloadMaterials(Scene & scene) {
tex_layers[i][m->bitmap_path] = 0; tex_layers[i][m->bitmap_path] = 0;
} }
int layers_count = tex_layers[0].size() + tex_layers[1].size(), cl = -1; int layers_count = tex_layers[0].size() + tex_layers[1].size(), cl = -1;
uint cur_maps_hash = qHash(tex_layers[0].keys()) ^ qHash(tex_layers[1].keys()); uint cur_maps_hash = qHash(tex_layers[0].keys()) ^ (qHash(tex_layers[1].keys()) + 0xF00FF00F);
if (maps_hash != cur_maps_hash) { if (maps_hash != cur_maps_hash) {
maps_hash = cur_maps_hash; maps_hash = cur_maps_hash;
textures_maps.resize(view, maps_size, layers_count); textures_maps.resize(view, maps_size, layers_count);

View File

@@ -231,6 +231,8 @@ void SceneTree::checkButtons() {
ui->buttonRemove->setEnabled(has_1); ui->buttonRemove->setEnabled(has_1);
ui->buttonClone ->setEnabled(has_1); ui->buttonClone ->setEnabled(has_1);
ui->buttonSelectParent->setEnabled(has_1); ui->buttonSelectParent->setEnabled(has_1);
ui->buttonSelectByMesh->setEnabled(has_1);
ui->buttonSelectByMaterial->setEnabled(has_1);
ui->buttonGroup->setEnabled(has_m); ui->buttonGroup->setEnabled(has_m);
} }
@@ -350,6 +352,16 @@ void SceneTree::on_buttonSelectParent_clicked() {
} }
void SceneTree::on_buttonSelectByMesh_clicked() {
view->scene()->selectObjectsByMesh();
}
void SceneTree::on_buttonSelectByMaterial_clicked() {
view->scene()->selectObjectsByMaterial();
}
void SceneTree::on_buttonGroup_clicked() { void SceneTree::on_buttonGroup_clicked() {
if (!view) return; if (!view) return;
QList<ObjectBase*> sol = view->scene()->selectedObjects(true); QList<ObjectBase*> sol = view->scene()->selectedObjects(true);

View File

@@ -64,6 +64,8 @@ private slots:
void on_buttonClone_clicked(); void on_buttonClone_clicked();
void on_buttonUpdate_clicked() {objectsTreeChanged();} void on_buttonUpdate_clicked() {objectsTreeChanged();}
void on_buttonSelectParent_clicked(); void on_buttonSelectParent_clicked();
void on_buttonSelectByMesh_clicked();
void on_buttonSelectByMaterial_clicked();
void on_buttonGroup_clicked(); void on_buttonGroup_clicked();
void removeObjects(); void removeObjects();

View File

@@ -67,7 +67,7 @@
<string>Delete selected</string> <string>Delete selected</string>
</property> </property>
<property name="icon"> <property name="icon">
<iconset resource="widgets.qrc"> <iconset resource="../../qad/utils/qad_utils.qrc">
<normaloff>:/icons/edit-delete.png</normaloff>:/icons/edit-delete.png</iconset> <normaloff>:/icons/edit-delete.png</normaloff>:/icons/edit-delete.png</iconset>
</property> </property>
</widget> </widget>
@@ -97,7 +97,7 @@
<string>Clone selected</string> <string>Clone selected</string>
</property> </property>
<property name="icon"> <property name="icon">
<iconset resource="widgets.qrc"> <iconset resource="../../qad/utils/qad_utils.qrc">
<normaloff>:/icons/edit-copy.png</normaloff>:/icons/edit-copy.png</iconset> <normaloff>:/icons/edit-copy.png</normaloff>:/icons/edit-copy.png</iconset>
</property> </property>
</widget> </widget>
@@ -129,6 +129,34 @@
</property> </property>
</widget> </widget>
</item> </item>
<item>
<widget class="QToolButton" name="buttonSelectByMesh">
<property name="enabled">
<bool>false</bool>
</property>
<property name="toolTip">
<string>Select by mesh</string>
</property>
<property name="icon">
<iconset resource="../qglview.qrc">
<normaloff>:/icons/type-geo.png</normaloff>:/icons/type-geo.png</iconset>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="buttonSelectByMaterial">
<property name="enabled">
<bool>false</bool>
</property>
<property name="toolTip">
<string>Select by material</string>
</property>
<property name="icon">
<iconset resource="../../qad/blockview/qad_blockview.qrc">
<normaloff>:/icons/format-fill-color.png</normaloff>:/icons/format-fill-color.png</iconset>
</property>
</widget>
</item>
</layout> </layout>
</widget> </widget>
</item> </item>
@@ -320,7 +348,7 @@
<string>Force update</string> <string>Force update</string>
</property> </property>
<property name="icon"> <property name="icon">
<iconset resource="../qglview.qrc"> <iconset resource="../../qcd_utils/pult/cdpult.qrc">
<normaloff>:/icons/view-refresh.png</normaloff>:/icons/view-refresh.png</iconset> <normaloff>:/icons/view-refresh.png</normaloff>:/icons/view-refresh.png</iconset>
</property> </property>
</widget> </widget>
@@ -393,7 +421,9 @@
</customwidget> </customwidget>
</customwidgets> </customwidgets>
<resources> <resources>
<include location="widgets.qrc"/> <include location="../../qad/utils/qad_utils.qrc"/>
<include location="../../qad/blockview/qad_blockview.qrc"/>
<include location="../../qcd_utils/pult/cdpult.qrc"/>
<include location="../qglview.qrc"/> <include location="../qglview.qrc"/>
</resources> </resources>
<connections> <connections>