With the rapid advancement of computer hardware and software technologies, computer-aided design (CAD) applications in architecture have significantly progressed. Numerous architectural design software programs have flooded the market. Although each software is based on its own unique building entity model, they support only their proprietary data standards. As a result, data exchange and sharing between specialized software and related applications have become major bottlenecks in architectural design integration.
There are two approaches to address this issue:
1. Each application software can develop its own interface to enable data exchange and sharing. For example, version 9.0 of the 3D3S software developed by Tongji University offers an import interface for SAT WE model files from PKPM software, and export interfaces for ANSYS and SAP2000 model files. However, this solution does not fundamentally solve the problem of building model data exchange and sharing.
2. The emergence of a truly open international standard for expressing and exchanging building product data is essential for fully realizing data interoperability. The IFC (Industry Foundation Classes) standard, defined by the International Alliance for Interoperability (IAI), is an ISO standard widely supported by professionals in the architecture field.
This article focuses on how to apply the IFC standard to automatically generate structural model files from building models.
IFC Standards and Revit
The IFC standard essentially defines data related to building and construction engineering. It is important to note that IFC is based on the STEP project, which includes extensive mature research results, such as STEP’s geometric definition and core construction engineering models. Leading research outcomes worldwide, based on EXPRESS, can be readily integrated into IFC. In particular, the development of building structural models within STEP can be effectively applied to IFC projects.
In January 1997, IAI released the first complete IFC information model (version IFC 1.0). Later, in February 2006, IFC version 2×3 (IFC2x3) was introduced. This article uses IFC2x3 for data conversion implementation.
The three major international CAD developers—Autodesk, Bentley, and Graphisoft—have all adopted and support the IFC standard. This article utilizes Autodesk’s Revit Architecture and Revit Structure software to export IFC model files and convert them into structural model files.
While IFC documentation is fully open, its complex STEP file format and the intricacies of building models make IFC development challenging. Therefore, many companies have created IFC toolkits to simplify the development process. These toolkits allow developers to avoid spending excessive time building underlying support platforms.
Commonly used IFC toolkits include EDM Model Converter from EPM Technology AS, IFC Classic Toolbox from Eurostep, and IFC Engine DLL from TNO Environment and Geosciences. This article is based on the IFC Engine DLL toolkit to extract building model information from IFC files.
3D3S and Structural Model Files
The general format used to express 3D3S structural model files is as follows:
- Annotation:
Lines starting with$or!,or, or/indicate comments. Please note that no spaces are allowed within these comment markers. - Define the Structural System:
STRU No. - Define Length Unit:
UNIT No. - Generate Nodes:
Node numberNwith coordinatesx, y, z. - Generate Units:
E UnitNumber Node1 Node2 - Define Node Constraints:
Con NodeNumber X(0|1) Y(0|1) Z(0|1) RX(0|1) RY(0|1) RZ(0|1)
Due to space limitations, the full file expression format is not detailed here. Please refer to the official 3D3S user manual for complete specifications.
Data Conversion from IFC Files to 3D3S Files
Data Structure
The main data structures involved in the conversion process are nodes, units, and floors.
Node Data Structure:
class Node
{
int NodeID; // Node index number
double CoordinateX, CoordinateY, CoordinateZ; // 3D coordinates of the node
int ConstraintType; // Node constraint types
ArrayList NodeInElements; // List of units linked to the node
};
Unit Data Structure:
class Element
{
int ElementID; // Unit index number
ArrayList NodesInElement; // List of nodes within the unit
int SectionType; // Unit section type
int PropertyType; // Unit material type
int ContainedInFloor; // Floor where the unit is located
int ElementType; // Unit type
};
Floor Data Structure:
class Floor
{
int FloorID; // Floor index number
double Elevation; // Floor top elevation
double FloorHeight; // Floor height
};














Must log in before commenting!
Sign Up