fml 0.2.3 → 0.2.4

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.
@@ -127,8 +127,22 @@ module GithubGem
127
127
  release_tasks = [:release_checks, :set_version, :build, :github_release, :gemcutter_release]
128
128
  # release_tasks << [:rubyforge_release] if gemspec.rubyforge_project
129
129
 
130
- desc "Release a new verison of the gem"
130
+ desc "Release a new version of the gem using the VERSION environment variable"
131
131
  task(:release => release_tasks) { release_task }
132
+
133
+ namespace(:release) do
134
+ desc "Release the next version of the gem, by incrementing the last version segment by 1"
135
+ task(:next => [:next_version] + release_tasks) { release_task }
136
+
137
+ desc "Release the next version of the gem, using a patch increment (0.0.1)"
138
+ task(:patch => [:next_patch_version] + release_tasks) { release_task }
139
+
140
+ desc "Release the next version of the gem, using a minor increment (0.1.0)"
141
+ task(:minor => [:next_minor_version] + release_tasks) { release_task }
142
+
143
+ desc "Release the next version of the gem, using a major increment (1.0.0)"
144
+ task(:major => [:next_major_version] + release_tasks) { release_task }
145
+ end
132
146
 
133
147
  # task(:check_rubyforge) { check_rubyforge_task }
134
148
  # task(:rubyforge_release) { rubyforge_release_task }
@@ -137,6 +151,11 @@ module GithubGem
137
151
  task(:tag_version) { tag_version_task }
138
152
  task(:commit_modified_files) { commit_modified_files_task }
139
153
 
154
+ task(:next_version) { next_version_task }
155
+ task(:next_patch_version) { next_version_task(:patch) }
156
+ task(:next_minor_version) { next_version_task(:minor) }
157
+ task(:next_major_version) { next_version_task(:major) }
158
+
140
159
  desc "Updates the gem release tasks with the latest version on Github"
141
160
  task(:update_tasks) { update_tasks_task }
142
161
  end
@@ -160,6 +179,32 @@ module GithubGem
160
179
  sh "mv #{gemspec.name}-#{gemspec.version}.gem pkg/#{gemspec.name}-#{gemspec.version}.gem"
161
180
  end
162
181
 
182
+ def newest_version
183
+ git.tags.map { |tag| tag.name.split('-').last }.compact.map { |v| Gem::Version.new(v) }.max || Gem::Version.new('0.0.0')
184
+ end
185
+
186
+ def next_version(increment = nil)
187
+ next_version = newest_version.segments
188
+ increment_index = case increment
189
+ when :micro then 3
190
+ when :patch then 2
191
+ when :minor then 1
192
+ when :major then 0
193
+ else next_version.length - 1
194
+ end
195
+
196
+ next_version[increment_index] ||= 0
197
+ next_version[increment_index] = next_version[increment_index].succ
198
+ ((increment_index + 1)...next_version.length).each { |i| next_version[i] = 0 }
199
+
200
+ Gem::Version.new(next_version.join('.'))
201
+ end
202
+
203
+ def next_version_task(increment = nil)
204
+ ENV['VERSION'] = next_version(increment).version
205
+ puts "Releasing version #{ENV['VERSION']}..."
206
+ end
207
+
163
208
  # Updates the version number in the gemspec file, the VERSION constant in the main
164
209
  # include file and the contents of the VERSION file.
165
210
  def version_task
@@ -173,9 +218,7 @@ module GithubGem
173
218
  def check_version_task
174
219
  raise "#{ENV['VERSION']} is not a valid version number!" if ENV['VERSION'] && !Gem::Version.correct?(ENV['VERSION'])
175
220
  proposed_version = Gem::Version.new(ENV['VERSION'] || gemspec.version)
176
- # Loads the latest version number using the created tags
177
- newest_version = git.tags.map { |tag| tag.name.split('-').last }.compact.map { |v| Gem::Version.new(v) }.max
178
- raise "This version (#{proposed_version}) is not higher than the highest tagged version (#{newest_version})" if newest_version && newest_version >= proposed_version
221
+ raise "This version (#{proposed_version}) is not higher than the highest tagged version (#{newest_version})" if newest_version >= proposed_version
179
222
  end
180
223
 
181
224
  # Checks whether the current branch is not diverged from the remote branch
