
2026/11/02 17:29
ヒ素:リスマシンから派生し描図テーブルから進化した CAD ソフトウェア(2015)
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
サマリー:
Antimony は、MIT の Bits and Atoms センターで開発された強力なオープンソースのコンピュータ支援設計(CAD)ツールであり、パーソナル規模の CAD/CAM ワークフローに関する研究から発展したものです。2014 年秋に「How to Make Almost Anything」という書籍で紹介され、世界経済フォーラムにてデモが行われましたが、現在はベータ版の安定性を維持しています。Antimony は 3 つの主要な軸を基盤としており、カスタマイズ可能な Python スクリプトを利用したグラフエンジン(変更が自動的に伝播する)、boolean 演算に最適化されたジオメトリエンジン、attract、repel、bend などの組み込みコンポーネントからなる標準ライブラリを備えています。このアーキテクチャにより、ユーザーは複雑な多部品アセンブリを作成でき、GitHub に公開されているソースコードを通じてカスタム形状を定義できます。本ツールは 2.5D プロセス用にはハイトマップの出力、3D マニュファクチャリング用には STL ファイルの出力をサポートしています。高価なライセンスを必要とするプロフェッショナルソフトウェアとは異なり、Antimony はメイカースペースや趣味を持つ者にとって、デジタル的な創造性を物理的な生産と接続するためのスケーラブルで手頃な価格のソリューションを提供します。
本文
アンチモニー:Lisp マシンを起点とした CAD ツール
アンチモニー(Antimony)は、描画台を起点とするのではなく、Lisp マシンを原点として CAD ソフトウェアが進化してきたという並行宇宙に属するコンピュータ支援設計(CAD)ツールです。
基礎構造
アンチモニーは、概ね相互独立の 3 つの軸の上に構築されています:
- 情報フロー追跡: 有向非巡回グラフ(DAG)を介したデータの流れを追跡するためのフレームワーク
- ジオメトリエンジン: CSG(コンストラクティブソリッドジェオメトリ)を実行するモジュール
- 標準ライブラリ: シェイプと変換操作のための実装
グラフエンジン
アンチモニーにおけるソリッドモデリングは、グラフ上のノードを接続することで実現されます。
- ノード定義: 各ノードはカスタマイズ可能なスクリプトで記述されます。
- 言語仕様: Python 3.x を採用しており、いくつかの特別なマージンキーワードを追加しています。
コード例:円形ノードの定義
以下のコードは、入力ポートから変数を受け取り、
fab.shapes.circle関数を呼び出して出力ポートにシェイプを生成する例です。
import fab.shapes # 入力ポートを定義する # (変数をローカル名空間に注入します) input('x', float) input('y', float) input('r', float) # 標準ライブラリの 'circle' 関数を呼び出す # 入力ポートから传入された変数を使用する c = fab.shapes.circle(x, y, r) # 円形シェイプを生成する出力ポートを作成する output('shape', c)
- 通常動作: ノードは基本シェイプまたは変換を表し、リンクは追跡されます。変化は自動的に下流へ伝播します。
- 拡張性: グラフエンジンは複雑な多部品組立にも拡張可能です。
ジオメトリエンジン
アンチモニーのジオメトリエンジンは、ソリッドモデリングに関数型表現を採用しています。
- ブール演算: 合体/共通部分/差集合を用いたモデリングに特に適しています。
- レンダリング: アプリケーション内では、ジオメトリエンジンがシェイプを陰影付きビットマップとしてレンダリングし、それを 3D ビューポート上に重ね表示します。
ファイル出力
アンチモニーは以下の形式を出力できます:
- ハイトマップ: 2.5D プロセス向け
- .stl ファイル: 3D 製造向け
- 特徴検出機能により、角やエッジを鋭敏に保つ処理が含まれています。
標準ライブラリ
アンチモニーの標準ライブラリは、基本的な操作から特殊な操作まで多様なシェイプと変換を定義しています。
- 基本操作: 回転、スケール、ブール演算など
- 特殊操作: 引き寄せ、反発、曲げなど
- ノード定義: シェイプは入力・出力ポートを追加し、オプションで UI 機能も定義できます。
コード例:UI 機能を定義するノード
import fab title('Rectangle') input('xmin', float) input('ymin', float) input('xmax', float, 1) input('ymax', float, 1) output('shape', fab.shapes.rectangle(xmin, xmax, ymin, ymax)) # UI sb.ui.wireframe([(xmin, ymin, 0), (xmax, ymin, 0), (xmax, ymax, 0), (xmin, ymax, 0)], close=True) sb.ui.point(xmin, ymin, 0) sb.ui.point(xmax, ymax, 0)
- 表示: 3D ビューポートにおいて、スクリプト下部で定義された UI 機能は長方形のレンダリングの上に描画されます。
- インタラクション: UI 機能はグラフへと接続されており、角にある点をドラッグすると、グラフノードへの変更が即時反映されます。
カスタムシェイプとプレフィックス文字列
多くのユーザーは組み込みシェイプで十分ですが、カスタムシェイプの定義も可能です。シェイプはパースしやすい一方で、解読にはやや難解なプレフィックス文字列構文を使用します。
円形シェイプの定義例
def circle(x0, y0, r): return Shape( '-r+q-Xf%gq-Yf%gf%g' % (x0, y0, r), # 数学表現文字列 x0 - r, y0 - r, x0 + r, y0 + r) # 境界値
構文の階層展開
プレフィックス文字列を展開した構造は以下のようになります:
- r + q - X f%g q - Y f%g f%g
数式の意味
% (x, y, r) は、円の中心座標 $(x_0, y_0)$ と半径 $r$ を指定します。これは 2 次元円の距離場表現をエンコードしており、以下の式に対応します:
$$ f(x,y) = \sqrt{(x - x_0)^2 + (y - y_0)^2} - r $$
- $f(x,y) > 0$: 円の外側
- $f(x,y) < 0$: 円の内側
プレフィックス文字列からインプレックス関数への正確なマッピングについては、読者の練習問題として扱いか、あるいは著者の論文附属記号 A を参照してください。
ダウンロードと開発環境
ダウンロード
- Mac アプリケーション: GitHub のリリースページより事前構築版を入手可能です。
- ソースコード: GitHub で公開されており、Mac および Linux 向けのビルド手順が記載されています。
開発状況
アンチモニーは現在も積極的に開発が続けられている長寿プロジェクトです。
- 安定性: 堅牢ではあるものの、ミッションクリティカルな用途には推奨されないベータレベルの安定性を有しています。
- コントリビューション: 参入障壁は低めです。基本的な Python の知識があればカスタムノードの作成が可能です(例:RobotGrrl 氏による HSB カラーノードなど)。
今後の課題(C++ 経験者向け)
より野心をお持ちで C++ の経験もある方は、以下の改善点を検討できます。
- レンダリング速度の向上
- UI の見直し
- グラフ評価の最適化
歴史的背景
アンチモニーは、MIT ビット・アンド・アトムズセンターでの個人規模の CAD/CAM ワークフローに関する研究活動から発展しました。これは、
cad_ui や kokopelli を含む一連のソフトウェアにおける最新ツールであり、fabserver の影響を受けています。
主要な更新時期
- 2014 年初頭: 世界経済フォーラムでのデモ用として開発開始。
- 2014 年秋: 「何でもつくれるようにするために」を目的に更新。
- 2015 年: Fab Academy 2015 年版と連動したアップデート。
プレスとディスカッション
アンチモニーに関する主要な記事や議論は以下の場所で見ることができます:
- Hackaday: 解説記事
- Libre Graphics World: インタビュー
- Hacker News: 技術的な議論