コンテンツにスキップ

linkcad.geom

ジオメトリモジュールは、座標計算と形状操作のための 2D プリミティブを提供します。

from linkcad.v1.geom import Point, Vector, Bounds, Transformation, Angle, Resolution

座標はデータベース単位の整数です。PointVector は単なる値型で、データベースオブジェクトではないため自由に作成できます。

クラス

Point

2D 座標です。

from linkcad.v1.geom import Point
p = Point(1000, 2000)
print(p.x, p.y)
print(p[0], p[1]) # indexable, so a Point unpacks like a tuple
プロパティ / メソッド説明
Point() / Point(x, y)点を構築します
xy座標成分。代入可能
distance_to(other)ユークリッド距離
equals(other, tolerance=1e-12)許容誤差内での等価判定
+-点の演算
*/整数によるスケーリング
==!=厳密な比較
p[0] / p[1]xy へのインデックスアクセス

LinkCAD が頂点を受け取る場所ではどこでも、単純な (x, y) タプルも使えます。

cell.add_polygon(layer, [(0, 0), (1000, 0), (1000, 1000)])
cell.add_polygon(layer, [Point(0, 0), Point(1000, 0), Point(1000, 1000)])

Vector

2D の方向またはオフセットです。

from linkcad.v1.geom import Vector
v = Vector(100, 200)
print(v.length)
プロパティ / メソッド説明
Vector() / Vector(x, y)ベクトルを構築します
xyベクトル成分。代入可能
lengthベクトルの大きさ
normalize()その場で単位長にします
+-ベクトル演算
*/スカラー倍と除算

Transformation

2D 変換です: 一様スケーリング、回転、並進。構築してからその場で合成します——変更系メソッドは変換自身を返すため、チェーンできます。

from linkcad.v1.geom import Transformation
xform = Transformation()
xform.rotate(45.0).translate(1000, 2000)
print(xform.rotation.degrees, xform.translation.x, xform.translation.y)

順序が重要です。rotate() は既に設定済みのオフセットも一緒に回転させるため、オフセットを最終位置にしたい場合は先に回転し、後で並進してください。

メソッド / プロパティ説明
Transformation()恒等変換
Transformation(scale, rotation, offset)スケール係数、AngleVector から構築します
translate(dx, dy)並進を加えます。座標はデータベースの整数に丸められます
rotate(degrees)度単位の回転を加えます
scale(factor)一様スケーリングを加えます
scalingスケール係数。代入可能
rotation回転角(Angle、読み取り専用)
translation並進ベクトル(Vector、読み取り専用)
inverse逆変換
is_identity変換が何もしない場合 True
transform_point(point)Point に変換を適用し、Point を返します

transform_point() はデータベースの Point を受け取って Point を返すため、その結果をそのまま cell.add_polygon() に渡せます。

from linkcad.v1.geom import Point, Transformation
xform = Transformation()
xform.rotate(90.0).translate(1000, 2000)
moved = [xform.transform_point(Point(x, y)) for x, y in [(0, 0), (100, 0), (100, 100)]]
cell.add_polygon(layer, moved)

Bounds

軸平行のバウンディングボックスです。cell.boundscell_object.bounds が返します。

b = cell.bounds
if not b.empty:
print(b.min_x, b.min_y, b.width, b.height)
プロパティ / メソッド説明
Bounds() / Bounds(min_pt, max_pt)空のボックス、または 2 つの Point から構築します
min_xy / max_xy角の点
min_x / max_x / min_y / max_y各辺
width / height寸法
center中心点
emptyボックスが何も含まなければ True
contains(point, tolerance=0)点が範囲内かどうかの判定
overlaps(other)重なり判定

Bounds の測定量はすべて名詞であり、したがってプロパティです。ここは API の中で唯一バインディングが C++ の綴りを漏らしていた場所——minXY()maxX()——でしたが、もうそうではありません。

Angle

角度の値です。LinkCAD が角度量を受け取る、または返すあらゆる場所で使われます。

from linkcad.v1.geom import Angle
a = Angle.from_degrees(45.0)
b = Angle.from_radians(0.785398)
print(a.degrees, a.radians)
ファクトリー / プロパティ / メソッド説明
Angle()角度 0
Angle.from_degrees(degrees)度から作成します
Angle.from_radians(radians)ラジアンから作成します
angle.degrees度での値
angle.radiansラジアンでの値
angle.equals(other, tolerance_radians=1e-12)許容誤差内での比較
Angle.zero / Angle.pi_half / Angle.pi / Angle.two_pi0°、90°、180°、360° の定数

Resolution

マージや展開などの処理で、曲線形状(円、円弧、楕円、NURBS)をポリゴン頂点へテセレーションする方法を制御します。

from linkcad.v1.geom import Resolution
res = Resolution()
res.minimum_facets = 32 # at least 32 segments per full circle
res.maximum_error = 1 # max deviation in database units
print(res.segment_count(10_000))
プロパティ / メソッド説明
Resolution() / Resolution(min_facets=0, error_max=...)構築します
minimum_facets全円あたりのポリゴンセグメントの最小数。代入可能
maximum_error真の曲線からの最大許容偏差(データベース単位)。代入可能
segment_count(diameter)その直径の円が分割されるセグメント数