Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
rButton2.LargeImage = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
Properties.Resources.positionalLeaderNode.GetHbitmap(), IntPtr.Zero, System.Windows.Int32Rect.Empty,
System.Windows.Media.Imaging.BitmapSizeOptions.FromWidthAndHeight(32, 32));
rButton2.ShowImage = true;
rButton2.Size = RibbonItemSize.Large;
RibbonToolTip rButton2lToolTip = new RibbonToolTip()
{
Title = "Узловая выноска",
Image = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
Properties.Resources.positionalLeaderNodeToolTip.GetHbitmap(), IntPtr.Zero, System.Windows.Int32Rect.Empty,
System.Windows.Media.Imaging.BitmapSizeOptions.FromWidthAndHeight(
Properties.Resources.positionalLeaderNodeToolTip.Width, Properties.Resources.positionalLeaderNodeToolTip.Height)),
Command = "TNGP_POSITIONALLEADER_NODE_ID"
};
RibbonButton rButton2 = new RibbonButton();
rButton2.ToolTip = rButton2lToolTip;

using System;
using Autodesk.AutoCAD.Runtime;
using Autodesk.Windows;
namespace MyAutoCADDll
{
public class Commands : IExtensionApplication
{
// эта функция будет вызываться при выполнении в AutoCAD команды "TestCommand"
[CommandMethod("TestCommand")]
public void MyCommand()
{
// даем команду отслеживать изменения рабочей области (Workspace) AutoCAD
Autodesk.AutoCAD.ApplicationServices.Application.SystemVariableChanged +=
new Autodesk.AutoCAD.ApplicationServices.SystemVariableChangedEventHandler(onSystemVariableChanged);
}
public void Initialize()
{
}
public void Terminate()
{
}
// обработчик изменения рабочей области (Workspace) AutoCAD
void onSystemVariableChanged(object sender, Autodesk.AutoCAD.ApplicationServices.SystemVariableChangedEventArgs e)
{
// если рабочая область изменилась и в новой области есть лента (Ribbon)
if ((e.Name == "WSCURRENT") && (ComponentManager.Ribbon != null))
{
// создаем вкладку
addMyRibbonTab();
}
}
}
}Для тех кто будет это читать после 2020-го, нужно будет еще для работы с структурой Int32Rect подгружать библиотеку WindowsBase, но она так просто (скорее всего) не подгрузится, поэтому делаем следующее - заходим в .cproj проекта (два раза левой кнопкой по проекту в обозревателе) и там в <PropertyGroup> добавляем строку <UseWPF>true</UseWPF>, для того что бы "явно" указать на WPF и система сама подгрузит всё нужное.
Создание плагинов для AutoCAD с помощью .NET API (часть 2 – работа с лентой [Ribbon])