Класс для работы со слоем в 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;

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Добавить комментарий

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: