示例#1
0
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));

}
示例#2
0
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();
}