背景
3D CADプログラムFreeCADでpythonコンソールを利用して処理を進める際に、ソルバーの収束失敗などの設計の齟齬が発生してもpythonの処理としてはエラーにならずそのまま進んでしまい気づかないうちに想定していないモデルが出来ることがありました。不具合がが発生したら処理を止めて作業者に知らせたかったので、pythonで把握する方法を調べて把握しました。
備忘録として記事に残します。
使ったもの
FreeCAD 1.1solve関数で概要を知れる
sketcherにsolve関数があり、それを呼び出すと戻り値によって不具合の内容を把握できます。0: if no error
-1 if solver error
-2 if redundant constraints
-3 if conflicting
-4 if overconstrained
FreeCAD 1.1のapi一覧表でも確認できます。
solve() - Sketcher::SketchObject Class Reference
pythonで呼び出し可能な関数はcppに比べると限られているようで、上記のページに記載されていてもpythonでは呼び出せない関数があったり、渡せない引数があったりします。
document内のsketcher全てに対して不具合があるか確認する処理はこちらです。
doc = App.ActiveDocument
for obj in doc.Objects:
if obj.TypeId == "Sketcher::SketchObject":
solve = obj.solve()
if solve != 0:
print("Cannot solve %s because %d" % (obj.Name, solve))
# do something for un solved object
異常があればこの様に理由を示す戻り地を見れます。
Cannot solve Sketch because -1

0 件のコメント :
コメントを投稿