LoginSignup
8
9

More than 3 years have passed since last update.

Python3スクリプトでFreeCADモデリング(Ubuntu18.04)

Last updated at Posted at 2020-01-09

はじめに

Python3のスクリプトを使って、FreeCAD上でモデルの寸法パラメータを変更する方法のメモです。
基本的な形状はGUIで作っておいて、寸法だけをPythonスクリプトで変更します。
ゼロからPythonでモデル作成するわけではありませんので注意。

対象

Python3スクリプトでFreeCAD(0.18)を操作したい人。
まだPython2を使っている人はこちらも参考にして下さい。

Qiita
-FreeCAD 0.18をPython2スクリプトで実行するときのメモ(Ubuntu18.04)

インストール方法とか操作方法とか

以下のサイトが参考になります。

FreeCAD 使い方メモ
-FreeCAD Linux でのインストール方法

環境

OS Ubuntu 18.04
FreeCAD 0.18.4
Python 3.6.9

準備

まずは、適当に形状を作っておきます。今回は直方体の寸法を変更していきます。
変更したいパラメータを x, y, z とします。
図2.png

次に、FreeCADのスプレッドシートで x, y, z のパラメータを入力しておきます。ここではB1,B2,B3セルに値を入れています。(A1,A2,A3は目印です。無くても問題ありません)
図6.png

ここで、モデルとパラメータを紐付けするために、エイリアスの設定もしておきます。
ここで設定したエイリアス名を使って、後ほどパラメータ変更をしていきます。
図7.png

最後に、モデルとスプレッドシートのパラメータ値を紐付けます。
モデル寸法の設定画面から、スプレッドシートのエイリアスを指定します。
図8.png

準備完了です。

スクリプト

このスクリプトをコンソール画面から実行してください。
内容は、スプレッドシートで設定したパラメータの値を変更→中間ファイル形式(ここではSTEP形式)で保存するスクリプトです。
スクリプト自体はFreeCADのマクロ機能を使って記録したものです。再利用できるようにクラス化をしていますが、モジュールのインポートが省略されているため、そのままでは使えません。
そこで、FreeCADのモジュール(FreeCAD.soとImport.so)をインポートするために、FREECADPATHでモジュール検索パスを追加しています。
各自のインストール状況によってパスは変わると思いますので、確認の上設定して下さい。

FREECADPATH = "/usr/lib/freecad-python3/lib"
import sys
sys.path.append(FREECADPATH)
import FreeCAD
import Import

class FreecadParams:
    """FreeCADのスプレッドシート操作&STEP形式で保存をクラス化"""
    def __init__(self, fc):
        self.fcpath = fc # FreeCADモデルの保存場所
        self.stpath = st # STEPファイルの保存場所

    def import_fcstd(self):
        '''モデルの読み込み'''
        FreeCAD.open(self.fcpath)

    def set_value(self, params, value):
        '''寸法パラメータの設定'''
        FreeCAD.setActiveDocument("original_model") # ファイルの名称
        FreeCAD.ActiveDocument.Spreadsheet.set(params, value)
        FreeCAD.ActiveDocument.recompute()
        __objs__=[]
        __objs__.append(FreeCAD.getDocument("original_model").getObject("Pad"))  # 押し出し3Dモデルの名称“Pad”
        del __objs__

    def export_step(self):
        '''STEP形式で保存'''
        __objs__=[]
        __objs__.append(FreeCAD.getDocument("original_model").getObject("Pad"))
        Import.export(__objs__, self.stpath)
        del __objs__

if __name__ == '__main__':
    fcpath = '/(ワークディレクトリ)/original_model.FCStd' # FreeCADモデルの保存場所
    stpath = '/(ワークディレクトリ)/original_model.step'  # STEPファイルの保存場所
    f = FreecadParams(fcpath, stpath)
    f.import_fcstd()
    f.set_value('x', '10')
    f.set_value('y', '40')
    f.set_value('z', '20')
    f.export_step()  

結果

寸法が変更されたモデルをSTEP形式で保存することができます。
自動で寸法を変更させながら、繰り返しFEM解析をする事などに応用が可能です。
図9.png

8
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
9