Import von Xpla und Xrst Dateien in Xfalt


Andreas Wölfer
Andreas Wölfer

15. Januar 2007


Die Betaphase von Xfalt (Faltwerksprogramm) läuft nun schon einige Zeit.
Viele Tester wünschten sich die Möglichkeit, einfach Xpla und Xrst Dateien in Xfalt importieren zu können.
So haben wir uns darangesetzt, und diese Möglichkeit geschaffen.
In kürze werden neue Versionen von Xpla und Xrst Zum download zur Verfügung stehen.
Diese besitzen im Datei-Menu den Punkt "Als Faltwerk exportieren".
Was für den Anwender so einfach aussieht, beherbergt im Inneren aber einiges an Aufwand.

Das interne Datenmodell von Xpla und Xfalt ist völlig verschieden.
Dies gilt sowohl für die Logik, als auch für die externe Speicherung in der Datei.
So blieb uns nichts anderes übrig, als alle einzelnen Objekte, wie Knoten, Balken, etc. von Hand zu übertragen.
Das war ein ganz schöner Aufwand und eine ziemliche Fleissarbeit.

Als Beispiel will ich hier den Code zur Umwandlung des Materials nach DIN 1045-01 zeigen.

Zugegebenermassen ist das Material das schlimmste Objekt gewesen:)

Ich hoffe mal, der Aufwand hat sich gelohnt, und der Export/Import wird rege benutzt.

//===== DIN 1045-01

// Zuerst der Beton
   destination->WriteString( "<Collection ObjectType=\"DIE.Framework.Applications.Common.Materials.Stb_Beton_DIN1045_1\" SourceModule=\"framework.statik\">\r\n" );
   pos = materialMap.GetStartPosition();
   while (pos)
   {
      materialMap.GetNextAssoc(pos, (void*&)pMat, (void*&)pNew);
      if (pMat->pNewMat()->pMat1()->idKat() == XFEM_MATERIAL_BETON_DIN1045_1)
      {
         XFEM_material_beton_DIN1045_1 *pMat1 = (XFEM_material_beton_DIN1045_1*)pMat->pNewMat()->pMat1();
         sprintf( szObjectInfo,
            "<Object Id=\"%s\" ConcreteType=\"%s\" Bezeichnung=\"%s\" Eps_c1u=\"%lf\" Emodul=\"%lf\" Alfa=\"%lf\" Ecm=\"%lf\" Eps_c2u=\"%lf\""
            " Eps_c1=\"%lf\" Eps_c2=\"%lf\" AgammaC=\"%lf\" AlphaT=\"%lf\" Mue=\"%lf\" Fck=\"%lf\" Fbd=\"%lf\" GgammaC=\"%lf\" Gamma=\"%lf\"/>\r\n",
            pNew->m_IdInternal1, ConcreteType( pMat1->bLeicht()), ReplaceNotAllowedChars(pMat1->strBez(), FALSE), pMat1->Eps_c1u(),
            pMat1->ENew(), pMat1->Alfa(), pMat1->Ecm(), pMat1->Eps_c2u(), pMat1->Eps_c1(), pMat1->Eps_c2(), pMat1->AgammaC(),
            pMat1->AlphaT(), pMat1->mue(), pMat1->fck(), pMat1->fbd(), pMat1->GgammaC(), pMat1->Gamma()
            );
         destination->WriteString( szObjectInfo);
      }
   }
   destination->WriteString("</Collection>\r\n");

// Jetzt der Stahl
   destination->WriteString( "<Collection ObjectType=\"DIE.Framework.Applications.Common.Materials.Stb_Stahl_DIN1045_1\" SourceModule=\"framework.statik\">\r\n" );
   pos = materialMap.GetStartPosition();
   while (pos)
   {
      materialMap.GetNextAssoc(pos, (void*&)pMat, (void*&)pNew);
      if( pMat->pNewMat()->pMat2()!=NULL)
      {
         if (pMat->pNewMat()->pMat2()->idKat() == XFEM_MATERIAL_STAHL_DIN1045_1)
         {
            XFEM_material_stahl_DIN1045_1 *pMat2 = (XFEM_material_stahl_DIN1045_1*)pMat->pNewMat()->pMat2();
            sprintf( szObjectInfo,
               "<Object Id=\"%s\" Bezeichnung=\"%s\" AgammaS=\"%lf\" Ftk=\"%lf\" GgammaS=\"%lf\" Eps_us=\"%lf\" Es=\"%lf\" Fyk=\"%lf\" Ftk_fyk=\"%lf\" DuktilityType=\"%s\" Eps_uk=\"%lf\"/>\r\n",
               pNew->m_IdInternal2, ReplaceNotAllowedChars(pMat2->strBez(), FALSE), pMat2->AgammaS(), pMat2->ftk(), pMat2->GgammaS(), pMat2->Eps_us(),
               pMat2->Es(), pMat2->fyk(), pMat2->ftk_fyk(), DuktilityType(pMat2->Duktilitaet()), pMat2->Eps_uk()
               );
            destination->WriteString( szObjectInfo);
         }
      }
   }
   destination->WriteString("</Collection>\r\n");