插入点(position) 和对齐点(AlignmentPoint)详解——CAD c#二次开发

在 AutoCAD 中,文本对象的位置由插入点(position) 和对齐点(Alignment Point) 共同控制,两者的关系取决于文本的对齐方式。以下是详细说明:

一、插入点与对齐点的定义

1. 插入点(position)
  • 定义:文本对象的基准点,通常是文本开始绘制的位置。
  • 特性
    • 对于左对齐文本,插入点即文本的起始点。
    • 对于其他对齐方式(如居中、右对齐),插入点可能与文本实际位置无关,而是由对齐方式决定。
    • 在 API 中,通过DBText.Position属性访问。
2. 对齐点(Alignment Point)
  • 定义:文本对象相对于其插入点的对齐参考点。
  • 特性
    • 不同对齐方式下,对齐点与文本的相对位置不同(如左对齐时对齐点为文本左端点,居中对齐时为中点)。
    • 在 API 中,通过DBText.AlignmentPoint属性访问。

 一、AlignmentPoint 与 Position 的匹配逻辑
1. 基本规则
AlignmentPoint:控制文本在视图中的实际位置(如居中、右对齐的锚点)。
Position:根据对齐方式自动计算,确保与 AlignmentPoint 的相对位置正确。
2. 匹配方法
当修改AlignmentPoint后,需要:
设置对齐方式(如居中、右对齐)。
更新 AlignmentPoint到目标位置。
让 AutoCAD 自动调整 Position(通过 API 操作 AlignmentPoint 后,Position 会自动更新)。
二、代码示例:非左对齐方式下的匹配

示例 1:居中对齐(TextCenter)DBText text = ...; // 获取文本对象// 1. 设置对齐方式为居中
text.HorizontalMode = TextHorizontalMode.TextCenter;// 2. 设置目标位置(对齐点)
Point3d targetPoint = new Point3d(100, 50, 0);
text.AlignmentPoint = targetPoint;// 3. AutoCAD自动计算Position,无需手动设置
// Position会被自动调整为与居中对齐方式匹配的值
示例 2:右对齐(TextRight)DBText text = ...;// 1. 设置对齐方式为右对齐
text.HorizontalMode = TextHorizontalMode.TextRight;// 2. 设置目标位置(对齐点为文本右端点)
Point3d targetPoint = new Point3d(100, 50, 0);
text.AlignmentPoint = targetPoint;// 3. Position自动调整为文本右侧外的某个点
// 无需手动设置,确保AlignmentPoint正确即可
示例 3:多行文本(MText)的居中对齐
csharp
MText mText = ...;// 1. 设置对齐方式为居中
mText.HorizontalMode = TextHorizontalMode.TextCenter;
mText.VerticalMode = TextVerticalMode.TextVerticalMid;// 2. 设置目标位置(对齐点为文本中心点)
Point3d targetPoint = new Point3d(100, 50, 0);
mText.Location = targetPoint; // MText使用Location替代AlignmentPoint// 3. AutoCAD自动处理内部Position与对齐点的关系


三、常见问题与注意事项
1. 为什么需要匹配 Position?
若 Position 与对齐方式不匹配,可能导致:
文本显示位置偏移。
修改 AlignmentPoint 后文本位置异常。
2. 如何验证匹配是否正确?
打印属性值:
csharp
ed.WriteMessage("\nAlignmentPoint: " + text.AlignmentPoint.ToString());
ed.WriteMessage("\nPosition: " + text.Position.ToString());

观察规律:
居中对齐:Position 在文本左侧,AlignmentPoint 在文本中心。
右对齐:Position 在文本右侧,AlignmentPoint 在文本右端点。
3. 特殊场景处理
旋转文本:旋转后,Position 和 AlignmentPoint 的关系会发生变化,需重新计算。
多行文本(MText):使用Location属性替代 AlignmentPoint,逻辑类似。
四、总结
非左对齐方式下的操作步骤:
设置对齐方式(如TextCenter、TextRight)。
直接修改 AlignmentPoint到目标位置。
不要手动调整 Position,由 AutoCAD 自动计算匹配值。

 

二、对齐方式对两者关系的影响

1. 左对齐(TextLeft)
  • 关系:插入点 = 对齐点 = 文本左端点。
  • 例子:设置HorizontalMode = TextLeft后,修改Position会直接移动文本的左端点。
2. 居中对齐(TextCenter)
  • 关系:对齐点 = 文本中点,插入点可能与文本位置无关。
  • 例子:若文本内容为 "ABC",对齐点为 "B" 字母的中心点,插入点可能在文本左侧外。
3. 右对齐(TextRight)
  • 关系:对齐点 = 文本右端点,插入点可能在文本右侧外。
  • 例子:修改AlignmentPoint会移动文本的右端点,而插入点保持不动。
