linkcad.geom
ジオメトリモジュールは、座標計算と形状操作のための 2D プリミティブを提供します。
from linkcad.v1.geom import Point, Vector, Bounds, Transformation, Angle, Resolution座標はデータベース単位の整数です。Point と Vector は単なる値型で、データベースオブジェクトではないため自由に作成できます。
クラス
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) | 点を構築します |
x、y | 座標成分。代入可能 |
distance_to(other) | ユークリッド距離 |
equals(other, tolerance=1e-12) | 許容誤差内での等価判定 |
+、- | 点の演算 |
*、/ | 整数によるスケーリング |
==、!= | 厳密な比較 |
p[0] / p[1] | x と y へのインデックスアクセス |
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) | ベクトルを構築します |
x、y | ベクトル成分。代入可能 |
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) | スケール係数、Angle、Vector から構築します |
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.bounds と cell_object.bounds が返します。
b = cell.boundsif 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_pi | 0°、90°、180°、360° の定数 |
Resolution
マージや展開などの処理で、曲線形状(円、円弧、楕円、NURBS)をポリゴン頂点へテセレーションする方法を制御します。
from linkcad.v1.geom import Resolution
res = Resolution()res.minimum_facets = 32 # at least 32 segments per full circleres.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) | その直径の円が分割されるセグメント数 |