最近、リボンと呼ばれるイノベーションが非常に人気があります。 オートデスクは人生に遅れをとらず、2009年以降、AutoCADもテープを使用し始めました。
2010 AutoCADのリボンにタブを作成する例を見て、いくつかの関連する「問題」の問題を検討します。 なぜ彼のために? はい、2009年にはテープはまだ「未加工」だったので(ただし、そこでもできます)、その後の自動CAD(2011-2013)でもコードは似ているためです。
リボンに独自のタブを追加するには、いくつかのオプションがあります。
- テープでAPIファイル(cui)を作成してロードします。 私の意見では、最悪で最も問題のあるオプションです。 私見
- プログラムでリボンにタブを作成します-このオプションと検討
- WPFテクノロジーを使用してタブを作成する-私は理解していませんでした
注 :私はすべての小さな詳細には触れず、すべてを「美しく」説明します-例は複雑ではありません。 はい、とても美しく表現する方法がわかりません。
.netツールを使用してAutoCAD用の(少なくとも最も単純な)プラグインを作成する方法を知っていることを考慮して、例を検討します。 仕事にはMicrosoft Visual Studio 2010を使用します。
それでは始めましょう:
1. VS2010を開き、新しいプロジェクトを作成します。
2.次に、リンクをプロジェクトに接続します。
- プロジェクト->リンクの追加->「概要」タブ-> AutoCAD 2010のフォルダーから、ファイルを選択します: acdbmgd.dll 、 acmgd.dll 、 AdWindows.dll 。 [ ローカルにコピー ]オプションのこれらのファイルのプロパティをfalseに設定することを忘れないでください。
- プロジェクト->リンクの追加-> NETタブ->次のライブラリへのリンクを追加: PresentationCore 、 PresentationFramework 、 WindowsBase 。
3.次に、この図の例として、テープの構成要素を検討します。
ここでは、原則として、説明するものはありません。
4. .png形式で16x16および32x32サイズの2つのアイコンをプロジェクトに追加します。 だから、私は怠け者なので、私はオープンスペースで出会った最初のインターネットと同じ写真を使いました。
これらのファイルの主なものは、 構築中のアクションパラメータのリソース値を設定することです。
5.コードに移動します。 Class1.csファイルを開き(または独自のクラスを作成できます)、Class1クラスを削除し、 IExtensionApplicationから継承した独自のクラスを作成します。 ExampleRibbonと呼びましょう。
さらに、私は何らかの方法ですべてのステップをステップごとに説明したかったのですが、コード全体に説明をすぐに与える方がより便利で理解しやすいと判断しました:
すべてのメインプロジェクトコード
using System; using System.Collections.Generic; using System.Linq; using System.Text; // Acad using Autodesk.AutoCAD.Runtime; using Autodesk.AutoCAD.ApplicationServices; using Autodesk.Windows; using acadApp = Autodesk.AutoCAD.ApplicationServices.Application; namespace ACadRibbon { public class ExampleRibbon : IExtensionApplication { // public void Initialize() { /* : * , * , .. () * */ //Autodesk.Windows.ComponentManager.ItemInitialized += new EventHandler(ComponentManager_ItemInitialized); // .. NETLOAD, BuildRibbonTab(); } // public void Terminate() { // } /* * . * , "" , * , */ void ComponentManager_ItemInitialized(object sender, Autodesk.Windows.RibbonItemEventArgs e) { // , if (Autodesk.Windows.ComponentManager.Ribbon != null) { // BuildRibbonTab(); // , Autodesk.Windows.ComponentManager.ItemInitialized -= new EventHandlerRibbonItemEventArgs>(ComponentManager_ItemInitialized); } } // void BuildRibbonTab() { // if (!isLoaded()) { // CreateRibbonTab(); // acadApp.SystemVariableChanged += new SystemVariableChangedEventHandler(acadApp_SystemVariableChanged); } } // "" bool isLoaded() { bool _loaded = false; RibbonControl ribCntrl = Autodesk.Windows.ComponentManager.Ribbon; // foreach (RibbonTab tab in ribCntrl.Tabs) { // , if (tab.Id.Equals("RibbonExample_ID") & tab.Title.Equals("RibbonExample")) { _loaded = true; break; } else _loaded = false; } return _loaded; } /* * */ void RemoveRibbonTab() { try { RibbonControl ribCntrl = Autodesk.Windows.ComponentManager.Ribbon; // foreach (RibbonTab tab in ribCntrl.Tabs) { if (tab.Id.Equals("RibbonExample_ID") & tab.Title.Equals("RibbonExample")) { // , ribCntrl.Tabs.Remove(tab); // acadApp.SystemVariableChanged -= new SystemVariableChangedEventHandler(acadApp_SystemVariableChanged); // break; } } } catch (Autodesk.AutoCAD.Runtime.Exception ex) { Autodesk.AutoCAD.ApplicationServices.Application. DocumentManager.MdiActiveDocument.Editor.WriteMessage(ex.Message); } } /* * WSCURRENT ( ), * "" */ void acadApp_SystemVariableChanged(object sender, SystemVariableChangedEventArgs e) { if (e.Name.Equals("WSCURRENT")) BuildRibbonTab(); } // void CreateRibbonTab() { try { // RibbonControl ribCntrl = Autodesk.Windows.ComponentManager.Ribbon; // RibbonTab ribTab = new RibbonTab(); ribTab.Title = "RibbonExample"; // ribTab.Id = "RibbonExample_ID"; // ribCntrl.Tabs.Add(ribTab); // // ( ) addExampleContent(ribTab); // ( , ) //ribTab.IsActive = true; // ( , ) ribCntrl.UpdateLayout(); } catch (System.Exception ex) { Autodesk.AutoCAD.ApplicationServices.Application. DocumentManager.MdiActiveDocument.Editor.WriteMessage(ex.Message); } } // void addExampleContent(RibbonTab ribTab) { try { // panel source RibbonPanelSource ribSourcePanel = new RibbonPanelSource(); ribSourcePanel.Title = "RibbonExample"; // RibbonPanel ribPanel = new RibbonPanel(); ribPanel.Source = ribSourcePanel; ribTab.Panels.Add(ribPanel); // tooltip ( ) RibbonToolTip tt; // split button RibbonSplitButton risSplitBtn = new RibbonSplitButton(); /* RibbonSplitButton * Text, * . */ risSplitBtn.Text = "RibbonSplitButton"; // risSplitBtn.Orientation = System.Windows.Controls.Orientation.Vertical; // risSplitBtn.Size = RibbonItemSize.Large; // risSplitBtn.ShowImage = true; // risSplitBtn.ShowText = true; // risSplitBtn.ListButtonStyle = Autodesk.Private.Windows.RibbonListButtonStyle.SplitButton; risSplitBtn.ResizeStyle = RibbonItemResizeStyles.NoResize; risSplitBtn.ListStyle = RibbonSplitButtonListStyle.List; /* * , RibbonSplitButton */ #region - №1 // tt = new RibbonToolTip(); // ( ) tt.IsHelpEnabled = false; // RibbonButton ribBtn = new RibbonButton(); /* CommandParameter ( ) * Command ( ) * */ ribBtn.CommandParameter = tt.Command = "_Line"; // ribBtn.Name = "ExampleButton1"; // ribBtn.Text = tt.Title = "- №1"; // () (.) ribBtn.CommandHandler = new RibbonCommandHandler(); // ribBtn.Orientation = System.Windows.Controls.Orientation.Horizontal; // ribBtn.Size = RibbonItemSize.Large; /* .. Large, * (.) */ ribBtn.LargeImage = LoadImage("icon_32"); // ribBtn.ShowImage = true; // ribBtn.ShowText = true; // tt.Content = " №1. "; // ribBtn.ToolTip = tt; // RibbonSplitButton risSplitBtn.Items.Add(ribBtn); #endregion // risSplitBtn.Current = ribBtn; // #region - №2 tt = new RibbonToolTip(); tt.IsHelpEnabled = false; ribBtn = new RibbonButton(); ribBtn.CommandParameter = tt.Command = "_Pline"; ribBtn.Name = "ExampleButton2"; ribBtn.Text = tt.Title = "- №2"; ribBtn.CommandHandler = new RibbonCommandHandler(); ribBtn.Orientation = System.Windows.Controls.Orientation.Horizontal; ribBtn.Size = RibbonItemSize.Large; ribBtn.LargeImage = LoadImage("icon_32"); ribBtn.ShowImage = true; ribBtn.ShowText = true; tt.Content = " №2. "; ribBtn.ToolTip = tt; risSplitBtn.Items.Add(ribBtn); #endregion // RibbonSplitButton ribSourcePanel.Items.Add(risSplitBtn); // RibbonRowPanel ribRowPanel = new RibbonRowPanel(); // . // ( ) #region - №3 tt = new RibbonToolTip(); tt.IsHelpEnabled = false; ribBtn = new RibbonButton(); ribBtn.CommandParameter = tt.Command = "_Circle"; ribBtn.Name = "ExampleButton3"; ribBtn.Text = tt.Title = "- №3"; ribBtn.CommandHandler = new RibbonCommandHandler(); ribBtn.Orientation = System.Windows.Controls.Orientation.Vertical; ribBtn.Size = RibbonItemSize.Standard; ribBtn.Image = LoadImage("icon_16"); ribBtn.ShowImage = true; ribBtn.ShowText = false; tt.Content = " №3. "; ribBtn.ToolTip = tt; ribRowPanel.Items.Add(ribBtn); #endregion // ribSourcePanel.Items.Add(ribRowPanel); } catch (System.Exception ex) { Autodesk.AutoCAD.ApplicationServices.Application. DocumentManager.MdiActiveDocument.Editor.WriteMessage(ex.Message); } } // // System.Windows.Media.Imaging.BitmapImage LoadImage(string ImageName) { return new System.Windows.Media.Imaging.BitmapImage( new Uri("pack://application:,,,/ACadRibbon;component/" + ImageName + ".png")); } /* * */ class RibbonCommandHandler : System.Windows.Input.ICommand { public bool CanExecute(object parameter) { return true; } public event EventHandler CanExecuteChanged; public void Execute(object parameter) { Document doc = acadApp.DocumentManager.MdiActiveDocument; if (parameter is RibbonButton) { // , CommandParameter // SendStringToExecute RibbonButton button = parameter as RibbonButton; acadApp.DocumentManager.MdiActiveDocument.SendStringToExecute( button.CommandParameter + " ", true, false, true); } } } } }
6.すべて-コードの準備ができました。 コンパイル(ビルド->ソリューションのビルド)、AutoCAD 2010を開き、 NETLOADコマンドを実行し、プラグイン... \ ACadRibbon \ ACadRibbon \ bin \ Debug \ ACadRibbon.dllを選択します。
そして、ロード後すぐに、リボンに新しいタブが追加されたことがわかります。
このオプションはModPlusプラグインで積極的に使用されており、まだ苦情はありません。
この例が役立つことを願っています!