模型空间、图纸空间、布局(Layout)之间联系——CAD c#二次开发

news/2025/3/23 1:00:02/

在 AutoCAD 的二次开发中,**模型空间(Model Space)**、**图纸空间(Paper Space)** 和 **布局(Layout)** 是三个核心概念,它们的关系及开发中的操作逻辑如下:

---

1. 模型空间(Model Space)

  - 是 AutoCAD 的默认设计环境,用于创建和编辑三维模型或二维几何体。
 - **唯一性**:每个图形文件只有一个模型空间。

  - 所有几何实体(如直线、圆、块等)默认保存在模型空间的块表记录 `BlockTableRecord.ModelSpace` 中。
  - 通过 `BlockTableRecord.ModelSpace` 直接访问,无需依赖布局。

  using (Transaction tr = db.TransactionManager.StartTransaction()) {
      BlockTable bt = tr.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;
      BlockTableRecord modelSpace = tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord;
      
      // 添加实体到模型空间
      Line line = new Line(new Point3d(0,0,0), new Point3d(100,100,0));
      modelSpace.AppendEntity(line);
      tr.AddNewlyCreatedDBObject(line, true);
      tr.Commit();
  }

2. 图纸空间(Paper Space)

  - 用于排版和打印,包含标题栏、注释、视口等非几何元素。
  - **多实例性**:一个图形文件可以有多个图纸空间(通过布局实现)。
- **开发特点**:
  - 每个图纸空间对应一个布局(如 `Layout1`, `Layout2`)。
  - 通过 `BlockTableRecord.PaperSpace` 访问当前激活的图纸空间块表记录。
  - **必须通过布局(Layout)操作**,直接操作 `PaperSpace` 可能无法关联到特定布局。

3. 布局(Layout)
- **定位**:
  - 是图纸空间的具体表现形式,每个布局代表一个独立的打印页面。
  - 用户通过切换布局来管理不同的图纸空间排版。
- **开发特点**:
  - 布局通过 `LayoutManager` 类管理,每个布局包含以下关键属性:
    - 页面设置(纸张尺寸、打印机配置等)。
    - 视口(Viewport)集合,用于显示模型空间的内容。
    - 标题栏、注释文本等二维元素。
  - **每个布局有自己的图纸空间块表记录**,例如 `Layout1` 的图纸空间与 `Layout2` 的图纸空间是独立的。
 

4. 三者的关系
(1) 模型空间 ⇄ 图纸空间(布局)
- **单向依赖**:
  - 模型空间是数据的唯一来源,图纸空间通过视口(Viewport)引用模型空间的视图。
  - 图纸空间中的视口是“窗口”,显示模型空间的特定区域,但无法直接修改模型空间数据。
- **多布局共享模型**:
  - 多个布局可以引用同一个模型空间的不同视图(例如:平面图、剖面图、三维视图)。

(2) 图纸空间 ⇄ 布局**
- **一一对应**:
  - 每个布局(如 `Layout1`)对应一个独立的图纸空间块表记录。
  - 切换布局时,实际切换的是当前激活的图纸空间环境。
- **开发关键点**:
  - 操作布局时需通过 `LayoutManager` 和 `Layout` 类,而非直接访问 `BlockTableRecord.PaperSpace`。

(3) 视口(Viewport)的角色**
- **连接模型与图纸**:
  - 视口是图纸空间中的对象,通过设置 `Viewport.ViewDirection`、`Viewport.CustomScale` 等属性,控制显示模型空间的哪部分内容。
  - 一个布局可以有多个视口,每个视口可独立配置显示范围和比例。

1. CAD中的视图与视口

视图(View) 定义:

用户对图形的观察方式,包括视角、投影方式(如正交或透视)、图层可见性等。 用途: 定义模型空间的显示方式(如俯视、侧视)。 控制打印布局中的图形比例和位置。 操作:通过VIEW命令或API调整视图的中心点、比例、旋转角度等。

视口(Viewport) 定义:

布局空间中的矩形区域,用于显示模型空间的内容。 用途: 将模型空间的不同视图(如平面图、立面图)排列在一张图纸上。 控制每个视图的显示比例和位置。 操作:通过VPORT命令或API调整视口的边界、比例、锁定状态等。 联系: 一个视口可以包含多个视图(通过视口分割)。 视口是视图的“容器”,决定视图在图纸上的位置和大小。

5. 开发中的关键区别
| **场景**               | **模型空间**                      | **图纸空间(布局)**                |
|-------------------------|-----------------------------------|-----------------------------------|
| **访问方式**           | `BlockTableRecord.ModelSpace`    | `LayoutManager` + `Layout`       |
| **实体类型**           | 三维几何体、块参照               | 视口、标题栏、注释文本            |
| **比例控制**           | 无固定比例                             | 通过视口的 `CustomScale` 控制      |
| **多实例支持**        | 唯一                                       | 多个布局(每个布局独立)          |
| **打印设置**           | 不可直接打印                        | 通过 `Layout.PlotSettings` 配置   |

