Exemplo n.º 1
0
        //多边形长、宽计算
        private void PolygonCalculate(string[] strGraph, string[] strPoint, string[] strPolygon2, string[] strPolygon3, out double nLength, out double nWidth)
        {
            DataType.CAMDataType.CoordValue[] CoordVal = new DataType.CAMDataType.CoordValue[3];


            CoordVal[2].x = double.Parse(strPolygon3[7]);
            CoordVal[2].y = double.Parse(strPolygon3[8]);
            CoordVal[2].z = double.Parse(strPolygon3[9]);

            CoordVal[1].x = double.Parse(strPolygon2[7]);
            CoordVal[1].y = double.Parse(strPolygon2[8]);
            CoordVal[1].z = double.Parse(strPolygon2[9]);

            CoordVal[0].x = double.Parse(strPoint[7]);
            CoordVal[0].y = double.Parse(strPoint[8]);
            CoordVal[0].z = double.Parse(strPoint[9]);

            int    nSides    = int.Parse(strGraph[1]);
            double distanceL = 0;
            double distanceW = 0;

            //新增自动计算多边形长宽及椭圆长边、短边
            if (nSides == 0)                                                                                                                                                 //oblong
            {
                distanceL = Math.Sqrt(Math.Pow(CoordVal[1].x - CoordVal[0].x, 2) + Math.Pow(CoordVal[1].y - CoordVal[0].y, 2) + Math.Pow(CoordVal[1].z - CoordVal[0].z, 2)); //长

                double[] Axyz = new double[3];
                Axyz[0] = CoordVal[1].x - CoordVal[0].x;
                Axyz[1] = CoordVal[1].y - CoordVal[0].y;
                Axyz[2] = CoordVal[1].z - CoordVal[0].z;

                double[] Bxyz = new double[3];
                Bxyz[0] = CoordVal[2].x - CoordVal[1].x;
                Bxyz[1] = CoordVal[2].y - CoordVal[1].y;
                Bxyz[2] = CoordVal[2].z - CoordVal[1].z;

                double[] Cxyz = new double[3];
                //a * b=  (AyBz-AzBy)*i+(AzBx-AxBz)*j+(AxBy-AyBx)k)
                Cxyz[0] = Axyz[1] * Bxyz[2] - Axyz[2] * Bxyz[1];
                Cxyz[1] = Axyz[2] * Bxyz[0] - Axyz[0] * Bxyz[2];
                Cxyz[2] = Axyz[0] * Bxyz[1] - Axyz[1] * Bxyz[0];

                double l_x         = Math.Sqrt(Math.Pow(Cxyz[0], 2) + Math.Pow(Cxyz[1], 2) + Math.Pow(Cxyz[2], 2));
                double l_y         = Math.Sqrt(Math.Pow(Axyz[0], 2) + Math.Pow(Axyz[1], 2) + Math.Pow(Axyz[2], 2));
                double l_nDistance = (double)l_x / l_y;                                                                                                                      //椭圆短边的一半

                distanceW = l_nDistance * 2;                                                                                                                                 //椭圆宽
            }
            else if (nSides > 3)                                                                                                                                             //rect//polygon
            {
                distanceL = Math.Sqrt(Math.Pow(CoordVal[1].x - CoordVal[0].x, 2) + Math.Pow(CoordVal[1].y - CoordVal[0].y, 2) + Math.Pow(CoordVal[1].z - CoordVal[0].z, 2)); //长
                distanceW = Math.Sqrt(Math.Pow(CoordVal[2].x - CoordVal[1].x, 2) + Math.Pow(CoordVal[2].y - CoordVal[1].y, 2) + Math.Pow(CoordVal[2].z - CoordVal[1].z, 2)); //宽
            }

            nLength = distanceL;
            nWidth  = distanceW;
        }
Exemplo n.º 2
0
        //圆形半径计算
        private void CircleCalculate(string[] strGraph, string[] strPoint, string[] strPoint2, out double nLength)
        {
            DataType.CAMDataType.CoordValue[] CoordVal = new DataType.CAMDataType.CoordValue[3];

            CoordVal[0].x = double.Parse(strPoint[7]);
            CoordVal[0].y = double.Parse(strPoint[8]);
            CoordVal[0].z = double.Parse(strPoint[9]);

            CoordVal[1].x = double.Parse(strPoint2[7]);
            CoordVal[1].y = double.Parse(strPoint2[8]);
            CoordVal[1].z = double.Parse(strPoint2[9]);


            //新增自动计算圆半径
            double DistanceR = Math.Sqrt(Math.Pow(CoordVal[1].x - CoordVal[0].x, 2) + Math.Pow(CoordVal[1].y - CoordVal[0].y, 2) + Math.Pow(CoordVal[1].z - CoordVal[0].z, 2)); //半径

            nLength = DistanceR;                                                                                                                                                //圆形半径保留小数点后两位
        }