// function for testing surface chart public void TestSurfacePlot(int nGridNo) { int nXNo = nGridNo; int nYNo = nGridNo; // 1. set the surface grid m_3dChart = new UniformSurfaceChart3D(); ((UniformSurfaceChart3D)m_3dChart).SetGrid(nXNo, nYNo, -100, 100, -100, 100); // 2. set surface chart z value double xC = m_3dChart.XCenter(); double yC = m_3dChart.YCenter(); int nVertNo = m_3dChart.GetDataNo(); double zV; for (int i = 0; i < nVertNo; i++) { Vertex3D vert = m_3dChart[i]; double r = 0.15 * Math.Sqrt((vert.x - xC) * (vert.x - xC) + (vert.y - yC) * (vert.y - yC)); if (r < 1e-10) { zV = 1; } else { zV = Math.Sin(r) / r; } m_3dChart[i].z = (float)zV; } m_3dChart.GetDataRange(); // 3. set the surface chart color according to z vaule double zMin = m_3dChart.ZMin(); double zMax = m_3dChart.ZMax(); for (int i = 0; i < nVertNo; i++) { Vertex3D vert = m_3dChart[i]; double h = (vert.z - zMin) / (zMax - zMin); Color color = WPFChart3D.TextureMapping.PseudoColor(h); m_3dChart[i].color = color; } // 4. Get the Mesh3D array from surface chart ArrayList meshs = ((UniformSurfaceChart3D)m_3dChart).GetMeshes(); // 5. display vertex no and triangle no of this surface chart UpdateModelSizeInfo(meshs); // 6. Set the model display of surface chart WPFChart3D.Model3D model3d = new WPFChart3D.Model3D(); Material backMaterial = new DiffuseMaterial(new SolidColorBrush(Colors.Gray)); m_nChartModelIndex = model3d.UpdateModel(meshs, backMaterial, m_nChartModelIndex, this.mainViewport); // 7. set projection matrix, so the data is in the display region float xMin = m_3dChart.XMin(); float xMax = m_3dChart.XMax(); m_transformMatrix.CalculateProjectionMatrix(xMin, xMax, xMin, xMax, zMin, zMax, 0.5); TransformChart(); }
public void SetDataNo(int nSize) { m_vertices = new Vertex3D[nSize]; }