总结

模型空间是数据的唯一来源,用于三维建模。 图纸空间是打印排版的环境,通过布局(Layout)管理。 布局是图纸空间的具体实例,每个布局独立配置页面和视口。 视口是连接二者的桥梁,控制模型空间的显示范围和比例。 在开发中,需通过 LayoutManager 管理布局,通过 BlockTableRecord.ModelSpace 和 BlockTableRecord.PaperSpace 分别操作模型和图纸空间的内容。

 public static void 模型空间_图纸空间_布局视图的关系(){// 获取当前文档和数据库Document doc = Application.DocumentManager.MdiActiveDocument;Database db = doc.Database;Editor ed = doc.Editor;try{// 提示用户选择一个实体PromptEntityOptions entityOptions = new PromptEntityOptions("\n请选择要检查的实体: ");entityOptions.SetRejectMessage("\n请选择有效的AutoCAD实体。");entityOptions.AddAllowedClass(typeof(Entity), false); // 允许选择任何实体类型PromptEntityResult entityResult = ed.GetEntity(entityOptions);// 检查用户是否取消选择if (entityResult.Status != PromptStatus.OK){ed.WriteMessage("\n操作已取消。");return;}// 获取选中的实体对象using (Transaction tr = db.TransactionManager.StartTransaction()){Entity selectedEntity = tr.GetObject(entityResult.ObjectId, OpenMode.ForRead) as Entity;// 获取实体所在的块表记录(BlockTableRecord)BlockTableRecord btr = tr.GetObject(selectedEntity.BlockId, OpenMode.ForRead) as BlockTableRecord;// 获取布局名称string layoutName = "模型空间"; // 默认值为模型空间if (btr.LayoutId!= null){   Layout layout = tr.GetObject(btr.LayoutId, OpenMode.ForRead) as Layout;layoutName = layout.LayoutName;}// 判断实体所在空间和视图ed.WriteMessage($"\n所选实体位于{btr.Name},layoutName:{layoutName}。\n");tr.Commit(); // 提交事务}}catch (System.Exception ex){ed.WriteMessage("\n发生错误: " + ex.Message);}}


http://www.ppmy.cn/news/1581260.html

相关文章

JVM(Java虚拟机)的核心组成

1. 类加载器(Class Loader) 功能:负责将.class文件加载到内存,并转换为JVM可识别的数据结构。 分类: 启动类加载器(Bootstrap Class Loader):加载JAVA_HOME/lib下的核心类库&#x…

SQL Server 2014 (x64) 中文版安装与使用指南(附安装包)

SQL Server 2014 (x64) - CHS 是 Microsoft SQL Server 2014 的中文版,适用于 64 位操作系统。以下是关于该版本的一些关键信息: SQL Server 2014 (x64)安装装包下载地址链接:https://pan.quark.cn/s/a5d01527a246 1. 版本类型 CHS 表示中文…

【Node.js入门笔记9---path 模块】

Node.js入门笔记9 Node.js---path 模块一、核心功能0.学习path的前提1. 使用 path.join() 安全拼接路径2. path.resolve(),路径解析(绝对路径)3. 路径信息提取4. 路径规范化 二、跨平台关键点1. 路径分隔符2. 环境变量分隔符3. 路径格式解析4…

使用LangChain实现基于LLM和RAG的PDF问答系统

目录 前言一.大语言模型(LLM)1. 什么是LLM?2. LLM 的能力与特点 二、增强检索生成(RAG)三. 什么是 LangChain?1. LangChain 的核心功能2. LangChain 的优势3. LangChain 的应用场景4. 总结 四.使用 LangChain 实现基于 PDF 的问答系统 前言 本文将介绍 …

泰迪智能科技大模型开发平台与大模型应用平台介绍

大模型开发平台是一款面向高校大模型教学、科研的一站式大模型开发工具。平台能够自定义调用CPU和内存资源,自由配置专门针对大模型和深度学习等任务的硬件加速器(如GPU或XPU),能够高效地执行大模型的prompt工程、大模型应用开发和…

【Linux】浅谈环境变量和进程地址空间

一、环境变量 基本概念 环境变量(Environment Variables)是操作系统提供的一种机制,用于存储和传递配置信息、系统参数、用户偏好设置等。 环境变量的作用 配置程序行为: 程序可以通过环境变量获取配置信息,例如日…

vue3父子组件传值

在 Vue 3 中,Composition API 是一种新的编写组件逻辑的方式,它通过 setup 函数提供了一种更灵活的方式来组织和复用代码。与传统的 Options API 相比,Composition API 更适合处理复杂的逻辑场景,尤其是在需要跨组件复用逻辑时。 …

如何理解std::promise和std::future

std::promise 是 C11 引入的一个类,用于在线程之间传递异步结果(值或异常)。它通常与 std::future 配合使用,std::promise 用于设置值或异常,而 std::future 用于获取这些值或异常。 下面通过一个更直观的生产者-消费者…