private void GenerateWireFrameGeometry(IntPtr ifcModel, IFCItem ifcItem) { if (ifcItem.ifcID != IntPtr.Zero) { IntPtr noVertices = IntPtr.Zero, noIndices = IntPtr.Zero; _ifcEngine.InitializeModellingInstance(ifcModel, ref noVertices, ref noIndices, 0, ifcItem.ifcID); if (noVertices != IntPtr.Zero && noIndices != IntPtr.Zero) { ifcItem.noVerticesForWireFrame = noVertices.ToInt32(); ifcItem.verticesForWireFrame = new float[3 * noVertices.ToInt32()]; ifcItem.indicesForWireFrame = new int[noIndices.ToInt32()]; float[] pVertices = new float[noVertices.ToInt32() * 3]; _ifcEngine.FinalizeModelling(ifcModel, pVertices, ifcItem.indicesForWireFrame, IntPtr.Zero); int i = 0; while (i < noVertices.ToInt32()) { ifcItem.verticesForWireFrame[3 * i + 0] = pVertices[3 * i + 0]; ifcItem.verticesForWireFrame[3 * i + 1] = pVertices[3 * i + 1]; ifcItem.verticesForWireFrame[3 * i + 2] = pVertices[3 * i + 2]; i++; } ; ifcItem.noPrimitivesForWireFrame = 0; ifcItem.indicesForWireFrameLineParts = new int[2 * noIndices.ToInt32()]; int faceCnt = _ifcEngine.GetConceptualFaceCount(ifcItem.ifcID).ToInt32(); for (int j = 0; j < faceCnt; j++) { IntPtr startIndexFacesPolygons = IntPtr.Zero, noIndicesFacesPolygons = IntPtr.Zero, nonValue = IntPtr.Zero, nonValue1 = IntPtr.Zero, nonValue2 = IntPtr.Zero; _ifcEngine.GetConceptualFaceEx(ifcItem.ifcID, new IntPtr(j), ref nonValue, ref nonValue, ref nonValue, ref nonValue, ref nonValue, ref nonValue1, ref startIndexFacesPolygons, ref noIndicesFacesPolygons, ref nonValue2, ref nonValue2); i = 0; int lastItem = -1; while (i < noIndicesFacesPolygons.ToInt32()) { if (lastItem >= 0 && ifcItem.indicesForWireFrame[startIndexFacesPolygons.ToInt32() + i] >= 0) { ifcItem.indicesForWireFrameLineParts[2 * ifcItem.noPrimitivesForWireFrame + 0] = lastItem; ifcItem.indicesForWireFrameLineParts[2 * ifcItem.noPrimitivesForWireFrame + 1] = ifcItem.indicesForWireFrame[startIndexFacesPolygons.ToInt32() + i]; ifcItem.noPrimitivesForWireFrame++; } lastItem = ifcItem.indicesForWireFrame[startIndexFacesPolygons.ToInt32() + i]; i++; } } } } }