見出し画像

FreeCAD のツールバーをOn/Offするマクロ

はじめに

YoutubeにFreeCADの使い方の動画を作っています。
URL:https://www.youtube.com/@JinSato-3D-CAD-Lab
FreeCADのようにUIをカスタマイズできる場合、自分の使いやすい様にレイアウトを変更していると思います。 そうなるとアイコンの位置が違いますので逆にツールバーを全部消して、プルダウンメニューを使うよう動画を作って見ました。

ツールバーのOffにするのが案外面倒

ツールバーをOn/Offするのが案外面倒なので、ChatGPTの力を借りてマクロを作って見ました。

実行例

実行例

マクロの登録手順

  1. プルダウンメニューの「マクロ」の中の「マクロ」を選択

  2. 作成ボタンをクリック

  3. マクロ名を入力、今回は「@ToolBar_OnOff」としました、こうすると上に来るので次に選ぶときに便利!

  4. マクロのコードエデッタが開くので、コードをコピペ

  5. エデッタを閉じるときに、保存を選んで終了

マクロの実行手順

  1. プルダンメニューの「マクロ」の中の「マクロ」を選択

  2. ユーザーマクロの中に今登録したマクロ「@ToolBar_OnOff」が有ると思うので、選択して「実行」ボタンをクリック

注意点

  • 表示を選んでも元の位置に戻るわけではありませんので注意してください。

  • マクロを実行すると、ツールバーが全部消えますが、ワークベンチのツールバーだけは残しています。

  • マクロの実行は自己責任ですので、予めご了承ください。

ソースコード

# -*- coding: utf-8 -*-
# FreeCAD ツールバー表示/非表示マクロ
#
# 作者: Jin Sato
# 公開日: 2024年12月18日
# 免責事項: このマクロの使用は自己責任でお願いします。
#           作者はこのソフトウェアの利用におけるいかなる損害や問題についても責任を負いません。
# ライセンス: このコードはパブリックドメインとして提供されます。
#             誰でも自由に使用、変更、再配布が可能です。
#
# 概要:
# - FreeCADのツールバーの表示・非表示を切り替えるマクロです。
# - ワークベンチ関連のツールバーを除外し、その他のツールバーだけを対象にします。
# - ユーザーがダイアログで表示/非表示を選択できる仕様です。

import FreeCADGui
from PySide2 import QtWidgets

def toggle_toolbars_with_exclusion():
    """
    'Workbench' と名前が含まれるツールバーを除外して、表示・非表示を切り替える
    """
    try:
        # FreeCADのメインウィンドウからツールバーを取得
        mw = FreeCADGui.getMainWindow()
        toolbars = mw.findChildren(QtWidgets.QToolBar)

        if not toolbars:
            FreeCAD.Console.PrintMessage("ツールバーが見つかりません。\n")
            return

        # 対象外にするツールバーの条件: 名前に 'Workbench' が含まれるもの
        excluded_toolbars = [tb for tb in toolbars if 'Workbench' in tb.objectName()]
        target_toolbars = [tb for tb in toolbars if tb not in excluded_toolbars]

        # ダイアログボックスの作成
        dialog = QtWidgets.QMessageBox()
        dialog.setWindowTitle("ツールバーの表示設定")
        dialog.setText("ツールバーの表示・非表示を選択してください。\n(ワークベンチ関連は対象外)")
        dialog.setIcon(QtWidgets.QMessageBox.Question)
        dialog.addButton("表示", QtWidgets.QMessageBox.AcceptRole)
        dialog.addButton("非表示", QtWidgets.QMessageBox.RejectRole)
        dialog.addButton("キャンセル", QtWidgets.QMessageBox.NoRole)

        # ユーザーの選択を取得
        result = dialog.exec_()

        # ユーザーの選択に応じて表示・非表示を切り替える
        if result == QtWidgets.QMessageBox.AcceptRole:  # 表示
            for toolbar in target_toolbars:
                toolbar.setVisible(True)
            FreeCAD.Console.PrintMessage("ツールバーが表示されました(ワークベンチ関連を除く)。\n")
        
        elif result == QtWidgets.QMessageBox.RejectRole:  # 非表示
            for toolbar in target_toolbars:
                toolbar.setVisible(False)
            FreeCAD.Console.PrintMessage("ツールバーが非表示になりました(ワークベンチ関連を除く)。\n")
        
        else:  # キャンセル
            FreeCAD.Console.PrintMessage("操作がキャンセルされました。\n")

    except Exception as e:
        FreeCAD.Console.PrintError(f"エラー: {e}\n")

# 実行
toggle_toolbars_with_exclusion()

最後に

このマクロが皆さんのお役に立てると嬉しいです。


いいなと思ったら応援しよう!