视图与视口

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内置常用的视图(俯视、仰视、轴侧等):

也可以根据当前显示状态或自定义窗口范围定义新的视图:

为某一个视口显示范围设置某一自定义视图后,一旦发生了拖动(相当于相机状态发生了变化),视图就失效了。

评论