本文整理汇总了C#中ExporterIFC.RegisterIFCSpaceBoundary方法的典型用法代码示例。如果您正苦于以下问题:C# ExporterIFC.RegisterIFCSpaceBoundary方法的具体用法?C# ExporterIFC.RegisterIFCSpaceBoundary怎么用?C# ExporterIFC.RegisterIFCSpaceBoundary使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ExporterIFC
的用法示例。
在下文中一共展示了ExporterIFC.RegisterIFCSpaceBoundary方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: ExportSpatialElement
/// <summary>
/// Export spatial elements, including rooms, areas and spaces. 1st level space boundaries.
/// </summary>
/// <param name="exporterIFC">
/// The ExporterIFC object.
/// </param>
/// <param name="spatialElement">
/// The spatial element.
/// </param>
/// <param name="productWrapper">
/// The IFCProductWrapper.
/// </param>
public static void ExportSpatialElement(ExporterIFC exporterIFC, SpatialElement spatialElement, IFCProductWrapper productWrapper)
{
//quick reject
bool isArea = spatialElement is Area;
if (isArea)
{
if (!IsAreaGrossInterior(exporterIFC, spatialElement))
return;
}
IFCFile file = exporterIFC.GetFile();
using (IFCTransaction tr = new IFCTransaction(file))
{
ElementId levelId = spatialElement.Level != null ? spatialElement.Level.Id : ElementId.InvalidElementId;
using (IFCPlacementSetter setter = IFCPlacementSetter.Create(exporterIFC, spatialElement, null, null, levelId))
{
CreateIFCSpace(exporterIFC, spatialElement, productWrapper, setter);
// Do not create boundary information, or extra property sets.
if (spatialElement is Area)
{
tr.Commit();
return;
}
if (exporterIFC.SpaceBoundaryLevel == 1)
{
Document document = spatialElement.Document;
IFCLevelInfo levelInfo = exporterIFC.GetLevelInfo(levelId);
double baseHeightNonScaled = levelInfo.Elevation;
SpatialElementGeometryResults spatialElemGeomResult = s_SpatialElemGeometryCalculator.CalculateSpatialElementGeometry(spatialElement);
Solid spatialElemGeomSolid = spatialElemGeomResult.GetGeometry();
FaceArray faces = spatialElemGeomSolid.Faces;
foreach (Face face in faces)
{
IList<SpatialElementBoundarySubface> spatialElemBoundarySubfaces = spatialElemGeomResult.GetBoundaryFaceInfo(face);
foreach (SpatialElementBoundarySubface spatialElemBSubface in spatialElemBoundarySubfaces)
{
if (spatialElemBSubface.SubfaceType == SubfaceType.Side)
continue;
if (spatialElemBSubface.GetSubface() == null)
continue;
ElementId elemId = spatialElemBSubface.SpatialBoundaryElement.LinkInstanceId;
if (elemId == ElementId.InvalidElementId)
{
elemId = spatialElemBSubface.SpatialBoundaryElement.HostElementId;
}
Element boundingElement = document.get_Element(elemId);
if (boundingElement == null)
continue;
bool isObjectExt = CategoryUtil.IsElementExternal(boundingElement);
IFCGeometryInfo info = IFCGeometryInfo.CreateSurfaceGeometryInfo(spatialElement.Document.Application.VertexTolerance);
Face subFace = spatialElemBSubface.GetSubface();
ExporterIFCUtils.CollectGeometryInfo(exporterIFC, info, subFace, XYZ.Zero, false);
IFCAnyHandle ifcOptionalHnd = IFCAnyHandle.Create();
foreach (IFCAnyHandle surfaceHnd in info.GetSurfaces())
{
IFCAnyHandle connectionGeometry = file.CreateConnectionSurfaceGeometry(surfaceHnd, ifcOptionalHnd);
IFCSpaceBoundary spaceBoundary = IFCSpaceBoundary.Create(spatialElement.Id, boundingElement.Id, connectionGeometry, IFCSpaceBoundaryType.Physical, isObjectExt);
if (!ProcessIFCSpaceBoundary(exporterIFC, spaceBoundary, file))
exporterIFC.RegisterIFCSpaceBoundary(spaceBoundary);
}
}
}
IList<IList<BoundarySegment>> roomBoundaries = spatialElement.GetBoundarySegments(ExporterIFCUtils.GetSpatialElementBoundaryOptions(exporterIFC, spatialElement));
double roomHeight = GetHeight(spatialElement, exporterIFC.LinearScale, levelInfo);
XYZ zDir = new XYZ(0, 0, 1);
foreach (IList<BoundarySegment> roomBoundaryList in roomBoundaries)
{
foreach (BoundarySegment roomBoundary in roomBoundaryList)
{
Element boundingElement = roomBoundary.Element;
if (boundingElement == null)
continue;
//.........这里部分代码省略.........
示例2: CreateIFCSpaceBoundary
/// <summary>
/// Creates SpaceBoundary from a bounding element.
/// </summary>
/// <param name="file">
/// The IFC file.
/// </param>
/// <param name="exporterIFC">
/// The ExporterIFC object.
/// </param>
/// <param name="spatialElement">
/// The spatial element.
/// </param>
/// <param name="boundingElement">
/// The bounding element.
/// </param>
/// <param name="connectionGeometry">
/// The connection geometry handle.
/// </param>
static void CreateIFCSpaceBoundary(IFCFile file, ExporterIFC exporterIFC, SpatialElement spatialElement, Element boundingElement, IFCAnyHandle connectionGeometry)
{
IFCSpaceBoundaryType physOrVirt = IFCSpaceBoundaryType.Physical;
if (boundingElement is CurveElement)
physOrVirt = IFCSpaceBoundaryType.Virtual;
else if (boundingElement is Autodesk.Revit.DB.Architecture.Room)
physOrVirt = IFCSpaceBoundaryType.Undefined;
bool isObjectExt = CategoryUtil.IsElementExternal(boundingElement);
IFCSpaceBoundary spaceBoundary = IFCSpaceBoundary.Create(spatialElement.Id, boundingElement.Id, connectionGeometry, physOrVirt, isObjectExt);
if (!ProcessIFCSpaceBoundary(exporterIFC, spaceBoundary, file))
exporterIFC.RegisterIFCSpaceBoundary(spaceBoundary);
}