zoukankan      html  css  js  c++  java
  • 温度图显示三维控件

      1             OpenFileDialog dlg = new OpenFileDialog();
      2             dlg.Filter = "Result (*.txt)|*.txt|All Files(*.*)|*.*";
      3 
      4             if (DialogResult.OK != dlg.ShowDialog())
      5                 return;
      6 
      7             double[] xdata = { -8.37, -7.87, -7.37, -6.87, -6.37, -5.87, -5.37, -4.87, -4.37, -3.87, -3.37, -2.87, -2.37, -1.87, -1.37, -0.87, -0.37, 0.13, 0.63, 1.13, 1.63, 2.13, 2.63, 3.13, 3.63, 4.13, 4.63, 5.13, 5.63, 6.13, 6.63, 7.13, 7.63, 8.13 };
      8             double[] ydata = { 0, 0.5, 1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5, 5.5, 6, 6.5, 7, 7.5, 8, 8.5, 9, 9.5, 10, 10.5, 11, 11.5, 12, 12.5, 13, 13.5, 14, 14.5, 15, 15.5, 16, 16.5, 17, 17.5, 18, 18.5, 19, 19.5, 20, 20.5 };
      9             double[,] results = new double[xdata.Length, ydata.Length];
     10 
     11             double minValue = 10000000;
     12             double maxValue = -10000000;
     13             StreamReader sr = new StreamReader(dlg.FileName, Encoding.Default);
     14             String line;
     15             int numLine = 0;
     16             while ((line = sr.ReadLine()) != null)
     17             {
     18                 String[] items = line.Split('	');
     19                 if (items.Length < 1)
     20                     continue;
     21 
     22                 for (int ii = 0; ii < items.Length; ++ii)
     23                 {
     24                     double val = double.Parse(items[ii]);
     25                     results[ii, numLine] = val;
     26 
     27                     minValue = Math.Min(minValue, val);
     28                     maxValue = Math.Max(maxValue, val);
     29                 }
     30 
     31                 ++numLine;
     32             }
     33 
     34             double range = maxValue - minValue;
     35             const long MaxValue = 0xff0000;
     36             const long MinValue = 0xffff00;
     37             const double Range = MaxValue - MinValue;
     38 
     39 
     40             float[] positionBuffer = new float[xdata.Length * ydata.Length * 3];
     41             float[] normalBuffer = new float[positionBuffer.Length];
     42             float[] colorBuffer = new float[positionBuffer.Length / 3 * 4];
     43 
     44             for (int jj = 0, lenjj = ydata.Length; jj < lenjj; ++jj)
     45                 for (int ii = 0, lenii = xdata.Length; ii < lenii; ++ii)
     46                 {
     47                     int idx = jj * lenii + ii;
     48 
     49 
     50 
     51                     positionBuffer[idx * 3] = (float)xdata[ii] * 10;
     52                     positionBuffer[idx * 3 + 1] = (float)ydata[jj] * 10;
     53                     positionBuffer[idx * 3 + 2] = 0;
     54 
     55                     normalBuffer[idx * 3] = 0;
     56                     normalBuffer[idx * 3 + 1] = 0;
     57                     normalBuffer[idx * 3 + 2] = 1;
     58 
     59                     double rst = results[ii, jj];
     60                     double ratio = (rst - minValue) / range;
     61                     long rgb = (long)(Range * ratio) + MinValue;
     62 
     63                     long red = rgb >> 16 & 0xFF;
     64                     long green = rgb >> 8 & 0xFF;
     65                     long blue = rgb & 0xFF;
     66 
     67                     colorBuffer[idx * 4] = red / 255.0f;
     68                     colorBuffer[idx * 4 + 1] = green / 255.0f;
     69                     colorBuffer[idx * 4 + 2] = blue / 255.0f;
     70                     colorBuffer[idx * 4 + 3] = 1.0f;
     71                 }
     72 
     73 
     74             int faceCount = (xdata.Length - 1) * (ydata.Length - 1) * 2;
     75             uint[] facets = new uint[faceCount * 3];
     76             int faceId = 0;
     77             for (uint jj = 0, lenjj = (uint)ydata.Length; jj < lenjj - 1; ++jj)
     78                 for (uint ii = 0, lenii = (uint)xdata.Length; ii < lenii - 1; ++ii)
     79                 {
     80                     uint a = jj * lenii + ii;
     81                     uint b = a + 1;
     82                     uint c = (jj + 1) * lenii + ii;
     83                     uint d = c + 1;
     84                     /*
     85                     c----------d
     86                     |          |
     87                     |          |
     88                     |          |
     89                     a----------b
     90                     */
     91                     facets[faceId * 3] = a;
     92                     facets[faceId * 3 + 1] = d;
     93                     facets[faceId * 3 + 2] = c;
     94 
     95                     ++faceId;
     96                     facets[faceId * 3] = a;
     97                     facets[faceId * 3 + 1] = b;
     98                     facets[faceId * 3 + 2] = d;
     99 
    100                     ++faceId;
    101                 }
    102 
    103             AABox bbox = new AABox();
    104             bbox.MinPt = new Vector3(positionBuffer[0], positionBuffer[1], positionBuffer[3]);
    105             bbox.MaxPt = new Vector3(positionBuffer[positionBuffer.Length - 3], positionBuffer[positionBuffer.Length - 2], positionBuffer[positionBuffer.Length - 1]);
    106 
    107             var entity = GlobalInstance.TopoShapeConvert.CreateColoredFaceEntity(positionBuffer, facets, normalBuffer, colorBuffer, bbox);
    108 
    109             var node = new EntitySceneNode();
    110             node.SetEntity(entity);
    111 
    112 
    113             renderView.ShowSceneNode(node);

  • 相关阅读:
    WEBAPP开发技巧
    手机中的javascript事件
    I6下实现FIXED
    vim 使用帮助
    javascript小技巧
    webkitbox & translate CSS3动画详解
    backbone中的实例中文注释
    getClientRect和getBoundingClientRect获取节点的屏幕距离
    javascript判定不同浏览器
    jQuery中的trigger(type, [data]) 原生实现方法
  • 原文地址:https://www.cnblogs.com/anycad/p/8834583.html
Copyright © 2011-2022 走看看