microstation 0.4.1 → 0.8.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (110) hide show
  1. checksums.yaml +7 -0
  2. data/.autotest +23 -23
  3. data/.rspec +2 -2
  4. data/Gemfile +29 -10
  5. data/History.txt +6 -6
  6. data/LICENSE.adoc +22 -0
  7. data/Manifest.txt +91 -60
  8. data/README.adoc +131 -0
  9. data/Rakefile +72 -30
  10. data/bin/dgn2pdf +36 -37
  11. data/bin/dgn_template +107 -0
  12. data/bin/pw_print +35 -0
  13. data/cad_files/drawing_faatitle_in_non_default_model.dgn +0 -0
  14. data/cad_files/drawing_no_block.dgn +0 -0
  15. data/cad_files/drawing_with_3_block.dgn +0 -0
  16. data/cad_files/drawing_with_block.dgn +0 -0
  17. data/cad_files/drawing_with_text.dgn +0 -0
  18. data/cad_files/seed2d.dgn +0 -0
  19. data/cad_files/seed3d.dgn +0 -0
  20. data/lib/microstation/app.rb +781 -286
  21. data/lib/microstation/cad_input_queue.rb +100 -25
  22. data/lib/microstation/cell.rb +191 -0
  23. data/lib/microstation/changer.rb +70 -0
  24. data/lib/microstation/configuration.rb +193 -57
  25. data/lib/microstation/criteria_creation_t.rb +23 -0
  26. data/lib/microstation/dir.rb +252 -252
  27. data/lib/microstation/directory.rb +46 -0
  28. data/lib/microstation/drawing.rb +686 -189
  29. data/lib/microstation/element.rb +311 -0
  30. data/lib/microstation/enumerator.rb +32 -29
  31. data/lib/microstation/errors.rb +17 -0
  32. data/lib/microstation/event_handler.rb +28 -0
  33. data/lib/microstation/ext/pathname.rb +23 -25
  34. data/lib/microstation/ext/win32ole.rb +7 -0
  35. data/lib/microstation/extensions/faa.rb +124 -0
  36. data/lib/microstation/file_tests.rb +68 -0
  37. data/lib/microstation/functions.rb +60 -0
  38. data/lib/microstation/graphics.rb +35 -0
  39. data/lib/microstation/line.rb +19 -0
  40. data/lib/microstation/model.rb +45 -0
  41. data/lib/microstation/model_trait.rb +189 -0
  42. data/lib/microstation/ole_cad_input_message.rb +101 -0
  43. data/lib/microstation/ole_helper.rb +152 -0
  44. data/lib/microstation/pdf_support.rb +40 -40
  45. data/lib/microstation/point3d.rb +71 -0
  46. data/lib/microstation/primitive_command_interface.rb +66 -0
  47. data/lib/microstation/properties.rb +61 -57
  48. data/lib/microstation/property_handler.rb +48 -0
  49. data/lib/microstation/scan/color.rb +38 -38
  50. data/lib/microstation/scan/criteria.rb +89 -85
  51. data/lib/microstation/scan/klass.rb +43 -43
  52. data/lib/microstation/scan/level.rb +38 -38
  53. data/lib/microstation/scan/line_style.rb +45 -45
  54. data/lib/microstation/scan/line_weight.rb +33 -33
  55. data/lib/microstation/scan/range.rb +19 -0
  56. data/lib/microstation/scan/scan_trait.rb +51 -0
  57. data/lib/microstation/scan/subtype.rb +40 -40
  58. data/lib/microstation/scan/type.rb +134 -109
  59. data/lib/microstation/scan_trait.rb +62 -0
  60. data/lib/microstation/scanner.rb +24 -24
  61. data/lib/microstation/tag.rb +87 -58
  62. data/lib/microstation/tag_set.rb +385 -280
  63. data/lib/microstation/tag_set_trait.rb +51 -0
  64. data/lib/microstation/tagged_element.rb +105 -0
  65. data/lib/microstation/template.rb +90 -84
  66. data/lib/microstation/template_info.rb +172 -0
  67. data/lib/microstation/template_runner.rb +65 -0
  68. data/lib/microstation/text.rb +79 -54
  69. data/lib/microstation/text_node.rb +124 -74
  70. data/lib/microstation/ts/attribute.rb +140 -139
  71. data/lib/microstation/ts/instance.rb +146 -112
  72. data/lib/microstation/ts/tagset_trait.rb +49 -0
  73. data/lib/microstation/types.rb +91 -91
  74. data/lib/microstation/version.rb +5 -0
  75. data/lib/microstation/wrap.rb +28 -214
  76. data/lib/microstation.rb +252 -88
  77. data/plot/pdf-bw.plt +164 -164
  78. data/plot/pdf.plt +163 -163
  79. data/plot/png.plt +383 -383
  80. data/plot/tiff.plt +384 -384
  81. data/plot/wmbw.tbl +324 -66
  82. data/plot/wmcolor.tbl +62 -62
  83. data/spec/microstation/app_spec.rb +184 -0
  84. data/spec/microstation/configuration_spec.rb +131 -0
  85. data/spec/microstation/drawing_spec.rb +245 -0
  86. data/spec/microstation/functions_spec.rb +36 -0
  87. data/spec/microstation/tag_set_spec.rb +159 -0
  88. data/spec/microstation/template_spec.rb +159 -0
  89. data/spec/microstation/text_node_spec.rb +67 -0
  90. data/spec/microstation/text_spec.rb +42 -0
  91. data/spec/microstation_spec.rb +47 -36
  92. data/spec/spec_helper.rb +97 -31
  93. metadata +308 -84
  94. data/.gemtest +0 -0
  95. data/README.txt +0 -75
  96. data/lib/microstation/attributes.rb +0 -35
  97. data/lib/microstation/extensions/hash.rb +0 -27
  98. data/spec/app_spec.rb +0 -267
  99. data/spec/configuration_spec.rb +0 -122
  100. data/spec/drawing_spec.rb +0 -247
  101. data/spec/drawings/new_drawing.dgn +0 -0
  102. data/spec/drawings/test.dgn +0 -0
  103. data/spec/drawings/test1.dgn +0 -0
  104. data/spec/drawings/testfile.pdf +0 -0
  105. data/spec/enumerator_spec.rb +0 -60
  106. data/spec/scanner_spec.rb +0 -155
  107. data/spec/spec_app.rb +0 -11
  108. data/spec/tag_set_spec.rb +0 -123
  109. data/spec/text_node_spec.rb +0 -92
  110. data/spec/text_spec.rb +0 -62
