1.一般创建对象之前,会先检查一遍当前文档中是否已存在对象:
/// <summary>
/// 初始化线样式
/// </summary>
private void InitializeGraphicsStyle()
{
//获得设置里面的线
var lineCategory = _document.Settings.Categories.get_Item(BuiltInCategory.OST_Lines);
//得到这个线下面所有的线样式
var subcats = lineCategory.SubCategories;
foreach (Category item in subcats)
{
if (item.Name == "辅助轴线")
{
//通过样式名称,查找我们自己设定的样式
_lineStyle = item;
}
}
if (_lineStyle == null)
{
//所有的线型图案,即实线、中心线、点划线等
var linePatternElements = _document.CollectAll<LinePatternElement>();
var linePattern = linePatternElements.FirstOrDefault(x=>x.Name=="点划线");
_lineStyle = CreateNewLineType(new Color(255,0,0),1, linePattern.Id);
}
}
/// <summary>
/// 创建新的线样式
/// </summary>
/// <param name="newColor"></param>
/// <param name="weight"></param>
/// <param name="linePatternId"></param>
/// <returns></returns>
private Category CreateNewLineType(Color newColor, int weight,ElementId linePatternId)
{
Category newCategory = null;
using (var ts = new Transaction(_document, "创建线样式"))
{
ts.Start();
Category lineCategory = _document.Settings.Categories.get_Item(BuiltInCategory.OST_Lines);
newCategory = _document.Settings.Categories.NewSubcategory(lineCategory, "辅助轴线");
//设置线的颜色
newCategory.LineColor = newColor;
//设置线的线型
newCategory.SetLinePatternId(linePatternId, GraphicsStyleType.Projection);
//设置线宽
newCategory.SetLineWeight(weight, GraphicsStyleType.Projection);
ts.Commit();
}
return newCategory;
}