Module: Microstation

Defined in:
lib/microstation/drawing.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/model.rb,
lib/microstation/errors.rb,
lib/microstation/changer.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/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, Test2, 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.3'

Class Method Summary collapse

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:



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

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

.default_app_optionsObject



52
53
54
# File 'lib/microstation.rb', line 52

def default_app_options
  @default_app_options
end

.default_app_options=(opts) ⇒ Object



56
57
58
# File 'lib/microstation.rb', line 56

def default_app_options=(opts)
  @default_app_options = opts 
end

.default_drawing_optionsObject



44
45
46
# File 'lib/microstation.rb', line 44

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

.default_error_procObject



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

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

.default_error_proc=(p) ⇒ Object



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

def default_error_proc=(p)
  @default_error_proc = p
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



124
125
126
127
128
129
# File 'lib/microstation.rb', line 124

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



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

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

.drawings_in_dir(dir) ⇒ Object

gets all dwg and dgn dfiles in a directory

Parameters:

  • dir


101
102
103
104
# File 'lib/microstation.rb', line 101

def drawings_in_dir(dir)
  dirpath = Pathname.new(dir).expand_path
  drawings = Pathname.glob("#{dirpath}/*.d{gn,wg,xf}")
end

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



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

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



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

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



166
167
168
169
170
# File 'lib/microstation.rb', line 166

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

.get_text(file, &block) ⇒ Object



160
161
162
163
164
# File 'lib/microstation.rb', line 160

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

.needs_extending?(ole) ⇒ Boolean

Returns:

  • (Boolean)


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

def self.needs_extending?(ole)
  ole.class == WIN32OLE && (not ole.respond_to? :text?)
end

.open_drawingObject

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



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

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

.plot_driver_directoryObject



66
67
68
# File 'lib/microstation.rb', line 66

def plot_driver_directory
  root + "plot"
end

.rootObject



62
63
64
# File 'lib/microstation.rb', line 62

def root
  ROOT 
end

.runObject



197
198
199
# File 'lib/microstation.rb', line 197

def run(...)
  App.run(...)
end

.run_templates_in_dirObject



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

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

.save_as_pdf(d) ⇒ Object



32
33
34
35
36
37
38
# File 'lib/microstation.rb', line 32

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



172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
# File 'lib/microstation.rb', line 172

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



189
190
191
192
193
194
195
# File 'lib/microstation.rb', line 189

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



154
155
156
157
158
# File 'lib/microstation.rb', line 154

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

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



70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
# File 'lib/microstation.rb', line 70

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



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

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

.with_drawingsObject



150
151
152
# File 'lib/microstation.rb', line 150

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

.with_drawings_in_dir(dir) ⇒ Object

opens all the drawings in a drawing by calling open drawing



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

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