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.
- data/.gitignore +8 -0
- data/README +1 -0
- data/Rakefile +3 -0
- data/bin/fml2dae.rb +15 -0
- data/bin/fml2obj.rb +10 -0
- data/fml.gemspec +36 -0
- data/lib/collada/document.rb +101 -0
- data/lib/collada/geometry.rb +110 -0
- data/lib/config.yml +17 -0
- data/lib/floorplanner/area_builder.rb +42 -0
- data/lib/floorplanner/asset.rb +185 -0
- data/lib/floorplanner/collada_export.rb +118 -0
- data/lib/floorplanner/design.rb +108 -0
- data/lib/floorplanner/document.rb +68 -0
- data/lib/floorplanner/obj_export.rb +24 -0
- data/lib/floorplanner/opening3d.rb +140 -0
- data/lib/floorplanner/rib_export.rb +24 -0
- data/lib/floorplanner/svg_export.rb +25 -0
- data/lib/floorplanner/wall3d.rb +97 -0
- data/lib/floorplanner/wall_builder.rb +165 -0
- data/lib/floorplanner.rb +52 -0
- data/lib/geom/connection.rb +14 -0
- data/lib/geom/ear_trim.rb +52 -0
- data/lib/geom/edge.rb +89 -0
- data/lib/geom/glu_tess.rb +34 -0
- data/lib/geom/intersection.rb +38 -0
- data/lib/geom/matrix3d.rb +141 -0
- data/lib/geom/number.rb +104 -0
- data/lib/geom/plane.rb +36 -0
- data/lib/geom/polygon.rb +264 -0
- data/lib/geom/triangle.rb +38 -0
- data/lib/geom/triangle_mesh.rb +94 -0
- data/lib/geom/vertex.rb +33 -0
- data/lib/geom.rb +13 -0
- data/lib/keyhole/archive.rb +36 -0
- data/tasks/github-gem.rake +315 -0
- data/views/design.dae.erb +439 -0
- data/views/design.obj.erb +17 -0
- data/views/design.rib.erb +17 -0
- data/views/design.svg.erb +42 -0
- data/xml/collada_schema_1_4.xsd +11046 -0
- data/xml/fml.rng +268 -0
- data/xml/fml2kml.xsl +59 -0
- 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() > 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
|
+
|