data/views/design.dae.erb CHANGED
@@ -10,20 +10,6 @@
10
10
  <up_axis>Z_UP</up_axis>
11
11
  </asset>
12
12
 
13
- <library_cameras>
14
- <camera id="main-cam">
15
- <optics>
16
- <technique_common>
17
- <perspective>
18
- <yfov>70</yfov>
19
- <znear>0.1</znear>
20
- <zfar>100.0</zfar>
21
- </perspective>
22
- </technique_common>
23
- </optics>
24
- </camera>
25
- </library_cameras>
26
-
27
13
  <library_materials id="surrounding-materials">
28
14
  <material id="walls-material" name="WallsMaterial">
29
15
  <instance_effect url="#walls-fx"/>
@@ -36,7 +22,7 @@
36
22
  <instance_effect url="#area_<%= area_mesh.data[:id] %>-fx"/>
37
23
  </material>
38
24
  <% end %>
39
- <% unless @xrefs; @assets.each_value do |asset| %>
25
+ <% unless @conf[:xrefs]; @assets.each_value do |asset| %>
40
26
  <% asset.library_materials.each do |materials| %>
41
27
  <%= materials.to_s %>
42
28
  <% end %>
@@ -79,6 +65,7 @@
79
65
  </technique>
80
66
  </profile_COMMON>
81
67
  </effect>
68
+ <% if @conf[:window_glass] %>
82
69
  <effect id="windows-fx">
83
70
  <profile_COMMON>
84
71
  <technique>
@@ -114,6 +101,7 @@
114
101
  </technique>
115
102
  </profile_COMMON>
116
103
  </effect>
104
+ <% end %>
117
105
  <% @areas.each do |area_mesh|; id = area_mesh.data[:id].to_s %>
118
106
  <effect id="area_<%= id %>-fx" name="<%= area_mesh.data[:name] %>">
119
107
  <% if area_mesh.data[:texture] %>
@@ -124,18 +112,18 @@
124
112
  </extra>
125
113
  <% end %>
126
114
  <profile_COMMON>
127
- <% if area_mesh.data[:texture] %>
115
+ <% if area_mesh.data[:texture] %>
128
116
  <newparam sid="area_<%= id %>-surface">
129
- <surface type="2D">
130
- <init_from>area_<%= id %>-image</init_from>
131
- </surface>
117
+ <surface type="2D">
118
+ <init_from>area_<%= id %>-image</init_from>
119
+ </surface>
132
120
  </newparam>
133
121
  <newparam sid="area_<%= id %>-sampler">
134
- <sampler2D>
135
- <source>area_<%= id %>-surface</source>
136
- </sampler2D>
122
+ <sampler2D>
123
+ <source>area_<%= id %>-surface</source>
124
+ </sampler2D>
137
125
  </newparam>
138
- <% end %>
126
+ <% end %>
139
127
  <technique>
140
128
  <phong>
141
129
  <emission>
@@ -145,11 +133,11 @@
145
133
  <color>0.1 0.1 0.1 1</color>
146
134
  </ambient>
147
135
  <diffuse>
148
- <% if area_mesh.data[:texture] %>
149
- <texture texture="area_<%= id %>-sampler"/>
150
- <% else %>
136
+ <% if area_mesh.data[:texture] %>
137
+ <texture texture="area_<%= id %>-sampler" texcoord="TEXCOORD" />
138
+ <% else %>
151
139
  <color><%= area_mesh.data[:color].join(' ') %> 1</color>
152
- <% end %>
140
+ <% end %>
153
141
  </diffuse>
154
142
  <specular>
155
143
  <color>0 0 0 1</color>
@@ -174,7 +162,7 @@
174
162
  </profile_COMMON>
175
163
  </effect>
176
164
  <% end %>
177
- <% unless @xrefs; @assets.each_value do |asset| %>
165
+ <% unless @conf[:xrefs]; @assets.each_value do |asset| %>
178
166
  <% asset.library_effects.each do |effects| %>
179
167
  <%= effects.to_s %>
180
168
  <% end %>
@@ -182,18 +170,16 @@
182
170
  </library_effects>
183
171
 
184
172
  <library_images>
