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,29 @@
1
+ require_relative 'wrap'
2
+
3
+ module Microstation
4
+
5
+ class Enumerator
6
+
7
+ include Enumerable
8
+ include Wrap
9
+
10
+ def initialize(ole)
11
+ @ole_obj = ole
12
+ end
13
+
14
+ def each
15
+ while @ole_obj.MoveNext
16
+ item = @ole_obj.Current
17
+ yield wrap(item)
18
+ end
19
+ end
20
+
21
+ def reset
22
+ @ole_obj.reset
23
+ end
24
+
25
+
26
+
27
+ end
28
+
29
+ end
@@ -0,0 +1,25 @@
1
+ require 'pathname'
2
+
3
+
4
+ class Pathname
5
+
6
+ def ext(newext = '')
7
+ str = self.to_s
8
+ return self.dup if ['.', '..'].include? str
9
+ if newext != ''
10
+ newext = (newext =~ /^\./) ? newext : ("." + newext)
11
+ end
12
+ Pathname.new(str.dup.sub!(%r(([^/\\])\.[^./\\]*$)) { $1 + newext } || str + newext)
13
+ end
14
+
15
+ def extstr(newext='')
16
+ Pathname.new( self.to_s.ext(newext))
17
+ end
18
+
19
+
20
+ def glob(pattern)
21
+ self.class.glob("#{self.to_s}/#{pattern}")
22
+ end
23
+
24
+
25
+ end
@@ -0,0 +1,27 @@
1
+ class Hash
2
+
3
+
4
+ def map_v
5
+ reduce({}) do |result, array|
6
+ k,v = array
7
+ new_val = yield v
8
+ result.merge( k => new_val)
9
+ end
10
+ end
11
+
12
+ def map_k
13
+ reduce({}) do |result, array|
14
+ k,v = array
15
+ new_k = yield k
16
+ result.merge(new_k => v)
17
+ end
18
+ end
19
+
20
+ def map_kv
21
+ reduce({}) do |result, array|
22
+ new_k,new_v = yield array
23
+ result.merge(new_k => new_v)
24
+ end
25
+ end
26
+
27
+ end
@@ -0,0 +1,40 @@
1
+ module Microstation
2
+
3
+
4
+ module PdfSupport
5
+
6
+ def pdf_name(output_dir=nil)
7
+ name = self.basename
8
+ dir = output_dir || self.dirname
9
+ pdfname = Pathname(name).ext('pdf')
10
+ (dir + pdfname).expand_path
11
+ end
12
+
13
+ def pdf_exists?(output_dir = nil)
14
+ pdf_name(output_dir).file?
15
+ end
16
+
17
+ def file_exists?(file)
18
+ file.file?
19
+ end
20
+
21
+ def needs_pdf?(output_dir=nil)
22
+ pdf_path = pdf_name(output_dir)
23
+ !file_exists?(pdf_path) || pdf_older?(pdf_path)
24
+ end
25
+
26
+ def pdf_older?(pdf)
27
+ self.mtime > pdf.mtime
28
+ end
29
+
30
+
31
+ def mtime
32
+ self.path.mtime
33
+ end
34
+
35
+
36
+ end
37
+
38
+
39
+ end
40
+
@@ -0,0 +1,57 @@
1
+ module Microstation
2
+
3
+ module Properties
4
+
5
+ def author=(var = nil)
6
+ if var
7
+ @ole_obj.Author = var
8
+ else
9
+ @ole_obj.Author rescue nil
10
+ end
11
+
12
+ end
13
+
14
+ alias_method :author, :author=
15
+
16
+ def subject=(var = nil)
17
+ if var
18
+ @ole_obj.Subject = var
19
+ else
20
+ @ole_obj.Subject rescue nil
21
+ end
22
+
23
+ end
24
+
25
+ alias_method :subject, :subject=
26
+
27
+ def comments=(var = nil)
28
+ var ? @ole_obj.Comments = var : @ole_obj.Comments
29
+ end
30
+
31
+ alias_method :comments, :comments=
32
+
33
+ def title=(var = nil)
34
+ if var
35
+ @ole_obj.Title = var
36
+ else
37
+ @ole_obj.Title rescue nil
38
+ end
39
+ end
40
+
41
+ alias_method :title,:title=
42
+
43
+ def keywords=(var = nil)
44
+ if var
45
+ @ole_obj.Keywords = var
46
+ else
47
+ @ole_obj.Keywords rescue nil
48
+ end
49
+ end
50
+
51
+
52
+ alias_method :keywords, :keywords=
53
+
54
+ end
55
+
56
+
57
+ end
@@ -0,0 +1,38 @@
1
+ module Microstation
2
+
3
+ module Scan
4
+
5
+ module Color
6
+
7
+ def color_inclusions
8
+ @color_inclusions ||= []
9
+ end
10
+
11
+ def include_color(color)
12
+ color_inclusions << color
13
+ end
14
+
15
+ def reset_colors
16
+ reset_ole_colors
17
+ @color_inclusions = []
18
+ end
19
+
20
+ def reset_ole_colors
21
+ ole_obj.ExcludeAllColors
22
+ end
23
+
24
+ def resolve_color_scans
25
+ return unless color_inclusions.size > 0
26
+ reset_ole_colors
27
+ color_inclusions.each do |color|
28
+ ole_obj.IncludeColor(color)
29
+ end
30
+ end
31
+
32
+ end
33
+
34
+ end
35
+ end
36
+
37
+
38
+
@@ -0,0 +1,85 @@
1
+ require_relative 'klass'
2
+ require_relative 'type'
3
+ require_relative 'level'
4
+ require_relative 'color'
5
+ require_relative 'line_style'
6
+ require_relative 'line_weight'
7
+ require_relative 'subtype'
8
+
9
+ module Microstation
10
+
11
+ class App
12
+
13
+ def create_ole_scan_criteria
14
+ ole_obj.CreateObjectInMicroStation("MicroStationDGN.ElementScanCriteria")
15
+ end
16
+
17
+ end
18
+
19
+ end
20
+
21
+ module Microstation
22
+
23
+ module Scan
24
+
25
+ class Criteria
26
+
27
+ include Scan::Klass
28
+ include Scan::Type
29
+ include Scan::Level
30
+ include Scan::Color
31
+ include Scan::LineStyle
32
+ include Scan::LineWeight
33
+ include Scan::Subtype
34
+
35
+ attr_reader :app
36
+
37
+ def self.create_scanner(app,&block)
38
+ sc = create(app)
39
+ return sc unless block
40
+ block.arity < 1 ? sc.instance_eval(&block) : block.call(sc)
41
+ sc
42
+ end
43
+
44
+ def self.create(app)
45
+ sc = new(app)
46
+ app.scanners << sc
47
+ sc
48
+ end
49
+
50
+
51
+ def initialize(app)
52
+ @app = app
53
+ @ole_obj = @app.create_ole_scan_criteria
54
+ @app.load_constants #unless defined? Microstation::MSD
55
+ end
56
+
57
+ def resolve
58
+ resolve_type_scans
59
+ resolve_class_scans
60
+ resolve_color_scans
61
+ resolve_level_scans
62
+ resolve_linestyle_scans
63
+ resolve_lineweight_scans
64
+ resolve_subtype_scans
65
+ end
66
+
67
+ def close
68
+ @ole_obj = nil
69
+ @app.scanners.delete(self) if @app
70
+ @app = nil
71
+ end
72
+
73
+ def ole_obj
74
+ @ole_obj
75
+ end
76
+
77
+ def method_missing(method,*args)
78
+ @ole_obj.send(method,*args)
79
+ end
80
+
81
+
82
+ end
83
+ end
84
+
85
+ end
@@ -0,0 +1,43 @@
1
+ module Microstation
2
+
3
+ module Scan
4
+
5
+ module Klass
6
+
7
+ # msdElementClassPrimary # 0 (&H0)
8
+ # msdElementClassPatternComponent #1 (&H1)
9
+ # msdElementClassConstruction #2 (&H2)
10
+ # msdElementClassDimension #3 (&H3)
11
+ # msdElementClassPrimaryRule #4 (&H4)
12
+ # msdElementClassLinearPatterned #5 (&H5)
13
+ # msdElementClassContructionRule #6 (&H6)
14
+
15
+ def class_inclusions
16
+ @class_inclusions ||= []
17
+ end
18
+
19
+ def reset_classes
20
+ reset_ole_classes
21
+ @class_inclusions = []
22
+ end
23
+
24
+ def reset_ole_classes
25
+ ole_obj.ExcludeAllClasses
26
+ end
27
+
28
+ def include_class(klass)
29
+ class_inclusions << klass
30
+ end
31
+
32
+ def resolve_class_scans
33
+ return unless class_inclusions.size > 0
34
+ reset_ole_classes
35
+ class_inclusions.each do |klass|
36
+ ole_obj.IncludeClass(klass)
37
+ end
38
+ end
39
+
40
+ end
41
+ end
42
+
43
+ end
@@ -0,0 +1,38 @@
1
+ module Microstation
2
+
3
+ module Scan
4
+
5
+ module Level
6
+
7
+ def level_inclusions
8
+ @level_inclusions ||= []
9
+ end
10
+
11
+ def include_level(level)
12
+ level_inclusions << level
13
+ end
14
+
15
+ def reset_levels
16
+ reset_ole_levels
17
+ @level_inclusions = []
18
+ end
19
+
20
+ def reset_ole_levels
21
+ ole_obj.ExcludeAllLevels
22
+ end
23
+
24
+ def resolve_level_scans
25
+ return unless level_inclusions.size > 0
26
+ reset_ole_levels
27
+ level_inclusions.each do |level|
28
+ ole_obj.IncludeLevel(level)
29
+ end
30
+ end
31
+
32
+ end
33
+
34
+ end
35
+
36
+ end
37
+
38
+
@@ -0,0 +1,45 @@
1
+ module Microstation
2
+
3
+ module Scan
4
+
5
+ module LineStyle
6
+
7
+ def linestyles
8
+ @app.active_design_file.LineStyles rescue []
9
+ end
10
+
11
+
12
+ def linestyle_inclusions
13
+ @linestyle_inclusions ||= []
14
+ end
15
+
16
+ def include_linestyle(style)
17
+ linestyle_inclusions << style
18
+ end
19
+
20
+ def reset_linestyles
21
+ reset_ole_linestyles
22
+ @linestyle_inclusions = []
23
+ end
24
+
25
+ def reset_ole_linestyles
26
+ ole_obj.ExcludeAllLineStyles
27
+ end
28
+
29
+ def resolve_linestyle_scans
30
+ return unless linestyle_inclusions.size > 0
31
+ reset_ole_linestyles
32
+ linestyle_inclusions.each do |linestyle|
33
+ ole_obj.IncludeLineStyle(linestyle)
34
+ end
35
+ end
36
+
37
+ end
38
+
39
+ end
40
+
41
+ end
42
+
43
+
44
+
45
+
@@ -0,0 +1,33 @@
1
+ module Microstation
2
+
3
+ module Scan
4
+
5
+ module LineWeight
6
+
7
+ def lineweight_inclusions
8
+ @lineweight_inclusions ||= []
9
+ end
10
+
11
+ def include_lineweight(weight)
12
+ lineweight_inclusions << weight
13
+ end
14
+
15
+ def reset_lineweights
16
+ reset_ole_linestyles
17
+ @lineweight_inclusions = []
18
+ end
19
+
20
+ def reset_ole_lineweights
21
+ ole_obj.ExcludeAllLineWeights
22
+ end
23
+
24
+ def resolve_lineweight_scans
25
+ return unless lineweight_inclusions.size > 0
26
+ reset_ole_lineweights
27
+ lineweight_inclusions.each do |lineweight|
28
+ ole_obj.IncludeLineWeight(lineweight)
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end