Skip to main content

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.

Openfile

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.

Openfile

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.

beam

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