Author Topic: zoom every selection rectangle/borders to paperspace  (Read 247 times)

0 Members and 1 Guest are viewing this topic.

daboho

  • Mosquito
  • Posts: 15
zoom every selection rectangle/borders to paperspace
« on: August 19, 2021, 11:26:23 AM »
i have problem in net
step 1 :select borders / cover in models space (multi select)
step 2 : every selection will be to zoom to every papersapce
but problem in all paperspace has zoom only to first selection
this is my code what is wrong from code
from file in every paperspace what is i wanted
Code: [Select]
 
 [CommandMethod("zv", CommandFlags.UsePickSet | CommandFlags.Redraw)]
        public void testview()
        {


            var doc = acApp.DocumentManager.MdiActiveDocument;
            Database db = HostApplicationServices.WorkingDatabase;
            var ed = doc.Editor;
            List<ObjectId> lisCircleObjId = new List<ObjectId>();
            lisCircleObjId = this.lisFindObjIdOfCircle();
         
            using (Transaction trans = db.TransactionManager.StartTransaction())
            {
                using (var layoutDictionary = (DBDictionary)trans.GetObject(db.LayoutDictionaryId, OpenMode.ForRead))
                {
                    using (var mylock = doc.LockDocument())
                    {
                            foreach (var layoutEntry in layoutDictionary)
                            {
                                if (layoutEntry.Key == "Model") continue;

                                using (var layout = (Layout)trans.GetObject(layoutEntry.Value, OpenMode.ForWrite))
                                {

                                    var n = 0;
                                    var extSelObj = new Extents3d();
                                    // ObjectId layoutId = LayoutManager.Current.CreateLayout(layout.LayoutName);             // membuat layout
                                    LayoutManager.Current.CurrentLayout = layout.LayoutName;
                                    Entity entObj = (Entity)trans.GetObject(lisCircleObjId[n], OpenMode.ForRead);
                                    ObjectId idcover = entObj.ObjectId;
                                    extSelObj.AddExtents(entObj.GeometricExtents);
                                    bool isPaperspace = true;
                                    foreach (ObjectId viewportId in layout.GetViewports())
                                    {
                                        if (isPaperspace)
                                        {
                                            isPaperspace = false;
                                            continue;
                                        }
                                        using (var viewport = (Viewport)trans.GetObject(viewportId, OpenMode.ForWrite))
                                        {
                                            if (viewport.Locked == true) viewport.Locked = false;
                                            viewport.On = true;
                                            ed.Command("._MSPACE");
                                            // buat extend dari objectID
                                            var pl = trans.GetObject(entObj.ObjectId, OpenMode.ForRead) as Polyline;
                                            var ext = new Extents3d();
                                            ext = pl.GeometricExtents;
                                            var mn = ext.MinPoint;
                                            var mx = ext.MaxPoint;
                                            dynamic appAcad = acApp.AcadApplication;
                                            //appAcad.ZoomWindow(mn.ToArray(), mx.ToArray());
                                            ObjectId[] newIds = new ObjectId[0];
                                            ed.SetImpliedSelection(newIds);
                                            appAcad.ZoomWindow(extSelObj.MinPoint.ToArray(), extSelObj.MaxPoint.ToArray());
                                            ed.SetImpliedSelection(new ObjectId[] { idcover });
                                            // ed.SetImpliedSelection(new ObjectId[] { myRec });
                                            ed.Command("._PSPACE", "");
                                            doc.Editor.SwitchToPaperSpace();
                                            dynamic acadApp = acApp.AcadApplication;
                                            acadApp.ZoomExtents();
                                            ed.WriteMessage("\n viewlocked : " + viewport.Locked.ToString());
                                            break;

                                        }
                                        n += 1;
                                        ed.Regen();
                                    }
                                }
                            }

                    }
                }

                trans.Commit();
               
            }

        }
  private List<ObjectId> lisFindObjIdOfCircle()
        {
            Document doc = acApp.DocumentManager.MdiActiveDocument;
            Editor ed = doc.Editor;

            List<ObjectId> lisObjectIdFound = new List<ObjectId>();

            try
            {
                var option = new PromptSelectionOptions(); option.MessageForAdding = "\nselect Rectangle/Borders Cover Gambar";
                var psr = ed.GetSelection(option, new SelectionFilter(new[] { new TypedValue(0, "LWPOLYLINE,Polyline") }));
             
                SelectionSet acSSet = psr.Value;
                if (psr.Status == PromptStatus.OK)
                {
                   
                    foreach (SelectedObject recID in acSSet)
                    {
                        lisObjectIdFound.Add(recID.ObjectId);
                    }
                }



            }
            catch (System.Exception ex)
            {
                ed.WriteMessage("\nError in getting ObjectId of all circles on the drawing. " +
                                 "Error message is: " + ex.Message);
            }

            return (lisObjectIdFound);
        }


« Last Edit: August 19, 2021, 11:45:41 AM by daboho »

daboho

  • Mosquito
  • Posts: 15
Re: zoom every selection rectangle/borders to paperspace
« Reply #1 on: August 20, 2021, 05:54:22 AM »
I has solved this thank