ruby3mf 0.2.5 → 0.2.6

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e6ed7b5e499cd264c483fb07b8b64b2e87d66468
4
- data.tar.gz: 7e4d586f7171056fc27a30295fb778c278f0cda1
3
+ metadata.gz: 55092e1621883a6065add1327f2b2e6dd7a14467
4
+ data.tar.gz: ad8ca7226fab4ae7aecfeefbadb591f38609c793
5
5
  SHA512:
6
- metadata.gz: 65fea6f8723fd942bb26876ccc2fdb74877a0c441264979e1ee1d88f2416085a701b023553a40d5a2cc5ce51a5ff1ae62aae6f6c5968920ddf94a99938892640
7
- data.tar.gz: 5666f43cf880c92b2a2a583375c6eb4a64598e75b1ea3d4e182beddcaec4f07841027241bcf08ca194bc9a27d208b6b03eb2c66010b58da199df2d7ae338737d
6
+ metadata.gz: 061abfae6ba23f8f838c73f693b1842d3262382a8d8029fca9b6388451a7e1b448b846aabe998b7c09ea349dd1cefb30caa65138da20edc616e82fbfa7e6db9f
7
+ data.tar.gz: 8b9bed38285241dfd0aecd6bd6707567881c23b1839cd75a5e9f3bd182f423d6ac2f43064c73f3f5a6d9d41cd6969e8820e2ac333c62e40e847d4adc4105c37f
data/.gitignore CHANGED
@@ -1,14 +1,14 @@
1
- /.bundle/
2
- /.yardoc
3
- /Gemfile.lock
4
- /_yardoc/
5
- /coverage/
6
- /doc/
7
- /pkg/
8
- /spec/reports/
9
- /tmp/
10
- .idea
11
- /spec/ruby3mf-testfiles/
12
- /profile-run/
13
- .DS_Store
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ .idea
11
+ /spec/ruby3mf-testfiles/
12
+ /profile-run/
13
+ .DS_Store
14
14
  suite_test.txt
data/.rspec CHANGED
@@ -1,2 +1,2 @@
1
- --color
2
- --require spec_helper
1
+ --color
2
+ --require spec_helper
data/bin/batch.rb CHANGED
@@ -2,7 +2,9 @@
2
2
 
3
3
  require_relative '../lib/ruby3mf'
4
4
 
5
- files = Dir["spec/ruby3mf-testfiles/#{ARGV[0] || "failing_cases"}/*.#{ARGV[1] || '3mf'}"]
5
+ files = Dir["spec/ruby3mf-testfiles/#{ARGV[0] || "failing_cases"}/#{ARGV[1] || '*.3mf'}"]
6
+
7
+ p files
6
8
 
7
9
  files.each do |file|
8
10
  begin