185
- <% @areas.each do |area_mesh|; if area_mesh.data[:texture] %>
186
- <image id="area_<%= area_mesh.data[:id] %>-image" name="<%= area_mesh.data[:name] %>">
187
- <init_from><%= Floorplanner.config['area_textures_path'] +
188
- area_mesh.data[:texture].gsub('textures/2d/','').gsub(/\.swf$/,'.png') %></init_from>
189
- </image>
190
- <% end; end %>
191
-
192
- <% unless @xrefs; @assets.each_value do |asset| %>
173
+ <% unless @conf[:xrefs]; @assets.each_value do |asset| %>
193
174
  <% asset.library_images.each do |image| %>
194
175
  <%= image.to_s %>
195
176
  <% end %>
196
177
  <% end; end %>
178
+ <% @areas.each do |area|; next unless area.data[:texture] %>
179
+ <image id="area_<%= area.data[:id].to_s %>-image">
180
+ <init_from><%= area.data[:texture] %></init_from>
181
+ </image>
182
+ <% end %>
197
183
  </library_images>
198
184
 
199
185
  <library_geometries id="surrounding-geometry">
@@ -227,6 +213,7 @@
227
213
  </mesh>
228
214
  </geometry>
229
215
 
216
+ <% if @conf[:window_glass] %>
230
217
  <geometry id="windows-geom" name="WindowsGeometry">
231
218
  <%
232
219
  windows_vertices = @walls.windows.collect {|w| w.vertices}.flatten
@@ -263,6 +250,8 @@
263
250
  </triangles>
264
251
  </mesh>
265
252
  </geometry>
253
+ <% end %>
254
+
266
255
  <% @areas.each do |area_mesh|; id = area_mesh.data[:id] %>
267
256
  <geometry id="area_<%= id %>-geom" name="Area_<%= id %>_<%= area_mesh.data[:name] %>-Geometry">
268
257
  <mesh>
@@ -282,11 +271,11 @@
282
271
  </source>
283
272
 
284
273
  <source id="area_<%= id %>-uvs" name="texcoord">
285
- <float_array id="area_<%= id %>-uvs-array" count="<%= area_mesh.texcoord.length %>">
274
+ <float_array id="area_<%= id %>-uvs-array" count="<%= area_mesh.texcoord.length*2 %>">
286
275
  <%= area_mesh.texcoord.map{|n| [n.u,n.v]}.flatten.join(' ') %>
287
276
  </float_array>
288
277
  <technique_common>
289
- <accessor count="44" source="#area_<%= id %>-uvs-array" stride="2">
278
+ <accessor count="<%= area_mesh.texcoord.length %>" source="#area_<%= id %>-uvs-array" stride="2">
290
279
  <param name="S" type="float"/>
291
280
  <param name="T" type="float"/>
292
281
  </accessor>
@@ -313,13 +302,13 @@
313
302
  </mesh>
314
303
  </geometry>
315
304
  <% end %>
316
- <% unless @xrefs; @assets.each_value do |asset| %>
305
+ <% unless @conf[:xrefs]; @assets.each_value do |asset| %>
317
306
  <% asset.library_geometries.each do |geometries| %>
318
307
  <%= geometries.to_s %>
319
308
  <% end %>
320
309
  <% end; end %>
321
310
  </library_geometries>
322
- <% unless @xrefs %>
311
+ <% unless @conf[:xrefs] %>
323
312
  <library_nodes>
324
313
  <% @assets.each_value do |asset| %>
325
314
  <% asset.library_nodes.each do |nodes| %>
@@ -329,42 +318,7 @@
329
318
  </library_nodes>
330
319
  <% end %>
331
320
  <library_visual_scenes>
332
- <visual_scene id="VisualSceneNode" name="<%= @name %>">
333
- <extra>
334
- <technique sid="sunflow">
335
- <image>
336
- <resolution>800 600</resolution>
337
- <aa>0 2</aa>
338
- <filter>gaussian</filter>
339
- <sampler>ipr</sampler>
340
- </image>
341
- <trace_depths>
342
- <diffuse>4</diffuse>
343
- <reflection>2</reflection>
344
- </trace_depths>
345
- <gi>
346
- <type>ambocc</type>
347
- <bright>1 1 1</bright>
348
- <dark>0 0 0</dark>
349
- <samples>64</samples>
350
- <maxdist>3.0 </maxdist>
351
- </gi>
352
- <sunsky>
353
- <up>0 0 1</up>
354
- <east>1 0 0</east>
355
- <sundir>0.2 0.4 0.7</sundir>
356
- <ground>1 1 1</ground>
357
- </sunsky>
358
- </technique>
359
- </extra>
360
- <node id="Camera" name="Camera">
361
- <lookat>
362
- 9.0 -1.0 1.4
363
- 8.0 -2.0 1.4
364
- 0.0 0.0 1.0
365
- </lookat>
366
- <instance_camera url="#main-cam"/>
367
- </node>
321
+ <visual_scene id="VisualSceneNode" name="<%= @doc.name %>">
368
322
  <node id="Walls" name="Walls">
