microstation 0.4.1 → 0.8.3

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