本文整理汇总了C++中Affine3::isApprox方法的典型用法代码示例。如果您正苦于以下问题:C++ Affine3::isApprox方法的具体用法?C++ Affine3::isApprox怎么用?C++ Affine3::isApprox使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Affine3
的用法示例。
在下文中一共展示了Affine3::isApprox方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: readSurfaceNode
void VRMLBodyLoaderImpl::readSurfaceNode(LinkInfo& iLink, VRMLProtoInstance* segmentShapeNode, const Affine3& T)
{
const string& typeName = segmentShapeNode->proto->protoName;
if(isVerbose) putMessage(string("Surface node ") + segmentShapeNode->defName);
iLink.isSurfaceNodeUsed = true;
// check if another Surface node does not appear in the subtree
MFNode& visualNodes = get<MFNode>(segmentShapeNode->fields["visual"]);
ProtoIdSet acceptableProtoIds;
readJointSubNodes(iLink, visualNodes, acceptableProtoIds, T);
MFNode& collisionNodes = get<MFNode>(segmentShapeNode->fields["collision"]);
readJointSubNodes(iLink, collisionNodes, acceptableProtoIds, T);
SgGroup* group;
SgPosTransform* transform = 0;
if(T.isApprox(Affine3::Identity())){
group = iLink.collisionShape;
} else {
transform = new SgPosTransform(T);
group = transform;
}
for(size_t i=0; i < collisionNodes.size(); ++i){
SgNodePtr node = sgConverter.convert(collisionNodes[i]);
if(node){
group->addChild(node);
}
}
if(transform && !transform->empty()){
iLink.collisionShape->addChild(transform);
}
}
示例2: readSegmentNode
void VRMLBodyLoaderImpl::readSegmentNode(LinkInfo& iLink, VRMLProtoInstance* segmentNode, const Affine3& T)
{
if(isVerbose) putMessage(string("Segment node ") + segmentNode->defName);
/*
Mass = Sigma mass
C = (Sigma mass * T * c) / Mass
I = Sigma(R * I * Rt + G)
R = Rotation matrix part of T
G = y*y+z*z, -x*y, -x*z, -y*x, z*z+x*x, -y*z, -z*x, -z*y, x*x+y*y
(x, y, z ) = T * c - C
*/
VRMLProtoFieldMap& sf = segmentNode->fields;
SegmentInfo iSegment;
readVRMLfield(sf["mass"], iSegment.m);
Vector3 c;
readVRMLfield(sf["centerOfMass"], c);
iSegment.c = T.linear() * c + T.translation();
iLink.c = (iSegment.c * iSegment.m + iLink.c * iLink.m) / (iLink.m + iSegment.m);
iLink.m += iSegment.m;
Matrix3 I;
readVRMLfield(sf["momentsOfInertia"], I);
iLink.I.noalias() += T.linear() * I * T.linear().transpose();
MFNode& childNodes = get<MFNode>(segmentNode->fields["children"]);
ProtoIdSet acceptableProtoIds;
acceptableProtoIds.set(PROTO_SURFACE);
acceptableProtoIds.set(PROTO_DEVICE);
readJointSubNodes(iLink, childNodes, acceptableProtoIds, T);
SgNodePtr node = sgConverter.convert(segmentNode);
if(node){
if(T.isApprox(Affine3::Identity())){
iLink.visualShape->addChild(node);
} else {
SgPosTransform* transform = new SgPosTransform(T);
transform->addChild(node);
iLink.visualShape->addChild(transform);
}
}
}