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

This commit is contained in:
2019-12-12 16:54:49 +00:00
parent bc33d99703
commit 52153469a9
12 changed files with 84 additions and 33 deletions

View File

@@ -273,6 +273,11 @@ void ObjectBase::calculateBoundingBox() {
}
void ObjectBase::updateTransform() {
buildTransform(true);
}
void ObjectBase::setProperty(const QString & pn, const QVariant & v) {
meta[pn] = v;
}
@@ -316,6 +321,28 @@ QVector3D ObjectBase::inParentSpace(const QVector3D & v) const {
}
void ObjectBase::transferTransformToChildren(bool only_scale) {
QMatrix4x4 m = trans.matrix();
if (only_scale) m = trans.matrixScale();
foreach (ObjectBase * i, children_)
i->trans.setMatrix(m * i->trans.matrix());
if (only_scale) resetScale();
else setMatrix(QMatrix4x4());
}
void ObjectBase::cleanTree() {
for (int i = 0; i < children_.size(); ++i) {
ObjectBase * o = children_[i];
if (!o->hasChildren() && !o->mesh() && (o->type() == glMesh)) {
delete o;
--i;
}
o->cleanTree();
}
}
bool ObjectBase::isSelected(bool check_parents) const {
if (!check_parents) return selected_;
if (selected_) return true;
@@ -373,7 +400,8 @@ void ObjectBase::setMesh(Mesh * v) {
}
void ObjectBase::buildTransform() {
void ObjectBase::buildTransform(bool force) {
if (force) trans.setDirty();
itransform_.setToIdentity();
ObjectBase * p = parent_;
if (p)
@@ -386,7 +414,7 @@ void ObjectBase::buildTransform() {
localTransform(itransform_);
//qDebug() << name_ << itransform_;
foreach (ObjectBase * i, children_)
i->buildTransform();
i->buildTransform(force);
setObjectsChanged();
}