// Token: 0x060000EA RID: 234 RVA: 0x0000AE60 File Offset: 0x00009060 public void DivideZByDistance(out PointClouds min, out PointClouds max) { min = null; max = null; int num = (_zCollection.Last <int>() - _zCollection.First <int>()) / 2; int num2 = 0; foreach (int num3 in _zCollection) { if (num > num3) { num2++; } } if (num2 == 0) { max = this; } else { List <int> range = _zCollection.GetRange(0, num2 + 1); List <int> range2 = _yCollection.GetRange(0, _yCollection.Count); List <int> range3 = _xCollection.GetRange(0, _xCollection.Count); if (num2 == _zCollection.Count - 1) { min = this; } else { List <int> range4 = _zCollection.GetRange(num2 + 1, _zCollection.Count - num2 - 1); List <int> range5 = _yCollection.GetRange(0, _yCollection.Count); List <int> range6 = _xCollection.GetRange(0, _xCollection.Count); foreach (int item in range4) { range2.Remove(item); range3.Remove(item); } foreach (int item2 in range) { range5.Remove(item2); range6.Remove(item2); } min = new PointClouds(range3, range2, range, Root); max = new PointClouds(range6, range5, range4, Root); } } }
// Token: 0x060000E6 RID: 230 RVA: 0x0000A6E8 File Offset: 0x000088E8 public void DivideYByCount(out PointClouds min, out PointClouds max) { min = null; max = null; int num = _yCollection.Count / 2; if (num == 0) { max = this; } else { List <int> range = _yCollection.GetRange(0, num + 1); List <int> range2 = _xCollection.GetRange(0, _xCollection.Count); List <int> range3 = _zCollection.GetRange(0, _zCollection.Count); if (num == _yCollection.Count - 1) { min = this; } else { List <int> range4 = _yCollection.GetRange(num + 1, _yCollection.Count - num - 1); List <int> range5 = _xCollection.GetRange(0, _xCollection.Count); List <int> range6 = _zCollection.GetRange(0, _zCollection.Count); foreach (int item in range4) { range2.Remove(item); range3.Remove(item); } foreach (int item2 in range) { range5.Remove(item2); range6.Remove(item2); } min = new PointClouds(range2, range, range3, Root); max = new PointClouds(range5, range4, range6, Root); } } }
// Token: 0x0600011A RID: 282 RVA: 0x0000C320 File Offset: 0x0000A520 public static double CalMinDistance(List <Point3d> points1, List <Point3d> points2) { double num = double.MaxValue; double num2 = double.MaxValue; double num3 = double.MaxValue; double num4 = double.MinValue; double num5 = double.MinValue; double num6 = double.MinValue; foreach (Point3d Vector3d in points1) { num = Math.Min(num, Vector3d.X); num4 = Math.Max(num4, Vector3d.X); num2 = Math.Min(num2, Vector3d.Y); num5 = Math.Max(num5, Vector3d.Y); num3 = Math.Min(num3, Vector3d.Z); num6 = Math.Max(num6, Vector3d.Z); } PointCloudsRoot pointCloudsRoot = new PointCloudsRoot((int)num, (int)num2, (int)num3, (int)num4, (int)num5, (int)num6); foreach (Point3d point in points1) { pointCloudsRoot.AddPoint(point); } pointCloudsRoot.FinalizeInput(); foreach (Point3d Vector3d2 in points2) { num = Math.Min(num, Vector3d2.X); num4 = Math.Max(num4, Vector3d2.X); num2 = Math.Min(num2, Vector3d2.Y); num5 = Math.Max(num5, Vector3d2.Y); num3 = Math.Min(num3, Vector3d2.Z); num6 = Math.Max(num6, Vector3d2.Z); } PointCloudsRoot pointCloudsRoot2 = new PointCloudsRoot((int)num, (int)num2, (int)num3, (int)num4, (int)num5, (int)num6); foreach (Point3d point2 in points2) { pointCloudsRoot2.AddPoint(point2); } pointCloudsRoot2.FinalizeInput(); PointClouds pointClouds = pointCloudsRoot.GetPointClouds(); PointClouds pointClouds2 = pointCloudsRoot2.GetPointClouds(); BoundingBox3D box = pointClouds.GetBox(); BoundingBox3D box2 = pointClouds2.GetBox(); points1 = pointClouds.GetPoints(); points2 = pointClouds2.GetPoints(); int count = points1.Count; int count2 = points2.Count; double result; if (count == 0 || count2 == 0) { result = -1.0; } else { BoxPositionType boxPositionType = box.CalXType(box2); BoxPositionType boxPositionType2 = box.CalYType(box2); BoxPositionType boxPositionType3 = box.CalZType(box2); while (count > 100 || count2 > 100) { if (boxPositionType == BoxPositionType.Intersect && boxPositionType2 == BoxPositionType.Intersect && boxPositionType3 == BoxPositionType.Intersect) { return(0.0); } if (boxPositionType > BoxPositionType.Intersect) { PointClouds pointClouds3; PointClouds pointClouds4; pointClouds.DivideXByCount(out pointClouds3, out pointClouds4); PointClouds pointClouds5; PointClouds pointClouds6; pointClouds2.DivideXByCount(out pointClouds5, out pointClouds6); if (boxPositionType == BoxPositionType.AB) { pointClouds = ((pointClouds4 == null) ? pointClouds3 : pointClouds4); pointClouds2 = ((pointClouds5 == null) ? pointClouds6 : pointClouds5); } else { if (boxPositionType == BoxPositionType.BA) { pointClouds = ((pointClouds3 == null) ? pointClouds4 : pointClouds3); pointClouds2 = ((pointClouds6 == null) ? pointClouds5 : pointClouds6); } } } else { if (boxPositionType2 > BoxPositionType.Intersect) { PointClouds pointClouds3; PointClouds pointClouds4; pointClouds.DivideYByCount(out pointClouds3, out pointClouds4); PointClouds pointClouds5; PointClouds pointClouds6; pointClouds2.DivideYByCount(out pointClouds5, out pointClouds6); if (boxPositionType2 == BoxPositionType.AB) { pointClouds = ((pointClouds4 == null) ? pointClouds3 : pointClouds4); pointClouds2 = ((pointClouds5 == null) ? pointClouds6 : pointClouds5); } else { if (boxPositionType2 == BoxPositionType.BA) { pointClouds = ((pointClouds3 == null) ? pointClouds4 : pointClouds3); pointClouds2 = ((pointClouds6 == null) ? pointClouds5 : pointClouds6); } } } else { if (boxPositionType3 > BoxPositionType.Intersect) { PointClouds pointClouds3; PointClouds pointClouds4; pointClouds.DivideZByCount(out pointClouds3, out pointClouds4); PointClouds pointClouds5; PointClouds pointClouds6; pointClouds2.DivideZByCount(out pointClouds5, out pointClouds6); if (boxPositionType3 == BoxPositionType.AB) { pointClouds = ((pointClouds4 == null) ? pointClouds3 : pointClouds4); pointClouds2 = ((pointClouds5 == null) ? pointClouds6 : pointClouds5); } else { if (boxPositionType3 == BoxPositionType.BA) { pointClouds = ((pointClouds3 == null) ? pointClouds4 : pointClouds3); pointClouds2 = ((pointClouds6 == null) ? pointClouds5 : pointClouds6); } } } } } box = pointClouds.GetBox(); box2 = pointClouds2.GetBox(); points1 = pointClouds.GetPoints(); points2 = pointClouds2.GetPoints(); count = points1.Count; count2 = points2.Count; boxPositionType = box.CalXType(box2); boxPositionType2 = box.CalYType(box2); boxPositionType3 = box.CalZType(box2); } var measure = Globals.WorkPart.MeasureManager.MeasureDistance(points1, points2); result = measure.Distance; } return(result); }