如何在 Revit API 中显示创建的立方体?
How can I display the created cube in Revit API?
这听起来像是一个非常基本的问题,对此我深表歉意 - 但是,我几乎找不到任何关于此的信息。
我正在尝试创建一个由模型线组成的立方体并将其放入绘图中的命令。对于多维数据集的创建,我在 Jeremy Tammik 的博客上找到了一些关于此的文档并获得了以下代码:
static Solid CreateCube(double d)
{
return CreateRectangularPrism(
XYZ.Zero, d, d, d);
}
static Solid CreateRectangularPrism(
XYZ center,
double d1,
double d2,
double d3)
{
List<Curve> profile = new List<Curve>();
XYZ profile00 = new XYZ(-d1 / 2, -d2 / 2, -d3 / 2);
XYZ profile01 = new XYZ(-d1 / 2, d2 / 2, -d3 / 2);
XYZ profile11 = new XYZ(d1 / 2, d2 / 2, -d3 / 2);
XYZ profile10 = new XYZ(d1 / 2, -d2 / 2, -d3 / 2);
profile.Add(Line.CreateBound(profile00, profile01));
profile.Add(Line.CreateBound(profile01, profile11));
profile.Add(Line.CreateBound(profile11, profile10));
profile.Add(Line.CreateBound(profile10, profile00));
CurveLoop curveLoop = CurveLoop.Create(profile);
SolidOptions options = new SolidOptions(
ElementId.InvalidElementId,
ElementId.InvalidElementId);
return GeometryCreationUtilities
.CreateExtrusionGeometry(
new CurveLoop[] { curveLoop },
XYZ.BasisZ, d3, options);
}
在Execute()方法中,我只有这个:
using (Transaction tx = new Transaction(doc))
{
tx.Start("create cube");
Solid cube = CreateCube(100);
// What shall I do next??
tx.Commit();
}
此时我被卡住了,因为我似乎找不到任何方法在绘图中显示这个立方体。此外,让我更加困惑的是立方体的 Id 设置为 -1。我还检查了它在代码中的可见性,它似乎是正确的,但是,它没有出现在绘图中的任何地方。我错过了什么?怎样才能让它出现在绘图中?
非常欢迎任何提示,文档是代码!
谢谢。
您创建了一个 GeometryObject 但没有 Revit Element,那么您将看不到任何对象,因为没有要显示的数据库对象。
您可以创建一个 DirectShape 并设置您创建的几何体:
var ds = DirectShape.CreateElement(revitDocument, new ElementId(BuiltInCategory.OST_GenericModel));
ds.SetName("Cube");
ds.SetShape(new List<GeometryObject>() { cube });
这听起来像是一个非常基本的问题,对此我深表歉意 - 但是,我几乎找不到任何关于此的信息。
我正在尝试创建一个由模型线组成的立方体并将其放入绘图中的命令。对于多维数据集的创建,我在 Jeremy Tammik 的博客上找到了一些关于此的文档并获得了以下代码:
static Solid CreateCube(double d)
{
return CreateRectangularPrism(
XYZ.Zero, d, d, d);
}
static Solid CreateRectangularPrism(
XYZ center,
double d1,
double d2,
double d3)
{
List<Curve> profile = new List<Curve>();
XYZ profile00 = new XYZ(-d1 / 2, -d2 / 2, -d3 / 2);
XYZ profile01 = new XYZ(-d1 / 2, d2 / 2, -d3 / 2);
XYZ profile11 = new XYZ(d1 / 2, d2 / 2, -d3 / 2);
XYZ profile10 = new XYZ(d1 / 2, -d2 / 2, -d3 / 2);
profile.Add(Line.CreateBound(profile00, profile01));
profile.Add(Line.CreateBound(profile01, profile11));
profile.Add(Line.CreateBound(profile11, profile10));
profile.Add(Line.CreateBound(profile10, profile00));
CurveLoop curveLoop = CurveLoop.Create(profile);
SolidOptions options = new SolidOptions(
ElementId.InvalidElementId,
ElementId.InvalidElementId);
return GeometryCreationUtilities
.CreateExtrusionGeometry(
new CurveLoop[] { curveLoop },
XYZ.BasisZ, d3, options);
}
在Execute()方法中,我只有这个:
using (Transaction tx = new Transaction(doc))
{
tx.Start("create cube");
Solid cube = CreateCube(100);
// What shall I do next??
tx.Commit();
}
此时我被卡住了,因为我似乎找不到任何方法在绘图中显示这个立方体。此外,让我更加困惑的是立方体的 Id 设置为 -1。我还检查了它在代码中的可见性,它似乎是正确的,但是,它没有出现在绘图中的任何地方。我错过了什么?怎样才能让它出现在绘图中?
非常欢迎任何提示,文档是代码!
谢谢。
您创建了一个 GeometryObject 但没有 Revit Element,那么您将看不到任何对象,因为没有要显示的数据库对象。
您可以创建一个 DirectShape 并设置您创建的几何体:
var ds = DirectShape.CreateElement(revitDocument, new ElementId(BuiltInCategory.OST_GenericModel));
ds.SetName("Cube");
ds.SetShape(new List<GeometryObject>() { cube });