void initComponentGeneral() { static bool first = true; if (first) { first = false; } initValidation(); initExporter(); initEngine(); initGraphComponent(); initTopologyMapping(); initBoundaryCondition(); initUserInteraction(); initConstraint(); initHaptics(); initDenseSolver(); #ifdef SOFA_HAVE_CSPARSE initSparseSolver(); #endif initPreconditioner(); initOpenGLVisual(); }
bool reroot_rootedtree(double& br,int r,int s10,int s20,Pr* pr,Node** nodes,Node** nodes_new){ cloneInternalNodes(pr,nodes,nodes_new,0); if (r==s10 || r==s20){ br = nodes[s10]->B+nodes[s20]->B; nodes_new[s10]->B=br; nodes_new[s20]->B=br; computeVarianceEstimateRoot(pr,nodes_new,br); return initConstraint(pr,nodes_new); } else { nodes_new[0]->L=""; nodes_new[0]->P=-1; nodes_new[r]->P=0; nodes_new[nodes[r]->P]->P=0; nodes_new[0]->suc.clear(); nodes_new[0]->suc.push_back(r); nodes_new[0]->suc.push_back(nodes[r]->P); int ii=r; int i=nodes[r]->P; int j=nodes[i]->P; while (j!=0){ nodes_new[i]->suc.clear(); nodes_new[i]->suc.push_back(j); for (vector<int>::iterator iter=nodes[i]->suc.begin(); iter!=nodes[i]->suc.end(); iter++) { if (*iter!=ii) { nodes_new[i]->suc.push_back(*iter); } } nodes_new[j]->P=i; nodes_new[j]->B=nodes[i]->B; ii=i; i=j; j=nodes[i]->P; } int k=s10; if (k==i) k=s20; nodes_new[k]->P=i; nodes_new[i]->suc.clear(); nodes_new[i]->suc.push_back(k); for (vector<int>::iterator iter=nodes[i]->suc.begin(); iter!=nodes[i]->suc.end(); iter++) { if (*iter!=ii) { nodes_new[i]->suc.push_back(*iter); } } br=nodes[r]->B; nodes_new[k]->B=nodes[i]->B+nodes[k]->B; nodes_new[r]->B=br; nodes_new[nodes[r]->P]->B=br; computeVarianceEstimateRoot(pr,nodes_new,br); return initConstraintReRooted(pr, nodes_new,k,i); } }