本文整理汇总了C++中TwoDScene::insertForce方法的典型用法代码示例。如果您正苦于以下问题:C++ TwoDScene::insertForce方法的具体用法?C++ TwoDScene::insertForce怎么用?C++ TwoDScene::insertForce使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类TwoDScene
的用法示例。
在下文中一共展示了TwoDScene::insertForce方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: loadDragDampingForces
void TwoDSceneXMLParser::loadDragDampingForces( rapidxml::xml_node<>* node, TwoDScene& twodscene )
{
assert( node != NULL );
int forcenum = 0;
for( rapidxml::xml_node<>* nd = node->first_node("dragdamping"); nd; nd = nd->next_sibling("dragdamping") )
{
Vector3s constforce;
constforce.setConstant(std::numeric_limits<scalar>::signaling_NaN());
// Extract the linear damping coefficient
scalar b = std::numeric_limits<scalar>::signaling_NaN();
if( nd->first_attribute("b") )
{
std::string attribute(nd->first_attribute("b")->value());
if( !stringutils::extractFromString(attribute,b) )
{
std::cerr << "\033[31;1mERROR IN XMLSCENEPARSER:\033[m Failed to parse value of b attribute for dragdamping " << forcenum << ". Value must be numeric. Exiting." << std::endl;
exit(1);
}
}
else
{
std::cerr << "\033[31;1mERROR IN XMLSCENEPARSER:\033[m Failed to parse b attribute for dragdamping " << forcenum << ". Exiting." << std::endl;
exit(1);
}
//std::cout << "x: " << constforce.transpose() << std::endl;
twodscene.insertForce(new DragDampingForce(b));
++forcenum;
}
}
示例2: loadSimpleGravityForces
void TwoDSceneXMLParser::loadSimpleGravityForces( rapidxml::xml_node<>* node, TwoDScene& twodscene )
{
assert( node != NULL );
// Load each constant force
int forcenum = 0;
for( rapidxml::xml_node<>* nd = node->first_node("simplegravity"); nd; nd = nd->next_sibling("simplegravity") )
{
Vector3s constforce;
constforce.setConstant(std::numeric_limits<scalar>::signaling_NaN());
// Extract the x component of the force
if( nd->first_attribute("fx") )
{
std::string attribute(nd->first_attribute("fx")->value());
if( !stringutils::extractFromString(attribute,constforce.x()) )
{
std::cerr << "\033[31;1mERROR IN XMLSCENEPARSER:\033[m Failed to parse value of fx attribute for constantforce " << forcenum << ". Value must be numeric. Exiting." << std::endl;
exit(1);
}
}
else
{
std::cerr << "\033[31;1mERROR IN XMLSCENEPARSER:\033[m Failed to parse fx attribute for constantforce " << forcenum << ". Exiting." << std::endl;
exit(1);
}
// Extract the y component of the force
if( nd->first_attribute("fy") )
{
std::string attribute(nd->first_attribute("fy")->value());
if( !stringutils::extractFromString(attribute,constforce.y()) )
{
std::cerr << "\033[31;1mERROR IN XMLSCENEPARSER:\033[m Failed to parse value of fy attribute for constantforce " << forcenum << ". Value must be numeric. Exiting." << std::endl;
exit(1);
}
}
else
{
std::cerr << "\033[31;1mERROR IN XMLSCENEPARSER:\033[m Failed to parse fy attribute for constantforce " << forcenum << ". Exiting." << std::endl;
exit(1);
}
// Extract the y component of the force
if( nd->first_attribute("fz") )
{
std::string attribute(nd->first_attribute("fz")->value());
if( !stringutils::extractFromString(attribute,constforce.z()) )
{
std::cerr << "\033[31;1mERROR IN XMLSCENEPARSER:\033[m Failed to parse value of fz attribute for constantforce " << forcenum << ". Value must be numeric. Exiting." << std::endl;
exit(1);
}
}
else
{
std::cerr << "\033[31;1mERROR IN XMLSCENEPARSER:\033[m Failed to parse fz attribute for constantforce " << forcenum << ". Exiting." << std::endl;
exit(1);
}
//std::cout << "x: " << constforce.transpose() << std::endl;
twodscene.insertForce(new SimpleGravityForce(constforce));
++forcenum;
}
}
示例3: loadVorexForces
void TwoDSceneXMLParser::loadVorexForces( rapidxml::xml_node<>* node, TwoDScene& twodscene )
{
assert( node != NULL );
// Extract the edge the force acts across
int forcenum = 0;
for( rapidxml::xml_node<>* nd = node->first_node("vortexforce"); nd; nd = nd->next_sibling("vortexforce") )
{
std::pair<int,int> newedge;
if( nd->first_attribute("i") )
{
std::string attribute(nd->first_attribute("i")->value());
if( !stringutils::extractFromString(attribute,newedge.first) )
{
std::cerr << "\033[31;1mERROR IN XMLSCENEPARSER:\033[m Failed to parse value of i attribute for vortexforce " << forcenum << ". Value must be integer. Exiting." << std::endl;
exit(1);
}
}
else
{
std::cerr << "\033[31;1mERROR IN XMLSCENEPARSER:\033[m Failed to parse value of i attribute for vortexforce " << forcenum << ". Exiting." << std::endl;
exit(1);
}
if( nd->first_attribute("j") )
{
std::string attribute(nd->first_attribute("j")->value());
if( !stringutils::extractFromString(attribute,newedge.second) )
{
std::cerr << "\033[31;1mERROR IN XMLSCENEPARSER:\033[m Failed to parse value of j attribute for vortexforce " << forcenum << ". Value must be integer. Exiting." << std::endl;
exit(1);
}
}
else
{
std::cerr << "\033[31;1mERROR IN XMLSCENEPARSER:\033[m Failed to parse value of j attribute for vortexforce " << forcenum << ". Exiting." << std::endl;
exit(1);
}
// Extract the 'Biot-Savart' constant
scalar kbs = std::numeric_limits<scalar>::signaling_NaN();
if( nd->first_attribute("kbs") )
{
std::string attribute(nd->first_attribute("kbs")->value());
if( !stringutils::extractFromString(attribute,kbs) )
{
std::cerr << "\033[31;1mERROR IN XMLSCENEPARSER:\033[m Failed to parse value of kbs attribute for vortexforce " << forcenum << ". Value must be numeric. Exiting." << std::endl;
exit(1);
}
}
else
{
std::cerr << "\033[31;1mERROR IN XMLSCENEPARSER:\033[m Failed to parse kbs attribute for vortexforce " << forcenum << ". Exiting." << std::endl;
exit(1);
}
// Extract the viscosity constant
scalar kvc = std::numeric_limits<scalar>::signaling_NaN();
if( nd->first_attribute("kvc") )
{
std::string attribute(nd->first_attribute("kvc")->value());
if( !stringutils::extractFromString(attribute,kvc) )
{
std::cerr << "\033[31;1mERROR IN XMLSCENEPARSER:\033[m Failed to parse value of kvc attribute for vortexforce " << forcenum << ". Value must be numeric. Exiting." << std::endl;
exit(1);
}
}
else
{
std::cerr << "\033[31;1mERROR IN XMLSCENEPARSER:\033[m Failed to parse kvc attribute for vortexforce " << forcenum << ". Exiting." << std::endl;
exit(1);
}
//std::cout << "VortexForce: " << forcenum << " i: " << newedge.first << " j: " << newedge.second << " kbs: " << kbs << " kvc: " << kvc << std::endl;
twodscene.insertForce(new VortexForce(newedge,kbs,kvc));
++forcenum;
}
}
示例4: loadGravitationalForces
void TwoDSceneXMLParser::loadGravitationalForces( rapidxml::xml_node<>* node, TwoDScene& twodscene )
{
assert( node != NULL );
// Extract the edge the force acts across
int forcenum = 0;
for( rapidxml::xml_node<>* nd = node->first_node("gravitationalforce"); nd; nd = nd->next_sibling("gravitationalforce") )
{
std::pair<int,int> newedge;
if( nd->first_attribute("i") )
{
std::string attribute(nd->first_attribute("i")->value());
if( !stringutils::extractFromString(attribute,newedge.first) )
{
std::cerr << "\033[31;1mERROR IN XMLSCENEPARSER:\033[m Failed to parse value of i attribute for gravitationalforce " << forcenum << ". Value must be integer. Exiting." << std::endl;
exit(1);
}
}
else
{
std::cerr << "\033[31;1mERROR IN XMLSCENEPARSER:\033[m Failed to parse value of i attribute for gravitationalforce " << forcenum << ". Exiting." << std::endl;
exit(1);
}
if( nd->first_attribute("j") )
{
std::string attribute(nd->first_attribute("j")->value());
if( !stringutils::extractFromString(attribute,newedge.second) )
{
std::cerr << "\033[31;1mERROR IN XMLSCENEPARSER:\033[m Failed to parse value of j attribute for gravitationalforce " << forcenum << ". Value must be integer. Exiting." << std::endl;
exit(1);
}
}
else
{
std::cerr << "\033[31;1mERROR IN XMLSCENEPARSER:\033[m Failed to parse value of j attribute for gravitationalforce " << forcenum << ". Exiting." << std::endl;
exit(1);
}
// Extract the gravitational constant
scalar G = std::numeric_limits<scalar>::signaling_NaN();
if( nd->first_attribute("G") )
{
std::string attribute(nd->first_attribute("G")->value());
if( !stringutils::extractFromString(attribute,G) )
{
std::cerr << "\033[31;1mERROR IN XMLSCENEPARSER:\033[m Failed to parse value of G attribute for gravitationalforce " << forcenum << ". Value must be numeric. Exiting." << std::endl;
exit(1);
}
}
else
{
std::cerr << "\033[31;1mERROR IN XMLSCENEPARSER:\033[m Failed to parse G attribute for gravitationalforce " << forcenum << ". Exiting." << std::endl;
exit(1);
}
//std::cout << "GravitationalForce: " << forcenum << " i: " << newedge.first << " j: " << newedge.second << " G: " << G << std::endl;
twodscene.insertForce(new GravitationalForce(newedge,G));
++forcenum;
}
//SpringForce( const std::pair<int,int>& endpoints, const scalar& k, const scalar& l0 )
}
示例5: loadSpringForces
void TwoDSceneXMLParser::loadSpringForces( rapidxml::xml_node<>* node, TwoDScene& twodscene )
{
assert( node != NULL );
// Extract the edge the force acts across
int forcenum = 0;
for( rapidxml::xml_node<>* nd = node->first_node("springforce"); nd; nd = nd->next_sibling("springforce") )
{
int edge = -1;
if( nd->first_attribute("edge") )
{
std::string attribute(nd->first_attribute("edge")->value());
if( !stringutils::extractFromString(attribute,edge) )
{
std::cerr << "\033[31;1mERROR IN XMLSCENEPARSER:\033[m Failed to parse value of edge attribute for springforce " << forcenum << ". Value must be integer. Exiting." << std::endl;
exit(1);
}
}
else
{
std::cerr << "\033[31;1mERROR IN XMLSCENEPARSER:\033[m Failed to parse value of edge attribute for springforce " << forcenum << ". Exiting." << std::endl;
exit(1);
}
std::pair<int,int> newedge(twodscene.getEdge(edge));
// Extract the spring stiffness
scalar k = std::numeric_limits<scalar>::signaling_NaN();
if( nd->first_attribute("k") )
{
std::string attribute(nd->first_attribute("k")->value());
if( !stringutils::extractFromString(attribute,k) )
{
std::cerr << "\033[31;1mERROR IN XMLSCENEPARSER:\033[m Failed to parse value of k attribute for springforce " << forcenum << ". Value must be numeric. Exiting." << std::endl;
exit(1);
}
}
else
{
std::cerr << "\033[31;1mERROR IN XMLSCENEPARSER:\033[m Failed to parse k attribute for springforce " << forcenum << ". Exiting." << std::endl;
exit(1);
}
// Extract the spring rest length
scalar l0 = std::numeric_limits<scalar>::signaling_NaN();
if( nd->first_attribute("l0") )
{
std::string attribute(nd->first_attribute("l0")->value());
if( !stringutils::extractFromString(attribute,l0) )
{
std::cerr << "\033[31;1mERROR IN XMLSCENEPARSER:\033[m Failed to parse value of l0 attribute for springforce " << forcenum << ". Value must be numeric. Exiting." << std::endl;
exit(1);
}
}
else
{
std::cerr << "\033[31;1mERROR IN XMLSCENEPARSER:\033[m Failed to parse l0 attribute for springforce " << forcenum << ". Exiting." << std::endl;
exit(1);
}
// Extract the optional damping coefficient
scalar b = 0.0;
if( nd->first_attribute("b") )
{
std::string attribute(nd->first_attribute("b")->value());
if( !stringutils::extractFromString(attribute,b) )
{
std::cerr << "\033[31;1mERROR IN XMLSCENEPARSER:\033[m Failed to parse value of b attribute for springforce " << forcenum << ". Value must be numeric. Exiting." << std::endl;
exit(1);
}
}
//std::cout << "Springforce: " << forcenum << " i: " << newedge.first << " j: " << newedge.second << " k: " << k << " l0: " << l0 << std::endl;
twodscene.insertForce(new SpringForce(newedge,k,l0,b));
++forcenum;
}
//SpringForce( const std::pair<int,int>& endpoints, const scalar& k, const scalar& l0 )
}