microstation 0.8.6 → 0.8.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +26 -29
- data/Rakefile +45 -45
- 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 +53 -68
- 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 +26 -12
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)
|