fml 0.2.1

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.
Files changed (44) hide show
  1. data/.gitignore +8 -0
  2. data/README +1 -0
  3. data/Rakefile +3 -0
  4. data/bin/fml2dae.rb +15 -0
  5. data/bin/fml2obj.rb +10 -0
  6. data/fml.gemspec +36 -0
  7. data/lib/collada/document.rb +101 -0
  8. data/lib/collada/geometry.rb +110 -0
  9. data/lib/config.yml +17 -0
  10. data/lib/floorplanner/area_builder.rb +42 -0
  11. data/lib/floorplanner/asset.rb +185 -0
  12. data/lib/floorplanner/collada_export.rb +118 -0
  13. data/lib/floorplanner/design.rb +108 -0
  14. data/lib/floorplanner/document.rb +68 -0
  15. data/lib/floorplanner/obj_export.rb +24 -0
  16. data/lib/floorplanner/opening3d.rb +140 -0
  17. data/lib/floorplanner/rib_export.rb +24 -0
  18. data/lib/floorplanner/svg_export.rb +25 -0
  19. data/lib/floorplanner/wall3d.rb +97 -0
  20. data/lib/floorplanner/wall_builder.rb +165 -0
  21. data/lib/floorplanner.rb +52 -0
  22. data/lib/geom/connection.rb +14 -0
  23. data/lib/geom/ear_trim.rb +52 -0
  24. data/lib/geom/edge.rb +89 -0
  25. data/lib/geom/glu_tess.rb +34 -0
  26. data/lib/geom/intersection.rb +38 -0
  27. data/lib/geom/matrix3d.rb +141 -0
  28. data/lib/geom/number.rb +104 -0
  29. data/lib/geom/plane.rb +36 -0
  30. data/lib/geom/polygon.rb +264 -0
  31. data/lib/geom/triangle.rb +38 -0
  32. data/lib/geom/triangle_mesh.rb +94 -0
  33. data/lib/geom/vertex.rb +33 -0
  34. data/lib/geom.rb +13 -0
  35. data/lib/keyhole/archive.rb +36 -0
  36. data/tasks/github-gem.rake +315 -0
  37. data/views/design.dae.erb +439 -0
  38. data/views/design.obj.erb +17 -0
  39. data/views/design.rib.erb +17 -0
  40. data/views/design.svg.erb +42 -0
  41. data/xml/collada_schema_1_4.xsd +11046 -0
  42. data/xml/fml.rng +268 -0
  43. data/xml/fml2kml.xsl +59 -0
  44. metadata +117 -0
