CAD创建不规则形状视口


选择CAD模型空间中多段线,在指定的布局中创建视口,方法如下:

 1         /// 
 2         /// 创建视口
 3         /// 
 4         /// 模型空间多段线
 5         /// 当前布局名称
 6         /// 布局空间视口插入点
 7         /// 缩放比例
 8         private void MakeViewport(Polyline roundLine, string curentLayout, Point3d insertPoint, double scale)
 9         {
10             Database db = HostApplicationServices.WorkingDatabase;
11             using (Transaction tran = db.TransactionManager.StartTransaction())
12             {
13                 BlockTable bt = tran.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;
14                 BlockTableRecord btr = tran.GetObject(bt[BlockTableRecord.PaperSpace], OpenMode.ForWrite) as BlockTableRecord;
15                
16                 Polyline bound =  roundLine.Clone() as Polyline;
17                 bound.Closed = true;
18                 Point3d maxPoint = bound.GeometricExtents.MaxPoint;
19                 Point3d minPoint = bound.GeometricExtents.MinPoint;
20                 Point3d centerPoint = new Point3d((maxPoint.X + minPoint.X) / 2, (maxPoint.Y + minPoint.Y) / 2, 0);
21                 bound.TransformBy(Matrix3d.Scaling(scale, centerPoint));
22                 bound.TransformBy(Matrix3d.Displacement(centerPoint.GetVectorTo(insertPoint)));
23                 btr.AppendEntity(bound);
24                 tran.AddNewlyCreatedDBObject(bound, true);
25 
26                 Viewport vp = new Viewport();
27                 btr.AppendEntity(vp);
28                 tran.AddNewlyCreatedDBObject(vp, true);
29                 vp.NonRectClipEntityId = bound.Id;
30 
31                 vp.CenterPoint = insertPoint;  //视口插入位置
32                 vp.ViewCenter = new Point2d(centerPoint.X, centerPoint.Y); //模型空间中心位置
33 
34                 vp.ViewHeight = maxPoint.Y - minPoint.Y; //模型空间高度
35                 vp.Height = scale * vp.ViewHeight;  //视口高度
36                 vp.NonRectClipOn = true;
37                 vp.Locked = true;
38                 vp.On = true;
39                 tran.Commit();
40             }
41         }