Класс для работы со слоем в Autocad .NET API
Недавно писал небольшой плагин для Autocad 2017. Задача была не сложная, наносить вертикальные линии в замкнутом контуре с определенным шагом. Спустя некоторое время, понял для себя, что удобнее всего было бы для таких задач использовать некоторый класс-обертку, который бы облегчал работу со слоем, отрисовкой примитивов и т.п.
Сегодня как раз и поговорим о подобном классе, облегчающим работу со слоями.
Естественно, для правильной работы подключаем ссылки на такие библиотеки как AcCoreMgd, AcDbMgd и AcMgd. Для своимх созданных классов я буду использовать пространство имен dsACAD. Мой новый класс будет работать со слоями, поэтому я его назову Layer (применяется интерфейс Acad).
Выкладываю полный листинг файла Layer.cs.
using Autodesk.AutoCAD.Colors;
using Autodesk.AutoCAD.DatabaseServices;
using System;namespace dsACAD
{
public class Layer : Acad
{
private readonly string name;/// <summary>
/// Цвет слоя.
/// </summary>
private Color color;/// <summary>
/// Пояснение для слоя.
/// </summary>
private string description;/// <summary>
/// Вес линий.
/// </summary>
private LineWeight lineWeight;/// <summary>
/// Прозрачность слоя.
/// </summary>
private Transparency transparency;/// <summary>
/// Тип линий.
/// </summary>
private ObjectId linetype;/// <summary>
/// Флаг заблокирован / разблокирован.
/// </summary>
private bool isLocked = false;/// <summary>
/// Флаг вкл / выкл.
/// </summary>
private bool isOff = false;/// <summary>
/// Флаг заморозки / разморозки.
/// </summary>
private bool isFrozen = false;/// <summary>
/// Флаг заморозки на новых видовых экранах.
/// </summary>
private bool viewportVisibility = false;/// <summary>
/// Флаг скрытия / отображения слоя.
/// </summary>
private bool isHidden = false;/// <summary>
/// Конструктор.
/// </summary>
/// <param name="name"></param>
public Layer(string name)
{
this.name = name;
}/// <summary>
/// Создать слой.
/// </summary>
/// <returns></returns>
public bool Create()
{
using (Transaction transaction = Database.TransactionManager.StartTransaction())
{
LayerTable layerTable;
layerTable = transaction.GetObject(Database.LayerTableId, OpenMode.ForRead) as LayerTable;if (layerTable.Has(name) == false)
{
layerTable.UpgradeOpen();using (LayerTableRecord layerTableRecord = new LayerTableRecord())
{
if (this.color != null)
{
layerTableRecord.Color = this.color;
}if (this.lineWeight != LineWeight.ByLineWeightDefault)
{
layerTableRecord.LineWeight = this.lineWeight;
}layerTableRecord.IsOff = this.isOff;
layerTableRecord.IsFrozen = this.isFrozen;
layerTableRecord.IsLocked = this.isLocked;
layerTableRecord.ViewportVisibilityDefault = this.viewportVisibility;// Название слоя
layerTableRecord.Name = name;layerTable.Add(layerTableRecord);
layerTableRecord.IsHidden = this.isHidden;