AutoCAD中的视口和视图是非常让人迷惑的概念,尤其是视口在很多场景中出现,包括模型空间视口和布局空间两种视口。
已有相关文章 布局和视口 介绍了布局空间视口,本文聚焦在模型空间视口。
视口
1、一个视口可以由多个视图组成,这些视图可以自由排列
2、可以为视口的每个视图指定相关属性(视觉样式等)
3、可以基于一种标准视口创建一个命名视口
4、也可以用代码创建布局更灵活的视口,下面展示用代码创建一个5视图视口:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| [CommandMethod("Test2")] public static void Test2() { Document doc = DwgOperators.ThisDocument; Database db = DwgOperators.ThisDatabase; Editor ed = DwgOperators.ThisEditor; using (Transaction transaction = db.TransactionManager.StartTransaction()) { var viewportTable = transaction.GetObject(db.ViewportTableId, OpenMode.ForRead) as ViewportTable; string vpName = "李浩测试2"; if (viewportTable.Has(vpName)) return; viewportTable.UpgradeOpen();
ViewportTableRecord viewportTableRecord1 = new ViewportTableRecord(); viewportTableRecord1.Name = vpName; viewportTableRecord1.LowerLeftCorner = new Point2d(0, 0); viewportTableRecord1.UpperRightCorner = new Point2d(0.2, 0.5); viewportTable.Add(viewportTableRecord1); transaction.AddNewlyCreatedDBObject(viewportTableRecord1, true);
ViewportTableRecord viewportTableRecord2 = new ViewportTableRecord(); viewportTableRecord2.Name = vpName; viewportTableRecord2.LowerLeftCorner = new Point2d(0, 0.5); viewportTableRecord2.UpperRightCorner = new Point2d(0.2,1.0); viewportTable.Add(viewportTableRecord2); transaction.AddNewlyCreatedDBObject(viewportTableRecord2, true);
ViewportTableRecord viewportTableRecord3 = new ViewportTableRecord(); viewportTableRecord3.Name = vpName; viewportTableRecord3.LowerLeftCorner = new Point2d(0.2, 0); viewportTableRecord3.UpperRightCorner = new Point2d(0.5,0.5); viewportTable.Add(viewportTableRecord3); transaction.AddNewlyCreatedDBObject(viewportTableRecord3, true);
ViewportTableRecord viewportTableRecord4 = new ViewportTableRecord(); viewportTableRecord4.Name = vpName; viewportTableRecord4.LowerLeftCorner = new Point2d(0.2, 0.5); viewportTableRecord4.UpperRightCorner = new Point2d(0.5,1.0); viewportTable.Add(viewportTableRecord4); transaction.AddNewlyCreatedDBObject(viewportTableRecord4, true);
ViewportTableRecord viewportTableRecord5 = new ViewportTableRecord(); viewportTableRecord5.Name = vpName; viewportTableRecord5.LowerLeftCorner = new Point2d(0.5,0); viewportTableRecord5.UpperRightCorner = new Point2d(1.0,1.0); viewportTable.Add(viewportTableRecord5); transaction.AddNewlyCreatedDBObject(viewportTableRecord5, true);
viewportTable.DowngradeOpen(); transaction.Commit(); } }
|
效果如下:
5、命名视口的数据存储
- 视口(Viewport)存储在“九表一词典”中的Viewport Table中,一个视口中的每一个视图区域都对应一个Viewport Table记录,且同属一个视口的Viewport Table记录拥有相同的Name属性,如下所示:
- 激活一个视口后,会自动生成多个名为*Active的Viewport Table记录
- 通过CVPORT系统变量可以修改当前视口的焦点视图,然后可调用ZOOM命令实现缩放
视图
视图就是图形在窗体上显示的某一瞬态。把图纸理解为一个地面范围,视图就是相机在某一坐标、某一高度和某一角度看到的样子,下次可以通过视图快速恢复相机状态。
AutoCAD内置常用的视图(俯视、仰视、轴侧等):
也可以根据当前显示状态或自定义窗口范围定义新的视图:
为某一个视口显示范围设置某一自定义视图后,一旦发生了拖动(相当于相机状态发生了变化),视图就失效了。