完整项目源代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Autodesk.Revit.UI;
using Autodesk.Revit.DB;
using Autodesk.Revit.Attributes;
namespace ClassLibrary3
{
[Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)]
public class Class1 : IExternalCommand
{
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
UIDocument uidoc = commandData.Application.ActiveUIDocument;
Document doc = uidoc.Document;
ElementId levelId = new ElementId(311);
ElementId wallTypeId = new ElementId(397);
IList<Curve> curves = new List<Curve>();
//创建第一面墙
XYZ[] vertexes = new XYZ[] { new XYZ(0, 0, 0), new XYZ(0, 100, 0), new XYZ(0, 0, 100) };
for(int ii = 0;ii < vertexes.Length;ii++)
{
if (ii != vertexes.Length - 1)
curves.Add(Line.CreateBound(vertexes[ii], vertexes[ii + 1]));
else
curves.Add(Line.CreateBound(vertexes[ii], vertexes[0]));
}
Wall wall = null;
using (Transaction transaction = new Transaction(doc))
{
transaction.Start("Create wall 1");
wall = Wall.Create(doc, curves, wallTypeId, levelId, false, new XYZ(-1, 0, 0));
transaction.Commit();
}
//创建第二面墙,面朝向相反
curves.Clear();
vertexes = new XYZ[] { new XYZ(0, 0, 100), new XYZ(0, 100, 100), new XYZ(0, 100, 0) };
for(int ii = 0;ii < vertexes.Length;ii++)
{
if (ii != vertexes.Length - 1)
curves.Add(Line.CreateBound(vertexes[ii], vertexes[ii + 1]));
else
curves.Add(Line.CreateBound(vertexes[ii], vertexes[0]));
}
using (Transaction transaction = new Transaction(doc))
{
transaction.Start("Create wall 2");
wall = Wall.Create(doc, curves, wallTypeId, levelId, false, new XYZ(1, 0, 0));
transaction.Commit();
}
return Result.Succeeded;
}
}
}
效果:
参考文献:
《Autodesk Revit 二次开发基础教程》