microstation 0.4.1

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