microstation 0.4.1 → 0.8.3

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 (102) hide show
  1. checksums.yaml +7 -0
  2. data/.autotest +23 -23
  3. data/.rspec +2 -2
  4. data/Gemfile +28 -10
  5. data/History.txt +6 -6
  6. data/LICENSE.adoc +22 -0
  7. data/Manifest.txt +81 -60
  8. data/README.adoc +131 -0
  9. data/Rakefile +71 -30
  10. data/bin/dgn2pdf +36 -37
  11. data/bin/dgn_template +107 -0
  12. data/bin/microstation +231 -0
  13. data/bin/pw_print +35 -0
  14. data/cad_files/drawing_faatitle_in_non_default_model.dgn +0 -0
  15. data/cad_files/drawing_no_block.dgn +0 -0
  16. data/cad_files/drawing_with_3_block.dgn +0 -0
  17. data/cad_files/drawing_with_block.dgn +0 -0
  18. data/cad_files/seed2d.dgn +0 -0
  19. data/cad_files/test.dgn +0 -0
  20. data/lib/microstation.rb +252 -88
  21. data/lib/microstation/app.rb +781 -286
  22. data/lib/microstation/cad_input_queue.rb +100 -25
  23. data/lib/microstation/cell.rb +191 -0
  24. data/lib/microstation/changer.rb +70 -0
  25. data/lib/microstation/configuration.rb +193 -57
  26. data/lib/microstation/criteria_creation_t.rb +23 -0
  27. data/lib/microstation/dir.rb +252 -252
  28. data/lib/microstation/directory.rb +46 -0
  29. data/lib/microstation/drawing.rb +690 -189
  30. data/lib/microstation/element.rb +311 -0
  31. data/lib/microstation/enumerator.rb +32 -29
  32. data/lib/microstation/errors.rb +17 -0
  33. data/lib/microstation/event_handler.rb +28 -0
  34. data/lib/microstation/ext/pathname.rb +23 -25
  35. data/lib/microstation/ext/win32ole.rb +7 -0
  36. data/lib/microstation/extensions/faa.rb +124 -0
  37. data/lib/microstation/file_tests.rb +68 -0
  38. data/lib/microstation/functions.rb +60 -0
  39. data/lib/microstation/graphics.rb +35 -0
  40. data/lib/microstation/line.rb +19 -0
  41. data/lib/microstation/model.rb +45 -0
  42. data/lib/microstation/model_trait.rb +189 -0
  43. data/lib/microstation/ole_cad_input_message.rb +101 -0
  44. data/lib/microstation/ole_helper.rb +152 -0
  45. data/lib/microstation/pdf_support.rb +40 -40
  46. data/lib/microstation/point3d.rb +71 -0
  47. data/lib/microstation/primitive_command_interface.rb +66 -0
  48. data/lib/microstation/properties.rb +61 -57
  49. data/lib/microstation/property_handler.rb +48 -0
  50. data/lib/microstation/scan/color.rb +38 -38
  51. data/lib/microstation/scan/criteria.rb +89 -85
  52. data/lib/microstation/scan/klass.rb +43 -43
  53. data/lib/microstation/scan/level.rb +38 -38
  54. data/lib/microstation/scan/line_style.rb +45 -45
  55. data/lib/microstation/scan/line_weight.rb +33 -33
  56. data/lib/microstation/scan/range.rb +19 -0
  57. data/lib/microstation/scan/scan_trait.rb +51 -0
  58. data/lib/microstation/scan/subtype.rb +40 -40
  59. data/lib/microstation/scan/type.rb +134 -109
  60. data/lib/microstation/scan_trait.rb +62 -0
  61. data/lib/microstation/scanner.rb +24 -24
  62. data/lib/microstation/tag.rb +87 -58
  63. data/lib/microstation/tag_set.rb +385 -280
  64. data/lib/microstation/tag_set_trait.rb +51 -0
  65. data/lib/microstation/tagged_element.rb +105 -0
  66. data/lib/microstation/template.rb +90 -84
  67. data/lib/microstation/template_info.rb +172 -0
  68. data/lib/microstation/template_runner.rb +65 -0
  69. data/lib/microstation/text.rb +79 -54
  70. data/lib/microstation/text_node.rb +124 -74
  71. data/lib/microstation/ts/attribute.rb +140 -139
  72. data/lib/microstation/ts/instance.rb +146 -112
  73. data/lib/microstation/ts/tagset_trait.rb +49 -0
  74. data/lib/microstation/types.rb +91 -91
  75. data/lib/microstation/version.rb +5 -0
  76. data/lib/microstation/wrap.rb +28 -214
  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. metadata +301 -86
  84. data/.gemtest +0 -0
  85. data/README.txt +0 -75
  86. data/lib/microstation/attributes.rb +0 -35
  87. data/lib/microstation/extensions/hash.rb +0 -27
  88. data/spec/app_spec.rb +0 -267
  89. data/spec/configuration_spec.rb +0 -122
  90. data/spec/drawing_spec.rb +0 -247
  91. data/spec/drawings/new_drawing.dgn +0 -0
  92. data/spec/drawings/test.dgn +0 -0
  93. data/spec/drawings/test1.dgn +0 -0
  94. data/spec/drawings/testfile.pdf +0 -0
  95. data/spec/enumerator_spec.rb +0 -60
  96. data/spec/microstation_spec.rb +0 -36
  97. data/spec/scanner_spec.rb +0 -155
  98. data/spec/spec_app.rb +0 -11
  99. data/spec/spec_helper.rb +0 -31
  100. data/spec/tag_set_spec.rb +0 -123
  101. data/spec/text_node_spec.rb +0 -92
  102. data/spec/text_spec.rb +0 -62
