本記事では、Linux環境下におけるFreeCADのAppImageでpython操作する雛形コードを載せました。(FreeCADのインストール方法は次のリンクに載せています。https://hk29.hatenablog.jp/entry/2020/07/04/122953。そして、本プログラムの動作は次のリンク先のWindows版と同じです。https://hk29.hatenablog.jp/entry/2021/01/25/235943)
実行コマンドは、次のようにします。「00_freecad2.py」は本プログラム(pythonスクリプトのファイル名)です。
$ [FreeCADのAppImageのパス] python 00_freecad2.py
下図がその実施例です。pythonはAppImage内のpythonを指定しています。図中にいくつかパスが表示されているのは、本プログラム中でFreeCADのAppImage内のpythonライブラリへのパスを検索して通した結果です。
■本プログラム
import os, sys
for mypath in sys.path:
path_taple = os.path.split(mypath)
dir_path = path_taple[0]
check_str = os.path.split(dir_path)[1]
if check_str == 'lib':
sys.path.append(dir_path)
break
for mypath in sys.path:
print(mypath)
import FreeCAD
import Import
class Make_CADfiles:
def __init__(self, input_path, output_dirpath):
self.input_path = input_path
num = os.path.basename(input_path).rfind('.')
self.file_name = os.path.basename(input_path)[:num]
self.output_path = output_dirpath
def load_fcstd_file(self):
FreeCAD.open(self.input_path)
def replace_param(self, param, value):
FreeCAD.setActiveDocument(self.file_name)
FreeCAD.ActiveDocument.Spreadsheet.set(param, value)
FreeCAD.ActiveDocument.recompute()
__objs__=[]
__objs__.append(FreeCAD.getDocument(self.file_name).getObject(my_object))
del __objs__
def export_cadfile(self, num):
save_file_path = os.path.join(self.output_path, self.file_name + '_' + str(num) + '.step')
__objs__=[]
__objs__.append(FreeCAD.getDocument(self.file_name).getObject(my_object))
Import.export(__objs__, save_file_path)
del __objs__
def main():
with open(parameter_list_path, 'r') as f:
list_of_data_list = []
for i, row in enumerate(f, 1):
row = row.rstrip('\n')
if i==1:
column_name_list = row.split(',')[1:]
print(column_name_list)
else:
data = row.split(',')[1:]
list_of_data_list.append(data)
print(len(list_of_data_list))
print(list_of_data_list)
for i, data_list in enumerate(list_of_data_list, start=1):
f = Make_CADfiles(input_path, output_dirpath)
f.load_fcstd_file()
check_params = []
for column_name, data in zip(column_name_list, data_list):
f.replace_param(column_name, str(data) + 'mm')
check_params.append((column_name, str(data)))
f.export_cadfile(i)
print(i, check_params)
del f
if __name__ == '__main__':
input_path ='./test7.FCStd'
output_dirpath ='./CAD_stepfiles'
parameter_list_path = 'parameter_list.csv'
my_object = 'BooleanFragments'
main()
print('finished')
以上
<広告>
リンク