test/test_tri_mesh.rb in gmath3D-0.2.5 vs test/test_tri_mesh.rb in gmath3D-1.0.0
- old
+ new
@@ -1,186 +1,186 @@
-$LOAD_PATH.unshift(File.dirname(__FILE__))
-require 'helper'
-
-include GMath3D
-
-MiniTest::Unit.autorun
-
-class TriMeshTestCase < MiniTest::Unit::TestCase
- def get_box_mesh
- box = Box.new(Vector3.new(-1,-1,-1), Vector3.new(2,3,4))
- return TriMesh.from_box(box)
- end
-
- def get_plane_mesh
- rect = Rectangle.new(Vector3.new(-1,-1,-1), Vector3.new(2,0,0), Vector3.new(0,4,0) )
- return TriMesh.from_rectangle(rect)
- end
-
- def test_initalize
- plane_mesh = get_plane_mesh()
- assert_equal( 2, plane_mesh.tri_indices.size)
- assert_equal( 4, plane_mesh.vertices.size)
-
- box_mesh = get_box_mesh()
- assert_equal( 12, box_mesh.tri_indices.size)
- assert_equal( 8, box_mesh.vertices.size)
-
- assert_raises ArgumentError do
- invalidResult = TriMesh.new(nil)
- end
- assert_raises ArgumentError do
- invalidResult = TriMesh.new(Vector3.new(), 4.0)
- end
- end
-
- def test_equal
- plane_mesh = get_plane_mesh()
- assert( plane_mesh != nil )
- assert( plane_mesh != "String" )
-
- shallow = plane_mesh
- assert( shallow == plane_mesh )
- assert( shallow.equal?(plane_mesh) )
-
- new_mesh = get_plane_mesh()
- assert( shallow == new_mesh )
- assert( !shallow.equal?(new_mesh) )
- end
-
- def test_clone
- plane_mesh = get_plane_mesh()
- shallow = plane_mesh
-
- shallow.vertices[0].x = 12
- shallow.vertices[2] = Vector3.new(-3,2,5)
- shallow.tri_indices[0] = [3,2,1]
- shallow.tri_indices[1][2] = 2
-
- assert_equal( 12, shallow.vertices[0].x )
- assert_equal( 12, plane_mesh.vertices[0].x )
- assert_equal( Vector3.new(-3,2,5), shallow.vertices[2] )
- assert_equal( Vector3.new(-3,2,5), plane_mesh.vertices[2] )
- assert_equal( [3,2,1], shallow.tri_indices[0] )
- assert_equal( [3,2,1], plane_mesh.tri_indices[0] )
- assert_equal( 2, shallow.tri_indices[1][2] )
- assert_equal( 2, plane_mesh.tri_indices[1][2] )
-
- deep = plane_mesh.clone
- assert( deep == plane_mesh )
- assert( !deep.equal?(plane_mesh) )
-
- deep.vertices[0].x = -1
- deep.vertices[2] = Vector3.new(4,2,1)
- deep.tri_indices[0] = [4,2,2]
- deep.tri_indices[1][2] = 5
-
- assert_equal( -1, deep.vertices[0].x )
- assert_equal( 12, plane_mesh.vertices[0].x )
- assert_equal( Vector3.new(4,2,1), deep.vertices[2] )
- assert_equal( Vector3.new(-3,2,5), plane_mesh.vertices[2] )
- assert_equal( [4,2,2], deep.tri_indices[0] )
- assert_equal( [3,2,1], plane_mesh.tri_indices[0] )
- assert_equal( 5, deep.tri_indices[1][2] )
- assert_equal( 2, plane_mesh.tri_indices[1][2] )
- end
-
- def test_to_s
- assert_equal( "TriMesh[triangle_count:12, vertex_count:8]", get_box_mesh().to_s)
- end
-
- def test_box
- box_mesh = get_box_mesh
- plane_mesh = get_plane_mesh
- assert_equal( Vector3.new(-1,-1,-1), box_mesh.box.min_point )
- assert_equal( Vector3.new( 2, 3, 4), box_mesh.box.max_point )
- assert_equal( Vector3.new(-1,-1,-1), plane_mesh.box.min_point )
- assert_equal( Vector3.new( 1, 3,-1), plane_mesh.box.max_point )
- end
-
- def test_triangles
- vertices = [Vector3.new(0,0,0),Vector3.new(2,0,0),Vector3.new(2,2,0),Vector3.new(0,2,0)]
- tri_indices = [[0,1,3],[1,2,3]]
- tri_mesh = TriMesh.new(vertices, tri_indices)
- triangles = tri_mesh.triangles
- assert_equal(2, triangles.size)
- assert_equal(Vector3.new(0,0,0), triangles[0].vertices[0])
- assert_equal(Vector3.new(2,0,0), triangles[0].vertices[1])
- assert_equal(Vector3.new(0,2,0), triangles[0].vertices[2])
- assert_equal(Vector3.new(2,0,0), triangles[1].vertices[0])
- assert_equal(Vector3.new(2,2,0), triangles[1].vertices[1])
- assert_equal(Vector3.new(0,2,0), triangles[1].vertices[2])
-
- triangle = tri_mesh.triangle(1)
- assert_equal(Vector3.new(2,0,0), triangle.vertices[0])
- assert_equal(Vector3.new(2,2,0), triangle.vertices[1])
- assert_equal(Vector3.new(0,2,0), triangle.vertices[2])
-
- triangle = tri_mesh.triangle(3)
- assert_equal(nil, triangle)
- end
-
- def test_from_triangles
- tris = Array.new(8)
- tris[0] = Triangle.new( Vector3.new(0,0,0), Vector3.new(1,0,0), Vector3.new(0,1,1) )
- tris[1] = Triangle.new( Vector3.new(1,0,0), Vector3.new(1,1,1), Vector3.new(0,1,1) )
- tris[2] = Triangle.new( Vector3.new(1,0,0), Vector3.new(2,0,0), Vector3.new(1,1,1) )
- tris[3] = Triangle.new( Vector3.new(2,0,0), Vector3.new(2,1,1), Vector3.new(1,1,1) )
- tris[4] = Triangle.new( Vector3.new(0,1,1), Vector3.new(1,1,1), Vector3.new(0,2,2) )
- tris[5] = Triangle.new( Vector3.new(1,1,1), Vector3.new(1,2,2), Vector3.new(0,2,2) )
- tris[6] = Triangle.new( Vector3.new(1,1,1), Vector3.new(2,1,1), Vector3.new(1,2,2) )
- tris[7] = Triangle.new( Vector3.new(2,1,1), Vector3.new(2,2,2), Vector3.new(1,2,2) )
- trimesh_from_tris = TriMesh::from_triangles(tris)
- assert_equal( 9, trimesh_from_tris.vertices.size)
- assert_equal( 8, trimesh_from_tris.tri_indices.size)
- end
-
- def test_from_convex_polyline
- vertices = Array.new(6)
- vertices[0] = Vector3.new(1,0,0)
- vertices[1] = Vector3.new(2,0,0)
- vertices[2] = Vector3.new(3,1,0)
- vertices[3] = Vector3.new(2,2,0)
- vertices[4] = Vector3.new(1,2,0)
- vertices[5] = Vector3.new(0,1,0)
- polyline_closed = Polyline.new( vertices, false ) # closed Polyline
- polyline_open = Polyline.new( vertices, true ) # open Polyline
- trimesh_from_convex_polyline1 = TriMesh.from_convex_polyline( polyline_closed )
- trimesh_from_convex_polyline2 = TriMesh.from_convex_polyline( polyline_open )
-
- assert_equal(4, trimesh_from_convex_polyline1.area)
- assert_equal(4, trimesh_from_convex_polyline2.area)
- end
-
- def test_from_extruded_polyline
- vertices = Array.new(6)
- vertices[0] = Vector3.new(1,0,0)
- vertices[1] = Vector3.new(2,0,0)
- vertices[2] = Vector3.new(3,1,0)
- vertices[3] = Vector3.new(2,2,0)
- vertices[4] = Vector3.new(1,2,0)
- vertices[5] = Vector3.new(0,1,0)
- polyline_closed = Polyline.new( vertices, false ) # closed Polyline
- polyline_open = Polyline.new( vertices, true ) # open Polyline
- extrude_direction = Vector3.new(0,0,2)
- trimesh_from_extruded_polyline1 = TriMesh.from_extrude_polyline( polyline_closed , extrude_direction )
- trimesh_from_extruded_polyline2 = TriMesh.from_extrude_polyline( polyline_open , extrude_direction )
-
- assert_in_delta(4+8*(Math.sqrt(2)), trimesh_from_extruded_polyline1.area, 1e-10)
- assert_in_delta(4+6*(Math.sqrt(2)), trimesh_from_extruded_polyline2.area, 1e-10)
- end
-
- def test_area
- box_mesh = get_box_mesh()
- assert_equal(94, box_mesh.area)
- end
-
- def test_normals_for_each_vertices
- box = Box.new(Vector3.new(-1,-1,-1), Vector3.new(1,1,1))
- box_mesh = TriMesh.from_box(box)
- result = box_mesh.normals_for_each_vertices
- assert_equal( box_mesh.vertices.size, result.size )
- box_mesh.vertices.each do |vertex|
- assert_equal(vertex.normalize, result[vertex])
- end
- end
-end
+$LOAD_PATH.unshift(File.dirname(__FILE__))
+require 'helper'
+
+include GMath3D
+
+MiniTest::Unit.autorun
+
+class TriMeshTestCase < MiniTest::Unit::TestCase
+ def get_box_mesh
+ box = Box.new(Vector3.new(-1,-1,-1), Vector3.new(2,3,4))
+ return TriMesh.from_box(box)
+ end
+
+ def get_plane_mesh
+ rect = Rectangle.new(Vector3.new(-1,-1,-1), Vector3.new(2,0,0), Vector3.new(0,4,0) )
+ return TriMesh.from_rectangle(rect)
+ end
+
+ def test_initalize
+ plane_mesh = get_plane_mesh()
+ assert_equal( 2, plane_mesh.tri_indices.size)
+ assert_equal( 4, plane_mesh.vertices.size)
+
+ box_mesh = get_box_mesh()
+ assert_equal( 12, box_mesh.tri_indices.size)
+ assert_equal( 8, box_mesh.vertices.size)
+
+ assert_raises ArgumentError do
+ invalidResult = TriMesh.new(nil)
+ end
+ assert_raises ArgumentError do
+ invalidResult = TriMesh.new(Vector3.new(), 4.0)
+ end
+ end
+
+ def test_equal
+ plane_mesh = get_plane_mesh()
+ assert( plane_mesh != nil )
+ assert( plane_mesh != "String" )
+
+ shallow = plane_mesh
+ assert( shallow == plane_mesh )
+ assert( shallow.equal?(plane_mesh) )
+
+ new_mesh = get_plane_mesh()
+ assert( shallow == new_mesh )
+ assert( !shallow.equal?(new_mesh) )
+ end
+
+ def test_clone
+ plane_mesh = get_plane_mesh()
+ shallow = plane_mesh
+
+ shallow.vertices[0].x = 12
+ shallow.vertices[2] = Vector3.new(-3,2,5)
+ shallow.tri_indices[0] = [3,2,1]
+ shallow.tri_indices[1][2] = 2
+
+ assert_equal( 12, shallow.vertices[0].x )
+ assert_equal( 12, plane_mesh.vertices[0].x )
+ assert_equal( Vector3.new(-3,2,5), shallow.vertices[2] )
+ assert_equal( Vector3.new(-3,2,5), plane_mesh.vertices[2] )
+ assert_equal( [3,2,1], shallow.tri_indices[0] )
+ assert_equal( [3,2,1], plane_mesh.tri_indices[0] )
+ assert_equal( 2, shallow.tri_indices[1][2] )
+ assert_equal( 2, plane_mesh.tri_indices[1][2] )
+
+ deep = plane_mesh.clone
+ assert( deep == plane_mesh )
+ assert( !deep.equal?(plane_mesh) )
+
+ deep.vertices[0].x = -1
+ deep.vertices[2] = Vector3.new(4,2,1)
+ deep.tri_indices[0] = [4,2,2]
+ deep.tri_indices[1][2] = 5
+
+ assert_equal( -1, deep.vertices[0].x )
+ assert_equal( 12, plane_mesh.vertices[0].x )
+ assert_equal( Vector3.new(4,2,1), deep.vertices[2] )
+ assert_equal( Vector3.new(-3,2,5), plane_mesh.vertices[2] )
+ assert_equal( [4,2,2], deep.tri_indices[0] )
+ assert_equal( [3,2,1], plane_mesh.tri_indices[0] )
+ assert_equal( 5, deep.tri_indices[1][2] )
+ assert_equal( 2, plane_mesh.tri_indices[1][2] )
+ end
+
+ def test_to_s
+ assert_equal( "TriMesh[triangle_count:12, vertex_count:8]", get_box_mesh().to_s)
+ end
+
+ def test_box
+ box_mesh = get_box_mesh
+ plane_mesh = get_plane_mesh
+ assert_equal( Vector3.new(-1,-1,-1), box_mesh.box.min_point )
+ assert_equal( Vector3.new( 2, 3, 4), box_mesh.box.max_point )
+ assert_equal( Vector3.new(-1,-1,-1), plane_mesh.box.min_point )
+ assert_equal( Vector3.new( 1, 3,-1), plane_mesh.box.max_point )
+ end
+
+ def test_triangles
+ vertices = [Vector3.new(0,0,0),Vector3.new(2,0,0),Vector3.new(2,2,0),Vector3.new(0,2,0)]
+ tri_indices = [[0,1,3],[1,2,3]]
+ tri_mesh = TriMesh.new(vertices, tri_indices)
+ triangles = tri_mesh.triangles
+ assert_equal(2, triangles.size)
+ assert_equal(Vector3.new(0,0,0), triangles[0].vertices[0])
+ assert_equal(Vector3.new(2,0,0), triangles[0].vertices[1])
+ assert_equal(Vector3.new(0,2,0), triangles[0].vertices[2])
+ assert_equal(Vector3.new(2,0,0), triangles[1].vertices[0])
+ assert_equal(Vector3.new(2,2,0), triangles[1].vertices[1])
+ assert_equal(Vector3.new(0,2,0), triangles[1].vertices[2])
+
+ triangle = tri_mesh.triangle(1)
+ assert_equal(Vector3.new(2,0,0), triangle.vertices[0])
+ assert_equal(Vector3.new(2,2,0), triangle.vertices[1])
+ assert_equal(Vector3.new(0,2,0), triangle.vertices[2])
+
+ triangle = tri_mesh.triangle(3)
+ assert_equal(nil, triangle)
+ end
+
+ def test_from_triangles
+ tris = Array.new(8)
+ tris[0] = Triangle.new( Vector3.new(0,0,0), Vector3.new(1,0,0), Vector3.new(0,1,1) )
+ tris[1] = Triangle.new( Vector3.new(1,0,0), Vector3.new(1,1,1), Vector3.new(0,1,1) )
+ tris[2] = Triangle.new( Vector3.new(1,0,0), Vector3.new(2,0,0), Vector3.new(1,1,1) )
+ tris[3] = Triangle.new( Vector3.new(2,0,0), Vector3.new(2,1,1), Vector3.new(1,1,1) )
+ tris[4] = Triangle.new( Vector3.new(0,1,1), Vector3.new(1,1,1), Vector3.new(0,2,2) )
+ tris[5] = Triangle.new( Vector3.new(1,1,1), Vector3.new(1,2,2), Vector3.new(0,2,2) )
+ tris[6] = Triangle.new( Vector3.new(1,1,1), Vector3.new(2,1,1), Vector3.new(1,2,2) )
+ tris[7] = Triangle.new( Vector3.new(2,1,1), Vector3.new(2,2,2), Vector3.new(1,2,2) )
+ trimesh_from_tris = TriMesh::from_triangles(tris)
+ assert_equal( 9, trimesh_from_tris.vertices.size)
+ assert_equal( 8, trimesh_from_tris.tri_indices.size)
+ end
+
+ def test_from_convex_polyline
+ vertices = Array.new(6)
+ vertices[0] = Vector3.new(1,0,0)
+ vertices[1] = Vector3.new(2,0,0)
+ vertices[2] = Vector3.new(3,1,0)
+ vertices[3] = Vector3.new(2,2,0)
+ vertices[4] = Vector3.new(1,2,0)
+ vertices[5] = Vector3.new(0,1,0)
+ polyline_closed = Polyline.new( vertices, false ) # closed Polyline
+ polyline_open = Polyline.new( vertices, true ) # open Polyline
+ trimesh_from_convex_polyline1 = TriMesh.from_convex_polyline( polyline_closed )
+ trimesh_from_convex_polyline2 = TriMesh.from_convex_polyline( polyline_open )
+
+ assert_equal(4, trimesh_from_convex_polyline1.area)
+ assert_equal(4, trimesh_from_convex_polyline2.area)
+ end
+
+ def test_from_extruded_polyline
+ vertices = Array.new(6)
+ vertices[0] = Vector3.new(1,0,0)
+ vertices[1] = Vector3.new(2,0,0)
+ vertices[2] = Vector3.new(3,1,0)
+ vertices[3] = Vector3.new(2,2,0)
+ vertices[4] = Vector3.new(1,2,0)
+ vertices[5] = Vector3.new(0,1,0)
+ polyline_closed = Polyline.new( vertices, false ) # closed Polyline
+ polyline_open = Polyline.new( vertices, true ) # open Polyline
+ extrude_direction = Vector3.new(0,0,2)
+ trimesh_from_extruded_polyline1 = TriMesh.from_extrude_polyline( polyline_closed , extrude_direction )
+ trimesh_from_extruded_polyline2 = TriMesh.from_extrude_polyline( polyline_open , extrude_direction )
+
+ assert_in_delta(4+8*(Math.sqrt(2)), trimesh_from_extruded_polyline1.area, 1e-10)
+ assert_in_delta(4+6*(Math.sqrt(2)), trimesh_from_extruded_polyline2.area, 1e-10)
+ end
+
+ def test_area
+ box_mesh = get_box_mesh()
+ assert_equal(94, box_mesh.area)
+ end
+
+ def test_normals_for_each_vertices
+ box = Box.new(Vector3.new(-1,-1,-1), Vector3.new(1,1,1))
+ box_mesh = TriMesh.from_box(box)
+ result = box_mesh.normals_for_each_vertices
+ assert_equal( box_mesh.vertices.size, result.size )
+ box_mesh.vertices.each do |vertex|
+ assert_equal(vertex.normalize, result[vertex])
+ end
+ end
+end