// attempting to load the shapeGeometry from the database; // public static WpfMeshGeometry3D GetGeometry(IIfcShapeRepresentation rep, XbimModelPositioningCollection positions, Material mat, bool wcsAdjust) { var productContexts = rep.OfProductRepresentation?.OfType<IIfcProductDefinitionShape>().SelectMany(x => x.ShapeOfProduct); var representationLabels = rep.Items.Select(x => x.EntityLabel); var selModel = rep.Model; var modelTransform = positions[selModel].Transform; return GetRepresentationGeometry(mat, productContexts, representationLabels, selModel, modelTransform, wcsAdjust); }
// attempting to load the shapeGeometry from the database; // public static WpfMeshGeometry3D GetGeometry(IIfcShapeRepresentation rep, XbimModelPositioningCollection positions, Material mat) { var placementTree = new XbimPlacementTree(rep.Model); var tgt = new WpfMeshGeometry3D(mat, mat); tgt.BeginUpdate(); var prodShapes = rep.OfProductRepresentation.OfType <IIfcProductDefinitionShape>(); foreach (var prodShape in prodShapes) { if (prodShape?.ShapeOfProduct == null) { continue; } foreach (var contextualProduct in prodShape?.ShapeOfProduct) { var trsf = placementTree[contextualProduct.ObjectPlacement.EntityLabel]; var modelTransform = positions[rep.Model].Transform; using (var geomstore = rep.Model.GeometryStore) using (var geomReader = geomstore.BeginRead()) { var dispitems = rep.Items.Select(x => x.EntityLabel); var r2 = geomReader.ShapeGeometries.Where(x => dispitems.Contains(x.IfcShapeLabel)); foreach (IXbimShapeGeometryData shapegeom in r2) { if (shapegeom.Format != (byte)XbimGeometryType.PolyhedronBinary) { continue; } // Debug.WriteLine($"adding {shapegeom.ShapeLabel} at {DateTime.Now.ToLongTimeString()}"); var transform = trsf * modelTransform; tgt.Add( shapegeom.ShapeData, 453, // shapeInstance.IfcTypeId, contextualProduct.EntityLabel, // shapeInstance.IfcProductLabel, -1, // shapeInstance.InstanceLabel, transform, (short)rep.Model.UserDefinedId ); } } } } tgt.EndUpdate(); return(tgt); }