DWG drawing にテキストを追加することは、より大規模なエンジニアリング作業の一部であることが多いです。特定の場合には、機器にラベルを付けたり、部屋を特定したり、改訂参照を追加したり、事前に定義された座標にメモを配置したりする必要があるかもしれません。これらの詳細がデータベースやスプレッドシートから取得される場合、CAD エディタで各ラベルを手動で追加するのは不要な作業です。

Aspose.CAD for Python via .NET は、DWG 図面を読み込み、モデル空間にテキストエンティティを追加し、注釈付きコンテンツをエクスポートできます。このチュートリアルでは、Python を使用して DWG 図面にテキストを追加し、その位置と外観を設定し、結果を DXF と PDF として保存します。

Aspose.CAD for Python via .NET のインストール

動作するPython環境と、Aspose.CAD package、および注釈を付けるDWGファイルが必要です。この例を実行するためにAutoCADは必要ありません。

pipでパッケージをインストールします:

pip install aspose-cad

追加のセットアップの詳細については、Aspose.CAD インストール ガイドをご覧ください。

Python スクリプトと同じフォルダーに sample.dwg という名前の DWG ファイルを配置してください。例ではモデル空間座標 (100, 100, 0) とテキスト高さ 5.0 描画単位を使用しています。描画に合わせてこれらの値を調整する必要がある場合があります。

PythonでDWG図面にテキストを追加する

CAD 図面はテキストをピクセルではなくエンティティとして保存します。CadText クラスは単一行の TEXT エンティティを表し、その内容、位置、高さ、スタイル、レイヤーのプロパティを持ちます。このようなエンティティを追加すると、エクスポートされた画像に単に文字を描くのではなく、CAD モデルの注釈部分が保持されます。

ワークフローは、DWG ファイルを読み込み、そのモデル空間ブロックを特定し、CadText エンティティを作成してそのブロックに追加し、描画境界を更新し、結果をエクスポートすることです。

DWG図面にテキストを挿入する完全なPythonコード

以下の例は Aspose.CAD for Python via .NET でテストされています。ラベル Hello from Aspose.CAD Python を図面に追加し、2つの出力ファイルを生成します。

import aspose.cad as cad
from aspose.pycore import cast

from aspose.cad.fileformats.cad import CadImage
from aspose.cad.fileformats.cad.cadobjects import (
    CadText,
    Cad3DPoint,
)

from aspose.cad.imageoptions import (
    DxfOptions,
    PdfOptions,
    CadRasterizationOptions,
)

# Input and output files
input_file = "sample.dwg"
output_dxf = "drawing_with_text.dxf"
output_pdf = "drawing_with_text.pdf"

# Text properties
text_value = "Hello from Aspose.CAD Python"
text_x = 100.0
text_y = 100.0
text_height = 5.0

# Load the DWG drawing
with cad.Image.load(str(input_file)) as image:

# IMPORTANT: Cast Image to CadImage
    cad_image = cast(CadImage, image)

# Find model space
    model_space = None

for block in cad_image.block_entities.values_typed:
        block_name = block.name or ""
        original_name = block.original_block_name or ""

if (
            block_name.lower() == "*model_space"
            or original_name.lower() == "*model_space"
        ):
            model_space = block
            break

if model_space is None:
        raise RuntimeError(
            "Model space block was not found."
        )

# Create a new TEXT entity
    text_entity = CadText()

text_entity.default_value = text_value
    text_entity.style_type = "Standard"
    text_entity.layer_name = "0"
    text_entity.color_id = 256

text_entity.text_height = text_height
    text_entity.scale_x = 1.0

# Set text position
    text_entity.first_alignment = Cad3DPoint(
        text_x,
        text_y,
        0.0
    )

# Add the text to model space
    model_space.add_entity(text_entity)

# Update drawing bounds
    cad_image.update_size(True)

# Save as editable DXF
    dxf_options = DxfOptions()
    cad_image.save(str(output_dxf), dxf_options)

print(f"DXF created: {output_dxf}")

