示例#1
0
        public GEMSParallel Clone()
        {
            GEMSParallel newParallelInfo = new GEMSParallel(this.parent);

            newParallelInfo.meshCountInX = this.meshCountInX;
            newParallelInfo.meshCountInY = this.meshCountInY;
            newParallelInfo.meshCountInZ = this.meshCountInZ;

            if (this.divisionInX.Count == 0)
            {
                newParallelInfo.UpdateDivisionInX(1);
            }

            if (this.divisionInX.Count == 0)
            {
                newParallelInfo.UpdateDivisionInX(1);
            }
            else
            {
                newParallelInfo.divisionInX.AddRange(this.divisionInX);
            }

            if (this.divisionInY.Count == 0)
            {
                newParallelInfo.UpdateDivisionInY(1);
            }
            else
            {
                newParallelInfo.divisionInY.AddRange(this.divisionInY);
            }

            if (this.divisionInZ.Count == 0)
            {
                newParallelInfo.UpdateDivisionInZ(1);
            }
            else
            {
                newParallelInfo.divisionInZ.AddRange(this.divisionInZ);
            }

            newParallelInfo.areaList = new List <GEMSParallelArea>();
            foreach (GEMSParallelArea area in areaList)
            {
                GEMSParallelArea newArea = new GEMSParallelArea();
                newArea.IsPEC = area.IsPEC;
                newArea.Start = area.Start.Clone();
                newArea.End   = area.End.Clone();
                newParallelInfo.areaList.Add(newArea);
            }

            newParallelInfo.minAreaMeshCount = this.minAreaMeshCount;
            newParallelInfo.maxAreaMeshCount = this.maxAreaMeshCount;

            return(newParallelInfo);
        }
示例#2
0
        public void UpdateAreaList()
        {
            areaList.Clear();

            minAreaMeshCount = -1;
            maxAreaMeshCount = -1;

            int zMax = divisionInZ.Count > 0 ? divisionInZ.Count - 1 : 1;
            int yMax = divisionInY.Count > 0 ? divisionInY.Count - 1 : 1;
            int xMax = divisionInX.Count > 0 ? divisionInX.Count - 1 : 1;

            for (int i = 0; i < zMax; i++)
            {
                for (int j = 0; j < yMax; j++)
                {
                    for (int k = 0; k < xMax; k++)
                    {
                        MeshPointKey min = new MeshPointKey();
                        MeshPointKey max = new MeshPointKey();

                        if (divisionInX.Count >= 2)
                        {
                            min.X = divisionInX[k];
                            max.X = divisionInX[k + 1];
                        }

                        if (divisionInY.Count >= 2)
                        {
                            min.Y = divisionInY[j];
                            max.Y = divisionInY[j + 1];
                        }

                        if (divisionInZ.Count >= 2)
                        {
                            min.Z = divisionInZ[i];
                            max.Z = divisionInZ[i + 1];
                        }

                        int areaMeshCount = (max.X - min.X) * (max.Y - min.Y) * (max.Z - min.Z);

                        if (minAreaMeshCount < 0)
                        {
                            minAreaMeshCount = areaMeshCount;
                        }
                        else
                        {
                            minAreaMeshCount = minAreaMeshCount < areaMeshCount ? minAreaMeshCount : areaMeshCount;
                        }

                        if (maxAreaMeshCount < 0)
                        {
                            maxAreaMeshCount = areaMeshCount;
                        }
                        else
                        {
                            maxAreaMeshCount = maxAreaMeshCount > areaMeshCount ? maxAreaMeshCount : areaMeshCount;
                        }

                        GEMSParallelArea area = new GEMSParallelArea();
                        area.Start = min;
                        area.End   = max;
                        this.areaList.Add(area);
                    }
                }
            }
        }