ezdxfを使ってみよう #3~寸法線編~【直線・半径・直径・角度・弧長の描き方】

当ページのリンクには広告が含まれています。
  • URLをコピーしました!

※本ページはプロモーション(広告)が含まれています。当サイトは各種アフィリエイトプログラムに参加しており、リンク経由で報酬を得る場合があります。詳しくはプライバシーポリシーをご確認ください。

前回は図形の描画とレイヤー・色・日本語フォントまでを解説しました。今回は寸法線の描画だけに絞って、じっくり解説します。

寸法線は直線・半径・直径・角度・弧の長さで使うメソッドが全く異なり、それぞれに専用の書き方があります。1つずつ丁寧に見ていきましょう。

前回(第2回)の内容はこちらです。

目次

寸法線を描く前の注意点

寸法線は他の図形と違い、作成しただけでは表示されません。必ず作成後に.render()を呼ぶ必要があります。

寸法の文字や矢印の大きさ・位置・種類は、第1回で紹介したdimstylesで定義されています。独自の寸法スタイルを作ることもできます。

doc.dimstyles.add("my_radiusdim",
    dxfattribs={"dimtxt": 20, "dimtad": 1, "dimtmove": 2, "dimatfit": 1, "dimfxl": 10})

dimstylesの属性はとても種類が多く、実際の見た目もCAD環境によって左右されます。細かく作り込むよりも、第1回で紹介した12種類のプリセットから近いものを選ぶのが現実的です。

直線の寸法:Linear と Aligned

直線の距離を測る寸法線には、LinearAlignedの2つのメソッドがあります。

Linear Dimension

angleで寸法線の向きを指定します。水平・垂直・斜めの3パターンを並べてみます。

# 水平な寸法線
dim1 = msp.add_linear_dim(
    base=(1, 2),    # 寸法線の位置
    p1=(0, 0),       # 1点目
    p2=(3, 1),       # 2点目
    angle=0,          # 角度
    dimstyle="EZDXF",
).render()

# 垂直な寸法線
dim2 = msp.add_linear_dim(
    base=(4, 4),
    p1=(3, 0),
    p2=(3, 4),
    angle=90,
    dimstyle="EZDXF",
).render()

# 45度斜めの寸法線
dim3 = msp.add_linear_dim(
    base=(6, 6),
    p1=(2, 0),
    p2=(5, 4),
    angle=45,
    dimstyle="EZDXF",
).render()

標準的な水平・垂直の寸法線は、このメソッドだけで十分です。ただし次の3点に注意してください。

Linearの留意点

  1. baseは絶対座標です。水平・垂直以外の角度ではコントロールしづらく、量産する場合は座標計算が必要になります(例:angle=0で水平な寸法線を描くとき、base(1, 2)を指定してもy軸の2だけが採用されます)
  2. 計測対象の角度変更に追随しません。水平・垂直以外では、対象の角度を毎回正確にangleへ入力する必要があります
  3. 斜辺を測りたい場合、斜辺の角度を計算してangleに渡す必要があります。32.5°の直線に対して文字をどう配置するか、といった計算が発生するため、この用途には次のAlignedの方が向いています

参考:公式ドキュメント(Tutorial for Linear Dimensions)

Aligned Dimension

dim = msp.add_aligned_dim(
    p1=(0, 5),      # 1点目
    p2=(2, 3),       # 2点目
    distance=2,       # 寸法線の離れ
    dimstyle="EZDXF",
).render()

Linearとの違いは、p1とp2を結ぶ線に平行な寸法線を自動で描画する点です。この特徴により、次のような違いが生まれます。

  • 角度の変更に追随できるので、斜辺長の計測が容易(Linearは斜辺の角度を取得しないと正確に計測できず、変更にも追随できません)
  • 斜線に対してAlignedは斜辺長のみを計測します(Linearなら同一の2点でも、angleの指定次第で底辺・高さ・斜辺長のいずれも計測できます)
  • Linearのように足の長さが異なる寸法線は描画できません

文字列や固定値を表示する

実測値の代わりに、任意の文字列や固定値を表示することもできます。正確な寸法を出せない事情がある場合に使えます。

dim = msp.add_aligned_dim(
    p1=(0, 5), p2=(2, 3), distance=2, dimstyle="EZDXF",
    text="Hello ezdxf 123m",  # 表示したい文字列
).render()

直線の寸法まとめ

Linear DimensionAligned Dimension
位置指定baseに絶対座標を指定distanceで計測線からの離れを指定
角度変更への追随しない(angleを再入力する必要あり)する(2点を結ぶ線に自動で平行になる)
向いている場面水平・垂直な寸法斜辺長など、角度が定まらない寸法

形状が複雑になると、どちらのメソッドでも寸法線の高さを揃えづらくなります。大量生産する場合を除けば、最後にCADで手動調整するのも現実的な選択です。

なお、格子状に連続した寸法線を作る「Ordinate Dimension」というメソッドもありますが、実用性が低いため本記事では割愛します。気になる方は公式チュートリアルを参照してください。

半径・直径の寸法

円の半径・直径を測る寸法線です。書き方はほとんど同じで、メソッド名だけが変わります。

半径(Radius Dimension)

msp.add_circle((0, 0), radius=3)  # 比較用の円を描画

msp.add_radius_dim(
    center=(0, 0),
    radius=3,
    angle=45,   # 寸法線を表示する方向
    dimstyle="EZ_RADIUS",
).render()

円の描き方(add_circle)とほぼ同じ考え方で書けます。angleで寸法線をどの向きに表示するかを指定します。

