Wolfram EngineをVisualBasicで使う(13:.nb/.cdfファイルの生成)
VisualBasic + Woflram Engineで開発したGUIでWolfram言語のプログラムを入力して、それをノートブック(.nb)やCDFファイル(.cdf)に書き出して、MathematicaやWolfram Playerで再生しました。
【ノートブックファイルへのエクスポート】
- GUIを次のように作ります。
-
ボタンを押すとファイルが生成されるように次のコードを書きます。Exportの引数となる文章の組み立てが複雑なので、あえて分割して文字列を作っています。
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim ml As IKernelLink = MathLinkFactory.CreateKernelLink("-linkmode launch -linkname 'C:\Program Files\Wolfram Research\Wolfram Engine\13.3\WolframKernel.exe'")
ml.WaitAndDiscardAnswer()
Dim input_txt As String = TextBox1.Text
Dim eval_txt As String = "Evaluate[" + input_txt + "]"
ml.Evaluate("Export[""C:\data\sample.nb""," + eval_txt + "]")
End Sub
-
実行して、入力部分に
Manipulate[Plot[Sin[x (1 + a x)], {x, 0, 6}], {a, 0, 2}]
を入力して、ボタンを押します。
-
今回は保存パスやファイル名を固定しているので、「C:¥data」に「sample.nb」というファイルが生成されます。できるまでに少し時間がかかります。
-
これをMathematicaで開くと次のようになります。
期待通りの結果ですね。
さて、次はMathematicaではなく、再生専用のWolfram Playerを使って再生できるようにしてみます。
【CDFファイルへのエクスポート】
- ボタンのラベルを少し変更します。
-
コードを次のように変更します。「Export」ではなく、「CDFDeploy[]」を使います。
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim ml As IKernelLink = MathLinkFactory.CreateKernelLink("-linkmode launch -linkname 'C:\Program Files\Wolfram Research\Wolfram Engine\13.3\WolframKernel.exe'")
ml.WaitAndDiscardAnswer()
Dim input_txt As String = TextBox1.Text
Dim eval_txt As String = "Evaluate[" + input_txt + "]"
ml.Evaluate("CDFDeploy[""C:\data\sample.cdf""," + eval_txt + "]")
End Sub
-
実行して、入力部分に
Manipulate[Plot[Sin[x (1 + a x)], {x, 0, 6}], {a, 0, 2}]
を入力して、ボタンを押します。
- こちらも保存パスやファイル名を固定しているので、「C:¥data」に「sample.cdf」というファイルが生成されます。できるまでに少し時間がかかります。
- これをWolfram Playerで開くと次のようになります。
ちゃんと再生もできるので問題なさそうです。
もし、CDFファイル生成して、簡単なプログラムを再生専用で配布するのであれば、Wolfram Engineでもいけそうです。
別々に生成しているので、一つにまとめようと思います。
- ラジオボタンで、どちらかを選べるようにGUIを次のように変更します。
-
ラジオボタンの設定で生成されるファイルが切り替えられるように、次のようにコードを改良します。
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim ml As IKernelLink = MathLinkFactory.CreateKernelLink("-linkmode launch -linkname 'C:\Program Files\Wolfram Research\Wolfram Engine\13.3\WolframKernel.exe'")
ml.WaitAndDiscardAnswer()
Dim input_txt As String = TextBox1.Text
Dim eval_txt As String = "Evaluate[" + input_txt + "]"
If RadioButton1.Checked = True Then
ml.Evaluate("Export[""C:\data\sample.nb""," + eval_txt + "]")
ElseIf RadioButton2.Checked = True Then
ml.Evaluate("CDFDeploy[""C:\data\sample.cdf""," + eval_txt + "]")
End If
End Sub
- 実行してみます。
うまく切り替えて2種類のファイルが生成できるようになりました。