Tile* ViewPort::enclosingTile(const vector2& screen_pos) { const vector2& tsc = tm_.scale(); vector2 mspos(std::floor(screen_pos[0] / tsc[0]), std::floor(screen_pos[1] / tsc[1])); mspos += pos_in_tm_; return tm_.tile(mspos[0], mspos[1]); }
void test_mainAORTA(void) //AORTA { typedef CSimuThinshell T; CMeMaterialProperty mtl; mtl.setYoung(2.00e5); mtl.setDamping(0.250, 0.0); mtl.setMassDamping(5.00e-4); mtl.m_rigid = 1; T *pshell = T::genShellFromFile("aorta2.quad", mtl); assert(pshell!=NULL); T &s = *pshell; //======================================================== int fixednodes[]={309, 310, 311, 312, 313, 314, 315, 316, 305 //, 306, 307, 308 }; int rotnodes[]={184, 185,186,187,188,189,190,191}; const int len = sizeof(fixednodes)/sizeof(int); const int lenr = sizeof(rotnodes)/sizeof(int); CFixedPositionConstraint* fixpos = new CFixedPositionConstraint(10, 0, 1e10, len, fixednodes); s.addConstraint(fixpos); Vector3d rotcenter(0.00, 0.48, 0); Vector3d norm(0,-1,0); const double av = PI*2.0*1.0e-3; //angular velocity unit: degree/ms CPlanarRotationConstraint* rotpos = new CPlanarRotationConstraint(10, 0, 550, lenr, rotnodes, rotcenter, norm, av); s.addConstraint(rotpos); CFixedPositionConstraint* fixpos2 = new CFixedPositionConstraint(5, 551, 700, lenr, rotnodes); s.addConstraint(fixpos2); CMouseConstraint * mc = new CMouseConstraint(309, 33.3); s.addConstraint(mc); Vector3d mspos(0.05256967, -0.492972, -0.010032078); mc->updatePosition(mspos, 0); //===================================== s.setGravityAccelertion(Vector3d(0,0,0)); CSimuEngine e; e.addSimuObject(pshell); e.setTimestep(5.00e-4); const int timerid = 0; startFastTimer(timerid); e.startSimulationInMiliSeconds(2000, 5); stopFastTimer(timerid); reportTimeDifference(timerid, "AORTA simmu. run time:"); }