参考:公式ドキュメント(Tutorial for Radius Dimensions)

直径(Diameter Dimension)

msp.add_circle((0, 0), radius=3)

msp.add_diameter_dim(
    center=(0, 0),
    radius=3,
    angle=45,
    dimstyle="EZ_RADIUS",
).render()

半径とメソッド名(add_diameter_dim)以外はまったく同じ書き方です。違うのは寸法値の描かれる位置で、angleで指定した起点から、その対極の終点にかけて寸法線が引かれます。

参考:公式ドキュメント(Tutorial for Diameter Dimensions)

角度の寸法

角度を測る寸法線には4つの指定方式があります。どれも「角度」を測る点は同じですが、必要な情報の渡し方が異なります。

方式①:CRA(中心点・半径・起点角・終点角)

msp.add_angular_dim_cra(
    center=(5, 5),     # 中心点
    radius=7,           # 中心点から延長線の開始位置までの距離
    start_angle=60,     # 開始角度
    end_angle=120,       # 終了角度
    distance=3,          # 延長線の開始位置から寸法線までの距離
    dimstyle="EZ_CURVED",
).render()

方式②:2線内角(Angle by 2 Lines)

base = (5.8833, -6.3408)   # 寸法線の位置
p1 = (2.0101, -7.5156)      # 1本目の線の開始点
p2 = (2.7865, -10.4133)     # 1本目の線の終了点
p3 = (6.7054, -7.5156)      # 2本目の線の開始点
p4 = (5.9289, -10.4133)     # 2本目の線の終了点

dim = msp.add_angular_dim_2l(
    base=base,
    line1=(p1, p2),   # 1本目の辺
    line2=(p3, p4),    # 2本目の辺
    dimstyle="EZ_CURVED",
)
dim.render()

方式③:3点内角(Angle by 3 Points)

msp.add_angular_dim_3p(
    base=(0, 7),     # 寸法線の位置
    center=(0, 0),    # 中心点
    p1=(-3, 5),        # 1本目の辺の終点(=開始角度)
    p2=(3, 5),          # 2本目の辺の終点(=終了角度)
).render()

この方式はAutoCADでは正常に表現されますが、別のCADやmatplotlibでは意図しない見た目になることが確認されています。

方式④:既存の弧から(Angle from ConstructionArc)

# 参照用の弧を描画
arc = msp.add_arc(
    center=(0, 0),
    radius=5,
    start_angle=60,
    end_angle=120,
)

# 弧を読み込んで角度寸法を描画
msp.add_angular_dim_arc(
    arc.construction_tool(),
    distance=2,
).render()

すでに描いた弧のconstruction_tool()を渡すだけで寸法線が作れます。中心点や角度を自分で計算し直す必要がなく、4方式の中でもっとも手間がかかりません。

角度寸法まとめ

4方式とも用途に応じて使い分けられますが、あえて違いを言うなら2線内角・3点内角はbase(寸法線位置の絶対座標)の指定が面倒という共通点があります。うまく作図されない現象も、多くはこのbaseの指定に関わっています。

可能な限りCRA既存の弧からを選び、寸法の離れはdistanceで指定する形にすると、作業しやすくトラブルも少ないです。

参考:公式ドキュメント(Tutorial for Angular Dimensions)

弧の長さの寸法

角度ではなく、弧そのものの長さを測る寸法線です。指定方式は角度寸法と似ていますが、3つに絞られます。

方式①:CRA(中心点・半径・起点角・終点角)

msp.add_arc_dim_cra(
    center=(5, 5),
    radius=5,
    start_angle=60,
    end_angle=120,
    distance=2,
    dimstyle="EZ_CURVED",
).render()

方式②:3点(中心点と弧の起終点を指定)

msp.add_arc_dim_3p(
    base=(0, 7),                              # 寸法線の位置
    center=(0, 0),                             # 中心点
    p1=(2.5, 4.330127018922193),                # 弧の開始点(=開始角度と半径を決める)
    p2=(-2.5, 4.330127018922194),               # 弧の終了点
).render()

方式③:既存の弧から

arc = msp.add_arc(
    center=(0, 0), radius=5, start_angle=60, end_angle=120,
    dxfattribs={'color': 2},
)

msp.add_arc_dim_arc(
    arc.construction_tool(),
    distance=2,
).render()

弧の長さ寸法まとめ

角度寸法ととても似た構造です。同様に寸法の離れをdistanceで指定できる「既存の弧から」がもっとも作業しやすい方式です。

参考:公式ドキュメント(Tutorial for Arc Dimensions)

まとめ

寸法線は図形によって書き方がまったく異なるので、最初は戸惑いやすいポイントです。それぞれの型を整理しておきます。

  • 寸法線は作成後に必ず.render()を呼ぶ
  • 直線は水平・垂直はLinear、斜辺はAlignedで使い分ける
  • 半径・直径はメソッド名以外ほぼ同じ書き方
  • 角度・弧長は「既存の弧から」が一番手間がかからない
  • 「2線内角」「3点内角」はbaseの絶対座標指定が面倒、可能ならCRA系を優先する
  • 何もないところに寸法線は生まれない。既存の図形の座標をそのまま使うのがコードを煩雑にしないコツ

次回・第4回では、ここまでの内容を実際に使ってU型トラフ(U字溝)を規格別に自動作図する実践編をお届けします。

シリーズ記事一覧

「ezdxfを使ってみよう」シリーズの全記事です。

よかったらシェアしてね!
  • URLをコピーしました!

コメントお待ちしてます!

コメントする

CAPTCHA


目次