//---------------------------------------- void ofNode::clearParent(bool bMaintainGlobalTransform) { if(bMaintainGlobalTransform) { ofMatrix4x4 globalTransform(getGlobalTransformMatrix()); this->parent = NULL; setTransformMatrix(globalTransform); } else { this->parent = NULL; } }
//---------------------------------------- void ofNode::setParent(ofNode& parent, bool bMaintainGlobalTransform) { if(bMaintainGlobalTransform) { ofMatrix4x4 globalTransform(getGlobalTransformMatrix()); this->parent = &parent; setTransformMatrix(globalTransform); } else { this->parent = &parent; } }
void Transformable::moveBy(const Vector3d& vector, bool global) { Vector3d offset; if (global) { offset = Matrix3d(globalTransform().inverted() * localTransform()) * vector; } else { offset = Matrix3d(localTransform()) * vector; } setPosition(position() + offset); }
//---------------------------------------- void ofNode::clearParent(bool bMaintainGlobalTransform) { if(parent){ parent->removeListener(*this); } if(bMaintainGlobalTransform) { ofMatrix4x4 globalTransform(getGlobalTransformMatrix()); this->parent = nullptr; setTransformMatrix(globalTransform); } else { this->parent = nullptr; } }
void Transformable::leaveParent() { if (isGenerated()) return; setMatrix(globalTransform()); }