//多边形长、宽计算 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; }
//圆形半径计算 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; //圆形半径保留小数点后两位 }