コード例 #1
0
        public Color GetColor(double averageValue, double minData, double maxData, int dataIndex)
        {
            Dictionary <int, Color> colorDictionary;

            colors.TryGetValue(ColorUtility.ColouringFunction, out colorDictionary);
            if (colorDictionary == null)
            {
                colorDictionary = new Dictionary <int, Color>();
                //Calculate Color
                Color value = ColorUtility.CalculateColor(averageValue, minData, maxData);
                colorDictionary.Add(dataIndex, value);
                colors.Add(ColorUtility.ColouringFunction, colorDictionary);
                return(value);
            }
            else
            {
                if (colorDictionary.ContainsKey(dataIndex))
                {
                    return(colors[ColorUtility.ColouringFunction][dataIndex]);
                }

                Color value = ColorUtility.CalculateColor(averageValue, minData, maxData);
                colorDictionary.Add(dataIndex, value);
                colors[ColorUtility.ColouringFunction] = colorDictionary;
                return(value);
            }
        }
コード例 #2
0
        public static void CalculateContour(this Edge self, Zone zone, double contourValue, int dataIndex, double globalMin, double globalMax, ref LineContour lineContour)
        {
            Vertex startVertex = zone.Vertices[self.Start];
            Vertex endVertex   = zone.Vertices[self.End];

            double startData = startVertex.Data[dataIndex];
            double endData   = endVertex.Data[dataIndex];

            if (Mathf.Ranges(contourValue, startData, endData))
            {
                double alpha      = Mathf.Lerp(contourValue, startData, endData);
                Point3 finalPoint = Mathf.Lerp(alpha, startVertex.Position, endVertex.Position);

                Color contourColor = ColorUtility.CalculateColor(contourValue, globalMin, globalMax);

                lineContour.AddPoint(finalPoint);
                lineContour.Color = contourColor;
            }
        }
コード例 #3
0
        public static List <IsoSurface> CalculateIsoSurface(this Mesh self, double numberOfSurfaces, int dataIndex)
        {
            double minOfData = self.GetMinimumBounds(dataIndex);
            double maxOfData = self.GetMaximumBounds(dataIndex);

            double            interval    = Mathf.SliceInterval(numberOfSurfaces, minOfData, maxOfData);
            List <IsoSurface> meshSurface = new List <IsoSurface>();

            if (interval == 0)
            {
                return(meshSurface);
            }

            for (double isoValue = minOfData + interval / 2; isoValue <= maxOfData; isoValue += interval)
            {
                IsoSurface finalSurface = new IsoSurface();
                foreach (Zone zone in self.Zones)
                {
                    foreach (Element element in zone.Elements)
                    {
                        double[] dataArray = new double[8];

                        for (int index = 0; index < element.VertInOrder.Length; index++)
                        {
                            uint vertex = element.VertInOrder[index];

                            dataArray[index] = (zone.Vertices[vertex].Data[dataIndex]);
                        }
                        byte caseNumber = ISOSurface.GetElementCase(dataArray, isoValue);

                        int[] caseEdges = ISOSurface.GetCaseEdges(caseNumber);
                        for (int i = 0; i < caseEdges.Length - 1; i += 3)
                        {
                            if (caseEdges[i] != -1 && caseEdges[i + 1] != -1 && caseEdges[i + 2] != -1)
                            {
                                Edge   firstEdge           = ISOSurface.GetEdgePoints(caseEdges[i]);
                                Point3 firstEdgeFinalPoint = firstEdge.GetIsoValuePoint(zone, element, isoValue,
                                                                                        dataIndex);

                                Edge   secondEdge           = ISOSurface.GetEdgePoints(caseEdges[i + 1]);
                                Point3 secondEdgeFinalPoint = secondEdge.GetIsoValuePoint(zone, element, isoValue,
                                                                                          dataIndex);

                                Edge   thirdEdge           = ISOSurface.GetEdgePoints(caseEdges[i + 2]);
                                Point3 thirdEdgeFinalPoint = thirdEdge.GetIsoValuePoint(zone, element, isoValue,
                                                                                        dataIndex);

                                IsoTriangle resultTriangle = new IsoTriangle(firstEdgeFinalPoint, secondEdgeFinalPoint,
                                                                             thirdEdgeFinalPoint)
                                {
                                    Color = ColorUtility.CalculateColor(isoValue, minOfData, maxOfData)
                                };

                                finalSurface.AddTriangle(resultTriangle);
                            }
                        }
                    }
                }
                meshSurface.Add(finalSurface);
            }
            return(meshSurface);
        }