AutoCAD .NET API :トグルボタンの実現

Autodesk Support

2022年6月13日


Issue

CUI 要素にトグルボタンがありませんが、AutoCAD .NET API でトグルボタンを作成することは出来ますか?

 

Solution

あいにく、現時点では CUI コマンドによるメニューカスタマイズでトグルボタンの作成がサポートされていない状態です。

トグルボタンを実装する最も簡単な方法には、.NET アドイン内でメッセージ ハンドラを実装する方法があります。英語になってしまいますが、この方法は How to use Toggle Button Ribbon API のブログ記事で紹介されいます。

少し冗長な実装箇所がありますが、この方法でボタンクリック(トグル)毎にイメージを変えるサンプルプロジェクト添付いたします。

using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.Windows;
using System;
using System.Windows.Media.Imaging;

[assembly: CommandClass(typeof(AutoCAD_CSharp_plug_in5.MyCommands))]

namespace AutoCAD_CSharp_plug_in5
{
    public class MyCommands
    {
        [CommandMethod("ToggleButton")]
        public void ToggleButton()
        {
            Autodesk.Windows.RibbonControl ribbonControl = Autodesk.Windows.ComponentManager.Ribbon;

            Autodesk.Windows.RibbonTab Tab = new Autodesk.Windows.RibbonTab();
            Tab.Title = "Test Ribbon";
            Tab.Id = "TESTRIBBON_TAB_ID";
            ribbonControl.Tabs.Add(Tab);

            Autodesk.Windows.RibbonPanelSource srcPanel = new Autodesk.Windows.RibbonPanelSource();

            srcPanel.Title = "Panel1";

            Autodesk.Windows.RibbonPanel Panel = new Autodesk.Windows.RibbonPanel();
            Panel.Source = srcPanel;
            Tab.Panels.Add(Panel);

            Autodesk.Windows.RibbonToggleButton button = new Autodesk.Windows.RibbonToggleButton();

            button.Text = "Toggle Button";
            button.Size = Autodesk.Windows.RibbonItemSize.Large;

            button.Image = getBitmap("AutoCAD_CSharp_plug_in5.test1.jpg", 16, 16);
            button.LargeImage = getBitmap("AutoCAD_CSharp_plug_in5.test1.jpg", 32, 32);
            button.ShowText = true;
            button.CommandParameter = "";
            button.CommandHandler = new ToggleButtonCmdHandler();
            srcPanel.Items.Add(button);
            Tab.IsActive = true;
        }

        public class ToggleButtonCmdHandler : System.Windows.Input.ICommand
        {
            public bool CanExecute(object parameter)
            {
                return true;
            }

            public event EventHandler CanExecuteChanged;

            public BitmapImage getBitmap(string imageName, int Height, int Width)
            {
                BitmapImage image = new BitmapImage();
                image.BeginInit();
                image.StreamSource = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream(imageName);
                image.DecodePixelHeight = Height;
                image.DecodePixelWidth = Width;
                image.EndInit();
                return image;
            }

            public void Execute(object parameter)
            {
                Document doc = Application.DocumentManager.MdiActiveDocument;
                Autodesk.Windows.RibbonToggleButton button = parameter as Autodesk.Windows.RibbonToggleButton;

                if (button.IsChecked)


                {
                    // プロジェクト埋め込みイメージ
                    button.Image = getBitmap("AutoCAD_CSharp_plug_in5.test2.jpg", 16, 16); 
                    button.LargeImage = getBitmap("AutoCAD_CSharp_plug_in5.test2.jpg", 32, 32);
                }
                else
                {
                    // プロジェクト埋め込みイメージ
                    button.Image = getBitmap("AutoCAD_CSharp_plug_in5.test1.jpg", 16, 16);
                    button.LargeImage = getBitmap("AutoCAD_CSharp_plug_in5.test1.jpg", 32, 32);
                }

                doc.Editor.WriteMessage(
                "\nRibbonButton Executed: " +
                button.Text +
                " (IsChecked: " + button.IsChecked.ToString() + ")");
            }
        }

        public BitmapImage getBitmap(string imageName, int Height, int Width)
        {
            BitmapImage image = new BitmapImage();
            image.BeginInit();
            image.StreamSource = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream(imageName);

            image.DecodePixelHeight = Height;
            image.DecodePixelWidth = Width;
            image.EndInit();

            return image;
        }

    }

}

ビルド後に ToggleButton コマンドを実行してみてください。

CUI コマンドによるメニューカスタマイズでの編集がサポートされませんのでご注意ください。



この情報は役に立ちましたか?


サポートが必要な場合は、Autodesk Assistant にお問い合わせください!

Assistant が回答を見つけたり、担当者に連絡するお手伝いをします。


オートデスクではどのようなサポートが提供されますか?

ご利用可能なサポートの種類は、サブスクリプションのプランによって異なります。現在のプランでご利用可能なサポート レベルをご確認ください。

サポート レベルを確認