Из одного примера создал RibbonMenu
Из второго примера создал команду
Из третьего примера создал рисование полилинии
Соединил это всё и автокад 2017 не выдерживает, падает
Рисование
[CommandMethod("AddLightweightPolyline")]
public static void AddLightweightPolyline()
{
// Получение текущего документа и базы данных
Document acDoc = AcApp.DocumentManager.MdiActiveDocument;
Database acCurDb = acDoc.Database;
// Старт транзакции
using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
{
// Открытие таблицы Блоков для чтения
BlockTable acBlkTbl;
acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId,
OpenMode.ForRead) as BlockTable;
// Открытие записи таблицы Блоков пространства Модели для записи
BlockTableRecord acBlkTblRec;
acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],
OpenMode.ForWrite) as BlockTableRecord;
// Создание полилинии с двумя сегментами (3 точки)
Polyline acPoly = new Polyline();
acPoly.SetDatabaseDefaults();
acPoly.AddVertexAt(0, new Point2d(2, 4), 0, 0, 0);
acPoly.AddVertexAt(1, new Point2d(4, 2), 0, 0, 0);
acPoly.AddVertexAt(2, new Point2d(6, 4), 0, 0, 0);
// Добавление нового объекта в запись таблицы блоков и в транзакцию
acBlkTblRec.AppendEntity(acPoly);
acTrans.AddNewlyCreatedDBObject(acPoly, true);
// Сохранение нового объекта в базе данных
acTrans.Commit();
}
}
Click по кнопке
public class CommandHandler_Button1 : System.Windows.Input.ICommand
{
public event EventHandler CanExecuteChanged;
public bool CanExecute(object param)
{
return true;
}
public void Execute(object parameter)
{
Document doc = AcApp.DocumentManager.MdiActiveDocument;
if (parameter is RibbonButton)
{
// Просто берем команду, записанную в CommandParameter кнопки
// и выпоняем её используя функцию SendStringToExecute
RibbonButton button = parameter as RibbonButton;
AcApp.DocumentManager.MdiActiveDocument.SendStringToExecute(
button.CommandParameter.ToString(), true, false, true);
}
}
}
Создание кнопки в Меню
// создаем кнопки большого размера
Autodesk.Windows.RibbonButton button3 = new Autodesk.Windows.RibbonButton();
button3.Id = "_button3";
button3.IsToolTipEnabled = true;
button3.ToolTip = "Это большая кнопка";
button3.Size = Autodesk.Windows.RibbonItemSize.Large;
button3.LargeImage = bs;
button3.CommandParameter = "AddLightweightPolyline";
button3.CommandHandler = new CommandHandler_Button1();
Отдельно всё работает. создаётся кнопка по нажатию кнопки MessageBox вызывается
Отдельно по команде линии рисуются. Однако по нажатию кнопки рисоваться не хочет.
Пробовал не передавать CommandParameter а просто в Execute прописать рисование тоже ничего не рисуется.
Как правильно запустить?