插入點(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
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/84852.shtml
英文地址,請注明出處:http://en.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。 現給定一個按如上規則得到的打亂字符的字…