git-svn-id: svn://db.shs.com.ru/libs@665 a8b55f48-bf90-11e4-a774-851b48703e85
This commit is contained in:
@@ -26,10 +26,10 @@ static int _count = 0;
|
||||
ObjectBase::ObjectBase(Mesh * geom, Material * mat) {
|
||||
type_ = glMesh;
|
||||
render_mode = View;
|
||||
pass_ = Solid;
|
||||
prev_pass = rpSolid;
|
||||
parent_ = nullptr;
|
||||
color_ = Qt::white;
|
||||
is_root = is_init = is_tex_loaded = selected_ = false;
|
||||
is_root = is_init = selected_ = false;
|
||||
visible_ = accept_fog = accept_light = cast_shadow = rec_shadow = select_ = true;
|
||||
line_width = -1.;
|
||||
id_ = 0;
|
||||
@@ -61,7 +61,7 @@ ObjectBase::~ObjectBase() {
|
||||
|
||||
ObjectBase * ObjectBase::clone(bool withChildren) {
|
||||
ObjectBase * o = new ObjectBase();
|
||||
o->pass_ = pass_;
|
||||
o->prev_pass = prev_pass;
|
||||
o->is_init = false;
|
||||
o->accept_light = accept_light;
|
||||
o->accept_fog = accept_fog;
|
||||
@@ -102,6 +102,15 @@ void ObjectBase::init() {
|
||||
}
|
||||
|
||||
|
||||
RenderPass ObjectBase::pass() const {
|
||||
RenderPass ret = rpSolid;
|
||||
if (material_)
|
||||
if (material_->hasTransparency())
|
||||
ret = rpTransparent;
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
void ObjectBase::setScene(Scene * v) {
|
||||
scene_ = v;
|
||||
foreach (ObjectBase * c, children_)
|
||||
@@ -118,7 +127,7 @@ void ObjectBase::addChild(ObjectBase * o) {
|
||||
o->setScene(scene_);
|
||||
o->buildTransform();
|
||||
/*if (scene_) {
|
||||
QList<ObjectBase*> cl = o->children(true);
|
||||
ObjectBaseList cl = o->children(true);
|
||||
cl << o;
|
||||
//foreach (ObjectBase * i, cl) {
|
||||
// emit view_->objectAdded(i);
|
||||
@@ -187,9 +196,9 @@ const ObjectBase * ObjectBase::child(const QString & name) const {
|
||||
}
|
||||
|
||||
|
||||
QList<ObjectBase * > ObjectBase::children(bool all_) {
|
||||
ObjectBaseList ObjectBase::children(bool all_) {
|
||||
if (!all_) return children_;
|
||||
QList<ObjectBase * > cl;
|
||||
ObjectBaseList cl;
|
||||
addChildren(cl, this);
|
||||
return cl;
|
||||
}
|
||||
@@ -239,7 +248,7 @@ void ObjectBase::setTransform(const Transform & t) {
|
||||
}
|
||||
|
||||
|
||||
void ObjectBase::addChildren(QList<ObjectBase * > & list, ObjectBase * where) {
|
||||
void ObjectBase::addChildren(ObjectBaseList & list, ObjectBase * where) {
|
||||
foreach (ObjectBase * i, where->children_) {
|
||||
list << i;
|
||||
addChildren(list, i);
|
||||
@@ -247,14 +256,6 @@ void ObjectBase::addChildren(QList<ObjectBase * > & list, ObjectBase * where) {
|
||||
}
|
||||
|
||||
|
||||
void ObjectBase::loadTextures(bool with_children) {
|
||||
if (with_children)
|
||||
foreach (ObjectBase * i, children_) i->loadTextures();
|
||||
is_tex_loaded = true;
|
||||
checkPass();
|
||||
}
|
||||
|
||||
|
||||
void ObjectBase::calculateBoundingBox() {
|
||||
bound = Box3D();
|
||||
if (mesh_) {
|
||||
@@ -349,9 +350,7 @@ void ObjectBase::setMaterial(Material * m, bool with_children) {
|
||||
material_ = m;
|
||||
if (with_children)
|
||||
foreach (ObjectBase * i, children_) i->setMaterial(m, true);
|
||||
checkPass();
|
||||
is_tex_loaded = false;
|
||||
setMeshChanged();
|
||||
setObjectsChanged();
|
||||
if (scene_) scene_->mat_changed = true;
|
||||
}
|
||||
|
||||
@@ -360,14 +359,14 @@ void ObjectBase::setColor(QColor c, bool with_children) {
|
||||
color_ = c;
|
||||
if (with_children)
|
||||
foreach (ObjectBase * i, children_) i->setColor(c, true);
|
||||
setMeshChanged();
|
||||
setObjectsChanged();
|
||||
}
|
||||
|
||||
|
||||
void ObjectBase::setMesh(Mesh * v) {
|
||||
mesh_ = v;
|
||||
setSceneTreeChanged();
|
||||
setMeshChanged();
|
||||
setObjectsChanged();
|
||||
}
|
||||
|
||||
|
||||
@@ -385,7 +384,7 @@ void ObjectBase::buildTransform() {
|
||||
//qDebug() << name_ << itransform_;
|
||||
foreach (ObjectBase * i, children_)
|
||||
i->buildTransform();
|
||||
setMeshChanged();
|
||||
setObjectsChanged();
|
||||
}
|
||||
|
||||
|
||||
@@ -400,26 +399,26 @@ void ObjectBase::localTransform(QMatrix4x4 & m) {
|
||||
}
|
||||
|
||||
|
||||
void ObjectBase::checkPass() {
|
||||
pass_ = Solid;
|
||||
if (material_) {
|
||||
if (material_->hasTransparency())
|
||||
pass_ = Transparent;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void ObjectBase::setSceneTreeChanged() {
|
||||
if (scene_) {
|
||||
scene_->setTreeChanged();
|
||||
scene_->setTreeStructChanged();
|
||||
}
|
||||
setMeshChanged();
|
||||
setObjectsChanged();
|
||||
}
|
||||
|
||||
|
||||
void ObjectBase::setMeshChanged() {
|
||||
if (mesh_) mesh_->objects_changed = true;
|
||||
void ObjectBase::setObjectsChanged() {
|
||||
int p = pass();
|
||||
if (mesh_) {
|
||||
mesh_->setObjectsChanged (p, true);
|
||||
mesh_->setSelectionChanged(p, true);
|
||||
if (prev_pass != p) {
|
||||
mesh_->setObjectsChanged (prev_pass, true);
|
||||
mesh_->setSelectionChanged(prev_pass, true);
|
||||
}
|
||||
}
|
||||
prev_pass = p;
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user