StruXML
The struxml
file is used to store object data such as geometry and loads of the model. struxml
is also the format used to exchange models with Revit and Tekla. Any FEM-Design 3D Structure model can be saved as struxml
and any struxml
file can easily be opened in a text editor where it can be inspected and modified.
Open/import a struxml file
To open or import a struxml
file use the File > Open
.
Save existing model as struxml
An existing FEM-Design model can easily be saved as a struxml
file by going to File > Save as...
and selecting StruSoft common structure XML file *.struxml
in the Save as type dialog.
As we save a model as struxml
we can start to disect the model by reading the code.
Model
In order to learn how the struxml
file is formatted, we will do a step by step inspection of the main part of the file.
The struxml
code below describes a simply supported beam with a length of 5 meters, a rectangular cross-section 200x500, and a concrete C30/37 material.
struxml
<database struxml_version="01.00.000" source_software="FEM-Design 21.00.003" start_time="1970-01-01T00:00:00.000" end_time="2022-10-07T13:48:32.000" guid="9d81299f-542e-4466-90e8-26d3d754f71f" convertid="00000000-0000-0000-0000-000000000000" standard="EC" country="common" xmlns="urn:strusoft">
<entities>
<bar name="B.1" type="beam" guid="31816307-6f0c-4144-8c6d-c308dd78009c" last_change="2022-10-07T13:17:57.000" action="added">
<bar_part guid="89f9e0d8-8ffa-4fbe-9e3d-d6df51b476d9" last_change="2022-10-07T13:17:57.000" action="added" name="@B.1.1" complex_material="43fc1849-d60a-4f16-8660-73b8693bb574" complex_section="66083ce1-ae6b-4aa2-9d67-175120f5dd08" ecc_calc="true">
<curve type="line">
<point x="0" y="0" z="0"></point>
<point x="6" y="0" z="0"></point>
</curve>
<local-y x="0" y="1" z="0"></local-y>
<connectivity m_x="true" m_y="true" m_z="true" r_x="true" r_y="true" r_z="true"></connectivity>
<connectivity m_x="true" m_y="true" m_z="true" r_x="true" r_y="true" r_z="true"></connectivity>
<eccentricity use_default_physical_alignment="true">
<analytical x="0" y="0" z="0"></analytical>
<analytical x="0" y="0" z="0"></analytical>
<physical x="0" y="0" z="-0.25"></physical>
<physical x="0" y="0" z="-0.25"></physical>
</eccentricity>
<end></end>
</bar_part>
<end></end>
</bar>
<supports>
<point_support guid="c821c375-ac37-4970-9ef6-bc54bd145855" last_change="2022-10-07T13:48:21.000" action="added" name="S.1">
<group>
<local_x x="1" y="0" z="0"></local_x>
<local_y x="0" y="1" z="0"></local_y>
<rigidity>
<motions x_neg="10000000000" x_pos="10000000000" y_neg="10000000000" y_pos="10000000000" z_neg="10000000000" z_pos="10000000000"></motions>
<rotations x_neg="10000000000" x_pos="10000000000" y_neg="10000000000" y_pos="10000000000" z_neg="10000000000" z_pos="10000000000"></rotations>
</rigidity>
</group>
<position x="0" y="0" z="0"></position>
</point_support>
<point_support guid="ada32b85-71ff-4b49-a633-2ab12af25438" last_change="2022-10-07T13:48:32.000" action="added" name="S.2">
<group>
<local_x x="1" y="0" z="0"></local_x>
<local_y x="0" y="1" z="0"></local_y>
<rigidity>
<motions x_neg="0" x_pos="0" y_neg="10000000000" y_pos="10000000000" z_neg="10000000000" z_pos="10000000000"></motions>
<rotations x_neg="10000000000" x_pos="10000000000" y_neg="10000000000" y_pos="10000000000" z_neg="10000000000" z_pos="10000000000"></rotations>
</rigidity>
</group>
<position x="6" y="0" z="0"></position>
</point_support>
</supports>
</entities>
<sections>
<section guid="90bb4365-64f2-4293-bcef-d389d5b0ff96" last_change="1970-01-01T00:00:00.000" action="added" name="Concrete sections, Rectangle, 200x500" type="custom" fd-mat="3" fd_name_code="Concrete sections" fd_name_type="Rectangle" fd_name_size="200x500">
<region_group>
<region>
<contour>
<edge type="line">
<point x="-0.1" y="-0.25" z="0"></point>
<point x="0.1" y="-0.25" z="0"></point>
<normal x="0" y="1" z="0"></normal>
</edge>
<edge type="line">
<point x="0.1" y="-0.25" z="0"></point>
<point x="0.1" y="0.25" z="0"></point>
<normal x="-1" y="0" z="0"></normal>
</edge>
<edge type="line">
<point x="0.1" y="0.25" z="0"></point>
<point x="-0.1" y="0.25" z="0"></point>
<normal x="0" y="-1" z="0"></normal>
</edge>
<edge type="line">
<point x="-0.1" y="0.25" z="0"></point>
<point x="-0.1" y="-0.25" z="0"></point>
<normal x="1" y="0" z="0"></normal>
</edge>
</contour>
</region>
</region_group>
<end></end>
</section>
<complex_section guid="66083ce1-ae6b-4aa2-9d67-175120f5dd08" last_change="1970-01-01T00:00:00.000" action="added">
<section pos="0" guid="90bb4365-64f2-4293-bcef-d389d5b0ff96">
<ecc x="0" y="0" z="0"></ecc>
<end></end>
</section>
<section pos="1" guid="90bb4365-64f2-4293-bcef-d389d5b0ff96">
<ecc x="0" y="0" z="0"></ecc>
<end></end>
</section>
</complex_section>
</sections>
<materials>
<material guid="43fc1849-d60a-4f16-8660-73b8693bb574" last_change="2013-07-19T09:18:28.000" action="added" standard="EC" country="common" name="C30/37">
<concrete mass="2.54842" E_0="33000000" E_1="33000000" E_2="33000000" nu_0="0.2" nu_1="0.2" nu_2="0.2" alfa_0="0.00001" alfa_1="0.00001" alfa_2="0.00001" G_0="13750000" G_1="13750000" G_2="13750000" Fck="30" Fck_cube="37" Fctk="2" Fctm="2.9" Ecm="33000" gammaC_0="1.5" gammaC_1="1.2" gammaCE="1.2" gammaS_0="1.15" gammaS_1="1" alfaCc="1" alfaCt="1" Fcd_0="20" Fcd_1="25" Fctd_0="1.33333333333333" Fctd_1="1.66666666666667" Ecd_0="22000" Ecd_1="27500" Epsc2="0.002" Epscu2="0.0035" Epsc3="0.00175" Epscu3="0.0035" environment="0" creep="0" shrinkage="0" nu="0.2" alfa="0.00001"></concrete>
</material>
</materials>
<end></end>
</database>
Database
The struxml
model contains a document element (root element) called database. This element contains all other elements that define the model. Elements that are contained within another element are usually called child elements or children.
<database `StruXML`_version="01.00.000" source_software="FEM-Design 19.00.001" start_time="1970-01-01T00:00:00.000" end_time="2020-02-10T14:16:29.000" guid="e211356e-5f99-4a37-a005-d6c326834e45" convertid="00000000-0000-0000-0000-000000000000" standard="EC" country="S" xmlns="urn:strusoft">
<entities>
<!-- This child element contains the bar and the two supports -->
</entities>
<sections>
<!-- This child element contains the section of the bar -->
</sections>
<materials>
<!-- This child element contains the material of the bar -->
</materials>
</database>
Bar
The first element in the struxml
model is a bar named B.1
. This element is contained within the entities element and is therefore a child of the parent element entities. This bar element contains another element called bar_part
which contains most of the information about the bar such as material, section, geometry and much more. The material and section are just references to other elements within the struxml
code. These references are guid
references. A guid
is what is called a globally unique identifier.
<bar name="B.1" type="beam" guid="31816307-6f0c-4144-8c6d-c308dd78009c" last_change="2022-10-07T13:17:57.000" action="added">
<bar_part guid="89f9e0d8-8ffa-4fbe-9e3d-d6df51b476d9" last_change="2022-10-07T13:17:57.000" action="added" name="@B.1.1" complex_material="43fc1849-d60a-4f16-8660-73b8693bb574" complex_section="66083ce1-ae6b-4aa2-9d67-175120f5dd08" ecc_calc="true">
<curve type="line">
<point x="0" y="0" z="0"></point>
<point x="6" y="0" z="0"></point>
</curve>
<local-y x="0" y="1" z="0"></local-y>
<connectivity m_x="true" m_y="true" m_z="true" r_x="true" r_y="true" r_z="true"></connectivity>
<connectivity m_x="true" m_y="true" m_z="true" r_x="true" r_y="true" r_z="true"></connectivity>
<eccentricity use_default_physical_alignment="true">
<analytical x="0" y="0" z="0"></analytical>
<analytical x="0" y="0" z="0"></analytical>
<physical x="0" y="0" z="-0.25"></physical>
<physical x="0" y="0" z="-0.25"></physical>
</eccentricity>
<end></end>
</bar_part>
<end></end>
</bar>
Point supports
After the bar element we can find an element called supports that contain the point supports of the model. These point supports are named S.1
and S.2
. We can read out where they are placed by looking at the position element. Moreover, we can inspect the motion and rotation springs of the point supports. It is possible to identify that S.2
has the motion spring in positive and negative x-direction set to 0.
<supports>
<point_support guid="c821c375-ac37-4970-9ef6-bc54bd145855" last_change="2022-10-07T13:48:21.000" action="added" name="S.1">
<group>
<local_x x="1" y="0" z="0"></local_x>
<local_y x="0" y="1" z="0"></local_y>
<rigidity>
<motions x_neg="10000000000" x_pos="10000000000" y_neg="10000000000" y_pos="10000000000" z_neg="10000000000" z_pos="10000000000"></motions>
<rotations x_neg="10000000000" x_pos="10000000000" y_neg="10000000000" y_pos="10000000000" z_neg="10000000000" z_pos="10000000000"></rotations>
</rigidity>
</group>
<position x="0" y="0" z="0"></position>
</point_support>
<point_support guid="ada32b85-71ff-4b49-a633-2ab12af25438" last_change="2022-10-07T13:48:32.000" action="added" name="S.2">
<group>
<local_x x="1" y="0" z="0"></local_x>
<local_y x="0" y="1" z="0"></local_y>
<rigidity>
<motions x_neg="0" x_pos="0" y_neg="10000000000" y_pos="10000000000" z_neg="10000000000" z_pos="10000000000"></motions>
<rotations x_neg="10000000000" x_pos="10000000000" y_neg="10000000000" y_pos="10000000000" z_neg="10000000000" z_pos="10000000000"></rotations>
</rigidity>
</group>
<position x="6" y="0" z="0"></position>
</point_support>
</supports>
Sections
The sections element contains all referenced sections of a model. In the struxml
model we can find the complex_section that is referenced by the bar_part as well as the base section which is referenced by this complex_section. A complex_section is simply a definition of the start and end section of a bar. In this specific case the complex_section references the base section two times as the bar star and end section is the same. The base section referenced is named Concrete sections, Rectangle, 200x500.
<sections>
<section guid="90bb4365-64f2-4293-bcef-d389d5b0ff96" last_change="1970-01-01T00:00:00.000" action="added" name="Concrete sections, Rectangle, 200x500" type="custom" fd-mat="3" fd_name_code="Concrete sections" fd_name_type="Rectangle" fd_name_size="200x500">
<region_group>
<region>
<contour>
<edge type="line">
<point x="-0.1" y="-0.25" z="0"></point>
<point x="0.1" y="-0.25" z="0"></point>
<normal x="0" y="1" z="0"></normal>
</edge>
<edge type="line">
<point x="0.1" y="-0.25" z="0"></point>
<point x="0.1" y="0.25" z="0"></point>
<normal x="-1" y="0" z="0"></normal>
</edge>
<edge type="line">
<point x="0.1" y="0.25" z="0"></point>
<point x="-0.1" y="0.25" z="0"></point>
<normal x="0" y="-1" z="0"></normal>
</edge>
<edge type="line">
<point x="-0.1" y="0.25" z="0"></point>
<point x="-0.1" y="-0.25" z="0"></point>
<normal x="1" y="0" z="0"></normal>
</edge>
</contour>
</region>
</region_group>
<end></end>
</section>
<complex_section guid="66083ce1-ae6b-4aa2-9d67-175120f5dd08" last_change="1970-01-01T00:00:00.000" action="added">
<section pos="0" guid="90bb4365-64f2-4293-bcef-d389d5b0ff96">
<ecc x="0" y="0" z="0"></ecc>
<end></end>
</section>
<section pos="1" guid="90bb4365-64f2-4293-bcef-d389d5b0ff96">
<ecc x="0" y="0" z="0"></ecc>
<end></end>
</section>
</complex_section>
</sections>
Materials
The materials element contains all referenced materials of a model. In the struxml
code we can find one material named C30/37 with according material properties.
<materials>
<material guid="43fc1849-d60a-4f16-8660-73b8693bb574" last_change="2013-07-19T09:18:28.000" action="added" standard="EC" country="common" name="C30/37">
<concrete mass="2.54842" E_0="33000000" E_1="33000000" E_2="33000000" nu_0="0.2" nu_1="0.2" nu_2="0.2" alfa_0="0.00001" alfa_1="0.00001" alfa_2="0.00001" G_0="13750000" G_1="13750000" G_2="13750000" Fck="30" Fck_cube="37" Fctk="2" Fctm="2.9" Ecm="33000" gammaC_0="1.5" gammaC_1="1.2" gammaCE="1.2" gammaS_0="1.15" gammaS_1="1" alfaCc="1" alfaCt="1" Fcd_0="20" Fcd_1="25" Fctd_0="1.33333333333333" Fctd_1="1.66666666666667" Ecd_0="22000" Ecd_1="27500" Epsc2="0.002" Epscu2="0.0035" Epsc3="0.00175" Epscu3="0.0035" environment="0" creep="0" shrinkage="0" nu="0.2" alfa="0.00001"></concrete>
</material>
</materials>
XML Schema
The struxml
format comes with an XML schema that describes this specific XML type. Struxml schema