microstation 0.4.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 (61) hide show
  1. data/.autotest +23 -0
  2. data/.gemtest +0 -0
  3. data/.rspec +2 -0
  4. data/Gemfile +17 -0
  5. data/History.txt +6 -0
  6. data/Manifest.txt +60 -0
  7. data/README.txt +75 -0
  8. data/Rakefile +30 -0
  9. data/bin/dgn2pdf +37 -0
  10. data/lib/microstation.rb +88 -0
  11. data/lib/microstation/app.rb +286 -0
  12. data/lib/microstation/attributes.rb +35 -0
  13. data/lib/microstation/cad_input_queue.rb +25 -0
  14. data/lib/microstation/configuration.rb +57 -0
  15. data/lib/microstation/dir.rb +252 -0
  16. data/lib/microstation/drawing.rb +189 -0
  17. data/lib/microstation/enumerator.rb +29 -0
  18. data/lib/microstation/ext/pathname.rb +25 -0
  19. data/lib/microstation/extensions/hash.rb +27 -0
  20. data/lib/microstation/pdf_support.rb +40 -0
  21. data/lib/microstation/properties.rb +57 -0
  22. data/lib/microstation/scan/color.rb +38 -0
  23. data/lib/microstation/scan/criteria.rb +85 -0
  24. data/lib/microstation/scan/klass.rb +43 -0
  25. data/lib/microstation/scan/level.rb +38 -0
  26. data/lib/microstation/scan/line_style.rb +45 -0
  27. data/lib/microstation/scan/line_weight.rb +33 -0
  28. data/lib/microstation/scan/subtype.rb +40 -0
  29. data/lib/microstation/scan/type.rb +109 -0
  30. data/lib/microstation/scanner.rb +24 -0
  31. data/lib/microstation/tag.rb +58 -0
  32. data/lib/microstation/tag_set.rb +280 -0
  33. data/lib/microstation/template.rb +84 -0
  34. data/lib/microstation/text.rb +54 -0
  35. data/lib/microstation/text_node.rb +74 -0
  36. data/lib/microstation/ts/attribute.rb +139 -0
  37. data/lib/microstation/ts/instance.rb +112 -0
  38. data/lib/microstation/types.rb +91 -0
  39. data/lib/microstation/wrap.rb +214 -0
  40. data/plot/pdf-bw.plt +164 -0
  41. data/plot/pdf.plt +163 -0
  42. data/plot/png.plt +383 -0
  43. data/plot/tiff.plt +384 -0
  44. data/plot/wmbw.tbl +66 -0
  45. data/plot/wmcolor.tbl +62 -0
  46. data/spec/app_spec.rb +267 -0
  47. data/spec/configuration_spec.rb +122 -0
  48. data/spec/drawing_spec.rb +247 -0
  49. data/spec/drawings/new_drawing.dgn +0 -0
  50. data/spec/drawings/test.dgn +0 -0
  51. data/spec/drawings/test1.dgn +0 -0
  52. data/spec/drawings/testfile.pdf +0 -0
  53. data/spec/enumerator_spec.rb +60 -0
  54. data/spec/microstation_spec.rb +36 -0
  55. data/spec/scanner_spec.rb +155 -0
  56. data/spec/spec_app.rb +11 -0
  57. data/spec/spec_helper.rb +31 -0
  58. data/spec/tag_set_spec.rb +123 -0
  59. data/spec/text_node_spec.rb +92 -0
  60. data/spec/text_spec.rb +62 -0
  61. metadata +241 -0
