public void EliminatePoints2dCommand() { Editor editor = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor; Database arg_15_0 = HostApplicationServices.WorkingDatabase; new List <IdPoint>(); try { //LicenseManager.CheckValid("FULL"); ObjectId[] pointIDs = CommandLineQuerries.SelectPoints(false); PointElimination.double_0 = CommandLineQuerries.SpecifyDouble("Specify snap radius", PointElimination.double_0, false, false, false, true); PointElimination.string_0 = CommandLineQuerries.KeepIfMultiple(PointElimination.string_0); int num = 0; IdPoint.EraseDublicates2d(pointIDs, PointElimination.double_0, PointElimination.string_0, ref num); editor.WriteMessage("\nNumber of points erased: " + num); } catch (System.Exception ex) { editor.WriteMessage("\n" + ex.Message); } }
internal void method_0(ObjectId[] objectId_0, ObjectId[] objectId_1, CoordinateSystem coordinateSystem_0) { Editor editor = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor; Database workingDatabase = HostApplicationServices.WorkingDatabase; ProgressMeter progressMeter = new ProgressMeter(); MessageFilter messageFilter = new MessageFilter(); System.Windows.Forms.Application.AddMessageFilter(messageFilter); int num = 0; int num2 = 0; try { using (Transaction transaction = workingDatabase.TransactionManager.StartTransaction()) { progressMeter.SetLimit(objectId_0.Length + objectId_1.Length); if ((double)objectId_0.Length > 10000.0 || (double)objectId_1.Length > 10000.0) { progressMeter.Start("Interpolating..."); } DBManager.SetEpsilon(); CoordinateTransformator coordinateTransformator = new CoordinateTransformator(CoordinateSystem.Global(), coordinateSystem_0); CoordinateTransformator inverseTransformation = coordinateTransformator.GetInverseTransformation(); BlockTable blockTable = (BlockTable)transaction.GetObject(workingDatabase.BlockTableId, (OpenMode)1); BlockTableRecord blockTableRecord = (BlockTableRecord)transaction.GetObject(blockTable[BlockTableRecord.ModelSpace], (OpenMode)1); ObjectId layerId = DBManager.CurrentLayerId(); List <IdPoint> list = new List <IdPoint>(); for (int i = 0; i < objectId_0.Length; i++) { DBPoint dbPoint = (DBPoint)transaction.GetObject(objectId_0[i], (OpenMode)1, true); IdPoint idPoint = new IdPoint(dbPoint); idPoint.IsValid = false; coordinateTransformator.Transform(idPoint.Point); idPoint.Point.Z = double.NaN; list.Add(idPoint); progressMeter.MeterProgress(); } list.Sort(); List <Triangle> list2 = Conversions.ToCeometricAcDbTriangleList(objectId_1); for (int j = 0; j < list2.Count; j++) { progressMeter.MeterProgress(); messageFilter.CheckMessageFilter((long)j, 1000); Triangle triangle = list2[j]; coordinateTransformator.Transform(triangle); double minimumX = triangle.MinimumX; double maximumX = triangle.MaximumX; double minimumY = triangle.MinimumY; double maximumY = triangle.MaximumY; int num3 = Math.Abs(list.BinarySearch(new IdPoint(new Point(minimumX, 0.0, 0.0), null))); int num4 = Math.Abs(list.BinarySearch(new IdPoint(new Point(maximumX, 0.0, 0.0), null))); num3 = Math.Max(num3 - 1, 0); num4 = Math.Min(num4 + 1, list.Count - 1); for (int k = num4; k >= num3; k--) { Point point = list[k].Point; if (point.X <= maximumX && point.X >= minimumX && point.Y <= maximumY && point.Y >= minimumY) { double num5 = Predicate.InTriangle2dExact(triangle.Vertex1, triangle.Vertex2, triangle.Vertex3, point); num5 = Predicate.Orientatation2dExact(triangle) * num5; if (num5 >= 0.0) { double num6 = PointProjection.smethod_0(triangle, point); if (double.IsNaN(num6)) { num++; } else { double x = point.X; double y = point.Y; if (point.Z != double.NaN) { if (PointProjection.string_5 == "H") { if (num6 < point.Z) { goto IL_3FC; } } else if (num6 > point.Z) { goto IL_3FC; } } point.Z = num6; inverseTransformation.Transform(ref x, ref y, ref num6); DBPoint dBPoint = new DBPoint(new Point3d(x, y, num6)); if (PointProjection.string_3 == "C") { dBPoint.LayerId = (layerId); } else if (PointProjection.string_3 == "F") { dBPoint.SetPropertiesFrom(triangle.AcDbFace); } else if (PointProjection.string_3 == "P") { dBPoint.SetPropertiesFrom(list[k].DBPoint); } list[k].IsValid = true; list[k].DBPoint2 = dBPoint; if (PointProjection.string_2 == "Y" & !list[k].DBPoint.IsErased) { list[k].DBPoint.Erase(); } } } } IL_3FC :; } } for (int l = 0; l < list.Count; l++) { if (list[l].IsValid) { blockTableRecord.AppendEntity(list[l].DBPoint2); transaction.AddNewlyCreatedDBObject(list[l].DBPoint2, true); num2++; } } transaction.Commit(); editor.WriteMessage("\nFailed interpolations : " + num); editor.WriteMessage("\nPoints outside surface: " + (objectId_0.Length - num2 - num).ToString()); editor.WriteMessage("\nInterpolated points : " + num2.ToString()); } progressMeter.Stop(); } catch (System.Exception ex) { progressMeter.Stop(); throw; } }