4. 其他对齐方式(如 MiddleLeft、MiddleCenter 等)
  • 关系:对齐点定义文本在垂直和水平方向的锚点(如 MiddleLeft 为文本左中点)。
  • 例子AttachmentPoint.MiddleLeft对应 MText 的左中点对齐,此时插入点需配合对齐点计算文本位置。

三、代码示例:不同对齐方式下的点关系

csharp

// 场景:修改文本位置,根据对齐方式选择操作
DBText dBText = ...; // 获取文本对象// 1. 左对齐(TextLeft)
dBText.HorizontalMode = TextHorizontalMode.TextLeft;
// 直接修改插入点即可移动文本左端点
dBText.Position = new Point3d(newX, dBText.Position.Y, 0);// 2. 居中对齐(TextCenter)
dBText.HorizontalMode = TextHorizontalMode.TextCenter;
// 需要修改对齐点来移动文本中点
Point3d alignPoint = dBText.AlignmentPoint;
dBText.AlignmentPoint = new Point3d(newX, alignPoint.Y, 0);// 3. 右对齐(TextRight)
dBText.HorizontalMode = TextHorizontalMode.TextRight;
// 修改对齐点移动文本右端点
alignPoint = dBText.AlignmentPoint;
dBText.AlignmentPoint = new Point3d(newX, alignPoint.Y, 0);// 4. MText的MiddleLeft对齐
MText mText = ...; // 获取MText对象
mText.Attachment = AttachmentPoint.MiddleLeft;
// 修改Location(相当于插入点)时,需考虑对齐点为左中点
mText.Location = new Point3d(newX, mText.Location.Y, 0);

四、常见问题与解决方案

1. 为什么修改 Position 后文本位置不变?
  • 原因:当对齐方式不是左对齐时,Position(插入点)可能不直接控制文本显示位置,而是由AlignmentPoint决定。
  • 解决方案:根据对齐方式修改对应的点:
    • 左对齐:修改Position
    • 其他对齐方式:修改AlignmentPoint
2. 如何确保文本移动到指定位置?
  • 步骤
    1. 先设置对齐方式(如左对齐、居中对齐)。
    2. 根据对齐方式确定要修改的点:
      • 左对齐:修改Position
      • 非左对齐:修改AlignmentPoint,并确保Position与对齐方式匹配。

五、总结

  • 左对齐:插入点 = 对齐点 = 文本实际位置,直接修改Position即可。
  • 非左对齐:插入点与文本位置解耦,需通过AlignmentPoint控制文本显示位置,同时Position可能作为辅助参考点。
  • 关键原则:修改文本位置前,先确认当前对齐方式,再选择修改PositionAlignmentPoint

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/pingmian/84852.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QT打包应用

本次工程使用qt mingGw 64-bit 下面详细介绍下windows平台qt应用程序打包流程 1、先编译项目的release版本生成exe文件 2、创建脚本运行windeployqt.exe完成打包 rundeploy.bat脚本 set PATHE:\Tools\qt\Qt5\5.14.2\mingw73_64\bin;%PATH% windeployqt.exe MyDesignWidget.ex…

[软件测试]:什么是自动化测试?selenium+webdriver-manager的安装,实现你的第一个脚本

目录 1. 什么是自动化测试? 回归测试 自动化分类 2. web自动化测试 3. selenium 1. 什么是自动化测试? 通过自动化测试工具,编写脚本,自动执行测试用例,主要用于回归测试,性能测试等重复测试任务 常…

使用OpenCV和Python进行图像掩膜与直方图分析

文章目录 引言1. 准备工作2. 加载并显示原始图像3. 创建掩膜3. 应用掩膜5. 计算并显示直方图6. 结果分析7. 总结 引言 在图像处理中,掩膜(Mask)是一个非常重要的概念,它允许我们选择性地处理图像的特定区域。今天,我将通过一个实际的例子来展…

Genio 1200 Evaluation MT8395平台安装ubuntu

官网教程: Getting Started with Genio 1200 Evaluation Kit — Ubuntu on Genio documentation Windows PC工具: Setup Tool Environment (Windows) — IoT Yocto documentation 镜像下载地址: Install Ubuntu on MediaTek Genio | Ubu…

如何画好架构图:架构思维的三大底层逻辑

👉目录 0 前言 1 宏观 2 中观 3 微观 4 补充 俗话说,一图胜千言。日常工作中,当我们要表达自己的设计思路的时候,会画各式各样的图。但因为各自知识储备的差异,思维的差异,不同类型的系统侧重的架构设计点也…

Spring MVC扩展消息转换器-->格式化时间信息

Spring MVC 的消息转换器的作用:在 HTTP 请求/响应与 Java 对象之间进行转换 可以自行扩展消息转换器 一、创建对象映射规则 package com.sky.json;import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.Objec…

Elasticsearch 的自动补全以及RestAPI的使用

