Exemplo n.º 1
0
        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);
            }
        }
Exemplo n.º 2
0
        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;
            }
        }