data/bin/cli.rb CHANGED
@@ -1,12 +1,12 @@
1
- #!/usr/bin/env ruby
2
-
3
- require_relative '../lib/ruby3mf'
4
-
5
- filename = ARGV.first
6
- doc = Document.read(filename)
7
-
8
- errors = Log3mf.entries(:error, :fatal_error)
9
- puts errors
10
-
11
- # set exit code for suite test usage
12
- exit errors.size == 0
1
+ #!/usr/bin/env ruby
2
+
3
+ require_relative '../lib/ruby3mf'
4
+
5
+ filename = ARGV.first
6
+ doc = Document.read(filename)
7
+
8
+ errors = Log3mf.entries(:error, :fatal_error)
9
+ puts errors
10
+
11
+ # set exit code for suite test usage
12
+ exit errors.size == 0
data/bin/console CHANGED
@@ -1,14 +1,14 @@
1
- #!/usr/bin/env ruby
2
-
3
- require "bundler/setup"
4
- require "ruby3mf"
5
-
6
- # You can add fixtures and/or initialization code here to make experimenting
7
- # with your gem easier. You can also use a different console, if you like.
8
-
9
- # (If you use this, don't forget to add pry to your Gemfile!)
10
- # require "pry"
11
- # Pry.start
12
-
13
- require "irb"
14
- IRB.start
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "ruby3mf"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start
data/bin/folder_test.sh CHANGED
@@ -1,13 +1,13 @@
1
- #!/bin/bash
2
-
3
- NAME=$1
4
- echo "input: ${NAME}"
5
- echo "Starting test on: ${NAME}"
6
- echo "Starting test on: ${NAME}" >> ${NAME}_test.json
7
-
8
- for filename in ${NAME}/*.3mf; do
9
- echo "Validating ${filename}"
10
- ~/src/ruby3mf/bin/cli.rb ${filename} >> ${NAME}_test.json
11
- done
12
-
13
- echo "All Done."
1
+ #!/bin/bash
2
+
3
+ NAME=$1
4
+ echo "input: ${NAME}"
5
+ echo "Starting test on: ${NAME}"
6
+ echo "Starting test on: ${NAME}" >> ${NAME}_test.json
7
+
8
+ for filename in ${NAME}/*.3mf; do
9
+ echo "Validating ${filename}"
10
+ ~/src/ruby3mf/bin/cli.rb ${filename} >> ${NAME}_test.json
11
+ done
12
+
13
+ echo "All Done."
data/bin/suite_test.sh CHANGED
@@ -1,41 +1,41 @@
1
- #!/bin/bash
2
-
3
- MATCH=$1
4
- OUTFILE=suite_test.txt
5
- GOOD_FILES=../3mf-test-suite/Positive/${MATCH}*.3mf
6
- BAD_FILES=../3mf-test-suite/Negative/${MATCH}*.3mf
7
-
8
- echo "Test Suite: filter: ${MATCH}"
9
- printf "\n\n==============================================================================="
10
- printf "\n\n Test Suite: filter: ${MATCH} - $(date)\n" >> ${OUTFILE}
11
- printf "\n\n==============================================================================="
12
-
13
- echo "Positive Files -------------"
14
- printf "\nPositive Files -------------\n" >> ${OUTFILE}
15
- for filename in ${GOOD_FILES}; do
16
- if [ -f ${filename} ]; then
17
- echo " Validating ${filename}"
18
- result=$(( ~/src/ruby3mf/bin/cli.rb ${filename} ) 2>&1)
19
- if [ $? -ne 0 ]; then
20
- echo " Failed!"
21
- printf " ${filename}\n $result\n" >> ${OUTFILE}
22
- fi
23
- fi
24
- done
25
-
26
- echo "Negative Files -------------"
27
- printf "\nNegative Files -------------\n" >> suite_test.txt
28
- for filename in ${BAD_FILES}; do
29
- if [ -f ${filename} ]; then
30
- echo " Validating ${filename}"
31
- result=$(( ~/src/ruby3mf/bin/cli.rb ${filename} ) 2>&1)
32
- if [ $? -eq 0 ]; then
33
- echo " Passed!"
34
- printf " ${filename} - No Errors found!\n" >> ${OUTFILE}
35
- fi
36
- fi
37
- done
38
-
39
- echo "All Done."
40
- printf "\nCompleted -- $(date)\n\n" >> ${OUTFILE}
41
-
1
+ #!/bin/bash
2
+
3
+ MATCH=$1
4
+ OUTFILE=suite_test.txt
5
+ GOOD_FILES=../3mf-test-suite/Positive/${MATCH}*.3mf
6
+ BAD_FILES=../3mf-test-suite/Negative/${MATCH}*.3mf
7
+
8
+ echo "Test Suite: filter: ${MATCH}"
9
+ printf "\n\n==============================================================================="
10
+ printf "\n\n Test Suite: filter: ${MATCH} - $(date)\n" >> ${OUTFILE}
11
+ printf "\n\n==============================================================================="
12
+
13
+ echo "Positive Files -------------"
14
+ printf "\nPositive Files -------------\n" >> ${OUTFILE}
15
+ for filename in ${GOOD_FILES}; do
16
+ if [ -f ${filename} ]; then
17
+ echo " Validating ${filename}"
18
+ result=$(( ~/src/ruby3mf/bin/cli.rb ${filename} ) 2>&1)
19
+ if [ $? -ne 0 ]; then
20
+ echo " Failed!"
21
+ printf " ${filename}\n $result\n" >> ${OUTFILE}
22
+ fi
23
+ fi
24
+ done
25
+
26
+ echo "Negative Files -------------"
27
+ printf "\nNegative Files -------------\n" >> suite_test.txt
28
+ for filename in ${BAD_FILES}; do
29
+ if [ -f ${filename} ]; then
30
+ echo " Validating ${filename}"
31
+ result=$(( ~/src/ruby3mf/bin/cli.rb ${filename} ) 2>&1)
32
+ if [ $? -eq 0 ]; then
33
+ echo " Passed!"
34
+ printf " ${filename} - No Errors found!\n" >> ${OUTFILE}
35
+ fi
36
+ fi
37
+ done
38
+
39
+ echo "All Done."
40
+ printf "\nCompleted -- $(date)\n\n" >> ${OUTFILE}
41
+
data/lib/ruby3mf.rb CHANGED
@@ -1,26 +1,26 @@
1
- require_relative "ruby3mf/version"
2
- require_relative "ruby3mf/interpolation"
3
- require_relative "ruby3mf/schema_files"
4
- require_relative "ruby3mf/log3mf"
5
- require_relative "ruby3mf/document"
6
- require_relative "ruby3mf/content_types"
7
- require_relative "ruby3mf/model3mf"
8
- require_relative "ruby3mf/relationships"
9
- require_relative "ruby3mf/thumbnail3mf"
10
- require_relative "ruby3mf/texture3mf"
11
- require_relative "ruby3mf/xml_val"
12
- require_relative "ruby3mf/edge_list"
13
- require_relative "ruby3mf/mesh_analyzer"
14
- require_relative "ruby3mf/mesh_normal_analyzer"
15
-
16
- require 'zip'
17
- require 'nokogiri'
18
- require 'json'
19
- require 'mimemagic'
20
- require 'uri'
21
- require 'yaml'
22
- require "addressable/uri"
23
-
24
- module Ruby3mf
25
- # Your code goes here...
26
- end
1
+ require_relative "ruby3mf/version"
2
+ require_relative "ruby3mf/interpolation"
3
+ require_relative "ruby3mf/schema_files"
4
+ require_relative "ruby3mf/log3mf"
5
+ require_relative "ruby3mf/document"
6
+ require_relative "ruby3mf/content_types"
7
+ require_relative "ruby3mf/model3mf"
8
+ require_relative "ruby3mf/relationships"
9
+ require_relative "ruby3mf/thumbnail3mf"
10
+ require_relative "ruby3mf/texture3mf"
11
+ require_relative "ruby3mf/xml_val"
12
+ require_relative "ruby3mf/edge_list"
13
+ require_relative "ruby3mf/mesh_analyzer"
14
+ require_relative "ruby3mf/mesh_normal_analyzer"
15
+
16
+ require 'zip'
17
+ require 'nokogiri'
18
+ require 'json'
19
+ require 'mimemagic'
20
+ require 'uri'
21
+ require 'yaml'
22
+ require "addressable/uri"
23
+
24
+ module Ruby3mf
25
+ # Your code goes here...
26
+ end
@@ -1,188 +1,188 @@
1
- <xs:schema xmlns="http://schemas.microsoft.com/3dmanufacturing/core/2015/02" xmlns:xs="http://www.w3.org/2001/XMLSchema"
2
- xmlns:xml="http://www.w3.org/XML/1998/namespace"
3
- targetNamespace="http://schemas.microsoft.com/3dmanufacturing/core/2015/02" elementFormDefault="unqualified"
4
- attributeFormDefault="unqualified" blockDefault="#all">
5
- <xs:import namespace="http://www.w3.org/XML/1998/namespace"
6
- schemaLocation= "<%= SchemaFiles::SchemaLocation %>" />
7
- <xs:annotation>
8
- <xs:documentation><![CDATA[
9
- Schema notes:
10
- Items within this schema follow a simple naming convention of appending a prefix indicating the type of element for references:
11
- Unprefixed: Element names
12
- CT_: Complex types
13
- ST_: Simple types
14
- ]]></xs:documentation>
15
- </xs:annotation>
16
- <!-- Complex Types -->
17
- <xs:complexType name="CT_Model">
18
- <xs:sequence>
19
- <xs:element ref="metadata" minOccurs="0" maxOccurs="unbounded"/>
20
- <xs:element ref="resources"/>
21
- <xs:element ref="build"/>
22
- <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
23
- </xs:sequence>
24
- <xs:attribute name="unit" type="ST_Unit" default="millimeter"/>
25
- <xs:attribute ref="xml:lang"/>
26
- <xs:attribute name="requiredextensions" type="xs:string"/>
27
- <xs:anyAttribute namespace="##other" processContents="lax"/>
28
- </xs:complexType>
29
- <xs:complexType name="CT_Resources">
30
- <xs:sequence>
31
- <xs:element ref="basematerials" minOccurs="0" maxOccurs="unbounded"/>
32
- <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
33
- <xs:element ref="object" minOccurs="0" maxOccurs="unbounded"/>
34
- </xs:sequence>
35
- <xs:anyAttribute namespace="##other" processContents="lax"/>
36
- </xs:complexType>
37
- <xs:complexType name="CT_Build">
38
- <xs:sequence>
39
- <xs:element ref="item" minOccurs="0" maxOccurs="unbounded"/>
40
- </xs:sequence>
41
- <xs:anyAttribute namespace="##other" processContents="lax"/>
42
- </xs:complexType>
43
- <xs:complexType name="CT_BaseMaterials">
44
- <xs:sequence>
45
- <xs:element ref="base" maxOccurs="unbounded"/>
46
- </xs:sequence>
47
- <xs:attribute name="id" type="ST_ResourceID" use="required"/>
48
- </xs:complexType>
49
- <xs:complexType name="CT_Base">
50
- <xs:attribute name="name" type="xs:string" use="required"/>
51
- <xs:attribute name="displaycolor" type="ST_ColorValue" use="required"/>
52
- <xs:anyAttribute namespace="##other" processContents="lax"/>
53
- </xs:complexType>
54
- <xs:complexType name="CT_Object">
55
- <xs:choice>
56
- <xs:element ref="mesh"/>
57
- <xs:element ref="components"/>
58
- </xs:choice>
59
- <xs:attribute name="id" type="ST_ResourceID" use="required"/>
60
- <xs:attribute name="type" type="ST_ObjectType" default="model"/>
61
- <xs:attribute name="matid" type="ST_ResourceID"/>
62
- <xs:attribute name="matindex" type="ST_ResourceIndex"/>
63
- <xs:attribute name="partnumber" type="xs:string"/>
64
- <xs:attribute name="name" type="xs:string"/>
65
- <xs:attribute name="pid" type="ST_ResourceID"/>
66
- <xs:attribute name="pindex" type="ST_ResourceIndex"/>
67
- <xs:attribute name="thumbnail" type="ST_UriReference" />
68
- <xs:anyAttribute namespace="##other" processContents="lax"/>
69
- </xs:complexType>
70
- <xs:complexType name="CT_Mesh">
71
- <xs:sequence>
72
- <xs:element ref="vertices"/>
73
- <xs:element ref="triangles"/>
74
- <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
75
- </xs:sequence>
76
- </xs:complexType>
77
- <xs:complexType name="CT_Vertices">
78
- <xs:sequence>
79
- <xs:element ref="vertex" minOccurs="3" maxOccurs="unbounded"/>
80
- </xs:sequence>
81
- </xs:complexType>
82
- <xs:complexType name="CT_Vertex">
83
- <xs:attribute name="x" type="ST_Number" use="required"/>
84
- <xs:attribute name="y" type="ST_Number" use="required"/>
85
- <xs:attribute name="z" type="ST_Number" use="required"/>
86
- <xs:anyAttribute namespace="##other" processContents="lax"/>
87
- </xs:complexType>
88
- <xs:complexType name="CT_Triangles">
89
- <xs:sequence>
90
- <xs:element ref="triangle" minOccurs="1" maxOccurs="unbounded"/>
91
- </xs:sequence>
92
- </xs:complexType>
93
- <xs:complexType name="CT_Triangle">
94
- <xs:attribute name="v1" type="ST_ResourceIndex" use="required"/>
95
- <xs:attribute name="v2" type="ST_ResourceIndex" use="required"/>
96
- <xs:attribute name="v3" type="ST_ResourceIndex" use="required"/>
97
- <xs:attribute name="p1" type="ST_ResourceIndex"/>
98
- <xs:attribute name="p2" type="ST_ResourceIndex"/>
99
- <xs:attribute name="p3" type="ST_ResourceIndex"/>
100
- <xs:attribute name="pid" type="ST_ResourceID"/>
101
- <xs:anyAttribute namespace="##other" processContents="lax"/>
102
- </xs:complexType>
103
- <xs:complexType name="CT_Components">
104
- <xs:sequence>
105
- <xs:element ref="component" maxOccurs="unbounded"/>
106
- </xs:sequence>
107
- </xs:complexType>
108
- <xs:complexType name="CT_Component">
109
- <xs:attribute name="objectid" type="ST_ResourceID" use="required"/>
110
- <xs:attribute name="transform" type="ST_Matrix3D"/>
111
- <xs:anyAttribute namespace="##other" processContents="lax"/>
112
- </xs:complexType>
113
- <xs:complexType name="CT_Metadata" mixed="true">
114
- <xs:attribute name="name" type="xs:QName" use="required"/>
115
- </xs:complexType>
116
- <xs:complexType name="CT_Item">
117
- <xs:attribute name="objectid" type="ST_ResourceID" use="required"/>
118
- <xs:attribute name="transform" type="ST_Matrix3D"/>
119
- <xs:attribute name="itemref" type="xs:ID"/>
120
- <xs:anyAttribute namespace="##other" processContents="lax"/>
121
- </xs:complexType>
122
- <!-- Simple Types -->
123
- <xs:simpleType name="ST_Unit">
124
- <xs:restriction base="xs:string">
125
- <xs:enumeration value="micron"/>
126
- <xs:enumeration value="millimeter"/>
127
- <xs:enumeration value="centimeter"/>
128
- <xs:enumeration value="inch"/>
129
- <xs:enumeration value="foot"/>
130
- <xs:enumeration value="meter"/>
131
- </xs:restriction>
132
- </xs:simpleType>
133
- <xs:simpleType name="ST_ColorValue">
134
- <xs:restriction base="xs:string">
135
- <xs:pattern value="#[0-9|A-F|a-f][0-9|A-F|a-f][0-9|A-F|a-f][0-9|A-F|a-f][0-9|A-F|a-f][0-9|A-F|a-f]([0-9|A-F|a-f][0-9|A-F|a-f])?"/>
136
- </xs:restriction>
137
- </xs:simpleType>
138
- <xs:simpleType name="ST_UriReference">
139
- <xs:restriction base="xs:anyURI">
140
- <xs:pattern value="/.*"/>
141
- </xs:restriction>
142
- </xs:simpleType>
143
- <xs:simpleType name="ST_Matrix3D">
144
- <xs:restriction base="xs:string">
145
- <xs:pattern value="((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?) ((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?) ((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?) ((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?) ((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?) ((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?) ((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?) ((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?) ((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?) ((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?) ((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?) ((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)"/>
146
- </xs:restriction>
147
- </xs:simpleType>
148
- <xs:simpleType name="ST_Number">
149
- <xs:restriction base="xs:double">
150
- <xs:whiteSpace value="collapse"/>
151
- <xs:pattern value="((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)"/>
152
- </xs:restriction>
153
- </xs:simpleType>
154
- <xs:simpleType name="ST_ResourceID">
155
- <xs:restriction base="xs:positiveInteger">
156
- <xs:maxExclusive value="2147483648"/>
157
- </xs:restriction>
158
- </xs:simpleType>
159
- <xs:simpleType name="ST_ResourceIndex">
160
- <xs:restriction base="xs:nonNegativeInteger">
161
- <xs:maxExclusive value="2147483648"/>
162
- </xs:restriction>
163
- </xs:simpleType>
164
- <xs:simpleType name="ST_ObjectType">
165
- <xs:restriction base="xs:string">
166
- <xs:enumeration value="model"/>
167
- <xs:enumeration value="solidsupport"/>
168
- <xs:enumeration value="support"/>
169
- <xs:enumeration value="other"/>
170
- </xs:restriction>
171
- </xs:simpleType>
172
- <!-- Elements -->
173
- <xs:element name="model" type="CT_Model"/>
174
- <xs:element name="resources" type="CT_Resources"/>
175
- <xs:element name="build" type="CT_Build"/>
176
- <xs:element name="basematerials" type="CT_BaseMaterials"/>
177
- <xs:element name="base" type="CT_Base"/>
178
- <xs:element name="object" type="CT_Object"/>
179
- <xs:element name="mesh" type="CT_Mesh"/>
180
- <xs:element name="vertices" type="CT_Vertices"/>
181
- <xs:element name="vertex" type="CT_Vertex"/>
182
- <xs:element name="triangles" type="CT_Triangles"/>
183
- <xs:element name="triangle" type="CT_Triangle"/>
184
- <xs:element name="components" type="CT_Components"/>
185
- <xs:element name="component" type="CT_Component"/>
186
- <xs:element name="metadata" type="CT_Metadata"/>
187
- <xs:element name="item" type="CT_Item"/>
188
- </xs:schema>
1
+ <xs:schema xmlns="http://schemas.microsoft.com/3dmanufacturing/core/2015/02" xmlns:xs="http://www.w3.org/2001/XMLSchema"
2
+ xmlns:xml="http://www.w3.org/XML/1998/namespace"
3
+ targetNamespace="http://schemas.microsoft.com/3dmanufacturing/core/2015/02" elementFormDefault="unqualified"
4
+ attributeFormDefault="unqualified" blockDefault="#all">
5
+ <xs:import namespace="http://www.w3.org/XML/1998/namespace"
6
+ schemaLocation= "<%= SchemaFiles::SchemaLocation %>" />
7
+ <xs:annotation>
8
+ <xs:documentation><![CDATA[
9
+ Schema notes:
10
+ Items within this schema follow a simple naming convention of appending a prefix indicating the type of element for references:
11
+ Unprefixed: Element names
12
+ CT_: Complex types
13
+ ST_: Simple types
14
+ ]]></xs:documentation>
15
+ </xs:annotation>
16
+ <!-- Complex Types -->
17
+ <xs:complexType name="CT_Model">
18
+ <xs:sequence>
19
+ <xs:element ref="metadata" minOccurs="0" maxOccurs="unbounded"/>
20
+ <xs:element ref="resources"/>
21
+ <xs:element ref="build"/>
22
+ <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
23
+ </xs:sequence>
24
+ <xs:attribute name="unit" type="ST_Unit" default="millimeter"/>
25
+ <xs:attribute ref="xml:lang"/>
26
+ <xs:attribute name="requiredextensions" type="xs:string"/>
27
+ <xs:anyAttribute namespace="##other" processContents="lax"/>
28
+ </xs:complexType>
29
+ <xs:complexType name="CT_Resources">
30
+ <xs:sequence>
31
+ <xs:element ref="basematerials" minOccurs="0" maxOccurs="unbounded"/>
32
+ <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
33
+ <xs:element ref="object" minOccurs="0" maxOccurs="unbounded"/>
34
+ </xs:sequence>
35
+ <xs:anyAttribute namespace="##other" processContents="lax"/>
36
+ </xs:complexType>
37
+ <xs:complexType name="CT_Build">
38
+ <xs:sequence>
39
+ <xs:element ref="item" minOccurs="0" maxOccurs="unbounded"/>
40
+ </xs:sequence>
41
+ <xs:anyAttribute namespace="##other" processContents="lax"/>
42
+ </xs:complexType>
43
+ <xs:complexType name="CT_BaseMaterials">
44
+ <xs:sequence>
45
+ <xs:element ref="base" maxOccurs="unbounded"/>
46
+ </xs:sequence>
47
+ <xs:attribute name="id" type="ST_ResourceID" use="required"/>
48
+ </xs:complexType>
49
+ <xs:complexType name="CT_Base">
50
+ <xs:attribute name="name" type="xs:string" use="required"/>
51
+ <xs:attribute name="displaycolor" type="ST_ColorValue" use="required"/>
52
+ <xs:anyAttribute namespace="##other" processContents="lax"/>
53
+ </xs:complexType>
54
+ <xs:complexType name="CT_Object">
55
+ <xs:choice>
56
+ <xs:element ref="mesh"/>
57
+ <xs:element ref="components"/>
58
+ </xs:choice>
59
+ <xs:attribute name="id" type="ST_ResourceID" use="required"/>
60
+ <xs:attribute name="type" type="ST_ObjectType" default="model"/>
61
+ <xs:attribute name="matid" type="ST_ResourceID"/>
62
+ <xs:attribute name="matindex" type="ST_ResourceIndex"/>
63
+ <xs:attribute name="partnumber" type="xs:string"/>
64
+ <xs:attribute name="name" type="xs:string"/>
65
+ <xs:attribute name="pid" type="ST_ResourceID"/>
66
+ <xs:attribute name="pindex" type="ST_ResourceIndex"/>
67
+ <xs:attribute name="thumbnail" type="ST_UriReference" />
68
+ <xs:anyAttribute namespace="##other" processContents="lax"/>
69
+ </xs:complexType>
70
+ <xs:complexType name="CT_Mesh">
71
+ <xs:sequence>
72
+ <xs:element ref="vertices"/>
73
+ <xs:element ref="triangles"/>
74
+ <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
75
+ </xs:sequence>
76
+ </xs:complexType>
77
+ <xs:complexType name="CT_Vertices">
78
+ <xs:sequence>
79
+ <xs:element ref="vertex" minOccurs="3" maxOccurs="unbounded"/>
80
+ </xs:sequence>
81
+ </xs:complexType>
82
+ <xs:complexType name="CT_Vertex">
83
+ <xs:attribute name="x" type="ST_Number" use="required"/>
84
+ <xs:attribute name="y" type="ST_Number" use="required"/>
85
+ <xs:attribute name="z" type="ST_Number" use="required"/>
86
+ <xs:anyAttribute namespace="##other" processContents="lax"/>
87
+ </xs:complexType>
88
+ <xs:complexType name="CT_Triangles">
89
+ <xs:sequence>
90
+ <xs:element ref="triangle" minOccurs="1" maxOccurs="unbounded"/>
91
+ </xs:sequence>
92
+ </xs:complexType>
93
+ <xs:complexType name="CT_Triangle">
94
+ <xs:attribute name="v1" type="ST_ResourceIndex" use="required"/>
95
+ <xs:attribute name="v2" type="ST_ResourceIndex" use="required"/>
96
+ <xs:attribute name="v3" type="ST_ResourceIndex" use="required"/>
97
+ <xs:attribute name="p1" type="ST_ResourceIndex"/>
98
+ <xs:attribute name="p2" type="ST_ResourceIndex"/>
99
+ <xs:attribute name="p3" type="ST_ResourceIndex"/>
100
+ <xs:attribute name="pid" type="ST_ResourceID"/>
101
+ <xs:anyAttribute namespace="##other" processContents="lax"/>
102
+ </xs:complexType>
103
+ <xs:complexType name="CT_Components">
104
+ <xs:sequence>
105
+ <xs:element ref="component" maxOccurs="unbounded"/>
106
+ </xs:sequence>
107
+ </xs:complexType>
108
+ <xs:complexType name="CT_Component">
109
+ <xs:attribute name="objectid" type="ST_ResourceID" use="required"/>
110
+ <xs:attribute name="transform" type="ST_Matrix3D"/>
111
+ <xs:anyAttribute namespace="##other" processContents="lax"/>
112
+ </xs:complexType>
113
+ <xs:complexType name="CT_Metadata" mixed="true">
114
+ <xs:attribute name="name" type="xs:QName" use="required"/>
115
+ </xs:complexType>
116
+ <xs:complexType name="CT_Item">
117
+ <xs:attribute name="objectid" type="ST_ResourceID" use="required"/>
118
+ <xs:attribute name="transform" type="ST_Matrix3D"/>
119
+ <xs:attribute name="itemref" type="xs:ID"/>
120
+ <xs:anyAttribute namespace="##other" processContents="lax"/>
121
+ </xs:complexType>
122
+ <!-- Simple Types -->
123
+ <xs:simpleType name="ST_Unit">
124
+ <xs:restriction base="xs:string">
125
+ <xs:enumeration value="micron"/>
126
+ <xs:enumeration value="millimeter"/>
127
+ <xs:enumeration value="centimeter"/>
128
+ <xs:enumeration value="inch"/>
129
+ <xs:enumeration value="foot"/>
130
+ <xs:enumeration value="meter"/>
131
+ </xs:restriction>
132
+ </xs:simpleType>
133
+ <xs:simpleType name="ST_ColorValue">
134
+ <xs:restriction base="xs:string">
135
+ <xs:pattern value="#[0-9|A-F|a-f][0-9|A-F|a-f][0-9|A-F|a-f][0-9|A-F|a-f][0-9|A-F|a-f][0-9|A-F|a-f]([0-9|A-F|a-f][0-9|A-F|a-f])?"/>
136
+ </xs:restriction>
137
+ </xs:simpleType>
138
+ <xs:simpleType name="ST_UriReference">
139
+ <xs:restriction base="xs:anyURI">
140
+ <xs:pattern value="/.*"/>
141
+ </xs:restriction>
142
+ </xs:simpleType>
143
+ <xs:simpleType name="ST_Matrix3D">
144
+ <xs:restriction base="xs:string">
145
+ <xs:pattern value="((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?) ((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?) ((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?) ((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?) ((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?) ((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?) ((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?) ((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?) ((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?) ((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?) ((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?) ((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)"/>
146
+ </xs:restriction>
147
+ </xs:simpleType>
148
+ <xs:simpleType name="ST_Number">
149
+ <xs:restriction base="xs:double">
150
+ <xs:whiteSpace value="collapse"/>
151
+ <xs:pattern value="((\-|\+)?(([0-9]+(\.[0-9]+)?)|(\.[0-9]+))((e|E)(\-|\+)?[0-9]+)?)"/>
152
+ </xs:restriction>
153
+ </xs:simpleType>
154
+ <xs:simpleType name="ST_ResourceID">
155
+ <xs:restriction base="xs:positiveInteger">
156
+ <xs:maxExclusive value="2147483648"/>
157
+ </xs:restriction>
158
+ </xs:simpleType>
159
+ <xs:simpleType name="ST_ResourceIndex">
160
+ <xs:restriction base="xs:nonNegativeInteger">
161
+ <xs:maxExclusive value="2147483648"/>
162
+ </xs:restriction>
163
+ </xs:simpleType>
164
+ <xs:simpleType name="ST_ObjectType">
165
+ <xs:restriction base="xs:string">
166
+ <xs:enumeration value="model"/>
167
+ <xs:enumeration value="solidsupport"/>
168
+ <xs:enumeration value="support"/>
169
+ <xs:enumeration value="other"/>
170
+ </xs:restriction>
171
+ </xs:simpleType>
172
+ <!-- Elements -->
173
+ <xs:element name="model" type="CT_Model"/>
174
+ <xs:element name="resources" type="CT_Resources"/>
175
+ <xs:element name="build" type="CT_Build"/>
176
+ <xs:element name="basematerials" type="CT_BaseMaterials"/>
177
+ <xs:element name="base" type="CT_Base"/>
178
+ <xs:element name="object" type="CT_Object"/>
179
+ <xs:element name="mesh" type="CT_Mesh"/>
180
+ <xs:element name="vertices" type="CT_Vertices"/>
181
+ <xs:element name="vertex" type="CT_Vertex"/>
182
+ <xs:element name="triangles" type="CT_Triangles"/>
183
+ <xs:element name="triangle" type="CT_Triangle"/>
184
+ <xs:element name="components" type="CT_Components"/>
185
+ <xs:element name="component" type="CT_Component"/>
186
+ <xs:element name="metadata" type="CT_Metadata"/>
187
+ <xs:element name="item" type="CT_Item"/>
188
+ </xs:schema>