git-svn-id: svn://db.shs.com.ru/libs@665 a8b55f48-bf90-11e4-a774-851b48703e85
This commit is contained in:
@@ -52,7 +52,7 @@ Scene * Scene::clone() {
|
||||
|
||||
|
||||
void Scene::addObject(ObjectBase * o) {
|
||||
QList<ObjectBase*> aol = o->children(true);
|
||||
ObjectBaseList aol = o->children(true);
|
||||
attachObject(o);
|
||||
foreach (ObjectBase * c, aol)
|
||||
attachObject(c);
|
||||
@@ -125,7 +125,7 @@ void Scene::emitSelectionChanged() {
|
||||
selected_top << po;
|
||||
}
|
||||
foreach (Mesh * m, geometries)
|
||||
m->selected_changed = true;
|
||||
m->setAllSelectionChanged(true);
|
||||
selectionChanged();
|
||||
}
|
||||
|
||||
@@ -188,7 +188,7 @@ void Scene::selectObject(ObjectBase * o, bool add_to_selection) {
|
||||
}
|
||||
|
||||
|
||||
void Scene::selectObjects(QList<ObjectBase *> ol, bool add_to_selection) {
|
||||
void Scene::selectObjects(ObjectBaseList ol, bool add_to_selection) {
|
||||
if (!add_to_selection || (sel_mode_ == smSingleSelection)) clearSelection();
|
||||
foreach (ObjectBase * o, ol) {
|
||||
if (!o) continue;
|
||||
@@ -200,12 +200,12 @@ void Scene::selectObjects(QList<ObjectBase *> ol, bool add_to_selection) {
|
||||
|
||||
|
||||
void Scene::selectObjectsByMesh() {
|
||||
QList<ObjectBase * > csl = selected_;
|
||||
ObjectBaseList csl = selected_;
|
||||
QSet<Mesh*> sml;
|
||||
foreach (ObjectBase * o, csl)
|
||||
if (o->mesh())
|
||||
sml << o->mesh();
|
||||
QList<ObjectBase * > ol = root_->children(true);
|
||||
ObjectBaseList ol = root_->children(true);
|
||||
foreach (ObjectBase * o, ol) {
|
||||
if (sml.contains(o->mesh()))
|
||||
o->setSelected(true);
|
||||
@@ -216,12 +216,12 @@ void Scene::selectObjectsByMesh() {
|
||||
|
||||
|
||||
void Scene::selectObjectsByMaterial() {
|
||||
QList<ObjectBase * > csl = selected_;
|
||||
ObjectBaseList csl = selected_;
|
||||
QSet<Material*> sml;
|
||||
foreach (ObjectBase * o, csl)
|
||||
if (o->material())
|
||||
sml << o->material();
|
||||
QList<ObjectBase * > ol = root_->children(true);
|
||||
ObjectBaseList ol = root_->children(true);
|
||||
foreach (ObjectBase * o, ol) {
|
||||
if (sml.contains(o->material()))
|
||||
o->setSelected(true);
|
||||
@@ -234,7 +234,7 @@ void Scene::selectObjectsByMaterial() {
|
||||
void Scene::clearSelection() {
|
||||
selected_.clear();
|
||||
selected_top.clear();
|
||||
QList<ObjectBase * > ol = root_->children(true);
|
||||
ObjectBaseList ol = root_->children(true);
|
||||
foreach (ObjectBase * o, ol) {
|
||||
o->selected_ = o->selected_aim = false;
|
||||
}
|
||||
@@ -242,7 +242,7 @@ void Scene::clearSelection() {
|
||||
}
|
||||
|
||||
|
||||
QList<ObjectBase * > Scene::selectedObjects(bool top_only) const {
|
||||
ObjectBaseList Scene::selectedObjects(bool top_only) const {
|
||||
return top_only ? selected_top : selected_;
|
||||
}
|
||||
|
||||
@@ -269,7 +269,7 @@ Material * Scene::newMaterial() {
|
||||
|
||||
void Scene::removeMaterial(Material * m) {
|
||||
if (!m || !materials.contains(m)) return;
|
||||
QList<ObjectBase * > ol = root_->children(true);
|
||||
ObjectBaseList ol = root_->children(true);
|
||||
foreach (ObjectBase * o, ol)
|
||||
if (o->material_ == m)
|
||||
o->setMaterial(0);
|
||||
@@ -289,7 +289,7 @@ void Scene::makeMaterialsUniqueNames() {
|
||||
}
|
||||
|
||||
|
||||
QList<ObjectBase *> Scene::objects(bool all) {
|
||||
ObjectBaseList Scene::objects(bool all) {
|
||||
return root_->children(all);
|
||||
}
|
||||
|
||||
@@ -308,7 +308,7 @@ void Scene::dump() {
|
||||
|
||||
void Scene::gatherSelection() {
|
||||
selected_.clear();
|
||||
QList<ObjectBase * > ol = root_->children(true);
|
||||
ObjectBaseList ol = root_->children(true);
|
||||
foreach (ObjectBase * o, ol)
|
||||
if (o->selected_)
|
||||
selected_ << o;
|
||||
@@ -367,8 +367,10 @@ void Scene::attachObject(ObjectBase * o) {
|
||||
void Scene::setTreeChanged() {
|
||||
if (destroying) return;
|
||||
tree_changed = true;
|
||||
foreach (Mesh * m, geometries)
|
||||
m->selected_changed = true;
|
||||
foreach (Mesh * m, geometries) {
|
||||
m->setAllObjectsChanged(true);
|
||||
m->setAllSelectionChanged(true);
|
||||
}
|
||||
gatherSelection();
|
||||
}
|
||||
|
||||
@@ -379,7 +381,7 @@ void Scene::setTreeStructChanged() {
|
||||
|
||||
|
||||
void Scene::setObjectMeshChanged(ObjectBase * o) {
|
||||
if (o) o->setMeshChanged();
|
||||
if (o) o->setObjectsChanged();
|
||||
}
|
||||
|
||||
|
||||
@@ -393,8 +395,8 @@ void Scene::prepareTree(ObjectBase * o) {
|
||||
} break;
|
||||
case ObjectBase::glMesh:
|
||||
if (co->mesh()) {
|
||||
geometries_used[co->mesh()] << co;
|
||||
co->mesh()->objects_changed = co->mesh()->selected_changed = true;
|
||||
geometries_used[co->pass()][co->mesh()] << co;
|
||||
co->setObjectsChanged();
|
||||
}
|
||||
break;
|
||||
default: break;
|
||||
@@ -413,7 +415,7 @@ bool Scene::prepare() {
|
||||
}
|
||||
}
|
||||
|
||||
QList<ObjectBase*> aol;
|
||||
ObjectBaseList aol;
|
||||
if (!tree_changed && !mat_changed) return false;
|
||||
aol = root_->children(true);
|
||||
if (tree_changed) {
|
||||
@@ -423,7 +425,8 @@ bool Scene::prepare() {
|
||||
tree_struct_changed = false;
|
||||
QMetaObject::invokeMethod(this, "treeChanged", Qt::QueuedConnection);
|
||||
}
|
||||
geometries_used.clear();
|
||||
geometries_used[rpSolid ].clear();
|
||||
geometries_used[rpTransparent].clear();
|
||||
lights_used.clear();
|
||||
prepareTree(root_);
|
||||
}
|
||||
@@ -450,7 +453,7 @@ QDataStream & operator <<(QDataStream & s, const Scene * p) {
|
||||
ChunkStream cs;
|
||||
//qDebug() << "place" << p->name() << "...";
|
||||
QVector<short> geom_ind, mat_ind;
|
||||
QList<ObjectBase*> cl = p->root_->children(true);
|
||||
ObjectBaseList cl = p->root_->children(true);
|
||||
geom_ind.reserve(cl.size());
|
||||
mat_ind.reserve(cl.size());
|
||||
foreach (ObjectBase * c, cl) {
|
||||
@@ -484,7 +487,7 @@ QDataStream & operator >>(QDataStream & s, Scene *& p) {
|
||||
}
|
||||
}
|
||||
p->makeMaterialsUniqueNames();
|
||||
QList<ObjectBase*> cl = p->root_->children(true);
|
||||
ObjectBaseList cl = p->root_->children(true);
|
||||
int cnt = qMin(qMin(cl.size(), geom_ind.size()), mat_ind.size());
|
||||
for (int i = 0; i < cnt; ++i) {
|
||||
ObjectBase * c(cl[i]);
|
||||
|
||||
Reference in New Issue
Block a user