using System;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Windows;
using Autodesk.AutoCAD.Colors;
// This line is not mandatory, but improves loading performances
[assembly: CommandClass(typeof(Rivilis.SetSectionSettings))]
namespace Rivilis
{
public class SetSectionSettings
{
[CommandMethod("SetSectionColor")]
public void MyCommand()
{
Document doc = Application.DocumentManager.MdiActiveDocument;
if (doc == null) return;
Editor ed = doc.Editor;
PromptEntityOptions peo = new PromptEntityOptions("\nВыберите сечение: ");
peo.SetRejectMessage("\nЭто не сечение!");
peo.AddAllowedClass(typeof(Section), true);
PromptEntityResult per = ed.GetEntity(peo);
if (per.Status != PromptStatus.OK) return;
ObjectId idSecSets = ObjectId.Null;
using (Transaction tr = doc.TransactionManager.StartOpenCloseTransaction())
{
Section sec = tr.GetObject(per.ObjectId, OpenMode.ForRead) as Section;
idSecSets = sec.Settings;
tr.Commit();
}
using (Transaction tr = doc.TransactionManager.StartOpenCloseTransaction())
{
SectionSettings secset = tr.GetObject(idSecSets, OpenMode.ForWrite) as SectionSettings;
Color clr = secset.Color(SectionType.LiveSection, SectionGeometry.IntersectionFill);
ColorDialog cd = new ColorDialog();
cd.Color = clr;
System.Windows.Forms.DialogResult dr = cd.ShowDialog();
if (dr != System.Windows.Forms.DialogResult.OK) return;
ed.WriteMessage("\nВыбран цвет: " + cd.Color.ToString());
clr = cd.Color;
// Определяет цвет чего мы меняем
secset.SetColor(SectionType.LiveSection, SectionGeometry.IntersectionFill, clr);
tr.Commit();
}
short _cmdecho = (short)Application.GetSystemVariable("CMDECHO");
Application.SetSystemVariable("CMDECHO", 0);
ed.Command("_LIVESECTION", per.ObjectId); // Отключаем LIVESECTION
ed.Command("_LIVESECTION", per.ObjectId); // Включаем LIVESECTION
Application.SetSystemVariable("CMDECHO", _cmdecho);
}
}
}