369
323
  <instance_geometry url="#walls-geom">
370
324
  <bind_material>
@@ -374,6 +328,8 @@
374
328
  </bind_material>
375
329
  </instance_geometry>
376
330
  </node>
331
+
332
+ <% if @conf[:window_glass] %>
377
333
  <node id="Windows" name="Windows">
378
334
  <instance_geometry url="#windows-geom">
379
335
  <bind_material>
@@ -383,6 +339,8 @@
383
339
  </bind_material>
384
340
  </instance_geometry>
385
341
  </node>
342
+ <% end %>
343
+
386
344
  <node id="Areas" name="Areas">
387
345
  <% @areas.each do |area_mesh|; id = area_mesh.data[:id] %>
388
346
  <node id="Area_<%= id %>" name="Area_<%= id %>">
@@ -394,7 +352,7 @@
394
352
  </bind_material>
395
353
  </instance_geometry>
396
354
  </node>
397
- <% if area_mesh.data[:type] == 'generated_area' %>
355
+ <% if @conf[:ceiling] && area_mesh.data[:type] == :generated_area %>
398
356
  <node id="Area_<%= id %>-cap" name="Area_<%= id %>-cap">
399
357
  <translate>0.0 0.0 <%= @areas.ceiling_z %></translate>
400
358
  <instance_geometry url="#area_<%= id %>-geom">
@@ -410,21 +368,8 @@
410
368
  </node>
411
369
  <% @elements.each do |element| %>
412
370
  <node name="<%= element[:asset].title %>">
413
- <translate><%= element[:position].to_floats %></translate>
414
- <% if element[:matrix] %>
415
- <matrix><%= element[:matrix].to_a.join ' ' %></matrix>
416
- <% end %>
417
- <% if element[:rotation].x > 0 %>
418
- <rotate sid="rotateX">1 0 0 <%= element[:rotation].x %></rotate>
419
- <% end %>
420
- <% if element[:rotation].y > 0 %>
421
- <rotate sid="rotateY">0 1 0 <%= element[:rotation].y %></rotate>
422
- <% end %>
423
- <% if element[:rotation].z > 0 %>
424
- <rotate sid="rotateZ">0 0 1 <%= element[:rotation].z %></rotate>
425
- <% end %>
426
- <scale><%= element[:scale].to_floats %></scale>
427
- <% if @xrefs %>
371
+ <matrix><%= element[:matrix].to_a.join ' ' %></matrix>
372
+ <% if @conf[:xrefs] %>
428
373
  <instance_node url="<%= element[:asset].dae_path %>"/>
429
374
  <% else %>
430
375
  <%= element[:asset].visual_scene_node.to_s %>
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 2
8
- - 3
9
- version: 0.2.3
8
+ - 4
9
+ version: 0.2.4
10
10
  platform: ruby
11
11
  authors:
12
12
  - Dusan Maliarik
@@ -14,13 +14,14 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-05-18 00:00:00 +02:00
17
+ date: 2010-11-25 00:00:00 +01:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
- name: libxml-ruby
21
+ name: nokogiri
22
22
  prerelease: false
23
23
  requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
24
25
  requirements:
25
26
  - - ">="
26
27
  - !ruby/object:Gem::Version
@@ -33,6 +34,7 @@ dependencies:
33
34
  name: rubyzip
34
35
  prerelease: false
35
36
  requirement: &id002 !ruby/object:Gem::Requirement
37
+ none: false
36
38
  requirements:
37
39
  - - ">="
38
40
  - !ruby/object:Gem::Version
@@ -41,59 +43,68 @@ dependencies:
41
43
  version: "0"
42
44
  type: :runtime
