6

シェイプで使用される領域と、CNC ルーターでそれを切断するツールで使用される領域を特定するために、シェイプリーを使用しようとしています。形状は ezdxf を使用して dxf 図面からインポートされます

ツール パスは、長方形 (直線に沿った鋸盤で切断された場合) または一連のセグメント (ミリング ビットでルーティングされた場合) のいずれかです。どちらの場合も、LineString.buffer()を使用してオフセットを自動的に作成し、ツールが使用する領域を見つけることができます。

私が shapely を使用しているのは、形状が互いに重なり合っているかどうかを調べるのに最適なツールだと思うからです (union()すべてのツールを 1 つの形状に結合しoverlaps()、干渉を見つけるために使用します)。この目的のためのより良いツールがあれば教えてください。

buffer()コーナーの円弧を表すセグメントを作成するのに適しています。

形状自体に円弧を表すセグメントを作成する方法はありますか?

たとえば、この形状の左側に円弧を作成するにはどうすればよいでしょうか? 独自の (遅い) Python 関数を作成する必要がありますか? または、最適化された形の良い方法はありますか?

緑は部品、黄色は鋸盤のカット、マゼンタはミリング ビットのカットです。

4

2 に答える 2

8

Python で円弧を作成する独自の方法を作成することは、必ずしも遅くはありません。Numpy はこれらの線に沿った操作に優れており、shapely は numpy とうまく相互運用できるよう意図的に意図されています。

例えば、

import numpy as np
import shapely.geometry as geom

# Define the arc (presumably ezdxf uses a similar convention)
centerx, centery = 3, 4
radius = 2
start_angle, end_angle = 30, 56 # In degrees
numsegments = 1000

# The coordinates of the arc
theta = np.radians(np.linspace(start_angle, end_angle, numsegments))
x = centerx + radius * np.cos(theta)
y = centery + radius * np.sin(theta)

arc = geom.LineString(np.column_stack([x, y]))

開始角度と終了角度の間の 1000 ポイントで円弧を概算すると、私のマシンでは約 3 ミリ秒かかります (これには、形状の良い LineString への変換が含まれます)。

于 2015-06-10T16:58:16.493 に答える
1

シェイプリーを使用したことはありませんが、ベクター グラフィックスの原則はいくつか知っています。オーバーレイは通常、「差分」で抽出されます。ユニオンからポリゴンの差を取ると、残りがアークになります。https://gis.stackexchange.com/questions/11987/polygon-overlay-with-shapely

于 2015-06-10T17:02:26.327 に答える