Module: Microstation

Defined in:
lib/microstation/model.rb,
lib/microstation.rb,
lib/microstation/app.rb,
lib/microstation/dir.rb,
lib/microstation/dir.rb,
lib/microstation/tag.rb,
lib/microstation/cell.rb,
lib/microstation/line.rb,
lib/microstation/text.rb,
lib/microstation/wrap.rb,
lib/microstation/errors.rb,
lib/microstation/changer.rb,
lib/microstation/drawing.rb,
lib/microstation/element.rb,
lib/microstation/element.rb,
lib/microstation/element.rb,
lib/microstation/element.rb,
lib/microstation/element.rb,
lib/microstation/element.rb,
lib/microstation/point3d.rb,
lib/microstation/scanner.rb,
lib/microstation/tag_set.rb,
lib/microstation/version.rb,
lib/microstation/graphics.rb,
lib/microstation/template.rb,
lib/microstation/directory.rb,
lib/microstation/functions.rb,
lib/microstation/scan/type.rb,
lib/microstation/text_node.rb,
lib/microstation/enumerator.rb,
lib/microstation/file_tests.rb,
lib/microstation/properties.rb,
lib/microstation/scan/color.rb,
lib/microstation/scan/klass.rb,
lib/microstation/scan/level.rb,
lib/microstation/scan/range.rb,
lib/microstation/scan_trait.rb,
lib/microstation/model_trait.rb,
lib/microstation/pdf_support.rb,
lib/microstation/ts/instance.rb,
lib/microstation/scan/subtype.rb,
lib/microstation/ts/attribute.rb,
lib/microstation/configuration.rb,
lib/microstation/event_handler.rb,
lib/microstation/scan/criteria.rb,
lib/microstation/scan/criteria.rb,
lib/microstation/tag_set_trait.rb,
lib/microstation/template_info.rb,
lib/microstation/extensions/faa.rb,
lib/microstation/extensions/faa.rb,
lib/microstation/tagged_element.rb,
lib/microstation/cad_input_queue.rb,
lib/microstation/scan/line_style.rb,
lib/microstation/scan/scan_trait.rb,
lib/microstation/template_runner.rb,
lib/microstation/ts/tagset_trait.rb,
lib/microstation/property_handler.rb,
lib/microstation/scan/line_weight.rb,
lib/microstation/criteria_creation_t.rb,
lib/microstation/ole_cad_input_message.rb

Overview

##define DISP_E_PARAMNOTFOUND HRESULT_TYPEDEF(0x80020004L)

Defined Under Namespace

Modules: CriteriaCreationT, ElementTrait, FileTests, Functions, Graphics, InputType, MSD, Microstation, ModelTrait, OleCollection, PdfSupport, Properties, Scan, ScanTrait, TS, TagSetTrait Classes: App, Arc, BSplineCurve, BSplineSurface, CadInputQueue, Capabilities, Cell, Changer, Configuration, DefaultModel, Definition, Dir, Directory, Drawing, Element, Ellipse, Enumerator, EventHandler, ExistingFile, Line, Model, OLE_CadInputMessage, Point3d, PropertyHandler, Scanner, Tag, TagSet, TagSets, TaggedElement, Template, TemplateInfo, TemplateRunner, Text, TextNode, VariableDefined

Constant Summary collapse

ROOT =
Pathname(__dir__).parent
TEMPLATES_PATH =
ROOT + "templates"
Error =
Class.new(::RuntimeError)
NonDGNFile =
Class.new(Error)
FileNotFound =
Class.new(Error)
MultipleUpdateError =
Class.new(Error)
VERSION =
"0.8.7"

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.default_app_optionsObject

Returns the value of attribute default_app_options.



48
49
50
# File 'lib/microstation.rb', line 48

def default_app_options
  @default_app_options
end

.default_error_procObject



38
39
40
# File 'lib/microstation.rb', line 38

def default_error_proc
  @default_error_proc ||= ->(e, f) { puts "Couldn't open drawing #{f}" }
end

Class Method Details

.change_drawing {|Drawing| ... } ⇒ Object

starts an app with drawing, opens a temp copy of the drawing and yields it saves the drawing with with name or output_dir same name

Parameters:

  • dgn

Yields:



87
88
89
# File 'lib/microstation.rb', line 87

def change_drawing(...)
  App.change_drawing(...)
end

.default_drawing_optionsObject



42
43
44
# File 'lib/microstation.rb', line 42

def default_drawing_options
  {read_only: true, error_proc: default_error_proc}
end

.dgn2pdf(dir, outdir = dir) ⇒ Object

Parameters:

  • dir (String)

    the directory of drawing [dgn,dwg] to convert

  • outdir (String) (defaults to: dir)

    the output dir for converted pdf files



116
117
118
119
120
121
# File 'lib/microstation.rb', line 116

def dgn2pdf(dir, outdir = dir)
  drawings = drawings_in_dir(dir)
  with_drawings(drawings) do |drawing|
    drawing.save_as_pdf(name: drawing.name, dir: outdir)
  end
end

.directory(path) ⇒ Object



2
3
4
# File 'lib/microstation/directory.rb', line 2

def self.directory(path)
  Directory.new(path)
end

.drawings_in_dir(dir) ⇒ Object

gets all dwg and dgn dfiles in a directory

