void ColladaNode::handleSkew(domSkew *skew) { if(skew == NULL) return; domNodeRef node = getDOMElementAs<domNode>(); Vec3f rotationAxis(skew->getValue()[1],skew->getValue()[2],skew->getValue()[3]), translationAxis(skew->getValue()[4],skew->getValue()[5],skew->getValue()[6]); Real32 angle(skew->getValue()[0]); if(getGlobal()->getOptions()->getFlattenNodeXForms()) { SkewTransformationElementUnrecPtr SkewElement = SkewTransformationElement::create(); SkewElement->setRotationAxis(rotationAxis); SkewElement->setTranslationAxis(translationAxis); SkewElement->setAngle(angle); setName(SkewElement, skew->getSid()); appendStackedXForm(SkewElement, node); } else { TransformUnrecPtr xform = Transform::create(); NodeUnrecPtr xformN = makeNodeFor(xform); Matrix skewMatrix; MatrixSkew(skewMatrix,rotationAxis, translationAxis, angle); xform->setMatrix(skewMatrix); if(getGlobal()->getOptions()->getCreateNameAttachments() == true && node->getName() != NULL ) { std::string nodeName = node->getName(); if(skew->getSid() != NULL && getGlobal()->getOptions()->getFlattenNodeXForms() == false) { nodeName.append("." ); nodeName.append(skew->getSid()); } setName(xformN, nodeName); } appendXForm(xformN); } }
void SkewTransformationElement::calcMatrix(Matrix &result) const { MatrixSkew(result, getRotationAxis(), getTranslationAxis(), getAngle()); }