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