##はじめに
Python3のスクリプトを使って、FreeCAD上でモデルの寸法パラメータを変更する方法のメモです。
基本的な形状はGUIで作っておいて、寸法だけをPythonスクリプトで変更します。
ゼロからPythonでモデル作成するわけではありませんので注意。
##対象
Python3スクリプトでFreeCAD(0.18)を操作したい人。
まだPython2を使っている人はこちらも参考にして下さい。
Qiita
[-FreeCAD 0.18をPython2スクリプトで実行するときのメモ(Ubuntu18.04)][link-1]
[link-1]:https://qiita.com/hiro_kuramoto/items/217503240ceacf86dbec
##インストール方法とか操作方法とか
以下のサイトが参考になります。
FreeCAD 使い方メモ
[-FreeCAD Linux でのインストール方法][link-2]
[link-2]:https://www.xsim.info/articles/FreeCAD/HowTo/Install-on-Linux.html
##環境
OS Ubuntu 18.04
FreeCAD 0.18.4
Python 3.6.9
##準備
まずは、適当に形状を作っておきます。今回は直方体の寸法を変更していきます。
変更したいパラメータを x, y, z とします。
次に、FreeCADのスプレッドシートで x, y, z のパラメータを入力しておきます。ここではB1,B2,B3セルに値を入れています。(A1,A2,A3は目印です。無くても問題ありません)
ここで、モデルとパラメータを紐付けするために、エイリアスの設定もしておきます。
ここで設定したエイリアス名を使って、後ほどパラメータ変更をしていきます。
最後に、モデルとスプレッドシートのパラメータ値を紐付けます。
モデル寸法の設定画面から、スプレッドシートのエイリアスを指定します。
準備完了です。
##スクリプト
このスクリプトをコンソール画面から実行してください。
内容は、スプレッドシートで設定したパラメータの値を変更→中間ファイル形式(ここでは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解析をする事などに応用が可能です。