objectarx

PHOTO EMBED

Sat Sep 04 2021 22:21:33 GMT+0000 (UTC)

Saved by @puritano #html

public void Seleccionar()
        {

            Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;

            Database db = doc.Database;

            Editor ed = doc.Editor;

            PromptEntityOptions peo = new PromptEntityOptions("\nSeleccione una superficie:");

            //peo.SetRejectMessage("\nDebe ser un entidad de tipo ¡Polyline!");

            //peo.AddAllowedClass(typeof(Autodesk.AutoCAD.DatabaseServices.Polyline), false);

            PromptEntityResult per = ed.GetEntity(peo);


            if (per.Status != PromptStatus.OK)

                return;

            Transaction tr = db.TransactionManager.StartTransaction();

            Autodesk.AutoCAD.DatabaseServices.Polyline pl = new Autodesk.AutoCAD.DatabaseServices.Polyline();

            IntegerCollection ic = new IntegerCollection();

            using (tr)
            {

                DBObject obj = tr.GetObject(per.ObjectId, OpenMode.ForRead);

                ed.WriteMessage("Type : " + obj.GetType().Name);
                                
                if (obj is Autodesk.AutoCAD.DatabaseServices.Polyline)
                {
                    ed.WriteMessage(obj.GetType().Name + "Selected.");

                    Autodesk.AutoCAD.DatabaseServices.Polyline pline = tr.GetObject(per.ObjectId, OpenMode.ForRead) as Autodesk.AutoCAD.DatabaseServices.Polyline;

                    if (pline != null)
                    {
                        BlockTableRecord btr = (BlockTableRecord)tr.GetObject(pline.OwnerId, OpenMode.ForWrite);

                        Point3d picked = pline.GetClosestPointTo((Point3d)per.PickedPoint, false);

                        double par = pline.GetParameterAtPoint(picked);

                        int m = (int)par;

                        Point2dCollection verts = new Point2dCollection(2);

                        SegmentType stype = pline.GetSegmentType(m);

                        if (stype == SegmentType.Line)
                        {
                            Point3d pl1 = pline.GetPoint3dAt(0);
                            Point3d pl2 = pline.GetPoint3dAt(1);

                            int vn = pline.NumberOfVertices;

                            double maxDistance = 0;
                            double minDistance = 0;

                            Point3d puntoL2 = pline.GetPoint3dAt(1);

                            Autodesk.AutoCAD.ApplicationServices.Application.ShowAlertDialog("VN: " + vn);

                            for (int i = 0; i < vn; i++)

                            {
                                Point3d pt1 = pline.GetPoint3dAt(i);
                                
                                ed.WriteMessage("\n" + pt1.ToString());
                                if (i < (vn - 1))
                                {
                                    Point3d pt2 = pline.GetPoint3dAt(i + 1);
                                    ed.WriteMessage("\n" + pt2.ToString());
                                    var preDistance = pt1.DistanceTo(pt2);
                                    
                                    if (preDistance > maxDistance)
                                    {
                                        maxDistance = preDistance;
                                    }
                                    if(preDistance > 0 && preDistance < maxDistance)
                                    {
                                        minDistance = preDistance;
                                    }
                                    if (preDistance == maxDistance)
                                    {
                                        puntoL2 = pline.GetPoint3dAt(i + 1);
                                    }
                                }
                                if(i == (vn-1))
                                {
                                    puntoL2 = pline.GetPoint3dAt(0);
                                }

                            }
                            

                            Point3d puntico;

                            if (pl1.Y > pl2.Y)
                            {
                                puntico = pl1;
                            }
                            else
                            {
                                puntico = pl2;
                            }

                            var distance = maxDistance;

                            PromptIntegerOptions prn = new PromptIntegerOptions("\nDetermine el alto del muro:");
                            PromptIntegerResult startingNumberPromptResult = ed.GetInteger(prn);

                            Autodesk.AutoCAD.ApplicationServices.Application.ShowAlertDialog("Ancho: " + distance + " Alto:" + startingNumberPromptResult.Value);

                            Point3d puntoL1 = new Point3d(pl1.X, pl1.Y - 0.6, pl1.Z);
                            Point3d puntoLL = new Point3d(puntoL2.X, puntoL2.Y - 0.6, puntoL2.Z);

                            tr.Commit();

                            string punto1 = "punto 1." + puntoL1.X + "-" + puntoL1.Y + "-" + puntoL1.Z;
                            string punto2 = " - punto 2." + puntoL2.X + "-" + puntoL2.Y + "-" + puntoL2.Z;

                            Autodesk.AutoCAD.ApplicationServices.Application.ShowAlertDialog(punto1 + punto2);
                            
                            InsertBlocketivo(puntoL1, "panel60x120", distance, startingNumberPromptResult.Value,minDistance, puntoL2);

                        }

                        
                    }                    

                }          

            }

        }
content_copyCOPY