# Save as PDF for viewing
    raster_options = CadRasterizationOptions()
    raster_options.page_width = 1600.0
    raster_options.page_height = 1200.0

pdf_options = PdfOptions()
    pdf_options.vector_rasterization_options = raster_options

cad_image.save(str(output_pdf), pdf_options)

print(f"PDF created: {output_pdf}")

print("Text added successfully.")

期待される出力

スクリプトが正常に完了すると、sample.dwg の隣に次のファイルが作成されます:

  • drawing_with_text.dxf — 新しいテキストエンティティを含むエクスポートされた CAD 図面(DXF ライターがサポートしている場合)。
  • drawing_with_text.pdf — 注釈付き図面のレンダリングされたコピーで、レビューや共有に使用できます。

コンソール出力は次のとおりです:

DXF created: drawing_with_text.dxf
PDF created: drawing_with_text.pdf
Text added successfully.

両方の出力ファイルを開いて、ラベルが表示され、正しく配置されていることを確認してください。元の sample.dwg は変更されていません。

Python コードの仕組み

単純なテスト描画から本番用ファイルに移行する際、例のいくつかの詳細が重要です。

1. DWG 図面の読み込みとキャスト

The cad.Image.load() メソッドはソースファイルを開きます。例では cast(CadImage, image) を使用して、ロードされた図面に CAD 固有のプロパティ(block_entities を含む)を介してアクセスできるようにします。

with ステートメントは、エンティティが変更およびエクスポートされている間、画像を開いたままにし、処理が完了したときにリソースを解放します。

2. モデル空間ブロックを見つける

DWG図面には複数のブロックが含まれる場合があります。新しいテキストは、意図した描画領域を表すブロックに追加する必要があります。

この例では cad_image.block_entities.values_typed を反復処理し、block.name と block.original_block_name の両方で *Model_Space を大文字小文字を区別せずにチェックします。これにより、モデル空間が常に直接の辞書キーでアクセスできると仮定することを回避します。

モデル空間が見つからない場合、スクリプトは RuntimeError を発生させます。これは、新しい注釈なしでファイルを黙ってエクスポートするよりも好ましいです。

3. テキストエンティティの作成と配置

CadText() は新しい単一行アノテーションを作成します。その default_value プロパティは表示テキストを格納します。位置は Cad3DPoint(text_x, text_y, 0.0) から取得され、first_alignment に割り当てられます。

この例では、text_height = 5.0 は描画単位での高さを定義し、scale_x = 1.0 は水平スケール係数を設定します。エンティティは Standard テキストスタイルとレイヤー 0 を使用します。そのカラーID 256 は ByLayer を意味し、レイヤーが色を制御します。

これらのプロパティが設定された後、model_space.add_entity(text_entity) はアノテーションをモデル空間に挿入します。

4. 描画境界の再計算

テキストを追加すると、描画コンテンツが占める領域が変わることがあります。以下の呼び出しは、エクスポート前に描画境界を更新します:

cad_image.update_size(True)

このテスト例で使用されている Python API では、ブール引数が必須です。update_size() を引数なしで呼び出すと、引数が不足しているエラーが発生する可能性があります。

5. 注釈付き図面のエクスポート

DxfOptions は描画を DXF として保存するために使用されます。CadRasterizationOptions はレンダリングのページ寸法を制御し、PdfOptions は PDF ファイルを生成します。

PDF の寸法が整数ではなく 1600.0 と 1200.0 として記述されていることに注意してください。テストされた Python バインディングは、これらのセッターに対してこの形式の数値を期待しています。

ページ寸法はエクスポートレイアウトを制御しますが、テキストの高さや図面の実際の寸法では ありません。

テキストの位置、高さ、色、スタイルを変更する

add_entity() を呼び出す前に、プロパティを変更して CadText エンティティをカスタマイズできます。