@@ -1,280 +1,385 @@
1
- require File.join(File.dirname(__FILE__) , 'attributes')
2
- require File.join(File.dirname(__FILE__), 'ts/instance')
3
- require File.join(File.dirname(__FILE__), 'ts/attribute')
4
- module Microstation
5
-
6
- class TagSets
7
- include Enumerable
8
-
9
- def initialize(ole)
10
- @ole_obj = ole
11
- end
12
-
13
- def init_ts
14
- result = []
15
- @ole_obj.each do |ts|
16
- result << TagSet.new(ts)
17
- end
18
- result
19
- end
20
-
21
- def to_s
22
- "Tagsets: #{tagsets.to_s}"
23
- end
24
-
25
- def reset
26
- @tagsets = nil
27
- end
28
-
29
- def tagsets
30
- @tagsets ||= init_ts
31
- end
32
-
33
- def each
34
- tagsets.each do |obj|
35
- yield obj
36
- end
37
- end
38
-
39
- def find(name)
40
- return nil if empty?
41
- tagsets.find{|ts| ts.name == name}
42
- end
43
-
44
- def last
45
- tagsets[-1]
46
- end
47
-
48
- def [](name)
49
- find(name)
50
- end
51
-
52
- def remove(name)
53
- ts = find(name)
54
- if ts
55
- @ole_obj.Remove(name) rescue nil
56
- ts.close
57
- ts = nil
58
- end
59
- @tagsets = init_ts
60
- end
61
-
62
- def empty?
63
- tagsets.empty?
64
- end
65
-
66
- def create(name)
67
- raise if self[name]
68
- ole = @ole_obj.add(name)
69
- definer = Definer.new(ole)
70
- yield definer if block_given?
71
- @tagsets = init_ts
72
- ts = self[name]
73
- raise if ts.nil?
74
- definer = nil
75
- ts
76
- end
77
-
78
- def size
79
- tagsets.size
80
- end
81
-
82
- end
83
-
84
- class Definer
85
-
86
- attr_reader :tagset
87
-
88
- def initialize(tagset)
89
- @tagset = tagset
90
- end
91
-
92
-
93
- def add_attribute(name,type,options = {})
94
- ole_td = create_ole_definition(name, type)
95
- td = TS::Attribute.new(ole_td)
96
- td.prompt = options[:prompt] || name
97
- td.hidden = options[:is_hidden]
98
- td.constant = options[:is_constant] || false
99
- td.default = options[:default] if options[:default]
100
- #td.hidden = td.fetch(:is_hidden)
101
- yield td if block_given?
102
- td
103
- end
104
-
105
- private
106
-
107
- def tag_definitions
108
- tagset.ole_tag_definitions
109
- end
110
-
111
- def close
112
-
113
- end
114
-
115
- def ole_type(type)
116
- TS::Attribute.tag_type(type)
117
- end
118
-
119
- def create_ole_definition(name,type)
120
- tag_definitions.Add(name,ole_type(type))
121
- end
122
-
123
- end
124
-
125
- class Definition
126
-
127
- attr_reader :tagset
128
-
129
- def initialize(tagset)
130
- @tagset = tagset
131
- end
132
-
133
- def add_attribute(name,type,options={})
134
- td = definer.add_attribute(name,type,options)
135
- reset
136
- td
137
- end
138
-
139
- def definer
140
- @definer ||= Definer.new(tagset)
141
- end
142
-
143
- def ole_tag_definitions
144
- tagset.ole_tag_definitions
145
- end
146
-
147
- def init_definitions
148
- results = []
149
- ole_tag_definitions.each do |ole|
150
- results << TS::Attribute.new(ole, {definer: self})
151
- end
152
- results
153
- end
154
-
155
- def attributes
156
- @attributes ||= init_definitions
157
- end
158
-
159
- def attribute_names
160
- attributes.map{|a| a.name}
161
- end
162
-
163
- def reset
164
- @attributes = nil
165
- end
166
-
167
- def close
168
- attributes.each{| a| a.close}
169
- end
170
-
171
- def [](name)
172
- attributes.find{|d| d.name == name}
173
- end
174
-
175
- end
176
-
177
- class TagSet
178
-
179
- attr_reader :ole_obj
180
-
181
- def initialize(ole)
182
- @ole_obj = ole
183
- @instances = []
184
- end
185
-
186
- def instances
187
- Microstation.app.current_drawing.find_tagset_instances(self.name)
188
- end
189
-
190
-
191
- def add_attribute(name,type,options={})
192
- definition.add_attribute(name,type,options)
193
- end
194
-
195
- def definer
196
- @definer ||= Definer.new(self)
197
- end
198
-
199
- def ole_tag_definitions
200
- @ole_obj.TagDefinitions
201
- end
202
-
203
-
204
-
205
- # def ole_tag_definitions
206
- # @tag_definitions = @ole_obj.TagDefinitions
207
- # end
208
-
209
- def reset
210
- @tag_definitions = nil
211
- end
212
-
213
- def add_instance(array)
214
- @instances << TS::Instance.new(self,array)
215
- end
216
-
217
- def create_instance(group)
218
- TS::Instance.new(self,group)
219
- end
220
-
221
- def instances(drawing = Microstation.app.current_drawing)
222
- @instances = create_instances(drawing.scan_tags)
223
- end
224
-
225
- def create_instances(tags)
226
- mytags = tags_for_self(tags)
227
- grouped = grouped_tags_to_host(mytags)
228
- grouped.map{|group| create_instance(group)}
229
- end
230
-
231
- def tags_for_self(tags)
232
- tags.select{|t| t.tagset_name == name}
233
- end
234
-
235
- def grouped_tags_to_host(tags)
236
- tags.group_by{|t| t.base_element_id}.values
237
- end
238
-
239
-
240
- def all_tags_in_drawing
241
- Microstation.app.current_drawing.scan_tags
242
- end
243
-
244
-
245
- def definition
246
- @definition ||= Definition.new(self)
247
- end
248
-
249
- def close
250
- @ole_obj = nil
251
- end
252
-
253
-
254
- def name
255
- @ole_obj.name
256
- end
257
-
258
- def to_s
259
- "TagSet: #{name}"
260
- end
261
-
262
- def ==(other)
263
- @ole_obj == other.ole_obj
264
- end
265
-
266
- def attribute_names
267
- definition.attribute_names
268
- end
269
-
270
- def attributes
271
- definition.attributes
272
- end
273
-
274
- def [](name)
275
- definition[name]
276
- end
277
-
278
- end
279
-
280
- end
1
+ #require File.join(File.dirname(__FILE__) , 'attributes')
2
+ require File.join(File.dirname(__FILE__), 'ts/instance')
3
+ require File.join(File.dirname(__FILE__), 'ts/attribute')
4
+
5
+ module Microstation
6
+
7
+ module OleCollection
8
+
9
+ def initialize(ole_col)
10
+ @ole_obj = ole
11
+ end
12
+
13
+ def [](name)
14
+ ole_obj(name) rescue nil
15
+ end
16
+
17
+ def each
18
+ @ole_obj.each do |ts|
19
+ yield wrap(ts)
20
+ end
21
+ end
22
+
23
+ def wrap(ts)
24
+ ts
25
+ end
26
+
27
+ end
28
+
29
+
30
+ class TagSets
31
+ include Enumerable
32
+
33
+ attr_reader :drawing, :ole_obj
34
+
35
+ def initialize(drawing,ole)
36
+ raise if ole == nil
37
+ @drawing = drawing
38
+ @ole_obj = ole
39
+ end
40
+
41
+ def init_ts
42
+ result = []
43
+ @ole_obj.each do |ts|
44
+ result << TagSet.new(drawing,ts)
45
+ end
46
+ result
47
+ end
48
+
49
+ def to_s
50
+ "Tagsets: #{tagsets.to_s}"
51
+ end
52
+
53
+ def reset
54
+ @tagsets = nil
55
+ @drawing.reset_tagset_instances
56
+ end
57
+
58
+ def names
59
+ self.map{|ts| ts.name}
60
+ end
61
+
62
+
63
+ def tagsets
64
+ @tagsets ||= init_ts
65
+ end
66
+
67
+ def each
68
+ tagsets.each do |obj|
69
+ yield obj
70
+ end
71
+ end
72
+
73
+ def find(name)
74
+ return nil if empty?
75
+ tagsets.detect{|ts| ts.name == name}
76
+ end
77
+
78
+ def last
79
+ tagsets[-1]
80
+ end
81
+
82
+ def [](name)
83
+ find(name)
84
+ end
85
+
86
+ def remove(name)
87
+ ts = find(name)
88
+ if ts
89
+ @ole_obj.Remove(name) rescue nil
90
+ ts.close
91
+ ts = nil
92
+ end
93
+ reset
94
+ end
95
+
96
+ def empty?
97
+ tagsets.empty?
98
+ end
99
+
100
+ def create(name)
101
+ raise if self[name]
102
+
103
+ ole = @ole_obj.add(name) rescue binding.pry
104
+ # ts = Tagset.new(ole)
105
+ # yield definer if block_given?
106
+ reset
107
+ ts = self[name]
108
+ raise if ts.nil?
109
+ yield ts if block_given?
110
+ ts
111
+ end
112
+
113
+ def size
114
+ tagsets.size
115
+ end
116
+
117
+ end
118
+
119
+ # class Definer
120
+
121
+ # attr_reader :tagset
122
+
123
+ # def initialize(tagset)
124
+ # @tagset = tagset
125
+ # end
126
+
127
+
128
+ # def add_attribute(name,type,prompt: name, is_hidden: false, is_constant: false, default: nil)
129
+ # ole_td = create_ole_definition(name, type)
130
+ # td = TS::Attribute.new(ole_td)
131
+ # td.prompt = prompt
132
+ # td.hidden = is_hidden
133
+ # td.constant = is_constant
134
+ # td.default = default
135
+ # #td.hidden = td.fetch(:is_hidden)
136
+ # yield td if block_given?
137
+ # td
138
+ # end
139
+
140
+ # private
141
+
142
+ # def tag_definitions
143
+ # tagset.ole_tag_definitions
144
+ # end
145
+
146
+ # def close
147
+
148
+ # end
149
+
150
+ # def ole_type(type)
151
+ # TS::Attribute.tag_type(type)
152
+ # end
153
+
154
+ # def create_ole_definition(name,type)
155
+ # tag_definitions.Add(name,ole_type(type))
156
+ # end
157
+
158
+ # end
159
+
160
+
161
+
162
+ class Definition
163
+
164
+ attr_reader :tagset
165
+
166
+ def initialize(tagset)
167
+ @tagset = tagset
168
+ end
169
+
170
+ def add_attribute(*args, **kwargs)
171
+ td = create_attribute(*args, **kwargs)
172
+ yield td if block_given?
173
+ reset
174
+ td
175
+ end
176
+
177
+ # def definer
178
+ # @definer ||= Definer.new(tagset)
179
+ # end
180
+
181
+
182
+ def attributes
183
+ @attributes ||= init_definitions
184
+ end
185
+
186
+ def attribute_names
187
+ attributes.map{|a| a.name}
188
+ end
189
+
190
+ def reset
191
+ @attributes = nil
192
+ end
193
+
194
+ def close
195
+ attributes.each{| a| a.close}
196
+ end
197
+
198
+ def [](name)
199
+ attributes.find{|d| d.name == name}
200
+ end
201
+
202
+ protected
203
+
204
+ # def ole_tag_definitions
205
+ # tagset.ole_tag_definitions
206
+ # end
207
+
208
+ def ole_tag_definitions
209
+ @tagset.ole_obj.TagDefinitions
210
+ end
211
+
212
+ def create_ole_definition(name,type)
213
+ ole_tag_definitions.Add(name,ole_type(type))
214
+ end
215
+
216
+ def init_definitions
217
+ results = []
218
+ ole_tag_definitions.each do |ole|
219
+ results << TS::Attribute.new(ole, {definer: self})
220
+ end
221
+ results
222
+ end
223
+
224
+ def create_attribute(name,type,prompt: name, is_hidden: false, is_constant: false, default: nil)
225
+ ole_td = create_ole_definition(name, type)
226
+ td = TS::Attribute.new(ole_td)
227
+ td.prompt = prompt
228
+ td.hidden = is_hidden
229
+ td.constant = is_constant
230
+ td.default = default
231
+ yield td if block_given?
232
+ td
233
+ end
234
+
235
+ def ole_type(type)
236
+ TS::Attribute.tag_type(type)
237
+ end
238
+
239
+ end
240
+
241
+ class TagSet
242
+
243
+ attr_reader :ole_obj
244
+
245
+ attr_reader :instances, :drawing
246
+
247
+ def initialize(drawing,ole)
248
+ @drawing = drawing
249
+ @ole_obj = ole
250
+ @instances = nil
251
+ end
252
+
253
+ def add_attribute(name,type,**options, &block)
254
+ ts = definition.add_attribute(name,type,**options, &block)
255
+ end
256
+
257
+ # def definer
258
+ # @definer ||= Definer.new(self)
259
+ # end
260
+
261
+
262
+
263
+ def add_instance(array)
264
+ @instances << TS::Instance.new(self,array)
265
+ end
266
+
267
+ def create_instance(base_element_id , tags , model )
268
+ if @instaces.nil?
269
+ @instance = []
270
+ ti = TS::Instances.new(self, base_element_id, tags, model)
271
+ @instances << ti
272
+ ti
273
+ end
274
+ end
275
+
276
+ def create_instance(id, elements, model)
277
+ if @instances.nil?
278
+ @instances = []
279
+ end
280
+ ti = TS::Instance.new(self,id,elements,model)
281
+ @instances << ti
282
+ ti
283
+ end
284
+
285
+ # def instances(drawing = Microstation.app.current_drawing)
286
+ # @instances = create_instances(drawing.scan_tags)
287
+ # end
288
+
289
+ # def find_instances_in_model(model)
290
+ # result = create_instances(model.scan_tags)
291
+ # instances[model.name] = result
292
+ # result
293
+ # end
294
+
295
+ def instances
296
+ if @instances.nil? && find_tagset_instances_not_called?
297
+ @instances = @drawing.create_tagset_instances( ts_name: name).to_a
298
+ end
299
+ raise if find_tagset_instances_not_called?
300
+ @instances.nil? ? [] : @instances
301
+ end
302
+
303
+
304
+
305
+
306
+ # def create_instances_from_drawing(drawing)
307
+ # mytags = tags_for_self(tags)
308
+ # grouped = grouped_tags_to_host(mytags)
309
+ # grouped.map{|group| create_instance(group)}
310
+ # end
311
+
312
+ # def all_tags_in_drawing
313
+ # Microstation.app.current_drawing.scan_tags
314
+ # end
315
+
316
+
317
+ def close
318
+ @ole_obj = nil
319
+ end
320
+
321
+ def name
322
+ @ole_obj.name
323
+ end
324
+
325
+ def to_s
326
+ "TagSet: #{name}"
327
+ end
328
+
329
+ def ==(other)
330
+ @ole_obj == other.ole_obj
331
+ end
332
+
333
+ def attribute_names
334
+ definition.attribute_names
335
+ end
336
+
337
+ def attributes
338
+ definition.attributes
339
+ end
340
+
341
+ def [](name)
342
+ definition[name]
343
+ end
344
+
345
+ protected
346
+
347
+ def definition
348
+ @definition ||= Definition.new(self)
349
+ end
350
+
351
+ def reset
352
+ @tag_definitions = nil
353
+ end
354
+
355
+
356
+ def find_tagset_instances_not_called?
357
+ !drawing.find_tagset_instances_called?
358
+ end
359
+
360
+
361
+ # def create_ole_definition(name,type)
362
+ # ole_tag_definitions.Add(name, ole_type(type))
363
+ # end
364
+
365
+ private
366
+
367
+ # protected
368
+
369
+ # def tags_for_self(tags)
370
+ # tags.select{|t| t.tagset_name == name}
371
+ # end
372
+
373
+ # def grouped_tags_to_host(tags)
374
+ # tags.group_by{|t| t.base_element_id}
375
+ # end
376
+
377
+ # def ole_tag_definitions
378
+ # @ole_obj.TagDefinitions
379
+ # end
380
+
381
+
382
+
383
+ end
384
+
385
+ end