それでは、マクロの記録で作成されたコードを編集してみましょう。
前項で述べた、CreateCornerRectangleとFeatureExtrusion2の一部を修正して、ユーザー入力が可能な形に変更します。
CreateCornerRectangleの引数は、矩形の始点X座標, 始点Y座標, 始点Z座標, 終点X座標, 終点Y座標, 終点Z座標の6つとなっているので、始点は原点(0, 0, 0)とし、終点をswWidth, swHeight, 0として幅と高さをユーザーが入力した値を受け取れるようにします。
FeatureExtrusion2は、6つ目の引数が押し出し量になっているので、swDepthとし、奥行きをユーザーが入力した値を受け取れるようにします。
実際にはこんな感じです。
vSkLines = Part.SketchManager.CreateCornerRectangle(0, 0, 0, swWidth, swHeight, 0)
Set myFeature = Part.FeatureManager.FeatureExtrusion2(True, False, False, 0, 0, swDepth, 0.01, False, False, False, False, 0.01745329251994, 0.01745329251994, False, False, False, False, True, True, True, 0, 0, False)
ユーザー入力の手段としては、比較的簡単なInputBoxを使用してみます。
例えば、以下のような感じです。
Dim swWidth, swHeight, swDepth As Double
Do Until swWidth > 0
sInput = InputBox("幅を入力して下さい。")
If sInput = "" Then
Exit Sub
End If
swWidth = Val(sInput)
If swWidth > 0 And swWidth <= 500000 Then
swWidth = swWidth / 1000
Else
MsgBox "0を超える500000までの数値を入力して下さい。"
End If
Loop
Do Until swHeight > 0
sInput = InputBox("高さを入力して下さい。")
If sInput = "" Then
Exit Sub
End If
swHeight = Val(sInput)
If swHeight > 0 And swHeight <= 500000 Then
swHeight = swHeight / 1000
Else
MsgBox "0を超える500000までの数値を入力して下さい。"
End If
Loop
Do Until swDepth > 0
sInput = InputBox("奥行きを入力して下さい。")
If sInput = "" Then
Exit Sub
End If
swDepth = Val(sInput)
If swDepth > 0 And swDepth <= 500000 Then
swDepth = swDepth / 1000
Else
MsgBox "0を超える500000までの数値を入力して下さい。"
End If
Loop
これを、Set swApp = Application.SldWorksの前に入れておけば、押し出し作成の前にユーザーからの入力を促すことが出来ます。
簡単に説明すると、InputBoxにてユーザーが入力した値から幅・高さ・奥行きをそれぞれ受け取り、swWidth, swHeight, swDepthに代入するといった感じです。
値は、500000mmまでとしています。
ちなみに、値を代入する際に入力した値を1000で割っているのですが、これは入力した単位がmmに対して、引数の単位はmとなっているためです。
すべての入力が正常に行われれば、swWidth, swHeight, swDepthをCreateCornerRectangleとFeatureExtrusion2の引数に渡すことで、任意サイズの直方体が作成出来るようになりました。
次に、完成したプログラムの動作確認をしてみましょう。