@@ -0,0 +1,40 @@
1
+ module Microstation
2
+
3
+ module Scan
4
+
5
+ module Subtype
6
+
7
+ def subtype_inclusions
8
+ @subtype_inclusions ||= []
9
+ end
10
+
11
+ def include_subtype(subtype)
12
+ subtype_inclusions << subtype
13
+ end
14
+
15
+ def reset_subtypes
16
+ reset_ole_subtypes
17
+ @subtype_inclusions = []
18
+ end
19
+
20
+ def reset_ole_subtypes
21
+ ole_obj.ExcludeAllSubtypes
22
+ end
23
+
24
+ def resolve_subtype_scans
25
+ return unless subtype_inclusions.size > 0
26
+ reset_ole_subtypes
27
+ subtype_inclusions.each do |subtype|
28
+ ole_obj.IncludeSubtype(subtype)
29
+ end
30
+ end
31
+
32
+ end
33
+
34
+ end
35
+
36
+ end
37
+
38
+
39
+
40
+
@@ -0,0 +1,109 @@
1
+ module Microstation
2
+
3
+ module Scan
4
+
5
+ module Type
6
+
7
+ # MsdElementTypeCellLibraryHeader
8
+ # MsdElementTypeCellHeader
9
+ # MsdElementTypeLine
10
+ # MsdElementTypeLineString
11
+ # MsdElementTypeGroupData
12
+ # MsdElementTypeShape
13
+ # MsdElementTypeTextNode
14
+ # MsdElementTypeDigSetData
15
+ # MsdElementTypeDesignFileHeader
16
+ # MsdElementTypeLevelSymbology
17
+ # MsdElementTypeCurve
18
+ # MsdElementTypeComplexString
19
+ # MsdElementTypeConic
20
+ # MsdElementTypeComplexShape
21
+ # MsdElementTypeEllipse
22
+ # MsdElementTypeArc
23
+ # MsdElementTypeText
24
+ # MsdElementTypeSurface
25
+ # MsdElementTypeSolid
26
+ # MsdElementTypeBsplinePole
27
+ # MsdElementTypePointString
28
+ # MsdElementTypeCone
29
+ # MsdElementTypeBsplineSurface
30
+ # MsdElementTypeBsplineBoundary
31
+ # MsdElementTypeBsplineKnot
32
+ # MsdElementTypeBsplineCurve
33
+ # MsdElementTypeBsplineWeight
34
+ # MsdElementTypeDimension
35
+ # MsdElementTypeSharedCellDefinition
36
+ # MsdElementTypeSharedCell
37
+ # MsdElementTypeMultiLine
38
+ # MsdElementTypeTag
39
+ # MsdElementTypeDgnStoreComponent
40
+ # MsdElementTypeDgnStoreHeader
41
+ # MsdElementType44
42
+ # MsdElementTypeMicroStation
43
+ # MsdElementTypeRasterHeader
44
+ # MsdElementTypeRasterComponent
45
+ # MsdElementTypeRasterReference
46
+ # MsdElementTypeRasterReferenceComponent
47
+ # MsdElementTypeRasterFrame
48
+ # MsdElementTypeTableEntry
49
+ # MsdElementTypeTable
50
+ # MsdElementTypeViewGroup
51
+ # MsdElementTypeView
52
+ # MsdElementTypeLevelMask
53
+ # MsdElementTypeReferenceAttachment
54
+ # MsdElementTypeMatrixHeader
55
+ # MsdElementTypeMatrixIntegerData
56
+ # MsdElementTypeMatrixDoubleData
57
+ # MsdElementTypeMeshHeader
58
+ # MsdElementTypeReferenceOverride
59
+ # MsdElementTypeNamedGroupHeader
60
+ # MsdElementTypeNamedGroupComponent
61
+
62
+ def type_inclusions
63
+ @type_inclusions ||= []
64
+ end
65
+
66
+ def reset_types
67
+ reset_ole_types
68
+ @type_inclusions = []
69
+ end
70
+
71
+ def reset_ole_types
72
+ ole_obj.ExcludeAllTypes
73
+ end
74
+
75
+ def include_type(type)
76
+ type_inclusions << type
77
+ end
78
+
79
+ def resolve_type_scans
80
+ return unless type_inclusions.size > 0
81
+ reset_ole_types
82
+ type_inclusions.each do |type|
83
+ ole_obj.IncludeType(type)
84
+ end
85
+ end
86
+
87
+ def include_text
88
+ self.include_type(Microstation::MSD::MsdElementTypeText)
89
+ end
90
+
91
+ def include_tags
92
+ self.include_type Microstation::MSD::MsdElementTypeTag
93
+ end
94
+
95
+ def include_text_nodes
96
+ self.include_type Microstation::MSD::MsdElementTypeTextNode
97
+ end
98
+
99
+ def include_textual
100
+ include_text
101
+ include_text_nodes
102
+ end
103
+
104
+
105
+ end
106
+
107
+ end
108
+
109
+ end
@@ -0,0 +1,24 @@
1
+ module Microstation
2
+
3
+
4
+ class Scanner
5
+
6
+ attr_reader :app
7
+
8
+ def initialize(app)
9
+ @app = app
10
+ @ole_obj = @app.create_ole_scanner
11
+ end
12
+
13
+ private
14
+
15
+ def ole_obj
16
+ @ole_obj
17
+ end
18
+
19
+
20
+
21
+ end
22
+
23
+
24
+ end
@@ -0,0 +1,58 @@
1
+ module Microstation
2
+
3
+ class Tag < Element
4
+
5
+ def initialize(ole)
6
+ @ole_obj = ole
7
+ @original = @ole_obj.Value
8
+ end
9
+
10
+ def ole_value
11
+ @ole_obj.Value
12
+ end
13
+
14
+ def name
15
+ @ole_obj.TagDefinitionName
16
+ end
17
+
18
+ def to_s
19
+ "#{name}: #{value} ts ->#{tagset_name}"
20
+ end
21
+
22
+ def value
23
+ @original
24
+ end
25
+
26
+ def tagset
27
+ @ole_obj.TagSetName
28
+ end
29
+
30
+ def tagset_name
31
+ @ole_obj.TagSetName
32
+ end
33
+
34
+ def update_ole(value)
35
+ value = value.nil? ? "" : value
36
+ @ole_obj.Value = value
37
+ end
38
+
39
+ def base_element=(ele)
40
+ @base_element = ele
41
+ end
42
+
43
+ def ole_base_element
44
+ @ole_obj.BaseElement
45
+ end
46
+
47
+ def base_element_id
48
+ ole_base_element.ID64
49
+ end
50
+
51
+ def base_element
52
+ @base_element ||= TaggedElement.new(ole_base_element)
53
+ end
54
+
55
+ end
56
+
57
+ end
58
+
@@ -0,0 +1,280 @@
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