Build123Dの覚書です。
前提は、エージェント機能によるモデリングです。
Build123Dについて
モデリングに必要な項目を書いたり、ポンチ絵を読ませたりして作業します。
stepファイルへの書き出しもそのように書いて指示します。
build123d は、Python を使用して 3D/2D モデルを作成するための、強力でモダンな 「Code-as-CAD(コードによる設計)」 ライブラリです。
従来の GUI ベースの CAD(Fusion 360 や SOLIDWORKS など)とは異なり、プログラミングによって形状を定義します。特に、先行するライブラリである CadQuery の精神的後継として開発されており、より直感的で Python らしい書き方ができるように設計されています。
1. build123d の主な特徴
- 直感的な構文(Builder パターン):
with BuildPart() as my_part:のようなコンテキストマネージャを使用し、順を追って形状を追加・削除していく流れが非常に分かりやすいです。- 強力な幾何エンジン:産業グレードの CAD で使われる Open CASCADE (OCCT) をベースにしており、複雑なフィレット、面取り、ブーリアン演算が可能です。
- 代数的な操作:
+(結合)や-(切り抜き)といった演算子を使って直感的に形状を操作できます。- 高い互換性:STEP, STL, DXF などの標準フォーマットでの書き出しはもちろん、FreeCAD や SOLIDWORKS などのツールとも連携可能です。
2. なぜ build123d を使うのか?(CadQuery との比較)
CadQuery も素晴らしいツールですが、build123d は以下の点で改善されています。
特徴 CadQuery build123d 設計思想 流れるようなインターフェース(メソッドチェーン) Python らしい構造化(コンテキストマネージャ) デバッグ 途中の状態を確認しにくい場合がある 各ステップの状態にアクセスしやすく、デバッグが容易 柔軟性 厳格なルールがある ユーザーが自由にオブジェクトを操作しやすい
インストール
エージェントにインストールしてもらうのが楽だと思います。環境から作成するように指示します。
前提条件
- Python 3.11〜3.13 インストール済み
- VS Code インストール済み
手順
1. VS Code 拡張機能のインストール
VS Code の拡張機能マーケットプレイスから以下をインストール:
bernhard-42.ocp-cad-viewer

2. プロジェクトフォルダの作成と仮想環境の構築
mkdir my_project
cd my_project
# 仮想環境を作成
python -m venv venv
# 仮想環境を有効化(Windows)
venv\Scripts\Activate.ps13. 必要パッケージをインストール
pip install build123d ocp-vscodeこれだけで OCP CAD Viewer に表示するために必要なものはすべて入ります。
4. OCP CAD Viewer バックエンドの起動
VS Code コマンドパレット(Ctrl+Shift+P)から:
OCP CAD Viewer: Open Viewer
を実行してビューアパネルを開く。
5. サンプルコードを実行
from build123d import *
from ocp_vscode import show
box = Box(10, 10, 10)
show(box)パッケージの依存関係
pip install build123d
└── cadquery-ocp(OCC カーネル)
pip install ocp-vscode
└── ocp-tessellate(メッシュ変換)
└── Flask / websockets(VS Code との通信)
ポイント: build123d と ocp-vscode は独立したパッケージですが、セットで使うのが標準的なワークフローです。ocp-vscode が VS Code の OCP CAD Viewer 拡張機能とポート 3939 経由で WebSocket 通信してモデルを表示します。
cadqueryと同じ要領で作業できると思います。
作成例
アセンブリ

from build123d import *
from ocp_vscode import show
# 寸法パラメータ
W = 80 # 棚の幅
D = 30 # 棚の奥行き
T = 3 # 棚板の厚み
PR = 2 # 支柱の半径
LH = 40 # 各段の高さ
LEVELS = 3 # 段数
cx = W / 2 - 5
cy = D / 2 - 5
total_h = LH * (LEVELS - 1) + T
# ---- サブアセンブリ: 支柱 x4 を個別部品として作成 ----
pillar_defs = [
( cx, cy, "柱-前右"),
(-cx, cy, "柱-前左"),
( cx, -cy, "柱-後右"),
(-cx, -cy, "柱-後左"),
]
pillar_parts = []
for px, py, label in pillar_defs:
with BuildPart() as p:
with Locations((px, py, 0)):
Cylinder(radius=PR, height=total_h,
align=(Align.CENTER, Align.CENTER, Align.MIN))
part = p.part
part.label = label
part.color = Color("sienna")
pillar_parts.append(part)
# 支柱4本をサブアセンブリ(Compound)にまとめる
# children= を明示することでOCPが階層として認識する
pillar_sub = Compound(pillar_parts, label="支柱サブアセンブリ", children=pillar_parts)
# ---- 棚板 ----
with BuildPart() as s_bottom:
with Locations((0, 0, 0)):
Box(W, D, T, align=(Align.CENTER, Align.CENTER, Align.MIN))
s_bottom.part.label = "底板"
s_bottom.part.color = Color("burlywood")
with BuildPart() as s_mid:
with Locations((0, 0, LH)):
Box(W, D, T, align=(Align.CENTER, Align.CENTER, Align.MIN))
s_mid.part.label = "中段"
s_mid.part.color = Color("burlywood")
with BuildPart() as s_top:
with Locations((0, 0, LH * 2)):
Box(W, D, T, align=(Align.CENTER, Align.CENTER, Align.MIN))
s_top.part.label = "天板"
s_top.part.color = Color("burlywood")
# ---- トップレベルアセンブリ ----
top_children = [pillar_sub, s_bottom.part, s_mid.part, s_top.part]
shelf = Compound(top_children, label="棚アセンブリ", children=top_children)
show(shelf)

コメント