Parameters:

  • dir


93
94
95
96
# File 'lib/microstation.rb', line 93

def drawings_in_dir(dir)
  dirpath = Pathname.new(dir).expand_path
  drawings = dirpath.glob("*.d{gn,wg,xf}").sort_by { _1.basename(".*").to_s.downcase }
end

.dump_template_info(dgn, dir: nil, tagset_filter: nil, visible: false) ⇒ Object



107
108
109
110
111
112
# File 'lib/microstation.rb', line 107

def dump_template_info(dgn, dir: nil, tagset_filter: nil, visible: false)
  drawing = Pathname(dgn).expand_path
  output_dir = dir || drawing.parent
  template = TemplateInfo.new(drawing, tagset_filter: tagset_filter, visible: visible)
  template.dump(output_dir)
end

.dump_template_info_for_dir(dir, **options) ⇒ Object



98
99
100
101
102
103
104
105
# File 'lib/microstation.rb', line 98

def dump_template_info_for_dir(dir, **options)
  drawings = drawings_in_dir(dir)
  raise "no drawings in dir #{dir}" if drawings.empty?
  with_drawings(drawings) do |drawing|
    template = TemplateInfo.new(drawing, **options)
    template.dump(dir)
  end
end

.get_all_text(file) ⇒ Object



157
158
159
160
161
# File 'lib/microstation.rb', line 157

def get_all_text(file)
  App.open_drawing(file) do |d|
    d.get_all_text
  end
end

.get_text(file, &block) ⇒ Object



151
152
153
154
155
# File 'lib/microstation.rb', line 151

def get_text(file, &block)
  App.open_drawing(file) do |d|
    d.get_text(&block)
  end
end

.needs_extending?(ole) ⇒ Boolean

Returns:

  • (Boolean)


2
3
4
# File 'lib/microstation/wrap.rb', line 2

def self.needs_extending?(ole)
  ole.instance_of?(WIN32OLE) && (!ole.respond_to? :text?)
end

.open_drawingObject

starts app, opens drawing, and yields the drawing before closing drawing and quitting the app



130
131
132
# File 'lib/microstation.rb', line 130

def open_drawing(...)
  App.open_drawing(...)
end

.plot_driver_directoryObject



58
59
60
# File 'lib/microstation.rb', line 58

def plot_driver_directory
  root + "plot"
end

.rootObject



54
55
56
# File 'lib/microstation.rb', line 54

def root
  ROOT
end

.run(options = {}, &block) ⇒ Object



188
189
190
# File 'lib/microstation.rb', line 188

def run(options = {}, &block)
  App.run(options, &block)
end

.run_templates_in_dirObject



123
124
125
# File 'lib/microstation.rb', line 123

def run_templates_in_dir(...)
  App.run_templates_in_dir(...)
end

.save_as_pdf(d) ⇒ Object



30
31
32
33
34
35
36
# File 'lib/microstation.rb', line 30

def save_as_pdf(d)
  run do |app|
    drawing = app.current_drawing
    drawing.save_as_pdf(dir: d)
    drawing.close
  end
end

.save_current_drawing(dir, exit: true) ⇒ Object



163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
# File 'lib/microstation.rb', line 163

def save_current_drawing(dir, exit: true)
  if exit
    run do |app|
      drawing = app.current_drawing
      drawing.copy(dir: dir)
      drawing.save_as_pdf(dir: dir)
      drawing.close
    end
  else
    app = App.new
    drawing = app.current_drawing
    drawing.copy(dir: dir)
    drawing.save_as_pdf(dir: dir)
    app
  end
end

.save_current_drawing_as_pdf(dir) ⇒ Object



180
181
182
183
184
185
186
# File 'lib/microstation.rb', line 180

def save_current_drawing_as_pdf(dir)
  App.run do |app|
    drawing = app.current_drawing
    drawing.save_as_pdf(dir: dir)
    drawing.close
  end
end

.scan_text(file, &block) ⇒ Object



145
146
147
148
149
# File 'lib/microstation.rb', line 145

def scan_text(file, &block)
  App.open_drawing(file) do |d|
    d.scan_text(&block)
  end
end

.use_template(template, context, options = {}) ⇒ Object



62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/microstation.rb', line 62

def use_template(template, context, options = {})
  def context.binding
    binding
  end
  options = {readonly: true}
  App.run do |app|
    tmpfile = Tempfile.new("drawing")
    app.new_drawing(tmpfile, template) do |drawing|
      drawing.scan_text do |text|
        compiled_template = ERB.new(text)
        new_text = compiled_template.result(context.binding)
        text = new_text
      end
    end
  end
  tempfile.read
end

.win_fsObject



39
40
41
# File 'lib/microstation/app.rb', line 39

def self.win_fs
  @windows_fs ||= Windows::FileSystem.new
end

.with_drawingsObject



141
142
143
# File 'lib/microstation.rb', line 141

def with_drawings(...)
  App.with_drawings(...)
end

.with_drawings_in_dir(dir) ⇒ Object

opens all the drawings in a drawing by calling open drawing



136
137
138
139
# File 'lib/microstation.rb', line 136

def with_drawings_in_dir(dir, ...)
  drawings = drawings_in_dir(dir)
  with_drawings(drawings, ...)
end