четверг, 5 июня 2014 г.

Стили мультилиний в AutoCAD

Заметка содержит пример программного создания и детальной настройки стиля мультилиний в AutoCAD.

В результате работы кода (команда CreateMultilineStyle) будет создан новый стиль мультилиний:



В коде каждая изменяемая нами опция настроек помечена комментарием, содержащим наименование этой опции в англоязычной версии AutoCAD.

/* MultilineStyleSample.cs
 * © Андрей Бушман, 2014 
 * Пример создания стиля мультилиний.
 */
using System;
 
using cad = Autodesk.AutoCAD.ApplicationServices
.Application;
using Ap = Autodesk.AutoCAD.ApplicationServices;
using Db = Autodesk.AutoCAD.DatabaseServices;
using Ed = Autodesk.AutoCAD.EditorInput;
using Rt = Autodesk.AutoCAD.Runtime;
using Clr = Autodesk.AutoCAD.Colors;
 
[assembly: Rt.CommandClass(typeof(Bushman.CAD
  .Samples.Styles.MultilineStyleSample))]
 
namespace Bushman.CAD.Samples.Styles {
 
  public class MultilineStyleSample {
 
    [Rt.CommandMethod("CreateMultilineStyle", 
      Rt.CommandFlags.Modal)]
    public void createmlinestyle() {
 
      Ap.Document doc = cad.DocumentManager
        .MdiActiveDocument;
      if(doc == null)
        return;
      Ed.Editor ed = doc.Editor;
      Db.Database db = doc.Database;
 
      using(doc.LockDocument()) {
        using(Db.Transaction tr =
        db.TransactionManager.StartTransaction()) 
        {
 
          Db.DBDictionary mlDict =
            (Db.DBDictionary)tr.GetObject(
            db.MLStyleDictionaryId,
            Db.OpenMode.ForWrite);
 
          String mlineStyleName = "Пример";
 
          if(!mlDict.Contains(mlineStyleName)) {
 
            Db.MlineStyle mlineStyle =
              new Db.MlineStyle();
            // Multiline Style name
            mlineStyle.Name = mlineStyleName;
            mlineStyle.Description =
              "Некоторое описание";
 
            mlDict.SetAt(mlineStyleName,
              mlineStyle);
            tr.AddNewlyCreatedDBObject(
              mlineStyle, true);
 
            Double angleGrad = 90.0;
            Double angleRadian = angleGrad
              * Math.PI / 180; // angle
 
            // Start line
            mlineStyle.StartSquareCap = true;
            // Start Outer arcs
            mlineStyle.StartRoundCap = true;
            // Start Inner arcs
            mlineStyle.StartInnerArcs = true;
            // Start angle
            mlineStyle.StartAngle = angleRadian;
 
            // End line
            mlineStyle.EndSquareCap = true;
            // End Outer arcs
            mlineStyle.EndRoundCap = true;
            // End Inner arcs
            mlineStyle.EndInnerArcs = true;
            // End angle
            mlineStyle.EndAngle = angleRadian;
 
            Clr.Color color = Clr.Color.FromRgb(
              255, 0, 0);
 
            // Fill color
            mlineStyle.Filled = true;
            mlineStyle.FillColor = color;
 
            // Display joints
            mlineStyle.ShowMiters = true;
 
            Db.MlineStyleElement element =
              new Db.MlineStyleElement(0.15, 
                color, db.Celtype);
            // First element
            mlineStyle.Elements.Add(element, true
              );
 
            element = new Db.MlineStyleElement(
              -0.15, color, db.Celtype);
 
            mlineStyle.Elements.Add(element, 
              false); // Second element
          }
          tr.Commit();
        }
      }
    }
  }
}

Комментариев нет: