blender-3d 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/blender-3d/types.rb +6 -167
- data/lib/blender-3d/types/array_type.rb +25 -0
- data/lib/blender-3d/types/fixed_length_string_type.rb +22 -0
- data/lib/blender-3d/types/function_pointer_type.rb +21 -0
- data/lib/blender-3d/types/null_terminated_string_type.rb +16 -0
- data/lib/blender-3d/types/pointer_type.rb +47 -0
- data/lib/blender-3d/types/simple_type.rb +41 -0
- data/lib/blender-3d/version.rb +1 -1
- metadata +9 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1f04890774ad4700938bc6cde6cda8e66bd6a1e0
|
4
|
+
data.tar.gz: 9b15e351eccc16ada3c3cd8a07fe569588b11b9e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3ef9f4d0b8d6c6e4af8930db64f5ff3aafa568c3d6a3dc12de8da7f08f837f7b494c99bd0b5e22898c7f6e30e4bab4535a40da3692f38ae57e62b4eaa33499f6
|
7
|
+
data.tar.gz: 18245b3390d0b575184838e2c35a6003bc05b349a4e47c7895a2e21030a7bdeb0bf7121490598d04f284b35cce532e78ac4dec3ef88be8ed0a7d71652db29766
|
data/lib/blender-3d/types.rb
CHANGED
@@ -1,167 +1,6 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
end
|
8
|
-
|
9
|
-
def to_s
|
10
|
-
@name
|
11
|
-
end
|
12
|
-
|
13
|
-
def inspect
|
14
|
-
@name
|
15
|
-
end
|
16
|
-
|
17
|
-
def read(reader)
|
18
|
-
case @name
|
19
|
-
when 'char' then reader.read(1)
|
20
|
-
when 'double' then reader.read_double
|
21
|
-
when 'float' then reader.read_float
|
22
|
-
when 'int' then reader.read_int32
|
23
|
-
when 'int64_t' then reader.read_int64
|
24
|
-
when 'long' then reader.read_int32
|
25
|
-
when 'short' then reader.read_int16
|
26
|
-
when 'uchar' then reader.read_uint8
|
27
|
-
when 'uint64_t' then reader.read_uint64
|
28
|
-
when 'ulong' then reader.read_uint32
|
29
|
-
when 'ushort' then reader.read_uint16
|
30
|
-
else
|
31
|
-
dna = reader.model.dna_block.data
|
32
|
-
name = @name[0].upcase + @name[1..-1]
|
33
|
-
struct = dna.structures.find { |struct| struct.name == name }
|
34
|
-
return struct.read(reader) if struct
|
35
|
-
length = dna.types.find { |name, _size| name == @name }&.last
|
36
|
-
return reader.read(length) if length
|
37
|
-
raise 'type not found'
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
class PointerType
|
43
|
-
attr_reader :type
|
44
|
-
|
45
|
-
def initialize(type)
|
46
|
-
@type = type
|
47
|
-
end
|
48
|
-
|
49
|
-
def to_s
|
50
|
-
"Pointer(#@type)"
|
51
|
-
end
|
52
|
-
|
53
|
-
def inspect
|
54
|
-
"#{@type.inspect}*"
|
55
|
-
end
|
56
|
-
|
57
|
-
def read(reader)
|
58
|
-
pointer = Pointer.new(reader.read_pointer)
|
59
|
-
|
60
|
-
model = reader.model
|
61
|
-
block = model.pointers[pointer]
|
62
|
-
if block && block.data.is_a?(String) && !block.type
|
63
|
-
|
64
|
-
if block.count == 1
|
65
|
-
size = if @type.is_a?(PointerType)
|
66
|
-
model.header.pointer_size
|
67
|
-
else
|
68
|
-
model.dna_block.data.types.find { |type, _| type == @type.name }.last
|
69
|
-
end
|
70
|
-
|
71
|
-
if block.size > size && block.size % size == 0
|
72
|
-
block.type = ArrayType.new(@type, block.size / size)
|
73
|
-
else
|
74
|
-
block.type = @type
|
75
|
-
end
|
76
|
-
|
77
|
-
else
|
78
|
-
block.type = @type
|
79
|
-
end
|
80
|
-
|
81
|
-
block.parse_data(reader.model)
|
82
|
-
end
|
83
|
-
|
84
|
-
pointer
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
class FunctionPointerType
|
89
|
-
attr_reader :return_type
|
90
|
-
|
91
|
-
def initialize(return_type)
|
92
|
-
@return_type = return_type
|
93
|
-
end
|
94
|
-
|
95
|
-
def to_s
|
96
|
-
"Function(#@return_type)"
|
97
|
-
end
|
98
|
-
|
99
|
-
def inspect
|
100
|
-
"#{@return_type.inspect} (*)()"
|
101
|
-
end
|
102
|
-
|
103
|
-
def read(reader)
|
104
|
-
Pointer.new(reader.read_pointer)
|
105
|
-
end
|
106
|
-
end
|
107
|
-
|
108
|
-
# equivalent to PointerType<SimpleType<char>> (char*)
|
109
|
-
class NullTerminatedStringType
|
110
|
-
def to_s
|
111
|
-
"NullTerminatedString"
|
112
|
-
end
|
113
|
-
|
114
|
-
def inspect
|
115
|
-
'char*'
|
116
|
-
end
|
117
|
-
|
118
|
-
def read(reader)
|
119
|
-
reader.read_string.chop
|
120
|
-
end
|
121
|
-
end
|
122
|
-
|
123
|
-
# equivalent to ArrayType<SimpleType<char>, length> (char[length])
|
124
|
-
class FixedLengthStringType
|
125
|
-
attr_reader :length
|
126
|
-
|
127
|
-
def initialize(length)
|
128
|
-
@length = length
|
129
|
-
end
|
130
|
-
|
131
|
-
def to_s
|
132
|
-
"FixedLengthString(#@length)"
|
133
|
-
end
|
134
|
-
|
135
|
-
def inspect
|
136
|
-
"char[#@length]"
|
137
|
-
end
|
138
|
-
|
139
|
-
def read(reader)
|
140
|
-
reader.read(@length).gsub(/\0.*$/, '')
|
141
|
-
end
|
142
|
-
end
|
143
|
-
|
144
|
-
class ArrayType
|
145
|
-
attr_reader :type, :size
|
146
|
-
|
147
|
-
def initialize(type, size)
|
148
|
-
@type, @size = type, size
|
149
|
-
end
|
150
|
-
|
151
|
-
def dimensions
|
152
|
-
@sizes.size
|
153
|
-
end
|
154
|
-
|
155
|
-
def to_s
|
156
|
-
"Array[#@size](#@type)"
|
157
|
-
end
|
158
|
-
|
159
|
-
def inspect
|
160
|
-
"#{@type.inspect}[#@size]"
|
161
|
-
end
|
162
|
-
|
163
|
-
def read(reader)
|
164
|
-
@size.times.map { @type.read(reader) }
|
165
|
-
end
|
166
|
-
end
|
167
|
-
end
|
1
|
+
require_relative 'types/array_type'
|
2
|
+
require_relative 'types/fixed_length_string_type'
|
3
|
+
require_relative 'types/function_pointer_type'
|
4
|
+
require_relative 'types/null_terminated_string_type'
|
5
|
+
require_relative 'types/pointer_type'
|
6
|
+
require_relative 'types/simple_type'
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Blender3d
|
2
|
+
class ArrayType
|
3
|
+
attr_reader :type, :size
|
4
|
+
|
5
|
+
def initialize(type, size)
|
6
|
+
@type, @size = type, size
|
7
|
+
end
|
8
|
+
|
9
|
+
def dimensions
|
10
|
+
@sizes.size
|
11
|
+
end
|
12
|
+
|
13
|
+
def to_s
|
14
|
+
"Array[#@size](#@type)"
|
15
|
+
end
|
16
|
+
|
17
|
+
def inspect
|
18
|
+
"#{@type.inspect}[#@size]"
|
19
|
+
end
|
20
|
+
|
21
|
+
def read(reader)
|
22
|
+
@size.times.map { @type.read(reader) }
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Blender3d
|
2
|
+
# equivalent to ArrayType<SimpleType<char>, length> (char[length])
|
3
|
+
class FixedLengthStringType
|
4
|
+
attr_reader :length
|
5
|
+
|
6
|
+
def initialize(length)
|
7
|
+
@length = length
|
8
|
+
end
|
9
|
+
|
10
|
+
def to_s
|
11
|
+
"FixedLengthString(#@length)"
|
12
|
+
end
|
13
|
+
|
14
|
+
def inspect
|
15
|
+
"char[#@length]"
|
16
|
+
end
|
17
|
+
|
18
|
+
def read(reader)
|
19
|
+
reader.read(@length).gsub(/\0.*$/, '')
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Blender3d
|
2
|
+
class FunctionPointerType
|
3
|
+
attr_reader :return_type
|
4
|
+
|
5
|
+
def initialize(return_type)
|
6
|
+
@return_type = return_type
|
7
|
+
end
|
8
|
+
|
9
|
+
def to_s
|
10
|
+
"Function(#@return_type)"
|
11
|
+
end
|
12
|
+
|
13
|
+
def inspect
|
14
|
+
"#{@return_type.inspect} (*)()"
|
15
|
+
end
|
16
|
+
|
17
|
+
def read(reader)
|
18
|
+
Pointer.new(reader.read_pointer)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Blender3d
|
2
|
+
# equivalent to PointerType<SimpleType<char>> (char*)
|
3
|
+
class NullTerminatedStringType
|
4
|
+
def to_s
|
5
|
+
'NullTerminatedString'
|
6
|
+
end
|
7
|
+
|
8
|
+
def inspect
|
9
|
+
'char*'
|
10
|
+
end
|
11
|
+
|
12
|
+
def read(reader)
|
13
|
+
reader.read_string.chop
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module Blender3d
|
2
|
+
class PointerType
|
3
|
+
attr_reader :type
|
4
|
+
|
5
|
+
def initialize(type)
|
6
|
+
@type = type
|
7
|
+
end
|
8
|
+
|
9
|
+
def to_s
|
10
|
+
"Pointer(#@type)"
|
11
|
+
end
|
12
|
+
|
13
|
+
def inspect
|
14
|
+
"#{@type.inspect}*"
|
15
|
+
end
|
16
|
+
|
17
|
+
def read(reader)
|
18
|
+
pointer = Pointer.new(reader.read_pointer)
|
19
|
+
|
20
|
+
model = reader.model
|
21
|
+
block = model.pointers[pointer]
|
22
|
+
if block && block.data.is_a?(String) && !block.type
|
23
|
+
block.type = get_type(block, model)
|
24
|
+
block.parse_data(reader.model)
|
25
|
+
end
|
26
|
+
|
27
|
+
pointer
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def get_type(block, model)
|
33
|
+
return @type if block.count > 1
|
34
|
+
size = get_size(model)
|
35
|
+
return @type unless size > 0 && block.size > size && block.size % size == 0
|
36
|
+
ArrayType.new(@type, block.size / size)
|
37
|
+
end
|
38
|
+
|
39
|
+
def get_size(model)
|
40
|
+
if @type.is_a?(PointerType)
|
41
|
+
model.header.pointer_size
|
42
|
+
else
|
43
|
+
model.dna_block.data.types.find { |type, _| type == @type.name }.last
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module Blender3d
|
2
|
+
class SimpleType
|
3
|
+
attr_reader :name
|
4
|
+
|
5
|
+
def initialize(name)
|
6
|
+
@name = name
|
7
|
+
end
|
8
|
+
|
9
|
+
def to_s
|
10
|
+
@name
|
11
|
+
end
|
12
|
+
|
13
|
+
def inspect
|
14
|
+
@name
|
15
|
+
end
|
16
|
+
|
17
|
+
def read(reader)
|
18
|
+
case @name
|
19
|
+
when 'char' then reader.read(1)
|
20
|
+
when 'double' then reader.read_double
|
21
|
+
when 'float' then reader.read_float
|
22
|
+
when 'int' then reader.read_int32
|
23
|
+
when 'int64_t' then reader.read_int64
|
24
|
+
when 'long' then reader.read_int32
|
25
|
+
when 'short' then reader.read_int16
|
26
|
+
when 'uchar' then reader.read_uint8
|
27
|
+
when 'uint64_t' then reader.read_uint64
|
28
|
+
when 'ulong' then reader.read_uint32
|
29
|
+
when 'ushort' then reader.read_uint16
|
30
|
+
else
|
31
|
+
dna = reader.model.dna_block.data
|
32
|
+
name = @name[0].upcase + @name[1..-1]
|
33
|
+
struct = dna.structures.find { |struct| struct.name == name }
|
34
|
+
return struct.read(reader) if struct
|
35
|
+
length = dna.types.find { |name, _size| name == @name }&.last
|
36
|
+
return reader.read(length) if length
|
37
|
+
raise 'type not found'
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
data/lib/blender-3d/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: blender-3d
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- SilverPhoenix99
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-11-
|
11
|
+
date: 2016-11-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: facets
|
@@ -46,6 +46,12 @@ files:
|
|
46
46
|
- lib/blender-3d/structure.rb
|
47
47
|
- lib/blender-3d/structure_definition.rb
|
48
48
|
- lib/blender-3d/types.rb
|
49
|
+
- lib/blender-3d/types/array_type.rb
|
50
|
+
- lib/blender-3d/types/fixed_length_string_type.rb
|
51
|
+
- lib/blender-3d/types/function_pointer_type.rb
|
52
|
+
- lib/blender-3d/types/null_terminated_string_type.rb
|
53
|
+
- lib/blender-3d/types/pointer_type.rb
|
54
|
+
- lib/blender-3d/types/simple_type.rb
|
49
55
|
- lib/blender-3d/version.rb
|
50
56
|
homepage:
|
51
57
|
licenses:
|
@@ -67,7 +73,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
67
73
|
version: '0'
|
68
74
|
requirements: []
|
69
75
|
rubyforge_project:
|
70
|
-
rubygems_version: 2.6.
|
76
|
+
rubygems_version: 2.6.8
|
71
77
|
signing_key:
|
72
78
|
specification_version: 4
|
73
79
|
summary: Blender 3d file parser.
|