Property制御対象例
default_value図面に表示されるテキスト"VALVE V-101"
first_alignmentCAD座標系でのテキスト位置Cad3DPoint(150.0, 80.0, 0.0)
text_height図面単位でのテキスト高さ3.0
scale_x水平方向のテキストスケール係数1.0
style_typeテキストスタイルの名前"Standard"
layer_nameテキストに関連付けられたレイヤー"0"
color_idAutoCAD カラーインデックス値1 for red; 256 for ByLayer

たとえば、メインスクリプトのテキストプロパティを変更してバルブにラベルを付けます:

text_entity.default_value = "VALVE V-101"
text_entity.first_alignment = Cad3DPoint(
    150.0, 80.0, 0.0
)
text_entity.text_height = 3.0
text_entity.scale_x = 1.0
text_entity.style_type = "Standard"
text_entity.layer_name = "0"
text_entity.color_id = 1

メインの例で model_space.add_entity(text_entity) を実行する 前に このプロパティ設定スニペットを実行してください。

実際の図面に合った座標を使用してください。CAD 図面はプロジェクト固有の単位や座標系を使用することが多く、(150, 80) はある図面では内部にあり、別の図面ではジオメトリから遠く離れている可能性があります。同様に、3.0 の高さは 3 ポイントのフォントサイズではなく、図面単位で測定されています。

ソース図面に存在するテキストスタイルとレイヤーも使用する必要があります。例では一般的なデフォルトを使用していますが、カスタム標準を持つ図面では異なる名前が必要になる場合があります。

DWG 図面に複数のテキスト ラベルを追加する

単一のラベルが機能すれば、同じアプローチを複数のアノテーションに拡張できます。これは、機器識別子、部屋名、または検査参照がすでに構造化データとして保存されている場合に便利です。

例えば、ラベルとその挿入座標を定義します:

labels = [
    ("VALVE V-101", 40.0, 80.0),
    ("VALVE V-102", 70.0, 80.0),
    ("PUMP P-201", 100.0, 80.0),
    ("CONTROL PANEL", 130.0, 80.0),
]

for label, x, y in labels:
    text = CadText()
    text.default_value = label
    text.first_alignment = Cad3DPoint(x, y, 0.0)
    text.text_height = 2.5
    text.scale_x = 1.0
    text.style_type = "Standard"
    text.layer_name = "0"
    text.color_id = 256

model_space.add_entity(text)

cad_image.update_size(True)

このスニペットを with ブロックの中で、モデル空間が見つかった後、DXF/PDF エクスポートの前に 配置してください。作業中のシングルテキスト例と同じエンティティ作成パターンを使用しています;マルチラベルのバリエーションはここでは別途テストされていません。

実際のアプリケーションでは、labels は CSV ファイル、機器レジスター、またはデータベースから取得できる可能性があります。アプリケーションの主な責任は、有効な座標と適切なテキストプロパティを提供することです。ライブラリは指定した位置にエンティティを挿入しますが、ラベルの重なりを自動的に防止することはありません。

テキスト付きの図面をDXFまたはPDFとして保存

選択する形式は、注釈の後に何が起こるかによって決まります。

CAD編集用にDXFとして保存

メインの例では DxfOptions を使用して図面をエクスポートします:

dxf_options = DxfOptions()
cad_image.save("drawing_with_text.dxf", dxf_options)

DXF は、次のステップが CAD アプリケーションや描画エンティティを消費する別のシステムを含む場合に便利です。ただし、Aspose.CAD のサポート形式表では DXF の書き込みが 部分的にサポート されていると記載されています。エンジニアリング ワークフローで使用する前に、エクスポートされたファイルの重要な注釈、レイヤー、およびジオメトリを検証してください。

閲覧と共有のためにPDFとして保存

設計レビュー、レポート、または文書配布のために、この例は PDF もエクスポートします:

raster_options = CadRasterizationOptions()
raster_options.page_width = 1600.0
raster_options.page_height = 1200.0

pdf_options = PdfOptions()
pdf_options.vector_rasterization_options = raster_options

cad_image.save("drawing_with_text.pdf", pdf_options)

