microstation 0.8.5 → 0.8.7
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.
- checksums.yaml +4 -4
- data/Gemfile +26 -29
- data/Rakefile +45 -44
- data/bin/dgn2pdf +5 -6
- data/bin/dgn_template +23 -25
- data/bin/pw_print +11 -13
- data/cad_files/drawing_no_block.dgn +0 -0
- data/cad_files/drawing_with_3_block.dgn +0 -0
- data/cad_files/drawing_with_block.dgn +0 -0
- data/cad_files/drawing_with_text.dgn +0 -0
- data/lib/microstation/app.rb +91 -87
- data/lib/microstation/cad_input_queue.rb +10 -20
- data/lib/microstation/cell.rb +6 -18
- data/lib/microstation/changer.rb +3 -3
- data/lib/microstation/configuration.rb +33 -50
- data/lib/microstation/criteria_creation_t.rb +4 -8
- data/lib/microstation/dir.rb +27 -59
- data/lib/microstation/directory.rb +2 -7
- data/lib/microstation/drawing.rb +103 -102
- data/lib/microstation/element.rb +55 -68
- data/lib/microstation/enumerator.rb +4 -9
- data/lib/microstation/errors.rb +0 -5
- data/lib/microstation/event_handler.rb +1 -5
- data/lib/microstation/ext/pathname.rb +12 -14
- data/lib/microstation/ext/win32ole.rb +0 -2
- data/lib/microstation/extensions/faa.rb +12 -34
- data/lib/microstation/file_tests.rb +15 -50
- data/lib/microstation/functions.rb +10 -20
- data/lib/microstation/graphics.rb +6 -13
- data/lib/microstation/line.rb +2 -6
- data/lib/microstation/model.rb +11 -20
- data/lib/microstation/model_trait.rb +40 -40
- data/lib/microstation/ole_cad_input_message.rb +25 -34
- data/lib/microstation/ole_helper.rb +58 -66
- data/lib/microstation/pdf_support.rb +7 -16
- data/lib/microstation/point3d.rb +17 -30
- data/lib/microstation/primitive_command_interface.rb +8 -14
- data/lib/microstation/properties.rb +29 -17
- data/lib/microstation/property_handler.rb +6 -8
- data/lib/microstation/scan/color.rb +1 -8
- data/lib/microstation/scan/criteria.rb +17 -33
- data/lib/microstation/scan/klass.rb +8 -12
- data/lib/microstation/scan/level.rb +2 -9
- data/lib/microstation/scan/line_style.rb +4 -12
- data/lib/microstation/scan/line_weight.rb +1 -3
- data/lib/microstation/scan/range.rb +2 -8
- data/lib/microstation/scan/scan_trait.rb +48 -51
- data/lib/microstation/scan/subtype.rb +0 -10
- data/lib/microstation/scan/type.rb +9 -15
- data/lib/microstation/scan_trait.rb +13 -20
- data/lib/microstation/scanner.rb +1 -11
- data/lib/microstation/tag.rb +12 -21
- data/lib/microstation/tag_set.rb +52 -71
- data/lib/microstation/tag_set_trait.rb +6 -10
- data/lib/microstation/tagged_element.rb +16 -28
- data/lib/microstation/template.rb +15 -14
- data/lib/microstation/template_info.rb +35 -49
- data/lib/microstation/template_runner.rb +14 -22
- data/lib/microstation/text.rb +15 -19
- data/lib/microstation/text_node.rb +17 -26
- data/lib/microstation/ts/attribute.rb +16 -20
- data/lib/microstation/ts/instance.rb +28 -38
- data/lib/microstation/ts/tagset_trait.rb +5 -12
- data/lib/microstation/types.rb +0 -3
- data/lib/microstation/version.rb +1 -3
- data/lib/microstation/wrap.rb +3 -10
- data/lib/microstation.rb +57 -72
- data/spec/microstation/app_spec.rb +49 -46
- data/spec/microstation/configuration_spec.rb +45 -43
- data/spec/microstation/drawing_spec.rb +103 -101
- data/spec/microstation/functions_spec.rb +18 -12
- data/spec/microstation/tag_set_spec.rb +57 -55
- data/spec/microstation/template_spec.rb +41 -42
- data/spec/microstation/text_node_spec.rb +16 -14
- data/spec/microstation/text_spec.rb +10 -8
- data/spec/microstation_spec.rb +18 -17
- data/spec/spec_helper.rb +18 -18
- metadata +36 -22
data/lib/microstation/app.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative
|
4
|
-
require_relative
|
5
|
-
require_relative
|
6
|
-
require_relative
|
7
|
-
require
|
3
|
+
require_relative "wrap"
|
4
|
+
require_relative "point3d"
|
5
|
+
require_relative "event_handler"
|
6
|
+
require_relative "functions"
|
7
|
+
require "pry"
|
8
8
|
|
9
9
|
class WIN32OLE
|
10
10
|
def ole_obj
|
@@ -19,14 +19,16 @@ module Windows
|
|
19
19
|
obj.windows_path(path)
|
20
20
|
end
|
21
21
|
|
22
|
-
|
23
|
-
|
24
|
-
end
|
25
|
-
|
22
|
+
# Convert path to windows path
|
23
|
+
# @param path [String, Pathname] the path you want to convert
|
26
24
|
def windows_path(path)
|
27
25
|
path = path.to_path if path.respond_to? :to_path
|
28
26
|
fs_object.GetAbsolutePathName(path.to_str)
|
29
27
|
end
|
28
|
+
|
29
|
+
def fs_object
|
30
|
+
@fs_object ||= WIN32OLE.new("Scripting.FileSystemObject")
|
31
|
+
end
|
30
32
|
end
|
31
33
|
end
|
32
34
|
|
@@ -41,11 +43,9 @@ module Microstation
|
|
41
43
|
class App
|
42
44
|
include Functions
|
43
45
|
|
44
|
-
|
45
|
-
@default_app_options = { visible: false }
|
46
|
+
@default_app_options = {visible: false}
|
46
47
|
|
47
48
|
class << self
|
48
|
-
|
49
49
|
attr_accessor :default_app_options
|
50
50
|
|
51
51
|
# include Wrap
|
@@ -66,12 +66,12 @@ module Microstation
|
|
66
66
|
# @yield [App] the_app yields the instanciated app
|
67
67
|
# @return [void]
|
68
68
|
def run(options = {})
|
69
|
-
opts =
|
69
|
+
opts = default_app_options.merge(options)
|
70
70
|
begin
|
71
71
|
the_app = new(**opts)
|
72
72
|
binding.pry if the_app.nil?
|
73
73
|
yield the_app
|
74
|
-
rescue
|
74
|
+
rescue
|
75
75
|
binding.pry
|
76
76
|
ensure
|
77
77
|
the_app.quit if the_app.respond_to? :quit
|
@@ -86,8 +86,9 @@ module Microstation
|
|
86
86
|
# (see #open_drawing)
|
87
87
|
# @yield Drawing
|
88
88
|
# @return [void]
|
89
|
-
def open_drawing(drawing,
|
90
|
-
|
89
|
+
def open_drawing(drawing, **options, &block)
|
90
|
+
opt_visible = options.delete(:visible) || false
|
91
|
+
run(visible: opt_visible) do |app|
|
91
92
|
app.open_drawing(drawing, **options, &block)
|
92
93
|
end
|
93
94
|
end
|
@@ -111,23 +112,27 @@ module Microstation
|
|
111
112
|
# @param error_proc [Proc]
|
112
113
|
# @yield [Drawing]
|
113
114
|
# @return [void]
|
114
|
-
def with_drawings(*files,
|
115
|
+
def with_drawings(*files, **options, &block)
|
115
116
|
# drawing_options = default_drawing_options.merge(options)
|
116
117
|
# app_options = default_app_options
|
117
118
|
errors = []
|
118
119
|
files = files[0] if files[0].is_a? Array
|
120
|
+
opt_visible = options.delete(:visible) || false
|
121
|
+
error_proc = options.delete(:error_proc)
|
119
122
|
begin
|
120
|
-
the_app = new(visible:
|
123
|
+
the_app = new(visible: opt_visible)
|
121
124
|
files_enum = files.each
|
122
125
|
loop do
|
123
126
|
file = files_enum.next
|
124
127
|
puts "opening #{file}.."
|
125
128
|
begin
|
126
|
-
the_app.open_drawing(file,
|
129
|
+
the_app.open_drawing(file, **options, &block)
|
127
130
|
the_app.ole_obj.ole_methods # check if server still open
|
128
|
-
rescue
|
131
|
+
rescue => e
|
132
|
+
raise e unless error_proc
|
133
|
+
|
129
134
|
error_proc.call(e, file)
|
130
|
-
the_app = new(
|
135
|
+
the_app = new(visible: opt_visible)
|
131
136
|
end
|
132
137
|
end
|
133
138
|
ensure
|
@@ -135,7 +140,7 @@ module Microstation
|
|
135
140
|
the_app = nil
|
136
141
|
end
|
137
142
|
end
|
138
|
-
|
143
|
+
end
|
139
144
|
|
140
145
|
attr_reader :scanners, :visible, :app_event, :project_dir
|
141
146
|
|
@@ -146,12 +151,12 @@ module Microstation
|
|
146
151
|
@visible = visible
|
147
152
|
@event_handler = event_handler
|
148
153
|
@ole_obj, @app_event = init_ole_and_app_event(visible: @visible, event_handler: @event_handler, tries: 5,
|
149
|
-
|
154
|
+
sleep_duration: 0.5)
|
150
155
|
@run_loop = true
|
151
156
|
@windows = Windows::FileSystem.new
|
152
157
|
# make_visible(visible)
|
153
158
|
@scanners = {}
|
154
|
-
rescue
|
159
|
+
rescue => e
|
155
160
|
binding.pry
|
156
161
|
end
|
157
162
|
|
@@ -179,13 +184,13 @@ module Microstation
|
|
179
184
|
#
|
180
185
|
def default_event_handler
|
181
186
|
event_handler = EventHandler.new
|
182
|
-
event_handler.add_handler(
|
183
|
-
puts
|
187
|
+
event_handler.add_handler("OnDesignFileOpened") do |*_args|
|
188
|
+
puts "drawing opened"
|
184
189
|
@drawing_opened = true
|
185
190
|
end
|
186
|
-
event_handler.add_handler(
|
191
|
+
event_handler.add_handler("OnDesignFileClosed") do |*_args|
|
187
192
|
@drawing_opened = false
|
188
|
-
puts
|
193
|
+
puts "drawing closed"
|
189
194
|
end
|
190
195
|
event_handler
|
191
196
|
end
|
@@ -199,7 +204,7 @@ module Microstation
|
|
199
204
|
# @return [<Type>] <description>
|
200
205
|
#
|
201
206
|
def register_handler(event, &block)
|
202
|
-
@event_handler.add_handler(event, &block) unless event ==
|
207
|
+
@event_handler.add_handler(event, &block) unless event == "OnQuit"
|
203
208
|
end
|
204
209
|
|
205
210
|
#
|
@@ -214,7 +219,7 @@ module Microstation
|
|
214
219
|
end
|
215
220
|
|
216
221
|
def exit_message_looop
|
217
|
-
puts
|
222
|
+
puts "Microstation exiting..."
|
218
223
|
@run_loop = false
|
219
224
|
end
|
220
225
|
|
@@ -228,7 +233,7 @@ module Microstation
|
|
228
233
|
end
|
229
234
|
|
230
235
|
def init_ole_and_app_event(visible: @visible, event_handler: @event_handler, tries: 5, sleep_duration: 1)
|
231
|
-
ole = WIN32OLE.new(
|
236
|
+
ole = WIN32OLE.new("MicrostationDGN.Application")
|
232
237
|
sleep(sleep_duration)
|
233
238
|
ole.Visible = visible
|
234
239
|
ole.IsProcessLocked = true
|
@@ -236,12 +241,12 @@ module Microstation
|
|
236
241
|
app_event = WIN32OLE_EVENT.new(ole)
|
237
242
|
app_event.handler = event_handler
|
238
243
|
[ole, app_event]
|
239
|
-
rescue
|
244
|
+
rescue => e
|
240
245
|
tries -= 1
|
241
246
|
sleep_duration += 1.5
|
242
247
|
puts "Error: #{e}. #{tries} tries left."
|
243
248
|
retry if tries.positive?
|
244
|
-
raise e,
|
249
|
+
raise e, "unable to init ole app"
|
245
250
|
end
|
246
251
|
|
247
252
|
# @return [Boolean] whether the app is visible
|
@@ -274,7 +279,7 @@ module Microstation
|
|
274
279
|
|
275
280
|
def normalize_name(name)
|
276
281
|
name = Pathname.new(name) unless name.is_a? Pathname
|
277
|
-
name = name.ext(
|
282
|
+
name = name.ext(".dgn") unless name.extname.to_s == /\.(dgn|dwg)$/
|
278
283
|
(base_dir + name).expand_path
|
279
284
|
end
|
280
285
|
|
@@ -292,7 +297,7 @@ module Microstation
|
|
292
297
|
is_ok = true
|
293
298
|
begin
|
294
299
|
@ole_obj.Visible
|
295
|
-
rescue
|
300
|
+
rescue => e
|
296
301
|
is_ok = false
|
297
302
|
end
|
298
303
|
|
@@ -327,14 +332,12 @@ module Microstation
|
|
327
332
|
|
328
333
|
begin
|
329
334
|
ole = ole_open_drawing(windows_path(filename), readonly: readonly, wait_time: wait_time,
|
330
|
-
|
331
|
-
rescue
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
raise e
|
337
|
-
end
|
335
|
+
wait_interval: wait_interval)
|
336
|
+
rescue => e
|
337
|
+
raise e unless error_proc
|
338
|
+
|
339
|
+
error_proc.call(filename)
|
340
|
+
return
|
338
341
|
end
|
339
342
|
drawing = drawing_from_ole(ole)
|
340
343
|
return drawing unless block_given?
|
@@ -365,7 +368,7 @@ module Microstation
|
|
365
368
|
|
366
369
|
# @return [String] the configuration variable USERNAME
|
367
370
|
def username
|
368
|
-
configuration[
|
371
|
+
configuration["USERNAME"]
|
369
372
|
end
|
370
373
|
|
371
374
|
# create a new drawing
|
@@ -388,12 +391,12 @@ module Microstation
|
|
388
391
|
windows_name = windows_path(filename)
|
389
392
|
ole = new_ole_drawing(seedfile, windows_name, open: open, wait_time: wait_time, wait_interval: wait_interval)
|
390
393
|
drawing = drawing_from_ole(ole)
|
391
|
-
return drawing unless
|
394
|
+
return drawing unless block
|
392
395
|
|
393
396
|
begin
|
394
397
|
yield drawing
|
395
|
-
rescue
|
396
|
-
|
398
|
+
rescue => e
|
399
|
+
"puts error in new drawing"
|
397
400
|
raise e
|
398
401
|
ensure
|
399
402
|
drawing.close
|
@@ -406,7 +409,7 @@ module Microstation
|
|
406
409
|
raise "drawing not opened in #{wait_time}" unless drawing_opened?
|
407
410
|
|
408
411
|
ole
|
409
|
-
rescue
|
412
|
+
rescue => e
|
410
413
|
raise e
|
411
414
|
end
|
412
415
|
|
@@ -417,7 +420,7 @@ module Microstation
|
|
417
420
|
# prepend a dir to the MS_SEEDFILES configuration
|
418
421
|
# @param dir [String,Pathname]
|
419
422
|
def prepend_seed_path(dir)
|
420
|
-
configuration.prepend(
|
423
|
+
configuration.prepend("MS_SEEDFILES", windows_path(dir))
|
421
424
|
end
|
422
425
|
|
423
426
|
def drawing_from_ole(ole)
|
@@ -425,7 +428,7 @@ module Microstation
|
|
425
428
|
end
|
426
429
|
|
427
430
|
def determine_seed(seedfile)
|
428
|
-
return configuration[
|
431
|
+
return configuration["MS_DESIGNSEED"] unless seedfile
|
429
432
|
|
430
433
|
seed = find_seed(seedfile)
|
431
434
|
return seed.to_s if seed
|
@@ -435,7 +438,7 @@ module Microstation
|
|
435
438
|
|
436
439
|
# @return [String] the configuration variable MS_SEEDFILES
|
437
440
|
def configured_seed_paths
|
438
|
-
configuration[
|
441
|
+
configuration["MS_SEEDFILES"]
|
439
442
|
end
|
440
443
|
|
441
444
|
# find the seedfile
|
@@ -446,7 +449,7 @@ module Microstation
|
|
446
449
|
# * If the seed file is not found search MS_SEEDFILES
|
447
450
|
# @return [Pathname] seedfile the found seedfile
|
448
451
|
def find_seed(seedfile)
|
449
|
-
seed = Pathname(seedfile).expand_path.sub_ext(
|
452
|
+
seed = Pathname(seedfile).expand_path.sub_ext(".dgn")
|
450
453
|
return seed if seed.file?
|
451
454
|
|
452
455
|
find_seed_in_seed_dirs(seed.basename)
|
@@ -459,7 +462,7 @@ module Microstation
|
|
459
462
|
|
460
463
|
# @return [Array] returns the MS_SEEDFILES as Pathnames Array
|
461
464
|
def seed_paths
|
462
|
-
configured_seed_paths.split(
|
465
|
+
configured_seed_paths.split(";").map { |d| Pathname(d) }
|
463
466
|
end
|
464
467
|
|
465
468
|
def eval_cexpression(string)
|
@@ -476,7 +479,7 @@ module Microstation
|
|
476
479
|
@scanners.each { |_name, sc| sc.close }
|
477
480
|
begin
|
478
481
|
ole_obj.Quit
|
479
|
-
rescue
|
482
|
+
rescue
|
480
483
|
nil
|
481
484
|
end
|
482
485
|
end
|
@@ -484,14 +487,14 @@ module Microstation
|
|
484
487
|
# the active design file
|
485
488
|
# @return [Drawing]
|
486
489
|
def active_design_file
|
487
|
-
|
488
|
-
|
489
|
-
|
490
|
-
|
490
|
+
return unless active_design_file?
|
491
|
+
|
492
|
+
ole = ole_obj.ActiveDesignFile
|
493
|
+
drawing_from_ole(ole)
|
491
494
|
end
|
492
495
|
|
493
|
-
|
494
|
-
|
496
|
+
alias_method :active_drawing, :active_design_file
|
497
|
+
alias_method :current_drawing, :active_design_file
|
495
498
|
|
496
499
|
#
|
497
500
|
# close the active_design_file
|
@@ -502,7 +505,7 @@ module Microstation
|
|
502
505
|
active_design_file.close if active_design_file?
|
503
506
|
end
|
504
507
|
|
505
|
-
|
508
|
+
alias_method :close_current_drawing, :close_active_drawing
|
506
509
|
|
507
510
|
#
|
508
511
|
#
|
@@ -513,7 +516,7 @@ module Microstation
|
|
513
516
|
ole_obj.HasActiveDesignFile
|
514
517
|
end
|
515
518
|
|
516
|
-
|
519
|
+
alias_method :current_design_file?, :active_design_file?
|
517
520
|
|
518
521
|
#
|
519
522
|
# <Description>
|
@@ -535,7 +538,7 @@ module Microstation
|
|
535
538
|
end
|
536
539
|
|
537
540
|
def tags_criteria
|
538
|
-
|
541
|
+
scanners[:tags] || create_scanner(:tags) { include_tags }
|
539
542
|
end
|
540
543
|
|
541
544
|
def create_scan_criteria(name = nil, &block)
|
@@ -569,7 +572,7 @@ module Microstation
|
|
569
572
|
|
570
573
|
begin
|
571
574
|
yield queue
|
572
|
-
rescue
|
575
|
+
rescue
|
573
576
|
ensure
|
574
577
|
queue.close
|
575
578
|
queue = nil
|
@@ -598,43 +601,43 @@ module Microstation
|
|
598
601
|
#
|
599
602
|
def show_temp_message(text, location: nil)
|
600
603
|
loc = case location
|
601
|
-
|
602
|
-
|
603
|
-
|
604
|
-
|
605
|
-
|
606
|
-
|
607
|
-
|
604
|
+
when :left
|
605
|
+
MSD::MsdStatusBarAreaLeft
|
606
|
+
when :middle
|
607
|
+
MSD::MsdStatusBarAreaMiddle
|
608
|
+
else
|
609
|
+
MSD::MsdStatusBarAreaLeft
|
610
|
+
end
|
608
611
|
ole_obj.ShowTempMessage(loc, text)
|
609
612
|
end
|
610
613
|
|
611
614
|
def can_open?(filename)
|
612
615
|
ext = File.extname(filename)
|
613
|
-
(ext ==
|
616
|
+
(ext == ".dwg") || (ext == ".dgn")
|
614
617
|
end
|
615
618
|
|
616
619
|
def active_model_reference
|
617
620
|
DefaultModel.new(self, ole_obj.ActiveModelReference)
|
618
|
-
rescue
|
621
|
+
rescue
|
619
622
|
nil
|
620
623
|
end
|
621
624
|
|
622
625
|
def default_model
|
623
626
|
DefaultModel.new(self, ole_obj.DefaultModelReference)
|
624
|
-
rescue
|
627
|
+
rescue
|
625
628
|
nil
|
626
629
|
end
|
627
630
|
|
628
631
|
def ole_point
|
629
|
-
::WIN32OLE_RECORD.new(
|
632
|
+
::WIN32OLE_RECORD.new("Point3d", ole_obj)
|
630
633
|
end
|
631
634
|
|
632
635
|
def ole_rotation
|
633
|
-
::WIN32OLE_RECORD.new(
|
636
|
+
::WIN32OLE_RECORD.new("Rotation", ole_obj)
|
634
637
|
end
|
635
638
|
|
636
639
|
def ole_matrix
|
637
|
-
::WIN32OLE_RECORD.new(
|
640
|
+
::WIN32OLE_RECORD.new("Matrix", ole_obj)
|
638
641
|
end
|
639
642
|
|
640
643
|
#
|
@@ -655,7 +658,7 @@ module Microstation
|
|
655
658
|
end
|
656
659
|
|
657
660
|
def to_ole_matrix3d(vec)
|
658
|
-
if vec.instance_of?(WIN32OLE_RECORD) && vec.typename ==
|
661
|
+
if vec.instance_of?(WIN32OLE_RECORD) && vec.typename == "Matrix3d"
|
659
662
|
vec
|
660
663
|
else
|
661
664
|
binding.pry
|
@@ -690,14 +693,14 @@ module Microstation
|
|
690
693
|
# @return [Boolean] true if pt is WIN32OLE_RECORD of 'Point3d'
|
691
694
|
#
|
692
695
|
def ole_point3d?(pt)
|
693
|
-
pt.instance_of?(WIN32OLE_RECORD) && pt.typename ==
|
696
|
+
pt.instance_of?(WIN32OLE_RECORD) && pt.typename == "Point3d"
|
694
697
|
end
|
695
698
|
|
696
699
|
def create_text_node(origin, rotation, temp = nil)
|
697
700
|
ole_origin = to_ole_point3d(origin)
|
698
701
|
ole_rotation = to_ole_matrix3d(rotation)
|
699
702
|
temp ||= WIN32OLE_VARIANT::Nothing
|
700
|
-
|
703
|
+
ole_obj.CreateTextNodeElement1(temp, ole_origin, ole_rotation)
|
701
704
|
rescue Exception => e
|
702
705
|
puts e.message
|
703
706
|
nil
|
@@ -720,7 +723,7 @@ module Microstation
|
|
720
723
|
when Point3d
|
721
724
|
pt
|
722
725
|
when WIN32OLE_RECORD
|
723
|
-
Point3d.from_ole(pt) if pt.typename ==
|
726
|
+
Point3d.from_ole(pt) if pt.typename == "Point3d"
|
724
727
|
end
|
725
728
|
end
|
726
729
|
|
@@ -733,30 +736,31 @@ module Microstation
|
|
733
736
|
end
|
734
737
|
|
735
738
|
def my_place_line
|
736
|
-
require_relative
|
739
|
+
require_relative "primitive_command_interface"
|
737
740
|
start_primitive LineCreation
|
738
741
|
end
|
739
742
|
|
740
743
|
def method_missing(meth, *args, &block)
|
741
|
-
if
|
742
|
-
require
|
744
|
+
if /^[A-Z]/.match?(meth.to_s)
|
745
|
+
require "pry"
|
746
|
+
binding.pry
|
743
747
|
result = ole_obj.send(meth, *args, &block)
|
744
748
|
else
|
745
749
|
super(meth, *args, &block)
|
746
750
|
end
|
747
|
-
rescue
|
751
|
+
rescue => e
|
748
752
|
binding.pry
|
749
753
|
end
|
750
754
|
|
751
755
|
protected
|
752
756
|
|
753
757
|
def ole_open_drawing(path, readonly: false, wait_time: 500, wait_interval: 0.5)
|
754
|
-
ole = ole_obj.OpenDesignFile(windows_path(path),
|
758
|
+
ole = ole_obj.OpenDesignFile(windows_path(path), "ReadOnly" => readonly)
|
755
759
|
wait_drawing_opened(wait_time, wait_interval)
|
756
760
|
raise "drawing not opened in #{wait_time}" unless drawing_opened?
|
757
761
|
|
758
762
|
ole
|
759
|
-
rescue
|
763
|
+
rescue => e
|
760
764
|
raise e
|
761
765
|
end
|
762
766
|
|
@@ -1,14 +1,12 @@
|
|
1
|
-
require_relative
|
2
|
-
require
|
1
|
+
require_relative "ole_cad_input_message"
|
2
|
+
require "dry/monads"
|
3
3
|
module Microstation
|
4
|
-
|
5
4
|
class CadInputQueue
|
6
|
-
|
7
5
|
include Dry::Monads[:result]
|
8
6
|
|
9
|
-
attr_reader :app
|
7
|
+
attr_reader :app, :ole_obj
|
10
8
|
|
11
|
-
def initialize(ole_obj,app)
|
9
|
+
def initialize(ole_obj, app)
|
12
10
|
@ole_obj = ole_obj
|
13
11
|
@app = app
|
14
12
|
@input_procs = []
|
@@ -42,29 +40,27 @@ module Microstation
|
|
42
40
|
@ole_obj.SendTentativePoint(pt)
|
43
41
|
end
|
44
42
|
|
45
|
-
def send_drag_points(down_pt, up_point, view_specifier:nil, qualifier:nil)
|
46
|
-
@ole_obj.SendDragPoints(down_pt,up_point)
|
43
|
+
def send_drag_points(down_pt, up_point, view_specifier: nil, qualifier: nil)
|
44
|
+
@ole_obj.SendDragPoints(down_pt, up_point)
|
47
45
|
end
|
48
46
|
|
49
47
|
def get_input(*args)
|
50
48
|
com = @ole_obj.GetInput(*args)
|
51
|
-
OLE_CadInputMessage.new(com,app)
|
49
|
+
OLE_CadInputMessage.new(com, app)
|
52
50
|
end
|
53
51
|
|
54
|
-
|
55
52
|
def get_point(prompt: "Enter vertex")
|
56
53
|
show_prompt(prompt)
|
57
54
|
mycim = get_input(InputType::DataPoint, InputType::Reset)
|
58
55
|
if mycim.reset?
|
59
56
|
clear_ui
|
60
|
-
|
57
|
+
Failure(:reset_pressed)
|
61
58
|
elsif mycim.data_point?
|
62
59
|
clear_ui
|
63
60
|
Success(mycim.get_point)
|
64
61
|
end
|
65
62
|
end
|
66
63
|
|
67
|
-
|
68
64
|
def show_command(text)
|
69
65
|
app.show_command(text)
|
70
66
|
end
|
@@ -77,24 +73,18 @@ module Microstation
|
|
77
73
|
app.show_status(text)
|
78
74
|
end
|
79
75
|
|
80
|
-
|
81
76
|
def clear_ui
|
82
77
|
app.show_prompt("")
|
83
78
|
app.show_status("")
|
84
79
|
app.show_command("")
|
85
80
|
end
|
86
81
|
|
87
|
-
|
88
|
-
|
89
|
-
@ole_obj.send(name,*args,&block)
|
82
|
+
def method_missing(name, *args, &block)
|
83
|
+
@ole_obj.send(name, *args, &block)
|
90
84
|
end
|
91
85
|
|
92
86
|
def start_default_command
|
93
87
|
@app.ole_obj.CommandState.StartDefaultCommand
|
94
88
|
end
|
95
|
-
|
96
|
-
|
97
|
-
|
98
89
|
end
|
99
|
-
|
100
90
|
end
|
data/lib/microstation/cell.rb
CHANGED
@@ -1,7 +1,5 @@
|
|
1
1
|
module Microstation
|
2
|
-
|
3
2
|
class Cell < Element
|
4
|
-
|
5
3
|
def initialize(*args)
|
6
4
|
super(*args)
|
7
5
|
@should_replace = false
|
@@ -16,19 +14,16 @@ module Microstation
|
|
16
14
|
ole_obj.Name
|
17
15
|
end
|
18
16
|
|
19
|
-
|
20
17
|
def text_elements
|
21
18
|
return to_enum(:text_elements) unless block_given?
|
19
|
+
|
22
20
|
each do |el|
|
23
21
|
yield el if el.textual?
|
24
22
|
end
|
25
23
|
end
|
26
|
-
|
27
24
|
end
|
28
|
-
|
29
25
|
end
|
30
26
|
|
31
|
-
|
32
27
|
# def each
|
33
28
|
# return enum_for(:each) unless block_given?
|
34
29
|
# ole_enum = @ole_obj.GetSubElements
|
@@ -36,11 +31,10 @@ end
|
|
36
31
|
# item = ole_enum.Currentq
|
37
32
|
# wrapped = Microstation::Wrap.wrap(item,app)
|
38
33
|
|
39
|
-
# yield
|
34
|
+
# yield
|
40
35
|
# end
|
41
36
|
# end
|
42
37
|
|
43
|
-
|
44
38
|
# def each_ole(ole)
|
45
39
|
# ole_enum = ole.GetSubElements
|
46
40
|
# while ole_enum.MoveNext
|
@@ -49,14 +43,12 @@ end
|
|
49
43
|
# each_ole(item)
|
50
44
|
# else
|
51
45
|
|
52
|
-
|
53
46
|
# wrapped = Microstation::Wrap.wrap(item,app)
|
54
47
|
|
55
|
-
# yield
|
56
|
-
# end
|
48
|
+
# yield
|
49
|
+
# end
|
57
50
|
# end
|
58
51
|
|
59
|
-
|
60
52
|
# def each_ole(ole)
|
61
53
|
# ole_enum = ole.GetSubElements
|
62
54
|
# end
|
@@ -74,8 +66,6 @@ end
|
|
74
66
|
# ole_obj.ReplaceCurrentElement this_var
|
75
67
|
# end
|
76
68
|
|
77
|
-
|
78
|
-
|
79
69
|
# Dim search_text As String
|
80
70
|
# Dim replace_text As String
|
81
71
|
|
@@ -104,7 +94,6 @@ end
|
|
104
94
|
|
105
95
|
# Public Sub ReplaceAllTextsInModel()
|
106
96
|
|
107
|
-
|
108
97
|
# 'USE THIS TO SET THE REPLACEMENT BY CONFIGURATION VARIABLE
|
109
98
|
# 'search_text = ActiveWorkspace.ExpandConfigurationVariable("SEARCH_TEXT")
|
110
99
|
# 'replace_text = ActiveWorkspace.ExpandConfigurationVariable("REPLACE_TEXT")
|
@@ -126,7 +115,6 @@ end
|
|
126
115
|
# Loop
|
127
116
|
# End Sub
|
128
117
|
|
129
|
-
|
130
118
|
# Option Explicit
|
131
119
|
# ' Searches in text strings and nested cells
|
132
120
|
|
@@ -148,7 +136,7 @@ end
|
|
148
136
|
# End If
|
149
137
|
|
150
138
|
# sToFind = Trim(CmdLine(0)) '1. Parameter for search text
|
151
|
-
# sToReplace = Trim(CmdLine(1)) '2. Parameter for new text
|
139
|
+
# sToReplace = Trim(CmdLine(1)) '2. Parameter for new text
|
152
140
|
# ' Check if optional parameter = yes complex was given
|
153
141
|
# isComplex = False
|
154
142
|
# If UBound(CmdLine) > 1 Then
|
@@ -188,4 +176,4 @@ end
|
|
188
176
|
# End If
|
189
177
|
# End If
|
190
178
|
# End If
|
191
|
-
# # End Sub
|
179
|
+
# # End Sub
|
data/lib/microstation/changer.rb
CHANGED
@@ -29,15 +29,15 @@ module Microstation
|
|
29
29
|
tmp_dgn = the_app ? change_in_tempfile(the_app, &block) : change_once_in_tempfile(&block)
|
30
30
|
FileUtils.mv(tmp_dgn.to_s, newname.to_s)
|
31
31
|
puts "Saved drawing #{newname}"
|
32
|
-
rescue
|
33
|
-
puts
|
32
|
+
rescue => e
|
33
|
+
puts "error in changing file"
|
34
34
|
raise e
|
35
35
|
end
|
36
36
|
|
37
37
|
def change_in_tempfile(app, &block)
|
38
38
|
path = Pathname(File.join(::Dir.tmpdir, "#{template_filename}_#{Time.now.to_i}_#{rand(1000)}"))
|
39
39
|
app.new_drawing(path, seedfile: @template) do |drawing|
|
40
|
-
if
|
40
|
+
if block
|
41
41
|
block.call(drawing)
|
42
42
|
else
|
43
43
|
default_block.call(drawing)
|