Класс для работы со слоем в Autocad .NET API
/// <summary>
/// Блокировать слой.
/// </summary>
/// <param name=»isLocked»></param>
/// <returns></returns>
public Layer SetLocked(bool isLocked = true)
{
this.isLocked = isLocked;
return this;
}
/// <summary>
/// Выключить / включить слой.
/// </summary>
/// <param name=»isOff»></param>
/// <returns></returns>
public Layer SetOff(bool isOff = true)
{
this.isOff = isOff;
return this;
}
/// <summary>
/// Заморозить / разморозить слой.
/// </summary>
/// <param name=»isFrozen»></param>
/// <returns></returns>
public Layer SetFrozen(bool isFrozen = true)
{
this.isFrozen = isFrozen;
return this;
}
/// <summary>
/// Заморозить / разморозить для новых видовых экранов.
/// </summary>
/// <param name=»flag»></param>
/// <returns></returns>
public Layer SetViewportVisibility(bool flag = true)
{
this.viewportVisibility = flag;
return this;
}
/// <summary>
/// Скрыть / отобразить слой.
/// </summary>
/// <param name=»flag»></param>
/// <returns></returns>
public Layer SetHidden(bool flag = true)
{
this.isHidden = flag;
return this;
}
/// <summary>
/// Переместить примитив на текущий слой.
/// </summary>
/// <param name=»entity»></param>
public void MoveToCurrentLayer(Entity entity)
{
using (Transaction transaction = Database.TransactionManager.StartTransaction())
{
LayerTable layerTable;
layerTable = transaction.GetObject(Database.LayerTableId, OpenMode.ForRead) as LayerTable;
if (layerTable.Has(this.name) == true)
{
layerTable.UpgradeOpen();
entity.Layer = this.name;
}
transaction.Commit();
}
}
/// <summary>
/// Установить активным основной слой.
/// </summary>
public void SetActiveLayerZero()
{
using (Transaction transaction = Database.TransactionManager.StartTransaction())
{
Database.Clayer = Database.LayerZero;
transaction.Commit();
}
}
}
}
Получился такой небольшой, но полезный класс.
Листинг интерфейса файла Acad.cs.
using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.DatabaseServices; namespace dsACAD { public abstract class Acad { private static Document document; private static Database database; public static Document Document { get => document; } public static Database Database { get => database; } public Acad() { document = Application.DocumentManager.MdiActiveDocument; database = Document.Database; } } }
В данном случае интерфейс содержит свойства (только для чтения), которые хранят такие объекты как текущий документ и базу данных в Autocad. Теперь нет необходимости в каждом новом классе обращаться к ним через пространство Application в Autocad.
Примеры использования.
// Изменяем форматирование границ здания Layer lr = new Layer("DS_Контуры"); lr .SetColorFromIndex(18) .SetLineWeight(LineWeight.LineWeight035) .SetDescription("Содержит все контуры.") .Create();
Layer dlr = new Layer("DS_Направляющие_П"); dlr .SetColorFromIndex(5) .Create();
ObjectId objectId; using (Polyline polyline = new Polyline()) { //... objectId = polyline.Id; if (layerName.Length > 0) { Layer layer = new Layer(layerName); layer.MoveToCurrentLayer(polyline); } return objectId; }
Вот таким простым способом мы упростили себе будущую работу со слоями в Autocad. Конечно же, Вы можете реализовать класс по другому или добавить свои полезные функции.