技術屋にゃん兵衛のてくてくらぼ by データウィズ [DataWith]

気の向くままソフトについて書いてます。バリバリエンジニアではないのであくまでも初心者目線で。

Wolfram EngineをVisualBasicで使う(13:.nb/.cdfファイルの生成)

Wolfram EngineをVisualBasicで使う(13:.nb/.cdfファイルの生成)

 

VisualBasic + Woflram Engineで開発したGUIでWolfram言語のプログラムを入力して、それをノートブック(.nb)やCDFファイル(.cdf)に書き出して、MathematicaやWolfram Playerで再生しました。

 

【ノートブックファイルへのエクスポート】

  1. GUIを次のように作ります。

  2. ボタンを押すとファイルが生成されるように次のコードを書きます。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

  3. 実行して、入力部分に

    Manipulate[Plot[Sin[x (1 + a x)], {x, 0, 6}], {a, 0, 2}]

    を入力して、ボタンを押します。

    実行してWolfram言語を入力
  4. 今回は保存パスやファイル名を固定しているので、「C:¥data」に「sample.nb」というファイルが生成されます。できるまでに少し時間がかかります。

    .nbファイルが生成された
  5. これをMathematicaで開くと次のようになります。

    生成結果をMathematicaで開く

 

期待通りの結果ですね。

さて、次はMathematicaではなく、再生専用のWolfram Playerを使って再生できるようにしてみます。

 

【CDFファイルへのエクスポート】

  1. ボタンのラベルを少し変更します。

  2. コードを次のように変更します。「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

  3. 実行して、入力部分に

    Manipulate[Plot[Sin[x (1 + a x)], {x, 0, 6}], {a, 0, 2}]

    を入力して、ボタンを押します。

    実行してWolfram言語を入力
  4. こちらも保存パスやファイル名を固定しているので、「C:¥data」に「sample.cdf」というファイルが生成されます。できるまでに少し時間がかかります。

    CDFファイルが生成された
  5. これをWolfram Playerで開くと次のようになります。

    CDFファイルをWolfram Playerで再生

    ちゃんと再生もできるので問題なさそうです。

    Manipulateも実行できた

    もし、CDFファイル生成して、簡単なプログラムを再生専用で配布するのであれば、Wolfram Engineでもいけそうです。

    別々に生成しているので、一つにまとめようと思います。

  6. ラジオボタンで、どちらかを選べるようにGUIを次のように変更します。

    ラジオボタンで切り替えられるようにする
  7. ラジオボタンの設定で生成されるファイルが切り替えられるように、次のようにコードを改良します。

    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

  8. 実行してみます。

    実行してWolfram言語を入力

    うまく切り替えて2種類のファイルが生成できるようになりました。