3D CAD ファイル形式用のオープンソース Python ライブラリ
パラメトリック 3D CAD モデルを作成するための無料の Python CAD ライブラリ。従来の STL に加えて、STEP、AMF、3MF などの高品質な CAD フォーマットを作成します。
オープン ソースの Python ライブラリ CadQuery は、パラメトリック 3D CAD モデルを構築するための使いやすい Python ライブラリです。このライブラリは非常に強力で、短いスクリプトを作成することで、Python アプリケーション内で高品質の CAD モデルを生成できます。スクリプトをカスタマイズして、1 つのスクリプトを使用してさまざまなオブジェクトを作成することもできます。 CadQuery スクリプトは非常に高速で、他の利用可能なライブラリよりも高速に STL、STEP、AMF、および 3MF を構築できます。
このライブラリは、フィレット、曲線押し出し、パラメトリック カーブ、ロフトなどの高度なモデリング機能を提供します。これは、エンド ユーザーが簡単にカスタマイズできるパラメトリック モデルを作成できるスクリプト ベースのライブラリです。オブジェクトを人間に説明する方法に可能な限り近いスクリプトを使用して 3D モデルを作成します。 CadQuery は、Apache Public License バージョン 2.0 の条項に基づいてライセンスされています。
この CadQuery ライブラリは意図的に GUI を使用しないように設計されているため、エンジニアリングおよび科学アプリケーション内でプログラムで 3D モデルを作成するために使用できます。 GUI を使用する必要がある場合は、Qt ベースの GUI CQ エディターまたは Jupyter 拡張機能の jupyter-cadquery を検討できます。このライブラリを他の Python ライブラリと組み合わせて使用することもできます。
CadQuery 入門
CadQuery 安定リリースをインストールする最も簡単な方法は、pip を使用することです。スムーズなインストールのために、次のコマンドを使用してください。
Python 3D ライブラリを介してポリゴンを操作する
多角形は、辺が直線の 2 次元形状です。ポリゴン モデリングは、ポリゴン メッシュを使用してサーフェスを表現または近似することにより、オブジェクトをモデリングするアプローチです。オープン ソースの Python ライブラリ CadQuery を使用すると、ソフトウェア開発者は数行の Python コードで各スタック ポイントのポリゴンを作成できます。これは、ファームウェアが小さな穴のサイズを修正しない 3d プリンターで非常に有益です。
Python 3D ライブラリを使用して面にワークプレーンを作成する
オープン ソースの Python ライブラリ CadQuery は、Python アプリケーション内の面にワークプレーンを作成するための完全なサポートを提供しています。このようにワークプレーンを使用することは、CadQuery の重要な機能です。これにより、ユーザーは変数内のさまざまな機能の位置を検索する必要がなくなり、モデルが冗長な寸法を削除できるようになります。ユーザーは、Workplane.faces () メソッドを呼び出して、結果のソリッドの面を選択できます。デフォルトでは、新しいワークプレーンの原点は、選択した面から平面を作成し、以前の原点をその平面に投影することによって計算されることに注意してください。
Python を使用して面上にワークプレーンを作成する
result = cq.Workplane("front").box(2, 3, 0.5) # make a basic prism
result = result.faces(">Z").workplane().hole(0.5) # find the top-most face and make a hole
Python で 3D LEGO ブロックを操作する
CadQuery ライブラリは、Python コマンドを使用してさまざまなサイズのレゴ ブロックを表現する 3D アニメーションの作成を完全にサポートしています。複数の立方体や円柱を組み合わせてレンガを再現することも可能。これらの 3D 形状を 1 つのオブジェクト (レンガ) に結合する複合オブジェクトを作成できます。次の例は、任意のサイズの通常の長方形の Lego(TM) ブロックを生成する方法を示しています。難しいのは、レンガの下側に関するロジックのためです。
Python で 3D LEGO ブロックを作成する
#####
# Inputs
######
lbumps = 6 # number of bumps long
wbumps = 2 # number of bumps wide
thin = True # True for thin, False for thick
#
# Lego Brick Constants-- these make a lego brick a lego :)
#
pitch = 8.0
clearance = 0.1
bumpDiam = 4.8
bumpHeight = 1.8
if thin:
height = 3.2
else:
height = 9.6
t = (pitch - (2 * clearance) - bumpDiam) / 2.0
postDiam = pitch - t # works out to 6.5
total_length = lbumps*pitch - 2.0*clearance
total_width = wbumps*pitch - 2.0*clearance
# make the base
s = cq.Workplane("XY").box(total_length, total_width, height)
# shell inwards not outwards
s = s.faces("Z").workplane(). \
rarray(pitch, pitch, lbumps, wbumps, True).circle(bumpDiam / 2.0) \
.extrude(bumpHeight)
# add posts on the bottom. posts are different diameter depending on geometry
# solid studs for 1 bump, tubes for multiple, none for 1x1
tmp = s.faces(" 1 and wbumps > 1:
tmp = tmp.rarray(pitch, pitch, lbumps - 1, wbumps - 1, center=True). \
circle(postDiam / 2.0).circle(bumpDiam / 2.0).extrude(height - t)
elif lbumps > 1:
tmp = tmp.rarray(pitch, pitch, lbumps - 1, 1, center=True). \
circle(t).extrude(height - t)
elif wbumps > 1:
tmp = tmp.rarray(pitch, pitch, 1, wbumps - 1, center=True). \
circle(t).extrude(height - t)
else:
tmp = s
# Render the solid
build_object(tmp)