TYPED_TEST(Intesection_TEST, intersection_line_plane) { using Scalar = typename cgogn::geometry::vector_traits<TypeParam>::Scalar; TypeParam a(Scalar(-1), Scalar(-1), Scalar(-3)); TypeParam v(Scalar(3), Scalar(0), Scalar(0)); TypeParam p_p(Scalar(2), Scalar(2), Scalar(1)); TypeParam p_d(Scalar(5), Scalar(1), Scalar(3)); EXPECT_TRUE(cgogn::geometry::intersection_line_plane(a,v,p_p,p_d)); p_d = TypeParam(Scalar(0), Scalar(0), Scalar(2)); EXPECT_FALSE(cgogn::geometry::intersection_line_plane(a,v,p_p,p_d)); }
void CGView::loadModel(QString name) { std::ifstream file(name.toLatin1()); int vn,fn,en; Vector3d o_min=+std::numeric_limits<double>::max(); Vector3d o_max=-std::numeric_limits<double>::max(); std::string s; file >> s; file >> vn >> fn >> en; std::cout << "model loaded"<< std::endl; std::cout << "number of vertices : " << vn << std::endl; std::cout << "number of faces : " << fn << std::endl; std::cout << "number of edges : " << en << std::endl; std::cout << "This is a mod version." << std::endl; vec3dd p_p(vn); Vector3d t_center=0; for(int i=0;i<vn;i++) { file >> p_p[i][0] >> p_p[i][1] >> p_p[i][2]; t_center+=p_p[i]; o_min[0]=std::min(o_min[0],p_p[i][0]); o_min[1]=std::min(o_min[1],p_p[i][1]); o_min[2]=std::min(o_min[2],p_p[i][2]); o_max[0]=std::max(o_max[0],p_p[i][0]); o_max[1]=std::max(o_max[1],p_p[i][1]); o_max[2]=std::max(o_max[2],p_p[i][2]); } vecintd ind_p(fn*3); t_center=t_center/vn; for(int i=0;i<vn;i++) { p_p[i]-=t_center; } for(int i=0;i<fn;i++) { int k; file >> k; file >> ind_p[3*i]; file >> ind_p[3*i+1]; file >> ind_p[3*i+2]; } file.close(); uint p=this->objs.size(); this->objs.push_back(AABB(p_p,ind_p,Vector3d(0,0,1))); double maxd=0.0,v,k=0; for(int i=0;i<3;i++) { v=o_max[i]-o_min[i]; k+=v*v; maxd=std::max(v,maxd); } //Comment this line out to get the wrong version of the size as described in the sheet maxd=std::sqrt(k); this->objs[p].setZoom(2/maxd); this->objs[p].setCenter(t_center/vn/maxd*0+Vector3d(p*1.5,0,0)); if (p==0){ zoom=1.0; center=Vector3d(0,0,0); } this->updateGL(); this->inc_act(); }