我在Windows窗体窗口中使用带有线图和点图的ILPlotcube。不知何故,PlotCube的鼠标控制,如缩放和拖动不再起作用。例如:我无法通过在我想看的区域上绘制一个矩形来放大绘图。鼠标似乎不再被识别了。
基本上代码如下:
public void init() {
Thread backgroundThread = new Thread(
new ThreadStart(() =>
{
makePlot();
}));
backgroundThread.Start();
}
makePlot()看起来像这样:
public void makePlot()
{
ILPlotCube plotCube = _ilPanel.Scene.First<ILPlotCube>();
if (plotCube == null) {
plotCube = new ILPlotCube {
new ILLinePlot(tosingle(_data1), "plot1", lineColor: Color.Blue),
new ILLinePlot(tosingle(_data2), "plot2", lineColor: Color.Red),
new ILLegend("data1","data2")
};
_ilPanel.Scene = new ILScene { plotCube };
}
else
{
plotCube.First<ILLinePlot>(tag: "plot1").Line.Positions.Update(tosingle(_data1);
plotCube.First<ILLinePlot>(tag: "plot2").Line.Positions.Update(tosingle(_data2);
}
_ilPanel.Scene.Configure();
_ilPanel.Invoke((MethodInvoker)delegate { _ilPanel.Refresh(); });
}
我在Form1_Load()中调用init()而不是在ilPanel1_Load()中调用
实际上还有另外一件事。 Class Reference表示ILLinePlot有一个方法&#34;更新&#34;更新绘制线的位置。但Visual Studio告诉我ILLinePlot没有这样的成员函数。相反,我使用
linePlot.Line.Positions.Update
此外,如果我不在场景元素上调用Configure(),它就不会绘制图例,但如果我这样做,则整个绘图需要更多的时间。
答案 0 :(得分:0)
我换了之后才开始工作
ilpanel.Scene = new ILScene { plotCube }
到
ilpanel.Scene.Add( plotCube )
答案 1 :(得分:0)
没有一些代码就很难猜到。但我想你的场景中有多个情节立方体。他们可能使用相同的屏幕区域(可能是整个面板区域?)。如果以这种方式配置,鼠标事件将在最顶层的相机对象或其子节点上触发。情节立方体可能会放置&#34;背后&#34;捕捉所有事件的其他相机对象。您可以通过在根节点上注册事件处理程序并打印出所有鼠标按下事件来查找:
ilPanel1.Scene.MouseDown += (_s, _e) => { Debug.WriteLine(_e.Target); };
这将给出鼠标下方的节点,该节点在鼠标按下操作期间被选为鼠标事件的目标。为了使(正确的)plotcube正确接收缩放/旋转/平移操作的鼠标事件,应该有plotcube节点(plotcube派生自ILCamera)或其中一个子节点作为目标。
检查场景并检测所有摄像机节点的另一种简单方法是在设置方法的最后创建一个断点(大多数情况下这将是ilPanel1_Load(..)。一旦你在调试器中停止,执行以下命令立即窗口中的代码:
ilPanel1.Scene.Find<ILCamera>()
Count = 2
[0]: "Camera: #2 - Polar r:10 φ:0° ρ:0° - Pos X:0 Y:0 Z:10 - Lookat X:0 Y:0 Z:0 - Top X:0 Y:1 Z:0"
[1]: "ILPlotCube #30 'PlotCube' Children:[2]"
你算多少个情节立方体?