1 行文字を左右および上下に位置合わせすることができます。既定では、左寄せに設定されています。左右および上下の位置合わせオプションを設定するには、HorizontalMode および VerticalMode プロパティを使用します。
通常、文字オブジェクトを閉じると、文字オブジェクトの位置と位置合わせ点は、その位置合わせと文字スタイルに従って調整されます。しかし、メモリ内の文字オブジェクトの位置合わせは自動的に更新されません。現在のプロパティ値に基づいて文字オブジェクトの位置合わせを更新するには、AdjustAlignment メソッドを呼び出します。
次の例では、1 行文字(DBText)オブジェクトと点(DBPoint)オブジェクトを作成します。点オブジェクトを文字の位置合わせ点に設定し、見やすくなるよう赤の十字形に変更します。文字の位置合わせを変更し、マクロの実行が中止されるようにメッセージ ボックスを表示します。このようにすることで、文字の位置合わせの変更による影響を確認することができます。
Imports Autodesk.AutoCAD.Runtime Imports Autodesk.AutoCAD.ApplicationServices Imports Autodesk.AutoCAD.DatabaseServices Imports Autodesk.AutoCAD.Geometry <CommandMethod("TextAlignment")> _ Public Sub TextAlignment() '' Get the current document and database Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument Dim acCurDb As Database = acDoc.Database '' Start a transaction Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction() '' Open the Block table for read Dim acBlkTbl As BlockTable acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, _ OpenMode.ForRead) '' Open the Block table record Model space for write Dim acBlkTblRec As BlockTableRecord acBlkTblRec = acTrans.GetObject(acBlkTbl(BlockTableRecord.ModelSpace), _ OpenMode.ForWrite) Dim textString(0 To 2) As String textString(0) = "Left" textString(1) = "Center" textString(2) = "Right" Dim textAlign(0 To 2) As Integer textAlign(0) = TextHorizontalMode.TextLeft textAlign(1) = TextHorizontalMode.TextCenter textAlign(2) = TextHorizontalMode.TextRight Dim acPtIns As Point3d = New Point3d(3, 3, 0) Dim acPtAlign As Point3d = New Point3d(3, 3, 0) Dim nCnt As Integer = 0 For Each strVal As String In textString '' Create a single-line text object Using acText As DBText = New DBText() acText.Position = acPtIns acText.Height = 0.5 acText.TextString = strVal '' Set the alignment for the text acText.HorizontalMode = textAlign(nCnt) If acText.HorizontalMode <> TextHorizontalMode.TextLeft Then acText.AlignmentPoint = acPtAlign End If acBlkTblRec.AppendEntity(acText) acTrans.AddNewlyCreatedDBObject(acText, True) End Using '' Create a point over the alignment point of the text Using acPoint As DBPoint = New DBPoint(acPtAlign) acPoint.ColorIndex = 1 acBlkTblRec.AppendEntity(acPoint) acTrans.AddNewlyCreatedDBObject(acPoint, True) '' Adjust the insertion and alignment points acPtIns = New Point3d(acPtIns.X, acPtIns.Y + 3, 0) acPtAlign = acPtIns End Using nCnt = nCnt + 1 Next '' Set the point style to crosshair Application.SetSystemVariable("PDMODE", 2) '' Save the changes and dispose of the transaction acTrans.Commit() End Using End Sub
using Autodesk.AutoCAD.Runtime; using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.Geometry; [CommandMethod("TextAlignment")] public static void TextAlignment() { // Get the current document and database Document acDoc = Application.DocumentManager.MdiActiveDocument; Database acCurDb = acDoc.Database; // Start a transaction using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction()) { // Open the Block table for read BlockTable acBlkTbl; acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, OpenMode.ForRead) as BlockTable; // Open the Block table record Model space for write BlockTableRecord acBlkTblRec; acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord; string[] textString = new string[3]; textString[0] = "Left"; textString[1] = "Center"; textString[2] = "Right"; int[] textAlign = new int[3]; textAlign[0] = (int)TextHorizontalMode.TextLeft; textAlign[1] = (int)TextHorizontalMode.TextCenter; textAlign[2] = (int)TextHorizontalMode.TextRight; Point3d acPtIns = new Point3d(3, 3, 0); Point3d acPtAlign = new Point3d(3, 3, 0); int nCnt = 0; foreach (string strVal in textString) { // Create a single-line text object using (DBText acText = new DBText()) { acText.Position = acPtIns; acText.Height = 0.5; acText.TextString = strVal; // Set the alignment for the text acText.HorizontalMode = (TextHorizontalMode)textAlign[nCnt]; if (acText.HorizontalMode != TextHorizontalMode.TextLeft) { acText.AlignmentPoint = acPtAlign; } acBlkTblRec.AppendEntity(acText); acTrans.AddNewlyCreatedDBObject(acText, true); } // Create a point over the alignment point of the text using (DBPoint acPoint = new DBPoint(acPtAlign)) { acPoint.ColorIndex = 1; acBlkTblRec.AppendEntity(acPoint); acTrans.AddNewlyCreatedDBObject(acPoint, true); // Adjust the insertion and alignment points acPtIns = new Point3d(acPtIns.X, acPtIns.Y + 3, 0); acPtAlign = acPtIns; } nCnt = nCnt + 1; } // Set the point style to crosshair Application.SetSystemVariable("PDMODE", 2); // Save the changes and dispose of the transaction acTrans.Commit(); } }
Sub TextAlignment() ' Set the point style to crosshair ThisDrawing.SetVariable "PDMODE", 2 Dim textObj As AcadText Dim pointObj As AcadPoint ' Define the text strings and insertion point for the text objects Dim textString(0 To 2) As String textString(0) = "Left" textString(1) = "Center" textString(2) = "Right" Dim textAlign(0 To 2) As Integer textAlign(0) = acAlignmentLeft textAlign(1) = acAlignmentCenter textAlign(2) = acAlignmentRight Dim insertionPoint(0 To 2) As Double insertionPoint(0) = 3: insertionPoint(1) = 0: insertionPoint(2) = 0 Dim alignmentPoint(0 To 2) As Double alignmentPoint(0) = 3: alignmentPoint(1) = 0: alignmentPoint(2) = 0 Dim nCnt As Integer For Each strVal In textString ' Create the Text object in model space Set textObj = ThisDrawing.ModelSpace. _ AddText(strVal, insertionPoint, 0.5) ' Set the alignment for the text textObj.Alignment = textAlign(nCnt) On Error Resume Next textObj.TextAlignmentPoint = alignmentPoint ' Create a point over the alignment point of the text Set pointObj = ThisDrawing.ModelSpace.AddPoint(alignmentPoint) pointObj.color = acRed ' Adjust the insertion and alignment points insertionPoint(1) = insertionPoint(1) + 3 alignmentPoint(1) = insertionPoint(1) nCnt = nCnt + 1 Next End Sub