namespace RevitDemo
{
[Transaction(TransactionMode.Manual)]
public class Class1 : IExternalCommand
{
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
UIApplication uiApp = commandData.Application;
UIDocument uiDoc = uiApp.ActiveUIDocument;
Autodesk.Revit.DB.Document doc = uiDoc.Document;
Transaction trans = new Transaction(doc, "ExComm");
trans.Start();
//获取要创建的线样式的parent
Category lineCategory = doc.Settings.Categories.get_Item(BuiltInCategory.OST_Lines);
//获取隐藏线的对象样式,用于给新的线样式设置线型
Category lineCategory1 = doc.Settings.Categories.get_Item(BuiltInCategory.OST_LinesHiddenLines);
//创建新的线样式
Category newCategory = doc.Settings.Categories.NewSubcategory(lineCategory, "用已有线型创建的样式");
Autodesk.Revit.DB.Color newColor = new Autodesk.Revit.DB.Color(red: 255, green: 0, blue: 0);
newCategory.LineColor = newColor;//设置颜色
newCategory.SetLineWeight(4, GraphicsStyleType.Projection);//设置线宽
newCategory.SetLinePatternId(lineCategory1.GetLinePatternId(GraphicsStyleType.Projection), GraphicsStyleType.Projection);//设置线型
//创建新的线样式
Category newCategory1 = doc.Settings.Categories.NewSubcategory(lineCategory, "用新的线型创建的样式");
Autodesk.Revit.DB.Color newColor1 = new Autodesk.Revit.DB.Color(red: 0, green: 255, blue: 0);
newCategory1.LineColor = newColor1;//设置颜色
newCategory1.SetLineWeight(9, GraphicsStyleType.Projection);//设置线宽
//创建新的线型
LinePattern linePattern = new LinePattern("新的线型");
List<LinePatternSegment> segments = new List<LinePatternSegment> //线型的图案由划线,点,和空格组成,开头必须为划线或者点,每个划线和点后面必须只跟一个空格
{
new LinePatternSegment(LinePatternSegmentType.Dash, 2 / 304.8),
new LinePatternSegment(LinePatternSegmentType.Space, 2 / 304.8),
new LinePatternSegment(LinePatternSegmentType.Dot, 0),
new LinePatternSegment(LinePatternSegmentType.Space, 2 / 304.8),
new LinePatternSegment(LinePatternSegmentType.Dot, 0),
new LinePatternSegment(LinePatternSegmentType.Space, 2 / 304.8)
};
linePattern.SetSegments(segments);
//将线型加入到文档中
LinePatternElement linePatternElement = LinePatternElement.Create(doc, linePattern);
//设置线样式的线型
newCategory1.SetLinePatternId(linePatternElement.Id, GraphicsStyleType.Projection);//设置线型
//GraphicsStyle gs = newCategory.GetGraphicsStyle(GraphicsStyleType.Projection);//
//DetailCurve DetailLine = doc.Create.NewDetailCurve(viewSection, line);
//DetailLine.LineStyle = gs;
#endregion
trans.Commit();
return Result.Succeeded;
}
}