//функция срабатывающая при обявлении бродкаста "generate_planchet"
//подписка на бродкаст осудествляется в plugin-файле в разделе "broadcasts"
[cmd("tutorial_generate_planchet")]
private void GeneratePlanchet(GeneratePlanchetEventArgs e)
{
// проверяем принадлежит ли слой нашей модели
if (e.Layer is ModelLayer)
{
// отрисовываем примитивы
GenerateModelPlanchet(e);
e.Handled = true;
}
}
///
/// Формирование примитивов на основе данных полученных из модели
/// и добавление примитивов в чертёж
///
///
private void GenerateModelPlanchet(GeneratePlanchetEventArgs e)
{
if (e.Layer is ModelLayer layer)
{
// определяем префикс имени слоя
var path = e.Path;
if (e.SaveFullPath)
{
path += ".";
}
else
{
path = string.Empty;
}
// если слой включен и относится к нашему типу модели
// делаем активным необходимый слой чертежа и добавляем примитивы в чертёж
if (layer.Visible && layer.Model is Model model)
{
var modelSpace = e.Model;
var drawing = modelSpace.Drawing;
// запоминаем настройки чертежа и сбрасываем к значениям по умолчанию
drawing.PushState();
try
{
drawing.ResetStateDefault();
var layerName = path + layer.Name;
var dwgLayer = drawing.Layers[layerName] ?? drawing.Layers.Add(layerName);
drawing.ActiveLayer = dwgLayer;
for (int i = 0; i < model.Count; i++)
{
var points = model[i];
var vertices = new List();
for (int j = 0; j < points.Count; j++)
{
var point = points[j];
var text = modelSpace.AddText(j.ToString(), point, 2, 1, 0, 0);
text.Color = new CadColor(Color.Orange);
vertices.Add(point);
}
var pline = modelSpace.AddPolyline(vertices);
pline.Color = CadColor.Yellow;
}
}
finally
{
// восстанавливаем предыдущие настройки чертежа
drawing.PopState();
}
}
}
}