microstation 0.4.1 → 0.8.3
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 +7 -0
- data/.autotest +23 -23
- data/.rspec +2 -2
- data/Gemfile +28 -10
- data/History.txt +6 -6
- data/LICENSE.adoc +22 -0
- data/Manifest.txt +81 -60
- data/README.adoc +131 -0
- data/Rakefile +71 -30
- data/bin/dgn2pdf +36 -37
- data/bin/dgn_template +107 -0
- data/bin/microstation +231 -0
- data/bin/pw_print +35 -0
- data/cad_files/drawing_faatitle_in_non_default_model.dgn +0 -0
- 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/seed2d.dgn +0 -0
- data/cad_files/test.dgn +0 -0
- data/lib/microstation.rb +252 -88
- data/lib/microstation/app.rb +781 -286
- data/lib/microstation/cad_input_queue.rb +100 -25
- data/lib/microstation/cell.rb +191 -0
- data/lib/microstation/changer.rb +70 -0
- data/lib/microstation/configuration.rb +193 -57
- data/lib/microstation/criteria_creation_t.rb +23 -0
- data/lib/microstation/dir.rb +252 -252
- data/lib/microstation/directory.rb +46 -0
- data/lib/microstation/drawing.rb +690 -189
- data/lib/microstation/element.rb +311 -0
- data/lib/microstation/enumerator.rb +32 -29
- data/lib/microstation/errors.rb +17 -0
- data/lib/microstation/event_handler.rb +28 -0
- data/lib/microstation/ext/pathname.rb +23 -25
- data/lib/microstation/ext/win32ole.rb +7 -0
- data/lib/microstation/extensions/faa.rb +124 -0
- data/lib/microstation/file_tests.rb +68 -0
- data/lib/microstation/functions.rb +60 -0
- data/lib/microstation/graphics.rb +35 -0
- data/lib/microstation/line.rb +19 -0
- data/lib/microstation/model.rb +45 -0
- data/lib/microstation/model_trait.rb +189 -0
- data/lib/microstation/ole_cad_input_message.rb +101 -0
- data/lib/microstation/ole_helper.rb +152 -0
- data/lib/microstation/pdf_support.rb +40 -40
- data/lib/microstation/point3d.rb +71 -0
- data/lib/microstation/primitive_command_interface.rb +66 -0
- data/lib/microstation/properties.rb +61 -57
- data/lib/microstation/property_handler.rb +48 -0
- data/lib/microstation/scan/color.rb +38 -38
- data/lib/microstation/scan/criteria.rb +89 -85
- data/lib/microstation/scan/klass.rb +43 -43
- data/lib/microstation/scan/level.rb +38 -38
- data/lib/microstation/scan/line_style.rb +45 -45
- data/lib/microstation/scan/line_weight.rb +33 -33
- data/lib/microstation/scan/range.rb +19 -0
- data/lib/microstation/scan/scan_trait.rb +51 -0
- data/lib/microstation/scan/subtype.rb +40 -40
- data/lib/microstation/scan/type.rb +134 -109
- data/lib/microstation/scan_trait.rb +62 -0
- data/lib/microstation/scanner.rb +24 -24
- data/lib/microstation/tag.rb +87 -58
- data/lib/microstation/tag_set.rb +385 -280
- data/lib/microstation/tag_set_trait.rb +51 -0
- data/lib/microstation/tagged_element.rb +105 -0
- data/lib/microstation/template.rb +90 -84
- data/lib/microstation/template_info.rb +172 -0
- data/lib/microstation/template_runner.rb +65 -0
- data/lib/microstation/text.rb +79 -54
- data/lib/microstation/text_node.rb +124 -74
- data/lib/microstation/ts/attribute.rb +140 -139
- data/lib/microstation/ts/instance.rb +146 -112
- data/lib/microstation/ts/tagset_trait.rb +49 -0
- data/lib/microstation/types.rb +91 -91
- data/lib/microstation/version.rb +5 -0
- data/lib/microstation/wrap.rb +28 -214
- data/plot/pdf-bw.plt +164 -164
- data/plot/pdf.plt +163 -163
- data/plot/png.plt +383 -383
- data/plot/tiff.plt +384 -384
- data/plot/wmbw.tbl +324 -66
- data/plot/wmcolor.tbl +62 -62
- metadata +301 -86
- data/.gemtest +0 -0
- data/README.txt +0 -75
- data/lib/microstation/attributes.rb +0 -35
- data/lib/microstation/extensions/hash.rb +0 -27
- data/spec/app_spec.rb +0 -267
- data/spec/configuration_spec.rb +0 -122
- data/spec/drawing_spec.rb +0 -247
- data/spec/drawings/new_drawing.dgn +0 -0
- data/spec/drawings/test.dgn +0 -0
- data/spec/drawings/test1.dgn +0 -0
- data/spec/drawings/testfile.pdf +0 -0
- data/spec/enumerator_spec.rb +0 -60
- data/spec/microstation_spec.rb +0 -36
- data/spec/scanner_spec.rb +0 -155
- data/spec/spec_app.rb +0 -11
- data/spec/spec_helper.rb +0 -31
- data/spec/tag_set_spec.rb +0 -123
- data/spec/text_node_spec.rb +0 -92
- data/spec/text_spec.rb +0 -62
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
module Microstation
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
module InputType
|
|
5
|
+
|
|
6
|
+
Command = 1
|
|
7
|
+
Reset = 2
|
|
8
|
+
DataPoint = 3
|
|
9
|
+
Keyin = 4
|
|
10
|
+
Any = 5
|
|
11
|
+
Unassigned = 6
|
|
12
|
+
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class OLE_CadInputMessage
|
|
17
|
+
|
|
18
|
+
include WIN32OLE::VARIANT
|
|
19
|
+
attr_reader :lastargs,:ole_obj, :app
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def initialize(ole,app)
|
|
23
|
+
@ole_obj = ole
|
|
24
|
+
@app = app
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def reset?
|
|
28
|
+
input_type == InputType::Reset
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def command?
|
|
32
|
+
input_type == InputType::Command
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def data_point?
|
|
36
|
+
input_type == InputType::DataPoint
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def key_in?
|
|
40
|
+
input_type == InputType::Keyin
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def any?
|
|
44
|
+
input_type == InputType::Any
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def unassigned?
|
|
48
|
+
input_type == InputType::Unassigned
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def input_type
|
|
52
|
+
@input_type ||= get_input_type
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# MsdCadInputType InputType
|
|
56
|
+
def get_input_type()
|
|
57
|
+
ole_obj.InputType
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# BSTR Keyin
|
|
61
|
+
def get_keyin()
|
|
62
|
+
ret = ole_obj._getproperty(1610743809, [], [])
|
|
63
|
+
@lastargs = WIN32OLE::ARGV
|
|
64
|
+
ret
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
# Point3d Point
|
|
68
|
+
def get_point()
|
|
69
|
+
app.to_point3d(ole_obj.Point)
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
# BSTR CommandKeyin
|
|
73
|
+
def get_command_keyin()
|
|
74
|
+
ret = ole_obj._getproperty(1610743811, [], [])
|
|
75
|
+
@lastargs = WIN32OLE::ARGV
|
|
76
|
+
ret
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
# _View View
|
|
80
|
+
def get_view()
|
|
81
|
+
ret = ole_obj._getproperty(1610743812, [], [])
|
|
82
|
+
@lastargs = WIN32OLE::ARGV
|
|
83
|
+
ret
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
# Point3d ScreenPoint
|
|
87
|
+
def get_screen_point()
|
|
88
|
+
ret = ole_obj._getproperty(1610743813, [], [])
|
|
89
|
+
@lastargs = WIN32OLE::ARGV
|
|
90
|
+
ret
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
# I4 CursorButton
|
|
94
|
+
def get_cursor_button()
|
|
95
|
+
ret = ole_obj._getproperty(1610743814, [], [])
|
|
96
|
+
@lastargs = WIN32OLE::ARGV
|
|
97
|
+
ret
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
end
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
module OleHelper
|
|
2
|
+
|
|
3
|
+
def select_ole_type(name)
|
|
4
|
+
if name.class == String
|
|
5
|
+
name = Regexp.new(name)
|
|
6
|
+
end
|
|
7
|
+
reg = Regexp.new(name.source,Regexp::IGNORECASE)
|
|
8
|
+
typelib.ole_classes.select do |k|
|
|
9
|
+
reg =~ k.name
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def select_ole_method(name)
|
|
14
|
+
if name.class == String
|
|
15
|
+
name = Regexp.new(name)
|
|
16
|
+
end
|
|
17
|
+
reg = Regexp.new(name.source,Regexp::IGNORECASE)
|
|
18
|
+
self.ole_methods.select do |k|
|
|
19
|
+
reg =~ k.name
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def ole_classes
|
|
24
|
+
typelib.ole_classes
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def create_ole_type(type)
|
|
28
|
+
WIN32OLE.new(type.guid)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def ole_classes_detail
|
|
32
|
+
s = String.new
|
|
33
|
+
ole_classes.sort_by{|k| k.ole_type}.each do |k|
|
|
34
|
+
s << "#{k.name}\n\n"
|
|
35
|
+
s << "Type: #{k.ole_type}\n"
|
|
36
|
+
s << "progid: #{k.progid}\n"
|
|
37
|
+
s << "quid: #{k.guid}\n"
|
|
38
|
+
s << "------------\n\n"
|
|
39
|
+
end
|
|
40
|
+
s
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def ole_methods_detail
|
|
45
|
+
s = String.new
|
|
46
|
+
ole_methods.each do |m|
|
|
47
|
+
s << "Method #{m.name}\n\n"
|
|
48
|
+
s << "dispid: #{m.dispid}\n"
|
|
49
|
+
s << "Event? #{m.event?}\n"
|
|
50
|
+
s << "Event interface: #{m.event_interface}\n"
|
|
51
|
+
s << "invoke kind: #{m.invoke_kind}\n"
|
|
52
|
+
s << "return type: #{m.return_type_detail}\n"
|
|
53
|
+
s << "visible: #{m.visible?}\n"
|
|
54
|
+
s << "params...\n"
|
|
55
|
+
m.params.each do |p|
|
|
56
|
+
s << "Param Name: #{p.name}\n"
|
|
57
|
+
s << "Optional: #{p.optional?}\n"
|
|
58
|
+
s << "Output? #{p.output?}\n"
|
|
59
|
+
s << "Detail\n"
|
|
60
|
+
s << "#{p.ole_type_detail}"
|
|
61
|
+
s << "\n\n"
|
|
62
|
+
end
|
|
63
|
+
s << "------------\n\n"
|
|
64
|
+
end
|
|
65
|
+
s
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
def each_ole_type
|
|
70
|
+
return enum_for(:each_ole_type) unless block_given?
|
|
71
|
+
typelib.ole_classes.each do |t|
|
|
72
|
+
yield t
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def get_ole_type(name)
|
|
77
|
+
if name.class == String
|
|
78
|
+
return ole_classes.find{|t| t.name == name}
|
|
79
|
+
end
|
|
80
|
+
reg = Regexp.new(name.source, Regexp::IGNORECASE)
|
|
81
|
+
ole_classes.find do |t|
|
|
82
|
+
t.name =~ name
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def typelib
|
|
87
|
+
self.ole_typelib
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
class WIN32OLE
|
|
95
|
+
|
|
96
|
+
include OleHelper
|
|
97
|
+
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
# def select_ole_type(name)
|
|
102
|
+
# if name.class == String
|
|
103
|
+
# name = Regexp.new(name)
|
|
104
|
+
# end
|
|
105
|
+
# reg = Regexp.new(name.source,Regexp::IGNORECASE)
|
|
106
|
+
# typelib.ole_classes.select do |k|
|
|
107
|
+
# reg =~ k.name
|
|
108
|
+
# end
|
|
109
|
+
# end
|
|
110
|
+
|
|
111
|
+
# def select_ole_method(name)
|
|
112
|
+
# if name.class == String
|
|
113
|
+
# name = Regexp.new(name)
|
|
114
|
+
# end
|
|
115
|
+
# reg = Regexp.new(name.source,Regexp::IGNORECASE)
|
|
116
|
+
# ole_obj.ole_methods.select do |k|
|
|
117
|
+
# reg =~ k.name
|
|
118
|
+
# end
|
|
119
|
+
# end
|
|
120
|
+
|
|
121
|
+
# def ole_classes
|
|
122
|
+
# typelib.ole_classes
|
|
123
|
+
# end
|
|
124
|
+
|
|
125
|
+
# def create_ole_type(type)
|
|
126
|
+
# WIN32OLE.new(type.guid)
|
|
127
|
+
# end
|
|
128
|
+
|
|
129
|
+
# def each_ole_type
|
|
130
|
+
# return enum_for(:each_ole_type) unless block_given?
|
|
131
|
+
# typelib.ole_classes.each do |t|
|
|
132
|
+
# yield t
|
|
133
|
+
# end
|
|
134
|
+
# end
|
|
135
|
+
|
|
136
|
+
# def get_ole_type(name)
|
|
137
|
+
# if name.class == String
|
|
138
|
+
# name = Regexp.new name
|
|
139
|
+
# end
|
|
140
|
+
# reg = Regexp.new(name.source, Regexp::IGNORECASE)
|
|
141
|
+
# typelib.ole_classes.find do |t|
|
|
142
|
+
# t.name =~ name
|
|
143
|
+
# end
|
|
144
|
+
# end
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
# alias :find_ole_type :get_ole_type
|
|
149
|
+
|
|
150
|
+
# def typelib
|
|
151
|
+
# ole_obj.ole_typelib
|
|
152
|
+
# end
|
|
@@ -1,40 +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
|
-
|
|
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,71 @@
|
|
|
1
|
+
module Microstation
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class Point3d
|
|
6
|
+
|
|
7
|
+
class << self
|
|
8
|
+
|
|
9
|
+
def ole_point3d?(ole)
|
|
10
|
+
ole.class == WIN32OLE_RECORD && ole.typename == 'Point3d'
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def cartesian_to_polar(x,y)
|
|
14
|
+
r = Math.sqrt(x*x + y*y)
|
|
15
|
+
angle = Angle.radians(Math.atan2(y,x))
|
|
16
|
+
[r,angle]
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def from_polar_degrees(r,a)
|
|
20
|
+
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def from_ole(ole)
|
|
24
|
+
new(ole.X, ole.Y, ole.Z)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def polar_to_cartesian(r,a)
|
|
28
|
+
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
attr_reader :x, :y, :z
|
|
34
|
+
|
|
35
|
+
def initialize(x=0,y=0,z=0)
|
|
36
|
+
@x = x
|
|
37
|
+
@y = y
|
|
38
|
+
@z = z
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def +(pt)
|
|
43
|
+
case pt
|
|
44
|
+
when Point3d
|
|
45
|
+
self.class.new(self.x + pt.x, self.y + pt.y, self.z + pt.z)
|
|
46
|
+
when Array
|
|
47
|
+
self.class.new(self.x + pt[0], self.y + pt[1])
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def -(pt)
|
|
52
|
+
case pt
|
|
53
|
+
when Point3d
|
|
54
|
+
self.class.new(self.x - pt.x, self.y - pt.y, self.z - pt.z)
|
|
55
|
+
when Array
|
|
56
|
+
self.class.new(self.x - pt[0], self.y - pt[1])
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def zero
|
|
61
|
+
new(0.0,0.0,0,0)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def to_cartesian
|
|
65
|
+
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
end
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
module PrimitiveCommandInterface
|
|
2
|
+
|
|
3
|
+
def Keyin(keyin)
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
def DataPoint(pt, view)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def Reset
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def Cleanup
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def Dynamics(pt,view,drawmode)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def Start
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
class LineCreation
|
|
25
|
+
|
|
26
|
+
include PrimitiveCommandInterface
|
|
27
|
+
|
|
28
|
+
attr_reader :points
|
|
29
|
+
|
|
30
|
+
def initialize(app)
|
|
31
|
+
@app = app
|
|
32
|
+
@points = Array.new(2)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def DataPoint(pt, view)
|
|
36
|
+
case points.compact.size
|
|
37
|
+
when 0
|
|
38
|
+
app.ole_obj.CommandState.StartDynamics
|
|
39
|
+
@points[0] = pt
|
|
40
|
+
app.show_prompt "Place end point"
|
|
41
|
+
when 1
|
|
42
|
+
@points[1] = pt
|
|
43
|
+
line_from_pts(@points)
|
|
44
|
+
@points[0] = @points[1]
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def Dynamics(pt, view, drawmode)
|
|
50
|
+
if @points.compact.size == 1
|
|
51
|
+
@points[1] = pt
|
|
52
|
+
line = line_from_pts(@points)
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def Reset
|
|
57
|
+
app.CommandState.StartPrimitive self
|
|
58
|
+
@points = Array.new(2)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def Start
|
|
62
|
+
app.show_command "VBA PlaceLine Example"
|
|
63
|
+
app.show_prompt "Select start of line"
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
end
|