FreeCADとPythonで始める!CADモデリング自動化とカスタマイズの完全ガイド

プログラミング
記事内に広告が含まれています。
スポンサーリンク

FreeCADとは?

FreeCADは、3D設計やモデリングに特化したオープンソースのCADソフトウェアです。主に製品設計やエンジニアリング、建築、さらにはDIYプロジェクトに利用される強力なツールであり、無料で利用できる点が大きな魅力です。

brian
brian

FreeCADでの設計作業をもっと効率化したいとお考えですか?このガイドでは、Pythonを使ってFreeCADの操作を自動化する方法を、初心者向けにわかりやすく解説しています。スクリプトの基本から実践的な活用例まで幅広くカバーしていますので、ぜひチェックしてみてください!

主な特徴

  1. パラメトリックモデリング
    FreeCADはパラメトリックモデリングをサポートしており、作成したモデルの履歴を追跡して、後から寸法や形状を簡単に変更できます。この機能は、試行錯誤を繰り返しながら設計を調整するのに非常に便利です。
  2. モジュール性
    FreeCADはモジュール構造を採用しており、ユーザーはさまざまな「ワークベンチ」を切り替えて特定のタスクに対応できます。例として、パーツ設計に特化した「Partワークベンチ」や、3Dプリント用データ作成に便利な「Meshワークベンチ」などがあります。
  3. クロスプラットフォーム対応
    Windows、Mac、Linuxといった主要なOSで動作するため、どの環境でも利用できます。
  4. Pythonによるスクリプト可能性
    FreeCADは、Pythonスクリプトを使ってモデルの作成や編集、プロジェクトの自動化が可能です。このスクリプト機能は、デザイナーやエンジニアが反復的なタスクを効率化する際に役立ちます。

Pythonとの連携

FreeCADの最大の魅力の1つは、Pythonとの深い統合です。FreeCADのほぼすべての操作は、Pythonスクリプトを介して制御できます。これにより、以下のようなことが可能になります。

  • ユーザーインターフェースを使用せずに、完全にスクリプトでモデルを作成。
  • 特定のルールや条件に基づいたパラメトリックデザインの生成。
  • モデリングプロセスの繰り返し作業をスクリプトで自動化。

たとえば、FreeCADを起動してPythonコンソールを開けば、次のような簡単なスクリプトで立方体を作成できます。

Python
import FreeCAD as App
import Part

doc = App.newDocument("ExampleDoc")  # 新しいドキュメントを作成
cube = Part.makeBox(10, 10, 10)      # 10x10x10の立方体を作成
Part.show(cube)                      # モデルを表示

このコードは、簡単な立方体を作成し、それをFreeCADのビューに表示するものです。直感的な構文で、少ないコード量で操作が可能なのがわかります。

スポンサーリンク

PythonでFreeCADを操作する基本

FreeCADでは、Pythonを用いてほぼすべての機能を操作することができます。これは、デザインの自動化やカスタマイズを簡単に行える大きな利点です。この章では、Pythonを使ったFreeCADの基本操作を解説します。

スクリプト環境の設定

FreeCADを操作するPythonスクリプトは、以下の方法で実行できます。

  1. FreeCAD内蔵のPythonコンソール
    FreeCADを起動すると、メニューの「表示 > ツールバー > Pythonコンソール」を有効にすることで、インタラクティブなPythonコンソールが表示されます。このコンソールはFreeCADの動作をリアルタイムで制御するのに便利です。
  2. 外部スクリプトを使用
    任意のPythonエディタ(例: VS CodeやPyCharm)を使ってスクリプトを書き、FreeCADを外部から制御することもできます。これには、FreeCADのPythonモジュールがPythonの実行環境に正しく設定されている必要があります。
  3. マクロ機能
    FreeCADには「マクロ」機能があり、GUI操作を記録してスクリプト化できます。これにより、反復的な操作を簡単にスクリプトとして保存し再利用できます。

コンソールを使った簡単なコマンド

Pythonコンソールでは、簡単なコマンドを入力することでFreeCADの基本操作を学ぶことができます。以下にいくつかの例を挙げます。

ドキュメントを作成

新しいプロジェクト(ドキュメント)を作成するには、次のようにします。

Python
import FreeCAD as App
doc = App.newDocument("MyProject")
print("新しいドキュメントが作成されました:", doc.Name)

形状を作成

簡単なジオメトリ(立方体や球など)を作成して表示するには、Partモジュールを使用します。

