8
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

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

はじめに

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
8
Help us understand the problem. What are the problem?