using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.Windows;
using System;
using System.Linq;
namespace AcObjPropPaletteSample
{
public class CirclesPaletteCmd
{
static string _paletteGUID = "0E225673-BD26-4ED9-8E75-44E9EE19EEE5";
/// <summary>
/// Поле для хранения ссылки на палитру
/// </summary>
static PaletteSet _paletteSet;
static CirclesEditor _editorControl;
[CommandMethod("DZagCirclesPalette")]
public static void PaletteOnOff()
{
if (_paletteSet == null)
{
_paletteSet = new PaletteSet
// Название палитры
("Свойства окружностей",
// Команда открытия палитры
"DZagCirclesPalette",
// GUID палитры
new Guid(_paletteGUID));
_editorControl = new CirclesEditor();
_paletteSet.AddVisual("Свойства окружностей", _editorControl);
_paletteSet.Style =
PaletteSetStyles.ShowPropertiesMenu
| PaletteSetStyles.ShowAutoHideButton
| PaletteSetStyles.ShowCloseButton
| PaletteSetStyles.Snappable;
_paletteSet.DockEnabled =
DockSides.None | DockSides.Left | DockSides.Right;
_paletteSet.MinimumSize = new System.Drawing.Size(300, 500);
foreach (Document doc in Application.DocumentManager)
{
doc.ImpliedSelectionChanged -= doc_ImpliedSelectionChanged;
doc.ImpliedSelectionChanged += doc_ImpliedSelectionChanged;
}
Application.DocumentManager.DocumentCreated += DocumentManager_DocumentCreated;
Application.DocumentManager.DocumentActivated += DocumentManager_DocumentActivated;
_paletteSet.Visible = true;
}
else
{
_paletteSet.Visible = !_paletteSet.Visible;
}
Document adoc = Application.DocumentManager.MdiActiveDocument;
if (adoc != null)
ShowPropsSelImpliedParts(adoc);
}
///*
/// <summary>
/// Обработка реакции на выбор объектов - отобразить данные в палитре
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
static void doc_ImpliedSelectionChanged(object sender, EventArgs e)
{
ShowPropsSelImpliedParts(sender as Document);
}
///*
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
static void DocumentManager_DocumentActivated
(object sender, DocumentCollectionEventArgs e)
{
ShowPropsSelImpliedParts(e.Document);
}
///*
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
static void DocumentManager_DocumentCreated
(object sender, DocumentCollectionEventArgs e)
{
if (e.Document != null)
{
e.Document.ImpliedSelectionChanged -= doc_ImpliedSelectionChanged;
e.Document.ImpliedSelectionChanged += doc_ImpliedSelectionChanged;
}
}
static void ShowPropsSelImpliedParts(Document adoc)
{
if (_paletteSet != null && _paletteSet.Visible)
{
_editorControl.Visibility = System.Windows.Visibility.Collapsed;
Editor ed = adoc.Editor;
// Получаем предварительно выбранные объекты
PromptSelectionResult impSelRes = ed.SelectImplied();
if (impSelRes.Status != PromptStatus.OK) return;
ObjectId[] objIds = impSelRes.Value.GetObjectIds();
// Если хотя бы один объект коллекции
if (!objIds.All(item =>
// Не является окружностью
item.ObjectClass.DxfName.Equals
("CIRCLE", StringComparison.InvariantCultureIgnoreCase)))
{
return;
}
_editorControl.Visibility = System.Windows.Visibility.Visible;
_editorControl.SetData(new CirclesSummaryProps(objIds));
}
}
}
}