ruby3mf 0.1.8 → 0.1.10
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/ruby3mf/document.rb +8 -5
- data/lib/ruby3mf/model3mf.rb +20 -3
- data/lib/ruby3mf/texture3mf.rb +2 -2
- data/lib/ruby3mf/thumbnail3mf.rb +2 -1
- data/lib/ruby3mf/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f15c7a59a41748c2b7f788fbdc89a930f4799f74
|
4
|
+
data.tar.gz: e0cfb446ab590d4d036f939f25c4b1cb10c5c692
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4d79b78bf1b7ef8a7e4a72e1caac69dd7dd73147928e22d65d83aab3b1c5ec67c752842f4f18c2c217a8d2227c360b65bba61e9f40c7ef052d00454e812ea8b7
|
7
|
+
data.tar.gz: 735bcb3499bcbf02278a8dd58f5a956b3a101cd157493d2aa730318e47e68249e9d8135c2ad3f37a34fae3d223e197a067fb9b285c6d42ec31e581c3520cc3bc
|
data/lib/ruby3mf/document.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
class Document
|
2
2
|
|
3
|
+
attr_accessor :types
|
4
|
+
attr_accessor :relationships
|
3
5
|
attr_accessor :models
|
4
6
|
attr_accessor :thumbnails
|
5
7
|
attr_accessor :textures
|
@@ -18,6 +20,8 @@ class Document
|
|
18
20
|
self.thumbnails=[]
|
19
21
|
self.textures=[]
|
20
22
|
self.objects={}
|
23
|
+
self.relationships=[]
|
24
|
+
self.types=[]
|
21
25
|
@zip_filename = zip_filename
|
22
26
|
end
|
23
27
|
|
@@ -37,7 +41,7 @@ class Document
|
|
37
41
|
# 1. Get Content Types
|
38
42
|
content_type_match = zip_file.glob('\[Content_Types\].xml').first
|
39
43
|
if content_type_match
|
40
|
-
|
44
|
+
m.types = ContentTypes.parse(content_type_match)
|
41
45
|
else
|
42
46
|
l.error "Missing required file: [Content_Types].xml", page: 4
|
43
47
|
end
|
@@ -52,15 +56,14 @@ class Document
|
|
52
56
|
rel_file = zip_file.glob('_rels/.rels').first
|
53
57
|
l.fatal_error "Missing required file _rels/.rels", page: 4 unless rel_file
|
54
58
|
|
55
|
-
@relationships=[]
|
56
59
|
zip_file.glob('**/*.rels').each do |rel|
|
57
|
-
|
60
|
+
m.relationships += Relationships.parse(rel)
|
58
61
|
end
|
59
62
|
end
|
60
63
|
|
61
64
|
l.context "relationship elements" do |l|
|
62
65
|
# 3. Validate all relationships
|
63
|
-
|
66
|
+
m.relationships.each do |rel|
|
64
67
|
l.context rel[:target] do |l|
|
65
68
|
target = rel[:target].gsub(/^\//, "")
|
66
69
|
relationship_file = zip_file.glob(target).first
|
@@ -73,7 +76,7 @@ class Document
|
|
73
76
|
m.send(relationship_type[:collection]) << {
|
74
77
|
rel_id: rel[:id],
|
75
78
|
target: rel[:target],
|
76
|
-
object: Object.const_get(relationship_type[:klass]).parse(m, relationship_file
|
79
|
+
object: Object.const_get(relationship_type[:klass]).parse(m, relationship_file)
|
77
80
|
}
|
78
81
|
end
|
79
82
|
else
|
data/lib/ruby3mf/model3mf.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
class Model3mf
|
2
2
|
|
3
|
-
def self.parse(document, zip_entry
|
3
|
+
def self.parse(document, zip_entry)
|
4
4
|
model_doc = nil
|
5
5
|
|
6
6
|
Log3mf.context "parsing model" do |l|
|
@@ -17,8 +17,8 @@ class Model3mf
|
|
17
17
|
# results = model_doc.css("model resources m:texture2d")
|
18
18
|
required_resources = model_doc.css("//model//resources//*[path]").collect { |n| n["path"] }
|
19
19
|
|
20
|
-
# for each, ensure that they exist in
|
21
|
-
relationship_resources = relationships.map { |relationship| relationship[:target] }
|
20
|
+
# for each, ensure that they exist in m.relationships
|
21
|
+
relationship_resources = document.relationships.map { |relationship| relationship[:target] }
|
22
22
|
|
23
23
|
missing_resources = (required_resources - relationship_resources)
|
24
24
|
if missing_resources.empty?
|
@@ -29,6 +29,23 @@ class Model3mf
|
|
29
29
|
}
|
30
30
|
end
|
31
31
|
|
32
|
+
l.context "verifying 3D resource types" do |l|
|
33
|
+
model_types = model_doc.css("//model//resources//*[path]").collect { |t| t["contenttype"] }
|
34
|
+
|
35
|
+
#for each, ensure they exist in ContentTypes
|
36
|
+
all_types = document.types.map { |t, v| v }
|
37
|
+
|
38
|
+
bad_types = (model_types - all_types)
|
39
|
+
if bad_types.empty?
|
40
|
+
l.info "All model resource contenttypes are valid"
|
41
|
+
else
|
42
|
+
bad_types.each { |bt|
|
43
|
+
puts "bad type: #{bt}"
|
44
|
+
l.error "resource in model has invalid contenttype #{bt}", page: 10
|
45
|
+
}
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
32
49
|
end
|
33
50
|
end
|
34
51
|
model_doc
|
data/lib/ruby3mf/texture3mf.rb
CHANGED
@@ -5,14 +5,14 @@ class Texture3mf
|
|
5
5
|
@doc = document
|
6
6
|
end
|
7
7
|
|
8
|
-
def self.parse(document, relationship_file
|
8
|
+
def self.parse(document, relationship_file)
|
9
9
|
|
10
10
|
t = new(document)
|
11
11
|
t.name = relationship_file.name
|
12
12
|
stream = relationship_file.get_input_stream
|
13
13
|
img_type = MimeMagic.by_magic(stream)
|
14
|
-
@bytes = stream.read
|
15
14
|
Log3mf.context "Texture3mf" do |l|
|
15
|
+
l.fatal_error "Texture file must be valid image file", spec: :material, page: 16 unless img_type
|
16
16
|
l.debug "texture is of type: #{img_type}"
|
17
17
|
l.error "Expected a png or jpeg texture but the texture was of type #{img_type}", spec: :material, page: 16 unless ['image/png', 'image/jpeg'].include? img_type.type
|
18
18
|
end
|
data/lib/ruby3mf/thumbnail3mf.rb
CHANGED
@@ -1,8 +1,9 @@
|
|
1
1
|
class Thumbnail3mf
|
2
2
|
|
3
|
-
def self.parse(doc, relationship_file
|
3
|
+
def self.parse(doc, relationship_file)
|
4
4
|
img_type = MimeMagic.by_magic(relationship_file.get_input_stream)
|
5
5
|
Log3mf.context "Thumbnail3mf" do |l|
|
6
|
+
l.fatal_error "thumbnail file must be valid image file", page: 10 unless img_type
|
6
7
|
l.debug "thumbnail is of type: #{img_type}"
|
7
8
|
l.error "Expected a png or jpeg thumbnail but the thumbnail was of type #{img_type}", page: 12 unless ['image/png', 'image/jpeg'].include? img_type.type
|
8
9
|
end
|
data/lib/ruby3mf/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby3mf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mike Whitmarsh, Jeff Porter, and William Hertling
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-12-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|