Elasticsearch 提供了强大的自动补全 (Autocomplete) 功能,以下为一个基础的自动补全DSL语句 {"suggest": {"my_suggestion": { // 自定义建议器名称,可按需修改"text": "ap", // 用户输入的前缀(如搜索框…

1.4、SDH网状拓扑

链形网星形网树形网环形网网孔形网 1.链形拓扑 结构: 节点像链条一样首尾依次串联连接。信号从一个节点传到下一个节点,直至终点。 特点: 简单经济: 结构最简单,成本最低,适用于沿线覆盖(如铁…

如何在 ArcGIS 中使用 Microsoft Excel 文件_20250614

如何在 ArcGIS 中使用 Microsoft Excel 文件 软件版本:win11; ArcGIS10.8; Office2024 1. 确认 ArcGIS 10.8 对 .xlsx 文件的支持 ArcGIS 10.8 支持 .xlsx 文件(Excel 2007 及以上格式),但需要安装 Microsoft Access Database …

Python----OpenCV(图像处理——图像的多种属性、RGB与BGR色彩空间、HSB、HSV与HSL、ROI区域)

Python----计算机视觉处理(opencv:像素,RGB颜色,图像的存储,opencv安装,代码展示) Python----计算机视觉处理(Opencv:图片颜色识别:RGB颜色空间,…

java设计模式[1]之设计模式概览

文章目录 设计模式什么是设计模式为什么要学习设计模式设计模式的设计原则设计模式的分类 设计模式 什么是设计模式 设计模式是前人根据经验的总结,是软件开发中的最佳实践,帮助开发者在面对复杂设计问题时提供有效的解决方案。设计模式不仅仅只是一种…

aflplusplus:开源的模糊测试工具!全参数详细教程!Kali Linux教程!(四)

使用 afl-lto clang LLVM 编译器 1. -help 显示可用选项 afl-lto --help 其他选项同上,这里不再展开叙述。 afl-lto 1. -help 显示可用选项 afl-lto --help 其他选项同上,这里不再展开叙述。 afl-network-client 1. 帮助文档 afl-network-cl…

区间合并:牛奶

区间合并:牛奶 牛奶 www.acwing.com/problem/content/description/1345/ 本质就是区间合并问题从第一次挤奶才开始计算两个最长时间 import java.util.*;public class Main {static final int N 5010;static Pair[] pairs new Pair[N];static class Pair imple…

Hive实现值列表横向展示(非列转行)

一、场景说明: 当前有各个流程的节点名称和节点时间。数仓中的表存在的格式为纵向存储,分别为节点名称、接收时间 现数据分析过程中需要将每个流程的节点时间横向展示,如果没有该节点则置空 这种区别于行转列和列转行的操作。(具体可参考博主**

蓝桥杯20151 跳石头

问题描述 小明正在和朋友们玩跳石头的小游戏,一共有 n 块石头按 1 到 n 顺序排成一排,第 i 块石头上写有正整数权值 ci​ 。 如果某一时刻小明在第 j 块石头,那么他可以选择跳向第 jcj​ 块石头 (前提 jcj≤n )或者跳…

深度学习——基于卷积神经网络的MNIST手写数字识别详解

文章目录 引言1. 环境准备和数据加载1.1 下载MNIST数据集1.2 数据可视化 2. 数据预处理3. 设备配置4. 构建卷积神经网络模型5. 训练和测试函数5.1 训练函数5.2 测试函数 6. 模型训练和评估6.1 初始化损失函数和优化器6.2 训练过程 7. 关键点解析8. 完整代码9. 总结 引言 手写数…

Activiti初识

文章目录 1 工作流介绍1_工作流概念介绍2 工作流系统3 适用行业4 具体应用5 实现方式 2 Activiti介绍1_BPM2 BPM 软件3 BPMN 3 使用步骤1_部署 activiti2 流程定义3 流程定义部署4 启动一个流程实例5 用户查询待办任务(Task)6 用户办理任务7 流程结束 4 Activiti应用1_Activiti…

CyclicBarrier入门代码解析

文章目录 核心思想:组队出游,人到齐了才出发 🚌最简单易懂的代码示例代码解析运行效果分析CyclicBarrier vs CountDownLatch 的关键区别CyclicBarrier在业务系统里面通常有什么常用的应用场景核心应用模式1. 数据并行处理与ETL(最…

Maven 配置中绕过 HTTP 阻断机制的完整解决方案

Maven 配置中绕过 HTTP 阻断机制的完整解决方案 一、背景与问题分析 自 Maven 3.8.1 版本起&#xff0c;出于安全考虑&#xff0c;默认禁止了对 HTTP 仓库的访问。这一机制通过 <mirror> 配置中的 maven-default-http-blocker 实现&#xff0c;其作用是拦截所有使用 HT…

【大厂机试题解法笔记】恢复数字序列

题目 对于一个连续正整数组成的序列&#xff0c;可以将其拼接成一个字符串&#xff0c;再将字符串里的部分字符打乱顺序。如序列8 9 10 11 12,拼接成的字符串为89101112,打乱一部分字符后得到90811211,原来的正整数10就被拆成了0和1。 现给定一个按如上规则得到的打乱字符的字…