/// <summary> /// 调整viewPlan的尺寸并贴合选中房间 /// change a viewPlan to fix the selected room /// </summary> /// <param name="view"></param> /// <param name="tran"></param> /// <param name="viewOffseet"></param> public void ChangeViewFitRoom(ViewPlan view, Transaction tran, double viewOffseet) { if (view == null) { TaskDialog.Show("viewIsNull", "Can't find the type of View."); return; } //获得并设定房间的边界设定,并获取其边界集 DocSet.uidoc.ActiveView = view; SpatialElementBoundaryOptions opt = new SpatialElementBoundaryOptions(); opt.SpatialElementBoundaryLocation = SpatialElementBoundaryLocation.Center;//房间边界设定,能变更获取的边界位置 IList <IList <BoundarySegment> > segments = DocSet.selRoom.GetBoundarySegments(opt); if (segments == null) { TaskDialog.Show("segementsIsNull", "can't get the BoundarySegment of room"); return; } ViewCropRegionShapeManager vcrShanpMgr = view.GetCropRegionShapeManager(); CurveLoop loop = new CurveLoop(); foreach (IList <BoundarySegment> segmentList in segments) { foreach (BoundarySegment segment in segmentList) { Curve curve = segment.GetCurve(); loop.Append(curve); } bool cropValid = vcrShanpMgr.IsCropRegionShapeValid(loop); if (cropValid) { //默认矩形 //TaskDialog.Show("cropValid", "the crop is shape Valid"); tran.Start("change the view crop region"); vcrShanpMgr.SetCropShape(loop); tran.Commit(); tran.Start("Remove Crop Region Shape"); vcrShanpMgr.RemoveCropRegionShape(); tran.Commit(); //TaskDialog.Show("ChangeView", "ChangeViewdone"); break; } } tran.Start("loop offset"); //TaskDialog.Show("!!!", "changeloop!"); loop = CurveLoop.CreateViaOffset(vcrShanpMgr.GetCropShape().First(), -1 * viewOffseet / 300, new XYZ(0, 0, 1)); vcrShanpMgr.SetCropShape(loop); tran.Commit(); DocSet.uidoc.ActiveView = view; }