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

This commit is contained in:
2019-12-10 10:22:09 +00:00
parent 86f4e0ad78
commit 9d05dbe6da
24 changed files with 186 additions and 137 deletions

View File

@@ -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;
}