如何使用ILPlotCube对象可视化XY, XZ和YZ平面视图



我正在开发一个c#应用程序,它使用ilpanel来显示iltriangle的3d ILgroup。我尝试设置三个按钮每个按钮都应该修改ilplotcube的方向以显示x-y平面视图,x-z平面视图和y-z视图。

在创建ILPlotcube时,我使用

设置了一个默认的3D(等距)视图
pc.Rotation = Matrix4.Rotation(new Vector3(0.5299, 0.2195, 0.8192), 0.9363);

,其中pc是对ILPlotCube对象的引用。如果我用鼠标旋转视图,改变的是什么,摄像头还是立方体?我无法找出如何从ILPlotCube方向的任意位置获得"平面"视图XY(或XZ,或YZ)。我应该如何设置ILPlotCube方向矩阵来实现这个结果?

编辑:更清楚:如果设置旋转矩阵为单位一个,它只工作,如果之前我没有使用鼠标来旋转立方体。如果我使用鼠标,它似乎创建了一种克隆立方体,旋转矩阵等于恒等矩阵,但它仍然显示一个旋转视图

对于渲染,每个面板/驱动程序创建一个场景的同步副本。鼠标交互仅操作同步副本。该副本应用于手动设置绘图多维数据集的方向。

private void button1_Click(object sender, EventArgs e) {
    //fetch a reference to the SYNCHRONIZED version of the plot cube
    var pc = ilPanel1.SceneSyncRoot.First<ILPlotCube>();
    // modify the plot cube rotation on the synched copy!
    // several example views - choose yours! 
    pc.Rotation = Matrix4.Identity;  // XY - view (default, double click)
    pc.Rotation = Matrix4.Rotation(new Vector3(1, 0, 0), Math.PI * 0.5);  // ZX - view
    pc.Rotation = Matrix4.Rotation(new Vector3(0, 1, 0), Math.PI * 0.5)
                            .Rotate(new Vector3(1, 0, 0), Math.PI * 0.5); // XZ - view 
    pc.Rotation = Matrix4.Rotation(new Vector3(0, 1, 0), Math.PI * 0.5);  // ZY - view
    ilPanel1.Refresh(); 
}

如果不画草图,我永远无法真正得到这些旋转的方向。你要检查自己的视角是否正确,并防止从错误的侧面/背面看!

另外,不要与ILCamera.RotateX(), ILCamera.RotateY()ILCamera.RotateZ()混淆!由于ILCamera是plot cube的基类,因此它们也可以在plot cube上使用。做类似的事情,但通过添加一个新的旋转到现有的工作,这可能不是你想要的:

// pc.Rotate?(..) rotates the camera iteratively
pc.RotateZ(Math.PI * 0.5);  // <- this is another thing! Use pc.Rotation instead!

最新更新