//функция срабатывающая при обявлении бродкаста "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(); } } } }