//Get needed Viewport information public static ViewportInfo[] SelectLockedViewportInfoOnLayout( Document dwg, string layoutName) { List <ViewportInfo> lst = new List <ViewportInfo>(); TypedValue[] vals = new TypedValue[] { new TypedValue((int)DxfCode.Start, "VIEWPORT"), new TypedValue((int)DxfCode.LayoutName, layoutName) }; PromptSelectionResult res = dwg.Editor.SelectAll(new SelectionFilter(vals)); if (res.Status == PromptStatus.OK) { using (Transaction tran = dwg.TransactionManager.StartTransaction()) { foreach (ObjectId id in res.Value.GetObjectIds()) { Viewport vport = (Viewport)tran.GetObject( id, OpenMode.ForRead); if (vport.Number != 1 && vport.Locked) { ViewportInfo vpInfo = new ViewportInfo(); vpInfo.ViewportId = id; vpInfo.NonRectClipId = vport.NonRectClipEntityId; if (!vport.NonRectClipEntityId.IsNull && vport.NonRectClipOn) { Polyline2d pl = (Polyline2d)tran.GetObject( vport.NonRectClipEntityId, OpenMode.ForRead); vpInfo.BoundaryInPaperSpace = GetNonRectClipBoundary(pl, tran); } else { vpInfo.BoundaryInPaperSpace = GetViewportBoundary(vport); } Matrix3d mt = PaperToModel(vport); vpInfo.BoundaryInModelSpace = TransformPaperSpacePointToModelSpace( vpInfo.BoundaryInPaperSpace, mt); lst.Add(vpInfo); } } tran.Commit(); } } return(lst.ToArray()); }
public static ViewportInfo GetViewInfo(Viewport vport, Transaction tran) { ViewportInfo vpInfo = null; if (vport == null) { Log4NetHelper.WriteInfoLog("视口放大太小,请放大到全视口选择实体。\n"); return(null); } Log4NetHelper.WriteInfoLog("视口的数字" + vport.Number + "\n"); if (vport.Number != 1 && vport.Locked) { vpInfo = new ViewportInfo(); vpInfo.ViewportId = vport.ObjectId; vpInfo.NonRectClipId = vport.NonRectClipEntityId; if (!vport.NonRectClipEntityId.IsNull && vport.NonRectClipOn) { Polyline2d pl = (Polyline2d)tran.GetObject( vport.NonRectClipEntityId, OpenMode.ForRead); vpInfo.BoundaryInPaperSpace = GetNonRectClipBoundary(pl, tran); } else { vpInfo.BoundaryInPaperSpace = GetViewportBoundary(vport); } Matrix3d mt = PaperToModel(vport); vpInfo.BoundaryInModelSpace = TransformPaperSpacePointToModelSpace( vpInfo.BoundaryInPaperSpace, mt); } return(vpInfo); }