3

Visual Studio 2012 で c# で記述された winform を dll にコンパイルし、それを matlab 2013a にロードしたいと考えています。次に、matlab .net インターフェイスを使用して winform とやり取りし、そのイベントをリッスンして、定義済みのパブリック メソッドのセットを介してデータを渡します。Windows 7 Ultimate SP2 で作業しています。

これは驚くほどうまく機能し、すべてのネイティブの winform ツール、ボタン、ツリー、パネル、さらにはチャートと対話できます。しかし、私は ILnumerics を使用したいと思います。特に、すべての驚異を含む「シーン」を表示するために使用される ILpanel を使用したいと考えています。これは、dll としてコンパイルされ、matlab に呼び出されたときに、IPanel で何もレンダリングされないレンガの壁にぶつかったことです。デフォルトの楕円のみが表示されます。

Visual Studio で matlab をプロセスとしてアタッチし、コードを実行できます。それはすべて正常に実行されます。32 行目のシーンが iLPanel1 に正しくアタッチされていないようです。

どんな助けでも大歓迎です。

Form1.Designer.cs を使用しないForm1.csプライマリ C# コード

using System;
using System.Windows.Forms;
using ILNumerics;
using ILNumerics.Drawing.Plotting;
using ILNumerics.Drawing;
using MarkerStyle = ILNumerics.Drawing.MarkerStyle;

namespace WindowsFormsApplication3
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        public void PlotData(double[,] myX)
        {
            var myDoubleVec = new double[myX.Length];

            for (int i = 0; i < myX.Length; i++)
            {
                myDoubleVec[i] = myX[i, 0];
            }

            var scene = new ILScene(); 
            ILArray<double> myNumX = myDoubleVec;
            scene.Add(new ILPlotCube {
                new ILLinePlot(ILMath.tosingle(myNumX.T),
                 markerStyle: MarkerStyle.Dot)
            }); 
            ilPanel1.Scene = scene; 

        }

        private void ilPanel1_Load_1(object sender, EventArgs e)
        {
            var myDouble = new double[,] { { 2 }, { 4 }, {9 }, { 16 } }; ;
            PlotData(myDouble);
        }

        public void PlotRandom()
        {
            double yValue = 50.0;
            double yValue2 = 200.0;
            if (chart1.Series["Series1"].Points.Count > 0)
            {
                yValue = chart1.Series["Series1"].Points[chart1.Series["Series1"].Points.Count - 1].YValues[0];
                yValue2 = chart1.Series["Series2"].Points[chart1.Series["Series1"].Points.Count - 1].YValues[0];
            }
            Random random = new Random();
            for (int pointIndex = 0; pointIndex < 50; pointIndex++)
            {
                yValue = yValue + (float)(random.NextDouble() * 10.0 - 5.0);
                chart1.Series["Series1"].Points.AddY(yValue);

                yValue2 = yValue2 + (float)(random.NextDouble() * 10.0 - 5.0);
                chart1.Series["Series2"].Points.AddY(yValue2);

            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            PlotRandom();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            var myDouble = new double[,] { { 2 }, { 4 }, { 6 }, { 8 } }; ;
            PlotData(myDouble);
        }
    }
}

結果の winform は次のようになります。 Windows チャートを含む Winform

アセンブリをロードしてフォームを操作する Matlab コード。

 NET.addAssembly('C:\Users\philliproso\Documents\Visual Studio 2012\Projects\WindowsFormsApplication3\WindowsFormsApplication3\bin\Debug\WindowsFormsApplication3.dll')
    myForm=WindowsFormsApplication3.Form1;
    myForm.Show;
    myForm.plotRandom; %this call works fine
    myForm.PlotData(rand(50,1)); %this call has no effect

結果のwinformはmatlabで

4

0 に答える 0