43
45
  version_requirements: *id002
46
+ - !ruby/object:Gem::Dependency
47
+ name: roxml
48
+ prerelease: false
49
+ requirement: &id003 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ segments:
55
+ - 0
56
+ version: "0"
57
+ type: :runtime
58
+ version_requirements: *id003
44
59
  description: Floor plan document toolkit
45
60
  email: dusan.maliarik@gmail.com
46
61
  executables:
47
62
  - fml2dae.rb
48
- - fml2obj.rb
49
63
  extensions: []
50
64
 
51
65
  extra_rdoc_files: []
52
66
 
53
67
  files:
54
- - lib/keyhole/archive.rb
55
- - lib/floorplanner/opening3d.rb
68
+ - .gitignore
69
+ - README
70
+ - Rakefile
71
+ - TODO
56
72
  - bin/fml2dae.rb
57
- - xml/fml2kml.xsl
58
- - xml/fml.rng
59
- - xml/collada_schema_1_4.xsd
60
- - lib/floorplanner/design.rb
73
+ - fml.gemspec
74
+ - lib/collada/document.rb
75
+ - lib/collada/geometry.rb
76
+ - lib/config.yml
77
+ - lib/floorplanner.rb
78
+ - lib/floorplanner/area_builder.rb
79
+ - lib/floorplanner/asset.rb
61
80
  - lib/floorplanner/collada_export.rb
62
- - views/design.dae.erb
63
- - lib/geom/plane.rb
81
+ - lib/floorplanner/design.rb
82
+ - lib/floorplanner/document.rb
83
+ - lib/floorplanner/opening3d.rb
84
+ - lib/floorplanner/svg_export.rb
85
+ - lib/floorplanner/wall3d.rb
86
+ - lib/floorplanner/wall_builder.rb
87
+ - lib/floorplanner/xml.rb
64
88
  - lib/geom.rb
65
- - lib/floorplanner/area_builder.rb
66
- - lib/config.yml
67
- - .gitignore
68
- - lib/geom/intersection.rb
69
- - lib/geom/ear_trim.rb
70
89
  - lib/geom/connection.rb
71
- - lib/floorplanner.rb
72
- - fml.gemspec
73
- - lib/geom/polygon.rb
90
+ - lib/geom/ear_trim.rb
74
91
  - lib/geom/edge.rb
75
- - lib/floorplanner/asset.rb
76
- - views/design.rib.erb
92
+ - lib/geom/glu_tess.rb
93
+ - lib/geom/intersection.rb
77
94
  - lib/geom/matrix3d.rb
78
- - lib/floorplanner/rib_export.rb
79
- - lib/floorplanner/obj_export.rb
80
- - Rakefile
81
- - README
82
- - views/design.obj.erb
95
+ - lib/geom/number.rb
96
+ - lib/geom/plane.rb
97
+ - lib/geom/polygon.rb
83
98
  - lib/geom/triangle.rb
84
99
  - lib/geom/triangle_mesh.rb
85
- - lib/floorplanner/wall_builder.rb
86
- - lib/floorplanner/svg_export.rb
87
- - lib/collada/geometry.rb
88
- - views/design.svg.erb
89
- - tasks/github-gem.rake
90
100
  - lib/geom/vertex.rb
91
- - lib/geom/glu_tess.rb
92
- - lib/floorplanner/wall3d.rb
93
- - lib/floorplanner/document.rb
94
- - bin/fml2obj.rb
95
- - lib/geom/number.rb
96
- - lib/collada/document.rb
101
+ - lib/keyhole/archive.rb
102
+ - tasks/github-gem.rake
103
+ - views/design.dae.erb
104
+ - views/design.svg.erb
105
+ - xml/collada_schema_1_4.xsd
106
+ - xml/fml.rng
107
+ - xml/fml2kml.xsl
97
108
  has_rdoc: true
98
109
  homepage: http://floorplanner.com/
99
110
  licenses: []
@@ -104,6 +115,7 @@ rdoc_options: []
104
115
  require_paths:
105
116
  - lib
106
117
  required_ruby_version: !ruby/object:Gem::Requirement
118
+ none: false
107
119
  requirements:
108
120
  - - ">="
109
121
  - !ruby/object:Gem::Version
@@ -111,6 +123,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
111
123
  - 0