@@ -0,0 +1,65 @@
1
+ module Microstation
2
+
3
+ class TemplateRunner
4
+
5
+ attr_reader :file, :template_hash
6
+
7
+ def initialize(file)
8
+ puts "running #{file}"
9
+ @file = file
10
+ @template_hash = load(file)
11
+ end
12
+
13
+ def load(file)
14
+ begin
15
+ File.open(file) do |f|
16
+ YAML.load(f)
17
+ end
18
+ rescue => e
19
+ binding.pry
20
+ puts "Could not parse YAML: #{e.message}"
21
+ end
22
+ end
23
+
24
+ def name
25
+ template_hash[:name] || Pathname(template).basename.ext('.dgn')
26
+ end
27
+
28
+ def locals
29
+ template_hash[:locals]
30
+ end
31
+
32
+ def tagsets
33
+ template_hash[:tagsets]
34
+ end
35
+
36
+ def output_dir
37
+ template_hash[:output_dir]
38
+ end
39
+
40
+ def template
41
+ template_hash[:template]
42
+ end
43
+
44
+ def run_with_app(app,options = {})
45
+ run_options = { app: app}.merge(options)
46
+ run(run_options)
47
+ end
48
+
49
+ def run(options = {})
50
+ begin
51
+ the_template = Template.new(template)
52
+ template_options = { output_dir: output_dir,
53
+ locals: locals,
54
+ name: name,
55
+ tagsets: tagsets
56
+ }
57
+ run_options = template_options.merge(options)
58
+ the_template.render(run_options)
59
+ rescue
60
+ binding.pry
61
+ end
62
+ end
63
+
64
+ end
65
+ end
@@ -1,54 +1,79 @@
1
- module Microstation
2
-
3
- class Text < Element
4
-
5
- def initialize(ole)
6
- @ole_obj = ole
7
- @original_text = @ole_obj.Text
8
- end
9
-
10
- # def microstation_id
11
- # @ole_obj.Id || @ole_obj.ID64
12
- # end
13
- # def text?
14
- # true
15
- # end
16
-
17
- # def text_node?
18
- # false
19
- # end
20
-
21
- def to_s
22
- @original_text.to_s
23
- end
24
-
25
- def method_missing2(meth,*args, &block)
26
- if meth =~ /^[A-Z]/
27
- @ole_obj.send(meth,*args)
28
- else
29
- dup = @original_text.dup
30
- result = dup.send(meth,*args, &block)
31
- _update(dup) unless dup == @original_text
32
- result
33
- end
34
- end
35
-
36
- def method_missing(meth,*args,&block)
37
- dup = @original_text.dup
38
- result = dup.send(meth,*args, &block)
39
- _update(dup) unless dup == @original_text
40
- result
41
- end
42
-
43
-
44
- def _update(text)
45
- @ole_obj.Text = text
46
- @original_text = text
47
- @ole_obj.Redraw Microstation::MSD::MsdDrawingModeNormal
48
- @ole_obj.Rewrite
49
- @original_text = text
50
- end
51
-
52
- end
53
-
54
- end
1
+ require 'microstation/element'
2
+
3
+ module Microstation
4
+
5
+ class Text < Element
6
+
7
+
8
+ def read_ole(ole)
9
+ ole_obj.Text
10
+ end
11
+
12
+ def write_ole(text)
13
+ ole_obj.Text = text
14
+ end
15
+
16
+ def to_regexp
17
+ Regexp.new(read_ole.to_s)
18
+ end
19
+
20
+ def =~(reg)
21
+ @original =~ reg
22
+ end
23
+
24
+
25
+ # def microstation_id
26
+ # @ole_obj.Id || @ole_obj.ID64
27
+ # end
28
+ # def text?
29
+ # true
30
+ # end
31
+
32
+ # def text_node?
33
+ # false
34
+ # end
35
+
36
+ def to_s
37
+ original.to_s
38
+ end
39
+
40
+ def bounds
41
+ binding.pry
42
+ rotation = ole_obj.Rotation
43
+ inverse_rotation = app_ole_obj.Matrix3dInverse(rotation) rescue pry
44
+ transform = app_ole_obj.Transform3dFromMatrix3dandFixedPoint3d(app_ole_obj.Matrix3dInverse(rotation), ole_obj.origin)
45
+ ole_obj.transform transform
46
+ pts = []
47
+
48
+ 0.upto(4) do |i|
49
+ points[i] = ole_obj.Boundary.Low
50
+ end
51
+ points[2] = self.Boundary.High
52
+ points[1].X = points[2].x
53
+ points[3].y = points[2].Y
54
+
55
+ end
56
+
57
+ def method_missing(meth,*args, &block)
58
+ if meth =~ /^[A-Z]/
59
+ ole_obj.send(meth,*args)
60
+ else
61
+ dup = @original.dup
62
+ result = dup.send(meth,*args, &block)
63
+ update(result)
64
+ result
65
+ end
66
+ end
67
+
68
+ # def method_missing(meth,*args,&block)
69
+ # dup = @original_text.dup
70
+ # result = dup.send(meth,*args, &block)
71
+ # _update(dup) unless dup == @original_text
72
+ # result
73
+ # end
74
+
75
+
76
+
77
+ end
78
+
79
+ end
@@ -1,74 +1,124 @@
1
- module Microstation
2
-
3
- class TextNode < Element
4
-
5
- attr_reader :original_text, :ole_obj
6
-
7
- def initialize(ole)
8
- @ole_obj = ole
9
- @original_text = ole_to_ruby(ole)
10
- end
11
-
12
- def empty?
13
- ole_obj.TextLinesCount == 0
14
- end
15
-
16
- def text?
17
- false
18
- end
19
-
20
- def size
21
- ole_obj.TextLinesCount
22
- end
23
-
24
-
25
- def ole_to_ruby(ole)
26
- count = ole.TextLinesCount
27
- # debugger if count > 0
28
- str_array = []
29
- 1.upto(count) do |i|
30
- str_array << ole.TextLine(i)
31
- end
32
- str_array.join("\n")
33
- end
34
-
35
- def _update(text)
36
- update_ole(text)
37
- @original_text = text
38
- end
39
-
40
- def update_ole(text)
41
- ole_obj.DeleteAllTextLines
42
- text.each_line do |line|
43
- ole_obj.AddTextLine(line)
44
- end
45
- ole_obj.Redraw Microstation::MSD::MsdDrawingModeNormal
46
- ole_obj.Rewrite
47
- end
48
-
49
- def to_s
50
- @original_text.to_s
51
- end
52
-
53
- def method_missing(meth,*args,&block)
54
- dup = @original_text.dup
55
- result = dup.send(meth,*args,&block)
56
- _update(dup) unless dup == @original_text
57
- result
58
- end
59
-
60
-
61
- def method_missing2(meth,*args,&block)
62
- if meth.to_s =~ /^[A-Z]/
63
- ole_obj.send(meth,*args)
64
- else
65
- dup = @original_text.dup
66
- result = dup.send(meth,*args,&block)
67
- _update(dup) unless dup == @original_text
68
- result
69
- end
70
- end
71
-
72
- end
73
-
74
- end
1
+ module Microstation
2
+
3
+ class TextNode < Element
4
+
5
+ attr_reader :original, :ole_obj
6
+
7
+
8
+ def to_regexp
9
+ Regexp.new(original.to_s)
10
+ end
11
+
12
+
13
+ def empty?
14
+ ole_obj.TextLinesCount == 0
15
+ end
16
+
17
+ def text?
18
+ false
19
+ end
20
+
21
+ def size
22
+ ole_obj.TextLinesCount
23
+ end
24
+
25
+
26
+ def read_ole(ole)
27
+ count = ole.TextLinesCount
28
+ # debugger if count > 0
29
+ str_array = []
30
+ 1.upto(count) do |i|
31
+ str_array << ole.TextLine(i)
32
+ end
33
+ str_array.join("\n")
34
+ end
35
+
36
+ # def _update(text)
37
+ # update_ole!(text)
38
+ # @original = text
39
+ # end
40
+
41
+ def write_ole(text)
42
+ if in_cell?
43
+ write_ole_in_cell(text)
44
+ else
45
+ write_ole_regular(text)
46
+ end
47
+ end
48
+
49
+ def write_ole_regular(text)
50
+ ole_obj.DeleteAllTextLines
51
+ text.each_line do |line|
52
+ ole_obj.AddTextLine(line)
53
+ end
54
+ end
55
+
56
+ def write_ole_in_cell(text)
57
+ begin
58
+ orig_ole = ole_obj
59
+ new_text_ole = ole_obj.Clone
60
+ new_text_ole.DeleteAllTextLines
61
+ text.each_line do |line|
62
+ new_text_ole.AddTextLine(line)
63
+ end
64
+ @ole_obj = new_text_ole
65
+ rescue => e
66
+ @ole_obj = orig_ole
67
+ end
68
+ end
69
+
70
+ def update_ole!(text)
71
+ ole_obj.DeleteAllTextLines
72
+ text.each_line do |line|
73
+ ole_obj.AddTextLine(line)
74
+ end
75
+ ole_obj.Redraw Microstation::MSD::MsdDrawingModeNormal
76
+ ole_obj.Rewrite
77
+ end
78
+
79
+ def to_s
80
+ @original.to_s
81
+ end
82
+
83
+ def =~(reg)
84
+ @original =~ reg
85
+ end
86
+
87
+ def template?
88
+ !!(@original =~ /{{.+}}/)
89
+ end
90
+
91
+ def render(h={})
92
+ return self unless template?
93
+ template = Liquid::Template.parse(self.to_s)
94
+ result = template.render(h)
95
+ update(result) unless result == @original
96
+ self
97
+ end
98
+
99
+ def method_missing(meth,*args,&block)
100
+ if meth =~ /^[A-Z]/
101
+ ole_obj.send(meth,*args)
102
+ else
103
+ copy = @original.dup
104
+ result = copy.send(meth,*args,&block)
105
+ update(result) unless copy == @original
106
+ result
107
+ end
108
+ end
109
+
110
+
111
+ # def method_missing2(meth,*args,&block)
112
+ # if meth.to_s =~ /^[A-Z]/
113
+ # ole_obj.send(meth,*args)
114
+ # else
115
+ # dup = @original.dup
116
+ # result = dup.send(meth,*args,&block)
117
+ # _update(dup) unless dup == @original
118
+ # result
119
+ # end
120
+ # end
121
+
122
+ end
123
+
124
+ end
@@ -1,139 +1,140 @@
1
- module Microstation
2
- module TS
3
-
4
- class Attribute
5
-
6
- attr_reader :ole_obj
7
-
8
- # msdTagTypeCharacter 1 (&H1)
9
- # msdTagTypeShortInteger 2 (&H2)
10
- # msdTagTypeLongInteger 3 (&H3)
11
- # msdTagTypeDouble 4 (&H4)
12
- # msdTagTypeBinary 5 (&H5)
13
-
14
- TYPES = {
15
- 1 => String,
16
- 2 => Integer,
17
- 3 => Integer,
18
- 4 => Float,
19
- # 5 => Binary
20
- }
21
-
22
- RUBY_TO_MS = TYPES.invert
23
-
24
- def self.tag_type(type)
25
- if type.class == Symbol
26
- ruby_type = case type
27
- when :char
28
- String
29
- when :int
30
- Integer
31
- when :float
32
- Float
33
- else
34
- :char
35
- end
36
- else
37
- ruby_type = type
38
- end
39
-
40
- RUBY_TO_MS[ruby_type]
41
- end
42
-
43
- def att_type
44
- TYPES[type]
45
- end
46
-
47
- def initialize(ole, options = {})
48
- @ole_obj = ole
49
- @definition = options[:definer]
50
- end
51
-
52
- def close
53
- @ole_obj = nil
54
- end
55
-
56
- def tagset
57
- @definition.tagset if definition
58
- end
59
-
60
- def name
61
- @ole_obj.name
62
- end
63
-
64
- def name=(val)
65
- @ole_obj.Name = val
66
- end
67
-
68
- def options_for_attribute
69
- options = {}
70
- options[:is_hidden] = true if hidden?
71
- options[:prompt] = prompt if prompt
72
- options[:default] = default_value
73
- options[:readonly] = true if constant?
74
- end
75
-
76
- def to_s
77
- "TagDefinition: #{name}"
78
- end
79
-
80
- def constant?
81
- @ole_obj.IsConstant
82
- end
83
-
84
- def constant=(constant)
85
- bool = constant ? true : false
86
- @ole_obj.IsConstant = bool
87
- end
88
-
89
- def default
90
- @ole_obj.DefaultValue
91
- end
92
-
93
- def default=(val)
94
- @ole_obj.DefaultValue = val
95
- end
96
-
97
- def has_default?
98
- !!default
99
- end
100
-
101
- def hidden?
102
- @ole_obj.IsHidden
103
- end
104
-
105
- def hidden=(hidden)
106
- bool = hidden ? true :false
107
- @ole_obj.IsHidden = bool
108
- end
109
- def prompt
110
- @ole_obj.Prompt
111
- end
112
-
113
- def prompt=(val)
114
- @ole_obj.Prompt = val
115
- end
116
-
117
- def type
118
- TYPES[@ole_obj.TagType]
119
- end
120
-
121
- def attrib_options
122
- options = {}
123
- options[:default] = default_value if has_default?
124
- options[:readonly] = true if constant?
125
- options
126
- end
127
-
128
- def tagset_name
129
- @ole_obj.TagSetName
130
- end
131
-
132
- def ==(other)
133
- @ole_obj.Name == other.ole_obj.Name && @ole_obj.TagSetName == other.ole_obj.TagSetName && @ole_obj.TagType == other.ole_obj.TagType
134
- end
135
-
136
- end
137
-
138
- end
139
- end
1
+ module Microstation
2
+
3
+ module TS
4
+
5
+ class Attribute
6
+
7
+ attr_reader :ole_obj
8
+
9
+ # msdTagTypeCharacter 1 (&H1)
10
+ # msdTagTypeShortInteger 2 (&H2)
11
+ # msdTagTypeLongInteger 3 (&H3)
12
+ # msdTagTypeDouble 4 (&H4)
13
+ # msdTagTypeBinary 5 (&H5)
14
+
15
+ TYPES = {
16
+ 1 => String,
17
+ 2 => Integer,
18
+ 3 => Integer,
19
+ 4 => Float,
20
+ # 5 => Binary
21
+ }
22
+
23
+ RUBY_TO_MS = TYPES.invert
24
+
25
+ def self.tag_type(type)
26
+ if type.class == Symbol
27
+ ruby_type = case type
28
+ when :char
29
+ String
30
+ when :int
31
+ Integer
32
+ when :float
33
+ Float
34
+ else
35
+ :char
36
+ end
37
+ else
38
+ ruby_type = type
39
+ end
40
+
41
+ RUBY_TO_MS[ruby_type]
42
+ end
43
+
44
+ def att_type
45
+ TYPES[type]
46
+ end
47
+
48
+ def initialize(ole, options = {})
49
+ @ole_obj = ole
50
+ @definition = options[:definer]
51
+ end
52
+
53
+ def close
54
+ @ole_obj = nil
55
+ end
56
+
57
+ def tagset
58
+ @definition.tagset if definition
59
+ end
60
+
61
+ def name
62
+ @ole_obj.name
63
+ end
64
+
65
+ def name=(val)
66
+ @ole_obj.Name = val
67
+ end
68
+
69
+ def options_for_attribute
70
+ options = {}
71
+ options[:is_hidden] = true if hidden?
72
+ options[:prompt] = prompt if prompt
73
+ options[:default] = default_value
74
+ options[:readonly] = true if constant?
75
+ end
76
+
77
+ def to_s
78
+ "TagDefinition: #{name}"
79
+ end
80
+
81
+ def constant?
82
+ @ole_obj.IsConstant
83
+ end
84
+
85
+ def constant=(constant)
86
+ bool = constant ? true : false
87
+ @ole_obj.IsConstant = bool
88
+ end
89
+
90
+ def default
91
+ @ole_obj.DefaultValue
92
+ end
93
+
94
+ def default=(val)
95
+ @ole_obj.DefaultValue = val
96
+ end
97
+
98
+ def has_default?
99
+ !!default
100
+ end
101
+
102
+ def hidden?
103
+ @ole_obj.IsHidden
104
+ end
105
+
106
+ def hidden=(hidden)
107
+ bool = hidden ? true :false
108
+ @ole_obj.IsHidden = bool
109
+ end
110
+ def prompt
111
+ @ole_obj.Prompt
112
+ end
113
+
114
+ def prompt=(val)
115
+ @ole_obj.Prompt = val
116
+ end
117
+
118
+ def type
119
+ TYPES[@ole_obj.TagType]
120
+ end
121
+
122
+ def attrib_options
123
+ options = {}
124
+ options[:default] = default_value if has_default?
125
+ options[:readonly] = true if constant?
126
+ options
127
+ end
128
+
129
+ def tagset_name
130
+ @ole_obj.TagSetName
131
+ end
132
+
133
+ def ==(other)
134
+ @ole_obj.Name == other.ole_obj.Name && @ole_obj.TagSetName == other.ole_obj.TagSetName && @ole_obj.TagType == other.ole_obj.TagType
135
+ end
136
+
137
+ end
138
+
139
+ end
140
+ end