TEST(Vector3, ConstructionAndEqualityCheck) { // Doubles: Vector3<double> vd1(0, 0, 0); Vector3<double> vd2; EXPECT_TRUE(vd1 == vd2); Vector3<double> vd3(3.1, 0, 0); Vector3<double> vd4(0, -2.5, 0); Vector3<double> vd5(0, 0, -0.1); EXPECT_TRUE(vd1 != vd3); EXPECT_TRUE(vd1 != vd4); EXPECT_TRUE(vd1 != vd5); // Integers: Vector3<int> vi1(0, 0, 0); Vector3<int> vi2; EXPECT_TRUE(vi1 == vi2); Vector3<int> vi3(3, 0, 0); Vector3<int> vi4(0, -2, 0); Vector3<int> vi5(0, 0, -1); EXPECT_TRUE(vi1 != vi3); EXPECT_TRUE(vi1 != vi4); EXPECT_TRUE(vi1 != vi5); }
TEST(SharedValueTest, value) { // bool Value vb = false; EXPECT_EQ(vb.as<bool>(), false); EXPECT_EQ(bool(vb), false); EXPECT_EQ(static_cast<bool>(vb), false); EXPECT_NO_THROW(bool b = vb); Value vb1(false); Value vb2(true); EXPECT_EQ(bool(vb1), false); EXPECT_EQ(bool(vb2), true); bool b = vb; EXPECT_EQ(b, false); EXPECT_NO_THROW(vb = true); EXPECT_EQ(vb.as<bool>(), true); EXPECT_EQ(bool(vb), true); EXPECT_EQ(static_cast<bool>(vb), true); b = vb; EXPECT_EQ(b, true); // float Value vf = 1 / 3.; EXPECT_EQ(vf.as<float>(), 1 / 3.f); EXPECT_EQ(float(vf), 1 / 3.f); EXPECT_EQ(static_cast<float>(vf), 1 / 3.f); EXPECT_EQ(vf.as<double>(), 1 / 3.f); EXPECT_EQ(double(vf), 1 / 3.f); EXPECT_EQ(static_cast<double>(vf), 1 / 3.f); Value vf2(1.0 / 7); Value vf3(1 / 8.f); Value vf4(vf3); EXPECT_EQ(float(vf2), 1.f / 7); EXPECT_EQ(float(vf3), 1.f / 8); EXPECT_EQ(float(vf4), 1.f / 8); EXPECT_NO_THROW(vf = 1 / 7.f); EXPECT_NO_THROW(float f = vf); EXPECT_NO_THROW(double d = vf); float f = vf; double d = vf; EXPECT_EQ(f, 1 / 7.f); EXPECT_EQ(d, 1 / 7.f); EXPECT_NO_THROW(vf = 14.245f); EXPECT_EQ(float(vf), 14.245f); EXPECT_EQ(double(vf), 14.245f); EXPECT_EQ(double(vf), double(14.245f)); EXPECT_NE(double(vf), double(14.245)); EXPECT_TRUE(float(vf) == float(14.245)); // int Value vi = -56; EXPECT_EQ(vi.as<int>(), -56); EXPECT_EQ(int(vi), -56); EXPECT_EQ(static_cast<int>(vi), -56); EXPECT_NO_THROW(int i = vi); Value vi2(32); Value vi3(3530454); Value vi4(0xFF1110u); EXPECT_EQ(int(vi2), 32); EXPECT_EQ(int(vi3), 3530454); EXPECT_EQ(unsigned(vi4), 0xFF1110u); int i = vi; EXPECT_EQ(i, -56); EXPECT_NO_THROW(vi = 17); EXPECT_EQ(int(vi), 17); EXPECT_EQ(char(vi), 17); EXPECT_EQ(short(vi), 17); EXPECT_EQ(unsigned(vi), 17u); // pointer int test = 1; int test2 = 2; EXPECT_NO_THROW(Value vp(&test)); Value vp(static_cast<void*>(&test)); EXPECT_NO_THROW(const void* p = vp); const void* p = vp; EXPECT_EQ(static_cast<const void*>(vp), &test); EXPECT_ANY_THROW(vp = &test2); EXPECT_NO_THROW(vp = static_cast<const void *>(&test2)); EXPECT_EQ(static_cast<const void*>(vp), &test2); }
void FixedPlaneMesh::TrianglatePolygon(const double3& normal, std::vector<Point3D>& pts, ListOfvertices& results) { if (pts.size() < 3) return ; if (pts.size() ==3) { VertexInfo vi1(pts[0], normal, mColor); VertexInfo vi2(pts[1], normal, mColor); VertexInfo vi3(pts[2], normal, mColor); results.push_back(vi1); results.push_back(vi2); results.push_back(vi3); return ; } typedef CGAL::Exact_predicates_inexact_constructions_kernel K; typedef CGAL::Triangulation_vertex_base_2<K> Vb; typedef CGAL::Constrained_triangulation_face_base_2<K> Fb; typedef CGAL::Triangulation_data_structure_2<Vb,Fb> TDS; //typedef CGAL::Exact_predicates_tag Itag; typedef CGAL::Constrained_Delaunay_triangulation_2<K, TDS, CGAL::No_intersection_tag> CDT; vec3<double> origin = pts[0]; vec3<double> N = normal; vec3<double> U = normalize(pts[1] - origin); vec3<double> V = cross(N, U); CDT cdt; CDT::Vertex_handle vh1, vh2, vh3; vec3<double> v0 = PosToLocal(U, V, N, origin, pts[0]); CDT::Point p0(v0.x, v0.y); vh1 = vh3 = cdt.insert(p0); for ( int i = 1; i< pts.size() ; i++) { vec3<double> v1 = PosToLocal(U, V, N, origin, pts[i]); CDT::Point p1(v1.x, v1.y); vh2 = cdt.insert(p1); cdt.insert_constraint(vh1, vh2); vh1 = vh2; } cdt.insert_constraint(vh2, vh3); int count = cdt.number_of_faces() ; results.reserve(count*3); for (CDT::Finite_faces_iterator fit = cdt.finite_faces_begin(); fit != cdt.finite_faces_end(); ++fit) { vec2<double> v0(fit->vertex(2)->point().x(),fit->vertex(2)->point().y() ); vec2<double> v1(fit->vertex(1)->point().x(),fit->vertex(1)->point().y() ); vec2<double> v2(fit->vertex(0)->point().x(),fit->vertex(0)->point().y() ); if (IsEqual(cross(v0- v2, v1-v2), (double)0., (double)EPSF )) continue; // vec3<double > p0(v0, 0.0); vec3<double > p1(v1, 0.0); vec3<double > p2(v2, 0.0); p0 = PosToGlobal(U, V, N, origin, p0); p1 = PosToGlobal(U, V, N, origin, p1); p2 = PosToGlobal(U, V, N, origin, p2); VertexInfo vi1(p0, N, mColor); VertexInfo vi2(p1, N, mColor); VertexInfo vi3(p2, N, mColor); results.push_back(vi1); results.push_back(vi2); results.push_back(vi3); } }