private IFCType GetIfcType(string path) { IFCType result = IFCType.None; IntPtr ifcModel = ifcEngine.OpenModelUnicode(IntPtr.Zero, path, Constants.IFC2X3_SCHEMA_NAME); if (ifcModel != IntPtr.Zero) { ifcEngine.GetSPFFHeaderItem(ifcModel, 9, 0, IfcEngine.SdaiType.String, out IntPtr outputValue); string headerItem = Marshal.PtrToStringAnsi(outputValue); if (!string.IsNullOrEmpty(headerItem)) { if (headerItem.Contains(IFCType.IFC2.ToString())) { result = IFCType.IFC2; } else if (headerItem.Contains(IFCType.IFC4.ToString())) { result = IFCType.IFC4; } } ifcEngine.CloseModel(ifcModel); } return(result); }
private bool ParseIfcFile(string sPath) { if (File.Exists(sPath)) { IntPtr ifcModel = _ifcEngine.OpenModel(IntPtr.Zero, sPath, "IFC2X3_TC1.exp"); string xmlSettings_IFC2x3 = @"IFC2X3-Settings.xml"; string xmlSettings_IFC4 = @"IFC4-Settings.xml"; if (ifcModel != IntPtr.Zero) { IntPtr outputValue = IntPtr.Zero; _ifcEngine.GetSPFFHeaderItem(ifcModel, 9, 0, IfcEngine.SdaiType.String, out outputValue); string s = Marshal.PtrToStringAnsi(outputValue); XmlTextReader textReader = null; if (string.IsNullOrEmpty(s) || s.Contains("IFC2")) { textReader = new XmlTextReader(xmlSettings_IFC2x3); } else if (s.Contains("IFC4")) { _ifcEngine.CloseModel(ifcModel); ifcModel = _ifcEngine.OpenModel(IntPtr.Zero, sPath, "IFC4.exp"); if (ifcModel != IntPtr.Zero) { textReader = new XmlTextReader(xmlSettings_IFC4); } } if (textReader == null) { return(false); } // if node type us an attribute while (textReader.Read()) { textReader.MoveToElement(); if (textReader.AttributeCount > 0) { if (textReader.LocalName == "object") { if (textReader.GetAttribute("name") != null) { string Name = textReader.GetAttribute("name").ToString(); //string Desc = textReader.GetAttribute("description").ToString(); RetrieveObjects(ifcModel, Name, Name); } } } } int a = 0; GenerateGeometry(ifcModel, _rootIfcItem, ref a); // Generate Tree Control _treeData.BuildTree(this, ifcModel, _rootIfcItem, _treeControl); _ifcEngine.CloseModel(ifcModel); return(true); } } return(false); }
private void CreateHeaderTreeItems() { var tnHeaderInfo = new TreeViewItem() { Header = "Header Info" }; treeControl.Items.Add(tnHeaderInfo); // Descriptions var tnDescriptions = new TreeViewItem() { Header = "Descriptions" }; tnHeaderInfo.Items.Add(tnDescriptions); int counter = 0; while (IFCEngine.GetSPFFHeaderItem(IfcModel, 0, counter++, IfcEngine.SdaiType.Unicode, out IntPtr description) == IntPtr.Zero) { var tnDescription = new TreeViewItem() { Header = Marshal.PtrToStringUni(description) }; tnDescriptions.Items.Add(tnDescription); } // ImplementationLevel IFCEngine.GetSPFFHeaderItem(IfcModel, 1, 0, IfcEngine.SdaiType.Unicode, out IntPtr implementationLevel); var tnImplementationLevel = new TreeViewItem() { Header = "ImplementationLevel = '" + Marshal.PtrToStringUni(implementationLevel) + "'" }; tnHeaderInfo.Items.Add(tnImplementationLevel); // Name IFCEngine.GetSPFFHeaderItem(IfcModel, 2, 0, IfcEngine.SdaiType.Unicode, out IntPtr name); this.ModelName = Marshal.PtrToStringUni(name); var tnName = new TreeViewItem() { Header = "Name = '" + Marshal.PtrToStringUni(name) + "'" }; tnHeaderInfo.Items.Add(tnName); // TimeStamp IFCEngine.GetSPFFHeaderItem(IfcModel, 3, 0, IfcEngine.SdaiType.Unicode, out IntPtr timeStamp); var tnTimeStamp = new TreeViewItem() { Header = "TimeStamp = '" + Marshal.PtrToStringUni(timeStamp) + "'" }; tnHeaderInfo.Items.Add(tnTimeStamp); // Authors var tnAuthors = new TreeViewItem() { Header = "Authors" }; tnHeaderInfo.Items.Add(tnAuthors); counter = 0; while (IFCEngine.GetSPFFHeaderItem(IfcModel, 4, counter++, IfcEngine.SdaiType.Unicode, out IntPtr author) == IntPtr.Zero) { var tnAuthor = new TreeViewItem() { Header = Marshal.PtrToStringUni(author) }; tnAuthors.Items.Add(tnAuthor); } // Organizations var tnOrganizations = new TreeViewItem() { Header = "Organizations" }; tnHeaderInfo.Items.Add(tnOrganizations); counter = 0; while (IFCEngine.GetSPFFHeaderItem(IfcModel, 5, counter++, IfcEngine.SdaiType.Unicode, out IntPtr organization) == IntPtr.Zero) { var tnOrganization = new TreeViewItem() { Header = Marshal.PtrToStringUni(organization) }; tnOrganizations.Items.Add(tnOrganization); } // PreprocessorVersion IFCEngine.GetSPFFHeaderItem(IfcModel, 6, 0, IfcEngine.SdaiType.Unicode, out IntPtr preprocessorVersion); var tnPreprocessorVersion = new TreeViewItem() { Header = "PreprocessorVersion = '" + Marshal.PtrToStringUni(preprocessorVersion) + "'" }; tnHeaderInfo.Items.Add(tnPreprocessorVersion); // OriginatingSystem IFCEngine.GetSPFFHeaderItem(IfcModel, 7, 0, IfcEngine.SdaiType.Unicode, out IntPtr originatingSystem); var tnOriginatingSystem = new TreeViewItem() { Header = "OriginatingSystem = '" + Marshal.PtrToStringUni(originatingSystem) + "'" }; tnHeaderInfo.Items.Add(tnOriginatingSystem); // Authorization IFCEngine.GetSPFFHeaderItem(IfcModel, 8, 0, IfcEngine.SdaiType.Unicode, out IntPtr authorization); var tnAuthorization = new TreeViewItem() { Header = "Authorization = '" + Marshal.PtrToStringUni(authorization) + "'" }; tnHeaderInfo.Items.Add(tnAuthorization); // FileSchemas var tnFileSchemas = new TreeViewItem() { Header = "FileSchemas" }; tnHeaderInfo.Items.Add(tnFileSchemas); counter = 0; while (IFCEngine.GetSPFFHeaderItem(IfcModel, 9, counter++, IfcEngine.SdaiType.Unicode, out IntPtr fileSchema) == IntPtr.Zero) { var tnFileSchema = new TreeViewItem() { Header = Marshal.PtrToStringUni(fileSchema) }; tnFileSchemas.Items.Add(tnFileSchema); } }
/// <summary> /// Helper /// </summary> private void CreateHeaderTreeItems() { // Header info TreeViewItem tnHeaderInfo = new TreeViewItem() { Header = "Header Info" }; _treeControl.Items.Add(tnHeaderInfo); // Descriptions TreeViewItem tnDescriptions = new TreeViewItem() { Header = "Descriptions" }; tnHeaderInfo.Items.Add(tnDescriptions); int i = 0; IntPtr description; while (_ifcEngine.GetSPFFHeaderItem(_ifcModel, 0, i++, IfcEngine.SdaiType.Unicode, out description) == IntPtr.Zero) { TreeViewItem tnDescription = new TreeViewItem() { Header = Marshal.PtrToStringUni(description) }; tnDescriptions.Items.Add(tnDescription); } // ImplementationLevel IntPtr implementationLevel; _ifcEngine.GetSPFFHeaderItem(_ifcModel, 1, 0, IfcEngine.SdaiType.Unicode, out implementationLevel); TreeViewItem tnImplementationLevel = new TreeViewItem() { Header = "ImplementationLevel = '" + Marshal.PtrToStringUni(implementationLevel) + "'" }; tnHeaderInfo.Items.Add(tnImplementationLevel); // Name IntPtr name; _ifcEngine.GetSPFFHeaderItem(_ifcModel, 2, 0, IfcEngine.SdaiType.Unicode, out name); TreeViewItem tnName = new TreeViewItem() { Header = "Name = '" + Marshal.PtrToStringUni(name) + "'" }; tnHeaderInfo.Items.Add(tnName); // TimeStamp IntPtr timeStamp; _ifcEngine.GetSPFFHeaderItem(_ifcModel, 3, 0, IfcEngine.SdaiType.Unicode, out timeStamp); TreeViewItem tnTimeStamp = new TreeViewItem() { Header = "TimeStamp = '" + Marshal.PtrToStringUni(timeStamp) + "'" }; tnHeaderInfo.Items.Add(tnTimeStamp); // Authors TreeViewItem tnAuthors = new TreeViewItem() { Header = "Authors" }; tnHeaderInfo.Items.Add(tnAuthors); i = 0; IntPtr author; while (_ifcEngine.GetSPFFHeaderItem(_ifcModel, 4, i++, IfcEngine.SdaiType.Unicode, out author) == IntPtr.Zero) { TreeViewItem tnAuthor = new TreeViewItem() { Header = Marshal.PtrToStringUni(author) }; tnAuthors.Items.Add(tnAuthor); } // Organizations TreeViewItem tnOrganizations = new TreeViewItem() { Header = "Organizations" }; tnHeaderInfo.Items.Add(tnOrganizations); i = 0; IntPtr organization; while (_ifcEngine.GetSPFFHeaderItem(_ifcModel, 5, i++, IfcEngine.SdaiType.Unicode, out organization) == IntPtr.Zero) { TreeViewItem tnOrganization = new TreeViewItem() { Header = Marshal.PtrToStringUni(organization) }; tnOrganizations.Items.Add(tnOrganization); } // PreprocessorVersion IntPtr preprocessorVersion; _ifcEngine.GetSPFFHeaderItem(_ifcModel, 6, 0, IfcEngine.SdaiType.Unicode, out preprocessorVersion); TreeViewItem tnPreprocessorVersion = new TreeViewItem() { Header = "PreprocessorVersion = '" + Marshal.PtrToStringUni(preprocessorVersion) + "'" }; tnHeaderInfo.Items.Add(tnPreprocessorVersion); // OriginatingSystem IntPtr originatingSystem; _ifcEngine.GetSPFFHeaderItem(_ifcModel, 7, 0, IfcEngine.SdaiType.Unicode, out originatingSystem); TreeViewItem tnOriginatingSystem = new TreeViewItem() { Header = "OriginatingSystem = '" + Marshal.PtrToStringUni(originatingSystem) + "'" }; tnHeaderInfo.Items.Add(tnOriginatingSystem); // Authorization IntPtr authorization; _ifcEngine.GetSPFFHeaderItem(_ifcModel, 8, 0, IfcEngine.SdaiType.Unicode, out authorization); TreeViewItem tnAuthorization = new TreeViewItem() { Header = "Authorization = '" + Marshal.PtrToStringUni(authorization) + "'" }; tnHeaderInfo.Items.Add(tnAuthorization); // FileSchemas TreeViewItem tnFileSchemas = new TreeViewItem() { Header = "FileSchemas" }; tnHeaderInfo.Items.Add(tnFileSchemas); i = 0; IntPtr fileSchema; while (_ifcEngine.GetSPFFHeaderItem(_ifcModel, 9, i++, IfcEngine.SdaiType.Unicode, out fileSchema) == IntPtr.Zero) { TreeViewItem tnFileSchema = new TreeViewItem() { Header = Marshal.PtrToStringUni(fileSchema) }; tnHeaderInfo.Items.Add(tnFileSchema); } }