Python
import Part
cube = Part.makeBox(10, 10, 10)  # 10x10x10の立方体
Part.show(cube)                  # 形状をビューに表示

オブジェクトの編集

作成した形状を編集するには、属性を変更します。

Python
cube.Length = 20  # 立方体の長さを20に変更
cube.recompute()  # モデルを再計算

FreeCADモジュールの基本

FreeCADで使用する主要なモジュールについて、簡単に説明します。

  • FreeCAD(App
    ドキュメントやプロジェクト全体を管理します。
  • FreeCADGui(Gui
    GUI関連の操作を制御します。ただし、GUIを必要としない場合、このモジュールはインポートしなくても構いません。
  • Partモジュール
    基本的な3Dジオメトリ(立方体、球、円柱など)の作成や操作を行います。
  • Meshモジュール
    メッシュ(STL形式など)の操作を行います。3Dプリント用のデータ処理に便利です。
スポンサーリンク

モデリングの自動化: Pythonスクリプトの実例

FreeCADでは、Pythonスクリプトを使用してモデルを自動的に生成することができます。この章では、基本的なスクリプトを使ってモデリングを自動化する方法を解説します。

簡単なパーツ作成スクリプト

以下のスクリプトは、FreeCADで立方体と円柱を作成し、それらを結合する基本的な例です。

Python
import FreeCAD as App
import Part

# 新しいドキュメントを作成
doc = App.newDocument("AutomationExample")

# 立方体を作成
cube = Part.makeBox(10, 10, 10)  # サイズは10x10x10
Part.show(cube)  # 表示

# 円柱を作成
cylinder = Part.makeCylinder(5, 15)  # 半径5、高さ15
cylinder.translate(App.Vector(5, 5, 0))  # 円柱を移動
Part.show(cylinder)  # 表示

# 立方体と円柱を結合
combined = cube.fuse(cylinder)  # ブール演算で結合
Part.show(combined)  # 表示

# ドキュメントを更新
doc.recompute()

このスクリプトを実行すると、FreeCAD内で立方体と円柱が結合されたモデルが作成されます。スクリプト内での寸法や位置を変更することで、モデルを簡単にカスタマイズできます。

座標系や寸法の設定

FreeCADでは、座標系や寸法をプログラムで指定できます。以下は、座標や寸法を活用したより複雑な例です。

Python
import FreeCAD as App
import Part

# ドキュメントを作成
doc = App.newDocument("CoordinateExample")

# パラメトリックな寸法
width = 20
height = 10
depth = 5

# ボックスを作成
box = Part.makeBox(width, height, depth)
Part.show(box)

# 回転と移動
box_shape = App.ActiveDocument.Objects[0]
box_shape.Placement = App.Placement(
    App.Vector(10, 10, 10),  # 移動
    App.Rotation(0, 0, 90)  # 回転
)

doc.recompute()

このスクリプトでは、立方体が座標系の指定に基づいて移動し、回転が適用されます。モデルを任意の位置や角度に配置できる点が特徴です。

パラメトリックデザインの作成例

パラメトリックデザインは、特定の変数やルールに基づいて設計を自動化する方法です。以下に、寸法を変更可能なテーブルの脚を作成する例を示します。

Python
import FreeCAD as App
import Part

# パラメーター
leg_height = 50
leg_radius = 2

# 新しいドキュメント
doc = App.newDocument("ParametricDesign")

# テーブルの脚を作成
leg = Part.makeCylinder(leg_radius, leg_height)
Part.show(leg)

# 配置
leg_obj = App.ActiveDocument.Objects[0]
leg_obj.Placement = App.Placement(
    App.Vector(0, 0, 0),  # 脚の位置
    App.Rotation(0, 0, 0)  # 回転なし
)

doc.recompute()

寸法を変数として管理することで、同じスクリプトを再利用しながら異なるデザインを素早く作成できます。

スポンサーリンク

FreeCADのワークベンチをカスタマイズする

FreeCADでは、「ワークベンチ」と呼ばれるモジュールを切り替えて、さまざまな用途に特化したツールを利用できます。また、Pythonを使って新しいツールや機能を追加したり、独自のワークベンチを作成することも可能です。この章では、Pythonを用いたワークベンチのカスタマイズ方法を解説します。

ワークベンチの構造

FreeCADのワークベンチは、以下のような要素で構成されています。

  1. ツールバーとメニュー
    ワークベンチの操作は、GUIのツールバーやメニューとして表示されます。
  2. コマンド(Commands)
    ワークベンチに登録される各操作は、コマンドとして実装されます。
  3. Pythonスクリプトまたはモジュール
    各コマンドのロジックはPythonスクリプトで記述されます。

基本的なワークベンチの作成

以下は、カスタムワークベンチを作成する基本的な手順です。

必要なファイルを準備

FreeCADのモジュールフォルダに新しいディレクトリを作成します(例: MyWorkbench)。

フォルダ構成の例:

Bash
MyWorkbench/
    Init.py         # モジュールの初期化スクリプト
    InitGui.py      # GUI初期化スクリプト
    MyCommands.py   # コマンドスクリプト

Init.pyの作成

ワークベンチをFreeCADに認識させるためのスクリプトです。

Python
# Init.py
def Initialize():
    print("MyWorkbenchが初期化されました")

InitGui.pyの作成

GUI関連の設定を行います。

Python
# InitGui.py
import FreeCADGui

class MyWorkbench:
    def __init__(self):
        self.__class__.MenuText = "MyWorkbench"
        self.__class__.ToolTip = "これはカスタムワークベンチの例です"
    
    def Initialize(self):
        import MyCommands
        FreeCADGui.addCommand("MyCommand", MyCommands.MyCommand())

    def GetClassName(self):
        return "Gui::PythonWorkbench"

FreeCADGui.addWorkbench(MyWorkbench())

コマンドの実装

MyCommands.pyでコマンドのロジックを記述します。

Python
# MyCommands.py
import FreeCAD

class MyCommand:
    def Activated(self):
        FreeCAD.Console.PrintMessage("MyCommandが実行されました!\n")

    def IsActive(self):
        return True

    def GetResources(self):
        return {
            'Pixmap': '',  # アイコン(画像ファイルへのパス)
            'MenuText': 'MyCommand',
            'ToolTip': 'このコマンドはテスト用です'
        }

ワークベンチをロードする

上記のファイルをFreeCADのモジュールフォルダに配置すると、FreeCADを再起動した際にワークベンチがリストに表示されるはずです。

  1. FreeCADを起動します。
  2. ワークベンチ選択メニューに「MyWorkbench」が表示されます。
  3. ワークベンチを選択すると、カスタムコマンドがツールバーやメニューに表示され、使用可能になります。

実用例: カスタムモジュールでツールを追加

以下は、特定の形状を作成するカスタムツールを追加する例です。

Python
# MyCommands.py
import FreeCAD
import Part

class CreateCustomShape:
    def Activated(self):
        doc = FreeCAD.newDocument("CustomShapeDoc")
        sphere = Part.makeSphere(10)  # 半径10の球体を作成
        Part.show(sphere)
        doc.recompute()
        FreeCAD.Console.PrintMessage("球体を作成しました!\n")

    def IsActive(self):
        return True

    def GetResources(self):
        return {
            'Pixmap': '',  # アイコン
            'MenuText': 'CreateCustomShape',
            'ToolTip': 'カスタム形状を作成します'
        }
スポンサーリンク

実際のプロジェクトでPythonを活用する方法

FreeCADでPythonを活用することにより、設計プロジェクトを効率化し、繰り返し作業を自動化することができます。この章では、実際のプロジェクトで役立つスクリプトやワークフローの例をいくつか紹介します。

Pythonスクリプトによるプロジェクトの自動化

複雑な設計や大量の部品を含むプロジェクトでは、スクリプトによる自動化が非常に有効です。以下は、複数のパーツを自動生成するスクリプトの例です。

部品のバッチ生成スクリプト

以下のスクリプトは、異なる寸法を持つ立方体を複数作成する例です。

Python
import FreeCAD as App
import Part

# 新しいドキュメントを作成
doc = App.newDocument("BatchCreation")

# パラメータのリスト
dimensions = [
    (10, 10, 10),
    (20, 15, 5),
    (5, 30, 20)
]

# 部品を作成
for i, (length, width, height) in enumerate(dimensions):
    cube = Part.makeBox(length, width, height)
    cube.translate(App.Vector(i * 15, 0, 0))  # 位置をずらす
    Part.show(cube)

# ドキュメントを再計算
doc.recompute()
print(f"{len(dimensions)}個の部品を作成しました!")

このスクリプトは、リスト内の寸法に基づいて3つの立方体を自動作成し、それぞれを並べて配置します。寸法をリストで管理することで、設計の反復を容易に行えます。

データのインポートとエクスポート

FreeCADは、さまざまなCAD形式のインポートとエクスポートをサポートしており、Pythonでこれらの操作を自動化できます。

STEPファイルのインポート

以下のスクリプトは、STEP形式のファイルをインポートし、ビューに表示する例です。

Python
import Import

# STEPファイルをインポート
filepath = "/path/to/your/file.step"
Import.open(filepath)
print(f"ファイル '{filepath}' をインポートしました。")

STLファイルのエクスポート

モデルをSTL形式でエクスポートするには次のようにします。

Python
import Mesh

# エクスポートするオブジェクトを指定
obj = App.ActiveDocument.Objects[0]
Mesh.export([obj], "/path/to/exported_file.stl")
print("STLファイルをエクスポートしました。")

このようにして、3Dプリント用データの準備を自動化することができます。

大規模な設計ワークフローの効率化

Pythonを活用すると、設計全体のワークフローを一元管理できます。以下は、設計プロセスの主要なステップを自動化する例です。

設計パラメータの設定

パラメトリックな寸法をコードで定義します。

Python
parameters = {
    "base_length": 50,
    "base_width": 30,
    "base_height": 10,
    "hole_diameter": 5
}

部品を作成する関数

設計を関数として定義し、再利用可能にします。

Python
import Part

def create_base_with_hole(params):
    # ベースの作成
    base = Part.makeBox(params["base_length"], params["base_width"], params["base_height"])
    
    # 穴の作成
    hole = Part.makeCylinder(params["hole_diameter"] / 2, params["base_height"])
    hole.translate(App.Vector(params["base_length"] / 2, params["base_width"] / 2, 0))
    
    # ベースから穴を引き算
    result = base.cut(hole)
    return result

自動実行スクリプト

関数を呼び出して部品を作成し、ビューに表示します。

Python
doc = App.newDocument("WorkflowExample")
result = create_base_with_hole(parameters)
Part.show(result)
doc.recompute()
print("設計ワークフローを実行しました!")

これらの手法を組み合わせることで、複雑な設計プロジェクトでも効率的に対応できます。

スポンサーリンク

まとめ

FreeCADは、オープンソースでありながら強力な機能を持つ3Dモデリングツールで、Pythonとの深い統合により、設計プロセスを効率化し、自動化する無限の可能性を提供します。本記事では、FreeCADでPythonを活用するための基本から応用までを解説しました。

PythonによるFreeCAD活用の魅力

  1. モデリングの自動化
    スクリプトを使うことで、手動では面倒な繰り返し作業を効率化でき、設計の一貫性を保ちながら迅速に作業を進めることが可能です。
  2. パラメトリックデザイン
    変数を用いて設計をパラメトリックに管理することで、設計の変更やバリエーションの生成が容易になります。
  3. 柔軟なカスタマイズ
    ワークベンチのカスタマイズや独自のツールの作成により、特定のニーズに最適化された環境を構築できます。
  4. データ交換の自動化
    STEPやSTLなどのファイル形式をスクリプトでインポート・エクスポートすることで、他のソフトウェアやワークフローとの連携をスムーズに行えます。

次のステップ

  1. 公式ドキュメントやコミュニティの活用
    FreeCADの公式ドキュメントやフォーラムでは、豊富なリソースやサンプルコードが提供されています。コミュニティに参加することで、新しいアイデアやヒントを得られるでしょう。
  2. 高度なカスタマイズ
    PythonとFreeCADを使ったプラグイン開発や、外部ライブラリ(例: NumPy、Matplotlib)との連携に挑戦してみると、さらに強力な機能を実現できます。
  3. 実プロジェクトへの応用
    本記事で紹介した技術を応用して、自分のプロジェクトや業務に組み込んでみてください。モデリング自動化やデータ変換の効率化が大きな効果をもたらします。

最後に

FreeCADは、学習すればするほどその可能性を広げられるツールです。特にPythonを組み合わせることで、単なるモデリングソフトとしてではなく、設計ワークフロー全体を支援する統合環境として活用できます。この記事がその第一歩となり、皆様のプロジェクトがよりクリエイティブで効率的なものになることを願っています。

brian
brian

ここまで読んでいただきありがとうございます!

UdemyのPythonコースにはオンラインで学習ができる動画コンテンツがたくさんあります。

当ブログのような文章メインの説明では足りない箇所を補えると思うので、もっと詳しく勉強したいという方はぜひチェックしてみてください!

コメント

タイトルとURLをコピーしました