data/xml/fml.rng ADDED
@@ -0,0 +1,268 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <grammar xmlns:m="http://www.floorplaner.com" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
3
+ <start>
4
+ <element name="project">
5
+ <interleave>
6
+ <element name="name"><text/></element>
7
+ <optional>
8
+ <element name="description"><text/></element>
9
+ </optional><optional>
10
+ <element name="public"><data type="boolean"/></element>
11
+ </optional><optional>
12
+ <element name="external-identifier"><ref name="fp.digitLess"/></element>
13
+ </optional><optional>
14
+ <element name="id"><data type="integer"/></element>
15
+ </optional><optional>
16
+ <element name="created-at"><data type="dateTime"/></element>
17
+ </optional><optional>
18
+ <element name="updated-at"><data type="dateTime"/></element>
19
+ </optional><optional>
20
+ <element name="element-library-id"><data type="integer"/></element>
21
+ </optional><optional>
22
+ <element name="enable-autosave"><data type="boolean"/></element>
23
+ </optional><optional>
24
+ <element name="grid-cell-size"><data type="decimal"/></element>
25
+ </optional><optional>
26
+ <element name="grid-sub-cell-size"><data type="decimal"/></element>
27
+ </optional><optional>
28
+ <element name="project-url"><data type="anyURI"/></element>
29
+ </optional>
30
+
31
+ <oneOrMore>
32
+ <element name="floor">
33
+ <interleave>
34
+ <element name="name"><text/></element>
35
+ <element name="level"><data type="integer"/></element>
36
+ <element name="height"><data type="float"/></element>
37
+ <optional>
38
+ <element name="id"><data type="integer"/></element>
39
+ </optional><optional>
40
+ <element name="created-at"><data type="dateTime"/></element>
41
+ </optional><optional>
42
+ <element name="updated-at"><data type="dateTime"/></element>
43
+ </optional>
44
+
45
+ <oneOrMore>
46
+ <element name="design">
47
+ <interleave>
48
+ <element name="name"><text/></element>
49
+ <optional>
50
+ <element name="id"><data type="integer"/></element>
51
+ </optional><optional>
52
+ <element name="project-id"><data type="integer"/></element>
53
+ </optional><optional>
54
+ <element name="floor-id"><data type="integer"/></element>
55
+ </optional><optional>
56
+ <element name="created-at"><data type="dateTime"/></element>
57
+ </optional><optional>
58
+ <element name="updated-at"><data type="dateTime"/></element>
59
+ </optional><optional>
60
+ <element name="thumb-url"><data type="anyURI"/></element>
61
+ </optional><optional>
62
+ <element name="design-type">
63
+ <choice>
64
+ <value>save</value>
65
+ <value>save_as</value>
66
+ <value>save_and_mail</value>
67
+ </choice>
68
+ </element>
69
+ </optional>
70
+
71
+ <zeroOrMore>
72
+ <element name="asset">
73
+ <interleave>
74
+ <attribute name="id"><ref name="fp.digitLess"/></attribute>
75
+ <element name="url2d"><data type="anyURI"/></element>
76
+ <choice>
77
+ <!-- Object assets -->
78
+ <group>
79
+ <interleave>
80
+ <element name="name"><text/></element>
81
+ <element name="url3d"><data type="anyURI"/></element>
82
+ <element name="layer"><data type="integer"/></element>
83
+ <optional>
84
+ <element name="filter-value"><text/></element>
85
+ </optional>
86
+ </interleave>
87
+ </group>
88
+ <!-- Texture assets -->
89
+ <group>
90
+ <interleave>
91
+ <element name="name"><text/></element>
92
+ <element name="color"><ref name="fp.color"/></element>
93
+ </interleave>
94
+ </group>
95
+ <!-- Line assets -->
96
+ <group>
97
+ <interleave>
98
+ <element name="type"><text/></element>
99
+ <element name="color"><ref name="fp.color"/></element>
100
+ <element name="thickness"><data type="float"/></element>
101
+ </interleave>
102
+ </group>
103
+ </choice>
104
+ </interleave>
105
+ </element>
106
+ </zeroOrMore>
107
+
108
+ <zeroOrMore>
109
+ <element name="object">
110
+ <choice>
111
+ <!-- Furniture elements -->
112
+ <group>
113
+ <interleave>
114
+ <element name="asset">
115
+ <attribute name="refid"><ref name="fp.digitLess"/></attribute>
116
+ </element>
117
+ <element name="type">
118
+ <choice>
119
+ <value>furniture</value>
120
+ <value>text</value>
121
+ <value>opening</value>
122
+ </choice>
123
+ </element>
124
+ <element name="points"><ref name="fp.threeFloats"/></element>
125
+ <element name="size"><ref name="fp.threeFloats"/></element>
126
+ <optional>
127
+ <element name="color"><ref name="fp.color"/></element>
128
+ </optional><optional>
129
+ <element name="rotation"><ref name="fp.color"/></element>
130
+ </optional><optional>
131
+ <element name="mirrored"><ref name="fp.threeBools"/></element>
132
+ </optional><optional>
133
+ <element name="locked"><data type="boolean"/></element>
134
+ </optional>
135
+ </interleave>
136
+ </group>
137
+ <!-- Text labels -->
138
+ <group>
139
+ <interleave>
140
+ <element name="text"><text/></element>
141
+ <element name="font-family"><text/></element>
142
+ <element name="font-size"><data type="integer"/></element>
143
+ <element name="font-color"><ref name="fp.color"/></element>
144
+ <element name="background-color"><ref name="fp.color"/></element>
145
+ <element name="background-alpha"><data type="integer"/></element>
146
+ <optional>
147
+ <element name="font-bold"><data type="boolean"/></element>
148
+ </optional><optional>
149
+ <element name="font-italic"><data type="boolean"/></element>
150
+ </optional><optional>
151
+ <element name="font-underline"><data type="boolean"/></element>
152
+ </optional><optional>
153
+ <element name="font-outline"><data type="boolean"/></element>
154
+ </optional>
155
+ </interleave>
156
+ </group>
157
+ </choice>
158
+ </element>
159
+ </zeroOrMore>
160
+
161
+ <zeroOrMore>
162
+ <element name="line">
163
+ <interleave>
164
+ <element name="type"><text/></element>
165
+ <element name="points"><ref name="fp.sixOrNineFloats"/></element>
166
+ <optional>
167
+ <element name="asset">
168
+ <attribute name="refid"><ref name="fp.digitLess"/></attribute>
169
+ </element>
170
+ </optional>
171
+ <optional>
172
+ <element name="color"><ref name="fp.color"/></element>
173
+ </optional><optional>
174
+ <element name="thickness"><data type="float"/></element>
175
+ </optional><optional>
176
+ <element name="height"><data type="float"/></element>
177
+ </optional><optional>
178
+ <element name="custom-text"><text/></element>
179
+ </optional>
180
+ </interleave>
181
+ </element>
182
+ </zeroOrMore>
183
+
184
+ <zeroOrMore>
185
+ <element name="area">
186
+ <oneOrMore>
187
+ <element name="line">
188
+ <interleave>
189
+ <element name="type">
190
+ <choice>
191
+ <value>generated_area</value>
192
+ <value>custom_area</value>
193
+ </choice>
194
+ </element>
195
+ <element name="points">
196
+ <data type="string">
197
+ <!-- broke regexp implementation, pattern works Ruby's regexp ->
198
+ <param name="pattern">
199
+ ^((\s*[-+]?[0-9]*\.?[0-9]+\s+){5,8}\s*[-+]?[0-9]*\.?[0-9]+\s*?(?:,)?)*$
200
+ </param>
201
+ <- -->
202
+ </data>
203
+ </element>
204
+ <element name="color"><ref name="fp.color"/></element>
205
+ <optional>
206
+ <element name="asset">
207
+ <attribute name="refid"><ref name="fp.digitLess"/></attribute>
208
+ </element>
209
+ </optional><optional>
210
+ <element name="rotation"><ref name="fp.threeFloats"/></element>
211
+ </optional>
212
+ </interleave>
213
+ </element>
214
+ </oneOrMore>
215
+ </element>
216
+ </zeroOrMore>
217
+ </interleave>
218
+ </element>
219
+ </oneOrMore>
220
+ </interleave>
221
+ </element>
222
+ </oneOrMore>
223
+ </interleave>
224
+ </element>
225
+ </start>
226
+
227
+ <define name="fp.color">
228
+ <data type="string">
229
+ <param name="pattern">#([a-fA-F\d]{3}|[a-fA-F\d]{6})</param>
230
+ </data>
231
+ </define>
232
+
233
+ <define name="fp.threeFloats">
234
+ <list>
235
+ <data type="float"/>
236
+ <data type="float"/>
237
+ <data type="float"/>
238
+ </list>
239
+ </define>
240
+
241
+ <define name="fp.threeBools">
242
+ <list>
243
+ <data type="boolean"/>
244
+ <data type="boolean"/>
245
+ <data type="boolean"/>
246
+ </list>
247
+ </define>
248
+
249
+ <define name="fp.digitLess">
250
+ <data type="string">
251
+ <param name="pattern">[a-zA-Z].*</param>
252
+ </data>
253
+ </define>
254
+ <define name="fp.sixOrNineFloats">
255
+ <choice>
256
+ <list>
257
+ <data type="float"/><data type="float"/>
258
+ <data type="float"/><data type="float"/>
259
+ <data type="float"/><data type="float"/>
260
+ </list>
261
+ <list>
262
+ <data type="float"/><data type="float"/><data type="float"/>
263
+ <data type="float"/><data type="float"/><data type="float"/>
264
+ <data type="float"/><data type="float"/><data type="float"/>
265
+ </list>
266
+ </choice>
267
+ </define>
268
+ </grammar>
data/xml/fml2kml.xsl ADDED
@@ -0,0 +1,59 @@
1
+ <?xml version="1.0" encoding="ISO-8859-1"?>
2
+ <xsl:stylesheet version="1.0"
3
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
4
+
5
+ <xsl:template match="/">
6
+ <kml xmlns="http://www.opengis.net/kml/2.2">
7
+ <Folder>
8
+ <name><xsl:value-of select="/project/name"/></name>
9
+ <xsl:for-each select="/project/floors/floor">
10
+ <Folder>
11
+ <name><xsl:value-of select="name"/></name>
12
+ <xsl:if test="position() &gt; 1">
13
+ <visibility>0</visibility>
14
+ </xsl:if>
15
+ <xsl:apply-templates select="designs/design"/>
16
+ </Folder>
17
+ </xsl:for-each>
18
+ </Folder>
19
+ </kml>
20
+ </xsl:template>
21
+
22
+ <xsl:template match="design">
23
+ <Placemark>
24
+ <name><xsl:value-of select="name"/></name>
25
+ <visibility>0</visibility>
26
+ <xsl:for-each select="objects/object">
27
+ <xsl:variable name="refid" select="asset/@refid"/>
28
+ <xsl:if test="../../assets/asset[@id=$refid]/url3d">
29
+ <Model>
30
+ <altitudeMode>relativeToGround</altitudeMode>
31
+ <Location>
32
+ <longitude><xsl:value-of select="points"/></longitude>
33
+ <latitude><xsl:value-of select="points"/></latitude>
34
+ <altitude><xsl:value-of select="points"/></altitude>
35
+ </Location>
36
+ <Orientation>
37
+ <heading><xsl:value-of select="rotation"/></heading>
38
+ <tilt><xsl:value-of select="rotation"/></tilt>
39
+ <roll><xsl:value-of select="rotation"/></roll>
40
+ </Orientation>
41
+ <Scale>
42
+ <x><xsl:value-of select="size"/></x>
43
+ <y><xsl:value-of select="size"/></y>
44
+ <z><xsl:value-of select="size"/></z>
45
+ </Scale>
46
+ <xsl:for-each select="asset">
47
+ <Link>
48
+ <href>
49
+ <xsl:value-of select="../../../assets/asset[@id=$refid]/url3d"/>
50
+ </href>
51
+ </Link>
52
+ </xsl:for-each>
53
+ </Model>
54
+ </xsl:if>
55
+ </xsl:for-each>
56
+ </Placemark>
57
+ </xsl:template>
58
+
59
+ </xsl:stylesheet>
metadata ADDED
@@ -0,0 +1,117 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: fml
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.1
5
+ platform: ruby
6
+ authors:
7
+ - Dusan Maliarik
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-09-23 00:00:00 +02:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: libxml-ruby
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: "0"
24
+ version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: rubyzip
27
+ type: :runtime
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: "0"
34
+ version:
35
+ description: Floor plan document toolkit
36
+ email: dusan.maliarik@gmail.com
37
+ executables:
38
+ - fml2dae.rb
39
+ - fml2obj.rb
40
+ extensions: []
41
+
42
+ extra_rdoc_files: []
43
+
44
+ files:
45
+ - lib/keyhole/archive.rb
46
+ - lib/floorplanner/opening3d.rb
47
+ - bin/fml2dae.rb
48
+ - xml/fml2kml.xsl
49
+ - xml/fml.rng
50
+ - xml/collada_schema_1_4.xsd
51
+ - lib/floorplanner/design.rb
52
+ - lib/floorplanner/collada_export.rb
53
+ - views/design.dae.erb
54
+ - lib/geom/plane.rb
55
+ - lib/geom.rb
56
+ - lib/floorplanner/area_builder.rb
57
+ - lib/config.yml
58
+ - .gitignore
59
+ - lib/geom/intersection.rb
60
+ - lib/geom/ear_trim.rb
61
+ - lib/geom/connection.rb
62
+ - lib/floorplanner.rb
63
+ - fml.gemspec
64
+ - lib/geom/polygon.rb
65
+ - lib/geom/edge.rb
66
+ - lib/floorplanner/asset.rb
67
+ - views/design.rib.erb
68
+ - lib/geom/matrix3d.rb
69
+ - lib/floorplanner/rib_export.rb
70
+ - lib/floorplanner/obj_export.rb
71
+ - Rakefile
72
+ - README
73
+ - views/design.obj.erb
74
+ - lib/geom/triangle.rb
75
+ - lib/geom/triangle_mesh.rb
76
+ - lib/floorplanner/wall_builder.rb
77
+ - lib/floorplanner/svg_export.rb
78
+ - lib/collada/geometry.rb
79
+ - views/design.svg.erb
80
+ - tasks/github-gem.rake
81
+ - lib/geom/vertex.rb
82
+ - lib/geom/glu_tess.rb
83
+ - lib/floorplanner/wall3d.rb
84
+ - lib/floorplanner/document.rb
85
+ - bin/fml2obj.rb
86
+ - lib/geom/number.rb
87
+ - lib/collada/document.rb
88
+ has_rdoc: true
89
+ homepage: http://floorplanner.com/
90
+ licenses: []
91
+
92
+ post_install_message:
93
+ rdoc_options: []
94
+
95
+ require_paths:
96
+ - lib
97
+ required_ruby_version: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - ">="
100
+ - !ruby/object:Gem::Version
101
+ version: "0"
102
+ version:
103
+ required_rubygems_version: !ruby/object:Gem::Requirement
104
+ requirements:
105
+ - - ">="
106
+ - !ruby/object:Gem::Version
107
+ version: 1.3.0
108
+ version:
109
+ requirements: []
110
+
111
+ rubyforge_project:
112
+ rubygems_version: 1.3.5
113
+ signing_key:
114
+ specification_version: 2
115
+ summary: Floorplanner.com FML document toolkit
116
+ test_files: []
117
+