在ILNumerics中制作一个实心框(立方体)

时间:2014-04-28 08:08:14

标签: c# 3d plot cube ilnumerics

我想用ILNumerics打造一个坚固的盒子。正如我在文档网站上看到的那样,只有一种方法可以制作一个球体对象。我想要一个盒子(立方体)。

我刚读过这个帖子:ILNumerics plot a plane at specific location。然后我有一个想法,使6架飞机然后安排他们作为一个盒子。

但它似乎是一个空盒子。我想要一个坚固的盒子。有什么想法吗? 我将复制此框以使其中许多用于进一步的工作。

1 个答案:

答案 0 :(得分:2)

最简单的解决方案

在(几乎没有记录的)ILNumerics.Drawing.Shapes课程中,您可以找到UnitCubeFilled形状及其线框版本:

private void ilPanel1_Load(object sender, EventArgs e) {
    ilpanel1.Scene.Camera.Add(Shapes.UnitCubeFilled);
    ilpanel1.Scene.Camera.Add(Shapes.UnitCubeWireframe);
    ilpanel1.Scene.First<ILTriangles>().AutoNormals = false; 
    ilpanel1.Configure();
}

注意,立方体的所有边共享形状中的仅8个顶点。因此,在所有边缘之间共享和插值照明法线,这将导致任何照明看起来不自然。这就是为什么我通过禁用自动法线创建来停用灯光。

您可以轻松地重复使用这些形状 - 它们的存储由ILNumerics共享。在大型设置中,您可以将多个这些形状放在单个ILGroup节点下。这些组用于相应地重新定位和旋转形状。

高级解决方案

Shapes.UnitCubeFilled专注于便宜的设置。如果您需要侧面的单独颜色或更好的照明,则需要为每个边缘的各个顶点组装立方体。基本上,人们会做什么:

  • 以新的ILTriangles形状
  • 开头
  • 给它24个顶点:每边4个
  • 创建24个颜色条目,并为侧面添加单独的颜色信息

一个简单的例子如下:

enter image description here

这是前端和右侧的代码。其他方面留作练习......;)

ilpanel1.Scene.Camera.Add(new ILTriangles("tri")
{
    Positions = new float[,] { 
        // front side
        {0,0,0},{1,0,0},{1,1,0},
        {0,0,0},{1,1,0},{0,1,0},
        // right side
        {1,0,0},{1,0,-1},{1,1,-1},
        {1,0,0},{1,1,-1},{1,1,0},
    },
    Colors = new float[,] { 
        // front side
        {0,0,1},{0,0,1},{0,0,1},
        {0,0,1},{0,0,1},{0,0,1},
        // right side
        {0,1,0},{0,1,0},{0,1,0},
        {0,1,0},{0,1,0},{0,1,0},
    }
}); 
ilpanel1.Configure();