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.
- data/.autotest +23 -0
- data/.gemtest +0 -0
- data/.rspec +2 -0
- data/Gemfile +17 -0
- data/History.txt +6 -0
- data/Manifest.txt +60 -0
- data/README.txt +75 -0
- data/Rakefile +30 -0
- data/bin/dgn2pdf +37 -0
- data/lib/microstation.rb +88 -0
- data/lib/microstation/app.rb +286 -0
- data/lib/microstation/attributes.rb +35 -0
- data/lib/microstation/cad_input_queue.rb +25 -0
- data/lib/microstation/configuration.rb +57 -0
- data/lib/microstation/dir.rb +252 -0
- data/lib/microstation/drawing.rb +189 -0
- data/lib/microstation/enumerator.rb +29 -0
- data/lib/microstation/ext/pathname.rb +25 -0
- data/lib/microstation/extensions/hash.rb +27 -0
- data/lib/microstation/pdf_support.rb +40 -0
- data/lib/microstation/properties.rb +57 -0
- data/lib/microstation/scan/color.rb +38 -0
- data/lib/microstation/scan/criteria.rb +85 -0
- data/lib/microstation/scan/klass.rb +43 -0
- data/lib/microstation/scan/level.rb +38 -0
- data/lib/microstation/scan/line_style.rb +45 -0
- data/lib/microstation/scan/line_weight.rb +33 -0
- data/lib/microstation/scan/subtype.rb +40 -0
- data/lib/microstation/scan/type.rb +109 -0
- data/lib/microstation/scanner.rb +24 -0
- data/lib/microstation/tag.rb +58 -0
- data/lib/microstation/tag_set.rb +280 -0
- data/lib/microstation/template.rb +84 -0
- data/lib/microstation/text.rb +54 -0
- data/lib/microstation/text_node.rb +74 -0
- data/lib/microstation/ts/attribute.rb +139 -0
- data/lib/microstation/ts/instance.rb +112 -0
- data/lib/microstation/types.rb +91 -0
- data/lib/microstation/wrap.rb +214 -0
- data/plot/pdf-bw.plt +164 -0
- data/plot/pdf.plt +163 -0
- data/plot/png.plt +383 -0
- data/plot/tiff.plt +384 -0
- data/plot/wmbw.tbl +66 -0
- data/plot/wmcolor.tbl +62 -0
- data/spec/app_spec.rb +267 -0
- data/spec/configuration_spec.rb +122 -0
- data/spec/drawing_spec.rb +247 -0
- data/spec/drawings/new_drawing.dgn +0 -0
- data/spec/drawings/test.dgn +0 -0
- data/spec/drawings/test1.dgn +0 -0
- data/spec/drawings/testfile.pdf +0 -0
- data/spec/enumerator_spec.rb +60 -0
- data/spec/microstation_spec.rb +36 -0
- data/spec/scanner_spec.rb +155 -0
- data/spec/spec_app.rb +11 -0
- data/spec/spec_helper.rb +31 -0
- data/spec/tag_set_spec.rb +123 -0
- data/spec/text_node_spec.rb +92 -0
- data/spec/text_spec.rb +62 -0
- 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,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
|