112
124
  version: "0"
113
125
  required_rubygems_version: !ruby/object:Gem::Requirement
126
+ none: false
114
127
  requirements:
115
128
  - - ">="
116
129
  - !ruby/object:Gem::Version
@@ -122,7 +135,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
122
135
  requirements: []
123
136
 
124
137
  rubyforge_project:
125
- rubygems_version: 1.3.6
138
+ rubygems_version: 1.3.7
126
139
  signing_key:
127
140
  specification_version: 2
128
141
  summary: Floorplanner.com FML document toolkit
data/bin/fml2obj.rb DELETED
@@ -1,10 +0,0 @@
1
- #!/usr/bin/env ruby
2
- $: << File.join(File.dirname(__FILE__), "/../lib" )
3
- require 'floorplanner'
4
-
5
- if ARGV.length < 2
6
- puts "\n Usage: fml2dae.rb design_id path/to/fml"
7
- else
8
- doc = Floorplanner::Document.new(ARGV[1])
9
- doc.to_obj(ARGV[0],ARGV[2])
10
- end
@@ -1,24 +0,0 @@
1
- module Floorplanner
2
- class Document
3
-
4
- def to_obj(design_id,out_path)
5
- @design = Design.new(@xml,design_id)
6
- @design.build_geometries
7
- obj = File.new(out_path,'w')
8
- obj.write @design.to_obj
9
- obj.close
10
- end
11
-
12
- end
13
-
14
- module ObjExport
15
- def to_obj
16
- raise "No geometries to export. Call build_geometries first" unless @areas && @walls
17
-
18
- template = ERB.new(
19
- File.read(
20
- File.join(Floorplanner.config['views_path'],'design.obj.erb')))
21
- template.result(binding)
22
- end
23
- end
24
- end
@@ -1,24 +0,0 @@
1
- module Floorplanner
2
- class Document
3
-
4
- def to_rib(design_id,out_path)
5
- @design = Design.new(@xml,design_id)
6
- @design.build_geometries
7
- rib = File.new(out_path,'w')
8
- rib.write @design.to_rib
9
- rib.close
10
- end
11
-
12
- end
13
-
14
- module RibExport
15
- def to_rib
16
- raise "No geometries to export. Call build_geometries first" unless @areas && @walls
17
-
18
- template = ERB.new(
19
- File.read(
20
- File.join(Floorplanner.config['views_path'],'design.rib.erb')))
21
- template.result(binding)
22
- end
23
- end
24
- end
data/views/design.obj.erb DELETED
@@ -1,17 +0,0 @@
1
- # Floorplanner.com
2
- # <%= @name %>
3
- <%
4
- vertices = @walls.vertices + @areas.vertices
5
- faces = @walls.faces + @areas.faces
6
- %>
7
- <% vertices.each do |v| %>
8
- v <%= [v.x,v.z,v.y].join(' ') %><% end %>
9
- <%
10
- faces.each do |f|
11
- v = [
12
- vertices.index(f.vertices[0]),
13
- vertices.index(f.vertices[1]),
14
- vertices.index(f.vertices[2])
15
- ]
16
- if v.compact.length == 3 %>
17
- f <%= v.collect{|w|w+1}.join(' ') %><% end ; end %>
data/views/design.rib.erb DELETED
@@ -1,17 +0,0 @@
1
- Display "design.tif" "file" "rgb"
2
- Format 480 320 -1
3
- Projection "perspective" "fov" 45
4
- Translate -5 -2 22
5
- Rotate 240 1 0 0
6
- Rotate -40 0 0 1
7
- WorldBegin
8
-   LightSource "ambientlight" 1 "intensity" 1.0
9
-   LightSource "distantlight" 2 "from" [0 0 4] "to" [0 0 0] "intensity" 5.0
10
-   Color [ 0.95 0.95 0.95 ]
11
- <% @walls.faces.each do |face| %>
12
-   Polygon "P" [ <%= face.vertices.collect{|v| [v.x,v.y,v.z]}.flatten.join(' ') %> ]
13
- <% end %>
14
- <% @areas.faces.each do |face| %>
15
-   Polygon "P" [ <%= face.vertices.collect{|v| [v.x,v.y,v.z]}.flatten.join(' ') %> ]
16
- <% end %>
17
- WorldEnd