diff --git a/lib/linguist/blob_helper.rb b/lib/linguist/blob_helper.rb index d7f56de5..8c91dd94 100644 --- a/lib/linguist/blob_helper.rb +++ b/lib/linguist/blob_helper.rb @@ -142,6 +142,13 @@ module Linguist ['.png', '.jpg', '.jpeg', '.gif'].include?(extname) end + # Public: Is the blob a support 3D model format? + # + # Return true or false + def solid? + ['.stl', '.obj'].include?(extname) + end + MEGABYTE = 1024 * 1024 # Public: Is the blob too big to load? diff --git a/samples/Binary/cube.stl b/samples/Binary/cube.stl new file mode 100644 index 00000000..f4d2a267 Binary files /dev/null and b/samples/Binary/cube.stl differ diff --git a/samples/Text/cube.obj b/samples/Text/cube.obj new file mode 100644 index 00000000..5da92710 --- /dev/null +++ b/samples/Text/cube.obj @@ -0,0 +1,33 @@ +# test_file +v -18.500000 -24.500000 31.000000 +v -18.500000 -24.500000 -0.001000 +v 12.500000 -24.500000 -0.001000 +v 12.500000 -24.500000 31.000000 +v -18.500000 6.500000 31.000000 +v -18.500000 6.500000 -0.001000 +v 12.500000 6.500000 31.000000 +v 12.500000 6.500000 -0.001000 +vn 0.000000 -1.000000 0.000000, +vn 0.000000 -1.000000 0.000000, +vn -1.000000 0.000000 0.000000, +vn -1.000000 0.000000 0.000000, +vn 0.000000 1.000000 0.000000, +vn 0.000000 1.000000 0.000000, +vn 1.000000 0.000000 0.000000, +vn 1.000000 0.000000 0.000000, +vn 0.000000 0.000000 -1.000000, +vn 0.000000 0.000000 -1.000000, +vn 0.000000 0.000000 1.000000, +vn 0.000000 0.000000 1.000000, +f 1//1 2//1 3//1 +f 1//4 3//4 4//4 +f 5//7 6//7 2//7 +f 5//10 2//10 1//10 +f 6//13 5//13 7//13 +f 6//16 7//16 8//16 +f 7//19 4//19 3//19 +f 7//22 3//22 8//22 +f 8//25 3//25 2//25 +f 8//28 2//28 6//28 +f 5//31 1//31 4//31 +f 5//34 4//34 7//34 diff --git a/samples/Text/cube.stl b/samples/Text/cube.stl new file mode 100644 index 00000000..cd20b5c5 --- /dev/null +++ b/samples/Text/cube.stl @@ -0,0 +1,86 @@ +solid + facet normal 0.000000E+00 -1.000000E+00 0.000000E+00 + outer loop + vertex -1.850000E+01 -2.450000E+01 3.100000E+01 + vertex -1.850000E+01 -2.450000E+01 -1.000000E-03 + vertex 1.250000E+01 -2.450000E+01 -1.000000E-03 + endloop + endfacet + facet normal 0.000000E+00 -1.000000E+00 0.000000E+00 + outer loop + vertex -1.850000E+01 -2.450000E+01 3.100000E+01 + vertex 1.250000E+01 -2.450000E+01 -1.000000E-03 + vertex 1.250000E+01 -2.450000E+01 3.100000E+01 + endloop + endfacet + facet normal -1.000000E+00 0.000000E+00 0.000000E+00 + outer loop + vertex -1.850000E+01 6.500000E+00 3.100000E+01 + vertex -1.850000E+01 6.500000E+00 -1.000000E-03 + vertex -1.850000E+01 -2.450000E+01 -1.000000E-03 + endloop + endfacet + facet normal -1.000000E+00 0.000000E+00 0.000000E+00 + outer loop + vertex -1.850000E+01 6.500000E+00 3.100000E+01 + vertex -1.850000E+01 -2.450000E+01 -1.000000E-03 + vertex -1.850000E+01 -2.450000E+01 3.100000E+01 + endloop + endfacet + facet normal 0.000000E+00 1.000000E+00 0.000000E+00 + outer loop + vertex -1.850000E+01 6.500000E+00 -1.000000E-03 + vertex -1.850000E+01 6.500000E+00 3.100000E+01 + vertex 1.250000E+01 6.500000E+00 3.100000E+01 + endloop + endfacet + facet normal 0.000000E+00 1.000000E+00 0.000000E+00 + outer loop + vertex -1.850000E+01 6.500000E+00 -1.000000E-03 + vertex 1.250000E+01 6.500000E+00 3.100000E+01 + vertex 1.250000E+01 6.500000E+00 -1.000000E-03 + endloop + endfacet + facet normal 1.000000E+00 0.000000E+00 0.000000E+00 + outer loop + vertex 1.250000E+01 6.500000E+00 3.100000E+01 + vertex 1.250000E+01 -2.450000E+01 3.100000E+01 + vertex 1.250000E+01 -2.450000E+01 -1.000000E-03 + endloop + endfacet + facet normal 1.000000E+00 0.000000E+00 0.000000E+00 + outer loop + vertex 1.250000E+01 6.500000E+00 3.100000E+01 + vertex 1.250000E+01 -2.450000E+01 -1.000000E-03 + vertex 1.250000E+01 6.500000E+00 -1.000000E-03 + endloop + endfacet + facet normal 0.000000E+00 0.000000E+00 -1.000000E+00 + outer loop + vertex 1.250000E+01 6.500000E+00 -1.000000E-03 + vertex 1.250000E+01 -2.450000E+01 -1.000000E-03 + vertex -1.850000E+01 -2.450000E+01 -1.000000E-03 + endloop + endfacet + facet normal 0.000000E+00 0.000000E+00 -1.000000E+00 + outer loop + vertex 1.250000E+01 6.500000E+00 -1.000000E-03 + vertex -1.850000E+01 -2.450000E+01 -1.000000E-03 + vertex -1.850000E+01 6.500000E+00 -1.000000E-03 + endloop + endfacet + facet normal 0.000000E+00 0.000000E+00 1.000000E+00 + outer loop + vertex -1.850000E+01 6.500000E+00 3.100000E+01 + vertex -1.850000E+01 -2.450000E+01 3.100000E+01 + vertex 1.250000E+01 -2.450000E+01 3.100000E+01 + endloop + endfacet + facet normal 0.000000E+00 0.000000E+00 1.000000E+00 + outer loop + vertex -1.850000E+01 6.500000E+00 3.100000E+01 + vertex 1.250000E+01 -2.450000E+01 3.100000E+01 + vertex 1.250000E+01 6.500000E+00 3.100000E+01 + endloop + endfacet +endsolid diff --git a/test/test_blob.rb b/test/test_blob.rb index 966c2743..3569a8ec 100644 --- a/test/test_blob.rb +++ b/test/test_blob.rb @@ -132,6 +132,12 @@ class TestBlob < Test::Unit::TestCase assert !blob("Binary/octocat.psd").image? end + def test_solid + assert blob("Binary/cube.stl").solid? + assert blob("Text/cube.stl").solid? + assert blob("Text/cube.obj").solid? + end + def test_viewable assert blob("Text/README").viewable? assert blob("Ruby/foo.rb").viewable?