本日のお題は『ドキュメントから作成履歴の取得』です。
今回は先日説明したドキュメントから、これまでの作成した履歴(形跡)を取得します。
履歴を取得できると、すでに作成済みのオブジェクトのパラメータを確認したり、変更(※)したりすることができます。
これも重要ですので、頭の片隅に入れておきましょう。
※ 例えば、立方体の長さを変更するなど。
1. 環境
- FreeCAD 0.18
2. 作成履歴とは何か?
ここでいう作成履歴というのは、CADデータを作る際に行った操作の履歴を指します。
例えば机を作る際、天板と足4本を作成するために『押し出し』や『和処理』を行いますね。
その『押し出し』や『和処理』を実行した情報のことを『履歴』といいます。
以前、ベクトル確認用のソリッドを作成したことがありますが、あの実行結果を例にとると、ドキュメント配下の情報はすべて履歴になります。
(以下の立方体, Fusion, Cylinder, Coneが該当)
3. プログラムを書いてみよう
ドキュメントの取得は、前回の記事で書きました。
今回はそのドキュメントから履歴情報を取り出します。
当該情報は、DocumentオブジェクトのObjectsから取得することができます。
# -*- coding: utf-8 -*- #import ptvsd #print("Waiting for debugger attach") # 5678 is the default attach port in the VS Code debug configurations #ptvsd.enable_attach(address=('localhost', 5678), redirect_output=True) #ptvsd.wait_for_attach() import FreeCAD # アクティブなドキュメントを取得 activeDoc = App.ActiveDocument # アクティブドキュメントから作成履歴群を取得 histories = activeDoc.Objects # 作成履歴群の名称を取得してログに表示 for history in histories: FreeCAD.Console.PrintMessage(str(history.Label) + "\n")
立方体 Cone Cylinder Fusion
4. 補足
上記の方法で履歴の情報が取得できましたが、1つ厄介な点があります。
それは、階層構成ではなく、すべて1次元配列の中に平たんに入れられてしまうことです。
これでは、Fusion配下のConeとCylinderが欲しいというときに困ります。
この点については後日、解決方法を紹介できればと思います。
5. まとめ
- 作成履歴はDocumentオブジェクトのObjectsから取得可能
- 取得できる履歴は階層構成ではなく、1次元配列にすべて格納される
6. 最後に
作成済みのデータから必要な情報を抽出する際、今回の知識は必ず必要になります。
やり方を一字一句覚える必要はありませんが、「こういうこともできるんだ」ということだけは覚えておきましょう。
更なる情報をお探しの方は!
下記のリンクから、FreeCADプログラミングのトップページに飛びます。
よろしければご参照くださいませ。