fml 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
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
+