code format

This commit is contained in:
2022-12-14 14:14:44 +03:00
parent 1dfca0aeab
commit cb944b62e4
85 changed files with 4451 additions and 3744 deletions

View File

@@ -1,29 +1,31 @@
/*
QGL SceneTree
Ivan Pelipenko peri4ko@yandex.ru
QGL SceneTree
Ivan Pelipenko peri4ko@yandex.ru
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "scene_tree.h"
#include "ui_scene_tree.h"
#include "glcamera.h"
#include "qglview.h"
#include <QTreeWidget>
#include <QScrollBar>
#include "ui_scene_tree.h"
#include <QAction>
#include <QEvent>
#include <QScrollBar>
#include <QTreeWidget>
enum Column {
cName,
@@ -65,13 +67,17 @@ SceneTree::SceneTree(QWidget * parent): QWidget(parent) {
icon_vis[0] = QIcon(":/icons/layer-visible-off.png");
icon_vis[1] = QIcon(":/icons/layer-visible-on.png");
ui->treeObjects->addActions(actionsSelection());
ui->treeObjects->addAction (newSeparator());
ui->treeObjects->addAction(newSeparator());
ui->treeObjects->addActions(actionsAdd());
ui->buttonFilter->addActions(QList<QAction*>() << ui->actionFilter_node << ui->actionFilter_mesh << ui->actionFilter_light << ui->actionFilter_camera);
view = 0;
ui->buttonFilter->addActions(QList<QAction *>()
<< ui->actionFilter_node << ui->actionFilter_mesh << ui->actionFilter_light << ui->actionFilter_camera);
view = 0;
hidden_by_filter = obj_count = 0;
block_tree = false;
connect(ui->treeObjects->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), this, SLOT(treeObjects_selectionCnahged()));
block_tree = false;
connect(ui->treeObjects->selectionModel(),
SIGNAL(selectionChanged(QItemSelection, QItemSelection)),
this,
SLOT(treeObjects_selectionCnahged()));
}
@@ -87,7 +93,7 @@ void SceneTree::assignQGLView(QGLView * v) {
connect(view, SIGNAL(selectionChanged()), this, SLOT(selectionChanged()));
connect(view, SIGNAL(materialsChanged()), this, SLOT(materialsChanged()));
connect(view->scene(), SIGNAL(treeChanged()), this, SLOT(objectsTreeChanged()));
connect(view->scene(), SIGNAL(__objectDeleted(ObjectBase*)), this, SLOT(__objectDeleted(ObjectBase*)));
connect(view->scene(), SIGNAL(__objectDeleted(ObjectBase *)), this, SLOT(__objectDeleted(ObjectBase *)));
view->setContextActions(actionsSelection());
checkActions();
}
@@ -102,12 +108,9 @@ QList<QAction *> SceneTree::actionsAdd() {
QList<QAction *> SceneTree::actionsSelection() {
QList<QAction *> ret;
ret << ui->actionFocus << newSeparator()
<< ui->actionGroup << ui->actionClone << newSeparator()
<< ui->actionSelect_parent << ui->actionSelect_by_mesh << ui->actionSelect_by_material << newSeparator()
<< ui->actionTransfer_transform_to_children << newSeparator()
<< ui->actionActive_camera << ui->actionDefault_camera << newSeparator()
<< ui->actionRemove;
ret << ui->actionFocus << newSeparator() << ui->actionGroup << ui->actionClone << newSeparator() << ui->actionSelect_parent
<< ui->actionSelect_by_mesh << ui->actionSelect_by_material << newSeparator() << ui->actionTransfer_transform_to_children
<< newSeparator() << ui->actionActive_camera << ui->actionDefault_camera << newSeparator() << ui->actionRemove;
return ret;
}
@@ -129,8 +132,7 @@ void SceneTree::changeEvent(QEvent * e) {
void SceneTree::rememberExpanded(QTreeWidgetItem * ti) {
for (int i = 0; i < ti->childCount(); ++i) {
QTreeWidgetItem * ci = ti->child(i);
if (ci->isExpanded())
expanded_ << itemObject(ci);
if (ci->isExpanded()) expanded_ << itemObject(ci);
rememberExpanded(ci);
}
}
@@ -148,13 +150,12 @@ void SceneTree::restoreExpanded(QTreeWidgetItem * ti) {
void SceneTree::makeObjetTree(ObjectBase * o, QTreeWidgetItem * ti) {
++obj_count;
for (int i = 0; i < o->childCount(); ++i) {
ObjectBase * co = o->child(i);
ObjectBase * co = o->child(i);
QTreeWidgetItem * ci = new QTreeWidgetItem(ti);
ci->setText(cName, co->name());
ci->setCheckState(cVis, co->isVisible() ? Qt::Checked : Qt::Unchecked);
ci->setIcon(cVis, icon_vis[co->isVisible(true)]);
if (co->material())
ci->setText(cMaterial, co->material()->name);
if (co->material()) ci->setText(cMaterial, co->material()->name);
ci->setFlags(ci->flags() | Qt::ItemIsEditable);
ObjectType t = otNode;
switch (co->type()) {
@@ -189,7 +190,7 @@ void SceneTree::makeObjetTree(ObjectBase * o, QTreeWidgetItem * ti) {
ObjectBase * SceneTree::itemObject(QTreeWidgetItem * item) const {
if (!item) return 0;
return (ObjectBase*)(item->data(cName, irObject).toULongLong());
return (ObjectBase *)(item->data(cName, irObject).toULongLong());
}
@@ -201,12 +202,11 @@ int SceneTree::itemType(QTreeWidgetItem * item) const {
void SceneTree::selectionChanged() {
if (block_tree) return;
block_tree = true;
QList<QTreeWidgetItem*> il = ui->treeObjects->findItems("", Qt::MatchContains | Qt::MatchRecursive);
const ObjectBase * fo = 0;
if (view->selectedObjects().size() == 1)
fo = view->selectedObject();
foreach (QTreeWidgetItem * i, il) {
block_tree = true;
QList<QTreeWidgetItem *> il = ui->treeObjects->findItems("", Qt::MatchContains | Qt::MatchRecursive);
const ObjectBase * fo = 0;
if (view->selectedObjects().size() == 1) fo = view->selectedObject();
foreach(QTreeWidgetItem * i, il) {
ObjectBase * o = itemObject(i);
i->setSelected(o->isSelected());
if (fo && (fo == o)) {
@@ -219,18 +219,17 @@ void SceneTree::selectionChanged() {
void SceneTree::materialsChanged() {
foreach (QTreeWidgetItem * i, geo_items) {
foreach(QTreeWidgetItem * i, geo_items) {
ObjectBase * o = itemObject(i);
if (!o) continue;
if (o->material())
i->setText(cMaterial, o->material()->name);
if (o->material()) i->setText(cMaterial, o->material()->name);
}
}
void SceneTree::cameraChanged() {
if (!view) return;
foreach (QTreeWidgetItem * i, cam_items) {
foreach(QTreeWidgetItem * i, cam_items) {
ObjectBase * o = itemObject(i);
if (!o) continue;
i->setText(cVis, (o == view->camera()) ? "*" : "");
@@ -242,8 +241,8 @@ bool SceneTree::filterTree(QTreeWidgetItem * ti, const QString & filter, int typ
bool ret = false;
for (int i = 0; i < ti->childCount(); ++i) {
QTreeWidgetItem * ci = ti->child(i);
QString cit = ci->text(cName);
int t = itemType(ci);
QString cit = ci->text(cName);
int t = itemType(ci);
if (ci->childCount() > 0) {
if (!filterTree(ci, filter, types)) {
ci->setHidden(true);
@@ -259,11 +258,12 @@ bool SceneTree::filterTree(QTreeWidgetItem * ti, const QString & filter, int typ
} else {
f = f || cit.contains(filter, Qt::CaseInsensitive);
}
if ((types & t) != t)
f = false;
if ((types & t) != t) f = false;
ci->setHidden(!f);
if (f) ret = true;
else ++hidden_by_filter;
if (f)
ret = true;
else
++hidden_by_filter;
}
}
return ret;
@@ -272,23 +272,23 @@ bool SceneTree::filterTree(QTreeWidgetItem * ti, const QString & filter, int typ
void SceneTree::checkActions() {
bool has_1 = false, has_m = false;
bool has_cam = false;
bool has_mesh = false;
bool has_cam = false;
bool has_mesh = false;
bool is_def_cam = false;
if (view) {
is_def_cam = view->isDefaultCamera();
is_def_cam = view->isDefaultCamera();
ObjectBaseList slo = view->selectedObjects();
has_1 = !slo.isEmpty();
has_m = slo.size() > 1;
for (ObjectBase * o : slo) {
has_1 = !slo.isEmpty();
has_m = slo.size() > 1;
for (ObjectBase * o: slo) {
if (o->type() == ObjectBase::glCamera) has_cam = (slo.size() == 1);
if (o->type() == ObjectBase::glMesh) has_mesh = true;
}
}
ui->actionFocus ->setEnabled(has_mesh);
ui->actionFocus->setEnabled(has_mesh);
ui->actionRemove->setEnabled(has_1);
ui->actionClone ->setEnabled(has_1);
ui->actionClone->setEnabled(has_1);
ui->actionGroup->setEnabled(has_m);
ui->actionTransfer_transform_to_children->setEnabled(has_1);
ui->actionSelect_parent->setEnabled(has_1);
@@ -304,8 +304,8 @@ void SceneTree::treeObjects_selectionCnahged() {
block_tree = true;
view->scene()->clearSelection();
ObjectBaseList sol;
QList<QTreeWidgetItem*> til = ui->treeObjects->selectedItems();
foreach (QTreeWidgetItem * i, til)
QList<QTreeWidgetItem *> til = ui->treeObjects->selectedItems();
foreach(QTreeWidgetItem * i, til)
sol << itemObject(i);
view->scene()->selectObjects(sol);
block_tree = false;
@@ -315,9 +315,9 @@ void SceneTree::treeObjects_selectionCnahged() {
void SceneTree::filter() {
int types = 0;
if (ui->actionFilter_node ->isChecked()) types |= otNode ;
if (ui->actionFilter_mesh ->isChecked()) types |= otMesh ;
if (ui->actionFilter_light ->isChecked()) types |= otLight ;
if (ui->actionFilter_node->isChecked()) types |= otNode;
if (ui->actionFilter_mesh->isChecked()) types |= otMesh;
if (ui->actionFilter_light->isChecked()) types |= otLight;
if (ui->actionFilter_camera->isChecked()) types |= otCamera;
if (types == 0) types = 0xFF;
hidden_by_filter = 0;
@@ -348,14 +348,14 @@ void SceneTree::on_treeObjects_itemChanged(QTreeWidgetItem * item, int column) {
if (o) o->setName(item->text(cName));
}
if (column == cVis) {
bool vis = item->checkState(cVis) == Qt::Checked;
QList<QTreeWidgetItem*> til = ui->treeObjects->selectedItems();
bool vis = item->checkState(cVis) == Qt::Checked;
QList<QTreeWidgetItem *> til = ui->treeObjects->selectedItems();
if (!til.contains(item)) {
til.clear();
til << item;
}
foreach (QTreeWidgetItem * ti, til) {
//itemObject(ti)->setVisible(vis);
foreach(QTreeWidgetItem * ti, til) {
// itemObject(ti)->setVisible(vis);
itemObject(ti)->setVisible(vis);
}
}
@@ -365,13 +365,12 @@ void SceneTree::on_treeObjects_itemChanged(QTreeWidgetItem * item, int column) {
void SceneTree::on_treeObjects_itemMoved(QTreeWidgetItem * item, QTreeWidgetItem * new_parent) {
ObjectBase * co = itemObject(item);
if (!co->hasParent()) return;
//co->parent()->removeChild(co);
// co->parent()->removeChild(co);
if (new_parent == ui->treeObjects->invisibleRootItem()) {
view->scene()->rootObject()->addChild(co);
} else {
ObjectBase * po = itemObject(new_parent);
if (po)
po->addChild(co);
if (po) po->addChild(co);
}
}
@@ -402,9 +401,9 @@ void SceneTree::on_actionAdd_camera_triggered() {
void SceneTree::on_actionClone_triggered() {
if (!view) return;
QList<QTreeWidgetItem*> sil = ui->treeObjects->selectedItems();
QList<QTreeWidgetItem *> sil = ui->treeObjects->selectedItems();
ObjectBaseList col;
foreach (QTreeWidgetItem * i, sil) {
foreach(QTreeWidgetItem * i, sil) {
ObjectBase * o = itemObject(i);
if (!o) continue;
ObjectBase * no = o->clone();
@@ -418,10 +417,10 @@ void SceneTree::on_actionClone_triggered() {
void SceneTree::on_actionGroup_triggered() {
if (!view) return;
ObjectBaseList sol = view->scene()->selectedObjects(true);
ObjectBase * cp = sol[0]->parent();
ObjectBase * nr = new ObjectBase();
ObjectBase * cp = sol[0]->parent();
ObjectBase * nr = new ObjectBase();
cp->addChild(nr);
foreach (ObjectBase * o, sol)
foreach(ObjectBase * o, sol)
nr->addChild(o);
view->scene()->selectObject(nr);
}
@@ -430,7 +429,7 @@ void SceneTree::on_actionGroup_triggered() {
void SceneTree::on_actionTransfer_transform_to_children_triggered() {
if (!view) return;
ObjectBaseList sol = view->scene()->selectedObjects(true);
foreach (ObjectBase * o, sol)
foreach(ObjectBase * o, sol)
o->transferTransformToChildren();
}
@@ -455,11 +454,10 @@ void SceneTree::on_actionDefault_camera_triggered() {
void SceneTree::on_actionSelect_parent_triggered() {
if (!view) return;
ObjectBaseList sol = view->scene()->selectedObjects(true);
QSet<ObjectBase*> nsl;
foreach (ObjectBase * o, sol) {
QSet<ObjectBase *> nsl;
foreach(ObjectBase * o, sol) {
ObjectBase * po = o->parent();
if (po != view->scene()->rootObject())
o = po;
if (po != view->scene()->rootObject()) o = po;
nsl << o;
}
view->scene()->selectObjects(nsl.values());
@@ -478,8 +476,8 @@ void SceneTree::on_actionSelect_by_material_triggered() {
void SceneTree::removeObjects() {
if (!view) return;
QList<QTreeWidgetItem*> sil = ui->treeObjects->selectedItems();
foreach (QTreeWidgetItem * i, sil) {
QList<QTreeWidgetItem *> sil = ui->treeObjects->selectedItems();
foreach(QTreeWidgetItem * i, sil) {
ObjectBase * o = itemObject(i);
if (o->isSelected(true)) view->scene()->clearSelection();
if (o) delete o;
@@ -493,7 +491,7 @@ void SceneTree::focusObjects() {
if (!view->camera()) return;
Box3D bb;
ObjectBaseList ol = view->selectedObjects();
foreach (ObjectBase * o, ol) {
foreach(ObjectBase * o, ol) {
o->calculateBoundingBox();
bb |= o->boundingBox();
}
@@ -512,7 +510,7 @@ void SceneTree::objectsTreeChanged() {
block_tree = false;
if (!view) return;
block_tree = true;
obj_count = 0;
obj_count = 0;
makeObjetTree(view->scene()->rootObject(), ui->treeObjects->invisibleRootItem());
--obj_count;
restoreExpanded(ui->treeObjects->invisibleRootItem());