PDF は、結果として得られる図面を編集するのではなく、表示することを目的としています。更新された DWG ファイルが必要な場合は、適切な中間フォーマットから生成するために、別の互換性のある CAD ワークフローを使用してください。Python API では直接 DWG の保存はサポートされていません。

DWG ファイルへのテキスト挿入のトラブルシューティング

挿入されたテキストが表示されません。 まずテキスト座標を確認してください。ラベルが可視ジオメトリの外に配置されている可能性があります。また、レイヤーの可視性、テキストの高さ、選択されたテキストスタイルも確認してください。DXF と PDF の出力を比較して、問題がエンティティの挿入時に発生しているのか、レンダリング時に発生しているのかを特定します。

スクリプトがモデル空間を見つけられません。 例では、ブロック名が *Model_Space と一致しない場合、Model space block was not found. が発生します。ソースファイル内のブロックを確認し、期待される構造でモデル空間データが含まれていることを確認してください。欠落したブロック参照で続行しないでください。

update_size() が引数が不足していると報告します。 動作例に示されているように cad_image.update_size(True) を使用してください。このシグネチャはここで使用されている Python バインディングにとって重要です。

PDF ページの寸法が型エラーを引き起こします。 page_width と page_height にはそれぞれ 1600.0 や 1200.0 のような浮動小数点値を渡してください。

テキストが CAD エディタと異なって見えます。 描画のテキストスタイルと、対応するフォントが処理環境で利用可能か確認してください。期待したフォントが欠落または置き換えられている場合、レンダリングが異なる可能性があります。

DXF に予期しない差異が含まれています。 DXF の書き込みは部分的にしかサポートされていません。代表的な図面でテストし、出力を自動化プロセスに組み込む前に CAD ビューアで生成されたエンティティを確認してください。

よくある質問

AutoCADなしでPythonを使用してDWGファイルにテキストを追加できますか?

はい。Aspose.CAD for Python via .NET は、AutoCAD を使用せずに DWG 図面を読み込み、CadText エンティティを追加できます。この例では、変更された図面を DXF と PDF にエクスポートします。

DWG図面でテキストの位置を指定するにはどうすればよいですか?

first_alignment を Cad3DPoint(x, y, z) を使用して CadText オブジェクトに設定します。元の図面で適切な位置に対応する値を選択してください。

特定のレイヤーにテキストを追加できますか?

はい。layer_name を目的のレイヤー名に設定します。メインの例では、アノテーションはレイヤー 0 とカラー ID 256(ByLayer)を使用しています。

複数のテキストラベルを自動的に追加できますか?

はい。各ラベルに対して新しい CadText エンティティを作成し、内容と座標を設定し、モデル空間に追加します。このパターンはレコードのリストや他の構造化データソースによって駆動できます。

修正した図面をDWGに戻して保存できますか?

Direct DWG の保存は、Aspose.CAD for Python supported formats に一覧されていません。テストされたワークフローでは、変更された図面を DXF と PDF にエクスポートし、元の DWG は変更されません。

無料の一時ライセンスを取得

無料の30日間の一時ライセンスをリクエストして、評価制限なしで Aspose.CAD for Python via .NET を評価できます。Python アプリケーションでライセンスを適用するには、Aspose.CAD ライセンス ガイドに従ってください。

無料学習リソース

PythonでCAD図面を処理する方法に関する詳細情報は、以下のリソースをご覧ください:

結論

Python を使用して DWG 図面にテキストを追加することは、アプリケーション データから機器ラベル、部屋の識別子、その他の注釈を生成する実用的な方法です。重要な手順は、モデル空間を特定し、適切な座標とスタイルを持つ CadText エンティティを作成し、エクスポート前に図面の境界を更新することです。

次のステップは、例のラベルを自分の図面データの座標と識別子に置き換えることです。DXF 出力を CAD エディタで確認し、特に異なる単位、レイヤー、フォントを持つ図面間でワークフローを展開する際には、PDF をレビュー用コピーとして使用してください。