diff --git a/.gitignore b/.gitignore index 315aa66..a98cd35 100644 --- a/.gitignore +++ b/.gitignore @@ -1,196 +1,182 @@ ### Windows template # Windows thumbnail cache files Thumbs.db ehthumbs.db ehthumbs_vista.db # Dump file *.stackdump # Folder config file [Dd]esktop.ini # Recycle Bin used on file shares $RECYCLE.BIN/ # Windows Installer files *.cab *.msi *.msix *.msm *.msp *.exe # Windows shortcuts *.lnk ### JetBrains template # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 -# User-specific stuff -.idea/**/workspace.xml -.idea/**/tasks.xml -.idea/**/dictionaries -.idea/**/shelf - -# Sensitive or high-churn files -.idea/**/dataSources/ -.idea/**/dataSources.ids -.idea/**/dataSources.local.xml -.idea/**/sqlDataSources.xml -.idea/**/dynamic.xml -.idea/**/uiDesigner.xml - -# Gradle -.idea/**/gradle.xml -.idea/**/libraries +# IDE specific folders +.idea/ +.vscode # CMake cmake-build-debug/ cmake-build-release/ # Mongo Explorer plugin .idea/**/mongoSettings.xml # File-based project format *.iws # IntelliJ out/ # mpeltonen/sbt-idea plugin .idea_modules/ # JIRA plugin atlassian-ide-plugin.xml # Cursive Clojure plugin .idea/replstate.xml # Crashlytics plugin (for Android Studio and IntelliJ) com_crashlytics_export_strings.xml crashlytics.properties crashlytics-build.properties fabric.properties # Editor-based Rest Client .idea/httpRequests ### Python template # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] *$py.class # C/C++ extensions *.so *.dll # Distribution / packaging .Python build/ develop-eggs/ dist/ downloads/ eggs/ .eggs/ lib64/ parts/ sdist/ var/ wheels/ *.egg-info/ .installed.cfg *.egg MANIFEST # PyInstaller # Usually these files are written by a python script from a template # before PyInstaller builds the exe, so as to inject date/other infos into it. *.manifest *.spec # Installer logs pip-log.txt pip-delete-this-directory.txt # Unit test / coverage reports htmlcov/ .tox/ .coverage .coverage.* .cache nosetests.xml coverage.xml *.cover .hypothesis/ .pytest_cache/ # Translations *.mo *.pot # Django stuff: *.log local_settings.py db.sqlite3 # Flask stuff: instance/ .webassets-cache # Scrapy stuff: .scrapy # Sphinx documentation docs/_build/ # PyBuilder target/ # Jupyter Notebook .ipynb_checkpoints # pyenv .python-version # celery beat schedule file celerybeat-schedule # SageMath parsed files *.sage.py # Environments .env .venv env/ venv/ ENV/ env.bak/ venv.bak/ # Spyder project settings .spyderproject .spyproject # Rope project settings .ropeproject # mkdocs documentation /site # mypy .mypy_cache/ # pyCharm settings _windows # dbnavigator settings dbnavigator.xml *.VC.opendb *.pdb *.lib *.ilk *.exp *.obj *.tlog \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..136a0a9 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,24 @@ +cmake_minimum_required(VERSION 3.0.0) +project(pybind11_examples VERSION 0.1.0) + +# --------------------------------------------------------------------------- # +# OPTIONS +# --------------------------------------------------------------------------- # + + +# --------------------------------------------------------------------------- # +# BIMxBEM +# --------------------------------------------------------------------------- # +add_subdirectory(IfcC++/ifc_BIMxBEMEPFLEngine) +add_subdirectory(IfcPython) + +# --------------------------------------------------------------------------- # +# PYBIND11 +# --------------------------------------------------------------------------- # +IF(IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/pybind11") + message(STATUS "Adding pybind11 subdirectory.") + add_subdirectory(pybind11) +ELSE() + message(STATUS "Searching for pybind11...") + find_package(pybind11 REQUIRED) +ENDIF() diff --git a/IfcC++/ifc_BIMxBEMEPFLEngine/CMakeLists.txt b/IfcC++/ifc_BIMxBEMEPFLEngine/CMakeLists.txt new file mode 100644 index 0000000..faa2ebe --- /dev/null +++ b/IfcC++/ifc_BIMxBEMEPFLEngine/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.0.0) +project(pybind11_examples VERSION 0.1.0) + +# --------------------------------------------------------------------------- # +# OPTIONS +# --------------------------------------------------------------------------- # + + +# --------------------------------------------------------------------------- # +# BIMxBEM base +# --------------------------------------------------------------------------- # +add_library(IfcEngine ifc_BIMxBEMEngine.cpp ifc_BIMxBEMEngine.h) + +# --------------------------------------------------------------------------- # +# PYBIND11 +# --------------------------------------------------------------------------- # +IF(IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/pybind11") + message(STATUS "Adding pybind11 subdirectory.") + add_subdirectory(pybind11) +ELSE() + message(STATUS "Searching for pybind11...") + find_package(pybind11 REQUIRED) +ENDIF() + + + diff --git a/IfcC++/ifc_BIMxBEMEPFLEngine/LoadDataAtBEMFormat.cpp b/IfcC++/ifc_BIMxBEMEPFLEngine/LoadDataAtBEMFormat.cpp index 8bc9258..63fd3e9 100644 --- a/IfcC++/ifc_BIMxBEMEPFLEngine/LoadDataAtBEMFormat.cpp +++ b/IfcC++/ifc_BIMxBEMEPFLEngine/LoadDataAtBEMFormat.cpp @@ -1,959 +1,959 @@ #include "LoadDataAtBEMFormat.h" #include LoadDataAtBEMFormat::LoadDataAtBEMFormat(double dbl_Minisurf) { _dbl_MinimalSurface = dbl_Minisurf; } LoadDataAtBEMFormat::~LoadDataAtBEMFormat() { } -//Convertit les structures attendues par Lesosai en chaine de caractères +//Convertit les structures attendues par Lesosai en chaine de caractères int LoadDataAtBEMFormat::GetLesosaiEntitiesDefinition(string *&str_EntDef) { int res = 0; str_EntDef = _str_EntitiesDefinitions; return res; } int LoadDataAtBEMFormat::GetLesosaiLogFile(string *&str_LogFile) { int res = 0; str_LogFile = _str_LogFile; return res; } int LoadDataAtBEMFormat::GetLesosaiEntitiesNumber() { int res = 0; return res; } int LoadDataAtBEMFormat::GetLesosaiEntitiesAttributesSize() { int res = 0; return res; } -//Transforme la structure générique ifc_Tree en des structures attendues par Lesosai +//Transforme la structure générique ifc_Tree en des structures attendues par Lesosai int LoadDataAtBEMFormat::LoadLesosaiFormat(ifc_Tree* CurrentIfcTree) { int res = 0; // Allocation de la chaine de caractere (log pour consigner certaines infos: retrait des surfaces quasi-nulles par exple) _str_LogFile = new string(); - //Pour Post-traiter le tree => mettre l'arbre en rateau (sans duplication des entités) + //Pour Post-traiter le tree => mettre l'arbre en rateau (sans duplication des entités) ifc_TreePostTreatment *cl_PostTreatmt = new ifc_TreePostTreatment(CurrentIfcTree); - //Mise à plat de l'arbre (en rateau) + //Mise à plat de l'arbre (en rateau) Map_Basified_Tree *map_BasifTree=nullptr; if(cl_PostTreatmt) cl_PostTreatmt->BasifyTree(map_BasifTree); - //Certains contours sont définis avec en dernier point le 1er points (loop) - //Pour la suite des traitements, cela nous gêne (calcul du centre de gravité=CentroidsComputation, détection des points les plus proche=RelimitSideBySideSurfaces) - //Retrait dans les contours (st_PointsDesContours) du derniers point lorsqu'il est égal au 1er (+ consigne bool bo_IsItLoop=true) + //Certains contours sont définis avec en dernier point le 1er points (loop) + //Pour la suite des traitements, cela nous gêne (calcul du centre de gravité=CentroidsComputation, détection des points les plus proche=RelimitSideBySideSurfaces) + //Retrait dans les contours (st_PointsDesContours) du derniers point lorsqu'il est égal au 1er (+ consigne bool bo_IsItLoop=true) if (cl_PostTreatmt) cl_PostTreatmt->RemoveLastPointOfLoopContours(_str_LogFile); //Calcul des surfaces IfcConnectionSurfaceGeometry - // => à faire avant changement de coord car algo fonctionne en 2D => si la 3ème coord est la même pour toute! + // => à faire avant changement de coord car algo fonctionne en 2D => si la 3ème coord est la même pour toute! if (cl_PostTreatmt) cl_PostTreatmt->ComputeIfcConnectionSurfaceGeometrySurface(); if (cl_PostTreatmt) cl_PostTreatmt->RemoveQuasiNullIfcConnectionSurfaceGeometrySurface(_dbl_MinimalSurface, _str_LogFile); //Relance pour nettoyer map_BasifTree if (cl_PostTreatmt) cl_PostTreatmt->BasifyTree(map_BasifTree); //Changement repere => repere projet if (cl_PostTreatmt) cl_PostTreatmt->TransformEntitiesToWorlCoordFrame(); - //Calcul des centres de gravité de chaque IfcConnectionSurfaceGeometry + //Calcul des centres de gravité de chaque IfcConnectionSurfaceGeometry if (cl_PostTreatmt) cl_PostTreatmt->CentroidsComputation(); - //Repérage des IfcConnectionSurfaceGeometry en vis-à-vis et côte-à-côte + //Repérage des IfcConnectionSurfaceGeometry en vis-à-vis et côte-à-côte if (cl_PostTreatmt) cl_PostTreatmt->FindFaceToFaceAndSideBySideSurfaces(); - //Raccord des IfcConnectionSurfaceGeometry en côte-à-côte + //Raccord des IfcConnectionSurfaceGeometry en côte-à-côte if (cl_PostTreatmt) cl_PostTreatmt->RelimitSideBySideSurfaces(_str_LogFile); - //Raccord des IfcConnectionSurfaceGeometry en côte-à-côte + //Raccord des IfcConnectionSurfaceGeometry en côte-à-côte if (cl_PostTreatmt) cl_PostTreatmt->CreateTIFCSurfaces(); - //Ajout des TIFCSurfaces à ifc_TreePostTreatment::_map_BasifTree + //Ajout des TIFCSurfaces à ifc_TreePostTreatment::_map_BasifTree if (cl_PostTreatmt) cl_PostTreatmt->CompleteBasifiedTreeFromByTIFCSurfaces(); - // Allocation de la chaine de caractere (fourniture des données du Tree via cette chaine de caractere) + // Allocation de la chaine de caractere (fourniture des données du Tree via cette chaine de caractere) _str_EntitiesDefinitions = new string(); - //Conversion des entités dans la chaine de caractere _str_EntitiesDefinitions (membre de la classe) + //Conversion des entités dans la chaine de caractere _str_EntitiesDefinitions (membre de la classe) ConvertBasifiedTree(map_BasifTree); return res; } //int LoadDataAtBEMFormat::BasifyTreeFrom(STRUCT_IFCENTITY *&st_IfcTree, Map_Basified_Tree &map_BasifTree) //{ // int res = 0; -// //Memo adresse pointeur (si existe pas ajouté) et son type "Ifc" -// // => la map permet de ne pas référencer de multiple fois une même entité -// // dans l'arbre, des entités sont référencés plusieurs fois car elles appartiennent à plusieurs objets +// //Memo adresse pointeur (si existe pas ajouté) et son type "Ifc" +// // => la map permet de ne pas référencer de multiple fois une même entité +// // dans l'arbre, des entités sont référencés plusieurs fois car elles appartiennent à plusieurs objets // map_BasifTree[st_IfcTree] = st_IfcTree->ch_Type; // // list ::iterator it_Elem; // for (it_Elem = (st_IfcTree->st_Contains).begin(); it_Elem != (st_IfcTree->st_Contains).end(); it_Elem++) // { // BasifyTreeFrom((*it_Elem), map_BasifTree); // }// for (it_Elem = (st_IfcTree->st_Contains).begin(); it_Elem != (st_IfcTree->st_Contains).end(); it_Elem++) // // return res; //} // int LoadDataAtBEMFormat::ConvertBasifiedTree(Map_Basified_Tree *&map_BasifTree) { int res = 0; OpenSets(); std::map::iterator it_Elem; for (it_Elem = map_BasifTree->begin(); it_Elem != map_BasifTree->end(); it_Elem++) { if (it_Elem->second == "IfcConnectionSurfaceGeometry") { ConvertIfcConnectionSurfaceGeometry(it_Elem->first); //Pour Lesosai ConvertTIFCGeo2D(it_Elem->first); }// if (it_Elem->second == "IfcConnectionSurfaceGeometry") else if (it_Elem->second == "TIFCSurface") ConvertTIFCSurface(it_Elem->first); else if (it_Elem->second == "IfcFace") ConvertIfcFace(it_Elem->first); else if (it_Elem->second == "IfcCurveBoundedPlane") ConvertIfcSubFace(it_Elem->first); //else if (it_Elem->second == "IfcProductDefinitionShape") // ConvertIfcProductDefinitionShape(it_Elem->first); else if (it_Elem->second == "IfcSpace") ConvertIfcSpace(it_Elem->first); else if (it_Elem->second == "IfcBuildingStorey") ConvertIfcBuildingStorey(it_Elem->first); else if (it_Elem->second == "IfcBuilding") ConvertIfcBuilding(it_Elem->first); else if (it_Elem->second == "IfcSite") ConvertIfcSite(it_Elem->first); else if (it_Elem->second == "IfcProject") ConvertIfcProject(it_Elem->first); }// for (it_Elem = map_BasifTree.begin(); it_Elem != map_BasifTree.end(); it_Elem++) CloseSets(); //Merge des 2 Set_Of_TIFCPolygons: _str_FacesDefinitions + _str_SubFacesDefinitions string str_Deb = ""; string str_Fin = ""; int int_Level = 10; string str_ValKW = ""; string str_KW = _str_LESOSAI_PolygonsSet; LineForLevel(int_Level, str_Deb, str_KW, str_ValKW); int_Level = 11; LineForLevel(int_Level, str_Fin, str_KW, str_ValKW); //string str_Deb = DEB_KW0_L + _str_LESOSAI_PolygonsSet + KW_R; //string str_Fin = FIN_KW0_L + _str_LESOSAI_PolygonsSet + KW_R; //Retrait fin du paragraphe _str_FacesDefinitions = _str_FacesDefinitions.substr(0, _str_FacesDefinitions.length() - str_Fin.length()); - //Retrait début du paragraphe + //Retrait début du paragraphe _str_SubFacesDefinitions = _str_SubFacesDefinitions.substr(str_Deb.length(), _str_SubFacesDefinitions.length() - str_Deb.length()); int_Level = 0; str_ValKW = ""; str_KW = _str_LESOSAI_SetsRoot; LineForLevel(int_Level, *_str_EntitiesDefinitions, str_KW, str_ValKW); *_str_EntitiesDefinitions += /*DEB_KW0_L + _str_LESOSAI_SetsRoot + KW_Rn +*/_str_ProjectsDefinitions + _str_SitesDefinitions + _str_BuildingsDefinitions + _str_BuildingStoreysDefinitions + _str_SpacesDefinitions //+ _str_ProductDefinitionShapesDefinitions + _str_TIFCSurfacesDefinitions + _str_TIFCGeo2DDefinitions + _str_FacesDefinitions + _str_SubFacesDefinitions //+_str_ConnectionSurfaceGeometriesDefinitions /*+ FIN_KW0_L + _str_LESOSAI_SetsRoot + KW_R*/ ; int_Level = 1; str_ValKW = ""; str_KW = _str_LESOSAI_SetsRoot; LineForLevel(int_Level, *_str_EntitiesDefinitions, str_KW, str_ValKW); return res; } void LoadDataAtBEMFormat::OpenSets() { int int_Level = 10; string str_ValKW = ""; string str_KW = _str_LESOSAI_ProjetsSet; LineForLevel(int_Level, _str_ProjectsDefinitions, str_KW, str_ValKW); str_KW = _str_LESOSAI_SitesSet; LineForLevel(int_Level, _str_SitesDefinitions, str_KW, str_ValKW); str_KW = _str_LESOSAI_BuildingsSet; LineForLevel(int_Level, _str_BuildingsDefinitions, str_KW, str_ValKW); str_KW = _str_LESOSAI_StoreysSet; LineForLevel(int_Level, _str_BuildingStoreysDefinitions, str_KW, str_ValKW); str_KW = _str_LESOSAI_SpacesSet; LineForLevel(int_Level, _str_SpacesDefinitions, str_KW, str_ValKW); str_KW = _str_LESOSAI_SurfacesSet; LineForLevel(int_Level, _str_TIFCSurfacesDefinitions, str_KW, str_ValKW); str_KW = _str_LESOSAI_PolygonsSet; LineForLevel(int_Level, _str_FacesDefinitions, str_KW, str_ValKW); str_KW = _str_LESOSAI_Geo2DSet; LineForLevel(int_Level, _str_TIFCGeo2DDefinitions, str_KW, str_ValKW); str_KW = _str_LESOSAI_PolygonsSet; LineForLevel(int_Level, _str_SubFacesDefinitions, str_KW, str_ValKW); str_KW = "ProductDefinitionShapes"; LineForLevel(int_Level, _str_ProductDefinitionShapesDefinitions, str_KW, str_ValKW); str_KW = "ConnectionSurfaceGeometries"; LineForLevel(int_Level, _str_ConnectionSurfaceGeometriesDefinitions, str_KW, str_ValKW); //_str_ProjectsDefinitions += DEB_KW0_L + _str_LESOSAI_ProjetsSet + KW_R; //_str_SitesDefinitions += DEB_KW0_L + _str_LESOSAI_SitesSet + KW_R; //_str_BuildingsDefinitions += DEB_KW0_L + _str_LESOSAI_BuildingsSet + KW_R; //_str_BuildingStoreysDefinitions += DEB_KW0_L + _str_LESOSAI_StoreysSet + KW_R; //_str_SpacesDefinitions += DEB_KW0_L + _str_LESOSAI_SpacesSet + KW_R; //_str_TIFCSurfacesDefinitions += DEB_KW0_L + _str_LESOSAI_SurfacesSet + KW_R; //_str_FacesDefinitions += DEB_KW0_L + _str_LESOSAI_PolygonsSet + KW_R; //_str_TIFCGeo2DDefinitions += DEB_KW0_L + _str_LESOSAI_Geo2DSet + KW_R; //_str_SubFacesDefinitions += DEB_KW0_L + _str_LESOSAI_PolygonsSet + KW_R;//"SubFaces" //_str_ProductDefinitionShapesDefinitions += DEB_KW0_L + "ProductDefinitionShapes" + KW_R; //_str_ConnectionSurfaceGeometriesDefinitions += DEB_KW0_L + "ConnectionSurfaceGeometries" + KW_R; } void LoadDataAtBEMFormat::CloseSets() { int int_Level = 11; string str_ValKW = ""; string str_KW = _str_LESOSAI_ProjetsSet; LineForLevel(int_Level, _str_ProjectsDefinitions, str_KW, str_ValKW); str_KW = _str_LESOSAI_SitesSet; LineForLevel(int_Level, _str_SitesDefinitions, str_KW, str_ValKW); str_KW = _str_LESOSAI_BuildingsSet; LineForLevel(int_Level, _str_BuildingsDefinitions, str_KW, str_ValKW); str_KW = _str_LESOSAI_StoreysSet; LineForLevel(int_Level, _str_BuildingStoreysDefinitions, str_KW, str_ValKW); str_KW = _str_LESOSAI_SpacesSet; LineForLevel(int_Level, _str_SpacesDefinitions, str_KW, str_ValKW); str_KW = _str_LESOSAI_SurfacesSet; LineForLevel(int_Level, _str_TIFCSurfacesDefinitions, str_KW, str_ValKW); str_KW = _str_LESOSAI_PolygonsSet; LineForLevel(int_Level, _str_FacesDefinitions, str_KW, str_ValKW); str_KW = _str_LESOSAI_Geo2DSet; LineForLevel(int_Level, _str_TIFCGeo2DDefinitions, str_KW, str_ValKW); str_KW = _str_LESOSAI_PolygonsSet; LineForLevel(int_Level, _str_SubFacesDefinitions, str_KW, str_ValKW); str_KW = "ProductDefinitionShapes"; LineForLevel(int_Level, _str_ProductDefinitionShapesDefinitions, str_KW, str_ValKW); str_KW = "ConnectionSurfaceGeometries"; LineForLevel(int_Level, _str_ConnectionSurfaceGeometriesDefinitions, str_KW, str_ValKW); //_str_ProjectsDefinitions += FIN_KW0_L + _str_LESOSAI_ProjetsSet + KW_R; //_str_SitesDefinitions += FIN_KW0_L + _str_LESOSAI_SitesSet + KW_R; //_str_BuildingsDefinitions += FIN_KW0_L + _str_LESOSAI_BuildingsSet + KW_R; //_str_BuildingStoreysDefinitions += FIN_KW0_L + _str_LESOSAI_StoreysSet + KW_R; //_str_SpacesDefinitions += FIN_KW0_L + _str_LESOSAI_SpacesSet + KW_R; //_str_TIFCSurfacesDefinitions += FIN_KW0_L + _str_LESOSAI_SurfacesSet + KW_R; //_str_FacesDefinitions += FIN_KW0_L + _str_LESOSAI_PolygonsSet + KW_R; //_str_TIFCGeo2DDefinitions += FIN_KW0_L + _str_LESOSAI_Geo2DSet + KW_R; //_str_SubFacesDefinitions += FIN_KW0_L + _str_LESOSAI_PolygonsSet + KW_R;//"SubFaces" //_str_ProductDefinitionShapesDefinitions += FIN_KW0_L + "ProductDefinitionShapes" + KW_R; //_str_ConnectionSurfaceGeometriesDefinitions += FIN_KW0_L + "ConnectionSurfaceGeometries" + KW_R; } int LoadDataAtBEMFormat::LineForLevel(int &int_Level, string &str_EntsDefinitions, string &str_KW, string &str_ValKW) { switch (int_Level) { case 0: str_EntsDefinitions = str_EntsDefinitions + DEB_KW0_L + str_KW + KW_Rn; break; case 1: str_EntsDefinitions = str_EntsDefinitions + FIN_KW0_L + str_KW + KW_Rn; break; case 10: str_EntsDefinitions = str_EntsDefinitions + DEB_KW1_L + str_KW + KW_Rn; break; case 11: str_EntsDefinitions = str_EntsDefinitions + FIN_KW1_L + str_KW + KW_Rn; break; case 20: str_EntsDefinitions = str_EntsDefinitions + DEB_KW2_L + str_KW + KW_Rn; break; case 21: str_EntsDefinitions = str_EntsDefinitions + FIN_KW2_L + str_KW + KW_Rn; break; case 30: str_EntsDefinitions = str_EntsDefinitions + DEB_KW3_L + str_KW + KW_R + str_ValKW + FIN_KW0_L + str_KW + KW_Rn; break; case 32: str_EntsDefinitions = str_EntsDefinitions + DEB_KW3_L + str_KW + KW_Rn; break; case 33: str_EntsDefinitions = str_EntsDefinitions + FIN_KW3_L + str_KW + KW_Rn; break; case 40: str_EntsDefinitions = str_EntsDefinitions + DEB_KW4_L + str_KW + KW_R + str_ValKW + FIN_KW0_L + str_KW + KW_Rn; break; case 42: str_EntsDefinitions = str_EntsDefinitions + DEB_KW4_L + str_ValKW + KW1_Rn; break; default: return 1; }// switch (int_Level) return 0; } int LoadDataAtBEMFormat::ConvertIfcEnt(STRUCT_IFCENTITY *&st_IfcEnt, string &str_Balise, string &str_EntsDefinitions, string &str_ContainsName, string &str_InsideContainsName) { int res = 0; - // Entête Début + // Entête Début int int_Level = 20; string str_KW = str_Balise; string str_ValKW = ""; LineForLevel(int_Level, str_EntsDefinitions, str_KW, str_ValKW); //str_EntsDefinitions = str_EntsDefinitions + DEB_KW1_L + str_Balise + KW_R; // Id, Name, Contains GenericConversion(st_IfcEnt, str_EntsDefinitions, str_ContainsName, str_InsideContainsName); - // Entête Fin + // Entête Fin int_Level = 21; LineForLevel(int_Level, str_EntsDefinitions, str_KW, str_ValKW); //str_EntsDefinitions = str_EntsDefinitions + FIN_KW1_L + str_Balise + KW_R; return res; } int LoadDataAtBEMFormat::GenericConversion(STRUCT_IFCENTITY *&st_IfcEnt, string &str_EntsDefinitions, string &str_ContainsName, string &str_InsideContainsName) { int res = 0; // Id int int_Level = 30; string str_KW = "Id"; string str_ValKW = st_IfcEnt->ch_Id; LineForLevel(int_Level, str_EntsDefinitions, str_KW, str_ValKW); //str_EntsDefinitions = str_EntsDefinitions + DEB_KW2_L + str_KW + KW_R + st_IfcEnt->ch_Id + FIN_KW0_L + str_KW + KW_R; // GlobalId str_KW= "GlobalId"; str_ValKW = st_IfcEnt->ch_GlobalId; LineForLevel(int_Level, str_EntsDefinitions, str_KW, str_ValKW); //str_EntsDefinitions = str_EntsDefinitions + DEB_KW2_L + str_KW + KW_R + st_IfcEnt->ch_GlobalId + FIN_KW0_L + str_KW + KW_R; // Name str_KW= "Name"; str_ValKW = st_IfcEnt->ch_Name; LineForLevel(int_Level, str_EntsDefinitions, str_KW, str_ValKW); //str_EntsDefinitions = str_EntsDefinitions + DEB_KW2_L + str_KW + KW_R + st_IfcEnt->ch_Name + FIN_KW0_L + str_KW + KW_R; // Contains if (string(st_IfcEnt->ch_Type) == string("IfcFace")) { res = SpecificConversionOfContainsForFaceAndSubFace(st_IfcEnt, str_EntsDefinitions, str_ContainsName, str_InsideContainsName); }// if (string(st_IfcEnt->ch_Type) == string("IfcFace")) else if (string(st_IfcEnt->ch_Type) == string("IfcCurveBoundedPlane")) { res = SpecificConversionOfContainsForFaceAndSubFace(st_IfcEnt, str_EntsDefinitions, str_ContainsName, str_InsideContainsName); }// else if (string(st_IfcEnt->ch_Type) == string("IfcCurveBoundedPlane")) else if (string(st_IfcEnt->ch_Type) == string("IfcSpace")) { res = SpecificConversionOfContainsForSpace(st_IfcEnt, str_EntsDefinitions, str_ContainsName, str_InsideContainsName); }// else if (string(st_IfcEnt->ch_Type) == string("IfcSpace")) else if (string(st_IfcEnt->ch_Type) == string("IfcConnectionSurfaceGeometry")) { if(str_InsideContainsName == _str_LESOSAI_Polygon) res = SpecificConversionOfContainsForTIFCGeo2D(st_IfcEnt, str_EntsDefinitions, str_ContainsName, str_InsideContainsName); else res = SpecificConversionOfContainsForConnectionSurfaceGeometry(st_IfcEnt, str_EntsDefinitions, str_ContainsName, str_InsideContainsName); }// else if (string(st_IfcEnt->ch_Type) == string("IfcConnectionSurfaceGeometry")) else if (string(st_IfcEnt->ch_Type) == string("TIFCSurface")) { res = SpecificConversionOfContainsForTIFCSurface(st_IfcEnt, str_EntsDefinitions, str_ContainsName, str_InsideContainsName); }// else if (string(st_IfcEnt->ch_Type) == string("TIFCSurface")) else if (string(st_IfcEnt->ch_Type) == string("IfcBuilding")) { res = SpecificConversionOfContainsBuilding(st_IfcEnt, str_EntsDefinitions, str_ContainsName, str_InsideContainsName); }// else if (string(st_IfcEnt->ch_Type) == string("TIFCSurface")) else { if (string(st_IfcEnt->ch_Type) == string("IfcProject")) res = SpecificConversionOfNorthProject(st_IfcEnt, str_EntsDefinitions/*, str_ContainsName, str_InsideContainsName*/); res = SpecificConversionOfContains(st_IfcEnt, str_EntsDefinitions, str_ContainsName, str_InsideContainsName); }// else if (string(st_IfcEnt->ch_Type) == string("IfcFace")) return res; } int LoadDataAtBEMFormat::SpecificConversionOfContainsForTIFCGeo2D(STRUCT_IFCENTITY *&st_IfcEnt, string &str_EntsDefinitions, string &str_ContainsName, string &str_InsideContainsName) { int res = 0; // Contains res = SpecificConversionOfContains(st_IfcEnt, str_EntsDefinitions, str_ContainsName, str_InsideContainsName); //Map_String_String::iterator it_MapVal; if (st_IfcEnt->map_DefValues) { for (Map_String_String::iterator it_MapVal = (st_IfcEnt->map_DefValues)->begin(); it_MapVal != (st_IfcEnt->map_DefValues)->end(); it_MapVal++) { int int_Level = 30; string str_KW = (*it_MapVal).first; string str_ValKW = (*it_MapVal).second; LineForLevel(int_Level, str_EntsDefinitions, str_KW, str_ValKW); //str_EntsDefinitions = str_EntsDefinitions + DEB_KW2_L + (*it_MapVal).first + "=" + (*it_MapVal).second + KW_R; }// for (it_MapVal = (st_IfcEnt->map_DefValues)->begin(); it_MapVal != (st_IfcEnt->map_DefValues)->end(); it_MapVal++) }// if (st_IfcEnt->map_DefValues) return res; } int LoadDataAtBEMFormat::SpecificConversionOfContainsForConnectionSurfaceGeometry(STRUCT_IFCENTITY *&st_IfcEnt, string &str_EntsDefinitions, string &str_ContainsName, string &str_InsideContainsName, string str_FaceToFaceName, string str_Centroid, string str_SideBySideName) { int res = 0; // Contains res = SpecificConversionOfContains(st_IfcEnt, str_EntsDefinitions, str_ContainsName, str_InsideContainsName); //Map_String_String::iterator it_MapVal; if (st_IfcEnt->map_DefValues) { for (Map_String_String::iterator it_MapVal = (st_IfcEnt->map_DefValues)->begin(); it_MapVal != (st_IfcEnt->map_DefValues)->end(); it_MapVal++) { int int_Level = 30; string str_KW = (*it_MapVal).first; string str_ValKW = (*it_MapVal).second; LineForLevel(int_Level, str_EntsDefinitions, str_KW, str_ValKW); //str_EntsDefinitions = str_EntsDefinitions + DEB_KW2_L + (*it_MapVal).first + "=" + (*it_MapVal).second + KW_R; }// for (it_MapVal = (st_IfcEnt->map_DefValues)->begin(); it_MapVal != (st_IfcEnt->map_DefValues)->end(); it_MapVal++) }// if (st_IfcEnt->map_DefValues) // FaceToface int int_Level = 32; string str_KW = str_FaceToFaceName; string str_ValKW = ""; LineForLevel(int_Level, str_EntsDefinitions, str_KW, str_ValKW); //string str_Balise = str_FaceToFaceName; //str_EntsDefinitions = str_EntsDefinitions + DEB_KW2_L + str_Balise + KW_R; //list ::iterator it_Elem; for (list ::iterator it_Elem = (st_IfcEnt->st_FaceToFace).begin(); it_Elem != (st_IfcEnt->st_FaceToFace).end(); it_Elem++) { int_Level = 40; str_KW = ""; str_ValKW = (*it_Elem)->ch_Id; LineForLevel(int_Level, str_EntsDefinitions, str_KW, str_ValKW); //str_EntsDefinitions = str_EntsDefinitions + DEB_KW3_L + (*it_Elem)->ch_Id + KW_R; }// for (it_Elem = (st_IfcEnt->st_Contains).begin(); it_Elem != (st_IfcEnt->st_Contains).end(); it_Elem++) int_Level = 33; str_KW = str_FaceToFaceName; str_ValKW = ""; LineForLevel(int_Level, str_EntsDefinitions, str_KW, str_ValKW); //str_EntsDefinitions = str_EntsDefinitions + FIN_KW2_L + str_Balise + KW_R; // SideBySide int_Level = 32; str_KW = str_SideBySideName; str_ValKW = ""; LineForLevel(int_Level, str_EntsDefinitions, str_KW, str_ValKW); //str_Balise = str_SideBySideName; //str_EntsDefinitions = str_EntsDefinitions + DEB_KW2_L + str_Balise + KW_R; //list ::iterator it_Elem; //for (it_Elem = (st_IfcEnt->st_SideBySide).begin(); it_Elem != (st_IfcEnt->st_SideBySide).end(); it_Elem++) //map ::iterator it_ElemBool; //for (map > ::iterator it_ElemBool = (st_IfcEnt->mp_SideBySide).begin(); it_ElemBool != (st_IfcEnt->mp_SideBySide).end(); it_ElemBool++) for (set >> ::iterator it_ElemBool = (st_IfcEnt->mp_SideBySide).begin(); it_ElemBool != (st_IfcEnt->mp_SideBySide).end(); it_ElemBool++) { string bo_val = ">ch_Id + bo_val; LineForLevel(int_Level, str_EntsDefinitions, str_KW, str_ValKW); //str_EntsDefinitions = str_EntsDefinitions + DEB_KW3_L + (*it_ElemBool).first->ch_Id + bo_val + KW_R; }// for (it_ElemBool = (st_IfcEnt->mp_SideBySide).begin(); it_ElemBool != (st_IfcEnt->mp_SideBySide).end(); it_ElemBool++) int_Level = 33; str_KW = str_SideBySideName; str_ValKW = ""; LineForLevel(int_Level, str_EntsDefinitions, str_KW, str_ValKW); //str_EntsDefinitions = str_EntsDefinitions + FIN_KW2_L + str_Balise + KW_R; // Centroid int_Level = 32; str_KW = str_Centroid; str_ValKW = ""; LineForLevel(int_Level, str_EntsDefinitions, str_KW, str_ValKW); //str_Balise = str_Centroid; //str_EntsDefinitions = str_EntsDefinitions + DEB_KW2_L + str_Balise + KW_R; //list ::iterator it_DbVal; for (list ::iterator it_DbVal = (st_IfcEnt->db_Centroid).begin(); it_DbVal != (st_IfcEnt->db_Centroid).end(); it_DbVal++) { int_Level = 40; str_KW = ""; str_ValKW = to_string(*(*it_DbVal)); LineForLevel(int_Level, str_EntsDefinitions, str_KW, str_ValKW); //str_EntsDefinitions = str_EntsDefinitions + DEB_KW3_L + to_string(*(*it_DbVal)) + KW_R; }// for (it_Elem = (st_IfcEnt->st_Contains).begin(); it_Elem != (st_IfcEnt->st_Contains).end(); it_Elem++) int_Level = 33; str_KW = str_Centroid; str_ValKW = ""; LineForLevel(int_Level, str_EntsDefinitions, str_KW, str_ValKW); //str_EntsDefinitions = str_EntsDefinitions + FIN_KW2_L + str_Balise + KW_R; // TIFCSurface int_Level = 32; str_KW = _str_LESOSAI_Surface; str_ValKW = ""; LineForLevel(int_Level, str_EntsDefinitions, str_KW, str_ValKW); //str_Balise = _str_LESOSAI_Surface; //str_EntsDefinitions = str_EntsDefinitions + DEB_KW2_L + str_Balise + KW_R; if (st_IfcEnt->st_TIFCSurface) { int_Level = 40; str_KW = ""; str_ValKW = st_IfcEnt->st_TIFCSurface->ch_Id; LineForLevel(int_Level, str_EntsDefinitions, str_KW, str_ValKW); //str_EntsDefinitions = str_EntsDefinitions + DEB_KW3_L + st_IfcEnt->st_TIFCSurface->ch_Id + KW_R; }// if (st_IfcEnt->st_TIFCSurface) int_Level = 33; str_KW = _str_LESOSAI_Surface; str_ValKW = ""; LineForLevel(int_Level, str_EntsDefinitions, str_KW, str_ValKW); //str_EntsDefinitions = str_EntsDefinitions + FIN_KW2_L + str_Balise + KW_R; return res; } int LoadDataAtBEMFormat::SpecificConversionOfContainsForTIFCSurface(STRUCT_IFCENTITY *&st_IfcEnt, string &str_EntsDefinitions, string &str_ContainsName, string &str_InsideContainsName) { int res = 0; // Contains //string str_Balise = str_ContainsName; //str_EntsDefinitions = str_EntsDefinitions + DEB_KW2_L + str_Balise + KW_R; int i_Ind=1; list ::iterator it_Elem; for (it_Elem = (st_IfcEnt->st_Contains).begin(); it_Elem != (st_IfcEnt->st_Contains).end(); it_Elem++) { - // geoInt1 et geoInt2 (geoInt2 est vide si c'est une TIFCsurface en vis-à-vis avec extérieur) + // geoInt1 et geoInt2 (geoInt2 est vide si c'est une TIFCsurface en vis-à-vis avec extérieur) int int_Level = 30; string str_KW = "geoInt" + std::to_string(i_Ind); string str_ValKW = (*it_Elem)->ch_Id; LineForLevel(int_Level, str_EntsDefinitions, str_KW, str_ValKW); //str_EntsDefinitions = str_EntsDefinitions + DEB_KW2_L + "geoInt" + std::to_string(i_Ind) + "=" + (*it_Elem)->ch_Id + KW_R; list ::iterator it_Elem2; for (it_Elem2 = ((*it_Elem)->st_BelongsTo).begin(); it_Elem2 != ((*it_Elem)->st_BelongsTo).end(); it_Elem2++) { if (string((*it_Elem2)->ch_Type) == "IfcSpace") { int_Level = 30; str_KW = "room" + std::to_string(i_Ind); str_ValKW = (*it_Elem2)->ch_Id; LineForLevel(int_Level, str_EntsDefinitions, str_KW, str_ValKW); //str_EntsDefinitions = str_EntsDefinitions + DEB_KW2_L + "room" + std::to_string(i_Ind) + "=" + (*it_Elem2)->ch_Id + KW_R; }// if (string((*it_Elem2)->ch_Type) == "IfcSpace") // Type de TIFCSurface : ifcWall, ifcCeiling, ifcFloor else if (i_Ind == 1) { int_Level = 30; str_KW = "surfType"; if ((*it_Elem2)->ch_PredifinedType != nullptr /*&& (*it_Elem2)->ch_PredifinedType != "notdefined"*/) str_ValKW = (*it_Elem2)->ch_PredifinedType; else str_ValKW = (*it_Elem2)->ch_Type; LineForLevel(int_Level, str_EntsDefinitions, str_KW, str_ValKW); //str_EntsDefinitions = str_EntsDefinitions + DEB_KW2_L + "surfType" + "=" + (*it_Elem2)->ch_Type + KW_R; }// else if (i_Ind == 1) }// for (it_Elem = (st_IfcEnt->st_Contains).begin(); it_Elem != (st_IfcEnt->st_Contains).end(); it_Elem++) i_Ind ++ ; }// for (it_Elem = (st_IfcEnt->st_Contains).begin(); it_Elem != (st_IfcEnt->st_Contains).end(); it_Elem++) //str_EntsDefinitions = str_EntsDefinitions + FIN_KW2_L + str_Balise + KW_R; return res; } int LoadDataAtBEMFormat::SpecificConversionOfContainsBuilding(STRUCT_IFCENTITY *&st_IfcEnt, string &str_EntsDefinitions, string &str_ContainsName, string &str_InsideContainsName) { int res = 0; res = SpecificConversionOfContains(st_IfcEnt, str_EntsDefinitions, str_ContainsName, str_InsideContainsName); - // boucle à partir du building sur ses storey, puis les espaces puis les ifconnecturface puis les TIFCSurface + // boucle à partir du building sur ses storey, puis les espaces puis les ifconnecturface puis les TIFCSurface // pour recuperer tous les TIFCSurface du building(de maniere unique) = > map ou liste(+unique()) puis lire les id des TIFCSurface list li_TIFCSurfaceByBuilding; list ::iterator it_ElemStorey; for (it_ElemStorey = (st_IfcEnt->st_Contains).begin(); it_ElemStorey != (st_IfcEnt->st_Contains).end(); it_ElemStorey++) { list ::iterator it_ElemSpace; for (it_ElemSpace = ((*it_ElemStorey)->st_Contains).begin(); it_ElemSpace != ((*it_ElemStorey)->st_Contains).end(); it_ElemSpace++) { list ::iterator it_ElemCSAndBE; for (it_ElemCSAndBE = ((*it_ElemSpace)->st_Contains).begin(); it_ElemCSAndBE != ((*it_ElemSpace)->st_Contains).end(); it_ElemCSAndBE++) { if((*it_ElemCSAndBE)->st_TIFCSurface) li_TIFCSurfaceByBuilding.push_back((*it_ElemCSAndBE)->st_TIFCSurface); }// for (it_ElemCSAndBE = ((*it_ElemSpace)->st_Contains).begin(); it_ElemCSAndBE != ((*it_ElemSpace)->st_Contains).end(); it_ElemCSAndBE++) }// for (it_ElemSpace = ((*it_ElemStorey)->st_Contains).begin(); it_ElemSpace != ((*it_ElemStorey)->st_Contains).end(); it_ElemSpace++) }// for (it_ElemStorey = (st_IfcEnt->st_Contains).begin(); it_ElemStorey != (st_IfcEnt->st_Contains).end(); it_ElemStorey++) li_TIFCSurfaceByBuilding.sort(); li_TIFCSurfaceByBuilding.unique(); // surfaces int int_Level = 32; string str_KW = "surfaces" /*+ _str_LESOSAI_Surfaces*/; string str_ValKW = ""; LineForLevel(int_Level, str_EntsDefinitions, str_KW, str_ValKW); //string str_Balise = "surfaces : " + _str_LESOSAI_Surfaces; //str_EntsDefinitions = str_EntsDefinitions + DEB_KW2_L + str_Balise + KW_R; list ::iterator it_Elem; for (it_Elem = li_TIFCSurfaceByBuilding.begin(); it_Elem != li_TIFCSurfaceByBuilding.end(); it_Elem++) { int_Level = 40; str_KW = _str_LESOSAI_Surface; str_ValKW = (*it_Elem)->ch_Id; LineForLevel(int_Level, str_EntsDefinitions, str_KW, str_ValKW); //str_EntsDefinitions = str_EntsDefinitions + DEB_KW3_L + _str_LESOSAI_Surface + "=" + (*it_Elem)->ch_Id + KW_R; }// for (it_Elem = (st_IfcEnt->st_Contains).begin(); it_Elem != (st_IfcEnt->st_Contains).end(); it_Elem++) int_Level = 33; str_KW = "surfaces" /*+ _str_LESOSAI_Surfaces*/; str_ValKW = ""; LineForLevel(int_Level, str_EntsDefinitions, str_KW, str_ValKW); //str_EntsDefinitions = str_EntsDefinitions + FIN_KW2_L + str_Balise + KW_R; return res; } int LoadDataAtBEMFormat::SpecificConversionOfContains(STRUCT_IFCENTITY *&st_IfcEnt, string &str_EntsDefinitions, string &str_ContainsName, string &str_InsideContainsName) { int res = 0; // Contains int int_Level = 32; string str_KW = str_ContainsName; string str_ValKW = ""; LineForLevel(int_Level, str_EntsDefinitions, str_KW, str_ValKW); //string str_Balise = str_ContainsName; //str_EntsDefinitions = str_EntsDefinitions + DEB_KW2_L + str_Balise + KW_R; list ::iterator it_Elem; for (it_Elem = (st_IfcEnt->st_Contains).begin(); it_Elem != (st_IfcEnt->st_Contains).end(); it_Elem++) { if (str_InsideContainsName == "") { int_Level = 40; str_KW = ""; str_ValKW = (*it_Elem)->ch_Id; LineForLevel(int_Level, str_EntsDefinitions, str_KW, str_ValKW); //str_EntsDefinitions = str_EntsDefinitions + DEB_KW3_L + (*it_Elem)->ch_Id + KW_R; }// if (str_InsideContainsName == "") else { int_Level = 40; str_KW = str_InsideContainsName; str_ValKW = (*it_Elem)->ch_Id; LineForLevel(int_Level, str_EntsDefinitions, str_KW, str_ValKW); //str_EntsDefinitions = str_EntsDefinitions + DEB_KW3_L + str_InsideContainsName + "=" + (*it_Elem)->ch_Id + KW_R; }// else if (str_InsideContainsName == "") }// for (it_Elem = (st_IfcEnt->st_Contains).begin(); it_Elem != (st_IfcEnt->st_Contains).end(); it_Elem++) int_Level = 33; str_KW = str_ContainsName; str_ValKW = ""; LineForLevel(int_Level, str_EntsDefinitions, str_KW, str_ValKW); //str_EntsDefinitions = str_EntsDefinitions + FIN_KW2_L + str_Balise + KW_R; return res; } int LoadDataAtBEMFormat::SpecificConversionOfContainsForSpace(STRUCT_IFCENTITY *&st_IfcEnt, string &str_EntsDefinitions, string &str_ContainsName, string &str_InsideContainsName) { int res = 0; // Contains int int_Level = 32; string str_KW = str_ContainsName; string str_ValKW = ""; LineForLevel(int_Level, str_EntsDefinitions, str_KW, str_ValKW); //string str_Balise = str_ContainsName; //str_EntsDefinitions = str_EntsDefinitions + DEB_KW2_L + str_Balise + KW_R; list ::iterator it_Elem; for (it_Elem = (st_IfcEnt->st_Contains).begin(); it_Elem != (st_IfcEnt->st_Contains).end(); it_Elem++) { if (string((*it_Elem)->ch_Type) == string("IfcProductDefinitionShape")) { - //on saute l'étage "IfcProductDefinitionShape" pour descendre sur les faces + //on saute l'étage "IfcProductDefinitionShape" pour descendre sur les faces list ::iterator it_SsElem; for (it_SsElem = ((*it_Elem)->st_Contains).begin(); it_SsElem != ((*it_Elem)->st_Contains).end(); it_SsElem++) { int int_Level = 40; string str_KW = str_InsideContainsName; string str_ValKW = (*it_SsElem)->ch_Id; LineForLevel(int_Level, str_EntsDefinitions, str_KW, str_ValKW); //str_EntsDefinitions = str_EntsDefinitions + DEB_KW3_L + str_InsideContainsName + "=" + (*it_SsElem)->ch_Id + KW_R; }// for (it_Elem = (st_IfcEnt->st_Contains).begin(); it_Elem != (st_IfcEnt->st_Contains).end(); it_Elem++) }// for (it_SsElem = ((*it_Elem)->st_Contains).begin(); it_SsElem != ((*it_Elem)->st_Contains).end(); it_SsElem++) }// for (it_Elem = (st_IfcEnt->st_Contains).begin(); it_Elem != (st_IfcEnt->st_Contains).end(); it_Elem++) int_Level = 33; str_KW = str_ContainsName; str_ValKW = ""; LineForLevel(int_Level, str_EntsDefinitions, str_KW, str_ValKW); //str_EntsDefinitions = str_EntsDefinitions + FIN_KW2_L + str_Balise + KW_R; Map_String_String::iterator it_MapVal; for (it_MapVal = (st_IfcEnt->map_DefValues)->begin(); it_MapVal != (st_IfcEnt->map_DefValues)->end(); it_MapVal++) { int_Level = 30; str_KW = (*it_MapVal).first; str_ValKW = (*it_MapVal).second; LineForLevel(int_Level, str_EntsDefinitions, str_KW, str_ValKW); //str_EntsDefinitions = str_EntsDefinitions + DEB_KW2_L + (*it_MapVal).first + "=" + (*it_MapVal).second + KW_R; }// for (it_MapVal = (st_IfcEnt->map_DefValues)->begin(); it_MapVal != (st_IfcEnt->map_DefValues)->end(); it_MapVal++) return res; } int LoadDataAtBEMFormat::SpecificConversionOfContainsForFaceAndSubFace(STRUCT_IFCENTITY *&st_IfcEnt, string &str_EntsDefinitions, string &str_ContainsName, string &str_InsideContainsName) { //lire la liste des points et non contains int res = 0; // Contains int int_Level = 32; string str_KW = str_ContainsName; string str_ValKW = ""; LineForLevel(int_Level, str_EntsDefinitions, str_KW, str_ValKW); //string str_Balise = str_ContainsName; //str_EntsDefinitions = str_EntsDefinitions + DEB_KW2_L + str_Balise + KW_R; list > ::iterator it_llPt; for (it_llPt = (st_IfcEnt->st_PointsDesContours).begin(); it_llPt != (st_IfcEnt->st_PointsDesContours).end(); it_llPt++) { list ::iterator it_lPt; for (it_lPt = (*it_llPt).begin(); it_lPt != (*it_llPt).end(); it_lPt++) { int_Level = 42; str_KW = ""; str_ValKW = "point x=\"" + std::to_string(*(*it_lPt)) + "\""; it_lPt++; str_ValKW += " y=\"" + std::to_string(*(*it_lPt)) + "\""; it_lPt++; str_ValKW += " z=\"" + std::to_string(*(*it_lPt)) + "\""; //str_ValKW = std::to_string(*(*it_lPt)); LineForLevel(int_Level, str_EntsDefinitions, str_KW, str_ValKW); //str_EntsDefinitions = str_EntsDefinitions + DEB_KW3_L + std::to_string(*(*it_lPt)) + KW_R; }// for (it_lPt = (*it_llPt).begin(); it_lPt != (*it_llPt).end(); it_lPt++) }// for (it_llPt = (st_IfcEnt->st_PointsDesContours).begin(); it_llPt != (st_IfcEnt->st_PointsDesContours).end(); it_llPt++) int_Level = 33; str_KW = str_ContainsName; str_ValKW = ""; LineForLevel(int_Level, str_EntsDefinitions, str_KW, str_ValKW); //str_EntsDefinitions = str_EntsDefinitions + FIN_KW2_L + str_Balise + KW_R; return res; } int LoadDataAtBEMFormat::SpecificConversionOfNorthProject(STRUCT_IFCENTITY *&st_IfcEnt, string &str_EntsDefinitions/*, string &str_ContainsName, string &str_InsideContainsName*/) { //lire la liste des points et non contains int res = 0; string str_North = "north"; // Contains int int_Level = 32; string str_KW = str_North; string str_ValKW = str_North; LineForLevel(int_Level, str_EntsDefinitions, str_KW, str_ValKW); //string str_Balise = str_ContainsName; //str_EntsDefinitions = str_EntsDefinitions + DEB_KW2_L + str_Balise + KW_R; list ::iterator it_lPt; for (it_lPt = (st_IfcEnt->db_Centroid).begin(); it_lPt != (st_IfcEnt->db_Centroid).end(); it_lPt++) { //list ::iterator it_lPt; //for (it_lPt = (*it_llPt).begin(); it_lPt != (*it_llPt).end(); it_lPt++) //{ int_Level = 42; str_KW = ""; str_ValKW = "point x=\"" + std::to_string(*(*it_lPt)) + "\""; it_lPt++; str_ValKW += " y=\"" + std::to_string(*(*it_lPt)) + "\""; it_lPt++; str_ValKW += " z=\"" + std::to_string(*(*it_lPt)) + "\""; //str_ValKW = std::to_string(*(*it_lPt)); LineForLevel(int_Level, str_EntsDefinitions, str_KW, str_ValKW); //str_EntsDefinitions = str_EntsDefinitions + DEB_KW3_L + std::to_string(*(*it_lPt)) + KW_R; //}// for (it_lPt = (*it_llPt).begin(); it_lPt != (*it_llPt).end(); it_lPt++) }// for (it_llPt = (st_IfcEnt->st_PointsDesContours).begin(); it_llPt != (st_IfcEnt->st_PointsDesContours).end(); it_llPt++) int_Level = 33; str_KW = str_North; str_ValKW = ""; LineForLevel(int_Level, str_EntsDefinitions, str_KW, str_ValKW); //str_EntsDefinitions = str_EntsDefinitions + FIN_KW2_L + str_Balise + KW_R; return res; } //int LoadDataAtBEMFormat::SpecificConversionOfContainsForSubFace(STRUCT_IFCENTITY *&st_IfcEnt, string &str_EntsDefinitions, string &str_ContainsName) //{ // //lire la liste des points et non contains // int res = 0; // // string str_Balise = str_ContainsName; // str_EntsDefinitions = str_EntsDefinitions + DEB_KW2_L + str_Balise + KW_R; // list > ::iterator it_llPt; // for (it_llPt = (st_IfcEnt->st_PointsDesContours).begin(); it_llPt != (st_IfcEnt->st_PointsDesContours).end(); it_llPt++) // { // list ::iterator it_lPt; // for (it_lPt = (*it_llPt).begin(); it_lPt != (*it_llPt).end(); it_lPt++) // str_EntsDefinitions = str_EntsDefinitions + DEB_KW3_L + std::to_string(*(*it_lPt)) + KW_R; // }// for (it_llPt = (st_IfcEnt->st_PointsDesContours).begin(); it_llPt != (st_IfcEnt->st_PointsDesContours).end(); it_llPt++) // str_EntsDefinitions = str_EntsDefinitions + FIN_KW2_L + str_Balise + KW_R; // // return res; //} // int LoadDataAtBEMFormat::ConvertIfcProject(STRUCT_IFCENTITY *st_IfcEnt) { int res = 0; // Id, Name, Contains string str_Balise = _str_LESOSAI_Projet; string str_ContainsName = "sites" /*+ _str_LESOSAI_Sites*/; string str_InsideContainsName = _str_LESOSAI_Site; ConvertIfcEnt(st_IfcEnt, str_Balise, _str_ProjectsDefinitions, str_ContainsName, str_InsideContainsName); return res; } int LoadDataAtBEMFormat::ConvertIfcSite(STRUCT_IFCENTITY *st_IfcEnt) { int res = 0; // Id, Name, Contains string str_Balise = _str_LESOSAI_Site; string str_ContainsName = "buildings" /*+ _str_LESOSAI_Buildings*/; string str_InsideContainsName = _str_LESOSAI_Building; ConvertIfcEnt(st_IfcEnt, str_Balise, _str_SitesDefinitions, str_ContainsName, str_InsideContainsName); return res; } int LoadDataAtBEMFormat::ConvertIfcBuilding(STRUCT_IFCENTITY *st_IfcEnt) { int res = 0; // Id, Name, Contains string str_Balise = _str_LESOSAI_Building; string str_ContainsName = "storeys" /*+ _str_LESOSAI_Storeys*/; string str_InsideContainsName = _str_LESOSAI_Storey; ConvertIfcEnt(st_IfcEnt, str_Balise, _str_BuildingsDefinitions, str_ContainsName, str_InsideContainsName); return res; } int LoadDataAtBEMFormat::ConvertIfcBuildingStorey(STRUCT_IFCENTITY *st_IfcEnt) { int res = 0; // Id, Name, Contains string str_Balise = _str_LESOSAI_Storey; string str_ContainsName = "spaces" /*+ _str_LESOSAI_Spaces*/; string str_InsideContainsName = _str_LESOSAI_Space; //string str_ContainsName = "spaces"; ConvertIfcEnt(st_IfcEnt, str_Balise, _str_BuildingStoreysDefinitions, str_ContainsName, str_InsideContainsName); return res; } int LoadDataAtBEMFormat::ConvertIfcSpace(STRUCT_IFCENTITY *st_IfcEnt) { int res = 0; // Id, Name, Contains string str_Balise = _str_LESOSAI_Space; string str_ContainsName = "geo" /*+ _str_LESOSAI_Polygons*/; string str_InsideContainsName = _str_LESOSAI_Polygon; ConvertIfcEnt(st_IfcEnt, str_Balise, _str_SpacesDefinitions, str_ContainsName, str_InsideContainsName); return res; } int LoadDataAtBEMFormat::ConvertIfcFace(STRUCT_IFCENTITY *st_IfcEnt) { int res = 0; // Id, Name, Contains string str_Balise = _str_LESOSAI_Polygon; string str_ContainsName = "points" /*+ _str_LESOSAI_Points*/; string str_InsideContainsName = ""; ConvertIfcEnt(st_IfcEnt, str_Balise, _str_FacesDefinitions, str_ContainsName, str_InsideContainsName); return res; } int LoadDataAtBEMFormat::ConvertTIFCSurface(STRUCT_IFCENTITY *st_IfcEnt) { int res = 0; // Id, Name, Contains string str_Balise = _str_LESOSAI_Surface; string str_ContainsName = ""; string str_InsideContainsName = ""; ConvertIfcEnt(st_IfcEnt, str_Balise, _str_TIFCSurfacesDefinitions, str_ContainsName, str_InsideContainsName); return res; } int LoadDataAtBEMFormat::ConvertTIFCGeo2D(STRUCT_IFCENTITY *st_IfcEnt) { int res = 0; // Id, Name, Contains string str_Balise = _str_LESOSAI_Geo2D /*+ " (IfcConnectionSurfaceGeometry->SubFace)"*/; string str_ContainsName = "poly" /*+ _str_LESOSAI_Polygon*/; string str_InsideContainsName = _str_LESOSAI_Polygon ;//SubFace ConvertIfcEnt(st_IfcEnt, str_Balise, _str_TIFCGeo2DDefinitions, str_ContainsName, str_InsideContainsName); return res; } int LoadDataAtBEMFormat::ConvertIfcSubFace(STRUCT_IFCENTITY *st_IfcEnt) { int res = 0; // Id, Name, Contains string str_Balise = _str_LESOSAI_Polygon;//"SubFace" string str_ContainsName = "points" /*+ _str_LESOSAI_Points*/;//"points" string str_InsideContainsName = ""; ConvertIfcEnt(st_IfcEnt, str_Balise, _str_SubFacesDefinitions, str_ContainsName, str_InsideContainsName); return res; } int LoadDataAtBEMFormat::ConvertIfcConnectionSurfaceGeometry(STRUCT_IFCENTITY *st_IfcEnt) { int res = 0; // Id, Name, Contains string str_Balise = "IfcConnectionSurfaceGeometry"; string str_ContainsName = "contains"; string str_InsideContainsName = "SubFace"; ConvertIfcEnt(st_IfcEnt, str_Balise, _str_ConnectionSurfaceGeometriesDefinitions, str_ContainsName, str_InsideContainsName); return res; } int LoadDataAtBEMFormat::ConvertIfcProductDefinitionShape(STRUCT_IFCENTITY *st_IfcEnt) { int res = 0; // Id, Name, Contains string str_Balise = "IfcProductDefinitionShape"; string str_ContainsName = "contains"; string str_InsideContainsName = ""; ConvertIfcEnt(st_IfcEnt, str_Balise, _str_ProductDefinitionShapesDefinitions, str_ContainsName, str_InsideContainsName); return res; } diff --git a/IfcC++/ifc_BIMxBEMEPFLEngine/LoadDataAtBEMFormat.h b/IfcC++/ifc_BIMxBEMEPFLEngine/LoadDataAtBEMFormat.h index c1a5454..f03896f 100644 --- a/IfcC++/ifc_BIMxBEMEPFLEngine/LoadDataAtBEMFormat.h +++ b/IfcC++/ifc_BIMxBEMEPFLEngine/LoadDataAtBEMFormat.h @@ -1,102 +1,102 @@ #pragma once #include "ifc_Tree.h" #include "ifc_TreePostTreatment.h" //typedef std::map Map_Basified_Tree; // class LoadDataAtBEMFormat { public: LoadDataAtBEMFormat(double dbl_Minisurf); ~LoadDataAtBEMFormat(); int LoadLesosaiFormat(ifc_Tree* CurrentIfcTree); int GetLesosaiEntitiesNumber(); int GetLesosaiEntitiesAttributesSize(); int GetLesosaiEntitiesDefinition(string *&str_EntDef); int GetLesosaiLogFile(string *&str_LogFile); int ConvertIfcProject(STRUCT_IFCENTITY *st_IfcEnt); int ConvertIfcSite(STRUCT_IFCENTITY *st_IfcEnt); int ConvertIfcBuilding(STRUCT_IFCENTITY *st_IfcEnt); int ConvertIfcBuildingStorey(STRUCT_IFCENTITY *st_IfcEnt); int ConvertIfcSpace(STRUCT_IFCENTITY *st_IfcEnt); int ConvertIfcProductDefinitionShape(STRUCT_IFCENTITY *st_IfcEnt); int ConvertTIFCSurface(STRUCT_IFCENTITY *st_IfcEnt); int ConvertTIFCGeo2D(STRUCT_IFCENTITY *st_IfcEnt); int ConvertIfcFace(STRUCT_IFCENTITY *st_IfcEnt); int ConvertIfcSubFace(STRUCT_IFCENTITY *st_IfcEnt); int ConvertIfcConnectionSurfaceGeometry(STRUCT_IFCENTITY *st_IfcEnt); int ConvertBasifiedTree(Map_Basified_Tree *&map_BasifTree); int SpecificConversionOfContains(STRUCT_IFCENTITY *&st_IfcEnt, string &str_EntsDefinitions, string &str_ContainsName, string &str_InsideContainsName); int SpecificConversionOfContainsBuilding(STRUCT_IFCENTITY *&st_IfcEnt, string &str_EntsDefinitions, string &str_ContainsName, string &str_InsideContainsName); int SpecificConversionOfContainsForSpace(STRUCT_IFCENTITY *&st_IfcEnt, string &str_EntsDefinitions, string &str_ContainsName, string &str_InsideContainsName); int SpecificConversionOfContainsForFaceAndSubFace(STRUCT_IFCENTITY *&st_IfcEnt, string &str_EntsDefinitions, string &str_ContainsName, string &str_InsideContainsName); //int SpecificConversionOfContainsForSubFace(STRUCT_IFCENTITY *&st_IfcEnt, string &str_EntsDefinitions, string &str_ContainsName); int SpecificConversionOfContainsForTIFCGeo2D(STRUCT_IFCENTITY *&st_IfcEnt, string &str_EntsDefinitions, string &str_ContainsName, string &str_InsideContainsName); int SpecificConversionOfContainsForConnectionSurfaceGeometry(STRUCT_IFCENTITY *&st_IfcEnt, string &str_EntsDefinitions, string &str_ContainsName, string &str_InsideContainsName, string str_FaceToFaceName = "FaceToFace", string str_Centroid = "Centroid", string str_SideBySideName = "SideBySide"); int SpecificConversionOfContainsForTIFCSurface(STRUCT_IFCENTITY *&st_IfcEnt, string &str_EntsDefinitions, string &str_ContainsName, string &str_InsideContainsName); int SpecificConversionOfNorthProject(STRUCT_IFCENTITY *&st_IfcEnt, string &str_EntsDefinitions/*, string &str_ContainsName, string &str_InsideContainsName*/); int GenericConversion(STRUCT_IFCENTITY *&st_IfcEnt, string &str_EntsDefinitions, string &str_ContainsName, string &str_InsideContainsName); int ConvertIfcEnt(STRUCT_IFCENTITY *&st_IfcEnt, string &str_Balise, string &str_EntsDefinitions, string &str_ContainsName, string &str_InsideContainsName); //int BasifyTreeFrom(STRUCT_IFCENTITY *&st_IfcTree, Map_Basified_Tree &map_BasifTree); void OpenSets(); void CloseSets(); private: int LineForLevel(int &int_Level, string &str_EntsDefinitions, string &str_KW, string &str_ValKW); - // Compilation de toutes les entités d'un même type + // Compilation de toutes les entités d'un même type string _str_ProjectsDefinitions; string _str_SitesDefinitions; string _str_BuildingsDefinitions; string _str_BuildingStoreysDefinitions; string _str_SpacesDefinitions; string _str_FacesDefinitions; string _str_SubFacesDefinitions; string _str_ProductDefinitionShapesDefinitions; string _str_ConnectionSurfaceGeometriesDefinitions; string _str_TIFCSurfacesDefinitions; string _str_TIFCGeo2DDefinitions; - // Initialisation des différents mots-clés lexicaux + // Initialisation des différents mots-clés lexicaux string _str_LESOSAI_SetsRoot = "bimbem"; //Root_Of_TIFCSets string _str_LESOSAI_ProjetsSet = "Set_Of_TIFCProjects"; string _str_LESOSAI_Projets = "TIFCProjects"; string _str_LESOSAI_Projet = "TIFCProject"; string _str_LESOSAI_SitesSet = "Set_Of_TIFCSites"; string _str_LESOSAI_Sites = "TIFCSites"; string _str_LESOSAI_Site = "TIFCSite"; string _str_LESOSAI_BuildingsSet = "Set_Of_TIFCBuildings"; string _str_LESOSAI_Buildings = "TIFCBuildings";string _str_LESOSAI_Building = "TIFCBuilding"; string _str_LESOSAI_StoreysSet = "Set_Of_TIFCStoreys"; string _str_LESOSAI_Storeys = "TIFCStoreys"; string _str_LESOSAI_Storey = "TIFCStorey"; string _str_LESOSAI_ZonesSet = "Set_Of_TIFCZones"; string _str_LESOSAI_Zones = "TIFCZones"; string _str_LESOSAI_Zone = "TIFCZone"; string _str_LESOSAI_SpacesSet = "Set_Of_TIFCSpaces"; string _str_LESOSAI_Spaces = "TIFCSpaces"; string _str_LESOSAI_Space = "TIFCSpace"; string _str_LESOSAI_SurfacesSet = "Set_Of_TIFCSurfaces"; string _str_LESOSAI_Surfaces = "TIFCSurfaces"; string _str_LESOSAI_Surface = "TIFCSurface"; string _str_LESOSAI_PolygonsSet = "Set_Of_TIFCPolygons"; string _str_LESOSAI_Polygons = "TIFCPolygons"; string _str_LESOSAI_Polygon = "TIFCPolygon"; string _str_LESOSAI_PointsSet = "Set_Of_TIFCPoints"; string _str_LESOSAI_Points = "TIFCPoints"; string _str_LESOSAI_Point = "TIFCPoint"; string _str_LESOSAI_Geo2DSet = "Set_Of_TIFCGeo2Ds"; string _str_LESOSAI_Geo2Ds = "TIFCGeo2Ds"; string _str_LESOSAI_Geo2D = "TIFCGeo2D"; - // Initialisation des différents mots-clés grammaticaux + // Initialisation des différents mots-clés grammaticaux string DEB_KW0_L = "<"; string DEB_KW1_L = "\t<"; string DEB_KW2_L = "\t\t<"; string DEB_KW3_L = "\t\t\t<"; string DEB_KW4_L = "\t\t\t\t<"; string KW_R = ">"; string KW_Rn = ">\n"; string KW1_Rn = "/>\n"; string FIN_KW0_L = " #include "ifcXML_File.h" ifcXML_File::ifcXML_File() :_hRoot(0), _cl_ifcTree(nullptr)/*, st_IfcTree(nullptr)*/ { } ifcXML_File::~ifcXML_File() { // - //Desalloc des données membres de ifcXML_File + //Desalloc des données membres de ifcXML_File if (_cl_ifcTree) delete _cl_ifcTree; _cl_ifcTree = nullptr; } ifc_Tree* ifcXML_File::GetData() { return _cl_ifcTree; } int ifcXML_File::LoadFile(char *strFileName) { // //http://www.grinninglizard.com/tinyxmldocs/classTiXmlDocument.html TiXmlDocument doc(strFileName); if (!doc.LoadFile()) - return 1001;//Format erreur: XXXYYY XXX=numero identifiant la routine , YYY=numéro de l'erreur dans cette routine + return 1001;//Format erreur: XXXYYY XXX=numero identifiant la routine , YYY=numéro de l'erreur dans cette routine TiXmlHandle hDoc(&doc); TiXmlElement* pElem = hDoc.FirstChildElement().ToElement(); // should always have a valid root but handle gracefully if it does if (!pElem) - return 1002;//Format erreur: XXXYYY XXX=numero identifiant la routine , YYY=numéro de l'erreur dans cette routine + return 1002;//Format erreur: XXXYYY XXX=numero identifiant la routine , YYY=numéro de l'erreur dans cette routine // memo root _hRoot = pElem->FirstChild("ex:uos"); - //Chargement de toutes les entités du fichier xml dans un tableau de type "MAP": + //Chargement de toutes les entités du fichier xml dans un tableau de type "MAP": // _map_ID_Elmt["i1722"] = TiXmlElement *() int res = LoadIfcEntities(_hRoot); if (res != 0) - return 1003;//Format erreur: XXXYYY XXX=numero identifiant la routine , YYY=numéro de l'erreur dans cette routine + return 1003;//Format erreur: XXXYYY XXX=numero identifiant la routine , YYY=numéro de l'erreur dans cette routine //Initialisation de la map _map_BE_Quantities - // => Chargement de toutes les entités du fichier xml dans un tableau de type "MAP" associant à chaque élément de construction (IfcWallStandardCase, IfcSlab, ...) - // leurs propriétés "IfcElementQuantity" (Length, Width, Height, GrossFootprintArea, ...): + // => Chargement de toutes les entités du fichier xml dans un tableau de type "MAP" associant à chaque élément de construction (IfcWallStandardCase, IfcSlab, ...) + // leurs propriétés "IfcElementQuantity" (Length, Width, Height, GrossFootprintArea, ...): // _map_BE_Quantities[TiXmlElement * Buildingelemet] = TiXmlElement * IfcElementQuantity res = ScanIfcRelDefinesByPropertiesForQuantities(); if (res != 0) - return 1004;//Format erreur: XXXYYY XXX=numero identifiant la routine , YYY=numéro de l'erreur dans cette routine + return 1004;//Format erreur: XXXYYY XXX=numero identifiant la routine , YYY=numéro de l'erreur dans cette routine - //Recup de l'élément "IfcProject" + //Recup de l'élément "IfcProject" pElem = _hRoot.FirstChild("IfcProject").ToElement(); - // Constitution de l'arbre structure de données BIMxBEM + // Constitution de l'arbre structure de données BIMxBEM _cl_ifcTree = new ifc_Tree(); if (_cl_ifcTree) res = _cl_ifcTree->BuildTreeFromRoot(pElem, this); return res; } // -// La définition d'une entité se compose de lien direct (les attributs) et de liens indirects vers d'autres entités (les entités liées) +// La définition d'une entité se compose de lien direct (les attributs) et de liens indirects vers d'autres entités (les entités liées) // -// Cette classe se décompose en 4 parties principales: +// Cette classe se décompose en 4 parties principales: // 1.0: Routines de base de lecture des attributs -// 1.1: Routines spécifiques de lecture des attributs -// 2.0: Routines de base de recherche des entités liés -// 2.1: Routines de recherche par chemin "UN-aire" des entités liées -// 2.2: Routines de recherche par chemin "MULTI-aire" des entités liées +// 1.1: Routines spécifiques de lecture des attributs +// 2.0: Routines de base de recherche des entités liés +// 2.1: Routines de recherche par chemin "UN-aire" des entités liées +// 2.2: Routines de recherche par chemin "MULTI-aire" des entités liées // 3.0: Routines de scan // -// Pour chercher des entités depuis leur id => utiliser _map_ID_Elmt (si on a l'id) -// Pour chercher des entités depuis leur ref => utiliser la routine FindObjectFromRef -// Pour chercher des entités depuis leur nom de type ifc => utiliser routines de base du parser (par exemple "TiXmlHandle.Child(pKeyword1,..)") +// Pour chercher des entités depuis leur id => utiliser _map_ID_Elmt (si on a l'id) +// Pour chercher des entités depuis leur ref => utiliser la routine FindObjectFromRef +// Pour chercher des entités depuis leur nom de type ifc => utiliser routines de base du parser (par exemple "TiXmlHandle.Child(pKeyword1,..)") // ////////////////////////////////////////////////////////////////////////////////////// // 1.0) ROUTINES DE BASE DE LECTURE (DES ATTRIBUTS) DE LA DEFINITION D'UNE ENTITE // ////////////////////////////////////////////////////////////////////////////////////// -// Lecture de tous les attributs enfants d'une entité -// En quelque sorte, lecture des liens directs/constitutifs de la def qui ne soient pas des liens vers d'autres entités ifc (liens indirects) -// Ce liens indirects sont associés avec un chemin de mots clés pour obtenir l'entité souhaitée => plutôt dans les routines "Find..." +// Lecture de tous les attributs enfants d'une entité +// En quelque sorte, lecture des liens directs/constitutifs de la def qui ne soient pas des liens vers d'autres entités ifc (liens indirects) +// Ce liens indirects sont associés avec un chemin de mots clés pour obtenir l'entité souhaitée => plutôt dans les routines "Find..." int ifcXML_File::ReadIdAndTypeOfAnEntity(TiXmlElement *pIfcEntity, Map_String_String &map_messages) { int res = 0; // Positionnement sur le 1er child de "IfcEntity" TiXmlHandle hLocalRoot(pIfcEntity); TiXmlElement *pElem = hLocalRoot.FirstChild().ToElement(); map_messages["Id"] = pIfcEntity->Attribute("id"); map_messages["Type"] = pIfcEntity->Value(); //lecture du contenu des children de "IfcEntity" for (pElem; pElem; pElem = pElem->NextSiblingElement()) { const char *pKey = pElem->Value(); const char *pText = pElem->GetText(); if (pKey && pText) { map_messages[pKey] = pText; }// if (pKey && pText) }// for (pElem; pElem; pElem = pElem->NextSiblingElement()) return res; } -// Routines semblable à ReadIdAndTypeOfAnEntity (sans lecture de l'ID et du type) et surtout utilise en argument une liste plutôt que map car -// le problème est que si les index du tableau "map" sont les mêmes (pour lecture des coordonnées par exemple) cela ecrase alors la précédente valeur +// Routines semblable à ReadIdAndTypeOfAnEntity (sans lecture de l'ID et du type) et surtout utilise en argument une liste plutôt que map car +// le problème est que si les index du tableau "map" sont les mêmes (pour lecture des coordonnées par exemple) cela ecrase alors la précédente valeur int ifcXML_File::ReadAllValuesOfAnEntity(TiXmlElement *pIfcEntity, list &li_messages) { int res = 0; // Positionnement sur le 1er child de "IfcEntity" TiXmlHandle hLocalRoot(pIfcEntity); TiXmlElement *pElem = hLocalRoot.FirstChild().ToElement(); //lecture du contenu des children de "IfcEntity" for (pElem; pElem; pElem = pElem->NextSiblingElement()) { //const char *pKey = pElem->Value(); const char *pText = pElem->GetText(); if (/*pKey &&*/ pText) { li_messages.push_back(pText); }// if (pKey && pText) }// for (pElem; pElem; pElem = pElem->NextSiblingElement()) return res; } -// Lecture d'un attribut enfant d'une entité +// Lecture d'un attribut enfant d'une entité int ifcXML_File::ReadOneSpecificValueOfAnEntity(TiXmlElement *pIfcEntity, string &st_Path, string &st_value) { int res = 0; // Positionnement sur le 1er child de "IfcEntity" TiXmlHandle hLocalRoot(pIfcEntity); TiXmlElement *pElem = hLocalRoot.FirstChild(st_Path.c_str()).ToElement(); //lecture du contenu des children de "IfcEntity" if(pElem) st_value = pElem->GetText(); return res; } ///////////////////////////////////////////////////////////////////////////////////////////// // 1.1) ROUTINES DE SPECIFIQUES DE LECTURE (DES ATTRIBUTS) DE LA DEFINITION D'UNE ENTITE // ///////////////////////////////////////////////////////////////////////////////////////////// int ifcXML_File::ReadIfcDirectionVector(TiXmlElement *pElement, double Vector[3]) { // // Model // 3 // 1.000000000E-5 // // // // // // // string st_Path[2] = { "","" }; int res = 0; //Axe North st_Path[0] = "TrueNorth"; st_Path[1] = "IfcDirection"; TiXmlElement *lpObjectFound = nullptr; res = FindOneSpecificLinkedObjectFromFirstLinkPath(pElement, st_Path, lpObjectFound); TiXmlHandle hLocalBaseRoot3(lpObjectFound); TiXmlHandle hLocalBaseRoot4(hLocalBaseRoot3.FirstChild("DirectionRatios")); //lecture du contenu des child d'un IfcEntity list li_messages; res = ReadAllValuesOfAnEntity(hLocalBaseRoot4.ToElement(), li_messages); // Remplissage Matrice list ::iterator it_li_messages; it_li_messages = li_messages.begin(); Vector[0] = std::stod((*it_li_messages)); it_li_messages++; Vector[1] = std::stod((*it_li_messages)); it_li_messages++; if (it_li_messages == li_messages.end()) { Vector[2] = std::stod("0.0"); }// if (it_li_messages == li_messages.end()) else { Vector[2] = std::stod((*it_li_messages)); it_li_messages++; }// else if (it_li_messages == li_messages.end()) return 0; } int ifcXML_File::ReadIfcAxis2Placement3DMatrix(TiXmlElement *pElement, double Matrix[3][4]) { // // // // // // // // // // // string st_Path[2] = { "","" }; int res = 0; //Origin { st_Path[0] = "Location"; st_Path[1] = "IfcCartesianPoint"; TiXmlElement *lpObjectFound = nullptr; res = FindOneSpecificLinkedObjectFromFirstLinkPath(pElement, st_Path, lpObjectFound); TiXmlHandle hLocalBaseRoot3(lpObjectFound); TiXmlHandle hLocalBaseRoot4(hLocalBaseRoot3.FirstChild("Coordinates")); - //lecture du contenu des child d'un IfcEntity liés à "IfcProject" + //lecture du contenu des child d'un IfcEntity liés à "IfcProject" list li_messages; res = ReadAllValuesOfAnEntity(hLocalBaseRoot4.ToElement(), li_messages); // Remplissage Matrice list ::iterator it_li_messages; it_li_messages = li_messages.begin(); Matrix[0][3] = std::stod((*it_li_messages)); it_li_messages++; Matrix[1][3] = std::stod((*it_li_messages)); it_li_messages++; Matrix[2][3] = std::stod((*it_li_messages)); it_li_messages++; } //Axe Z { st_Path[0] = "Axis"; st_Path[1] = "IfcDirection"; TiXmlElement *lpObjectFound = nullptr; res = FindOneSpecificLinkedObjectFromFirstLinkPath(pElement, st_Path, lpObjectFound); TiXmlHandle hLocalBaseRoot3(lpObjectFound); TiXmlHandle hLocalBaseRoot4(hLocalBaseRoot3.FirstChild("DirectionRatios")); - //lecture du contenu des child d'un IfcEntity liés à "IfcProject" + //lecture du contenu des child d'un IfcEntity liés à "IfcProject" list li_messages; res = ReadAllValuesOfAnEntity(hLocalBaseRoot4.ToElement(), li_messages); // Remplissage Matrice list ::iterator it_li_messages; it_li_messages = li_messages.begin(); Matrix[0][2] = std::stod((*it_li_messages)); it_li_messages++; Matrix[1][2] = std::stod((*it_li_messages)); it_li_messages++; Matrix[2][2] = std::stod((*it_li_messages)); it_li_messages++; } //Axe X { st_Path[0] = "RefDirection"; st_Path[1] = "IfcDirection"; TiXmlElement *lpObjectFound = nullptr; res = FindOneSpecificLinkedObjectFromFirstLinkPath(pElement, st_Path, lpObjectFound); TiXmlHandle hLocalBaseRoot3(lpObjectFound); TiXmlHandle hLocalBaseRoot4(hLocalBaseRoot3.FirstChild("DirectionRatios")); //lecture du contenu des child d'un IfcEntity list li_messages; res = ReadAllValuesOfAnEntity(hLocalBaseRoot4.ToElement(), li_messages); // Remplissage Matrice list ::iterator it_li_messages; it_li_messages = li_messages.begin(); Matrix[0][0] = std::stod((*it_li_messages)); it_li_messages++; Matrix[1][0] = std::stod((*it_li_messages)); it_li_messages++; Matrix[2][0] = std::stod((*it_li_messages)); it_li_messages++; } // The axis is the placement Z axis direction and the ref_direction is an approximation to the placement X axis direction. - // 1ere colonne = « RefDirection » ; 2ème colonne = « Axis » X « RefDirection » ; 3ème colonne = « Axis » + // 1ere colonne = « RefDirection » ; 2ème colonne = « Axis » X « RefDirection » ; 3ème colonne = « Axis » // Definition from IAI: If the attribute values for Axis and RefDirection are not given, // the placement defaults to P[1] (x-axis) as [1.,0.,0.], P[2] (y-axis) as [0.,1.,0.] and P[3] (z-axis) as [0.,0.,1.]. //Axe Y // QUESTION: Produit vectoriel zXx ? ou xXz ? Matrix[0][1] = Matrix[1][2] * Matrix[2][0] - Matrix[2][2] * Matrix[1][0]; Matrix[1][1] = Matrix[2][2] * Matrix[0][0] - Matrix[0][2] * Matrix[2][0]; Matrix[2][1] = Matrix[0][2] * Matrix[1][0] - Matrix[1][2] * Matrix[0][0]; //Normalisation de Axe Y: - // Remarque: à priori x et z sont ortho et normalisés => pas nécessaire de normaliser y? + // Remarque: à priori x et z sont ortho et normalisés => pas nécessaire de normaliser y? double db_Norm = sqrt(Matrix[0][1] * Matrix[0][1] + Matrix[1][1] * Matrix[1][1] + Matrix[2][1] * Matrix[2][1]); Matrix[0][1] /= db_Norm; Matrix[1][1] /= db_Norm; Matrix[2][1] /= db_Norm; // //QUESTION: Faut-il orthogonaliser l'axe X (car "ref_direction is an approximation to the placement X axis direction")? // return 0; } int ifcXML_File::ReadKeyWordsAndValuesOfIfcElementQuantity(TiXmlElement *pIfcEntity, Map_String_String &m_messages) { // // Length // 10.07112391 // // // OU // // // NetFootprintArea // 4.028449566 // // // OU ... // int res = 0; - //Recup de la definition geométrique (IfcQuantity) de l'entité en cours + //Recup de la definition geométrique (IfcQuantity) de l'entité en cours TiXmlElement* pIfcEntityQuant = _map_BE_Quantities[pIfcEntity]; //Lecture des attributs de la definition string st_Path = "Quantities"; list llpObject; res = FindAllLinkedObjectsFromFirstLinkPath(pIfcEntityQuant, st_Path, llpObject); //Boucle sur chaque attribut list ::iterator it_Elem; for (it_Elem = llpObject.begin(); it_Elem != llpObject.end(); it_Elem++) { // Positionnement sur le 1er child de "IfcEntity" TiXmlHandle hLocalRoot((*it_Elem)); TiXmlElement *pElem1 = hLocalRoot.FirstChild().ToElement(); if ((*it_Elem)) { TiXmlElement *pElem2 = pElem1->NextSiblingElement(); m_messages[pElem1->GetText()] = pElem2->GetText(); //m_messages[pElem1->Value()] = pElem2->Value(); }// if ((*it_Elem)) }// for (it_Elem = llpObject.begin(); it_Elem != llpObject.end(); it_Elem++) return res; } //////////////////////////////////////////////////////////////////////////////////////////// // 2.0) ROUTINES DE BASE DE RECHERCHE (DES ENTITES LIEES) DE LA DEFINITION D'UNE ENTITE // //////////////////////////////////////////////////////////////////////////////////////////// -// Chargement en mémoire de tous les noeuds enfants de la racine => point d'entrée de toutes les entités ifc (de leur définition) -// Permet une recherche optimisée des définitions des entités à partir de leur "ref" qui se fait par leur "Id" (en index de la map) => cf. FindObjectFromRef +// Chargement en mémoire de tous les noeuds enfants de la racine => point d'entrée de toutes les entités ifc (de leur définition) +// Permet une recherche optimisée des définitions des entités à partir de leur "ref" qui se fait par leur "Id" (en index de la map) => cf. FindObjectFromRef int ifcXML_File::LoadIfcEntities(TiXmlHandle &hroot) { int res = 0; int iInd = 0; TiXmlElement* pIfcEntity = hroot.Child(iInd).ToElement(); while (pIfcEntity) { _map_ID_Elmt[pIfcEntity->Attribute("id")] = pIfcEntity; iInd++; pIfcEntity = hroot.Child(iInd).ToElement(); }// while (pIfcEntity) return res; } -// Recherche optimisée de la definition d'une entité référencé dans une autre entité (associé avec la routine LoadIfcEntities) +// Recherche optimisée de la definition d'une entité référencé dans une autre entité (associé avec la routine LoadIfcEntities) int ifcXML_File::FindObjectFromRef(TiXmlElement *&RelatedElmt, TiXmlElement *&lpObject) { int res = 0; lpObject = _map_ID_Elmt[RelatedElmt->Attribute("ref")]; return res; } -//Recherche d'une entité liée de type st_Path[1] sous le "lien" st_Path[0] +//Recherche d'une entité liée de type st_Path[1] sous le "lien" st_Path[0] int ifcXML_File::FindOneSpecificLinkedObjectFromFirstLinkPath(TiXmlElement *pElement, string st_Path[2], TiXmlElement *&lpObject) { // // // => lpObject lien vers sa def // // int res = 0; TiXmlHandle hLocalBaseRoot1(pElement); TiXmlHandle hLocalBaseRoot2(hLocalBaseRoot1.FirstChild(st_Path[0].c_str())); - //Lecture du seul Specific object souhaité st_Path[1] + //Lecture du seul Specific object souhaité st_Path[1] TiXmlElement *lpObjectToSearch1 = hLocalBaseRoot2.FirstChild(st_Path[1].c_str()).ToElement(); res = FindObjectFromRef(lpObjectToSearch1, lpObject); return res; } -//Recherche de toutes les entités liées de type st_Path[1] sous le "lien" st_Path[0] +//Recherche de toutes les entités liées de type st_Path[1] sous le "lien" st_Path[0] int ifcXML_File::FindSeveralSpecificLinkedObjectsFromFirstLinkPath(TiXmlElement *pElement, string st_Path[2], list &llpObject) { // // // => lpObject lien vers sa def - // => pas recupéré dans lpObject + // => pas recupéré dans lpObject // => lpObject lien vers sa def // // int res = 0; TiXmlHandle hLocalBaseRoot1(pElement); TiXmlHandle hLocalBaseRoot2(hLocalBaseRoot1.FirstChild(st_Path[0].c_str())); - //Lecture de tous les Specific Object du type souhaité st_Path[1] + //Lecture de tous les Specific Object du type souhaité st_Path[1] int int_Index = 0; TiXmlElement *lpObjectToSearch1 = hLocalBaseRoot2.Child(st_Path[1].c_str(), int_Index).ToElement(); while (lpObjectToSearch1) { TiXmlElement *lpObject = nullptr; res = FindObjectFromRef(lpObjectToSearch1, lpObject); llpObject.push_back(lpObject); int_Index++; lpObjectToSearch1 = hLocalBaseRoot2.Child(st_Path[1].c_str(), int_Index).ToElement(); }// while (lpObjectToSearch1) return res; } -//Recherche de toutes les entités liées (quelque soit le type ifc) sous le "lien" st_Path[0] +//Recherche de toutes les entités liées (quelque soit le type ifc) sous le "lien" st_Path[0] int ifcXML_File::FindAllLinkedObjectsFromFirstLinkPath(TiXmlElement *pElement, string &st_Path, list &llpObject) { // // // => lpObject lien vers sa def // => lpObject lien vers sa def // => lpObject lien vers sa def // // int res = 0; TiXmlHandle hLocalBaseRoot1(pElement); TiXmlHandle hLocalBaseRoot2(hLocalBaseRoot1.FirstChild(st_Path.c_str())); - //Lecture de tous les Specific Object [pas de type souhaité st_Path[1]] + //Lecture de tous les Specific Object [pas de type souhaité st_Path[1]] int int_Index = 0; TiXmlElement *lpObjectToSearch1 = hLocalBaseRoot2.Child(int_Index).ToElement(); while (lpObjectToSearch1) { TiXmlElement *lpObject = nullptr; res = FindObjectFromRef(lpObjectToSearch1, lpObject); llpObject.push_back(lpObject); int_Index++; lpObjectToSearch1 = hLocalBaseRoot2.Child(int_Index).ToElement(); }// while (lpObjectToSearch1) return res; } /////////////////////////////////////////////////////////////////////////////////////////////////// // 2.1) ROUTINES DE RECHERCHE EN LIEN UNAIRE (DES ENTITES LIEES) DE LA DEFINITION D'UNE ENTITE // /////////////////////////////////////////////////////////////////////////////////////////////////// int ifcXML_File::FindIfcCurveBoundedPlanePlacemcent(TiXmlElement *pElement, TiXmlElement *&lpObject) { //Pour IfcConnectionSurfaceGeometry => 1 Sous-Face // // // // // // // // // // // // // // // // // // // // // int res = 0; string st_Path[2] = { "","" }; st_Path[0] = "SurfaceOnRelatingElement"; st_Path[1] = "IfcCurveBoundedPlane"; TiXmlElement *lpObjectFound1 = nullptr; res = FindOneSpecificLinkedObjectFromFirstLinkPath(pElement, st_Path, lpObjectFound1); st_Path[0] = "BasisSurface"; st_Path[1] = "IfcPlane"; TiXmlElement *lpObjectFound2 = nullptr; res = FindOneSpecificLinkedObjectFromFirstLinkPath(lpObjectFound1, st_Path, lpObjectFound2); st_Path[0] = "Position"; st_Path[1] = "IfcAxis2Placement3D"; res = FindOneSpecificLinkedObjectFromFirstLinkPath(lpObjectFound2, st_Path, lpObject); return res; } int ifcXML_File::FindIfcGeometricRepresentationSubContext(TiXmlElement *pElement, TiXmlElement *&lpObject) { //Pour IfcProductDefinitionShape => n Faces // // // // // Body // Brep // // // // // // // Body // Model // // // // model_view // // // // Model // 3 // 1.000000000E-5 // // // // // => !! 2 ex:double-wrapper et non 3 // // int res = 0; string st_Path[2] = { "","" }; //ATTENTION "ContextOfItems" peut-il avoir plusieurs IfcGeometricRepresentationSubContext? - // => multiplicité pas gérée par cette routine + // => multiplicité pas gérée par cette routine st_Path[0] = "ContextOfItems"; st_Path[1] = "IfcGeometricRepresentationSubContext"; TiXmlElement *lpObjectFound1 = nullptr; res = FindOneSpecificLinkedObjectFromFirstLinkPath(pElement, st_Path, lpObjectFound1); st_Path[0] = "ParentContext"; st_Path[1] = "IfcGeometricRepresentationContext"; TiXmlElement *lpObjectFound2 = nullptr; res = FindOneSpecificLinkedObjectFromFirstLinkPath(lpObjectFound1, st_Path, lpObjectFound2); st_Path[0] = "WorldCoordinateSystem"; st_Path[1] = "IfcAxis2Placement3D"; res = FindOneSpecificLinkedObjectFromFirstLinkPath(lpObjectFound2, st_Path, lpObject); return res; } int ifcXML_File::FindIfcGeometricRepresentationContext(TiXmlElement *pElement, TiXmlElement *&lpObject) { // // // // // int res = 0; string st_Path[2] = { "","" }; //ATTENTION "RepresentationContexts" peut avoir plusieurs IfcGeometricRepresentationContext - // => multiplicité pas gérée par cette routine - // A voir si nécessaire au niveau de ifcprojet seul usage de cette routine - // => quel rôle des IfcGeometricRepresentationContext du ifcproject, est-ce seulement de rassembler les contextes? + // => multiplicité pas gérée par cette routine + // A voir si nécessaire au niveau de ifcprojet seul usage de cette routine + // => quel rôle des IfcGeometricRepresentationContext du ifcproject, est-ce seulement de rassembler les contextes? // => impliquerait ne pas appliquer (et de ne pas sauvegarder) matrice de position de ifcproject!!! // Pour les faces et sous-faces routine FindIfcGeometricRepresentationSubContext pourlaquelle il n'y a toujours qu'un seul contexte! st_Path[0] = "RepresentationContexts"; st_Path[1] = "IfcGeometricRepresentationContext"; //TiXmlElement *lpObjectFound1 = nullptr; res = FindOneSpecificLinkedObjectFromFirstLinkPath(pElement, st_Path, lpObject); return res; } int ifcXML_File::FindIfcAxis2Placement3D(TiXmlElement *pElement, TiXmlElement *&lpObject) { // // // // // // // // int res = 0; string st_Path[2] = { "","" }; st_Path[0] = "WorldCoordinateSystem"; st_Path[1] = "IfcAxis2Placement3D"; res = FindOneSpecificLinkedObjectFromFirstLinkPath(pElement, st_Path, lpObject); return res; } int ifcXML_File::FindIfcLocalPlacement(TiXmlElement *pElement, TiXmlElement *&lpObject) { // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // int res = 0; string st_Path[2] = { "","" }; st_Path[0] = "ObjectPlacement"; st_Path[1] = "IfcLocalPlacement"; TiXmlElement *lpObjectFound1 = nullptr; res = FindOneSpecificLinkedObjectFromFirstLinkPath(pElement, st_Path, lpObjectFound1); st_Path[0] = "RelativePlacement"; st_Path[1] = "IfcAxis2Placement3D"; res = FindOneSpecificLinkedObjectFromFirstLinkPath(lpObjectFound1, st_Path, lpObject); return res; } int ifcXML_File::FindIfcShapeRepresentationBrep(TiXmlElement *pElement, TiXmlElement *&lpObject) { //Pour IfcShapeRepresentation => n Faces // // // // // // // // // // // // FootPrint // GeometricCurveSet // // // // // // // // // // Body // Brep // // // // int res = 0; string st_Path = "Representations"; list llpObject; res = FindAllLinkedObjectsFromFirstLinkPath(pElement, st_Path, llpObject); list ::iterator it_l = llpObject.begin(); st_Path = "RepresentationType"; while (*(it_l)) { string st_Value=""; res = ReadOneSpecificValueOfAnEntity(*(it_l), st_Path, st_Value); if (st_Value == string("Brep")) { lpObject = *(it_l); break; }//if (lpObjectFound && string(ch_Reptype) == string("Brep")) it_l++; }// while (*(it_l)) return res; } /////////////////////////////////////////////////////////////////////////////////////////////////////// // 2.2) ROUTINES DE RECHERCHE EN LIEN MULTI-AIRE (DES ENTITES LIEES) DE LA DEFINITION D'UNE ENTITE // /////////////////////////////////////////////////////////////////////////////////////////////////////// int ifcXML_File::FindObjectFromRefAndPathBy3(TiXmlElement *&RelatedElmt, list::iterator &lst_Path, list::iterator &lst_PathEnd, list >> &lllpObject, list &lpObjectFace) { int res = 0; TiXmlHandle hLocalBaseRoot(RelatedElmt); if (lst_Path != lst_PathEnd) { const char* ch_Name = (*lst_Path).c_str(); int int_Ind = 0; TiXmlElement* lpObjectToSearch = hLocalBaseRoot.FirstChild(ch_Name).Child(int_Ind).ToElement(); while (lpObjectToSearch) { TiXmlElement* lpSearchedObject = nullptr; if (lpObjectToSearch) res = FindObjectFromRef(lpObjectToSearch, lpSearchedObject); // Pour IfcConnectionSurfaceGeometry - // "lll" est une liste qui dissocie les IfcPolyline par entités de type (IfcCurveBoundedPlane,...) sous SurfaceOnRelatingElement - // "ll" est une liste qui dissocie les IfcPolyline par entités de type (IfcCompositeCurve,...) sous OuterBoundary - // "l" est une liste d'entités (IfcPolyline,...) sous Segments>ParentCurve (cette liste rassemble la multiplicité de ces Segments>ParentCurve) + // "lll" est une liste qui dissocie les IfcPolyline par entités de type (IfcCurveBoundedPlane,...) sous SurfaceOnRelatingElement + // "ll" est une liste qui dissocie les IfcPolyline par entités de type (IfcCompositeCurve,...) sous OuterBoundary + // "l" est une liste d'entités (IfcPolyline,...) sous Segments>ParentCurve (cette liste rassemble la multiplicité de ces Segments>ParentCurve) // // Pour IfcShapeRepresentation - // "lll" est une liste qui dissocie les IfcPolyLoop par entités de type (IfcFacetedBrep,...) sous Items - // "ll" est une liste qui dissocie les IfcPolyLoop par entités de type (IfcFace,...) sous CfsFaces - // "l" est une liste d'entités (IfcPolyLoop,...) sous Bounds>Bound (cette liste rassemble la multiplicité de ces Bounds>Bound) + // "lll" est une liste qui dissocie les IfcPolyLoop par entités de type (IfcFacetedBrep,...) sous Items + // "ll" est une liste qui dissocie les IfcPolyLoop par entités de type (IfcFace,...) sous CfsFaces + // "l" est une liste d'entités (IfcPolyLoop,...) sous Bounds>Bound (cette liste rassemble la multiplicité de ces Bounds>Bound) // - // Si le mot-clé a une multiplicité [1,m] => création d'une liste - // Si c'est le Nième mot-clé multiple [1,m] => création d'une liste à 3-N profondeur "list création d'une liste + // Si c'est le Nième mot-clé multiple [1,m] => création d'une liste à 3-N profondeur "list on ajoute une liste de (3-1=2) niveaux (llxxx) + //Au 1er mot clé "multiple" (N=1) => on ajoute une liste de (3-1=2) niveaux (llxxx) //if (string(ch_Name) == string("CfsFaces")) // liste par CfsFace if (string(ch_Name) == string("Items") || string(ch_Name) == string("SurfaceOnRelatingElement")) // liste par Item, par SurfaceOnRelatingElement { //On descend au niveau N - // => au 1er niveau c'est la liste passée en argument (lllpObject) pas d'action + // => au 1er niveau c'est la liste passée en argument (lllpObject) pas d'action //On ajoute la liste de niveau 3-N list > llNewpObject; lllpObject.push_back(llNewpObject); } - // Au 2nd mot clé "multiple" (N=2) => on ajoute une liste de (3-2=1) niveau (lxxx) + // Au 2nd mot clé "multiple" (N=2) => on ajoute une liste de (3-2=1) niveau (lxxx) if (string(ch_Name) == string("CfsFaces") || string(ch_Name) == string("OuterBoundary") || string(ch_Name) == string("InnerBoundaries")) // liste par CfsFace, par OuterBoundary/InnerBoundaries { //On descend au niveau N list >> ::iterator it_lll = lllpObject.end(); it_lll--; //On ajoute la liste de niveau 3-N list lNewpObject; (*it_lll).push_back(lNewpObject); } if (string(ch_Name) == string("CfsFaces") || string(ch_Name) == string("SurfaceOnRelatingElement")) // liste des Faces (pour CfsFaces) ou Subface (pour SurfaceOnRelatingElement) { //On ajoute la Face ou Sous-Face qui portera l'identifiant lpObjectFace.push_back(lpSearchedObject); } lst_Path++; res = FindObjectFromRefAndPathBy3(lpSearchedObject, lst_Path, lst_PathEnd, lllpObject, lpObjectFace); lst_Path--; int_Ind++; lpObjectToSearch = hLocalBaseRoot.FirstChild(ch_Name).Child(int_Ind).ToElement(); }// while (lpObjectToSearch) }// if (lst_Path != lst_PathEnd) else { - //if (string(ch_Name) == string("Segments") || string(ch_Name) == string("Bounds")) // liste par Bound ou Segment => on rassemble en 1 liste car carac d'1 même face! - // Au N=3ème multiple => on ajoute une liste de (3-3=0) niveau (xxx soit l'objet final) + //if (string(ch_Name) == string("Segments") || string(ch_Name) == string("Bounds")) // liste par Bound ou Segment => on rassemble en 1 liste car carac d'1 même face! + // Au N=3ème multiple => on ajoute une liste de (3-3=0) niveau (xxx soit l'objet final) //On descend au niveau N list >> ::iterator it_lll = lllpObject.end(); it_lll--; list > ::iterator it_ll = (*it_lll).end(); it_ll--; //On ajoute la liste de niveau 3-N (pour N=3, c'est l'objet final) (*it_ll).push_back(RelatedElmt);// liste de Bounds (IfcFaceOuterBound) ou Segment }// else if (lst_Path != lst_PathEnd) return res; } int ifcXML_File::ReadPtsDefiningPolyloopOrPolyline(list &lPolyloopOfOneBound_Face, list> &FacePtsCoord) { // // // // // // // // // // // // // // // // // // // // // 9.672305351 // 6.511389214 // 2.67 // // int res = 0; // // Boucle sur les contours TiXmlElement* lpSearchedObject = nullptr; list ::iterator it_PolyloopOfOneBound; for (it_PolyloopOfOneBound = lPolyloopOfOneBound_Face.begin(); it_PolyloopOfOneBound != lPolyloopOfOneBound_Face.end(); it_PolyloopOfOneBound++) { list ContoursPtsCoord; TiXmlHandle hLocalBaseRoot((*it_PolyloopOfOneBound)); int int_ind = 0; TiXmlElement* pPointofPolyloop = hLocalBaseRoot.FirstChild().Child(int_ind).ToElement(); while (pPointofPolyloop) { if (pPointofPolyloop) res = FindObjectFromRef(pPointofPolyloop, lpSearchedObject); // TiXmlHandle hLocalBaseRoot1(lpSearchedObject); for (int i = 0; i < 3; i++) { TiXmlElement* pCoordPointofPolyloop = hLocalBaseRoot1.FirstChild().Child(i).ToElement(); //Lire IfcLengthMeasure; double *coord = nullptr; if (pCoordPointofPolyloop) coord = new double(stod(pCoordPointofPolyloop->GetText())); else coord = new double(0.0); ContoursPtsCoord.push_back(coord); }// for (int i = 0; i < 3; i++) // int_ind++; pPointofPolyloop = hLocalBaseRoot.FirstChild().Child(int_ind).ToElement(); }// while (pPointofPolyloop) FacePtsCoord.push_back(ContoursPtsCoord); }// for (it_PolyloopOfOneBound = (*it_BoundsOfOneCFsFace).begin(); it_PolyloopOfOneBound != (*it_BoundsOfOneCFsFace).end(); it_PolyloopOfOneBound++) return res; } int ifcXML_File::FindRepresentationInSpace(TiXmlElement* &pElemSpace, list *lpRelatedObjects) { // // // // // int res = 0; string st_Path[2] = { "","" }; //Retrouver l'IfcProductDefinitionShape st_Path[0] = "Representation"; st_Path[1] = "IfcProductDefinitionShape"; TiXmlElement *lpObjectFound = nullptr; res = FindOneSpecificLinkedObjectFromFirstLinkPath(pElemSpace, st_Path, lpObjectFound); if (lpRelatedObjects) lpRelatedObjects->push_back(lpObjectFound); return res; } int ifcXML_File::FindRelatedObjectsInRelAggregatesFromRelatingObject(TiXmlElement *&lpRelatingObj, list *lpRelatedObjects) { - // => ATTENTION La multiplicite sous pKeyword2 n'est pas géré + // => ATTENTION La multiplicite sous pKeyword2 n'est pas géré // // // - // => ATTENTION: lpRelatingObj est en fait un lien vers def => l'entité est retrouvé si valeur de ref = valeur de id + // => ATTENTION: lpRelatingObj est en fait un lien vers def => l'entité est retrouvé si valeur de ref = valeur de id // // // => lpRelatedObjects lien vers sa def // => lpRelatedObjects lien vers sa def // => lpRelatedObjects lien vers sa def // // int res = 0; // Recherche de toutes les ifcentity de type pKeyword1 sur lesquelles se fait le scan const char* pKeyword1 = "IfcRelAggregates"; - // Parmi les ifcentity de type pKeyword1 on ne s'interesse qu'à ceux qui ont l'entité lpRelatingObj en attribut pKeyword2 + // Parmi les ifcentity de type pKeyword1 on ne s'interesse qu'à ceux qui ont l'entité lpRelatingObj en attribut pKeyword2 const char* pKeyword2 = "RelatingObject"; - // Pour ces ifcentities de type pKeyword1 liées à lpRelatingObj on récupère les entités sous l'attribut pKeyword3 dans lpRelatedObjects + // Pour ces ifcentities de type pKeyword1 liées à lpRelatingObj on récupère les entités sous l'attribut pKeyword3 dans lpRelatedObjects const char* pKeyword3 = "RelatedObjects"; res = FindObjectsInRelFromRelatingEnt(lpRelatingObj, lpRelatedObjects, pKeyword1, pKeyword2, pKeyword3); return res; } int ifcXML_File::FindRelatedBuildingElementAndConnectionGeometryInRelSpaceBoundaryFromRelatingSpace(TiXmlElement *&lpRelatingObj, list *lpRelatedObjects, list *lpsecondRelatedObjects) { - // => ATTENTION La multiplicite sous pKeyword2 n'est pas géré + // => ATTENTION La multiplicite sous pKeyword2 n'est pas géré // // // - // => ATTENTION: lpRelatingObj est en fait un lien vers def => l'entité est retrouvé si valeur de ref = valeur de id + // => ATTENTION: lpRelatingObj est en fait un lien vers def => l'entité est retrouvé si valeur de ref = valeur de id // // // => lpRelatedObjects lien vers sa def // => lpRelatedObjects lien vers sa def // => lpRelatedObjects lien vers sa def // // // => lpsecondRelatedObjects lien vers sa def // => lpsecondRelatedObjects lien vers sa def // => lpsecondRelatedObjects lien vers sa def // // int res = 0; // Recherche de toutes les ifcentity de type pKeyword1 sur lesquelles se fait le scan const char* pKeyword1 = "IfcRelSpaceBoundary"; - // Parmi les ifcentity de type pKeyword1 on ne s'interesse qu'à ceux qui ont l'entité lpRelatingObj en attribut pKeyword2 + // Parmi les ifcentity de type pKeyword1 on ne s'interesse qu'à ceux qui ont l'entité lpRelatingObj en attribut pKeyword2 const char* pKeyword2 = "RelatingSpace"; - // Pour ces ifcentities de type pKeyword1 liées à lpRelatingObj on récupère les entités sous l'attribut pKeyword3 dans lpRelatedObjects + // Pour ces ifcentities de type pKeyword1 liées à lpRelatingObj on récupère les entités sous l'attribut pKeyword3 dans lpRelatedObjects const char* pKeyword3 = "RelatedBuildingElement"; - // Parallèlement, pour ces ifcentities de type pKeyword1 liées à lpRelatingObj on récupère les entités sous l'attribut pKeyword4 dans lpsecondRelatedObjects + // Parallèlement, pour ces ifcentities de type pKeyword1 liées à lpRelatingObj on récupère les entités sous l'attribut pKeyword4 dans lpsecondRelatedObjects const char* pKeyword4 = "ConnectionGeometry"; res = FindObjectsInRelFromRelatingEnt(lpRelatingObj, lpRelatedObjects, pKeyword1, pKeyword2, pKeyword3, pKeyword4, lpsecondRelatedObjects); return res; } int ifcXML_File::FindObjectsInRelFromRelatingEnt(TiXmlElement *&lpRelatingObj, list *lpRelatedObjects, const char* pKeyword1, const char* pKeyword2, const char* pKeyword3, const char* pKeyword4, list *lpsecondRelatedObjects) { - // => ATTENTION La multiplicite sous pKeyword2 n'est pas géré + // => ATTENTION La multiplicite sous pKeyword2 n'est pas géré // // // - // => ATTENTION: lpRelatingObj est en fait un lien vers def => l'entité est retrouvé si valeur de ref = valeur de id + // => ATTENTION: lpRelatingObj est en fait un lien vers def => l'entité est retrouvé si valeur de ref = valeur de id // // // => lpRelatedObjects lien vers sa def // => lpRelatedObjects lien vers sa def // => lpRelatedObjects lien vers sa def // // // // OU [les arguments pKeyword4 et lpsecondRelatedObjects sont optionnels] // // // - // => ATTENTION: lpRelatingObj est en fait un lien vers def => l'entité est retrouvé si valeur de ref = valeur de id + // => ATTENTION: lpRelatingObj est en fait un lien vers def => l'entité est retrouvé si valeur de ref = valeur de id // // // => lpRelatedObjects lien vers sa def // => lpRelatedObjects lien vers sa def // => lpRelatedObjects lien vers sa def // // // => lpsecondRelatedObjects lien vers sa def // => lpsecondRelatedObjects lien vers sa def // => lpsecondRelatedObjects lien vers sa def // // int res = 0; TiXmlHandle hLocalBaseRoot(_hRoot); std::string str_SearchedID(lpRelatingObj->Attribute("id")); int int_nbcount = 0; bool boo_IsItTheEnd = false; while (!boo_IsItTheEnd) { - // Pour une recherche à partir du nom d'entité, - // à priori le plus optimisé est d'utiliser les routines de base du parser: "TiXmlHandle.Child(pKeyword1,..)" + // Pour une recherche à partir du nom d'entité, + // à priori le plus optimisé est d'utiliser les routines de base du parser: "TiXmlHandle.Child(pKeyword1,..)" TiXmlHandle hLocalVariableRoot1(hLocalBaseRoot.Child(pKeyword1, int_nbcount));//"IfcRelAggregates", "IfcRelSpaceBoundary" TiXmlHandle hLocalVariableRoot2(hLocalVariableRoot1.FirstChild(pKeyword2));//"RelatingObject", "RelatingSpace" TiXmlHandle hLocalVariableRoot3(hLocalVariableRoot2.FirstChild(/*"IfcProject"*/)); if (nullptr != hLocalVariableRoot3.ToElement()) { - //DEB: A REVOIR en terme de perfo si judicieux d'utiliser le _map_ID_Elmt plutôt que + //DEB: A REVOIR en terme de perfo si judicieux d'utiliser le _map_ID_Elmt plutôt que // comparaison de string std::string str_SearchedID(lpRelatingObj->Attribute("id")) en dehors boucle puis if (str_SearchedID == std::string(ch_ID)) //FIN: //if (_map_ID_Elmt[lpRelatingObj->Attribute("id")]== _map_ID_Elmt[hLocalVariableRoot3.ToElement()->Attribute("ref")]) if (str_SearchedID == std::string(hLocalVariableRoot3.ToElement()->Attribute("ref"))) { if (pKeyword3) { - //Recup des entités sous pKeyword3 + //Recup des entités sous pKeyword3 TiXmlHandle hLocalVariableRoot4(hLocalVariableRoot1.FirstChild(pKeyword3));//"RelatedObjects", "RelatedBuildingElement" int int_Index = 0; TiXmlElement *RelatedElmt = hLocalVariableRoot4.Child(int_Index).ToElement(); while (RelatedElmt) { - // Recuperation de la def de l'élément dont la ref est RelatedElmt + // Recuperation de la def de l'élément dont la ref est RelatedElmt TiXmlElement *RelatedElmt2 = nullptr; res = FindObjectFromRef(RelatedElmt, RelatedElmt2); if (lpRelatedObjects) lpRelatedObjects->push_back(RelatedElmt2); int_Index++; RelatedElmt = hLocalVariableRoot4.Child(int_Index).ToElement(); }// while (RelatedElmt) }// if(pKeyword3) if (pKeyword4) { - //Recup des entités sous pKeyword4 - //A REVOIR... Attention à voir comment ca marche s il y a plusieurs "RelatingObject", "RelatingSpace" pour généraliser la routine + //Recup des entités sous pKeyword4 + //A REVOIR... Attention à voir comment ca marche s il y a plusieurs "RelatingObject", "RelatingSpace" pour généraliser la routine TiXmlHandle hLocalVariableRoot4(hLocalVariableRoot1.FirstChild(pKeyword4));//"ConnectionGeometry" int int_Index = 0; TiXmlElement *RelatedElmt = hLocalVariableRoot4.Child(int_Index).ToElement(); while (RelatedElmt) { - // Recuperation de la def de l'élément dont la ref est RelatedElmt + // Recuperation de la def de l'élément dont la ref est RelatedElmt TiXmlElement *RelatedElmt2 = nullptr; res = FindObjectFromRef(RelatedElmt, RelatedElmt2); if (lpsecondRelatedObjects) lpsecondRelatedObjects->push_back(RelatedElmt2); int_Index++; RelatedElmt = hLocalVariableRoot4.Child(int_Index).ToElement(); }// while (RelatedElmt) }// if(pKeyword4) }// if (nullptr != ch_ID && str_SearchedID == std::string(ch_ID)) int_nbcount++; }// if (nullptr != hLocalVariableRoot3.ToElement()) else boo_IsItTheEnd = true; }//while (!boo_IsItFound) return res; } //////////////////////////////////////////////////////////////////////////////////////////// // 3.0) ROUTINES DE BASE POUR UN SCAN GLOBAL (SANS RECHERCHE D'UNE ENTITE SPECIFIQUE) // //////////////////////////////////////////////////////////////////////////////////////////// int ifcXML_File::ScanAssociateRelatedAndRelatingEnt(const char* pKeyword1, const char* pKeyword2, const char* pKeyword3, const char* pKeyword4) { - // => ATTENTION La multiplicite sous pKeyword2 est gérée, mais suppose l'unicité sous pKeyword3 + // => ATTENTION La multiplicite sous pKeyword2 est gérée, mais suppose l'unicité sous pKeyword3 // // => IfcRelDefinesByProperties // => RelatedObjects - // => ATTENTION: lpRelatingObj est en fait un lien vers def => l'entité est retrouvé si valeur de ref = valeur de id - // => ATTENTION: lpRelatingObj est en fait un lien vers def => l'entité est retrouvé si valeur de ref = valeur de id + // => ATTENTION: lpRelatingObj est en fait un lien vers def => l'entité est retrouvé si valeur de ref = valeur de id + // => ATTENTION: lpRelatingObj est en fait un lien vers def => l'entité est retrouvé si valeur de ref = valeur de id // - // => RelatingPropertyDefinition ATTENTION multiplicité pas gérée + // => RelatingPropertyDefinition ATTENTION multiplicité pas gérée // => lpRelatedObjects lien vers sa def => IfcElementQuantity // // // int res = 0; TiXmlHandle hLocalBaseRoot(_hRoot); //std::string str_SearchedID(lpRelatingObj->Attribute("id")); int int_nbcount = 0; TiXmlHandle hNullHandle=nullptr; TiXmlHandle hLocalVariableRoot1(hLocalBaseRoot.Child(pKeyword1, int_nbcount));//"IfcRelDefinesByProperties" //bool boo_IsItTheEnd = false; //while (!boo_IsItTheEnd) while (hLocalVariableRoot1.ToNode() != nullptr) { - // Pour une recherche à partir du nom d'entité, - // à priori le plus optimisé est d'utiliser les routines de base du parser: "TiXmlHandle.Child(pKeyword1,..)" + // Pour une recherche à partir du nom d'entité, + // à priori le plus optimisé est d'utiliser les routines de base du parser: "TiXmlHandle.Child(pKeyword1,..)" TiXmlHandle hLocalVariableRoot2(hLocalVariableRoot1.FirstChild(pKeyword2));//"RelatingPropertyDefinition" TiXmlElement *RelatingElmt = hLocalVariableRoot2.Child(0).ToElement(); if (nullptr != RelatingElmt) { if (string(RelatingElmt->Value()) == string(pKeyword3)) //"IfcElementQuantity" { - // Recuperation de la def de l'élément dont la ref est RelatingElmt + // Recuperation de la def de l'élément dont la ref est RelatingElmt TiXmlElement *RelatingElmt2 = nullptr; res = FindObjectFromRef(RelatingElmt, RelatingElmt2); TiXmlHandle hLocalVariableRoot3(hLocalVariableRoot1.FirstChild(pKeyword4));//"RelatedObjects" int int_Index = 0; TiXmlElement *RelatedElmt = hLocalVariableRoot3.Child(int_Index).ToElement(); while (RelatedElmt) { - // Recuperation de la def de l'élément dont la ref est RelatedElmt + // Recuperation de la def de l'élément dont la ref est RelatedElmt TiXmlElement *RelatedElmt2 = nullptr; res = FindObjectFromRef(RelatedElmt, RelatedElmt2); _map_BE_Quantities[RelatedElmt2] = RelatingElmt2;// pIfcEntity->Attribute("id"); int_Index++; RelatedElmt = hLocalVariableRoot3.Child(int_Index).ToElement(); }// while (RelatedElmt) }// if (hLocalVariableRoot3.ToElement()->Value() == pKeyword3) }// if (nullptr != RelatingElmt) int_nbcount++; hLocalVariableRoot1=hLocalBaseRoot.Child(pKeyword1, int_nbcount);//"IfcRelDefinesByProperties" }//while (hLocalVariableRoot1) // }// if (nullptr != hLocalVariableRoot3.ToElement()) // else // boo_IsItTheEnd = true; //}//while (!boo_IsItFound) return res; } int ifcXML_File::ScanIfcRelDefinesByPropertiesForQuantities() { // // 1JljiXweR195uhzlxzvQeN // // // // // // // // // // // // OU // // // 1ctrdyLJ_$SL9WtGdfK2n1 // // // // // // // // // // int res = 0; // Recherche de toutes les ifcentity de type pKeyword1 sur lesquelles se fait le scan const char* pKeyword1 = "IfcRelDefinesByProperties"; - // Parmi les ifcentity de type pKeyword1 on ne s'interesse qu'à ceux qui ont l'entité "RelatingPropertyDefinition" en attribut pKeyword2 + // Parmi les ifcentity de type pKeyword1 on ne s'interesse qu'à ceux qui ont l'entité "RelatingPropertyDefinition" en attribut pKeyword2 // et comme sous-type "IfcElementQuantity" en attribut pKeyword3 const char* pKeyword2 = "RelatingPropertyDefinition"; const char* pKeyword3 = "IfcElementQuantity"; - // Pour ces ifcentities de type pKeyword1 liées à "RelatingPropertyDefinition"->"IfcElementQuantity" on récupère les entités sous l'attribut pKeyword4 dans "RelatedObjects" + // Pour ces ifcentities de type pKeyword1 liées à "RelatingPropertyDefinition"->"IfcElementQuantity" on récupère les entités sous l'attribut pKeyword4 dans "RelatedObjects" const char* pKeyword4 = "RelatedObjects"; - // Chargement en mémoire de toutes les associations => _map_BE_Quantities[TiXmlElement "BuildingElement"]=TiXmlElement "IfcElementQuantity" - // Permet une recherche optimisée des définitions des entités à partir de leur "ref" qui se fait par leur "Id" (en index de la map) => cf. FindObjectFromRef + // Chargement en mémoire de toutes les associations => _map_BE_Quantities[TiXmlElement "BuildingElement"]=TiXmlElement "IfcElementQuantity" + // Permet une recherche optimisée des définitions des entités à partir de leur "ref" qui se fait par leur "Id" (en index de la map) => cf. FindObjectFromRef res = ScanAssociateRelatedAndRelatingEnt(pKeyword1, pKeyword2, pKeyword3, pKeyword4); return res; } diff --git a/IfcC++/ifc_BIMxBEMEPFLEngine/ifc_BIMxBEMEngine.cpp b/IfcC++/ifc_BIMxBEMEPFLEngine/ifc_BIMxBEMEngine.cpp index 91741f6..5ec0824 100644 --- a/IfcC++/ifc_BIMxBEMEPFLEngine/ifc_BIMxBEMEngine.cpp +++ b/IfcC++/ifc_BIMxBEMEPFLEngine/ifc_BIMxBEMEngine.cpp @@ -1,73 +1,73 @@ // // /////////////////////////////////////////////////// // INTERFACES A APPELER DEPUIS LE CODE "EXTERNE" // /////////////////////////////////////////////////// // // #include "ifc_BIMxBEMEngine.h" #include #include #include #include "ifcXML_File.h" #include "LoadDataAtBEMFormat.h" ifcXML_File *_iFile=nullptr; LoadDataAtBEMFormat* _iLesosaiFormat =nullptr; int __stdcall ifcxml_BIMxBEMEPFL_LoadXMLFileForBEM(char *chr_FilePath) { int res = 0; // - //Chargement en mémoire d'une structure générique de données typés BEM (optimisée pour modification) + //Chargement en mémoire d'une structure générique de données typés BEM (optimisée pour modification) _iFile = new ifcXML_File(); res = _iFile->LoadFile(chr_FilePath); return res; } void __stdcall ifcxml_BIMxBEMEPFL_UnLoadXMLFileForBEM() { // - //Desalloc des données membres ifc_BIMxBEMEngine + //Desalloc des données membres ifc_BIMxBEMEngine if (_iFile) delete _iFile; _iFile = nullptr; return; } -//Fournit la structure dans une chaine de caractères +//Fournit la structure dans une chaine de caractères int __stdcall ifcxml_BIMxBEMEPFL_GetEntitiesDefinition(const char *&chr_EntDef, const char *&chr_Logfile, double dbl_Minisurf) //Surface mini vue comme nulle pour Lesosai { int res = 0; // - //Conversion de la structure générique de données typés BEM (optimisée pour modification) au format attendu par Lesosai + //Conversion de la structure générique de données typés BEM (optimisée pour modification) au format attendu par Lesosai _iLesosaiFormat = new LoadDataAtBEMFormat(dbl_Minisurf); res = _iLesosaiFormat->LoadLesosaiFormat(_iFile->GetData()); if (res) return res; //Lecture de la structure Lesosai sous forme de string *str_EntDef = nullptr; res = _iLesosaiFormat->GetLesosaiEntitiesDefinition(str_EntDef); if (res) return res; //Conversion string en const char* if (str_EntDef) chr_EntDef=str_EntDef->c_str(); //Lecture de la Log string *str_LogFile = nullptr; res = _iLesosaiFormat->GetLesosaiLogFile(str_LogFile); if (res) return res; //Conversion string en const char* if (str_LogFile) chr_Logfile = str_LogFile->c_str(); return res; } diff --git a/IfcC++/ifc_BIMxBEMEPFLEngine/ifc_Tree.cpp b/IfcC++/ifc_BIMxBEMEPFLEngine/ifc_Tree.cpp index baa8f33..9c3ec0a 100644 --- a/IfcC++/ifc_BIMxBEMEPFLEngine/ifc_Tree.cpp +++ b/IfcC++/ifc_BIMxBEMEPFLEngine/ifc_Tree.cpp @@ -1,353 +1,354 @@ #include "ifc_Tree.h" +#include ifc_Tree::ifc_Tree(): _st_IfcTree(nullptr) { } ifc_Tree::~ifc_Tree() { // - //Desalloc des données membres de ifc_Tree + //Desalloc des données membres de ifc_Tree if (_st_IfcTree) delete_STRUCT_IFCENTITY(_st_IfcTree); _st_IfcTree = nullptr; } STRUCT_IFCENTITY *&ifc_Tree::Getstruct() { return _st_IfcTree; } void ifc_Tree::delete_STRUCT_IFCENTITY(STRUCT_IFCENTITY* &st_IfcTree, STRUCT_IFCENTITY* st_IfcCurrentFather) { // - //Descente dans l'arborescence jusqu'aux élément sans enfants (membre "st_Contains" vide) + //Descente dans l'arborescence jusqu'aux élément sans enfants (membre "st_Contains" vide) list ::iterator it_Elem; for (it_Elem = (st_IfcTree->st_Contains).begin(); it_Elem != (st_IfcTree->st_Contains).end(); it_Elem++) { if ((*it_Elem)) delete_STRUCT_IFCENTITY((*it_Elem), st_IfcTree); }// for (it_Elem = (st_IfcTree->st_Contains).begin(); it_Elem != (st_IfcTree->st_Contains).end(); it_Elem++) st_IfcTree->st_Contains.clear(); // - //Désallocations effectives + //Désallocations effectives // delete[] st_IfcTree->ch_GlobalId; st_IfcTree->ch_GlobalId = nullptr; delete[] st_IfcTree->ch_Id; st_IfcTree->ch_Id = nullptr; delete[] st_IfcTree->ch_Name; st_IfcTree->ch_Name = nullptr; delete[] st_IfcTree->ch_Type; st_IfcTree->ch_Type = nullptr; delete st_IfcTree->map_DefValues; st_IfcTree->map_DefValues = nullptr; list::iterator it_l_Points; for (it_l_Points = (st_IfcTree->db_RelativePlacement).begin(); it_l_Points != (st_IfcTree->db_RelativePlacement).end(); it_l_Points++) { delete (*it_l_Points); *it_l_Points = nullptr; }// for (it_l_Points = (st_IfcTree->db_RelativePlacement).begin(); it_l_Points != (st_IfcTree->db_RelativePlacement).end(); it_l_Points++) st_IfcTree->db_RelativePlacement.clear(); for (it_l_Points = (st_IfcTree->db_Centroid).begin(); it_l_Points != (st_IfcTree->db_Centroid).end(); it_l_Points++) { delete (*it_l_Points); *it_l_Points = nullptr; }// for (it_l_Points = (st_IfcTree->db_RelativePlacement).begin(); it_l_Points != (st_IfcTree->db_RelativePlacement).end(); it_l_Points++) st_IfcTree->db_RelativePlacement.clear(); list >::iterator it_ll_Points; for (it_ll_Points = (st_IfcTree->st_PointsDesContours).begin(); it_ll_Points != (st_IfcTree->st_PointsDesContours).end(); it_ll_Points++) { for (it_l_Points = (*it_ll_Points).begin(); it_l_Points != (*it_ll_Points).end(); it_l_Points++) { delete (*it_l_Points); *it_l_Points = nullptr; }// for (it_l_Points = (*it_ll_Points).begin(); it_l_Points != (*it_ll_Points).end(); it_l_Points++) // (*it_ll_Points).clear(); }// for (it_ll_Points = (st_IfcTree->st_PointsDesContours).begin(); it_ll_Points != (st_IfcTree->st_PointsDesContours).end(); it_ll_Points++) st_IfcTree->st_PointsDesContours.clear(); // - // Nettoyage des listes référencant l'objet que l'on est en train de détruire - // Pour les liens non binaires (ternaires ou plus) la structure en cours d'effacement (st_IfcTree) est référencée dans les Contains de plusieurs pères - // Afin déviter un crash mémoire par la désallocation d'une structure déjà détruite, il faut déréférencer la structure - // en cours d'effacement des listes de BelongsTo des autres pères (que celui en cours = st_IfcCurrentFather) - // Exemple: IfcConnectionSurfaceGeometry est référencé à la fois dans le st_Contains de IfSpace et des BuildingElements (IfcWall,...) + // Nettoyage des listes référencant l'objet que l'on est en train de détruire + // Pour les liens non binaires (ternaires ou plus) la structure en cours d'effacement (st_IfcTree) est référencée dans les Contains de plusieurs pères + // Afin déviter un crash mémoire par la désallocation d'une structure déjà détruite, il faut déréférencer la structure + // en cours d'effacement des listes de BelongsTo des autres pères (que celui en cours = st_IfcCurrentFather) + // Exemple: IfcConnectionSurfaceGeometry est référencé à la fois dans le st_Contains de IfSpace et des BuildingElements (IfcWall,...) list ::iterator it_ElemInBelong; for (it_ElemInBelong = (st_IfcTree->st_BelongsTo).begin(); it_ElemInBelong != (st_IfcTree->st_BelongsTo).end(); it_ElemInBelong++) { if ((*it_ElemInBelong) != st_IfcCurrentFather) { list ::iterator it_ElemInBelongContains; for (it_ElemInBelongContains = ((*it_ElemInBelong)->st_Contains).begin(); it_ElemInBelongContains != ((*it_ElemInBelong)->st_Contains).end(); it_ElemInBelongContains++) { if ((*it_ElemInBelongContains) == st_IfcTree) { (*it_ElemInBelong)->st_Contains.erase(it_ElemInBelongContains); break; }// if ((*it_ElemInBelongContains) == st_IfcTree) }// for (it_ElemInBelongContains = ((*it_ElemInBelong)->st_Contains).begin(); it_ElemInBelongContains != ((*it_ElemInBelong)->st_Contains).end(); it_ElemInBelongContains++) }// if ((*it_ElemInBelong) != st_IfcCurrentFather) }// for (it_ElemInBelong = (st_IfcTree->st_BelongsTo).begin(); it_ElemInBelong != (st_IfcTree->st_BelongsTo).end(); it_ElemInBelong++) st_IfcTree->st_BelongsTo.clear(); - //La liste st_FaceToFace référence des objets désalloués par ailleurs, du coup pas d'action de désallocation spécifique + //La liste st_FaceToFace référence des objets désalloués par ailleurs, du coup pas d'action de désallocation spécifique //TIFCSurface list ::iterator it_ElemInTIFCSurfaceContain; if (st_IfcTree->st_TIFCSurface) { for (it_ElemInTIFCSurfaceContain = (st_IfcTree->st_TIFCSurface->st_Contains).begin(); it_ElemInTIFCSurfaceContain != (st_IfcTree->st_TIFCSurface->st_Contains).end(); it_ElemInTIFCSurfaceContain++) { if ((*it_ElemInTIFCSurfaceContain) != st_IfcTree) { //(*it_ElemInTIFCSurfaceContain)->st_TIFCSurface.clear(); (*it_ElemInTIFCSurfaceContain)->st_TIFCSurface = nullptr; break; }// if ((*it_ElemInTIFCSurfaceContain) != st_IfcTree) }// for (it_ElemInTIFCSurfaceContain = (st_IfcTree->st_TIFCSurface->st_Contains).begin(); it_ElemInTIFCSurfaceContain != (st_IfcTree->st_TIFCSurface->st_Contains).end(); it_ElemInTIFCSurfaceContain++) delete st_IfcTree->st_TIFCSurface; st_IfcTree->st_TIFCSurface = nullptr; }// if (st_IfcTree->st_TIFCSurface) delete st_IfcTree; st_IfcTree = nullptr; } void ifc_Tree::FillAttributeOf_STRUCT_IFCENTITY(STRUCT_IFCENTITY* st_IfcTree, Map_String_String &map_messages, double db_LocalMat[3][4], STRUCT_IFCENTITY *st_IfcBelongTo, STRUCT_IFCENTITY *st_IfcBelongTo2) { //la structure st_IfcTree est celle que l'on initialise/renseigne dans cette routine //les structure st_IfcBelongTo est un pere de st_IfcTree (=> vient de la relation binaire ifcRelAggregates) - //les structure st_IfcBelongTo2 est un 2nd père de st_IfcTree (=> vient de la relation ternaire IfcRelSpaceBoundary) + //les structure st_IfcBelongTo2 est un 2nd père de st_IfcTree (=> vient de la relation ternaire IfcRelSpaceBoundary) if (st_IfcTree) { // Pour les tailles: http://www.buildingsmart-tech.org/ifc/IFC2x3/TC1/html/ FillNameAndIDAttributeOf_STRUCT_IFCENTITY(st_IfcTree, map_messages); if (st_IfcBelongTo) { st_IfcTree->st_BelongsTo.push_back(st_IfcBelongTo); st_IfcBelongTo->st_Contains.push_back(st_IfcTree); }// if (st_IfcBelongTo) if (st_IfcBelongTo2) { st_IfcTree->st_BelongsTo.push_back(st_IfcBelongTo2); st_IfcBelongTo2->st_Contains.push_back(st_IfcTree); }// if (st_IfcBelongTo) FillRelativePlacementOf_STRUCT_IFCENTITY(st_IfcTree, db_LocalMat); }// if (st_IfcTree) } void ifc_Tree::FillAttributeOfExisting_STRUCT_IFCENTITY(STRUCT_IFCENTITY* st_IfcTree, Map_String_String &map_messages, double db_LocalMat[3][4], STRUCT_IFCENTITY *st_IfcBelongTo, STRUCT_IFCENTITY *st_IfcBelongTo2) { //la structure st_IfcTree est celle que l'on initialise/renseigne dans cette routine //les structure st_IfcBelongTo est un pere de st_IfcTree (=> vient de la relation binaire ifcRelAggregates) - //les structure st_IfcBelongTo2 est un 2nd père de st_IfcTree (=> vient de la relation ternaire IfcRelSpaceBoundary) + //les structure st_IfcBelongTo2 est un 2nd père de st_IfcTree (=> vient de la relation ternaire IfcRelSpaceBoundary) if (st_IfcTree) { if (st_IfcBelongTo) { //Faire boucle pour tester existence du pointeur list ::iterator it_Elem; bool bo_IsItInList = false; for (it_Elem = (st_IfcTree->st_BelongsTo).begin(); it_Elem != (st_IfcTree->st_BelongsTo).end(); it_Elem++) { if ((*it_Elem) == st_IfcBelongTo) { bo_IsItInList = true; break; }// if ((*it_Elem) == st_IfcBelongTo) }// for (it_Elem = (st_IfcTree->st_BelongsTo).begin(); it_Elem != (st_IfcTree->st_BelongsTo).end(); it_Elem++) if (!bo_IsItInList) st_IfcTree->st_BelongsTo.push_back(st_IfcBelongTo); bo_IsItInList = false; for (it_Elem = (st_IfcBelongTo->st_Contains).begin(); it_Elem != (st_IfcBelongTo->st_Contains).end(); it_Elem++) { if ((*it_Elem) == st_IfcTree) { bo_IsItInList = true; break; }// if ((*it_Elem) == st_IfcBelongTo) }// for (it_Elem = (st_IfcBelongTo->st_Contains).begin(); it_Elem != (st_IfcBelongTo->st_Contains).end(); it_Elem++) if (!bo_IsItInList) st_IfcBelongTo->st_Contains.push_back(st_IfcTree); }// if (st_IfcBelongTo) }// if (st_IfcTree) } void ifc_Tree::FillNameAndIDAttributeOf_STRUCT_IFCENTITY(STRUCT_IFCENTITY* st_IfcTree, Map_String_String &map_messages) { // Pour les tailles: http://www.buildingsmart-tech.org/ifc/IFC2x3/TC1/html/ char *ch_copy22 = new char[23];//size+1 pour que strncpy mette'\0' strncpy(ch_copy22, map_messages["GlobalId"].c_str(), 23); st_IfcTree->ch_GlobalId = ch_copy22; if (map_messages.count("LongName")) { char *ch_copy255 = new char[256];//size+1 pour que strncpy mette'\0' strncpy(ch_copy255, map_messages["LongName"].c_str(), 256); st_IfcTree->ch_Name = ch_copy255; } else { char *ch_copy255 = new char[256];//size+1 pour que strncpy mette'\0' strncpy(ch_copy255, map_messages["Name"].c_str(), 256); st_IfcTree->ch_Name = ch_copy255; }// else if (map_messages.count("LongName")) char *ch_copy9 = new char[16];//size+1 pour que strncpy mette'\0' strncpy(ch_copy9, map_messages["Id"].c_str(), 16); st_IfcTree->ch_Id = ch_copy9; char *ch_copy55 = new char[56];//size+1 pour que strncpy mette'\0' strncpy(ch_copy55, map_messages["Type"].c_str(), 56); st_IfcTree->ch_Type = ch_copy55; if (map_messages.count("PredefinedType")) { char *ch_copy55 = new char[56];//size+1 pour que strncpy mette'\0' strncpy(ch_copy55, map_messages["PredefinedType"].c_str(), 56); st_IfcTree->ch_PredifinedType = ch_copy55; }// if (map_messages.count("PredefinedType")) } void ifc_Tree::FillRelativePlacementOf_STRUCT_IFCENTITY(STRUCT_IFCENTITY* st_IfcTree, double db_LocalMat[3][4]) { //la structure st_IfcTree est celle que l'on initialise/renseigne dans cette routine //les structure st_IfcBelongTo est un pere de st_IfcTree (=> vient de la relation binaire ifcRelAggregates) - //les structure st_IfcBelongTo2 est un 2nd père de st_IfcTree (=> vient de la relation ternaire IfcRelSpaceBoundary) + //les structure st_IfcBelongTo2 est un 2nd père de st_IfcTree (=> vient de la relation ternaire IfcRelSpaceBoundary) if (st_IfcTree) { // Pour les tailles: http://www.buildingsmart-tech.org/ifc/IFC2x3/TC1/html/ if (db_LocalMat) { for (int i_col = 0; i_col < 4; i_col++) { for (int i_lin = 0; i_lin < 3; i_lin++) { double *db_Val = new double(); *db_Val = db_LocalMat[i_lin][i_col]; st_IfcTree->db_RelativePlacement.push_back(db_Val);//(db_LocalMat[i_lin][i_col]) }// for (int i_lin = 0; i_lin < 3; i_lin++) }// for (int i_col = 0; i_col < 4; i_col++) }// if (db_LocalMat) }// if (st_IfcTree) } void ifc_Tree::FillCentroidOf_STRUCT_IFCENTITY(STRUCT_IFCENTITY* st_IfcTree, double db_CentroidCoord[3]) { //la structure st_IfcTree est celle que l'on initialise/renseigne dans cette routine //les structure st_IfcBelongTo est un pere de st_IfcTree (=> vient de la relation binaire ifcRelAggregates) - //les structure st_IfcBelongTo2 est un 2nd père de st_IfcTree (=> vient de la relation ternaire IfcRelSpaceBoundary) + //les structure st_IfcBelongTo2 est un 2nd père de st_IfcTree (=> vient de la relation ternaire IfcRelSpaceBoundary) if (st_IfcTree) { // Pour les tailles: http://www.buildingsmart-tech.org/ifc/IFC2x3/TC1/html/ if (db_CentroidCoord) { for (int i_coord = 0; i_coord < 3; i_coord++) { double *db_Val = new double(); *db_Val = db_CentroidCoord[i_coord]; st_IfcTree->db_Centroid.push_back(db_Val);//(db_CentroidCoord[i_coord]) }// for (int i_coord = 0; i_coord < 3; i_coord++) }// if (db_CentroidCoord) }// if (st_IfcTree) } void ifc_Tree::FillGeomAttributeOf_STRUCT_IFCENTITY(STRUCT_IFCENTITY* st_IfcSubFacGeomRep, list> &SubFacePtsCoord, STRUCT_IFCENTITY *st_IfcBelongTo, Map_String_String &map_messages) { FillNameAndIDAttributeOf_STRUCT_IFCENTITY(st_IfcSubFacGeomRep, map_messages); st_IfcSubFacGeomRep->st_PointsDesContours = SubFacePtsCoord; if (st_IfcBelongTo) { st_IfcSubFacGeomRep->st_BelongsTo.push_back(st_IfcBelongTo); st_IfcBelongTo->st_Contains.push_back(st_IfcSubFacGeomRep); }// if (st_IfcBelongTo) } void ifc_Tree::FillQuantitiesAttributeOf_STRUCT_IFCENTITY(STRUCT_IFCENTITY* st_IfcTree, Map_String_String &map_messages) { if (map_messages.size() != 0) { Map_String_String* mp_copy = new Map_String_String; *mp_copy = map_messages; if (mp_copy) st_IfcTree->map_DefValues = mp_copy; }// if (map_messages.size != 0) } int ifc_Tree::BuildTIFCSurfaceTreeFrom_STRUCT_IFCENTITY(STRUCT_IFCENTITY* st_IfcEntCS1) { int res = 0; - //On vérifie qu'il n'y a qu'une IfcConnectionSurfaceGeometry en vis-à-vis + //On vérifie qu'il n'y a qu'une IfcConnectionSurfaceGeometry en vis-à-vis // car la TIFCSurface associe des paires de IfcConnectionSurfaceGeometry (pas plus) - //A REVOIR: Par contre il peut ne pas y avoir de vis-à-vis (dans ce cas, c'est geoExt = mur exterieur, il est quand même en vis-à-vis?????) + //A REVOIR: Par contre il peut ne pas y avoir de vis-à-vis (dans ce cas, c'est geoExt = mur exterieur, il est quand même en vis-à-vis?????) if (st_IfcEntCS1 && st_IfcEntCS1->st_FaceToFace.size()==1) { - //Recup de la 2nde IfcConnectionSurfaceGeometry (en vis-à-vis) + //Recup de la 2nde IfcConnectionSurfaceGeometry (en vis-à-vis) STRUCT_IFCENTITY* st_IfcEntCS2 = *(st_IfcEntCS1->st_FaceToFace.begin()); - //On vérifie que cette IfcConnectionSurfaceGeometry (st_IfcEntCS2) n'a pas déjà sa TIFCSurface - //car à sa création la même TIFCSurface est associée à 2 IfcConnectionSurfaceGeometry + //On vérifie que cette IfcConnectionSurfaceGeometry (st_IfcEntCS2) n'a pas déjà sa TIFCSurface + //car à sa création la même TIFCSurface est associée à 2 IfcConnectionSurfaceGeometry // => sinon erreur if (st_IfcEntCS2 && st_IfcEntCS2->st_TIFCSurface == nullptr) { - // ATTENTION: la taille du nom "Ch_Id" est limité à 16 dans FillNameAndIDAttributeOf_STRUCT_IFCENTITY + // ATTENTION: la taille du nom "Ch_Id" est limité à 16 dans FillNameAndIDAttributeOf_STRUCT_IFCENTITY Map_String_String map_messages; map_messages["Id"] = string(st_IfcEntCS1->ch_Id) + string(st_IfcEntCS2->ch_Id); map_messages["Type"] = "TIFCSurface"; // Indiquer le type du TIFCSurface (ifcWall...) : map_messages["Type"] = ... - //Création et Remplissage de la structure de "TIFCSurface" + //Création et Remplissage de la structure de "TIFCSurface" STRUCT_IFCENTITY * st_TIFCSurface = new STRUCT_IFCENTITY; FillNameAndIDAttributeOf_STRUCT_IFCENTITY(st_TIFCSurface, map_messages); //FillAttributeOf_STRUCT_IFCENTITY(st_IfcContain, map_messages, db_LocalMat, &(*st_IfcBelongTo)); st_IfcEntCS1->st_TIFCSurface = st_TIFCSurface; st_IfcEntCS2->st_TIFCSurface = st_TIFCSurface; if (st_TIFCSurface) { st_TIFCSurface->st_Contains.push_back(st_IfcEntCS1); st_TIFCSurface->st_Contains.push_back(st_IfcEntCS2); }// if (st_TIFCSurface) }// if (st_IfcEntCS2 && st_IfcEntCS2->st_TIFCSurface==nullptr) else - res = 3001;//Format erreur: XXXYYY XXX=numero identifiant la routine , YYY=numéro de l'erreur dans cette routine + res = 3001;//Format erreur: XXXYYY XXX=numero identifiant la routine , YYY=numéro de l'erreur dans cette routine }// if (st_IfcEntCS1 && st_IfcEntCS1->st_FaceToFace.size()==1) else { if (st_IfcEntCS1 && st_IfcEntCS1->st_FaceToFace.size() == 0) { //SOIT MUR exterieur - //SOIT dalle entre étage => pas sûr car dalles devraientt se traiter comme les murs intérieurs??!!?? + //SOIT dalle entre étage => pas sûr car dalles devraientt se traiter comme les murs intérieurs??!!?? - // ATTENTION: la taille du nom "Ch_Id" est limité à 16 dans FillNameAndIDAttributeOf_STRUCT_IFCENTITY + // ATTENTION: la taille du nom "Ch_Id" est limité à 16 dans FillNameAndIDAttributeOf_STRUCT_IFCENTITY Map_String_String map_messages; map_messages["Id"] = string(st_IfcEntCS1->ch_Id) + "------"; map_messages["Type"] = "TIFCSurface"; // Indiquer le type du TIFCSurface (ifcWall...) : map_messages["Type"] = ... - //Création et Remplissage de la structure de "TIFCSurface" + //Création et Remplissage de la structure de "TIFCSurface" STRUCT_IFCENTITY * st_TIFCSurface = new STRUCT_IFCENTITY; FillNameAndIDAttributeOf_STRUCT_IFCENTITY(st_TIFCSurface, map_messages); //FillAttributeOf_STRUCT_IFCENTITY(st_IfcContain, map_messages, db_LocalMat, &(*st_IfcBelongTo)); st_IfcEntCS1->st_TIFCSurface = st_TIFCSurface; //st_IfcEntCS2->st_TIFCSurface = st_TIFCSurface; if (st_TIFCSurface) { st_TIFCSurface->st_Contains.push_back(st_IfcEntCS1); //st_TIFCSurface->st_Contains.push_back(st_IfcEntCS2); }// if (st_TIFCSurface) }// if (st_IfcEntCS1 && st_IfcEntCS1->st_FaceToFace.size() == 0) }// else if (st_IfcEntCS1->st_FaceToFace.size()==1) return res; } \ No newline at end of file diff --git a/IfcC++/ifc_BIMxBEMEPFLEngine/ifc_Tree.h b/IfcC++/ifc_BIMxBEMEPFLEngine/ifc_Tree.h index 8eecbac..1530ab9 100644 --- a/IfcC++/ifc_BIMxBEMEPFLEngine/ifc_Tree.h +++ b/IfcC++/ifc_BIMxBEMEPFLEngine/ifc_Tree.h @@ -1,79 +1,79 @@ #pragma once #include #include #include #include using namespace std; typedef map Map_String_String; //IMPORTANT: Toute modif de la structure doit assurer son "delete" (cf. ifc_Tree::delete_STRUCT_IFCENTITY) struct STRUCT_IFCENTITY { const char *ch_GlobalId = nullptr; const char *ch_Type = nullptr; const char *ch_PredifinedType = nullptr; const char *ch_Id = nullptr; const char *ch_Name = nullptr; list st_BelongsTo; list st_Contains; list st_FaceToFace; //list st_SideBySide; STRUCT_IFCENTITY* st_TIFCSurface = nullptr; set>, function>, pair>)>> mp_SideBySide; // set>> mp_SideBySide; //map> mp_SideBySide; //map mp_SideBySide; list db_RelativePlacement; list> st_PointsDesContours; bool bo_ArePointsDesContoursALoop = false;//Si true = les 1er et dernier points de st_PointsDesContours sont identiques list db_Centroid; - Map_String_String* map_DefValues = nullptr;// tableau des noms des attributs géométriques (Length, Width,...) et de leur valeur (en string) + Map_String_String* map_DefValues = nullptr;// tableau des noms des attributs géométriques (Length, Width,...) et de leur valeur (en string) }; typedef function>, pair>)> Comparator; typedef map Map_String_ptrSTRUCT_IFCENTITY; //extern Comparator compFunctor; //Comparator compFunctor = // [](pair> elem1, pair> elem2) //{ // return elem1.second.first < elem2.second.first; //}; class ifc_Tree { public: ifc_Tree(); ~ifc_Tree(); void FillAttributeOf_STRUCT_IFCENTITY(STRUCT_IFCENTITY* st_IfcTree, Map_String_String &map_messages, double db_LocalMat[3][4] = nullptr, STRUCT_IFCENTITY *st_IfcBelongTo = nullptr, STRUCT_IFCENTITY *st_IfcBelongTo2 = nullptr); void FillAttributeOfExisting_STRUCT_IFCENTITY(STRUCT_IFCENTITY* st_IfcTree, Map_String_String &map_messages, double db_LocalMat[3][4] = nullptr, STRUCT_IFCENTITY *st_IfcBelongTo = nullptr, STRUCT_IFCENTITY *st_IfcBelongTo2 = nullptr); void FillNameAndIDAttributeOf_STRUCT_IFCENTITY(STRUCT_IFCENTITY* st_IfcTree, Map_String_String &map_messages); void FillRelativePlacementOf_STRUCT_IFCENTITY(STRUCT_IFCENTITY* st_IfcTree, double db_LocalMat[3][4]); void FillGeomAttributeOf_STRUCT_IFCENTITY(STRUCT_IFCENTITY* st_IfcSubFacGeomRep, list> &SubFacePtsCoord, STRUCT_IFCENTITY *st_IfcBelongTo, Map_String_String &map_messages); void FillCentroidOf_STRUCT_IFCENTITY(STRUCT_IFCENTITY* st_IfcTree, double db_CentroidCoord[3]); void FillQuantitiesAttributeOf_STRUCT_IFCENTITY(STRUCT_IFCENTITY* st_IfcTree, Map_String_String &map_messages); void delete_STRUCT_IFCENTITY(STRUCT_IFCENTITY *&st_IfcTree, STRUCT_IFCENTITY* st_IfcCurrentFather = nullptr); - //Creation d'entité (TIFCSurface) à partir des autres entités STRUCT_IFCENTITY (IfcConnectionSurfaceGeometry) déjà définies (pas à partir des entités xml comme dans ifc_Tree.template.h) + //Creation d'entité (TIFCSurface) à partir des autres entités STRUCT_IFCENTITY (IfcConnectionSurfaceGeometry) déjà définies (pas à partir des entités xml comme dans ifc_Tree.template.h) int BuildTIFCSurfaceTreeFrom_STRUCT_IFCENTITY(STRUCT_IFCENTITY* st_IfcTree); Comparator compFunctor = [](pair> elem1, pair> elem2) { return elem1.second.first < elem2.second.first; }; #include "ifc_Tree.template.h" STRUCT_IFCENTITY *&Getstruct(); private: STRUCT_IFCENTITY *_st_IfcTree; Map_String_ptrSTRUCT_IFCENTITY _map_ID_IfcEnt; }; diff --git a/IfcC++/ifc_BIMxBEMEPFLEngine/ifc_Tree.template.h b/IfcC++/ifc_BIMxBEMEPFLEngine/ifc_Tree.template.h index 304386e..b69e9ad 100644 --- a/IfcC++/ifc_BIMxBEMEPFLEngine/ifc_Tree.template.h +++ b/IfcC++/ifc_BIMxBEMEPFLEngine/ifc_Tree.template.h @@ -1,623 +1,623 @@ template int ifc_Tree::BuildTreeFromRoot(Type_Elmt_Of_Source *&pElem/*, STRUCT_IFCENTITY *&st_IfcTree*/, Type_Source * const& ifcXmlFile) { int res = 0; //lecture des Id et type de "IfcProject" Map_String_String m_messages; res = ifcXmlFile->ReadIdAndTypeOfAnEntity(pElem, m_messages); if (res) return res; //Recup du positionnement relatif Type_Elmt_Of_Source *lpObjectGeomrepCtx = nullptr; res = ifcXmlFile->FindIfcGeometricRepresentationContext(pElem, lpObjectGeomrepCtx); if (res) return res; //Recup du positionnement relatif Type_Elmt_Of_Source *lpObjectPlac = nullptr; res = ifcXmlFile->FindIfcAxis2Placement3D(lpObjectGeomrepCtx, lpObjectPlac); if (res) return res; //Recup de la matrice de position double db_LocalMat[3][4]; res = ifcXmlFile->ReadIfcAxis2Placement3DMatrix(lpObjectPlac, db_LocalMat); if (res) return res; - //Recup du vecteur Nord géographique + //Recup du vecteur Nord géographique double db_GeoNorth[3]; res = ifcXmlFile->ReadIfcDirectionVector(lpObjectGeomrepCtx, db_GeoNorth); if (res) return res; - //Création et Remplissage de la structure de "IfcProject" + //Création et Remplissage de la structure de "IfcProject" _st_IfcTree = new STRUCT_IFCENTITY(); FillAttributeOf_STRUCT_IFCENTITY(_st_IfcTree, m_messages, db_LocalMat); - //On met le Nord Géographique dans l'attribut "Centroid" de l'ifcProject + //On met le Nord Géographique dans l'attribut "Centroid" de l'ifcProject FillCentroidOf_STRUCT_IFCENTITY(_st_IfcTree, db_GeoNorth); - //Recupération chainée des entités successives de "IfcProject" + //Recupération chainée des entités successives de "IfcProject" res = BuildTreeFrom(pElem, ifcXmlFile, _st_IfcTree); if (res) return res; return res; } template int ifc_Tree::BuildTreeFromRelAggregates(list &lpRelatedObjects, Type_Source * const& ifcXmlFile, STRUCT_IFCENTITY *st_IfcBelongTo) { int res = 0; //Boucle sur les RelatedObjects de IfcRelAggregates en cours list ::iterator it_Elem; for (it_Elem = lpRelatedObjects.begin(); it_Elem != lpRelatedObjects.end(); it_Elem++) { - //lecture du contenu des child d'un IfcEntity liés à "IfcProject" + //lecture du contenu des child d'un IfcEntity liés à "IfcProject" Map_String_String map_messages; res = ifcXmlFile->ReadIdAndTypeOfAnEntity(*it_Elem, map_messages); if (res) return res; //Recup du positionnement relatif Type_Elmt_Of_Source *lpObjectPlac = nullptr; res = ifcXmlFile->FindIfcLocalPlacement(*it_Elem, lpObjectPlac); if (res) return res; //Recup de la matrice de position double db_LocalMat[3][4]; res = ifcXmlFile->ReadIfcAxis2Placement3DMatrix(lpObjectPlac, db_LocalMat); if (res) return res; ////Recup du PredefinedType (soit sous ifcEntity soit sous ifcEntityType via IfcRelDefinesByType de l'ifcEntity) //res = ifcXmlFile->ReadPredefinedTypeOfAnEntity(*it_Elem, map_messages); //if (res) return res; - //Création et Remplissage de la structure de "IfcEntity" + //Création et Remplissage de la structure de "IfcEntity" STRUCT_IFCENTITY * st_IfcContain = new STRUCT_IFCENTITY; FillAttributeOf_STRUCT_IFCENTITY(st_IfcContain, map_messages, db_LocalMat, &(*st_IfcBelongTo)); - //Appel Récursif + //Appel Récursif res = BuildTreeFrom(*it_Elem, ifcXmlFile, st_IfcContain); if (res) return res; }// for (it_Elem = lpRelatedObjects.begin(); it_Elem != lpRelatedObjects.end(); it_Elem++) return res; } template int ifc_Tree::BuildTreeFromShapeOfSpace(list &lpShape, Type_Source * const& ifcXmlFile, STRUCT_IFCENTITY *st_IfcBelongTo) { int res = 0; //Boucle sur les IfcProductDefinitionShape de IfcSpace en cours list ::iterator it_ElemShape; for (it_ElemShape = lpShape.begin(); it_ElemShape != lpShape.end(); it_ElemShape++) { - //lecture du contenu des child d'un IfcEntity liés à "IfcProject" + //lecture du contenu des child d'un IfcEntity liés à "IfcProject" Map_String_String map_messages; res = ifcXmlFile->ReadIdAndTypeOfAnEntity(*it_ElemShape, map_messages); if (res) return res; // !!!! IfcProductDefinitionShape n'a pas de LocalPlacement !!!! - //Création et Remplissage de la structure de "IfcEntity" + //Création et Remplissage de la structure de "IfcEntity" STRUCT_IFCENTITY * st_IfcContainRep = new STRUCT_IFCENTITY; FillAttributeOf_STRUCT_IFCENTITY(st_IfcContainRep, map_messages, nullptr, &(*st_IfcBelongTo)); - //Appel Récursif + //Appel Récursif //IfcConnectionSurfaceGeometry int ifc_Tree::BuildTreeFromRelSpaceBoundary(list &lpRelatedBuildingElement, list &lpConnectionSurfaceGeometry, Type_Source * const& ifcXmlFile, STRUCT_IFCENTITY *st_IfcBelongTo) { int res = 0; - //Boucle à la fois sur les éléments de construction et sur les ConnectionSurfaceGeometry (correspondance unaire 1 <-> 1) + //Boucle à la fois sur les éléments de construction et sur les ConnectionSurfaceGeometry (correspondance unaire 1 <-> 1) list ::iterator it_ElemBE; list ::iterator it_ElemCSG; for (it_ElemBE = lpRelatedBuildingElement.begin(), it_ElemCSG = lpConnectionSurfaceGeometry.begin(); it_ElemBE != lpRelatedBuildingElement.end() && it_ElemCSG != lpConnectionSurfaceGeometry.end(); it_ElemBE++, it_ElemCSG++) { //lecture du contenu des Buildingelements de "IfcSpace" Map_String_String map_messages; res = ifcXmlFile->ReadIdAndTypeOfAnEntity(*it_ElemBE, map_messages); if (res) return res; - //Création (ou recuperation) et Remplissage de la structure du Building Element "IfcWall..." + //Création (ou recuperation) et Remplissage de la structure du Building Element "IfcWall..." STRUCT_IFCENTITY * st_IfcContainBE = nullptr; if (_map_ID_IfcEnt[map_messages["Id"]]) { st_IfcContainBE = _map_ID_IfcEnt[map_messages["Id"]]; FillAttributeOfExisting_STRUCT_IFCENTITY(st_IfcContainBE, map_messages, nullptr, &(*st_IfcBelongTo)); }// if (_map_ID_IfcEnt[map_messages["Id"]) else { st_IfcContainBE = new STRUCT_IFCENTITY; _map_ID_IfcEnt[map_messages["Id"]] = st_IfcContainBE; FillAttributeOf_STRUCT_IFCENTITY(st_IfcContainBE, map_messages, nullptr, &(*st_IfcBelongTo)); //lecture du Quantities des Buildingelements de "IfcSpace" map_messages.clear(); res = ifcXmlFile->ReadKeyWordsAndValuesOfIfcElementQuantity(*it_ElemBE, map_messages); if (res) return res; FillQuantitiesAttributeOf_STRUCT_IFCENTITY(st_IfcContainBE, map_messages); //Fillattribute.... A FAIRE }// else if (_map_ID_IfcEnt[map_messages["Id"]) //lecture du contenu des ConnectionSurfaceGeometry (sous-Faces) de "IfcSpace" map_messages.clear(); res = ifcXmlFile->ReadIdAndTypeOfAnEntity(*it_ElemCSG, map_messages); if (res) return res; - //Création et Remplissage de la structure de "IfcConnectionSurfaceGeometry" + //Création et Remplissage de la structure de "IfcConnectionSurfaceGeometry" STRUCT_IFCENTITY * st_IfcContainCSG = new STRUCT_IFCENTITY; FillAttributeOf_STRUCT_IFCENTITY(st_IfcContainCSG, map_messages, nullptr, &(*st_IfcBelongTo), &(*st_IfcContainBE)); - //Appel Récursif + //Appel Récursif //IfcConnectionSurfaceGeometry int ifc_Tree::BuildExplicitDataTreeFromIfcConnectionSurfaceGeometry(Type_Elmt_Of_Source* pElem, Type_Source * const& ifcXmlFile, STRUCT_IFCENTITY *st_IfcBelongTo) { //Pour IfcConnectionSurfaceGeometry => 1 Sous-Face // // // // // // // => a mettre dans identifiant sous-face // // // // // // // // // ////// 1)/2) => 1=Plan de ref [2=Sous-Surf dans le plan de ref (=> chgmt ref)] // // // // // // // // // // // // // // // // // // // // // // 0.9999824492 // 0.005924630765 // 0. // // // ////// 2)/2) => 2=Sous-Surf dans le plan de ref (=> chgmt ref) [1=Plan de ref] // // // // // // false // // // // continuous // false // // // // // // // // // // // // // // // // // // 0. // 6.511503496 // 0. // // // int res = 0; //Recup de repere local P/R reprere global Type_Elmt_Of_Source *lpObjectPlac = nullptr; res = ifcXmlFile->FindIfcCurveBoundedPlanePlacemcent(pElem, lpObjectPlac); if (res) return res; double db_LocalMat[3][4]; res = ifcXmlFile->ReadIfcAxis2Placement3DMatrix(lpObjectPlac, db_LocalMat); if (res) return res; FillRelativePlacementOf_STRUCT_IFCENTITY(st_IfcBelongTo, db_LocalMat); //Recup des points P/R reprere local list lst_Path_For_SubFace; - lst_Path_For_SubFace.push_back("SurfaceOnRelatingElement");// [1..1] 1 Face => gérer un 1er niveau de listes - lst_Path_For_SubFace.push_back("OuterBoundary");//[1..n] M contours => gerer un 2ème niveau de listes => 1er contour externe ensuite internes ("InnerBoundaries"? => utilité en BEM?? => ignorées pour le moment) - lst_Path_For_SubFace.push_back("Segments"); //[1..n] 1 seul contour (externe) mais contenant plusieurs segments => dans même liste?? + lst_Path_For_SubFace.push_back("SurfaceOnRelatingElement");// [1..1] 1 Face => gérer un 1er niveau de listes + lst_Path_For_SubFace.push_back("OuterBoundary");//[1..n] M contours => gerer un 2ème niveau de listes => 1er contour externe ensuite internes ("InnerBoundaries"? => utilité en BEM?? => ignorées pour le moment) + lst_Path_For_SubFace.push_back("Segments"); //[1..n] 1 seul contour (externe) mais contenant plusieurs segments => dans même liste?? lst_Path_For_SubFace.push_back("ParentCurve"); list ::iterator it_ElemForPath_SubFace; it_ElemForPath_SubFace = lst_Path_For_SubFace.begin(); // - // "lll" est une liste qui dissocie les IfcPolyline par entités de type (IfcCurveBoundedPlane,...) sous SurfaceOnRelatingElement - // "ll" est une liste qui dissocie les IfcPolyline par entités de type (IfcCompositeCurve,...) sous OuterBoundary - // "l" est une liste d'entités (IfcPolyline,...) sous Segments>ParentCurve (cette liste rassemble la multiplicité de ces Segments>ParentCurve) + // "lll" est une liste qui dissocie les IfcPolyline par entités de type (IfcCurveBoundedPlane,...) sous SurfaceOnRelatingElement + // "ll" est une liste qui dissocie les IfcPolyline par entités de type (IfcCompositeCurve,...) sous OuterBoundary + // "l" est une liste d'entités (IfcPolyline,...) sous Segments>ParentCurve (cette liste rassemble la multiplicité de ces Segments>ParentCurve) list lpObjectSubFace; list >> lllBoundaryOfSurface_SubFace; res = ifcXmlFile->FindObjectFromRefAndPathBy3(pElem, it_ElemForPath_SubFace, lst_Path_For_SubFace.end(), lllBoundaryOfSurface_SubFace, lpObjectSubFace); if (res) return res; - //Recupération des points définissant chaque face + création des faces et assoc avec les "BelongTo" - //Si il y a plus d'une Rep => problème + //Recupération des points définissant chaque face + création des faces et assoc avec les "BelongTo" + //Si il y a plus d'une Rep => problème if (lllBoundaryOfSurface_SubFace.size() > 1) - return 2001;//Format erreur: XXXYYY XXX=numero identifiant la routine , YYY=numéro de l'erreur dans cette routine + return 2001;//Format erreur: XXXYYY XXX=numero identifiant la routine , YYY=numéro de l'erreur dans cette routine if (lllBoundaryOfSurface_SubFace.size() != lpObjectSubFace.size()) - return 2002;//Format erreur: XXXYYY XXX=numero identifiant la routine , YYY=numéro de l'erreur dans cette routine + return 2002;//Format erreur: XXXYYY XXX=numero identifiant la routine , YYY=numéro de l'erreur dans cette routine // //Recup de la Rep list >> ::iterator it_BoundaryOfSurface = lllBoundaryOfSurface_SubFace.begin(); // - //Boucle sur les faces de la Rep pour récupérer leurs contours + //Boucle sur les faces de la Rep pour récupérer leurs contours list ::iterator it_SubFace; list > ::iterator it_SegmentsOfBoundary; for (it_SegmentsOfBoundary = (*it_BoundaryOfSurface).begin(), it_SubFace = lpObjectSubFace.begin(); it_SegmentsOfBoundary != (*it_BoundaryOfSurface).end(); it_SegmentsOfBoundary++, it_SubFace++) { - //lecture du contenu des child d'un IfcEntity liés à "IfcProject" + //lecture du contenu des child d'un IfcEntity liés à "IfcProject" Map_String_String map_messages; res = ifcXmlFile->ReadIdAndTypeOfAnEntity(*it_SubFace, map_messages); if (res) return res; - list> SubFacePtsCoord;//la list définit un des contours de la face, list> définit les contours de la face + list> SubFacePtsCoord;//la list définit un des contours de la face, list> définit les contours de la face res = ifcXmlFile->ReadPtsDefiningPolyloopOrPolyline((*it_SegmentsOfBoundary), SubFacePtsCoord); if (res) return res; - //Création et Remplissage de la structure "Sous-Face" + //Création et Remplissage de la structure "Sous-Face" STRUCT_IFCENTITY * st_IfcSubFacGeomRep = new STRUCT_IFCENTITY; FillGeomAttributeOf_STRUCT_IFCENTITY(st_IfcSubFacGeomRep, SubFacePtsCoord, st_IfcBelongTo, map_messages); }// for (it_SegmentsOfBoundary = (*it_BoundaryOfSurface).begin(); it_SegmentsOfBoundary != (*it_BoundaryOfSurface).end(); it_SegmentsOfBoundary++) return res; } template int ifc_Tree::BuildExplicitDataTreeFromIfcProductDefinitionShape(Type_Elmt_Of_Source* pElem, Type_Source * const& ifcXmlFile, STRUCT_IFCENTITY *st_IfcBelongTo) { //Pour IfcProductDefinitionShape => n Faces => seul l'IfcShapeRepresentation "Body" est pris en compte! // // // // // // // ////// 1)/2) => 1=Body (=> 6 faces "Polyloops" pour cube) [et 2=FootPrint (Polylines)] // // // // // // Body // Brep // // // // // ////// 1.1)/1.2) // // // Body // Model // // // // model_view // // // // Model // 3 // 1.000000000E-5 // // // // // => !! 2 ex:double-wrapper et non 3 // // // ////// 1.2)/1.2) // // // // // // // // // // => a mettre dans identifiant face // => a mettre dans identifiant face // => a mettre dans identifiant face // => a mettre dans identifiant face // => a mettre dans identifiant face // => a mettre dans identifiant face // // // // // // // // // // // // // // true // // // // // // // // // // // ////// 2)/2) => 2=FootPrint (Polylines) [et 1=Body (=> 6 faces "Polyloops" pour cube)] // // // // // // FootPrint // GeometricCurveSet // // // // // ////// 2.1)/2.2) // // // FootPrint // Model // // // // model_view // // ////// 2.2)/2.2) // // // // // // // int res = 0; // //Recup de l'IfcShapeRepresentation de type BRep Type_Elmt_Of_Source *lpObjectFound = nullptr; res = ifcXmlFile->FindIfcShapeRepresentationBrep(pElem, lpObjectFound); if (res) return res; if (lpObjectFound) { //Recup de repere local P/R reprere global Type_Elmt_Of_Source *lpObjectPlac = nullptr; res = ifcXmlFile->FindIfcGeometricRepresentationSubContext(lpObjectFound, lpObjectPlac); if (res) return res; double db_LocalMat[3][4]; res = ifcXmlFile->ReadIfcAxis2Placement3DMatrix(lpObjectPlac, db_LocalMat); if (res) return res; FillRelativePlacementOf_STRUCT_IFCENTITY(st_IfcBelongTo, db_LocalMat); //Recup des points P/R reprere local list lst_Path_For_BodyFaces; lst_Path_For_BodyFaces.push_back("Items"); //[1..n] => HP: 1 seul Item pertinent pour BEM?? lst_Path_For_BodyFaces.push_back("Outer"); - lst_Path_For_BodyFaces.push_back("CfsFaces"); //[1..n] N Faces => gérer un 1er niveau de listes - lst_Path_For_BodyFaces.push_back("Bounds"); //[1..n] M contours => gerer un 2ème niveau de listes => 1er contour externe ensuite internes? + lst_Path_For_BodyFaces.push_back("CfsFaces"); //[1..n] N Faces => gérer un 1er niveau de listes + lst_Path_For_BodyFaces.push_back("Bounds"); //[1..n] M contours => gerer un 2ème niveau de listes => 1er contour externe ensuite internes? lst_Path_For_BodyFaces.push_back("Bound"); list ::iterator it_ElemForPath_BodyFaces; it_ElemForPath_BodyFaces = lst_Path_For_BodyFaces.begin(); // - // "lll" est une liste qui dissocie les IfcPolyLoop par entités de type (IfcFacetedBrep,...) sous Items - // "ll" est une liste qui dissocie les IfcPolyLoop par entités de type (IfcFace,...) sous CfsFaces - // "l" est une liste d'entités (IfcPolyLoop,...) sous Bounds>Bound (cette liste rassemble la multiplicité de ces Bounds>Bound) + // "lll" est une liste qui dissocie les IfcPolyLoop par entités de type (IfcFacetedBrep,...) sous Items + // "ll" est une liste qui dissocie les IfcPolyLoop par entités de type (IfcFace,...) sous CfsFaces + // "l" est une liste d'entités (IfcPolyLoop,...) sous Bounds>Bound (cette liste rassemble la multiplicité de ces Bounds>Bound) list lpObjectFace; list >> lllCFsFacesOfOneItem_Face; // => liste des BRep (1 seule utile pour BEM??) res = ifcXmlFile->FindObjectFromRefAndPathBy3(lpObjectFound, it_ElemForPath_BodyFaces, lst_Path_For_BodyFaces.end(), lllCFsFacesOfOneItem_Face, lpObjectFace); if (res) return res; - //Recupération des points définissant chaque face + création des faces et assoc avec les "BelongTo" - //Si il y a plus d'une Rep => problème + //Recupération des points définissant chaque face + création des faces et assoc avec les "BelongTo" + //Si il y a plus d'une Rep => problème if (lllCFsFacesOfOneItem_Face.size() > 1) - return 2003;//Format erreur: XXXYYY XXX=numero identifiant la routine , YYY=numéro de l'erreur dans cette routine + return 2003;//Format erreur: XXXYYY XXX=numero identifiant la routine , YYY=numéro de l'erreur dans cette routine if ( (*(lllCFsFacesOfOneItem_Face.begin())).size() != lpObjectFace.size()) - return 2004;//Format erreur: XXXYYY XXX=numero identifiant la routine , YYY=numéro de l'erreur dans cette routine + return 2004;//Format erreur: XXXYYY XXX=numero identifiant la routine , YYY=numéro de l'erreur dans cette routine // //Recup de la Rep list >> ::iterator it_CFsFacesOfOneItem = lllCFsFacesOfOneItem_Face.begin(); // - //Boucle sur les faces de la Rep pour récupérer leurs contours + //Boucle sur les faces de la Rep pour récupérer leurs contours list ::iterator it_Face; list > ::iterator it_BoundsOfOneCFsFace; for (it_BoundsOfOneCFsFace = (*it_CFsFacesOfOneItem).begin(), it_Face = lpObjectFace.begin(); it_BoundsOfOneCFsFace != (*it_CFsFacesOfOneItem).end(); it_BoundsOfOneCFsFace++, it_Face++) { - //lecture du contenu des child d'un IfcEntity liés à "IfcProject" + //lecture du contenu des child d'un IfcEntity liés à "IfcProject" Map_String_String map_messages; res = ifcXmlFile->ReadIdAndTypeOfAnEntity(*it_Face, map_messages); if (res) return res; - list> FacePtsCoord;//la list définit un des contours de la face, list> définit les contours de la face + list> FacePtsCoord;//la list définit un des contours de la face, list> définit les contours de la face res = ifcXmlFile->ReadPtsDefiningPolyloopOrPolyline(*it_BoundsOfOneCFsFace, FacePtsCoord); if (res) return res; - //Création et Remplissage de la structure "Face" + //Création et Remplissage de la structure "Face" STRUCT_IFCENTITY * st_IfcFacGeomRep = new STRUCT_IFCENTITY; FillGeomAttributeOf_STRUCT_IFCENTITY(st_IfcFacGeomRep, FacePtsCoord, st_IfcBelongTo, map_messages); }// for (it_BoundsOfOneCFsFace = (*it_CFsFacesOfOneItem).begin(); it_BoundsOfOneCFsFace != (*it_CFsFacesOfOneItem).end(); it_BoundsOfOneCFsFace++) }// if(lpObjectFound) return res; } // /////////////////////////////////////////////////////////////////////////////////// -// Routines intermédiaires "d'aiguillage" mais ne créant pas de structure/entité // +// Routines intermédiaires "d'aiguillage" mais ne créant pas de structure/entité // /////////////////////////////////////////////////////////////////////////////////// // template int ifc_Tree::BuildTreeFrom(Type_Elmt_Of_Source* pElem, Type_Source * const& ifcXmlFile, STRUCT_IFCENTITY *st_IfcBelongTo) { int res = 0; // // IfcRelAggregates // - //Recuperation des IfcEntity liés à pElem ("IfcProject",ifcSite...) par le lien binaire IfcRelAggregates + //Recuperation des IfcEntity liés à pElem ("IfcProject",ifcSite...) par le lien binaire IfcRelAggregates list lpRelatedObjects; res = ifcXmlFile->FindRelatedObjectsInRelAggregatesFromRelatingObject(pElem, &lpRelatedObjects); if (res) return res; - // Si lpRelatedObjects est vide il n'y a pas d'autre RelAggreg => à priori à partir des ifcspaces + // Si lpRelatedObjects est vide il n'y a pas d'autre RelAggreg => à priori à partir des ifcspaces // ???Si lpRelatedObjects est vide il n'y a pas d'autre RelAggreg => essayer alors RelProperties...??? if (lpRelatedObjects.size() != 0) { res = BuildTreeFromRelAggregates(lpRelatedObjects, ifcXmlFile, &(*st_IfcBelongTo)); if (res) return res; }// if (lpRelatedObjects.size!=0) else { //Test car il peut exister par exemple des IfcBuildingStorey sans espace => ne pas continuer cette branche - // Par sécurité, test étendu aux entités "pères": IfcProject, IfcSite, IfcBuilding, IfcBuildingStorey + // Par sécurité, test étendu aux entités "pères": IfcProject, IfcSite, IfcBuilding, IfcBuildingStorey if (string(pElem->Value()) != string("IfcProject") && string(pElem->Value()) != string("IfcSite") && string(pElem->Value()) != string("IfcBuilding") && string(pElem->Value()) != string("IfcBuildingStorey") ) { // //lecture du Quantities des "IfcSpace" Map_String_String map_messages; res = ifcXmlFile->ReadKeyWordsAndValuesOfIfcElementQuantity(pElem, map_messages); if (res) return res; FillQuantitiesAttributeOf_STRUCT_IFCENTITY(st_IfcBelongTo, map_messages); // // IfcProductDefinitionShape // - //récupérer le lien IfcSpace <-> Faces (pas le data geom!) => IfcProductDefinitionShape - //Recuperation de l'IfcEntity (IfcProductDefinitionShape) de "IfcSpace" consigné dans sa definition + //récupérer le lien IfcSpace <-> Faces (pas le data geom!) => IfcProductDefinitionShape + //Recuperation de l'IfcEntity (IfcProductDefinitionShape) de "IfcSpace" consigné dans sa definition list lpShape; res = ifcXmlFile->FindRepresentationInSpace(pElem, &lpShape); if (res) return res; res = BuildTreeFromShapeOfSpace(lpShape, ifcXmlFile, &(*st_IfcBelongTo)); if (res) return res; // // IfcRelSpaceBoundary // - //Recuperation des IfcEntity liés à "IfcSpace" par le lien ternaire IfcRelSpaceBoundary + //Recuperation des IfcEntity liés à "IfcSpace" par le lien ternaire IfcRelSpaceBoundary list lpRelatedBuildingElement; list lpConnectionSurfaceGeometry; res = ifcXmlFile->FindRelatedBuildingElementAndConnectionGeometryInRelSpaceBoundaryFromRelatingSpace(pElem, &lpRelatedBuildingElement, &lpConnectionSurfaceGeometry); if (res) return res; if (lpRelatedBuildingElement.size() != 0 && lpRelatedBuildingElement.size() == lpConnectionSurfaceGeometry.size()) { res = BuildTreeFromRelSpaceBoundary(lpRelatedBuildingElement, lpConnectionSurfaceGeometry, ifcXmlFile, &(*st_IfcBelongTo)); if (res) return res; }// if (lpRelatedBuildingElement.size() != 0 && lpRelatedBuildingElement.size() == lpConnectionSurfaceGeometry.size()) }// if (string(pElem->Value()) != string("IfcProject") // && string(pElem->Value()) != string("IfcSite") // && string(pElem->Value()) != string("IfcBuilding") // && string(pElem->Value()) != string("IfcBuildingStorey") }// else if (lpRelatedObjects.size!=0) return res; } template int ifc_Tree::BuildExplicitDataTreeFrom(Type_Elmt_Of_Source* pElem, Type_Source * const& ifcXmlFile, STRUCT_IFCENTITY *st_IfcBelongTo) { int res = 0; //Pour IfcConnectionSurfaceGeometry => 1 Sous-Face if (string(pElem->Value()) == string("IfcConnectionSurfaceGeometry")) { res = BuildExplicitDataTreeFromIfcConnectionSurfaceGeometry(pElem, ifcXmlFile, st_IfcBelongTo); if (res) return res; }// if (string(pElem->Value()) == string("IfcConnectionSurfaceGeometry")) //Pour IfcProductDefinitionShape => n Faces // // IMPORTANT (A CONFIRMER): // HP: 1 Space <=> 1 Shape <=> 1 BRep (utile pour BEM) => N Faces et 1 Face => N contours (1 externe et N-1 internes)???? - // => du coup on élimine shape et BRep pour associer 1 Space à N Faces + // => du coup on élimine shape et BRep pour associer 1 Space à N Faces // Attention: question => 1 Face peut contenir un contour externe et des contours internes??? - // => gérer liste de listes de points - // => si en général 1 seul contour externe et n internes alors 1ère liste=contour externe et les autres listes=internes + // => gérer liste de listes de points + // => si en général 1 seul contour externe et n internes alors 1ère liste=contour externe et les autres listes=internes // if (string(pElem->Value()) == string("IfcProductDefinitionShape")) { res=BuildExplicitDataTreeFromIfcProductDefinitionShape(pElem, ifcXmlFile, st_IfcBelongTo); if (res) return res; }// if (string(pElem->Value()) == string("IfcProductDefinitionShape")) return res; } diff --git a/IfcC++/ifc_BIMxBEMEPFLEngine/ifc_TreePostTreatment.cpp b/IfcC++/ifc_BIMxBEMEPFLEngine/ifc_TreePostTreatment.cpp index 04a2e8c..56c1257 100644 --- a/IfcC++/ifc_BIMxBEMEPFLEngine/ifc_TreePostTreatment.cpp +++ b/IfcC++/ifc_BIMxBEMEPFLEngine/ifc_TreePostTreatment.cpp @@ -1,1274 +1,1275 @@ #include "ifc_TreePostTreatment.h" //#include #include #include //#include +#include const double db_eps= 0.00001; const double db_ep_mur_max = 0.3; ifc_TreePostTreatment::ifc_TreePostTreatment(ifc_Tree* CurrentIfcTree) { _CurrentIfcTree = CurrentIfcTree; } ifc_TreePostTreatment::~ifc_TreePostTreatment() { } int ifc_TreePostTreatment::BasifyTree(Map_Basified_Tree *&map_BasifTree) { int res = 0; if (_map_BasifTree.size() != 0) _map_BasifTree.clear(); STRUCT_IFCENTITY* st_IfcTree = nullptr; if (_CurrentIfcTree) { st_IfcTree =_CurrentIfcTree->Getstruct(); if (st_IfcTree) res = BasifyTreeFrom(st_IfcTree); else - res = 4002;//Format erreur: XXXYYY XXX=numero identifiant la routine , YYY=numéro de l'erreur dans cette routine + res = 4002;//Format erreur: XXXYYY XXX=numero identifiant la routine , YYY=numéro de l'erreur dans cette routine map_BasifTree = &_map_BasifTree; }// if (_CurrentIfcTree) else - res = 4001;//Format erreur: XXXYYY XXX=numero identifiant la routine , YYY=numéro de l'erreur dans cette routine + res = 4001;//Format erreur: XXXYYY XXX=numero identifiant la routine , YYY=numéro de l'erreur dans cette routine return res; } int ifc_TreePostTreatment::BasifyTreeFrom(STRUCT_IFCENTITY *&st_IfcTree) { int res = 0; - //Memo adresse pointeur (si existe pas ajouté) et son type "Ifc" - // => la map permet de ne pas référencer de multiple fois une même entité - // dans l'arbre, des entités sont référencés plusieurs fois car elles appartiennent à plusieurs objets + //Memo adresse pointeur (si existe pas ajouté) et son type "Ifc" + // => la map permet de ne pas référencer de multiple fois une même entité + // dans l'arbre, des entités sont référencés plusieurs fois car elles appartiennent à plusieurs objets _map_BasifTree[st_IfcTree] = st_IfcTree->ch_Type; list ::iterator it_Elem; for (it_Elem = (st_IfcTree->st_Contains).begin(); it_Elem != (st_IfcTree->st_Contains).end(); it_Elem++) { res = BasifyTreeFrom((*it_Elem)); if (res) return res; }// for (it_Elem = (st_IfcTree->st_Contains).begin(); it_Elem != (st_IfcTree->st_Contains).end(); it_Elem++) return res; } int ifc_TreePostTreatment::CompleteBasifiedTreeFromByTIFCSurfaces() { int res = 0; std::map::reverse_iterator it_Elem; for (it_Elem = _map_BasifTree.rbegin(); it_Elem != _map_BasifTree.rend(); it_Elem++) { if (it_Elem->first->st_TIFCSurface) _map_BasifTree[it_Elem->first->st_TIFCSurface] = it_Elem->first->st_TIFCSurface->ch_Type; }// for (it_Elem = _map_BasifTree.begin(); it_Elem != _map_BasifTree.end(); it_Elem++) return res; } -//Retrait dans les contours (st_PointsDesContours) du dernier point lorsqu'il est égal au 1er (+ consigne bool bo_IsItLoop=true) +//Retrait dans les contours (st_PointsDesContours) du dernier point lorsqu'il est égal au 1er (+ consigne bool bo_IsItLoop=true) int ifc_TreePostTreatment::RemoveLastPointOfLoopContours(string *&str_LogFile) { int res = 0; std::map::iterator it_Elem; for (it_Elem = _map_BasifTree.begin(); it_Elem != _map_BasifTree.end(); it_Elem++) { if (it_Elem->first->st_PointsDesContours.size() != 0) res = RemoveLastPointOfOneLoopContour(it_Elem->first,str_LogFile); if (res) return res; }// for (it_Elem = _map_BasifTree.begin(); it_Elem != _map_BasifTree.end(); it_Elem++) return res; } -//Retrait dans le contour (st_PointsDesContours) du derniers point lorsqu'il est égal au 1er (+ consigne bool bo_IsItLoop=true) +//Retrait dans le contour (st_PointsDesContours) du derniers point lorsqu'il est égal au 1er (+ consigne bool bo_IsItLoop=true) int ifc_TreePostTreatment::RemoveLastPointOfOneLoopContour(STRUCT_IFCENTITY *st_IfcEnt, string *&str_LogFile) { int res = 0; - //Boucle sur les différents sous-contours + //Boucle sur les différents sous-contours list > ::iterator it_llPt; for (it_llPt = (st_IfcEnt->st_PointsDesContours).begin(); it_llPt != (st_IfcEnt->st_PointsDesContours).end(); it_llPt++) { - //Verif si 1er pt=dernier pt => si oui retirer le dernier pt (les 3 dernières coordonnées) + consigne bool bo_IsItLoop=true + //Verif si 1er pt=dernier pt => si oui retirer le dernier pt (les 3 dernières coordonnées) + consigne bool bo_IsItLoop=true list ::iterator it_lPt = it_llPt->begin(); double X1 = *(*it_lPt); it_lPt++; double Y1 = *(*it_lPt); it_lPt++; double Z1 = *(*it_lPt); it_lPt = it_llPt->end(); it_lPt--; double ZN = *(*it_lPt); it_lPt--; double YN = *(*it_lPt); it_lPt--; double XN = *(*it_lPt); double db_Dist = sqrt((X1 - XN)*(X1 - XN) + (Y1 - YN)*(Y1 - YN) + (Z1 - ZN)*(Z1 - ZN)); if (db_Dist < db_eps) { (*it_llPt).pop_back(); (*it_llPt).pop_back(); (*it_llPt).pop_back(); st_IfcEnt->bo_ArePointsDesContoursALoop = true; - //Consigner l'effacement du dernier point enlever dans un fichier "log" (ou mettre en mémoire => même principe que pour le fichier bimxbem) + //Consigner l'effacement du dernier point enlever dans un fichier "log" (ou mettre en mémoire => même principe que pour le fichier bimxbem) int int_Step = 0; string str_Header = "Remove Last Point If Equal First Point :"; RecordLog(int_Step, *str_LogFile, str_Header, st_IfcEnt); }// if (db_Dist < 0.0000001) }// for (it_llPt = (st_IfcEnt->st_PointsDesContours).begin(); it_llPt != (st_IfcEnt->st_PointsDesContours).end(); it_llPt++) return res; } //Calcul des surfaces IfcConnectionSurfaceGeometry int ifc_TreePostTreatment::ComputeIfcConnectionSurfaceGeometrySurface() { int res = 0; std::map::iterator it_Elem; for (it_Elem = _map_BasifTree.begin(); it_Elem != _map_BasifTree.end(); it_Elem++) { if (it_Elem->second == "IfcConnectionSurfaceGeometry") res = ComputeOneIfcConnectionSurfaceGeometrySurface(it_Elem->first); if (res) return res; }// for (it_Elem = _map_BasifTree.begin(); it_Elem != _map_BasifTree.end(); it_Elem++) return res; } //Calcul de la surface d'une IfcConnectionSurfaceGeometry int ifc_TreePostTreatment::ComputeOneIfcConnectionSurfaceGeometrySurface(STRUCT_IFCENTITY *st_IfcEntCS) { int res = 0; - //Recup de toutes les coordonnées de tous les points du contour + //Recup de toutes les coordonnées de tous les points du contour double db_TotalSurf = 0.0; vector vc_PointCoordCtr1; for (list::iterator it_lEnt = (st_IfcEntCS->st_Contains).begin(); it_lEnt != (st_IfcEntCS->st_Contains).end(); it_lEnt++) { for (list>::iterator it_llCtr = ((*it_lEnt)->st_PointsDesContours).begin(); it_llCtr != ((*it_lEnt)->st_PointsDesContours).end(); it_llCtr++) { //Recup du contour vc_PointCoordCtr1.insert(vc_PointCoordCtr1.end(), (*it_llCtr).begin(), (*it_llCtr).end()); - //Fermer le contour par ajout du premier Pt en dernier (nécessaire au calcul de la surface) + //Fermer le contour par ajout du premier Pt en dernier (nécessaire au calcul de la surface) vector::iterator it_CoordPt1_end = vc_PointCoordCtr1.begin(); ++++++it_CoordPt1_end; vc_PointCoordCtr1.insert(vc_PointCoordCtr1.end(), vc_PointCoordCtr1.begin(), it_CoordPt1_end); - //Calcul de la surface définie par ce contour + Somme des differentes surfaces déjà calculés + //Calcul de la surface définie par ce contour + Somme des differentes surfaces déjà calculés db_TotalSurf += ComputeSurfaceFromAContour(vc_PointCoordCtr1); }// for (list>::iterator it_llCtr = ((*it_lEnt)->st_PointsDesContours).begin(); it_llCtr != ((*it_lEnt)->st_PointsDesContours).end(); it_llCtr++) }// for (list::iterator it_lEnt = (st_IfcEntCS->st_Contains).begin(); it_lEnt != (st_IfcEntCS->st_Contains).end(); it_lEnt++) Map_String_String map_messages; map_messages["ComputedArea"] = to_string(db_TotalSurf); if (_CurrentIfcTree) _CurrentIfcTree->FillQuantitiesAttributeOf_STRUCT_IFCENTITY(st_IfcEntCS, map_messages); else - res = 4003;//Format erreur: XXXYYY XXX=numero identifiant la routine , YYY=numéro de l'erreur dans cette routine + res = 4003;//Format erreur: XXXYYY XXX=numero identifiant la routine , YYY=numéro de l'erreur dans cette routine return res; } -//Calcul d'une surface plane à partir de ses contours +//Calcul d'une surface plane à partir de ses contours double ifc_TreePostTreatment::ComputeSurfaceFromAContour(vector &vc_PointCoordCtr) { //int res = 0; double db_Surf = 0.0; vector::iterator it_Coord1Pt1;/*P1_x*/ for (it_Coord1Pt1 = vc_PointCoordCtr.begin(); it_Coord1Pt1 != ------(vc_PointCoordCtr.end()); ++++++it_Coord1Pt1) { vector::iterator it_Coord2Pt1 = it_Coord1Pt1;/*P1_x*/ ++it_Coord2Pt1;/*P1_y*/ vector::iterator it_Coord1Pt2 = it_Coord2Pt1;/*P1_y*/ ++it_Coord1Pt2;/*P1_z*/ ++it_Coord1Pt2;/*P2_x*/ vector::iterator it_Coord2Pt2 = it_Coord1Pt2;/*P2_x*/ ++it_Coord2Pt2;/*P2_y*/ db_Surf += (*(*it_Coord1Pt1)*(*(*it_Coord2Pt2)) - *(*it_Coord2Pt1)*(*(*it_Coord1Pt2))) / 2; }// for (it_Coord1Pt1 = vc_PointCoordCtr.begin(); it_Coord1Pt1 != vc_PointCoordCtr.end(); ++(++(++it_Coord1Pt1))) return db_Surf; } -//Retrait des IfcConnectionSurfaceGeometry de surfaces inférieures à dbl_Minisurf +//Retrait des IfcConnectionSurfaceGeometry de surfaces inférieures à dbl_Minisurf int ifc_TreePostTreatment::RemoveQuasiNullIfcConnectionSurfaceGeometrySurface(double dbl_Minisurf, string *&str_LogFile) { int res = 0; std::map::iterator it_Elem; for (it_Elem = _map_BasifTree.begin(); it_Elem != _map_BasifTree.end(); it_Elem++) { if (it_Elem->second == "IfcConnectionSurfaceGeometry") res = RemoveOneQuasiNullIfcConnectionSurfaceGeometrySurface(it_Elem->first,dbl_Minisurf, str_LogFile); if (res) return res; }// for (it_Elem = _map_BasifTree.begin(); it_Elem != _map_BasifTree.end(); it_Elem++) return res; } void ifc_TreePostTreatment::RecordLog(int &int_Step, string &str_LogFile, string &str_Header, STRUCT_IFCENTITY *&st_IfcEnt) { switch (int_Step) { case 0: str_LogFile = str_LogFile /*+ "\n"*/ + str_Header + "\n"; str_LogFile = str_LogFile + "\t" + st_IfcEnt->ch_Id + "\n"; break; case 1: str_LogFile = str_LogFile /*+ "\n" */ + str_Header + "\n"; str_LogFile = str_LogFile + "\t" + st_IfcEnt->ch_Id + " (Surf = " + st_IfcEnt->map_DefValues->at("ComputedArea") + ")\n"; break; case 2: str_LogFile = str_LogFile /*+ "\n" */ + str_Header + "\n"; break; default: return; }// switch (int_Step) return; } int ifc_TreePostTreatment::RemoveOneQuasiNullIfcConnectionSurfaceGeometrySurface(STRUCT_IFCENTITY *st_IfcEntCS, double dbl_Minisurf, string *&str_LogFile) { int res = 0; double dbl_Surf = abs(std::stod(st_IfcEntCS->map_DefValues->at("ComputedArea"))); if (dbl_Surf même principe que pour le fichier bimxbem) + //Consigner l'effacement de l'IfcConnectionSurfaceGeometry dans un fichier "log" (ou mettre en mémoire => même principe que pour le fichier bimxbem) int int_Step = 1; string str_Header = "Remove Quasi Null Surface < "+ std::to_string(dbl_Minisurf)+ ":"; RecordLog(int_Step, *str_LogFile, str_Header, st_IfcEntCS); // - // Nettoyage des listes référencant l'objet que l'on est en train de détruire - // Pour les liens non binaires (ternaires ou plus) la structure en cours d'effacement (st_IfcTree) est référencée dans les Contains de plusieurs pères - // Afin déviter un crash mémoire par la désallocation d'une structure déjà détruite, il faut déréférencer la structure - // en cours d'effacement des listes de BelongsTo des autres pères (que celui en cours = st_IfcCurrentFather) - // Exemple: IfcConnectionSurfaceGeometry est référencé à la fois dans le st_Contains de IfSpace et des BuildingElements (IfcWall,...) + // Nettoyage des listes référencant l'objet que l'on est en train de détruire + // Pour les liens non binaires (ternaires ou plus) la structure en cours d'effacement (st_IfcTree) est référencée dans les Contains de plusieurs pères + // Afin déviter un crash mémoire par la désallocation d'une structure déjà détruite, il faut déréférencer la structure + // en cours d'effacement des listes de BelongsTo des autres pères (que celui en cours = st_IfcCurrentFather) + // Exemple: IfcConnectionSurfaceGeometry est référencé à la fois dans le st_Contains de IfSpace et des BuildingElements (IfcWall,...) _CurrentIfcTree->delete_STRUCT_IFCENTITY(st_IfcEntCS); st_IfcEntCS = nullptr; } return res; } -//Creation des TIFCSurfaces par concatenation des IfcConnectionSurfaceGeometry en vis-à-vis +//Creation des TIFCSurfaces par concatenation des IfcConnectionSurfaceGeometry en vis-à-vis int ifc_TreePostTreatment::CreateTIFCSurfaces() { int res = 0; std::map::iterator it_Elem; for (it_Elem = _map_BasifTree.begin(); it_Elem != _map_BasifTree.end(); it_Elem++) { if (it_Elem->second == "IfcConnectionSurfaceGeometry") res= CreateTIFCSurface(it_Elem->first); if (res) return res; }// for (it_Elem = _map_BasifTree.begin(); it_Elem != _map_BasifTree.end(); it_Elem++) return res; } -//Creation d'une TIFCSurface par concatenation des 2 IfcConnectionSurfaceGeometry en vis-à-vis +//Creation d'une TIFCSurface par concatenation des 2 IfcConnectionSurfaceGeometry en vis-à-vis int ifc_TreePostTreatment::CreateTIFCSurface(STRUCT_IFCENTITY *st_IfcEntCS) { int res = 0; - //On vérifie que cette IfcConnectionSurfaceGeometry (st_IfcEntCS) n'a pas déjà sa TIFCSurface - //car à sa création la même TIFCSurface est associée à 2 IfcConnectionSurfaceGeometry + //On vérifie que cette IfcConnectionSurfaceGeometry (st_IfcEntCS) n'a pas déjà sa TIFCSurface + //car à sa création la même TIFCSurface est associée à 2 IfcConnectionSurfaceGeometry if (st_IfcEntCS && st_IfcEntCS->st_TIFCSurface==nullptr) { if (_CurrentIfcTree) res = _CurrentIfcTree->BuildTIFCSurfaceTreeFrom_STRUCT_IFCENTITY(st_IfcEntCS); else - res = 4005;//Format erreur: XXXYYY XXX=numero identifiant la routine , YYY=numéro de l'erreur dans cette routine + res = 4005;//Format erreur: XXXYYY XXX=numero identifiant la routine , YYY=numéro de l'erreur dans cette routine } //else - // res = 4004;//Format erreur: XXXYYY XXX=numero identifiant la routine , YYY=numéro de l'erreur dans cette routine + // res = 4004;//Format erreur: XXXYYY XXX=numero identifiant la routine , YYY=numéro de l'erreur dans cette routine return res; } //Calcul des isobarycentres des IfcConnectionSurfaceGeometry int ifc_TreePostTreatment::CentroidsComputation() { int res = 0; std::map::iterator it_Elem; for (it_Elem = _map_BasifTree.begin(); it_Elem != _map_BasifTree.end(); it_Elem++) { if (it_Elem->second == "IfcConnectionSurfaceGeometry") res= CentroidComputation(it_Elem->first); if (res) return res; }// for (it_Elem = _map_BasifTree.begin(); it_Elem != _map_BasifTree.end(); it_Elem++) return res; } //Calcul de l'isobarycentre d'une IfcConnectionSurfaceGeometry int ifc_TreePostTreatment::CentroidComputation(STRUCT_IFCENTITY *st_IfcEntCS) { int res = 0; //Init isobarycentre double db_IsoBar[3] = { 0.,0.,0. }; //Compteur "i" qui, au final, sera egal au nombre de points des contours fois 3(=nbre de composantes=x,y,z) int i = 0; list ::iterator it_Elem; for (it_Elem = (st_IfcEntCS->st_Contains).begin(); it_Elem != (st_IfcEntCS->st_Contains).end(); it_Elem++) { //Boucle sur les coord pour calculer l'isobarycentre list > ::iterator it_llPt; for (it_llPt = ((*it_Elem)->st_PointsDesContours).begin(); it_llPt != ((*it_Elem)->st_PointsDesContours).end(); it_llPt++) { - //lire la liste des points (le dernier point est toujours différent du 1er car a été enlevé par routine RemoveLastPointOfLoopContours) + //lire la liste des points (le dernier point est toujours différent du 1er car a été enlevé par routine RemoveLastPointOfLoopContours) list ::iterator it_lPt; for (it_lPt = (*it_llPt).begin(); it_lPt != (*it_llPt).end(); it_lPt++) { db_IsoBar[i % 3] += *(*it_lPt); i++; }// for (it_lPt = (*it_llPt).begin(); it_lPt != (*it_llPt).end(); it_lPt++) }// for (it_llPt = ((*it_Elem)->st_PointsDesContours).begin(); it_llPt != ((*it_Elem)->st_PointsDesContours).end(); it_llPt++) }// for (it_Elem = (st_IfcEnt->st_Contains).begin(); it_Elem != (st_IfcEnt->st_Contains).end(); it_Elem++) //Finalisation du calcul de l'isobarycentre for(int j=0;j<3;j++) db_IsoBar[j] /= (i / 3); - //Mémo dans la structure + //Mémo dans la structure if (_CurrentIfcTree) _CurrentIfcTree->FillCentroidOf_STRUCT_IFCENTITY(st_IfcEntCS, db_IsoBar); else - res = 4006;//Format erreur: XXXYYY XXX=numero identifiant la routine , YYY=numéro de l'erreur dans cette routine + res = 4006;//Format erreur: XXXYYY XXX=numero identifiant la routine , YYY=numéro de l'erreur dans cette routine return res; } -//Recherche des IfcConnectionSurfaceGeometry pouvant avoir des côtés à étendre (i.e. qui ont au moins 1 SideBySide) +//Recherche des IfcConnectionSurfaceGeometry pouvant avoir des côtés à étendre (i.e. qui ont au moins 1 SideBySide) int ifc_TreePostTreatment::RelimitSideBySideSurfaces(string *&str_LogFile) { int res = 0; - //Traitement des IfcConnectionSurfaceGeometry pouvant avoir des côtés à étendre + //Traitement des IfcConnectionSurfaceGeometry pouvant avoir des côtés à étendre std::map::iterator it_Elem; for (it_Elem = _map_BasifTree.begin(); it_Elem != _map_BasifTree.end(); it_Elem++) { //Recherche des IfcConnectionSurfaceGeometry qui ont au moins 1 SideBySide if (it_Elem->second == "IfcConnectionSurfaceGeometry" && it_Elem->first->mp_SideBySide.size() != 0) res = RelimitSideBySideSurfacesOfOneIfcConnectionSurfaceGeometry(it_Elem->first, str_LogFile); if (res) return res; }// for (it_Elem = _map_BasifTree.begin(); it_Elem != _map_BasifTree.end(); it_Elem++) return res; } -//Boucles sur les IfcConnectionSurfaceGeometry côte-àcôte avec l'IfcConnectionSurfaceGeometry en cours (pour extension du IfcConnectionSurfaceGeometry si nécessaire) +//Boucles sur les IfcConnectionSurfaceGeometry côte-àcôte avec l'IfcConnectionSurfaceGeometry en cours (pour extension du IfcConnectionSurfaceGeometry si nécessaire) int ifc_TreePostTreatment::RelimitSideBySideSurfacesOfOneIfcConnectionSurfaceGeometry(STRUCT_IFCENTITY *st_IfcEntCS, string *&str_LogFile) { int res = 0; - //Retrouver les IfcConnectionSurfaceGeometry qui sont côte-à-côte avec l'IfcConnectionSurfaceGeometry en cours + //Retrouver les IfcConnectionSurfaceGeometry qui sont côte-à-côte avec l'IfcConnectionSurfaceGeometry en cours set>>::iterator it_SideBySideIfcEntCS; //set>, Comparator>::iterator it_SideBySideIfcEntCS; for (it_SideBySideIfcEntCS = (st_IfcEntCS->mp_SideBySide).begin(); it_SideBySideIfcEntCS != (st_IfcEntCS->mp_SideBySide).end(); it_SideBySideIfcEntCS++) { - //retrouver les paires de points les plus proches (chaque point appartenant à l'un ou l'autre des IfcConnectionSurfaceGeometry côte-à-côtes) + //retrouver les paires de points les plus proches (chaque point appartenant à l'un ou l'autre des IfcConnectionSurfaceGeometry côte-à-côtes) if (!(*it_SideBySideIfcEntCS).second.second) { RelimitOneSideBySideSurfaceOfOneIfcConnectionSurfaceGeometry(st_IfcEntCS, (*it_SideBySideIfcEntCS).first, str_LogFile); //(*it_SideBySideIfcEntCS).second.second = true; //(*it_SideBySideIfcEntCS).first->mp_SideBySide[st_IfcEntCS].second = true; }// if (!(*it_SideBySideIfcEntCS).second) }// for (it_Elem2 = (it_Elem1->first->st_Contains).begin(); it_Elem2 != (it_Elem1->first->st_Contains).end(); it_Elem2++) return res; } -//Extension si besoin de l'IfcConnectionSurfaceGeometry en cours et d'un des IfcConnectionSurfaceGeometry côte-à-côtes +//Extension si besoin de l'IfcConnectionSurfaceGeometry en cours et d'un des IfcConnectionSurfaceGeometry côte-à-côtes //A priori on a 3 cas: -// les IfcConnectionSurfaceGeometry en cours et côte-à-côte sont "coller" (Dist des pairs de pts les + proches = 0) => ne rien faire -// les IfcConnectionSurfaceGeometry en cours et côte-à-côte sont "disjoints" avec Dist des pairs de pts les + proches >> épaisseurs murs => ne rien faire -// les IfcConnectionSurfaceGeometry en cours et côte-à-côte sont "disjoints" avec Dist des pairs de pts les + proches ~ épaisseurs murs => jonction par milieu de la dist (cf. schéma): +// les IfcConnectionSurfaceGeometry en cours et côte-à-côte sont "coller" (Dist des pairs de pts les + proches = 0) => ne rien faire +// les IfcConnectionSurfaceGeometry en cours et côte-à-côte sont "disjoints" avec Dist des pairs de pts les + proches >> épaisseurs murs => ne rien faire +// les IfcConnectionSurfaceGeometry en cours et côte-à-côte sont "disjoints" avec Dist des pairs de pts les + proches ~ épaisseurs murs => jonction par milieu de la dist (cf. schéma): // -// 2 ifcConn séparées Raccord des 2 ifcconn +// 2 ifcConn séparées Raccord des 2 ifcconn // par epaisseur mur par leur milieu // --- --- -------- // | | => | // | | | // --- --- -------- int ifc_TreePostTreatment::RelimitOneSideBySideSurfaceOfOneIfcConnectionSurfaceGeometry(STRUCT_IFCENTITY *&st_IfcEntCS1, STRUCT_IFCENTITY *st_IfcEntCS2, string *&str_LogFile) { int res = 0; - //ATTENTION: ne pas lire les pts du ctr1 dans la routine précédente car les coordonnées sont suceptibles d'être modifiées => il faut les relire à chaque passage! - //Recup de toutes les coordonnées de tous les points du 1er contour (IfcConnectionSurfaceGeometry en cours) + //ATTENTION: ne pas lire les pts du ctr1 dans la routine précédente car les coordonnées sont suceptibles d'être modifiées => il faut les relire à chaque passage! + //Recup de toutes les coordonnées de tous les points du 1er contour (IfcConnectionSurfaceGeometry en cours) vector vc_PointCoordCtr1; for (list::iterator it_lEnt = (st_IfcEntCS1->st_Contains).begin(); it_lEnt != (st_IfcEntCS1->st_Contains).end(); it_lEnt++) for (list>::iterator it_llCtr = ((*it_lEnt)->st_PointsDesContours).begin(); it_llCtr != ((*it_lEnt)->st_PointsDesContours).end(); it_llCtr++) vc_PointCoordCtr1.insert(vc_PointCoordCtr1.end(), (*it_llCtr).begin(), (*it_llCtr).end()); - //Recup de toutes les coordonnées de tous les points du 2ème contour (IfcConnectionSurfaceGeometry côte-à-côte) + //Recup de toutes les coordonnées de tous les points du 2ème contour (IfcConnectionSurfaceGeometry côte-à-côte) vector vc_PointCoordCtr2; for (list::iterator it_lEnt = (st_IfcEntCS2->st_Contains).begin(); it_lEnt != (st_IfcEntCS2->st_Contains).end(); it_lEnt++) for (list>::iterator it_llCtr = ((*it_lEnt)->st_PointsDesContours).begin(); it_llCtr != ((*it_lEnt)->st_PointsDesContours).end(); it_llCtr++) vc_PointCoordCtr2.insert(vc_PointCoordCtr2.end(), (*it_llCtr).begin(), (*it_llCtr).end()); // - //Calcul des distances entre chaque paire de points appartenant à chacun des contours des IfcConnectionSurfaceGeometry + //Calcul des distances entre chaque paire de points appartenant à chacun des contours des IfcConnectionSurfaceGeometry // li_IndPtCtr1_IndPtCtr2_Dist[iterateur debut Pt_J du contour1, iterateur debut Pt_J du contour2]=distance - // Utilisation d'une liste pour profiter du tri optimisée "list::sort()" + // Utilisation d'une liste pour profiter du tri optimisée "list::sort()" list< pair< pair::iterator, vector::iterator>, double>> li_IndPtCtr1_IndPtCtr2_Dist; - //Boucle sur tous les points de chacun des contours des IfcConnectionSurfaceGeometry en cours et côte-à-côte + //Boucle sur tous les points de chacun des contours des IfcConnectionSurfaceGeometry en cours et côte-à-côte vector::iterator it_CoordCtr1; vector::iterator it_CoordCtr2; for (it_CoordCtr1 = vc_PointCoordCtr1.begin(); it_CoordCtr1 != vc_PointCoordCtr1.end(); ++(++(++it_CoordCtr1))) { vector::iterator it_CoordCtr1_end = it_CoordCtr1; ++++++it_CoordCtr1_end; vector vc_Point1(it_CoordCtr1, it_CoordCtr1_end); for (it_CoordCtr2 = vc_PointCoordCtr2.begin(); it_CoordCtr2 != vc_PointCoordCtr2.end(); ++(++(++it_CoordCtr2))) { vector::iterator it_CoordCtr2_end = it_CoordCtr2; ++++++it_CoordCtr2_end; vector vc_Point2(it_CoordCtr2, it_CoordCtr2_end); //Calculer distance entre les 2 points des 2 IfcConnectionSurfaceGeometry double db_dist=ComputePtPtDistance(vc_Point1, vc_Point2); //Memo de la distance entre les 2 points des 2 IfcConnectionSurfaceGeometry vc_Point1 et vc_Point2 li_IndPtCtr1_IndPtCtr2_Dist.push_back(std::make_pair(std::make_pair(it_CoordCtr1, it_CoordCtr2), db_dist)); }// for (vector::iterator it_CoordCtr2 = vc_PointCoordCtr2.begin(); it_CoordCtr2 != vc_PointCoordCtr2.end(); it_CoordCtr2++) }// for (vector::iterator it_CoordCtr1 = vc_PointCoordCtr1.begin(); it_CoordCtr1 != vc_PointCoordCtr1.end(); it_CoordCtr1++) - //Trier les paires par proximité pour trouver les points à rejoindre + //Trier les paires par proximité pour trouver les points à rejoindre li_IndPtCtr1_IndPtCtr2_Dist.sort([](auto lhs, auto rhs) { return lhs.second < rhs.second; }); //QUE FAIRE SI des paires de points sont quasi l'un sur l'autre => merger les 2 IfcConnectionSurfaceGeometry?? // ou verifier que l'une a une surface quasi nulle - // => la retirer? => Traitement à faire dès le début après RemoveLastPointOfLoopContours() mais attention au retrait à faire dans IfcSpace et elmt cstruction (Wall,...) - // En tout cas si la 1ere paire de point est confondue on peut supposer que les 2 surfaces sont déjà connectées => pas de raccord à faire + // => la retirer? => Traitement à faire dès le début après RemoveLastPointOfLoopContours() mais attention au retrait à faire dans IfcSpace et elmt cstruction (Wall,...) + // En tout cas si la 1ere paire de point est confondue on peut supposer que les 2 surfaces sont déjà connectées => pas de raccord à faire list< pair< pair::iterator, vector::iterator>, double>>::iterator it_IndPtCtr1_IndPtCtr2_Dist = li_IndPtCtr1_IndPtCtr2_Dist.begin(); - //Si les contours ne sont pas "coller" (Dist > db_eps) et pas "disjoints" avec Dist >> épaisseurs murs max - // => on fait la jonction par le milieu des pairs de points distants les plus proches (jusqu'à distance arbitrairement au max 20% de plus que la 1ère distance la plus proche) + //Si les contours ne sont pas "coller" (Dist > db_eps) et pas "disjoints" avec Dist >> épaisseurs murs max + // => on fait la jonction par le milieu des pairs de points distants les plus proches (jusqu'à distance arbitrairement au max 20% de plus que la 1ère distance la plus proche) // - //Si Dist mini > épaisseurs murs max => rien à raccorder (il y a certainement une surface entre l'Ifcconn en cours et celle côte-à-côte) => voir un autre côte-à-côte + //Si Dist mini > épaisseurs murs max => rien à raccorder (il y a certainement une surface entre l'Ifcconn en cours et celle côte-à-côte) => voir un autre côte-à-côte if ((*it_IndPtCtr1_IndPtCtr2_Dist).second < db_ep_mur_max) { // - //Si Dist mini < db_eps => rien à raccorder (les 2 surfaces sont connectées) => voir un autre côte-à-côte + //Si Dist mini < db_eps => rien à raccorder (les 2 surfaces sont connectées) => voir un autre côte-à-côte if ((*it_IndPtCtr1_IndPtCtr2_Dist).second > db_eps) { //Memo de la distance de reference double db_Distref = (*it_IndPtCtr1_IndPtCtr2_Dist).second; - //ATTENTION: il faut aussi voir si au moins les 2 premières paires de points ont à peu près la même distance: - // sinon c'est un coin de surf qui est proche d'un autre coin d'une autre surf (pas côte-àcôte sur tout un côté) => ne pas raccorder dans ce cas + //ATTENTION: il faut aussi voir si au moins les 2 premières paires de points ont à peu près la même distance: + // sinon c'est un coin de surf qui est proche d'un autre coin d'une autre surf (pas côte-àcôte sur tout un côté) => ne pas raccorder dans ce cas list< pair< pair::iterator, vector::iterator>, double>>::iterator it_IndPtCtr1_IndPtCtr2_Dist_Next = it_IndPtCtr1_IndPtCtr2_Dist; it_IndPtCtr1_IndPtCtr2_Dist_Next++; if ((*it_IndPtCtr1_IndPtCtr2_Dist_Next).second < 1.2*db_Distref) { //ATTENTION: il faut aussi voir si les 2 paires de points les plus proches ont bien des points distincts entre paires: - // pour (P1,P2) et (P3,P4) il faut P1 différent de P3 et P2 different de P4 - // sinon comme précédemment c'est un coin de surf qui est proche d'un autre coin d'une autre surf (pas côte-àcôte sur tout un côté) et - // qui en plus est une minuscule surface (quasi-ligne) d'où un 2nd point proche du même coin => ne pas raccorder dans ce cas + // pour (P1,P2) et (P3,P4) il faut P1 différent de P3 et P2 different de P4 + // sinon comme précédemment c'est un coin de surf qui est proche d'un autre coin d'une autre surf (pas côte-àcôte sur tout un côté) et + // qui en plus est une minuscule surface (quasi-ligne) d'où un 2nd point proche du même coin => ne pas raccorder dans ce cas if ((*it_IndPtCtr1_IndPtCtr2_Dist).first.first != (*it_IndPtCtr1_IndPtCtr2_Dist_Next).first.first && (*it_IndPtCtr1_IndPtCtr2_Dist).first.second != (*it_IndPtCtr1_IndPtCtr2_Dist_Next).first.second) { // - //ATTENTION: Lorsqu'on a 2 minuscules surfaces (quasi-ligne) en côte-à-côte, on peut avoir en plus des 2 paires les plus proches - // 2 autres paires qui sont en fait la croisée des points précédents => il ne faut pas modifier les points de ces paires! + //ATTENTION: Lorsqu'on a 2 minuscules surfaces (quasi-ligne) en côte-à-côte, on peut avoir en plus des 2 paires les plus proches + // 2 autres paires qui sont en fait la croisée des points précédents => il ne faut pas modifier les points de ces paires! // ------ ------ ------ ------ // | | et X // ------ ------ ------ ------ - // Si les points des paires suivants les 2 premières reprennent les points précédents => stopper le raccord - // test à faire paire après paire (et non par doublons de paires) car par exemple il peut y avoir 3 points côte-à-côtes qui se raccordent) - // => on compte le nombre de pairs modifiables (ne reprenant pas un des points des paires précédentes) + // Si les points des paires suivants les 2 premières reprennent les points précédents => stopper le raccord + // test à faire paire après paire (et non par doublons de paires) car par exemple il peut y avoir 3 points côte-à-côtes qui se raccordent) + // => on compte le nombre de pairs modifiables (ne reprenant pas un des points des paires précédentes) int i_MaxNbModifiablePt = 1; // - //REMARQUE: Ce test pourrait peut-être servir aussi au test prcdt équivalent mais en terme - //de cas concret le 1er test correspond à un cas identifié un peu différent de celui-ci. - //ici côté en côte-à-côte mais hauteur minuscule, dans cas prcdt ce sont les coins qui sont proches - //De plus le test ici verifie "a posteriori" les raccords, alors que le test prcdt verifie "a priori" pour éviter de commencer un raccord + //REMARQUE: Ce test pourrait peut-être servir aussi au test prcdt équivalent mais en terme + //de cas concret le 1er test correspond à un cas identifié un peu différent de celui-ci. + //ici côté en côte-à-côte mais hauteur minuscule, dans cas prcdt ce sont les coins qui sont proches + //De plus le test ici verifie "a posteriori" les raccords, alors que le test prcdt verifie "a priori" pour éviter de commencer un raccord bool bo_IsModifiable = true; list< pair< pair::iterator, vector::iterator>, double>>::iterator it_IndPtCtr1_IndPtCtr2_Dist_Cur_Tst = it_IndPtCtr1_IndPtCtr2_Dist; it_IndPtCtr1_IndPtCtr2_Dist_Cur_Tst++; for (it_IndPtCtr1_IndPtCtr2_Dist_Cur_Tst; it_IndPtCtr1_IndPtCtr2_Dist_Cur_Tst != li_IndPtCtr1_IndPtCtr2_Dist.end(); ++it_IndPtCtr1_IndPtCtr2_Dist_Cur_Tst) { list< pair< pair::iterator, vector::iterator>, double>>::iterator it_IndPtCtr1_IndPtCtr2_Dist_Prev_Tst = it_IndPtCtr1_IndPtCtr2_Dist; for (it_IndPtCtr1_IndPtCtr2_Dist_Prev_Tst; it_IndPtCtr1_IndPtCtr2_Dist_Prev_Tst != it_IndPtCtr1_IndPtCtr2_Dist_Cur_Tst; ++it_IndPtCtr1_IndPtCtr2_Dist_Prev_Tst) { if ((*it_IndPtCtr1_IndPtCtr2_Dist_Cur_Tst).first.first == (*it_IndPtCtr1_IndPtCtr2_Dist_Prev_Tst).first.first || (*it_IndPtCtr1_IndPtCtr2_Dist_Cur_Tst).first.second == (*it_IndPtCtr1_IndPtCtr2_Dist_Prev_Tst).first.second) { bo_IsModifiable = false; break; }// if ((*it_IndPtCtr1_IndPtCtr2_Dist_Cur_Tst).first.first == (*it_IndPtCtr1_IndPtCtr2_Dist_Prev_Tst).first.first // || (*it_IndPtCtr1_IndPtCtr2_Dist_Cur_Tst).first.second == (*it_IndPtCtr1_IndPtCtr2_Dist_Prev_Tst).first.second) }//for (it_IndPtCtr1_IndPtCtr2_Dist_Prev_Tst; it_IndPtCtr1_IndPtCtr2_Dist_Prev_Tst != it_IndPtCtr1_IndPtCtr2_Dist_Cur_Tst; ++it_IndPtCtr1_IndPtCtr2_Dist_Prev_Tst) if (bo_IsModifiable) i_MaxNbModifiablePt++; else break; }// for (int icpt = 1; icpt < i_NbModifiedPt; i_NbModifiedPt++) - //Variable pour compter le nombre de paires de points modifiées + //Variable pour compter le nombre de paires de points modifiées int i_NbModifiedPt = 0; string str_Header = "Join 2 Surfaces <" + std::string(st_IfcEntCS1->ch_Id) + ">--<" + st_IfcEntCS2->ch_Id + "> :"; for (it_IndPtCtr1_IndPtCtr2_Dist; it_IndPtCtr1_IndPtCtr2_Dist!= li_IndPtCtr1_IndPtCtr2_Dist.end();++it_IndPtCtr1_IndPtCtr2_Dist) { // - // 2 ifcConn séparées Raccord des 2 ifcconn + // 2 ifcConn séparées Raccord des 2 ifcconn // par epaisseur mur par leur milieu // --- --- -------- // | | => | // | | | // --- --- -------- // - //Remplacement des points les plus proches appartenant à un même côté (par leur point milieu) - // HP: côté à peu près parallèle => les points d'un même côté sont les 1ères paires de même ordre de distance (arbitrairement au max 20% de plus que la 1ère distance) + //Remplacement des points les plus proches appartenant à un même côté (par leur point milieu) + // HP: côté à peu près parallèle => les points d'un même côté sont les 1ères paires de même ordre de distance (arbitrairement au max 20% de plus que la 1ère distance) if ((*it_IndPtCtr1_IndPtCtr2_Dist).second < 1.2*db_Distref) { // - // On incrémente le nombre de paires de points modifiées + // On incrémente le nombre de paires de points modifiées i_NbModifiedPt++; - //On applique la relimitation sur les pts milieux que sur les pairs modifiables (ne reprenant pas un des points des paires précédentes) + //On applique la relimitation sur les pts milieux que sur les pairs modifiables (ne reprenant pas un des points des paires précédentes) if (i_NbModifiedPt<=i_MaxNbModifiablePt) { - //On prend un itérateur intermédiaire pour ne pas interférer avec celui (it_IndPtCtr1_IndPtCtr2_Dist) qui est utilisé pour les tests + //On prend un itérateur intermédiaire pour ne pas interférer avec celui (it_IndPtCtr1_IndPtCtr2_Dist) qui est utilisé pour les tests list< pair< pair::iterator, vector::iterator>, double>>::iterator it_IndPtCtr1_IndPtCtr2_Dist_Cur = it_IndPtCtr1_IndPtCtr2_Dist; - //Modification des 2 surfaces => remplacer les paires de points les plus proches par un même point milieu - //HP: les côtés à modifier sont des droites parallèles => remplacement des premières paires repérées par une distance similaire + //Modification des 2 surfaces => remplacer les paires de points les plus proches par un même point milieu + //HP: les côtés à modifier sont des droites parallèles => remplacement des premières paires repérées par une distance similaire it_CoordCtr1 = (*it_IndPtCtr1_IndPtCtr2_Dist_Cur).first.first; it_CoordCtr2 = (*it_IndPtCtr1_IndPtCtr2_Dist_Cur).first.second; double db_NewCoord_X = ((*it_CoordCtr1)[0] + (*it_CoordCtr2)[0]) / 2.0; ++it_CoordCtr1; ++it_CoordCtr2; double db_NewCoord_Y = ((*it_CoordCtr1)[0] + (*it_CoordCtr2)[0]) / 2.0; ++it_CoordCtr1; ++it_CoordCtr2; double db_NewCoord_Z = ((*it_CoordCtr1)[0] + (*it_CoordCtr2)[0]) / 2.0; *(*((*it_IndPtCtr1_IndPtCtr2_Dist_Cur).first.first)) = db_NewCoord_X; *(*((*it_IndPtCtr1_IndPtCtr2_Dist_Cur).first.second)) = db_NewCoord_X; *(*(++(*it_IndPtCtr1_IndPtCtr2_Dist_Cur).first.first)) = db_NewCoord_Y; *(*(++(*it_IndPtCtr1_IndPtCtr2_Dist_Cur).first.second)) = db_NewCoord_Y; *(*(++(*it_IndPtCtr1_IndPtCtr2_Dist_Cur).first.first)) = db_NewCoord_Z; *(*(++(*it_IndPtCtr1_IndPtCtr2_Dist_Cur).first.second)) = db_NewCoord_Z; str_Header += "\n\tDist(P1,P2)=" + std::to_string((*it_IndPtCtr1_IndPtCtr2_Dist).second) + ";"; }// if (bo_DoContinue) else { // - //Consigner le raccord de l'IfcConnectionSurfaceGeometry dans un fichier "log" (ou mettre en mémoire => même principe que pour le fichier bimxbem) + //Consigner le raccord de l'IfcConnectionSurfaceGeometry dans un fichier "log" (ou mettre en mémoire => même principe que pour le fichier bimxbem) int int_Step = 2; RecordLog(int_Step, *str_LogFile, str_Header, st_IfcEntCS1); break; }// else if (bo_DoContinue) }// if ((*it_IndPtCtr1_IndPtCtr2_Dist).second < 1.2*db_Distref) else { // - //Consigner le raccord de l'IfcConnectionSurfaceGeometry dans un fichier "log" (ou mettre en mémoire => même principe que pour le fichier bimxbem) + //Consigner le raccord de l'IfcConnectionSurfaceGeometry dans un fichier "log" (ou mettre en mémoire => même principe que pour le fichier bimxbem) int int_Step = 2; RecordLog(int_Step, *str_LogFile, str_Header, st_IfcEntCS1); break; }// else if ((*it_IndPtCtr1_IndPtCtr2_Dist).second < 1.2*db_Distref) }// for (it_IndPtCtr1_IndPtCtr2_Dist; it_IndPtCtr1_IndPtCtr2_Dist!= li_IndPtCtr1_IndPtCtr2_Dist.end();++it_IndPtCtr1_IndPtCtr2_Dist) }//if ((*it_IndPtCtr1_IndPtCtr2_Dist).first.first != (*it_IndPtCtr1_IndPtCtr2_Dist_Next).first.first // && (*it_IndPtCtr1_IndPtCtr2_Dist).first.second != (*it_IndPtCtr1_IndPtCtr2_Dist_Next).first.second) }// if ((*it_IndPtCtr1_IndPtCtr2_Dist_Next).second < 1.2*db_Distref) }// if ((*it_IndPtCtr1_IndPtCtr2_Dist).second > db_eps) }// if ((*it_IndPtCtr1_IndPtCtr2_Dist).second < db_ep_mur_max) return res; } int ifc_TreePostTreatment::TransformEntitiesToWorlCoordFrame() { int res = 0; std::map::iterator it_Elem; for (it_Elem = _map_BasifTree.begin(); it_Elem != _map_BasifTree.end(); it_Elem++) { if (it_Elem->first->st_PointsDesContours.size() != 0) { - //Décompte du nombre de coord de points + //Décompte du nombre de coord de points size_t i_Size = 0; list > ::iterator it_llPt; for (it_llPt = (it_Elem->first->st_PointsDesContours).begin(); it_llPt != (it_Elem->first->st_PointsDesContours).end(); it_llPt++) i_Size += it_llPt->size(); - //Allocation mémoire pour recueillir les coordonnées des points à modifier + //Allocation mémoire pour recueillir les coordonnées des points à modifier double * db_CoordPts = new double[i_Size]; //Boucle sur les listes de coord int i = 0; for (it_llPt = (it_Elem->first->st_PointsDesContours).begin(); it_llPt != (it_Elem->first->st_PointsDesContours).end(); it_llPt++) { //lire la liste des points list ::iterator it_lPt; for (it_lPt = (*it_llPt).begin(); it_lPt != (*it_llPt).end(); it_lPt++) { db_CoordPts[i] = *(*it_lPt); i++; }// for (it_lPt = (*it_llPt).begin(); it_lPt != (*it_llPt).end(); it_lPt++) }// for (it_llPt = (it_Elem->first->st_PointsDesContours).begin(); it_llPt != (it_Elem->first->st_PointsDesContours).end(); it_llPt++) - //Changer les coordonnées pour les mettre P/R au referentiel projet + //Changer les coordonnées pour les mettre P/R au referentiel projet res = TransformEntityToWorlCoordFrame(it_Elem->first, db_CoordPts, i_Size); if (res) return res; - //Mémoriser dans la structure les points modifiés + //Mémoriser dans la structure les points modifiés //A FAIRE //new liste de liste... i = 0; for (it_llPt = (it_Elem->first->st_PointsDesContours).begin(); it_llPt != (it_Elem->first->st_PointsDesContours).end(); it_llPt++) { //new liste... //lire la liste des points list ::iterator it_lPt; for (it_lPt = (*it_llPt).begin(); it_lPt != (*it_llPt).end(); it_lPt++) { //liste...push_back(db_CoordPts[i]); *(*it_lPt) = db_CoordPts[i]; i++; }// for (it_lPt = (*it_llPt).begin(); it_lPt != (*it_llPt).end(); it_lPt++) //liste de liste...push_back(liste...); }// for (it_llPt = (it_Elem->first->st_PointsDesContours).begin(); it_llPt != (it_Elem->first->st_PointsDesContours).end(); it_llPt++) //it_Elem->first->st_PointsDesContoursRefAbs= liste de liste...; if (db_CoordPts) delete[] db_CoordPts; db_CoordPts = nullptr; }// if (it_Elem->first->st_PointsDesContours.size != 0) }// for (it_Elem = _map_BasifTree.begin(); it_Elem != _map_BasifTree.end(); it_Elem++) return res; } int ifc_TreePostTreatment::TransformEntityToWorlCoordFrame(STRUCT_IFCENTITY *st_IfcEnt, double *&db_CoordPts, size_t int_Size) { int res = 0; - //S'il existe db_RelativePlacement sur l'entité en cours on l'applique + //S'il existe db_RelativePlacement sur l'entité en cours on l'applique if (st_IfcEnt->db_RelativePlacement.size() != 0) { list ::iterator it_val = (st_IfcEnt->db_RelativePlacement).begin(); double U1[3]; U1[0] = *(*it_val); it_val++; U1[1] = *(*it_val); it_val++; U1[2] = *(*it_val); it_val++; double U2[3]; U2[0] = *(*it_val); it_val++; U2[1] = *(*it_val); it_val++; U2[2] = *(*it_val); it_val++; double U3[3]; U3[0] = *(*it_val); it_val++; U3[1] = *(*it_val); it_val++; U3[2] = *(*it_val); it_val++; double O[3]; O[0] = *(*it_val); it_val++; O[1] = *(*it_val); it_val++; O[2] = *(*it_val); it_val++; - //Coordonnées dans le nouveau repère + //Coordonnées dans le nouveau repère for (int iCoord = 0; iCoord < int_Size; iCoord += 3) { double db_NewCoordPts[3] = { 0, 0, 0 }; db_NewCoordPts[0] = O[0] + U1[0] * db_CoordPts[iCoord] + U2[0] * db_CoordPts[iCoord + 1] + U3[0] * db_CoordPts[iCoord + 2]; db_NewCoordPts[1] = O[1] + U1[1] * db_CoordPts[iCoord] + U2[1] * db_CoordPts[iCoord + 1] + U3[1] * db_CoordPts[iCoord + 2]; db_NewCoordPts[2] = O[2] + U1[2] * db_CoordPts[iCoord] + U2[2] * db_CoordPts[iCoord + 1] + U3[2] * db_CoordPts[iCoord + 2]; db_CoordPts[iCoord + 0] = db_NewCoordPts[0]; db_CoordPts[iCoord + 1] = db_NewCoordPts[1]; db_CoordPts[iCoord + 2] = db_NewCoordPts[2]; }// for (int iCoord = 0; iCoord < int_Size; iCoord += 3) }// if (st_IfcEnt->db_RelativePlacement.size != 0) - //Remonter les BelongsTo pour appliquer à chaque pas le db_RelativePlacement s'il existe - //IMPORTANT: S'il existe 2 BelongsTo (on se trouve au niveau du IfcConnectionSurfaceGeometry) prendre le ifcSpace et non l'élément de construction + //Remonter les BelongsTo pour appliquer à chaque pas le db_RelativePlacement s'il existe + //IMPORTANT: S'il existe 2 BelongsTo (on se trouve au niveau du IfcConnectionSurfaceGeometry) prendre le ifcSpace et non l'élément de construction if (st_IfcEnt->st_BelongsTo.size() == 1) { res = TransformEntityToWorlCoordFrame(*(st_IfcEnt->st_BelongsTo.begin()), db_CoordPts, int_Size); if (res) return res; }// if (st_IfcEnt->st_BelongsTo.size == 1) else if (st_IfcEnt->st_BelongsTo.size() == 2) { list ::iterator it_Elem = (st_IfcEnt->st_BelongsTo).begin(); if (string((*it_Elem)->ch_Type) == "IfcSpace") { res = TransformEntityToWorlCoordFrame((*it_Elem), db_CoordPts, int_Size); if (res) return res; }// if ((*it_Elem)->ch_Type = "IfcSpace") else { it_Elem++; if (string((*it_Elem)->ch_Type) == "IfcSpace") { res = TransformEntityToWorlCoordFrame((*it_Elem), db_CoordPts, int_Size); if (res) return res; }// if (string((*it_Elem)->ch_Type) == "IfcSpace") else - res = 4008;//Format erreur: XXXYYY XXX=numero identifiant la routine , YYY=numéro de l'erreur dans cette routine + res = 4008;//Format erreur: XXXYYY XXX=numero identifiant la routine , YYY=numéro de l'erreur dans cette routine }// else if ((*it_Elem)->ch_Type = "IfcSpace") }// if (st_IfcEnt->st_BelongsTo.size == 1) else if (st_IfcEnt->st_BelongsTo.size() > 2) - res = 4007;//Format erreur: XXXYYY XXX=numero identifiant la routine , YYY=numéro de l'erreur dans cette routine + res = 4007;//Format erreur: XXXYYY XXX=numero identifiant la routine , YYY=numéro de l'erreur dans cette routine return res; } -//Recherche des surfaces IfcConnectionSurfaceGeometry en vis-à-vis et côte-à-côte +//Recherche des surfaces IfcConnectionSurfaceGeometry en vis-à-vis et côte-à-côte int ifc_TreePostTreatment::FindFaceToFaceAndSideBySideSurfaces() { int res = 0; //Recherche de tous les elements de construction // => sont sous IfcSpace->st_Contains et ce qui n'est ni IfcConnectionSurfaceGeometry ni IfcProductDefinitionShape std::map map_BuildingElem_Type; std::map::iterator it_Elem1; for (it_Elem1 = _map_BasifTree.begin(); it_Elem1 != _map_BasifTree.end(); it_Elem1++) { if (it_Elem1->second == "IfcSpace") { list ::iterator it_Elem2; for (it_Elem2 = (it_Elem1->first->st_Contains).begin(); it_Elem2 != (it_Elem1->first->st_Contains).end(); it_Elem2++) { - //HP: Le contains des spaces est composé de IfcProductDefinitionShape, de IfcConnectionSurfaceGeometry et d'élément de construction + //HP: Le contains des spaces est composé de IfcProductDefinitionShape, de IfcConnectionSurfaceGeometry et d'élément de construction //Recup des Elements de Construction if (string((*it_Elem2)->ch_Type) != "IfcConnectionSurfaceGeometry") { if(string((*it_Elem2)->ch_Type) != "IfcProductDefinitionShape") map_BuildingElem_Type[(*it_Elem2)] = (*it_Elem2)->ch_Type; }// else { //On initialise le set mp_SideBySide pour y mettre le comparatur qui ordonne selon la distance croissante set>, Comparator> setOfIfcConnSideBySide_Init(_CurrentIfcTree->compFunctor); (*it_Elem2)->mp_SideBySide = setOfIfcConnSideBySide_Init; } }// for (it_Elem2 = (it_Elem1->first->st_Contains).begin(); it_Elem2 != (it_Elem1->first->st_Contains).end(); it_Elem2++) }// if (it_Elem1->second == "IfcSpace") }// for (it_Elem1 = _map_BasifTree.begin(); it_Elem1 != _map_BasifTree.end(); it_Elem1++) //Boucle sur les elements de construction map::iterator it_BuildingElem; for (it_BuildingElem = map_BuildingElem_Type.begin(); it_BuildingElem != map_BuildingElem_Type.end(); it_BuildingElem++) { res = FindFaceToFaceAndSideBySideSurfacesOfOneBuildingelement(it_BuildingElem->first); if (res) return res; }// for (it_BuildingElem = map_BuildingElem_Type.begin(); it_BuildingElem != map_BuildingElem_Type.end(); it_BuildingElem++) return res; } -//Routine pour trouver sur un même élément de construction -// les surfaces en vis à vis (chacun appartenant à un espace différent) -// les surfaces côte à côte (chacun appartenant à un même espace) +//Routine pour trouver sur un même élément de construction +// les surfaces en vis à vis (chacun appartenant à un espace différent) +// les surfaces côte à côte (chacun appartenant à un même espace) int ifc_TreePostTreatment::FindFaceToFaceAndSideBySideSurfacesOfOneBuildingelement(STRUCT_IFCENTITY *st_IfcEntBE) { int res = 0; // - //Préparations des éléments d'informations nécessaires aux algo de FaceToFace et SideBySide + //Préparations des éléments d'informations nécessaires aux algo de FaceToFace et SideBySide // - //Mapping entre les IfcConnectionSurfaceGeometry de l'élément de construction et leur IfcSpace + //Mapping entre les IfcConnectionSurfaceGeometry de l'élément de construction et leur IfcSpace map map_IfcConn_IfcSpace; map map_IfcSpace_NbIfcConn; list ::iterator it_Elem1; list ::iterator it_Elem2; for (it_Elem1 = (st_IfcEntBE->st_Contains).begin(); it_Elem1 != (st_IfcEntBE->st_Contains).end(); it_Elem1++) { for (it_Elem2 = ((*it_Elem1)->st_BelongsTo).begin(); it_Elem2 != ((*it_Elem1)->st_BelongsTo).end(); it_Elem2++) { if (string((*it_Elem2)->ch_Type) == "IfcSpace") { map_IfcConn_IfcSpace[(*it_Elem1)] = (*it_Elem2); map_IfcSpace_NbIfcConn[(*it_Elem2)] += 1; }// if (string((*it_Elem2)->ch_Type) == "IfcSpace") }// for (it_Elem2 = ((*it_Elem1)->st_BelongsTo).begin(); it_Elem2 != ((*it_Elem1)->st_BelongsTo).end(); it_Elem2++) }// for (it_Elem1 = (st_IfcEntBE->st_Contains).begin(); it_Elem1 != (st_IfcEntBE->st_Contains).end(); it_Elem1++) // - //Calcul des distances entre centre de gravité de chaque paire de IfcConnectionSurfaceGeometry + //Calcul des distances entre centre de gravité de chaque paire de IfcConnectionSurfaceGeometry // li_IfcConn_IfcConn_Dist[IfcConnectionSurfaceGeometry1, IfcConnectionSurfaceGeometry2]=distance - // Utilisation d'une liste pour profiter du tri optimisée "list::sort()" + // Utilisation d'une liste pour profiter du tri optimisée "list::sort()" list< pair< pair, double>> li_IfcConn_IfcConn_Dist; //Boucle sur st_Contains pour retrouver tous les IfcConnectionSurfaceGeometry for (it_Elem1 = (st_IfcEntBE->st_Contains).begin(); it_Elem1 != (st_IfcEntBE->st_Contains).end(); it_Elem1++) { - //Calculer distance entre chaque IfcConnectionSurfaceGeometry de l'élément de construction - // même si appartiennent à même ifcspace => utile pour les SideBySide + //Calculer distance entre chaque IfcConnectionSurfaceGeometry de l'élément de construction + // même si appartiennent à même ifcspace => utile pour les SideBySide it_Elem1++; for (it_Elem2 = it_Elem1, it_Elem1--; it_Elem2 != (st_IfcEntBE->st_Contains).end(); it_Elem2++) { //Calcul distance des isobarycentres std::vector vc_CentroidElem1((*it_Elem1)->db_Centroid.begin(), (*it_Elem1)->db_Centroid.end()); std::vector vc_CentroidElem2((*it_Elem2)->db_Centroid.begin(), (*it_Elem2)->db_Centroid.end()); double db_dist = ComputePtPtDistance(vc_CentroidElem1, vc_CentroidElem2); - //Init de la carte qui indiquera si la paire d'IfcConnectionSurfaceGeometry en index n'est pas cote à cote + //Init de la carte qui indiquera si la paire d'IfcConnectionSurfaceGeometry en index n'est pas cote à cote //map_CanBeSideBySide[std::make_pair((*it_Elem1), (*it_Elem2))] = true; //Memo de la distance entre les 2 IfcConnectionSurfaceGeometry (*it_Elem1) et (*it_Elem2) li_IfcConn_IfcConn_Dist.push_back(std::make_pair(std::make_pair((*it_Elem1), (*it_Elem2)), db_dist)); //}// if (map_IfcConn_IfcSpace[(*it_Elem1)] != map_IfcConn_IfcSpace[(*it_Elem2)]) }// for (it_Elem = (st_IfcEnt->st_Contains).begin(); it_Elem != (st_IfcEnt->st_Contains).end(); it_Elem++) }// for (it_Elem = (st_IfcEnt->st_Contains).begin(); it_Elem != (st_IfcEnt->st_Contains).end(); it_Elem++) - //Trier les paires par proximité pour trouver les surfaces en "vis à vis" et celles "côte à côte" (sur un même élément de construction) + //Trier les paires par proximité pour trouver les surfaces en "vis à vis" et celles "côte à côte" (sur un même élément de construction) li_IfcConn_IfcConn_Dist.sort([](auto lhs, auto rhs) { return lhs.second < rhs.second; }); // - //Détection des IfcConnectionSurfaceGeometry en vis-à-vis + //Détection des IfcConnectionSurfaceGeometry en vis-à-vis res = FindFaceToFaceSurfacesOfOneBuildingelement(st_IfcEntBE, map_IfcConn_IfcSpace, li_IfcConn_IfcConn_Dist); if (res) return res; // - //Détection des IfcConnectionSurfaceGeometry en côte-à-côte + //Détection des IfcConnectionSurfaceGeometry en côte-à-côte res = FindSideBySideSurfacesOfOneBuildingelement(st_IfcEntBE, map_IfcConn_IfcSpace, li_IfcConn_IfcConn_Dist, map_IfcSpace_NbIfcConn); return res; } -//Algo pour détecter les IfcConnectionSurfaceGeometry en vis-à-vis -// st_IfcEntBE est l'élément de construction en cours (on utilise son épaisseur pour éviter des faux positifs) -// map_IfcConn_IfcSpace associe un IfcConnectionSurfaceGeometry (de l'élément de construction en cours) avec son IfcSpace (utiliser pour ne pas associer 2 IfcConnectionSurfaceGeometry du même IfcSpace) -// li_IfcConn_IfcConn_Dist: liste de paire d'IfcConnectionSurfaceGeometry ORDONNEE en fonction de leur distance (permet de déterminer les vis-à-vis) +//Algo pour détecter les IfcConnectionSurfaceGeometry en vis-à-vis +// st_IfcEntBE est l'élément de construction en cours (on utilise son épaisseur pour éviter des faux positifs) +// map_IfcConn_IfcSpace associe un IfcConnectionSurfaceGeometry (de l'élément de construction en cours) avec son IfcSpace (utiliser pour ne pas associer 2 IfcConnectionSurfaceGeometry du même IfcSpace) +// li_IfcConn_IfcConn_Dist: liste de paire d'IfcConnectionSurfaceGeometry ORDONNEE en fonction de leur distance (permet de déterminer les vis-à-vis) int ifc_TreePostTreatment::FindFaceToFaceSurfacesOfOneBuildingelement(STRUCT_IFCENTITY *st_IfcEntBE, map &map_IfcConn_IfcSpace, list< pair< pair, double>> &li_IfcConn_IfcConn_Dist) { int res = 0; - //Surfaces en vis à vis (sur un même élément de construction) - //Repérer les surfaces les plus proches et en vis à vis (=distance centre de gravite < 2*epaisseur mur) + //Surfaces en vis à vis (sur un même élément de construction) + //Repérer les surfaces les plus proches et en vis à vis (=distance centre de gravite < 2*epaisseur mur) std::map map_IsEntityFound; for (list< pair< pair, double>>::iterator it = li_IfcConn_IfcConn_Dist.begin(); it != li_IfcConn_IfcConn_Dist.end(); ++it) { - //Si les 2 IfcConnectionSurfaceGeometry appartiennent à des ifcspace différent=> on continue (sinon on passe à une autre pair) + //Si les 2 IfcConnectionSurfaceGeometry appartiennent à des ifcspace différent=> on continue (sinon on passe à une autre pair) if (map_IfcConn_IfcSpace[(*it).first.first] != map_IfcConn_IfcSpace[(*it).first.second]) { - //Si les 2 IfcConnectionSurfaceGeometry n'ont pas encore touvé leur vis à vis => on continue (sinon on passe à une autre pair) + //Si les 2 IfcConnectionSurfaceGeometry n'ont pas encore touvé leur vis à vis => on continue (sinon on passe à une autre pair) if (!map_IsEntityFound[(*it).first.first] && !map_IsEntityFound[(*it).first.second]) { //la distance entre 2 surfaces en vis a vis est environ l'epaisseur du mur - //par contre s'il n'y a pas de mur en vis a vis (mur exterieur) les plus proches peuvent etre des surface cote à cote et non en vis a vis - // => le "if" qui suit permet d'exclure ce genre de faux positifs (cra distance des centre de gravité sont de distance > à epaisseur) + //par contre s'il n'y a pas de mur en vis a vis (mur exterieur) les plus proches peuvent etre des surface cote à cote et non en vis a vis + // => le "if" qui suit permet d'exclure ce genre de faux positifs (cra distance des centre de gravité sont de distance > à epaisseur) double db_cp = (*it).second; double db_rd = std::stod(st_IfcEntBE->map_DefValues->at("Width")); if ((*it).second < 2 * std::stod(st_IfcEntBE->map_DefValues->at("Width"))) { (*it).first.first->st_FaceToFace.push_back((*it).first.second); (*it).first.second->st_FaceToFace.push_back((*it).first.first); map_IsEntityFound[(*it).first.first] = true; map_IsEntityFound[(*it).first.second] = true; }// if ((*it).second < 2*std::stod(st_IfcEnt->map_DefValues->at("Width"))) }// if (!map_IsEntityFound[(*it).first.first] && !map_IsEntityFound[(*it).first.second]) }// if (map_IfcConn_IfcSpace[(*it).first.first] != map_IfcConn_IfcSpace[(*it).first.second]) }// for (list< pair< pair, double>>::iterator it = li_IfcConn_IfcConn_Dist.begin(); it != li_IfcConn_IfcConn_Dist.end(); ++it) return res; } -//Algo pour détecter les IfcConnectionSurfaceGeometry côte-à-côte -// st_IfcEntBE est l'élément de construction en cours (n'est pas utilisé mais si besoin pourrait l'être...) -// map_IfcConn_IfcSpace associe un IfcConnectionSurfaceGeometry (de l'élément de construction en cours) avec son IfcSpace (utiliser pour ne pas associer des IfcConnectionSurfaceGeometry d'IfcSpaces différents) -// li_IfcConn_IfcConn_Dist: liste de paire d'IfcConnectionSurfaceGeometry (de l'élément de construction en cours) ORDONNEE en fonction de leur distance (permet de déterminer les côte-à-côte) -// map_IfcSpace_NbIfcConn détermine le nombre d'IfcConnectionSurfaceGeometry par IfcSpace (permet à la fois de boucler sur les ifcSpaces et de déterminer "l'algo" en fonction du nombre d'IfcConnectionSurfaceGeometry) +//Algo pour détecter les IfcConnectionSurfaceGeometry côte-à-côte +// st_IfcEntBE est l'élément de construction en cours (n'est pas utilisé mais si besoin pourrait l'être...) +// map_IfcConn_IfcSpace associe un IfcConnectionSurfaceGeometry (de l'élément de construction en cours) avec son IfcSpace (utiliser pour ne pas associer des IfcConnectionSurfaceGeometry d'IfcSpaces différents) +// li_IfcConn_IfcConn_Dist: liste de paire d'IfcConnectionSurfaceGeometry (de l'élément de construction en cours) ORDONNEE en fonction de leur distance (permet de déterminer les côte-à-côte) +// map_IfcSpace_NbIfcConn détermine le nombre d'IfcConnectionSurfaceGeometry par IfcSpace (permet à la fois de boucler sur les ifcSpaces et de déterminer "l'algo" en fonction du nombre d'IfcConnectionSurfaceGeometry) int ifc_TreePostTreatment::FindSideBySideSurfacesOfOneBuildingelement(STRUCT_IFCENTITY *st_IfcEntBE, map &map_IfcConn_IfcSpace, list< pair< pair, double>> &li_IfcConn_IfcConn_Dist, map &map_IfcSpace_NbIfcConn) { int res = 0; - //Surfaces côte à côte (sur un même élément de construction) - //Paires de Surfaces les plus proches qui ne soient pas en vis à vis et appartenant à un même espace - //Repérer les paires de surfaces appartenant à même espace + //Surfaces côte à côte (sur un même élément de construction) + //Paires de Surfaces les plus proches qui ne soient pas en vis à vis et appartenant à un même espace + //Repérer les paires de surfaces appartenant à même espace map ::iterator mp_Space; for (mp_Space = map_IfcSpace_NbIfcConn.begin(); mp_Space != map_IfcSpace_NbIfcConn.end(); mp_Space++) { for (list< pair< pair, double>>::iterator it = li_IfcConn_IfcConn_Dist.begin(); it != li_IfcConn_IfcConn_Dist.end(); ++it) { - //Si les 2 IfcConnectionSurfaceGeometry appartiennent à 1 même ifcspace => on continue + //Si les 2 IfcConnectionSurfaceGeometry appartiennent à 1 même ifcspace => on continue if (map_IfcConn_IfcSpace[(*it).first.first] == map_IfcConn_IfcSpace[(*it).first.second]) { - //Si les 2 IfcConnectionSurfaceGeometry appartiennent au même ifcspace en cours => on continue + //Si les 2 IfcConnectionSurfaceGeometry appartiennent au même ifcspace en cours => on continue if (map_IfcConn_IfcSpace[(*it).first.first] == (*mp_Space).first) { (*it).first.first->mp_SideBySide.insert(std::make_pair((*it).first.second, std::make_pair((*it).second, false))); (*it).first.second->mp_SideBySide.insert(std::make_pair((*it).first.first, std::make_pair((*it).second, false))); //REMARQUE: - // Si besoin d'optimiser on peut mettre un compteur ici pour compter le nombre de pairs trouvées. + // Si besoin d'optimiser on peut mettre un compteur ici pour compter le nombre de pairs trouvées. // et mettre un test, pour faire un break, sur le nombre de pairs car il doit y en avoir : ((*mp_Space).second-1)*(*mp_Space).second)/2 - // Pour rappel, map_IfcConn_IfcSpace contient les ifcConn appartenant à un seul mur + // Pour rappel, map_IfcConn_IfcSpace contient les ifcConn appartenant à un seul mur //break; }// if (map_IfcConn_IfcSpace[(*it).first.first] == (*mp_Space).first) }// if (map_IfcConn_IfcSpace[(*it).first.first] == map_IfcConn_IfcSpace[(*it).first.second]) }//for (list< pair< pair, double>>::iterator it = li_IfcConn_IfcConn_Dist.begin(); it != li_IfcConn_IfcConn_Dist.end(); ++it) }// for (mp_Elem1 = map_IfcSpace_NbIfcConn.begin(); mp_Elem1 != map_IfcSpace_NbIfcConn.end(); mp_Elem1++) return res; } double ifc_TreePostTreatment::ComputePtPtDistance(vector &vc_Point1, vector &vc_Point2) { double db_dist = sqrt((*vc_Point2[0] - *vc_Point1[0])*(*vc_Point2[0] - *vc_Point1[0]) + (*vc_Point2[1] - *vc_Point1[1])*(*vc_Point2[1] - *vc_Point1[1]) + (*vc_Point2[2] - *vc_Point1[2])*(*vc_Point2[2] - *vc_Point1[2])); return db_dist; } map>::iterator ifc_TreePostTreatment::get_Index_Of_Max(map> &x) { map>::iterator first = x.begin(); map>::iterator last = x.end(); map>::iterator largest = first; if (first == last) return largest; while (++first != last) if ((*largest).second.second<(*first).second.second) largest = first; return largest; } //int ifc_TreePostTreatment::SortSideBySideSurfacesOfIfcConnectionSurfaceGeometry(STRUCT_IFCENTITY *st_IfcEntCS) //{ // int i_Res = 0; // // // Declaring the type of Predicate that accepts 2 pairs and return a bool // //typedef function>, pair>)> Comparator; // // // Defining a lambda function to compare two pairs. It will compare two pairs using second field // //Comparator compFunctor = // // [](pair> elem1, pair> elem2) // //{ // // return elem1.second.first < elem2.second.first; // //}; // // // Declaring a set that will store the pairs using above comparision logic // //map, Comparator> mapOfIfcConnSideBySide(st_IfcEntCS->mp_SideBySide.begin(), st_IfcEntCS->mp_SideBySide.end(), compFunctor); // set>, Comparator> setOfIfcConnSideBySide(st_IfcEntCS->mp_SideBySide.begin(), st_IfcEntCS->mp_SideBySide.end(), _CurrentIfcTree->compFunctor); // // st_IfcEntCS->mp_SideBySide.swap(setOfIfcConnSideBySide); // // // Iterate over a set using range base for loop // // It will display the items in sorted order of values // //for (pair> element : setOfIfcConnSideBySide) // //{ // // st_IfcEntCS->mp_SideBySide.insert(element); // //}// for (pair> element : setOfIfcConnSideBySide) // // return i_Res; //} //// //// POUR MEMO (1/2)... //// // -//Algo pour détecter les côte-à-côtes (cette détection permet de repérer les surfaces qui sont espacé de l'épaisseurs d'un mur pour les prolonger l'un vers l'autre) -// => ATTENTION: Algo pas fiable si les surfaces ne sont pas distribuer "selon une direction" i.e. s'il y a des surfaces à droite/gauche (1 direction) mais aussi en haut/en bas (2nde direction)!!! -// Par exemple le problème arrive avec les "surfaces quasi-nulles" qui sont bien souvent des quasi-lignes sur différents bords! +//Algo pour détecter les côte-à-côtes (cette détection permet de repérer les surfaces qui sont espacé de l'épaisseurs d'un mur pour les prolonger l'un vers l'autre) +// => ATTENTION: Algo pas fiable si les surfaces ne sont pas distribuer "selon une direction" i.e. s'il y a des surfaces à droite/gauche (1 direction) mais aussi en haut/en bas (2nde direction)!!! +// Par exemple le problème arrive avec les "surfaces quasi-nulles" qui sont bien souvent des quasi-lignes sur différents bords! //int ifc_TreePostTreatment::FillSideBySideSurfacesOfOneBuildingelement(STRUCT_IFCENTITY *st_IfcConn_Left, STRUCT_IFCENTITY *st_IfcConn_Middle, STRUCT_IFCENTITY *st_IfcConn_Right, double dbl_Dist_Left_Mid, double dbl_Dist_Mid_Right) //{ // int iRes = 0; // // // ajouter systematiquement les 2 plus proches et retirer les max si plus de 2 proches! // //S1->sideBySide(S2) // st_IfcConn_Left->mp_SideBySide[st_IfcConn_Middle] = std::make_pair(false, dbl_Dist_Left_Mid); // //S2->sideBySide(S1) // st_IfcConn_Middle->mp_SideBySide[st_IfcConn_Left] = std::make_pair(false, dbl_Dist_Left_Mid); // //S2->sideBySide(S3) // st_IfcConn_Middle->mp_SideBySide[st_IfcConn_Right] = std::make_pair(false, dbl_Dist_Mid_Right); // //S3->sideBySide(S2) // st_IfcConn_Right->mp_SideBySide[st_IfcConn_Middle] = std::make_pair(false, dbl_Dist_Mid_Right); // // //retirer le max si plus de 2 proches! // if (st_IfcConn_Middle->mp_SideBySide.size() > 2) // { // map>::iterator max_it_f_s = get_Index_Of_Max(st_IfcConn_Middle->mp_SideBySide); // (*max_it_f_s).first->mp_SideBySide.erase(st_IfcConn_Middle); // st_IfcConn_Middle->mp_SideBySide.erase(max_it_f_s); // }// if (st_IfcConn_Middle->mp_SideBySide.size() > 1) // // //retirer le max si plus de 2 proches! // if (st_IfcConn_Left->mp_SideBySide.size() > 2) // { // map>::iterator max_it_f_s = get_Index_Of_Max(st_IfcConn_Left->mp_SideBySide); // (*max_it_f_s).first->mp_SideBySide.erase(st_IfcConn_Left); // st_IfcConn_Left->mp_SideBySide.erase(max_it_f_s); // }// if (st_IfcConn_Left->mp_SideBySide.size() > 1) // // //retirer le max si plus de 2 proches! // if (st_IfcConn_Right->mp_SideBySide.size() > 2) // { // map>::iterator max_it_f_s = get_Index_Of_Max(st_IfcConn_Right->mp_SideBySide); // (*max_it_f_s).first->mp_SideBySide.erase(st_IfcConn_Right); // st_IfcConn_Right->mp_SideBySide.erase(max_it_f_s); // }// if (st_IfcConn_Right->mp_SideBySide.size() > 1) // // return iRes; //} //// //// POUR MEMO (2/2)... //// -////Algo pour détecter les IfcConnectionSurfaceGeometry côte-à-côte -//// st_IfcEntBE est l'élément de construction en cours (n'est pas utilisé mais si besoin pourrait l'être...) -//// map_IfcConn_IfcSpace associe un IfcConnectionSurfaceGeometry (de l'élément de construction en cours) avec son IfcSpace (utiliser pour ne pas associer des IfcConnectionSurfaceGeometry d'IfcSpaces différents) -//// li_IfcConn_IfcConn_Dist: liste de paire d'IfcConnectionSurfaceGeometry (de l'élément de construction en cours) ORDONNEE en fonction de leur distance (permet de déterminer les côte-à-côte) -//// map_IfcSpace_NbIfcConn détermine le nombre d'IfcConnectionSurfaceGeometry par IfcSpace (permet à la fois de boucler sur les ifcSpaces et de déterminer "l'algo" en fonction du nombre d'IfcConnectionSurfaceGeometry) +////Algo pour détecter les IfcConnectionSurfaceGeometry côte-à-côte +//// st_IfcEntBE est l'élément de construction en cours (n'est pas utilisé mais si besoin pourrait l'être...) +//// map_IfcConn_IfcSpace associe un IfcConnectionSurfaceGeometry (de l'élément de construction en cours) avec son IfcSpace (utiliser pour ne pas associer des IfcConnectionSurfaceGeometry d'IfcSpaces différents) +//// li_IfcConn_IfcConn_Dist: liste de paire d'IfcConnectionSurfaceGeometry (de l'élément de construction en cours) ORDONNEE en fonction de leur distance (permet de déterminer les côte-à-côte) +//// map_IfcSpace_NbIfcConn détermine le nombre d'IfcConnectionSurfaceGeometry par IfcSpace (permet à la fois de boucler sur les ifcSpaces et de déterminer "l'algo" en fonction du nombre d'IfcConnectionSurfaceGeometry) //int ifc_TreePostTreatment::FindSideBySideSurfacesOfOneBuildingelement(STRUCT_IFCENTITY *st_IfcEntBE, map &map_IfcConn_IfcSpace, list< pair< pair, double>> &li_IfcConn_IfcConn_Dist, map &map_IfcSpace_NbIfcConn) //{ // int res = 0; // -// //Surfaces côte à côte (sur un même élément de construction) -// //Paires de Surfaces les plus proches qui ne soient pas en vis à vis et appartenant à un même espace -// //Repérer les paires de surfaces appartenant à même espace +// //Surfaces côte à côte (sur un même élément de construction) +// //Paires de Surfaces les plus proches qui ne soient pas en vis à vis et appartenant à un même espace +// //Repérer les paires de surfaces appartenant à même espace // //Cas triviaux: -// // - S'il n'y a que 1 surface pas de côte à côte -// // - S'il n'y a que 2 surfaces => 1 seule paire côte à côte +// // - S'il n'y a que 1 surface pas de côte à côte +// // - S'il n'y a que 2 surfaces => 1 seule paire côte à côte // // - S'il y a strictement plus que 2 surfaces -// // => A1) prendre la 1ere paire la plus proche à "iso-espace" = (S1 et S2) -// // => A2) prendre la 2ème paire la plus proche contenant S1 = (S1 et S3) -// // => A3) prendre la 3ème paire (S2 et S3) +// // => A1) prendre la 1ere paire la plus proche à "iso-espace" = (S1 et S2) +// // => A2) prendre la 2ème paire la plus proche contenant S1 = (S1 et S3) +// // => A3) prendre la 3ème paire (S2 et S3) // // A1 et A2 => dist (S1 et S3) > (S1 et S2) // // A3 => soit dist (S2 et S3) > (S1 et S3) implique S1 au milieu de S2 et S3 // // => soit dist (S2 et S3) < (S1 et S3) implique S2 au milieu de S1 et S3 (dans ce cas S2 aura 2 SideBySide, S1 et S3 1 SideBySide) // // // // A2.1) S1-------S3 => dans ce cas S2 aura 2 SideBySide, S1 et S3 1 SideBySide (ATTENTION: il faut ajouter les sideBySide car S1 et S3 peuvent avoir un autre SideBySide S4) // // A1) S1--S2 // // A2.2) S3-------S1 => dans ce cas S1 aura 2 SideBySide, S2 et S3 1 SideBySide (ATTENTION: il faut ajouter les sideBySide car S2 et S3 peuvent avoir un autre SideBySide S4) // // -// // Le processus A1, A2 et A3 est à répéter en excluant la surface ayant déjà ses 2 SideBySide -// // => a priori pour 3 surfaces d'un même espace processus à faire 1 fois, pour 4 surfaces 2 fois, pour N surfaces N-2 fois +// // Le processus A1, A2 et A3 est à répéter en excluant la surface ayant déjà ses 2 SideBySide +// // => a priori pour 3 surfaces d'un même espace processus à faire 1 fois, pour 4 surfaces 2 fois, pour N surfaces N-2 fois // map ::iterator mp_Space; // for (mp_Space = map_IfcSpace_NbIfcConn.begin(); mp_Space != map_IfcSpace_NbIfcConn.end(); mp_Space++) // { // // -// //USECASE à 2 IfcConnectionSurfaceGeometry par ifcSpace +// //USECASE à 2 IfcConnectionSurfaceGeometry par ifcSpace // if ((*mp_Space).second == 2) // { // for (list< pair< pair, double>>::iterator it = li_IfcConn_IfcConn_Dist.begin(); it != li_IfcConn_IfcConn_Dist.end(); ++it) // { -// //Si les 2 IfcConnectionSurfaceGeometry appartiennent à 1 même ifcspace => on continue +// //Si les 2 IfcConnectionSurfaceGeometry appartiennent à 1 même ifcspace => on continue // if (map_IfcConn_IfcSpace[(*it).first.first] == map_IfcConn_IfcSpace[(*it).first.second]) // { -// //Si les 2 IfcConnectionSurfaceGeometry appartiennent au même ifcspace en cours => on continue +// //Si les 2 IfcConnectionSurfaceGeometry appartiennent au même ifcspace en cours => on continue // if (map_IfcConn_IfcSpace[(*it).first.first] == (*mp_Space).first) // { // //(*it).first.first->st_SideBySide.push_back((*it).first.second); // //(*it).first.second->st_SideBySide.push_back((*it).first.first); // // (*it).first.first->mp_SideBySide[(*it).first.second] = std::make_pair(false, (*it).second); // (*it).first.second->mp_SideBySide[(*it).first.first] = std::make_pair(false, (*it).second); // -// //Il n'y a que 2 IfcConnectionSurfaceGeometry => on peut arrêter la boucle sur les pairs +// //Il n'y a que 2 IfcConnectionSurfaceGeometry => on peut arrêter la boucle sur les pairs // break; // }// if (map_IfcConn_IfcSpace[(*it).first.first] == (*mp_Space).first) // }// if (map_IfcConn_IfcSpace[(*it).first.first] == map_IfcConn_IfcSpace[(*it).first.second]) // }//for (list< pair< pair, double>>::iterator it = li_IfcConn_IfcConn_Dist.begin(); it != li_IfcConn_IfcConn_Dist.end(); ++it) // }// if ((*mp_Space).second == 2) // // -// //USECASE à plus de 2 IfcConnectionSurfaceGeometry par ifcSpace +// //USECASE à plus de 2 IfcConnectionSurfaceGeometry par ifcSpace // else if ((*mp_Space).second > 2) // { -// //Recherche des 3 pairs it, it2 et it3 d'IfcConnectionSurfaceGeometry appartenant au même IfcSpace en cours +// //Recherche des 3 pairs it, it2 et it3 d'IfcConnectionSurfaceGeometry appartenant au même IfcSpace en cours // //BOUCLE POUR CHERCHER it // list< pair< pair, double>>::iterator it; // list< pair< pair, double>>::iterator it2; // list< pair< pair, double>>::iterator it3; // for (it = li_IfcConn_IfcConn_Dist.begin(); it != li_IfcConn_IfcConn_Dist.end(); it++) // { // bool bo_AreTheTwoPairsFound = false; // //it=S1-S2? -// //Si les 2 IfcConnectionSurfaceGeometry appartiennent au même ifcspace en cours => on continue +// //Si les 2 IfcConnectionSurfaceGeometry appartiennent au même ifcspace en cours => on continue // //bool bo_CanBeSideBySide = map_CanBeSideBySide[std::make_pair((*it).first.first, (*it).first.second)]; // if ((map_IfcConn_IfcSpace[(*it).first.first] == map_IfcConn_IfcSpace[(*it).first.second]) && (map_IfcConn_IfcSpace[(*it).first.first] == (*mp_Space).first)) // { // //A ce stade, on a la 1ere paire d'ifcConn it=S1-S2, on cherche la prochaine paire la plus proche (it2=S1-S3 ou it2=S3-S1) // //BOUCLE POUR CHERCHER it2 // //it++; // //for (it2 = it, it--; it2 != li_IfcConn_IfcConn_Dist.end(); it2++) // for (it2 = li_IfcConn_IfcConn_Dist.begin(); it2 != li_IfcConn_IfcConn_Dist.end(); it2++) // { // //it2=S1-S3? -// //Si la 1ere IfcConnectionSurfaceGeometry de it2 est S1 et si la 2nde IfcConn (S3) appartient au même ifcspace => on continue +// //Si la 1ere IfcConnectionSurfaceGeometry de it2 est S1 et si la 2nde IfcConn (S3) appartient au même ifcspace => on continue // if ((it2 != it) && (*it2).first.first == (*it).first.first && map_IfcConn_IfcSpace[(*it2).first.second] == (*mp_Space).first) // { // //A ce stade, on a les 2 paires d'ifcConn it=S1-S2 et it2=S1-S3, on cherche la derniere paire it3=S2-S3 ou it3=S3-S2 // //BOUCLE POUR CHERCHER it3 // //it2++; // //for (it3 = it2, it2--; it3 != li_IfcConn_IfcConn_Dist.end(); it3++) // for (it3 = li_IfcConn_IfcConn_Dist.begin(); it3 != li_IfcConn_IfcConn_Dist.end(); it3++) // { // //it3=S2-S3? // //Si la 1ere IfcConnectionSurfaceGeometry de it3 est S2 et la 2nde de it3 est S3 => on a les 3 paires pour renseigner les SideBySide // if ((*it3).first.first == (*it).first.second && (*it3).first.second == (*it2).first.second) // { // //A ce stade, on a les 3 paires d'ifcConn it=S1-S2 , it2=S1-S3, it3=S2-S3 // //avec les conditions: S1-S2 < S1-S3 // // A2.1) S1-------S3 => dans ce cas S2 aura 2 SideBySide, S1 et S3 1 SideBySide (ATTENTION: il faut ajouter les sideBySide car S1 et S3 peuvent avoir un autre SideBySide S4) // // A1) S1--S2 // // A2.2) S3-------S1 => dans ce cas S1 aura 2 SideBySide, S2 et S3 1 SideBySide (ATTENTION: il faut ajouter les sideBySide car S2 et S3 peuvent avoir un autre SideBySide S4) // // // Si S2-S3 < S1-S3 => S2 entre S1 et S3 (S1-S2-S3) // if ((*it3).second < (*it2).second) // { // //S1---S2---S3 // int res = FillSideBySideSurfacesOfOneBuildingelement((*it).first.first, (*it).first.second, (*it2).first.second, (*it).second, (*it3).second); // -// //Indication que S1 et S3 ne peuvent pas être cote à cote +// //Indication que S1 et S3 ne peuvent pas être cote à cote // //map_CanBeSideBySide[std::make_pair((*it).first.first, (*it2).first.second)] = false; // bo_AreTheTwoPairsFound = true; // }// if ((*it3).second<(*it2).second) // // // Si S2-S3 > S1-S3 => S1 entre S2 et S3 (S3-S1-S2) // if ((*it3).second>(*it2).second) // { // //S3---S1---S2 // int res = FillSideBySideSurfacesOfOneBuildingelement((*it2).first.second, (*it).first.first, (*it).first.second, (*it2).second, (*it).second); // -// //Indication que S2 et S3 ne peuvent pas être cote à cote +// //Indication que S2 et S3 ne peuvent pas être cote à cote // //map_CanBeSideBySide[std::make_pair((*it).first.second, (*it2).first.second)] = false; // bo_AreTheTwoPairsFound = true; // }// if ((*it3).second>(*it2).second) // }// if ((*it3).first.first == (*it).first.second && (*it3).first.second == (*it2).first.second) // // //it3=S3-S2? // //Si la 1ere IfcConnectionSurfaceGeometry de it3 est S3 et la 2nde de it3 est S2 => on a les 3 paires pour renseigner les SideBySide // if ((*it3).first.first == (*it2).first.second && (*it3).first.second == (*it).first.second) // { // //A ce stade, on a les 3 paires d'ifcConn it=S1-S2 , it2=S1-S3, it3=S3-S2 // //avec les conditions: S1-S2 < S1-S3 // // A2.1) S1-------S3 => dans ce cas S2 aura 2 SideBySide, S1 et S3 1 SideBySide (ATTENTION: il faut ajouter les sideBySide car S1 et S3 peuvent avoir un autre SideBySide S4) // // A1) S1--S2 // // A2.2) S3-------S1 => dans ce cas S1 aura 2 SideBySide, S2 et S3 1 SideBySide (ATTENTION: il faut ajouter les sideBySide car S2 et S3 peuvent avoir un autre SideBySide S4) // // // Si S3-S2 < S1-S3 => S2 entre S1 et S3 (S1-S2-S3) // if ((*it3).second<(*it2).second) // { // //S1---S2---S3 // int res = FillSideBySideSurfacesOfOneBuildingelement((*it).first.first, (*it).first.second, (*it2).first.second, (*it).second, (*it3).second); // -// //Indication que S1 et S3 ne peuvent pas être cote à cote +// //Indication que S1 et S3 ne peuvent pas être cote à cote // //map_CanBeSideBySide[std::make_pair((*it).first.first, (*it2).first.second)] = false; // bo_AreTheTwoPairsFound = true; // }// if ((*it3).second<(*it2).second) // // // Si S3-S2 > S1-S3 => S1 entre S2 et S3 (S3-S1-S2) // if ((*it3).second>(*it2).second) // { // //S3---S1---S2 // int res = FillSideBySideSurfacesOfOneBuildingelement((*it2).first.second, (*it).first.first, (*it).first.second, (*it2).second, (*it).second); // -// //Indication que S2 et S3 ne peuvent pas être cote à cote +// //Indication que S2 et S3 ne peuvent pas être cote à cote // //map_CanBeSideBySide[std::make_pair((*it).first.second, (*it2).first.second)] = false; // bo_AreTheTwoPairsFound = true; // }// if ((*it3).second>(*it2).second) // }// if ((*it3).first.first == (*it2).first.second && (*it3).first.second == (*it).first.second) // // if (bo_AreTheTwoPairsFound) break; // }// for (list< pair< pair, double>>::iterator it3 = it2, it2--; it3 != li_IfcConn_IfcConn_Dist.end(); ++it3) // }// if ((it2 != it) && (*it2).first.first == (*it).first.first && map_IfcConn_IfcSpace[(*it2).first.second] == (*mp_Space).first) // // //it2=S3-S1? -// //Si la 2nde IfcConnectionSurfaceGeometry de it2 est S1 et si la 1ere IfcConn (S3) appartient au même ifcspace => on continue +// //Si la 2nde IfcConnectionSurfaceGeometry de it2 est S1 et si la 1ere IfcConn (S3) appartient au même ifcspace => on continue // if ((it2 != it) && (*it2).first.second == (*it).first.first && map_IfcConn_IfcSpace[(*it2).first.first] == (*mp_Space).first) // { // //A ce stade, on a les 2 paires d'ifcConn it=S1-S2 et it2=S3-S1, on cherche la derniere paire it3=S2-S3 ou it3=S3-S2 // //BOUCLE POUR CHERCHER it3 // it2++; // for (it3 = it2, it2--; it3 != li_IfcConn_IfcConn_Dist.end(); it3++) // { // //it3=S2-S3? // //Si la 1ere IfcConnectionSurfaceGeometry de it3 est S2 et la 2nde de it3 est S3 => on a les 3 paires pour renseigner les SideBySide // if ((*it3).first.first == (*it).first.second && (*it3).first.second == (*it2).first.first) // { // //A ce stade, on a les 3 paires d'ifcConn it=S1-S2 , it2=S3-S1, it3=S2-S3 // //avec les conditions: S1-S2 < S3-S1 // // A2.1) S1-------S3 => dans ce cas S2 aura 2 SideBySide, S1 et S3 1 SideBySide (ATTENTION: il faut ajouter les sideBySide car S1 et S3 peuvent avoir un autre SideBySide S4) // // A1) S1--S2 // // A2.2) S3-------S1 => dans ce cas S1 aura 2 SideBySide, S2 et S3 1 SideBySide (ATTENTION: il faut ajouter les sideBySide car S2 et S3 peuvent avoir un autre SideBySide S4) // // // Si S2-S3 < S3-S1 => S2 entre S1 et S3 (S1-S2-S3) // if ((*it3).second<(*it2).second) // { // //S1---S2---S3 // int res = FillSideBySideSurfacesOfOneBuildingelement((*it).first.first, (*it).first.second, (*it2).first.first, (*it).second, (*it3).second); // -// //Indication que S1 et S3 ne peuvent pas être cote à cote +// //Indication que S1 et S3 ne peuvent pas être cote à cote // //map_CanBeSideBySide[std::make_pair((*it).first.first, (*it2).first.first)] = false; // bo_AreTheTwoPairsFound = true; // }// if ((*it3).second<(*it2).second) // // // Si S2-S3 > S3-S1 => S1 entre S2 et S3 (S3-S1-S2) // if ((*it3).second>(*it2).second) // { // //S3---S1---S2 // int res = FillSideBySideSurfacesOfOneBuildingelement((*it2).first.first, (*it).first.first, (*it).first.second, (*it2).second, (*it).second); // -// //Indication que S2 et S3 ne peuvent pas être cote à cote +// //Indication que S2 et S3 ne peuvent pas être cote à cote // //map_CanBeSideBySide[std::make_pair((*it).first.second, (*it2).first.first)] = false; // bo_AreTheTwoPairsFound = true; // }// if ((*it3).second>(*it2).second) // }// if ((*it3).first.first == (*it).first.second && (*it3).first.second == (*it2).first.first) // //it3=S3-S2? // //Si la 1ere IfcConnectionSurfaceGeometry de it3 est S3 et la 2nde de it3 est S2 => on a les 3 paires pour renseigner les SideBySide // if ((*it3).first.first == (*it2).first.first && (*it3).first.second == (*it).first.second) // { // //A ce stade, on a les 3 paires d'ifcConn it=S1-S2 , it2=S3-S1, it3=S3-S2 // //avec les conditions: S1-S2 < S3-S1 // // A2.1) S1-------S3 => dans ce cas S2 aura 2 SideBySide, S1 et S3 1 SideBySide (ATTENTION: il faut ajouter les sideBySide car S1 et S3 peuvent avoir un autre SideBySide S4) // // A1) S1--S2 // // A2.2) S3-------S1 => dans ce cas S1 aura 2 SideBySide, S2 et S3 1 SideBySide (ATTENTION: il faut ajouter les sideBySide car S2 et S3 peuvent avoir un autre SideBySide S4) // // // Si S3-S2 < S3-S1 => S2 entre S1 et S3 (S1-S2-S3) // if ((*it3).second<(*it2).second) // { // //S1---S2---S3 // int res = FillSideBySideSurfacesOfOneBuildingelement((*it).first.first, (*it).first.second, (*it2).first.first, (*it).second, (*it3).second); // -// //Indication que S1 et S3 ne peuvent pas être cote à cote +// //Indication que S1 et S3 ne peuvent pas être cote à cote // //map_CanBeSideBySide[std::make_pair((*it).first.first, (*it2).first.first)] = false; // bo_AreTheTwoPairsFound = true; // }// if ((*it3).second<(*it2).second) // // // Si S3-S2 > S3-S1 => S1 entre S2 et S3 (S3-S1-S2) // if ((*it3).second>(*it2).second) // { // //S3---S1---S2 // int res = FillSideBySideSurfacesOfOneBuildingelement((*it2).first.first, (*it).first.first, (*it).first.second, (*it2).second, (*it).second); // -// //Indication que S2 et S3 ne peuvent pas être cote à cote +// //Indication que S2 et S3 ne peuvent pas être cote à cote // //map_CanBeSideBySide[std::make_pair((*it).first.second, (*it2).first.first)] = false; // bo_AreTheTwoPairsFound = true; // }// if ((*it3).second>(*it2).second) // }// if ((*it3).first.first == (*it2).first.first && (*it3).first.second == (*it).first.second) // // if (bo_AreTheTwoPairsFound) break; // }// for (list< pair< pair, double>>::iterator it3 = it2, it2--; it3 != li_IfcConn_IfcConn_Dist.end(); ++it3) // }// if ((*it2).first.second == (*it).first.first && map_IfcConn_IfcSpace[(*it2).first.first] == (*mp_Space).first) // // if (bo_AreTheTwoPairsFound) break; // }// for (list< pair< pair, double>>::iterator it2 = it, it--; it2 != li_IfcConn_IfcConn_Dist.end(); ++it2) // }// if (map_IfcConn_IfcSpace[(*it).first.first] == map_IfcConn_IfcSpace[(*it).first.second]) // }//for (list< pair< pair, double>>::iterator it = li_IfcConn_IfcConn_Dist.begin(); it != li_IfcConn_IfcConn_Dist.end(); ++it) // }// else if ((*mp_Space).second > 2) // }// for (mp_Elem1 = map_IfcSpace_NbIfcConn.begin(); mp_Elem1 != map_IfcSpace_NbIfcConn.end(); mp_Elem1++) // // return res; //} diff --git a/IfcC++/ifc_BIMxBEMEPFLEngine/ifc_TreePostTreatment.h b/IfcC++/ifc_BIMxBEMEPFLEngine/ifc_TreePostTreatment.h index 0abe7ab..54cbb80 100644 --- a/IfcC++/ifc_BIMxBEMEPFLEngine/ifc_TreePostTreatment.h +++ b/IfcC++/ifc_BIMxBEMEPFLEngine/ifc_TreePostTreatment.h @@ -1,87 +1,87 @@ #pragma once #include "ifc_Tree.h" #include //#include typedef map Map_Basified_Tree; class ifc_TreePostTreatment { public: ifc_TreePostTreatment(ifc_Tree* CurrentIfcTree); ~ifc_TreePostTreatment(); int BasifyTree(Map_Basified_Tree *&map_BasifTree); int CompleteBasifiedTreeFromByTIFCSurfaces(); - //Retrait dans les contours (st_PointsDesContours) du derniers point lorsqu'il est égal au 1er (+ consigne bool bo_IsItLoop=true) + //Retrait dans les contours (st_PointsDesContours) du derniers point lorsqu'il est égal au 1er (+ consigne bool bo_IsItLoop=true) int RemoveLastPointOfLoopContours(string *&str_LogFile); //Calcul des isobarycentres des IfcConnectionSurfaceGeometry int CentroidsComputation(); - //Recherche des IfcConnectionSurfaceGeometry en vis-à-vis et côte-à-côte + //Recherche des IfcConnectionSurfaceGeometry en vis-à-vis et côte-à-côte int FindFaceToFaceAndSideBySideSurfaces(); - //Relimitation des IfcConnectionSurfaceGeometry en côte-à-côte + //Relimitation des IfcConnectionSurfaceGeometry en côte-à-côte int RelimitSideBySideSurfaces(string *&str_LogFile); //Passer dasn le ref du projet int TransformEntitiesToWorlCoordFrame(); //Calcul des surfaces IfcConnectionSurfaceGeometry int ComputeIfcConnectionSurfaceGeometrySurface(); - //Creation des TIFCSurfaces (décomposition des éléments de construction en leurs surfaces IfcConnectionSurfaceGeometry vis-à-vis) + //Creation des TIFCSurfaces (décomposition des éléments de construction en leurs surfaces IfcConnectionSurfaceGeometry vis-à-vis) int CreateTIFCSurfaces(); - //Retrait des IfcConnectionSurfaceGeometry de surfaces inférieures à dbl_Minisurf + //Retrait des IfcConnectionSurfaceGeometry de surfaces inférieures à dbl_Minisurf int RemoveQuasiNullIfcConnectionSurfaceGeometrySurface(double dbl_Minisurf, string *&str_LogFile); private: int BasifyTreeFrom(STRUCT_IFCENTITY *&st_IfcTree); int CentroidComputation(STRUCT_IFCENTITY *st_IfcEntCS); int RelimitSideBySideSurfacesOfOneIfcConnectionSurfaceGeometry(STRUCT_IFCENTITY *st_IfcEntCS, string *&str_LogFile); int RelimitOneSideBySideSurfaceOfOneIfcConnectionSurfaceGeometry(STRUCT_IFCENTITY *&st_IfcEntCS1, STRUCT_IFCENTITY *st_IfcEntCS2, string *&str_LogFile); int FindFaceToFaceAndSideBySideSurfacesOfOneBuildingelement(STRUCT_IFCENTITY *st_IfcEntBE); int FindFaceToFaceSurfacesOfOneBuildingelement(STRUCT_IFCENTITY *st_IfcEntBE, map &map_IfcConn_IfcSpace, list< pair< pair, double>> &li_IfcConn_IfcConn_Dist); int FindSideBySideSurfacesOfOneBuildingelement(STRUCT_IFCENTITY *st_IfcEntBE, map &map_IfcConn_IfcSpace, list< pair< pair, double>> &li_IfcConn_IfcConn_Dist, map &map_IfcSpace_NbIfcConn); int TransformEntityToWorlCoordFrame(STRUCT_IFCENTITY *st_IfcEnt, double *&db_CoordPts, size_t int_Size); int RemoveLastPointOfOneLoopContour(STRUCT_IFCENTITY *st_IfcEnt, string *&str_LogFile); int ComputeOneIfcConnectionSurfaceGeometrySurface(STRUCT_IFCENTITY *st_IfcEntCS); double ComputeSurfaceFromAContour(vector &vc_PointCoordCtr); int CreateTIFCSurface(STRUCT_IFCENTITY *st_IfcEntCS); int RemoveOneQuasiNullIfcConnectionSurfaceGeometrySurface(STRUCT_IFCENTITY *st_IfcEntCS, double dbl_Minisurf, string *&str_LogFile); double ComputePtPtDistance(vector &vc_Point1, vector &vc_Point2); //int SortSideBySideSurfacesOfIfcConnectionSurfaceGeometry(STRUCT_IFCENTITY *st_IfcEntCS); //int FillSideBySideSurfacesOfOneBuildingelement(STRUCT_IFCENTITY *st_IfcConn_Left, STRUCT_IFCENTITY *st_IfcConn_Middle, STRUCT_IFCENTITY *st_IfcConn_Right, double dbl_Dist_Left_Mid, double dbl_Dist_Mid_Right); void RecordLog(int &int_Step, string &str_LogFile, string &str_Header, STRUCT_IFCENTITY *&st_IfcEntCS); map>::iterator get_Index_Of_Max(map> &x); //bool compare_dist(const pair< pair, double> &first, const pair< pair, double> &second); Map_Basified_Tree _map_BasifTree; ifc_Tree* _CurrentIfcTree; }; //template //map get_max(const map &x) //{ // using pairtype = map; // return *std::max_element(x.begin(), x.end(), [](const pairtype &p1, const pairtype &p2) // { // return p1.begin()/*.second.second*/ < p2/*.second.second*/; // }); //} //template //bool Comp(map p1, map p2) //{ // return p1. + + + + + + + + + + + + userdefined + Adresse postale de l'Architecte + + #Rue + + #Ville + #Code postal + #Pays + + + userdefined + Adresse télécom de l'Architecte + + #Num. maître oeuvre + + + #Email maître oeuvre + + + + #Nom maître oeuvre + #Prénom maître oeuvre + + + + + + + userdefined + Adresse postale de l'Architecte + + #Rue + + #Ville + #Code postal + #Pays + + + userdefined + Adresse télécom de l'Architecte + + #Num. maître oeuvre + + + #Email maître oeuvre + + + + #Societé maître oeuvre + + + + + + + + + + + + + + + GS + GRAPHISOFT + GRAPHISOFT + + + + + + 22.0.0 + ARCHICAD-64 + IFC add-on version: 3006 FRA FULL + + + + + + + + + added + 1561127651 + + + lengthunit + metre + + + areaunit + square_metre + + + volumeunit + cubic_metre + + + planeangleunit + radian + + + + 0.01745329252 + + + + + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + planeangleunit + DEGREE + + + + + + solidangleunit + steradian + + + chf + + + timeunit + second + + + + 31556926. + + + + + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + + + + + + timeunit + Year + + + + + + massunit + kilo + gram + + + thermodynamictemperatureunit + degree_celsius + + + luminousintensityunit + lumen + + + energyunit + mega + joule + + + + + + + + thermalconductanceunit + + + + + + 1 + + + + + + -1 + + + + + + -1 + + + powerunit + watt + + + lengthunit + metre + + + thermodynamictemperatureunit + kelvin + + + + + + + + specificheatcapacityunit + + + + + + 1 + + + + + + -1 + + + + + + -1 + + + energyunit + joule + + + massunit + kilo + gram + + + thermodynamictemperatureunit + kelvin + + + + + + + massdensityunit + + + + + + 1 + + + + + + -1 + + + massunit + kilo + gram + + + volumeunit + cubic_metre + + + + + + + + + + + + + + + + + + + + + + 1. + 0. + 0. + + + + + 0. + 0. + 1. + + + + + 0. + 0. + 0. + + + + + + + + + + + + + + + + 0. + 1. + + + + Model + 3 + 1.000000000E-5 + + + + + + + + + 2w19xi7tXBHQ3r21J6FE$P + + + + 0000.00 + Nom du projet + Avant-Projet + + + + + + + + + + 1. + 0. + 0. + + + + + 0. + 0. + 1. + + + + + 0. + 0. + 0. + + + + + + + + + + + + + + + + + + + + 2w19xi7tXBHQ3r21J6FE$R + + + + Default + + + + element + + 48 + 51 + 23 + 999633 + + + 2 + 21 + 3 + 553905 + + 373.6 + + + 1KjwSedoLnJSgBn4Gl1YKa + + + + + + + + + + + + + 1. + 0. + 0. + + + + + 0. + 0. + 1. + + + + + 0. + 0. + 0. + + + + + + + + + + + + + + + + + + + + + + + 2w19xi7tXBHQ3r21J6FE$O + + + + Revit Advanced Sample + + + + Revit Advanced Sample + element + + + 0L1zBh$Fhy7kKdFxqgxUIx + + + + + + + + + + + + NumberOfStoreys + + 3 + + + + IsLandmarked + + unknown + + + + 1z864HMeuV$yf_bJk6Hjgu + + + + Pset_BuildingCommon + + + + + + + 3E5Php$hF7R06r94xw727c + + + + + + + + + + + + + 1. + 0. + 0. + + + + + 0. + 0. + 1. + + + + + 0. + 0. + 0. + + + + + + + + + + + + + + + + + + + + + + + 2w19xi7tXBHQ3r21Gvmn4U + + + + E0 + Niveau:Niveaux fini + + + + E0 + element + 0. + + + 2m2fT8mav39coptJEnsrMV + + + + + + + + + + + + + + 2FFNbHpKH3pPFqjG9MszuE + + + + E1 + Niveau:Niveaux fini + + + + E1 + element + 3. + + + 2FFNbHpKH3pPFqjG9Msz4T + + + + TO + Niveau:Niveaux fini + + + + TO + element + 6. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0. + 0. + 3. + + + + + 0. + 0. + 1. + + + + + 1. + 0. + 0. + + + + + 0. + 0. + 6. + + + + + 0. + 0. + 1. + + + + + 1. + 0. + 0. + + + + AboveGround + + unknown + + + + 0zA2inpVNd310BVb8vis71 + + + + Pset_BuildingStoreyCommon + + + + + + 01FMBjl$tNm7Ir6vYDchsM + + + + + + + + + + + + + 1. + 0. + 0. + + + + + 0. + 0. + 1. + + + + + -0.125 + 5.325 + 0. + + + + + + + + + + + + + + + + + + + + + + + Body + Model + + + + model_view + + + + 0.225 + -0.225 + + + + + 10.225 + -0.225 + + + + + 10.675 + 0.225 + + + + + -0.225 + 0.225 + + + + + + + + + + + + + area + Mur de base:Ext - Béton - 45 cm (450 x 10450) + + + + + + + 1. + 0. + 0. + + + + + 0. + 0. + 1. + + + + + 0. + 0. + 0. + + + + + + + + + + + + + + + + 0. + 0. + 1. + + + + + + + + + + + + + 3. + + + 0.4705882353 + 0.4705882353 + 0.4705882353 + + + + + + 0. + + 0.7 + + + 0.5 + + notdefined + + + Stuc + both + + + + + + + + + + + + + + + + + + + + + + Body + SweptSolid + + + + + + A-WALL-____-OTLN.Modèle IFC + + + + + + + + + + + + + + + + + + + + + + + + Axis + Curve2D + + + + + + + + + Body + SweptSolid + + + + + + + + + Axis + Curve2D + + + + + + + + + Body + SweptSolid + + + + + + + + + Axis + Curve2D + + + + + + + + + Body + SweptSolid + + + + + + + + + Axis + Curve2D + + + + + + + + + Body + SweptSolid + + + + + + + + + Axis + Curve2D + + + + + + + + + Body + SweptSolid + + + + + + + + + Axis + Curve2D + + + + + + + + + Body + SweptSolid + + + + + + + + + Axis + Curve2D + + + + + + + + + Body + SweptSolid + + + + + + + + + Axis + Curve2D + + + + + + Axis + Model + + + + model_view + + + + + + + + + + + + + + + + + + 3. + + + + + + + + + + + + + + + + + + 3. + + + + + + + + + + + + + + + + + + 3. + + + + + + + + + + + + + + + + + + 3. + + + + + + + + + + + + + + + + + + 3. + + + + + + + + + + + + + + + + + + 3. + + + + + + + + + + + + + + + + + + 3. + + + + + + + + + + 0. + 0. + + + + + 10.45 + 0. + + + + area + Mur de base:Ext - Béton - 45 cm (450 x 5450) + + + + + + + + + + + + + + + + + + 0. + 0. + 1. + + + + + 0. + 0. + + + + + 5.45 + 0. + + + + area + Mur de base:Ext - Béton - 45 cm (450 x 10450) + + + + + + + + + + + + + + + + + + 0. + 0. + 1. + + + + + 0. + 0. + + + + + 10.45 + 0. + + + + area + Mur de base:Ext - Béton - 45 cm (450 x 5450) + + + + + + + + + + + + + + + + + + 0. + 0. + 1. + + + + + 0. + 0. + + + + + 5.45 + 0. + + + + area + Mur de base:Ext - Béton - 45 cm (450 x 10450) + + + + + + + + + + + + + + + + + + 0. + 0. + 1. + + + + + 0. + 0. + + + + + 10.45 + 0. + + + + area + Mur de base:Ext - Béton - 45 cm (450 x 5450) + + + + + + + + + + + + + + + + + + 0. + 0. + 1. + + + + + 0. + 0. + + + + + 5.45 + 0. + + + + area + Mur de base:Ext - Béton - 45 cm (450 x 10450) + + + + + + + + + + + + + + + + + + 0. + 0. + 1. + + + + + 0. + 0. + + + + + 10.45 + 0. + + + + area + Mur de base:Ext - Béton - 45 cm (450 x 5450) + + + + + + + + + + + + + + + + + + 0. + 0. + 1. + + + + + 0. + 0. + + + + + 5.45 + 0. + + + + + + + + + + + + + + 0. + 0. + 0. + + + + + 0. + 0. + 1. + + + + + 1. + 0. + 0. + + + + + + + + + + + + + + 0. + 0. + 0. + + + + + 0. + 0. + 1. + + + + + 1. + 0. + 0. + + + + + + + + + + + + + + 0. + 0. + 0. + + + + + 0. + 0. + 1. + + + + + 1. + 0. + 0. + + + + + + + + + + + + + + 0. + 0. + 0. + + + + + 0. + 0. + 1. + + + + + 1. + 0. + 0. + + + + + + + + + + + + + + 0. + 0. + 0. + + + + + 0. + 0. + 1. + + + + + 1. + 0. + 0. + + + + + + + + + + + + + + 0. + 0. + 0. + + + + + 0. + 0. + 1. + + + + + 1. + 0. + 0. + + + + + + + + + + + + + + 0. + 0. + 0. + + + + + 0. + 0. + 1. + + + + + 1. + 0. + 0. + + + + + 0.225 + -0.225 + + + + + 5.225 + -0.225 + + + + + 5.675 + 0.225 + + + + + -0.225 + 0.225 + + + + + 0.225 + -0.225 + + + + + 10.225 + -0.225 + + + + + 10.675 + 0.225 + + + + + -0.225 + 0.225 + + + + + 0.225 + -0.225 + + + + + 5.225 + -0.225 + + + + + 5.675 + 0.225 + + + + + -0.225 + 0.225 + + + + + 0.225 + -0.225 + + + + + 10.225 + -0.225 + + + + + 10.675 + 0.225 + + + + + -0.225 + 0.225 + + + + + 0.225 + -0.225 + + + + + 5.225 + -0.225 + + + + + 5.675 + 0.225 + + + + + -0.225 + 0.225 + + + + + 0.225 + -0.225 + + + + + 10.225 + -0.225 + + + + + 10.675 + 0.225 + + + + + -0.225 + 0.225 + + + + + 0.225 + -0.225 + + + + + 5.225 + -0.225 + + + + + 5.675 + 0.225 + + + + + -0.225 + 0.225 + + + + + + + + + + 3kknIDuW56e9XuW3A6wxiH + + + + Mur de base:Ext - Béton - 45 cm:5349754 + Mur de base:Ext - Béton - 45 cm + + + + + + + 5349754 + + + 0CQbgdwiLWjQ5S8NocPz4a + + + + + + + + + + + + + + + + + + 3kknIDuW56e9XuW3A6wxiG + + + + Mur de base:Ext - Béton - 45 cm:5349755 + Mur de base:Ext - Béton - 45 cm + + + + + + + 5349755 + + + 3kknIDuW56e9XuW3A6wxiN + + + + Mur de base:Ext - Béton - 45 cm:5349756 + Mur de base:Ext - Béton - 45 cm + + + + + + + 5349756 + + + 3kknIDuW56e9XuW3A6wxiM + + + + Mur de base:Ext - Béton - 45 cm:5349757 + Mur de base:Ext - Béton - 45 cm + + + + + + + 5349757 + + + 3kknIDuW56e9XuW3A6wxaZ + + + + Mur de base:Int - Plâtre 10.0:5350216 + Mur de base:Int - Plâtre 10.0 + + + + + + + 5350216 + + + 3kknIDuW56e9XuW3A6wxc4 + + + + Mur de base:Int - Plâtre 10.0:5350383 + Mur de base:Int - Plâtre 10.0 + + + + + + + 5350383 + + + 3kknIDuW56e9XuW3A6wxuu + + + + Sol:EXT - Générique 30.0 cm:5350483 + Sol:EXT - Générique 30.0 cm + + + + + + + 5350483 + notdefined + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Body + SweptSolid + + + + + + + + + Axis + Curve2D + + + + + + + + + + + + + + + + + + + + Body + SweptSolid + + + + + + + + + Axis + Curve2D + + + + + + + + + + + + + + + + + + + + Body + SweptSolid + + + + + + + -0.125 + -0.1249999997 + 0. + + + + + 0. + 0. + 1. + + + + + 0. + 1. + 0. + + + + + 10.325 + -0.1249999997 + 0. + + + + + 0. + 0. + 1. + + + + + -1. + 0. + 0. + + + + + 10.325 + 5.325 + 0. + + + + + 0. + 0. + 1. + + + + + 0. + -1. + 0. + + + + + 5.1 + 5.325 + 0. + + + + + 0. + 0. + 1. + + + + + 0. + -1. + 0. + + + + + + + + + + + + + 3. + + + + + + + + + + 5.1 + 2.6 + 0. + + + + + 0. + 0. + 1. + + + + + 1. + 0. + 0. + + + + + + + + + + + + + 3. + + + + + + + + + + -0.1 + 5.3 + 0. + + + + + 0. + 0. + 1. + + + + + 1. + 0. + 0. + + + + + + + + + + + + + 0.3 + + + area + + + + + + + + + + + + + + + + + + + 0. + 0. + 1. + + + + + 0. + 0. + + + + + 5.45 + 0. + + + + area + + + + + + + + + + + + + + + + + + + 0. + 0. + 1. + + + + + 0. + 0. + + + + + 5.225 + 0. + + + + area + + + + + + + + + + + + + + + + + + + 0. + 0. + 1. + + + + + + + + + + + + + + 0. + 0. + 0. + + + + + 0. + 0. + 1. + + + + + 1. + 0. + 0. + + + + + + + + + + + + + + 0. + 0. + 0. + + + + + 0. + 0. + 1. + + + + + 1. + 0. + 0. + + + + + + + + + + + + + + 0. + 0. + -0.3 + + + + + 0. + 0. + 1. + + + + + 1. + 0. + 0. + + + + + 0.225 + -0.05 + + + + + 5.225 + -0.05 + + + + + 5.225 + 0.05 + + + + + 0.225 + 0.05 + + + + + 0.05 + -0.05 + + + + + 5. + -0.05 + + + + + 5. + 0.05 + + + + + 0.05 + 0.05 + + + + + 0. + 0. + + + + + 0. + -5.4 + + + + + 10.4 + -5.4 + + + + + 10.4 + 0. + + + + Béton, coulé sur place, gris + + + 0.4705882353 + 0.4705882353 + 0.4705882353 + + + + + + 0. + + 0.7 + + + 0.5 + + notdefined + + + Béton, coulé sur place, gris + both + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.2 + unknown + + + Isolation extérieure + + + 0.4705882353 + 0.4705882353 + 0.4705882353 + + + + + + 0. + + 0.7 + + + 0.5 + + notdefined + + + Isolation extérieure + both + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.2 + unknown + + + Stuc + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.05 + unknown + + + + + + + + Mur de base:Ext - Béton - 45 cm + + + + + + axis2 + positive + -0.225 + + + 2A1alGrg3NajXpaCLOtljw + + + + + + + + + + + + Reference + + Ext - Béton - 45 cm + + + + 21nIjJNeXXRWRvrgtf8VWw + + + + Pset_QuantityTakeOff + + + + + + 0_HTPfA8rt$9wT1yJpisHB + + + + + + + + + + + + Reference + + Ext - Béton - 45 cm + + + + ThermalTransmittance + + 0.1627868596 + + + + ExtendToStructure + + false + + + + LoadBearing + + false + + + + IsExternal + + true + + + + 3f5GmrEDJ6hF4WwyUTlWQ4 + + + + Pset_WallCommon + + + + + + + + + + 2xxEuwGX3916wSfMem1C8J + + + + + + + + + + + + Type de Construction + + Murs porteurs extérieurs + + + + 2J_WWuHLvSyy1vItuwEuLT + + + + Limites spatiales + + + + + + 3fXQidFKGGR7BFJgy4QBft + + + + + + + + + + + + Type de brique et dimensions + + Standard - 290 mm × 100 mm × 190 mm + + + + Nombre de briques + + 2081. + + + + 1Vasx4R7BI84xYWD13gzE8 + + + + Nombre de briques (Formule) + + + + + + + 2DC5gVS0za8LJy5eTOmAha + + + + + + + + + + + + Prix au m3 + + 100. + + + + Coût total du volume + + 1373.1 + + + + 3eCIMwQI_cM8fofiRb9u6P + + + + Coût de la structure (Formule) + + + + + + + 36QriSixjYVUH8JiDfzK3s + + + + + + + + + + + + ID dynamique par classification + + Mur - Béton - 45 cm:5349754 + + + + 0js4rCegVfbO5kg6rlQczd + + + + Description du produit (Formule) + + + + + + 0Mq67mxbAAci2GVqyIK_Gz + + + + + + + + + + + + Surface latérale (Texture) + + Stuc + + + + Surface extérieure (Texture) + + Stuc + + + + Surface intérieure (Texture) + + Stuc + + + + 0Tkc5kUn8stXKp0OyP1lSc + + + + Données générales de surfaces (Pour export) + + + + + + + + 01SnJmjleEtiBF2qAQPIIu + + + + + + + + + + + + Renovation Status + + Existing + + + + 3HgdSA1Wxnt5_SP_19RWz7 + + + + AC_Pset_RenovationAndPhasing + + + + + + 2lx3cENF_lNCpyYq4ZhTQN + + + + + + + + + + + + Largeur Brique + 0.1 + + + Longueur Brique + 0.29 + + + Hauteur Brique + 0.19 + + + Epaisseur Mortier + 0.01 + + + Volume brique + 0.0066 + + + 0BrF88GfJ25g2YmU9a$VgL + + + + Nombre de briques (Formule) + ARCHICAD BIM Quantities + + + + + + + + + + 3Zmp8G7TGhyRz4X_Orzq6Z + + + + + + + + + + + + Surface supérieure + 4.7025 + + + Surface latérale + 7.49 + + + Surface inférieure + 4.7025 + + + Surface extérieure nette + 28.08 + + + Surface intérieure nette + 32.7 + + + 1AbgnCQzAVxZD0dCWJ6sSY + + + + Données générales de surfaces (Pour export) + ARCHICAD BIM Quantities + + + + + + + + + + 3MXA1H_XXKTXwxgpbhpTkg + + + + + + + + + + + + 14 + 5 + 2018 + + + www.abvent.com + 22 + + + + Classification ARCHICAD + + + Mur + + + + + + 1pdgLXhO2QjDOh5EZYb8BK + + + + Classification ARCHICAD 22 + + + + + + + + + + + + + + + + + + + + + 3kknIDuW56e9XuW3A6wxsj + + + + Mur de base:Ext - Béton - 45 cm:5351366 + Mur de base:Ext - Béton - 45 cm + + + + + + + 5351366 + + + 3kknIDuW56e9XuW3A6wxsi + + + + Mur de base:Ext - Béton - 45 cm:5351367 + Mur de base:Ext - Béton - 45 cm + + + + + + + 5351367 + + + 3kknIDuW56e9XuW3A6wxsZ + + + + Mur de base:Ext - Béton - 45 cm:5351368 + Mur de base:Ext - Béton - 45 cm + + + + + + + 5351368 + + + 3kknIDuW56e9XuW3A6wxsY + + + + Mur de base:Ext - Béton - 45 cm:5351369 + Mur de base:Ext - Béton - 45 cm + + + + + + + 5351369 + + + 3kknIDuW56e9XuW3A6wx3k + + + + Mur de base:Int - Plâtre 10.0:5352069 + Mur de base:Int - Plâtre 10.0 + + + + + + + 5352069 + + + 3kknIDuW56e9XuW3A6wx22 + + + + Mur de base:Int - Plâtre 10.0:5352169 + Mur de base:Int - Plâtre 10.0 + + + + + + + 5352169 + + + 3kknIDuW56e9XuW3A6wx4U + + + + Mur de base:Int - Plâtre 10.0:5352309 + Mur de base:Int - Plâtre 10.0 + + + + + + + 5352309 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Body + SweptSolid + + + + + + + + + Axis + Curve2D + + + + + + + + + + + + + + + + + + + + Body + SweptSolid + + + + + + + + + Axis + Curve2D + + + + + + + + + + + + + + + + + + + + Body + SweptSolid + + + + + + + + + Axis + Curve2D + + + + + + + -0.125 + 5.325 + 0. + + + + + 0. + 0. + 1. + + + + + 1. + 0. + 0. + + + + + -0.125 + -0.1249999997 + 0. + + + + + 0. + 0. + 1. + + + + + 0. + 1. + 0. + + + + + 10.325 + -0.1249999997 + 0. + + + + + 0. + 0. + 1. + + + + + -1. + 0. + 0. + + + + + 10.325 + 5.325 + 0. + + + + + 0. + 0. + 1. + + + + + 0. + -1. + 0. + + + + + 3.15 + 5.325 + 0. + + + + + 0. + 0. + 1. + + + + + 0. + -1. + 0. + + + + + + + + + + + + + 3. + + + + + + + + + + 7.05 + 5.325 + 0. + + + + + 0. + 0. + 1. + + + + + 0. + -1. + 0. + + + + + + + + + + + + + 3. + + + + + + + + + + -0.125 + 1.9 + 0. + + + + + 0. + 0. + 1. + + + + + 1. + 0. + 0. + + + + + + + + + + + + + 3. + + + + + + + + + area + + + + + + + + + + + + + + + + + + + 0. + 0. + 1. + + + + + 0. + 0. + + + + + 3.425 + 0. + + + + area + + + + + + + + + + + + + + + + + + + 0. + 0. + 1. + + + + + 0. + 0. + + + + + 3.425 + 0. + + + + area + + + + + + + + + + + + + + + + + + + 0. + 0. + 1. + + + + + 0. + 0. + + + + + 10.45 + 0. + + + + + + + + + + + + + + 0. + 0. + 0. + + + + + 0. + 0. + 1. + + + + + 1. + 0. + 0. + + + + + + + + + + + + + + 0. + 0. + 0. + + + + + 0. + 0. + 1. + + + + + 1. + 0. + 0. + + + + + + + + + + + + + + 0. + 0. + 0. + + + + + 0. + 0. + 1. + + + + + 1. + 0. + 0. + + + + + 0.225 + -0.05 + + + + + 3.375 + -0.05 + + + + + 3.375 + 0.05 + + + + + 0.225 + 0.05 + + + + + 0.225 + -0.05 + + + + + 3.375 + -0.05 + + + + + 3.375 + 0.05 + + + + + 0.225 + 0.05 + + + + + 0.225 + -0.05 + + + + + 10.225 + -0.05 + + + + + 10.225 + 0.05 + + + + + 0.225 + 0.05 + + + + 2d1_2huaH1mh73LqfuAgpQ + + + + Ext - Béton - 45 cm + 3136248 + standard + + + 1WqD3A6J7hGNluslnay6D$ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + axis2 + positive + -0.225 + + + 0JU_fY_xH8Ua_dsoGRMQ1L + + + + + + + + + + + + 19WrIAI$pbbDzPoKVDBdiZ + + + + + + + + + + + + atstart + atend + + + Reference + + Ext - Béton - 45 cm + + + + 29MjrNN3k0u2b8cHC$H3ho + + + + Pset_QuantityTakeOff + + + + + + 1EVRHWb_Nn1dUQCRe4wt7W + + + + + + + + + + + + Reference + + Ext - Béton - 45 cm + + + + ExtendToStructure + + false + + + + ThermalTransmittance + + 0.1627868596 + + + + LoadBearing + + false + + + + IsExternal + + true + + + + 0MIj1Qg092PWpxqPX5QFKs + + + + Pset_WallCommon + + + + + + + + + + 3YzR4j6VKJIF70MKDoLEqw + + + + + + + + + + + + Type de Construction + + Murs porteurs extérieurs + + + + 2SpnmDd79F_p88RmgdCxRe + + + + Limites spatiales + + + + + + 35sYR8U7es9khuFHFYavjm + + + + + + + + + + + + Type de brique et dimensions + + Standard - 290 mm × 100 mm × 190 mm + + + + Nombre de briques + + 1068. + + + + 1Ps7_EKsgUxSPs5qk$lCry + + + + Nombre de briques (Formule) + + + + + + + 2DiXNZRwTHcdwxMo7T5$op + + + + + + + + + + + + Prix au m3 + + 100. + + + + Coût total du volume + + 704.55 + + + + 04a_YVd88TkxtEiyD6WWFK + + + + Coût de la structure (Formule) + + + + + + + 1UHt8jKXnLPHPh$XOi1H_t + + + + + + + + + + + + ID dynamique par classification + + Mur - Béton - 45 cm:5349755 + + + + 0oRcC6LGbPjnEJafkbU7Sw + + + + Description du produit (Formule) + + + + + + 3nyj_t3sCDI7S_AE5juqS1 + + + + + + + + + + + + Surface latérale (Texture) + + Stuc + + + + Surface extérieure (Texture) + + Stuc + + + + Surface intérieure (Texture) + + Stuc + + + + 3PXTxTUkhuXPpDlsLM4Gs$ + + + + Données générales de surfaces (Pour export) + + + + + + + + 2QqAxYzlKwYuEqO89XglYF + + + + + + + + + + + + Renovation Status + + Existing + + + + 1JbN5wcLNqWqtQtZNVALDs + + + + AC_Pset_RenovationAndPhasing + + + + + + 1adZgMl$IlR1kIOkX0ZqsK + + + + + + + + + + + + Largeur Brique + 0.1 + + + Longueur Brique + 0.29 + + + Hauteur Brique + 0.19 + + + Epaisseur Mortier + 0.01 + + + Volume brique + 0.0066 + + + 3eUOIeGZJlUQk_PMVKPQUP + + + + Nombre de briques (Formule) + ARCHICAD BIM Quantities + + + + + + + + + + 1C85C1hCCVMzZr8TWNC9FT + + + + + + + + + + + + Surface supérieure + 2.4525 + + + Surface latérale + 3.865 + + + Surface inférieure + 2.4525 + + + Surface extérieure nette + 14.04 + + + Surface intérieure nette + 17.55 + + + 00kS6Hx_xC8nF5uDdrln9q + + + + Données générales de surfaces (Pour export) + ARCHICAD BIM Quantities + + + + + + + + + + 2gEXgGw9RzHlekiTsuYIvG + + + + + + + + + + + + + + + + + + + + + + + axis2 + positive + -0.225 + + + 0XI1B0ECQx4ppzcxgoU$ky + + + + + + + + + + + + 2UqiR6Rle3bnaxLSAUna6F + + + + + + + + + + + + atstart + atend + + + Reference + + Ext - Béton - 45 cm + + + + 26CQ1_HNssCnN0S_7JVGMj + + + + Pset_QuantityTakeOff + + + + + + 3ttdIExCZPUQggz9Nfcaes + + + + + + + + + + + + Reference + + Ext - Béton - 45 cm + + + + ExtendToStructure + + false + + + + ThermalTransmittance + + 0.1627868596 + + + + LoadBearing + + false + + + + IsExternal + + true + + + + 0Z6Dkomnj3paZFTOIjRkKa + + + + Pset_WallCommon + + + + + + + + + + 3iZHAb23A7ukRna1hGNnGy + + + + + + + + + + + + Type de Construction + + Murs porteurs extérieurs + + + + 1otEUNJ$m5eNHj_btGeADB + + + + Limites spatiales + + + + + + 2H592_bXz6UJTkzggetA2N + + + + + + + + + + + + Type de brique et dimensions + + Standard - 290 mm × 100 mm × 190 mm + + + + Nombre de briques + + 2045. + + + + 2KcoYFWhA3sjb9$Fh9ALSj + + + + Nombre de briques (Formule) + + + + + + + 33a4eWe$G9ceUpxhPtJLk$ + + + + + + + + + + + + Prix au m3 + + 100. + + + + Coût total du volume + + 1349.55 + + + + 1vib2saq79U73lX0ADfH8b + + + + Coût de la structure (Formule) + + + + + + + 2guWwwSyHZJwvGnTSu7UFs + + + + + + + + + + + + ID dynamique par classification + + Mur - Béton - 45 cm:5349756 + + + + 1nUTeLtjoe1TGAnIf1vC6Q + + + + Description du produit (Formule) + + + + + + 2q4oS9LNzNn8Ohu4OW5gQn + + + + + + + + + + + + Surface latérale (Texture) + + Stuc + + + + Surface extérieure (Texture) + + Stuc + + + + Surface intérieure (Texture) + + Stuc + + + + 3QOfJ2iKAW_HEObf_OMqa8 + + + + Données générales de surfaces (Pour export) + + + + + + + + 1IhBNRFWFmH_mhVRFOV2zM + + + + + + + + + + + + Renovation Status + + Existing + + + + 1CkD6DD_5Q1eEaVmzLf9Ux + + + + AC_Pset_RenovationAndPhasing + + + + + + 3f$cOVMIkQ_MmvoQ8A5ZnJ + + + + + + + + + + + + Largeur Brique + 0.1 + + + Longueur Brique + 0.29 + + + Hauteur Brique + 0.19 + + + Epaisseur Mortier + 0.01 + + + Volume brique + 0.0066 + + + 29Wm9UzK4uD5bwhdLlXqst + + + + Nombre de briques (Formule) + ARCHICAD BIM Quantities + + + + + + + + + + 0D209Z_huMquOgvt2nPPdR + + + + + + + + + + + + Surface supérieure + 4.7025 + + + Surface latérale + 7.365 + + + Surface inférieure + 4.7025 + + + Surface extérieure nette + 27.54 + + + Surface intérieure nette + 32.55 + + + 1B6ZQj7K8zke_$IYs3e4Oy + + + + Données générales de surfaces (Pour export) + ARCHICAD BIM Quantities + + + + + + + + + + 11ayVIR9I_5xq7FsmCRZ2G + + + + + + + + + + + + + + + + + + + + + + + axis2 + positive + -0.225 + + + 0dX56URRtnz2wvJA3hCO1f + + + + + + + + + + + + 0W8p$X9e3ubp185JB6fpAz + + + + + + + + + + + + atend + atstart + + + 2vvGpLQ0jWScGw8tU2aD8O + + + + + + + + + + + + atstart + atend + + + Reference + + Ext - Béton - 45 cm + + + + 2GAYqvFLcprMgivNP9IWar + + + + Pset_QuantityTakeOff + + + + + + 2wS21eFeVCQG_1S12yxnJ$ + + + + + + + + + + + + Reference + + Ext - Béton - 45 cm + + + + ExtendToStructure + + false + + + + ThermalTransmittance + + 0.1627868596 + + + + LoadBearing + + false + + + + IsExternal + + true + + + + 00u7HP4Pcv60ZKVeDryrn$ + + + + Pset_WallCommon + + + + + + + + + + 0N1lEKJx32ZJG2kE93C0$Z + + + + + + + + + + + + Type de Construction + + Murs porteurs extérieurs + + + + 0LZW_zhlOLTMWNaUnW$tQ_ + + + + Limites spatiales + + + + + + 0QN8o7vjQh_Cor874w_IXu + + + + + + + + + + + + Type de brique et dimensions + + Standard - 290 mm × 100 mm × 190 mm + + + + Nombre de briques + + 1032. + + + + 3q_cxawADQUnhYuE4Ui3Ay + + + + Nombre de briques (Formule) + + + + + + + 1aT2LOl6gYZ_DYt25knWlo + + + + + + + + + + + + Prix au m3 + + 100. + + + + Coût total du volume + + 681. + + + + 30yEzUUtxJtxFv7IzSl$ru + + + + Coût de la structure (Formule) + + + + + + + 0glukJ5M8Z$u7$Zwa_HJEw + + + + + + + + + + + + ID dynamique par classification + + Mur - Béton - 45 cm:5349757 + + + + 2yXggKcmX1ebPji0xxHexh + + + + Description du produit (Formule) + + + + + + 1TrzE2hxXHigAMgJu0xTsg + + + + + + + + + + + + Surface latérale (Texture) + + Stuc + + + + Surface extérieure (Texture) + + Stuc + + + + Surface intérieure (Texture) + + Stuc + + + + 0VVm0QnELX9fGP$uZjlN09 + + + + Données générales de surfaces (Pour export) + + + + + + + + 2$MaMzCbqGbVyJSE_rXNfN + + + + + + + + + + + + Renovation Status + + Existing + + + + 3Sa9XWyHikLx9QdyR$ZD1Y + + + + AC_Pset_RenovationAndPhasing + + + + + + 0YM_IV_LwDaexYOofR5YS$ + + + + + + + + + + + + Largeur Brique + 0.1 + + + Longueur Brique + 0.29 + + + Hauteur Brique + 0.19 + + + Epaisseur Mortier + 0.01 + + + Volume brique + 0.0066 + + + 3YYkNrn7pGwjKHcu74Xm8B + + + + Nombre de briques (Formule) + ARCHICAD BIM Quantities + + + + + + + + + + 01VEVCccYJutzDtNKUv5cr + + + + + + + + + + + + Surface supérieure + 2.4525 + + + Surface latérale + 3.74 + + + Surface inférieure + 2.4525 + + + Surface extérieure nette + 13.5 + + + Surface intérieure nette + 17.4 + + + 2slMEQ8u$1sAAda1xVUIZ2 + + + + Données générales de surfaces (Pour export) + ARCHICAD BIM Quantities + + + + + + + + + + 383dNuPqJmXVEcK0B4oAsr + + + + + + + + + + + + 0.4980392157 + 0.4980392157 + 0.4980392157 + + + + + + 0. + + 0.7 + + + 0.5 + + notdefined + + + Mur par défaut + both + + + + + + + + + + + + + + + + + + + I-WALL-____-OTLN.Modèle IFC + + + + + + + + + + + + + + + Mur par défaut + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.1 + unknown + + + + + + Mur par défaut 0.1 + + + + + + axis2 + positive + -0.05 + + + 3yVvtgLwpyaAtFXwxKz4sT + + + + + + + + + + + + 16IgwzS5evXYGb2qXqb8uS + + + + + + + + + + + + atstart + atpath + + + 2uD2k_BoNrBKRJr1nc9ePf + + + + + + + + + + + + atend + atpath + + + Reference + + Int - Plâtre 10.0 + + + + 2T9gMmr0w8HEZBrtpFRuP1 + + + + Pset_QuantityTakeOff + + + + + + 3lDiZx6nC7jLbrNa4uVOQ9 + + + + + + + + + + + + ExtendToStructure + + false + + + + Reference + + Int - Plâtre 10.0 + + + + LoadBearing + + false + + + + IsExternal + + false + + + + 1ONIJpAGvFlNWEzlAr$QOF + + + + Pset_WallCommon + + + + + + + + + 2Hr8dj2_kxsT74KlDr6zFt + + + + + + + + + + + + Type de Construction + + Murs porteurs extérieurs + + + + 2KDd_TgS$9AhAqRVfANTbc + + + + Limites spatiales + + + + + + 3_yvTRrHmNROFBFyD$yDum + + + + + + + + + + + + Type de brique et dimensions + + Standard - 290 mm × 100 mm × 190 mm + + + + Nombre de briques + + 205. + + + + 37_$A$yHDm7c3LBlB7lKyT + + + + Nombre de briques (Formule) + + + + + + + 3qDKLirTkT6DRP4rOKLwZe + + + + + + + + + + + + Prix au m3 + + 100. + + + + Coût total du volume + + 135. + + + + 148yBlY6ewXfT4mW73McAf + + + + Coût de la structure (Formule) + + + + + + + 0UQ6xBTAC7cLJnhHZ5Gc_5 + + + + + + + + + + + + ID dynamique par classification + + Mur - Plâtre 10.0:5350216 + + + + 1J2PW0ZoO4jYs7AEy3L3TL + + + + Description du produit (Formule) + + + + + + 2AEsUDIM2CFwvmd4aUi1LQ + + + + + + + + + + + + Surface latérale (Texture) + + Mur par défaut + + + + Surface extérieure (Texture) + + Mur par défaut + + + + Surface intérieure (Texture) + + Mur par défaut + + + + 3S3WKV93XUUgNpP9UXB_WJ + + + + Données générales de surfaces (Pour export) + + + + + + + + 0km8Y3Weq5opi26tcixm6K + + + + + + + + + + + + Renovation Status + + Existing + + + + 0HnDwAOyRwSrmgB2kTmFOH + + + + AC_Pset_RenovationAndPhasing + + + + + + 1Hej6phB7NxKyxQcYfqbIA + + + + + + + + + + + + Largeur Brique + 0.1 + + + Longueur Brique + 0.29 + + + Hauteur Brique + 0.19 + + + Epaisseur Mortier + 0.01 + + + Volume brique + 0.0066 + + + 1jFuB$JpLkWJd1AHDpb7Em + + + + Nombre de briques (Formule) + ARCHICAD BIM Quantities + + + + + + + + + + 2UgG_l$RBZtnwZNUWN5lrk + + + + + + + + + + + + Surface supérieure + 0.5 + + + Surface latérale + 0.5 + + + Surface inférieure + 0.5 + + + Surface extérieure nette + 13.5 + + + Surface intérieure nette + 13.5 + + + 15dyJxjqlUidP_obcZC_eQ + + + + Données générales de surfaces (Pour export) + ARCHICAD BIM Quantities + + + + + + + + + + 30HwMbun7_zyVZa86D1Tdi + + + + + + + + + + + + 2oqeEfCy933wX62opuNr$O + + + + Int - Plâtre 10.0 + 806577 + standard + + + 0eofb0KAsD$9T23PJ4JkXI + + + + + + + + + + + + + + + + + + + + + + + + + + + axis2 + positive + -0.05 + + + 0QlExHfLD2ElRfZkh$gs4h + + + + + + + + + + + + 0WiYSHhJjB1cJGDmFnOEBR + + + + + + + + + + + + atstart + atpath + + + 2trodb3nkeYSZZIgqj_a1s + + + + + + + + + + + + atend + atpath + + + Reference + + Int - Plâtre 10.0 + + + + 3NWT$16UxXMg5GR7p6XKPr + + + + Pset_QuantityTakeOff + + + + + + 38wUm$yCk$JCIFAD3$x0Ua + + + + + + + + + + + + ExtendToStructure + + false + + + + Reference + + Int - Plâtre 10.0 + + + + LoadBearing + + false + + + + IsExternal + + false + + + + 2s5_tiiK_FOXiR4_Kr$C08 + + + + Pset_WallCommon + + + + + + + + + 0b5gG1aag4FVhAkGkYib6g + + + + + + + + + + + + Type de Construction + + Murs porteurs extérieurs + + + + 2j8Xbl2dXaQprjauZdc7nq + + + + Limites spatiales + + + + + + 3GcRks6RBQRy7plEHm9mSv + + + + + + + + + + + + Type de brique et dimensions + + Standard - 290 mm × 100 mm × 190 mm + + + + Nombre de briques + + 203. + + + + 2l7DYOxYDu3TIjb8NEkv6p + + + + Nombre de briques (Formule) + + + + + + + 1juswTGspWXEa0ZRJ8Gi6c + + + + + + + + + + + + Prix au m3 + + 100. + + + + Coût total du volume + + 133.65 + + + + 2wrIxWE3udMDECiXLrK0$w + + + + Coût de la structure (Formule) + + + + + + + 2$rvXGrkgDaS5p3h3e078R + + + + + + + + + + + + ID dynamique par classification + + Mur - Plâtre 10.0:5350383 + + + + 2RdGv7csQmVSsXBAmKsRQm + + + + Description du produit (Formule) + + + + + + 1fkj3J6V_nYpbSBz668cb6 + + + + + + + + + + + + Surface latérale (Texture) + + Mur par défaut + + + + Surface extérieure (Texture) + + Mur par défaut + + + + Surface intérieure (Texture) + + Mur par défaut + + + + 1enqdQPw6hBQINaFousGkj + + + + Données générales de surfaces (Pour export) + + + + + + + + 0taF8jkR80QLEnZNF4eFl$ + + + + + + + + + + + + Renovation Status + + Existing + + + + 2_ygPDaCh4oLMn8mTF7Tez + + + + AC_Pset_RenovationAndPhasing + + + + + + 2SzfA2NYv_DjQV37XX3w8H + + + + + + + + + + + + Largeur Brique + 0.1 + + + Longueur Brique + 0.29 + + + Hauteur Brique + 0.19 + + + Epaisseur Mortier + 0.01 + + + Volume brique + 0.0066 + + + 1I_PqKuRfR5AzI81rm42jZ + + + + Nombre de briques (Formule) + ARCHICAD BIM Quantities + + + + + + + + + + 3a1dl7PTLm8CumA7rEpEEk + + + + + + + + + + + + Surface supérieure + 0.495 + + + Surface latérale + 0.495 + + + Surface inférieure + 0.495 + + + Surface extérieure nette + 13.365 + + + Surface intérieure nette + 13.365 + + + 3gGy6qezj9kLC5U39srHsP + + + + Données générales de surfaces (Pour export) + ARCHICAD BIM Quantities + + + + + + + + + + 3JtmrTW2CgvIyykP1dfk8n + + + + + + + + + + + + 0.4980392157 + 0.4980392157 + 0.4980392157 + + + + + + 0. + + 0.7 + + + 0.5 + + notdefined + + + Sol par défaut + both + + + + + + + + + + + + + + + + + + + A-FLOR-____-OTLN.Modèle IFC + + + + + + + + + + Body + SweptSolid + + + + + + + + + + + + + + + 0.3 + + + area + + + + + + + + + + + + + + + + + + + 0. + 0. + 1. + + + + + + + + + + + + + + 0. + 0. + -0.3 + + + + + 0. + 0. + 1. + + + + + 1. + 0. + 0. + + + + + 0. + 0. + + + + + 0. + -5.4 + + + + + 10.4 + -5.4 + + + + + 10.4 + 0. + + + + Sol par défaut + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.3 + unknown + + + + + + Sol par défaut 0.3 + + + + + + axis3 + negative + 0.3 + + + 1naBxLT0ee2OF4zpEYdkot + + + + + + + + + + + + Reference + + EXT - Générique 30.0 cm + + + + 3Su6WE6yu6PV2vLp5ZScQi + + + + Pset_QuantityTakeOff + + + + + + 2Ff4YA0jKXjXT5cGihizVG + + + + + + + + + + + + Reference + + EXT - Générique 30.0 cm + + + + PitchAngle + + 0. + + + + LoadBearing + + false + + + + IsExternal + + true + + + + 30R84h3TY6eSM0LyJVcp4G + + + + Pset_SlabCommon + + + + + + + + + 35$IcYr8B3WfToecmJaHld + + + + + + + + + + + + Nombre de carreaux (non-arrondi) + + 296.9857218 + + + + Nombre de carreaux (arrondi) + + 297. + + + + Nombre de carreaux coupés + + 1. + + + + 2b85Br3XstcOZ54cwkJff9 + + + + Nombre de carreaux de sols (Formule) + + + + + + + + 1tpQuS7t1DuGaa1knrwFjF + + + + + + + + + + + + Prix au m3 + + 100. + + + + Coût total du volume + + 1684.8 + + + + 0vUaMeIo7r_S3VRhyXV4eb + + + + Coût de la structure (Formule) + + + + + + + 3gwJp$9WMSRzUG8TUgphxW + + + + + + + + + + + + ID dynamique par classification + + Dalle - Générique 30.0 cm:5350483 + + + + 3ozm1A_WDO8$Alj_5wzTWm + + + + Description du produit (Formule) + + + + + + 3hve6m_RmCBEHytA$eFsa7 + + + + + + + + + + + + Surface supérieure (Texture) + + Sol par défaut + + + + Surface latérale (Texture) + + Sol par défaut + + + + Surface inférieure (Texture) + + Sol par défaut + + + + 22UkTyVHTVn1ueaTx1zcvR + + + + Données générales de surfaces (Pour export) + + + + + + + + 2KvTJd3IVZMNWxNEM41CMg + + + + + + + + + + + + Renovation Status + + Existing + + + + 0TwUdOG33cB24h6GhZcWk_ + + + + AC_Pset_RenovationAndPhasing + + + + + + 1XpwtST6RIOehRDMf6KXWc + + + + + + + + + + + + Longeur carreau + 0.6 + + + Largeur carreau + 0.3 + + + Largeur joint + 0.01 + + + 1suHYQkIY29g57O0VVNfje + + + + Nombre de carreaux de sols (Formule) + ARCHICAD BIM Quantities + + + + + + + + 15pWXi4oqQf3mDRhi0Gwn$ + + + + + + + + + + + + Surface supérieure + 56.16 + + + Surface conditionnelle supérieure + 56.16 + + + Surface latérale + 9.48 + + + Surface inférieure + 56.16 + + + Surface conditionnelle inférieure + 56.16 + + + 38awpTstj7j4bo44GKMFO5 + + + + Données générales de surfaces (Pour export) + ARCHICAD BIM Quantities + + + + + + + + + + 2R11UD6_pElt1TSeI9$iDm + + + + + + + + + + + + Dalle + + + + + + 1XrcPkJohvHBvG1Bf08mq3 + + + + Classification ARCHICAD 22 + + + + + + + + + + 3kknIDuW56e9XuW3A6wxQZ + + + + Sol:INT - Générique 30.0 cm:5352648 + Sol:INT - Générique 30.0 cm + + + + + + + 5352648 + notdefined + + + + + + + + + + + + + + + + + + + + + + + + + + + + -0.1 + 5.3 + 0. + + + + + 0. + 0. + 1. + + + + + 1. + 0. + 0. + + + + 15Z0yK0RiHrPC20026FoLQ + + + + EXT - Générique 30.0 cm + 759 + notdefined + + + 1rOW35txFgz7rmegN32ZXp + + + + + + + + + + + + + 1. + 0. + 0. + + + + + 0. + 0. + 1. + + + + + 0.1 + 0.1 + 0. + + + + + + + + + + + + + + + + + + + + + + + + 0. + 0. + 0. + + + + + 4.95 + 0. + 0. + + + + + 4.95 + 0. + 2.7 + + + + + 0. + 0. + 2.7 + + + + + + + + + + + + + + + true + + + + + + + + + 0. + 5. + 0. + + + + + 4.95 + 5. + 0. + + + + + + + + + + + + + + + true + + + + + + + + + 4.95 + 5. + 2.7 + + + + + + + + + + + + + + + true + + + + + + + + + 0. + 5. + 2.7 + + + + + + + + + + + + + + + true + + + + + + + + + + + + + + + + + + + true + + + + + + + + + + + + + + + + + + + true + + + + + + + + + + + + + + + + + + + + + + + 1. + 1. + 1. + + + + + + 0. + + 0.95 + + + 0.08 + + notdefined + + + Enduit - Blanc nature + both + + + + + + + + + + + + + + + + + + + + + + Body + Brep + + + + + + M-AREA-____-OTLN.Modèle IFC + + + + + + + + + + + + + + + Body + Brep + + + + + + + + + Body + Brep + + + + + + + + + Body + Brep + + + + + + + + + Body + Brep + + + + + + + + + Body + Brep + + + + + + + + + Body + Brep + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + + true + + + + + + true + + + + + + true + + + + + + true + + + + + + true + + + + + + true + + + + + + true + + + + + + true + + + + + + true + + + + + + true + + + + + + true + + + + + + true + + + + + + true + + + + + + true + + + + + + true + + + + + + true + + + + + + true + + + + + + true + + + + + + true + + + + + + true + + + + + + true + + + + + + true + + + + + + true + + + + + + true + + + + + + true + + + + + + true + + + + + + true + + + + + + true + + + + + + true + + + + + + true + + + + + + true + + + + + + true + + + + + + true + + + + + + true + + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0. + 0. + 0. + + + + + 4.95 + 0. + 0. + + + + + 4.95 + 0. + 2.7 + + + + + 0. + 0. + 2.7 + + + + + 0. + 2.45 + 0. + + + + + 4.95 + 2.45 + 0. + + + + + 4.95 + 2.45 + 2.7 + + + + + 0. + 2.45 + 2.7 + + + + + 0. + 0. + 0. + + + + + 4.95 + 0. + 0. + + + + + 4.95 + 0. + 2.7 + + + + + 0. + 0. + 2.7 + + + + + 0. + 2.45 + 0. + + + + + 4.95 + 2.45 + 0. + + + + + 4.95 + 2.45 + 2.7 + + + + + 0. + 2.45 + 2.7 + + + + + 0. + 0. + 0. + + + + + 3.15 + 0. + 0. + + + + + 3.15 + 0. + 3. + + + + + 0. + 0. + 3. + + + + + 0. + 3. + 0. + + + + + 3.15 + 3. + 0. + + + + + 3.15 + 3. + 3. + + + + + 0. + 3. + 3. + + + + + 0. + 0. + 0. + + + + + 10. + 0. + 0. + + + + + 10. + 0. + 3. + + + + + 0. + 0. + 3. + + + + + 0. + 1.75 + 0. + + + + + 10. + 1.75 + 0. + + + + + 10. + 1.75 + 3. + + + + + 0. + 1.75 + 3. + + + + + 0. + 0. + 0. + + + + + 3.15 + 0. + 0. + + + + + 3.15 + 0. + 3. + + + + + 0. + 0. + 3. + + + + + 0. + 3. + 0. + + + + + 3.15 + 3. + 0. + + + + + 3.15 + 3. + 3. + + + + + 0. + 3. + 3. + + + + + 0. + 0. + 0. + + + + + 3.15 + 0. + 0. + + + + + 3.15 + 0. + 3. + + + + + 0. + 0. + 3. + + + + + 0. + 3.8 + 0. + + + + + 3.15 + 3.8 + 0. + + + + + 3.15 + 3.8 + 3. + + + + + 0. + 3.8 + 3. + + + + FootPrint + Model + + + + model_view + + + + 0. + 0. + + + + + 4.95 + 0. + + + + + 4.95 + 5. + + + + + 0. + 5. + + + + + + + + + + + + + + + + + + + + + FootPrint + GeometricCurveSet + + + + + + + + + + + + 0Orm8sh5vFs9MyXfsGBgWx + + + + 01 + + + + + + + Espace + element + internal + + + 0kw8ZgN9ZvsGzdYUahHT6e + + + + + + + + + + + + + + 0Orm8sh5vFs9MyXfsGBgWv + + + + 02 + + + + + + + Espace + element + internal + + + 0Orm8sh5vFs9MyXfsGBgWu + + + + 03 + + + + + + + Espace + element + internal + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + FootPrint + GeometricCurveSet + + + + + + + + + + + + + + + + + + + + FootPrint + GeometricCurveSet + + + + + + + 10.1 + 2.55 + 0. + + + + + 0. + 0. + 1. + + + + + -1. + 0. + 0. + + + + + + + + + + 5.15 + 2.65 + 0. + + + + + 0. + 0. + 1. + + + + + 1. + 0. + 0. + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0. + 0. + + + + + 4.95 + 0. + + + + + 4.95 + 2.45 + + + + + 0. + 2.45 + + + + + 0. + 0. + + + + + 4.95 + 0. + + + + + 4.95 + 2.45 + + + + + 0. + 2.45 + + + + Reference + + Espace 01 + + + + Category + + Jour + + + + 2BWU4C8USr0kQ1MfDLaEBA + + + + Pset_SpaceCommon + + + + + + + 0WtWQ4QEIkWuSGYs06M$yY + + + + + + + + + + + + Ratio surfaces vitrées + + 0. + + + + Surface vitrée légale + + 0.1 + + + + Surface vitrée réglementée? + + false + + + + 1Ix5CqvwjotCQ81ng9uXwH + + + + Surfaces vitrées (Formule) + + + + + + + + 2haKQH_0ozAPxAhYQnF3i_ + + + + + + + + + + + + ID dynamique par classification + + Espace - 001 + + + + 182mOfXaGszmX74d_rzJYp + + + + Description du produit (Formule) + + + + + + 2tubgePSs7HBaPPdsZMb0F + + + + + + + + + + + + Renovation Status + + Existing + + + + 309P3gmhb3arLb18UaQY4P + + + + AC_Pset_RenovationAndPhasing + + + + + + 1hKDCQWYn4P$66EWSAQfxt + + + + + + + + + + + + Epaisseur du faux-plafond + 0.3 + + + Niveau inférieur du faux-plafond + 2.4 + + + 08vLbwKcw82HSEpcQfMYwT + + + + Faux-plafonds (Formule) + ARCHICAD BIM Quantities + + + + + + + 1P49NDFCqBMbUohlxNEjy9 + + + + + + + + + + + + Espace + + + + + + 28qLat5Jqzgw3jawRnOcdb + + + + Classification ARCHICAD 22 + + + + + + + + + + + + + + + 0Orm8sh5vFs9MyXfsGBgWX + + + + 11 + + + + + + + Espace + element + internal + + + 0Orm8sh5vFs9MyXfsGBgWc + + + + 12 + + + + + + + Espace + element + internal + + + 0Orm8sh5vFs9MyXfsGBgWZ + + + + 13 + + + + + + + Espace + element + internal + + + 0Orm8sh5vFs9MyXfsGBgWW + + + + 14 + + + + + + + Espace + element + internal + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + FootPrint + GeometricCurveSet + + + + + + + + + + + + + + + + + + + + FootPrint + GeometricCurveSet + + + + + + + + + + + + + + + + + + + + FootPrint + GeometricCurveSet + + + + + + + + + + + + + + + + + + + + FootPrint + GeometricCurveSet + + + + + + + 0.1 + 5.1 + 0. + + + + + 0. + 0. + 1. + + + + + 0. + -1. + 0. + + + + + + + + + + 0.1 + 0.1000000003 + 0. + + + + + 0. + 0. + 1. + + + + + 1. + 0. + 0. + + + + + + + + + + 7.1 + 5.1 + 0. + + + + + 0. + 0. + 1. + + + + + 0. + -1. + 0. + + + + + + + + + + 3.2 + 5.1 + 0. + + + + + 0. + 0. + 1. + + + + + 0. + -1. + 0. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0. + 0. + + + + + 3.15 + 0. + + + + + 3.15 + 3. + + + + + 0. + 3. + + + + + 0. + 0. + + + + + 10. + 0. + + + + + 10. + 1.75 + + + + + 0. + 1.75 + + + + + 0. + 0. + + + + + 3.15 + 0. + + + + + 3.15 + 3. + + + + + 0. + 3. + + + + + 0. + 0. + + + + + 3.15 + 0. + + + + + 3.15 + 3.8 + + + + + 0. + 3.8 + + + + 3efyETMiX1WXJO61eh2W0m + + + + Jour + E8A7C39D-5AC8-4182-14D8-181A2B0A0030 + notdefined + + + 2gQc3FQWgJFulYhGw1XFY_ + + + + + + + + + + + + + + + + + + + + + + + + + + Reference + + Espace 02 + + + + Category + + Jour + + + + 01qpSMJisggaPULxbnLeyv + + + + Pset_SpaceCommon + + + + + + + 19ke_p842GfW2upEei2Voe + + + + + + + + + + + + Ratio surfaces vitrées + + 0. + + + + Surface vitrée légale + + 0.1 + + + + Surface vitrée réglementée? + + false + + + + 3O5b6Zct0NU9MBU27i5Vyf + + + + Surfaces vitrées (Formule) + + + + + + + + 3X1EsZ_kEjxeciWEirVOJM + + + + + + + + + + + + ID dynamique par classification + + Espace - 001 + + + + 39zCnebcMbml9Er_Lfrgyt + + + + Description du produit (Formule) + + + + + + 0zGR5qdLoXmaGBQIiGthtK + + + + + + + + + + + + Renovation Status + + Existing + + + + 1zNrAGC0IJaiAUbuDqGeGw + + + + AC_Pset_RenovationAndPhasing + + + + + + 2XgeIhVeDLnfmoYc11KZnG + + + + + + + + + + + + Epaisseur du faux-plafond + 0.3 + + + Niveau inférieur du faux-plafond + 2.4 + + + 1QPxZqkwQMuM8tiXTSg3j0 + + + + Faux-plafonds (Formule) + ARCHICAD BIM Quantities + + + + + + + 1HZf6wMiZFaeVZyElpJkhm + + + + + + + + + + + + + + + + + + + + Reference + + Espace 03 + + + + Category + + Jour + + + + 3$gZb0E8BMrlGEiofPcx9s + + + + Pset_SpaceCommon + + + + + + + 1EYEC5n0vKpkj0N0i5STep + + + + + + + + + + + + Ratio surfaces vitrées + + 0. + + + + Surface vitrée légale + + 0.1 + + + + Surface vitrée réglementée? + + false + + + + 1WaVBFuwXnSoWcZdVdJyas + + + + Surfaces vitrées (Formule) + + + + + + + + 1jpGBRiIbOnrxHkuj_r2l4 + + + + + + + + + + + + ID dynamique par classification + + Espace - 001 + + + + 354yUZH5SUQi9MIvlEugSB + + + + Description du produit (Formule) + + + + + + 10finHKskmurf2GEXWPhmO + + + + + + + + + + + + Renovation Status + + Existing + + + + 3CJaJbjYg7jngfSeg_BIbX + + + + AC_Pset_RenovationAndPhasing + + + + + + 16jP_PTa1CPs5moTdCG0je + + + + + + + + + + + + Epaisseur du faux-plafond + 0.3 + + + Niveau inférieur du faux-plafond + 2.4 + + + 1BafDQcZhM7B9RJ2hj_ArJ + + + + Faux-plafonds (Formule) + ARCHICAD BIM Quantities + + + + + + + 1ECH5uLOa2koNb5vS3v7ri + + + + + + + + + + + + AboveGround + + unknown + + + + 3A9zuHR7juZc158PkGLLqH + + + + Pset_BuildingStoreyCommon + + + + + + 3z8L7pUFe3mxiXvqhA1_lZ + + + + + + + + + + + + + + + + + + + + 3x6MZn9H_We4bHcI7fsU7p + + + + + + + + + + + + + + + + + + + + + + axis2 + positive + -0.225 + + + 0RSqAyA8P3c3WF19xcFgNL + + + + + + + + + + + + Reference + + Ext - Béton - 45 cm + + + + 1dleYeYAhA6YrzhITJnZx6 + + + + Pset_QuantityTakeOff + + + + + + 1CArMimsKzC6yMNwTMIN1l + + + + + + + + + + + + Reference + + Ext - Béton - 45 cm + + + + ExtendToStructure + + false + + + + ThermalTransmittance + + 0.1627868596 + + + + LoadBearing + + false + + + + IsExternal + + true + + + + 39Xrp0w3BXs6hvJb6b2hzm + + + + Pset_WallCommon + + + + + + + + + + 2xhFfblU7IhxunW$u3scGC + + + + + + + + + + + + Type de Construction + + Murs porteurs extérieurs + + + + 0merRfBlLjJFZMlxOv_xAY + + + + Limites spatiales + + + + + + 0uVaOcklt0SumqjjAtbx_N + + + + + + + + + + + + Type de brique et dimensions + + Standard - 290 mm × 100 mm × 190 mm + + + + Nombre de briques + + 2175. + + + + 22dZPuiKr3xmJOoL8xcJth + + + + Nombre de briques (Formule) + + + + + + + 0AvA$EXkb6QR2Psx7s0Z_H + + + + + + + + + + + + Prix au m3 + + 100. + + + + Coût total du volume + + 1435.5 + + + + 0A4sceg0yfxD$IOFPtM9fF + + + + Coût de la structure (Formule) + + + + + + + 2Q$5pU5umiemyzEbs19FSh + + + + + + + + + + + + ID dynamique par classification + + Mur - Béton - 45 cm:5351366 + + + + 1HGSqGFTIMI6D8OkJ1cHe_ + + + + Description du produit (Formule) + + + + + + 2SMhT5QIs2IQ5naKBlqPJH + + + + + + + + + + + + Surface latérale (Texture) + + Stuc + + + + Surface extérieure (Texture) + + Stuc + + + + Surface intérieure (Texture) + + Stuc + + + + 2iSwvJXZkUNt6dAmvHSYQR + + + + Données générales de surfaces (Pour export) + + + + + + + + 3mlisvbk$oaKIJixtzoNe_ + + + + + + + + + + + + Renovation Status + + Existing + + + + 243J7nr9N8mp3PlyPpcRZO + + + + AC_Pset_RenovationAndPhasing + + + + + + 26pqXbAX834ayldgAG1QnI + + + + + + + + + + + + Largeur Brique + 0.1 + + + Longueur Brique + 0.29 + + + Hauteur Brique + 0.19 + + + Epaisseur Mortier + 0.01 + + + Volume brique + 0.0066 + + + 3kjiRan32TWMVcTtyUQCk_ + + + + Nombre de briques (Formule) + ARCHICAD BIM Quantities + + + + + + + + + + 3kCG$AkZ0LxoJfzhCqMYwu + + + + + + + + + + + + Surface supérieure + 4.7025 + + + Surface latérale + 9.57 + + + Surface inférieure + 4.7025 + + + Surface extérieure nette + 31.2 + + + Surface intérieure nette + 32.7 + + + 1eJlUXkaQ$5AVteGeZirN9 + + + + Données générales de surfaces (Pour export) + ARCHICAD BIM Quantities + + + + + + + + + + 2aLrqUz0XvAfBYmvY80bLP + + + + + + + + + + + + + + + + + + + + + + + axis2 + positive + -0.225 + + + 3XtJBa$PP_Ny4k7vnoF6C1 + + + + + + + + + + + + 01ko0APF_jw3aB9jpQaiHc + + + + + + + + + + + + atstart + atend + + + Reference + + Ext - Béton - 45 cm + + + + 1M5RZiRT5rx4BoH6_K6Vpg + + + + Pset_QuantityTakeOff + + + + + + 0oM1h1fieKoFGQnrpuut9m + + + + + + + + + + + + Reference + + Ext - Béton - 45 cm + + + + ExtendToStructure + + false + + + + ThermalTransmittance + + 0.1627868596 + + + + LoadBearing + + false + + + + IsExternal + + true + + + + 1JfBZQSPLST2HOj6FKmOpS + + + + Pset_WallCommon + + + + + + + + + + 3o71jU5afLmQ90tfXFVjI$ + + + + + + + + + + + + Type de Construction + + Murs porteurs extérieurs + + + + 26nNAWr3_y8C6tfnM_WkyB + + + + Limites spatiales + + + + + + 2uBz9Ntx5V7ZyNFHXpGwzn + + + + + + + + + + + + Type de brique et dimensions + + Standard - 290 mm × 100 mm × 190 mm + + + + Nombre de briques + + 1115. + + + + 0Y0pfdddZpsQUe7I$z0bMj + + + + Nombre de briques (Formule) + + + + + + + 0xEgFd6jGWnxTO1DqKhv2N + + + + + + + + + + + + Prix au m3 + + 100. + + + + Coût total du volume + + 735.75 + + + + 2naSTOv5mw$HJKAQaj2U1N + + + + Coût de la structure (Formule) + + + + + + + 18uao4HwNHPlgkefpo8C3X + + + + + + + + + + + + ID dynamique par classification + + Mur - Béton - 45 cm:5351367 + + + + 2qxaGJOXppetvazn1$Ofc1 + + + + Description du produit (Formule) + + + + + + 2Wa0gsO7BAlWRiLI_HtBnZ + + + + + + + + + + + + Surface latérale (Texture) + + Stuc + + + + Surface extérieure (Texture) + + Stuc + + + + Surface intérieure (Texture) + + Stuc + + + + 1l$8hoDSBjF3IDgtjysx$k + + + + Données générales de surfaces (Pour export) + + + + + + + + 3VW$L8tF7VY74w17YvKzrR + + + + + + + + + + + + Renovation Status + + Existing + + + + 36M3s318wjZSg3CIonXYmr + + + + AC_Pset_RenovationAndPhasing + + + + + + 1P0GMVWcvevEi0AFpWqQKb + + + + + + + + + + + + Largeur Brique + 0.1 + + + Longueur Brique + 0.29 + + + Hauteur Brique + 0.19 + + + Epaisseur Mortier + 0.01 + + + Volume brique + 0.0066 + + + 0eQYql9GCbuC9BsJql_$tf + + + + Nombre de briques (Formule) + ARCHICAD BIM Quantities + + + + + + + + + + 2YoLmqx91M6ac0GAxeQOvq + + + + + + + + + + + + Surface supérieure + 2.4525 + + + Surface latérale + 4.905 + + + Surface inférieure + 2.4525 + + + Surface extérieure nette + 15.6 + + + Surface intérieure nette + 17.55 + + + 2q7syQ0uwlO5zbR5TZrudL + + + + Données générales de surfaces (Pour export) + ARCHICAD BIM Quantities + + + + + + + + + + 2EcvmqFYrbw50L9JtzeHnA + + + + + + + + + + + + + + + + + + + + + + + axis2 + positive + -0.225 + + + 0BkNDqWoFGRW6ciO$WKYkN + + + + + + + + + + + + 0VNEWHfcwANkCfL0rYSxOH + + + + + + + + + + + + atstart + atend + + + Reference + + Ext - Béton - 45 cm + + + + 2b28UOniYE8JFz_PnAFZtd + + + + Pset_QuantityTakeOff + + + + + + 02nlBpOBThuFZqJLXsPq0V + + + + + + + + + + + + Reference + + Ext - Béton - 45 cm + + + + ExtendToStructure + + false + + + + ThermalTransmittance + + 0.1627868596 + + + + LoadBearing + + false + + + + IsExternal + + true + + + + 1a5Q_F9KhRisSBK5E8MAWM + + + + Pset_WallCommon + + + + + + + + + + 0xpBdRBXfdaaHfMhxvY8u3 + + + + + + + + + + + + Type de Construction + + Murs porteurs extérieurs + + + + 1ARw85m5iTHCEF9cw7iBiB + + + + Limites spatiales + + + + + + 0f9A1j$gdNGOf_EtTzTHzF + + + + + + + + + + + + Type de brique et dimensions + + Standard - 290 mm × 100 mm × 190 mm + + + + Nombre de briques + + 2138. + + + + 1Gz9000OEH79trJLpn8VXv + + + + Nombre de briques (Formule) + + + + + + + 0vjj$3wwxt8IaRXf0Yocqf + + + + + + + + + + + + Prix au m3 + + 100. + + + + Coût total du volume + + 1410.75 + + + + 3pFf77ObJk8XndmM8TTlP6 + + + + Coût de la structure (Formule) + + + + + + + 3wuwjgm4PaoKpj0LQMXt9_ + + + + + + + + + + + + ID dynamique par classification + + Mur - Béton - 45 cm:5351368 + + + + 3GYRCAw1VWh3GGoEV4AIJE + + + + Description du produit (Formule) + + + + + + 2dcklm9euzIMQqS1qwQK7q + + + + + + + + + + + + Surface latérale (Texture) + + Stuc + + + + Surface extérieure (Texture) + + Stuc + + + + Surface intérieure (Texture) + + Stuc + + + + 3YmyXGr73eb5MxsaTo284H + + + + Données générales de surfaces (Pour export) + + + + + + + + 3zFuuujkGzV49JIVHhCTsP + + + + + + + + + + + + Renovation Status + + Existing + + + + 0$qPrOnQhTQA9m5Uy2OCT5 + + + + AC_Pset_RenovationAndPhasing + + + + + + 21NghqyAwwUmoF60JBQfRq + + + + + + + + + + + + Largeur Brique + 0.1 + + + Longueur Brique + 0.29 + + + Hauteur Brique + 0.19 + + + Epaisseur Mortier + 0.01 + + + Volume brique + 0.0066 + + + 2r9Mhf3FPdybqFnTEcp4Hw + + + + Nombre de briques (Formule) + ARCHICAD BIM Quantities + + + + + + + + + + 2N$OZn2c3iHvka0$jCVZzE + + + + + + + + + + + + Surface supérieure + 4.7025 + + + Surface latérale + 9.405 + + + Surface inférieure + 4.7025 + + + Surface extérieure nette + 30.6 + + + Surface intérieure nette + 32.55 + + + 3ehwKiC_GpQHR2RYZz6tK3 + + + + Données générales de surfaces (Pour export) + ARCHICAD BIM Quantities + + + + + + + + + + 3$2v7mEqR$U7WxV4k6AJPv + + + + + + + + + + + + + + + + + + + + + + + axis2 + positive + -0.225 + + + 1PXfHWIVQzxMFuzJ3GnIdX + + + + + + + + + + + + 3u51A16E$4zA3zIJbN_F2x + + + + + + + + + + + + atend + atstart + + + 1YhBqjclcdpwIrj7RYSPdK + + + + + + + + + + + + atstart + atend + + + Reference + + Ext - Béton - 45 cm + + + + 23F1cYUUdoQQlsKK_GgYcv + + + + Pset_QuantityTakeOff + + + + + + 2hmMF_X7kpnOffqrw9h4Qs + + + + + + + + + + + + Reference + + Ext - Béton - 45 cm + + + + ExtendToStructure + + false + + + + ThermalTransmittance + + 0.1627868596 + + + + LoadBearing + + false + + + + IsExternal + + true + + + + 3H38fRicdagHTxd8atZpXT + + + + Pset_WallCommon + + + + + + + + + + 3sv9D54Az0G65XrQnfmTpf + + + + + + + + + + + + Type de Construction + + Murs porteurs extérieurs + + + + 1PrA5j0MWb3h7N_Y5AtPQT + + + + Limites spatiales + + + + + + 3LTIsgfYirWSQpJFjBnZ2k + + + + + + + + + + + + Type de brique et dimensions + + Standard - 290 mm × 100 mm × 190 mm + + + + Nombre de briques + + 1078. + + + + 0hFhycCbMEfLTXVOnvPPJM + + + + Nombre de briques (Formule) + + + + + + + 3gxA4_G7zwxnxw5TZ71NKJ + + + + + + + + + + + + Prix au m3 + + 100. + + + + Coût total du volume + + 711. + + + + 37r9OIyazDF5Cetn0pBAod + + + + Coût de la structure (Formule) + + + + + + + 0y$vZ2jw_yIkkdfhbyVKqg + + + + + + + + + + + + ID dynamique par classification + + Mur - Béton - 45 cm:5351369 + + + + 1j3a69YwKVCxzmQLDj4GVh + + + + Description du produit (Formule) + + + + + + 2Nhs8JBwh39XV48rl8PzFy + + + + + + + + + + + + Surface latérale (Texture) + + Stuc + + + + Surface extérieure (Texture) + + Stuc + + + + Surface intérieure (Texture) + + Stuc + + + + 2ix$QGnADAj3jyB9USmpET + + + + Données générales de surfaces (Pour export) + + + + + + + + 1Ra1pA9mSezElk0bV$MbJg + + + + + + + + + + + + Renovation Status + + Existing + + + + 2Cx2c9Po$x627$YDiN9gq2 + + + + AC_Pset_RenovationAndPhasing + + + + + + 072zdib5Fju51papYrJTVz + + + + + + + + + + + + Largeur Brique + 0.1 + + + Longueur Brique + 0.29 + + + Hauteur Brique + 0.19 + + + Epaisseur Mortier + 0.01 + + + Volume brique + 0.0066 + + + 2QnKLYxxc7YBSdiFtFnueu + + + + Nombre de briques (Formule) + ARCHICAD BIM Quantities + + + + + + + + + + 2hSSVB9XRDVeKF2cxpXINC + + + + + + + + + + + + Surface supérieure + 2.4525 + + + Surface latérale + 4.74 + + + Surface inférieure + 2.4525 + + + Surface extérieure nette + 15. + + + Surface intérieure nette + 17.4 + + + 3VD1BOsA7ATJURqscXC6jV + + + + Données générales de surfaces (Pour export) + ARCHICAD BIM Quantities + + + + + + + + + + 2eekukBuNnlCxdaCHvVbmI + + + + + + + + + + + + + + + + + + + + + + + axis2 + positive + -0.05 + + + 1nrCbngMDZhp$7AwOIUozN + + + + + + + + + + + + 0_NOoIey3ZFEmUdBVXqYvX + + + + + + + + + + + + atstart + atpath + + + Reference + + Int - Plâtre 10.0 + + + + 0_AsZmuHVs95Om5vEE4I1G + + + + Pset_QuantityTakeOff + + + + + + 2iWubQ86TSnmd5GyFgqg9S + + + + + + + + + + + + ExtendToStructure + + false + + + + Reference + + Int - Plâtre 10.0 + + + + LoadBearing + + false + + + + IsExternal + + false + + + + 3KNsz0hOlJx35i5Jg0O9og + + + + Pset_WallCommon + + + + + + + + + 3YE7Cp1tPGdVl8_Q4gyZX9 + + + + + + + + + + + + Type de Construction + + Murs porteurs extérieurs + + + + 2$PlZsbWVc4PGL8SJzAA8D + + + + Limites spatiales + + + + + + 2QMJH8nJP$80BZyurJk0kj + + + + + + + + + + + + Type de brique et dimensions + + Standard - 290 mm × 100 mm × 190 mm + + + + Nombre de briques + + 144. + + + + 0BTMmSt6ra1WhfCoBGN9xt + + + + Nombre de briques (Formule) + + + + + + + 2xDXJOYfc4P3rh30ki48XF + + + + + + + + + + + + Prix au m3 + + 100. + + + + Coût total du volume + + 94.50000001 + + + + 1FQ7oQtygdQNmTivSmboIX + + + + Coût de la structure (Formule) + + + + + + + 1d62hE2H1djSLT5uNAsV$i + + + + + + + + + + + + ID dynamique par classification + + Mur - Plâtre 10.0:5352069 + + + + 0b2hOVUbdc2m1puo3rCOAm + + + + Description du produit (Formule) + + + + + + 0Z1zqWN6z0oXjTSAgkFRp1 + + + + + + + + + + + + Surface latérale (Texture) + + Mur par défaut + + + + Surface extérieure (Texture) + + Mur par défaut + + + + Surface intérieure (Texture) + + Mur par défaut + + + + 3OTAlBqCeV0lj18b3qmKrl + + + + Données générales de surfaces (Pour export) + + + + + + + + 1JpPQAfz6MkXXOEtuvk3UJ + + + + + + + + + + + + Renovation Status + + Existing + + + + 3PaLYXMh42l0L7zusHsoCv + + + + AC_Pset_RenovationAndPhasing + + + + + + 32Ja_E7tWOhXsDnuWLhduv + + + + + + + + + + + + Largeur Brique + 0.1 + + + Longueur Brique + 0.29 + + + Hauteur Brique + 0.19 + + + Epaisseur Mortier + 0.01 + + + Volume brique + 0.0066 + + + 2NdMVM3nw5ODo2qL5d_zvy + + + + Nombre de briques (Formule) + ARCHICAD BIM Quantities + + + + + + + + + + 1P_lkkqGL$WFf$y9XIqNq_ + + + + + + + + + + + + Surface supérieure + 0.315 + + + Surface latérale + 0.6300000001 + + + Surface inférieure + 0.315 + + + Surface extérieure nette + 9.450000001 + + + Surface intérieure nette + 9.450000001 + + + 3wYfGvpewELwERB4A5Slzr + + + + Données générales de surfaces (Pour export) + ARCHICAD BIM Quantities + + + + + + + + + + 2BnU1Vl13WkIi8BECeK42G + + + + + + + + + + + + + + + + + + + + + + + axis2 + positive + -0.05 + + + 2546XIXyrVrXygad7m27$s + + + + + + + + + + + + 3hdQDeygZwMjaBAJ_CAZg_ + + + + + + + + + + + + atstart + atpath + + + Reference + + Int - Plâtre 10.0 + + + + 1Fg3WQBKyU7A2QoeFAhrh0 + + + + Pset_QuantityTakeOff + + + + + + 0nznvPiqcfy2AT5X3hQdkT + + + + + + + + + + + + ExtendToStructure + + false + + + + Reference + + Int - Plâtre 10.0 + + + + LoadBearing + + false + + + + IsExternal + + false + + + + 3StFSN$hH9JazjDwzCKIjy + + + + Pset_WallCommon + + + + + + + + + 2M532PuXb8hHhByqPeGat4 + + + + + + + + + + + + Type de Construction + + Murs porteurs extérieurs + + + + 1tygDe6RjijkME07l9_l79 + + + + Limites spatiales + + + + + + 1FXvj989BMOWNwEnQlgm8C + + + + + + + + + + + + Type de brique et dimensions + + Standard - 290 mm × 100 mm × 190 mm + + + + Nombre de briques + + 144. + + + + 0MBimEBdTiJzyf3oaqbUM4 + + + + Nombre de briques (Formule) + + + + + + + 0GTHhUs_ilQBPONwhIu48T + + + + + + + + + + + + Prix au m3 + + 100. + + + + Coût total du volume + + 94.50000001 + + + + 2kIGOrmOGsJnG1p4iwv5NU + + + + Coût de la structure (Formule) + + + + + + + 2No77uBqYDKDbwvligguzk + + + + + + + + + + + + ID dynamique par classification + + Mur - Plâtre 10.0:5352169 + + + + 2XFAoZLBIXqBpXStteYelx + + + + Description du produit (Formule) + + + + + + 2LSTla$t7Nuk42MSCQfIDB + + + + + + + + + + + + Surface latérale (Texture) + + Mur par défaut + + + + Surface extérieure (Texture) + + Mur par défaut + + + + Surface intérieure (Texture) + + Mur par défaut + + + + 3Z0tEC87ZK5C5NeWhreNxl + + + + Données générales de surfaces (Pour export) + + + + + + + + 0pvO3t8tbXDDnut5UKN_Ip + + + + + + + + + + + + Renovation Status + + Existing + + + + 31wAio3MIhdlhmF5DTKT87 + + + + AC_Pset_RenovationAndPhasing + + + + + + 0fWlB28$Q3zEblUc8ENHRX + + + + + + + + + + + + Largeur Brique + 0.1 + + + Longueur Brique + 0.29 + + + Hauteur Brique + 0.19 + + + Epaisseur Mortier + 0.01 + + + Volume brique + 0.0066 + + + 0CdMnd9xabAieCvJRt$jYQ + + + + Nombre de briques (Formule) + ARCHICAD BIM Quantities + + + + + + + + + + 10iyk4MY30aufqOtF36fks + + + + + + + + + + + + Surface supérieure + 0.315 + + + Surface latérale + 0.6300000001 + + + Surface inférieure + 0.315 + + + Surface extérieure nette + 9.450000001 + + + Surface intérieure nette + 9.450000001 + + + 1zphCt_6WqLnzq8IXfrrcn + + + + Données générales de surfaces (Pour export) + ARCHICAD BIM Quantities + + + + + + + + + + 0KlYN7Q6IEWWs0fdkqi1Uu + + + + + + + + + + + + + + + + + + + + + + + axis2 + positive + -0.05 + + + 1OhTML7Hkklp09E50FACpe + + + + + + + + + + + + 0GvUHM9ngsCpOa6hpw01m4 + + + + + + + + + + + + atend + atpath + + + 0ZBg2uWtxgEgLH_KD3WpoK + + + + + + + + + + + + atend + atpath + + + 2ZXvcldS9AQtfzLoR1w2T_ + + + + + + + + + + + + atstart + atpath + + + 1BZDrACB58A6T9Q6FWIC5T + + + + + + + + + + + + atend + atpath + + + Reference + + Int - Plâtre 10.0 + + + + 0qwZaeUxC9IFlEjkju$mnP + + + + Pset_QuantityTakeOff + + + + + + 3Z1o5GzWQWOsexZFE3yZlw + + + + + + + + + + + + ExtendToStructure + + false + + + + Reference + + Int - Plâtre 10.0 + + + + LoadBearing + + false + + + + IsExternal + + false + + + + 2f_BSjUbfIsOYFZSU3viF2 + + + + Pset_WallCommon + + + + + + + + + 3SbEK7wt3uYNXBjZDwdv6z + + + + + + + + + + + + Type de Construction + + Murs porteurs extérieurs + + + + 3uFVHUyWOcAnJmxAHHfFUA + + + + Limites spatiales + + + + + + 3GPNVgojSG5D_oBFTd$cpC + + + + + + + + + + + + Type de brique et dimensions + + Standard - 290 mm × 100 mm × 190 mm + + + + Nombre de briques + + 455. + + + + 0uEiButdk$MOfT72zLvc1e + + + + Nombre de briques (Formule) + + + + + + + 3RvOd8inSgzAePWsmUQwsW + + + + + + + + + + + + Prix au m3 + + 100. + + + + Coût total du volume + + 300. + + + + 047bFfu57q$FrIRGY73NGD + + + + Coût de la structure (Formule) + + + + + + + 2_Jog2QkDGAKL32OoTgbrL + + + + + + + + + + + + ID dynamique par classification + + Mur - Plâtre 10.0:5352309 + + + + 1KdOSIk0qkzqwVl4OiyoF5 + + + + Description du produit (Formule) + + + + + + 0b0hLXrK$foide8R7iS0So + + + + + + + + + + + + Surface latérale (Texture) + + Mur par défaut + + + + Surface extérieure (Texture) + + Mur par défaut + + + + Surface intérieure (Texture) + + Mur par défaut + + + + 36WVYbVe1auz8VedyAkdor + + + + Données générales de surfaces (Pour export) + + + + + + + + 1x9aqcAzNCtho0$2qwXDWq + + + + + + + + + + + + Renovation Status + + Existing + + + + 20cWSsqJiQMYuPZRyc3Aj9 + + + + AC_Pset_RenovationAndPhasing + + + + + + 2ZXEXWkOHj0WbTdCsP0nqV + + + + + + + + + + + + Largeur Brique + 0.1 + + + Longueur Brique + 0.29 + + + Hauteur Brique + 0.19 + + + Epaisseur Mortier + 0.01 + + + Volume brique + 0.0066 + + + 1sOhIFES9thNI623Ho5PqI + + + + Nombre de briques (Formule) + ARCHICAD BIM Quantities + + + + + + + + + + 3nWTnzHb36vYt87IReVq3b + + + + + + + + + + + + Surface supérieure + 1. + + + Surface latérale + 2. + + + Surface inférieure + 1. + + + Surface extérieure nette + 30. + + + Surface intérieure nette + 30. + + + 1N10le0qSE1kqsOKBxMRYX + + + + Données générales de surfaces (Pour export) + ARCHICAD BIM Quantities + + + + + + + + + + 1JanA0WKSWzWhvLQgnRhlw + + + + + + + + + + + + + + + + + + + + + + + axis3 + negative + 0.3 + + + 3WLn5PnVaW_QGrJtqSUMDf + + + + + + + + + + + + Reference + + INT - Générique 30.0 cm + + + + 025FtvhgkbGHWY3MX$aRAC + + + + Pset_QuantityTakeOff + + + + + + 1BGkrKQrQUL4STMm$OCn8T + + + + + + + + + + + + PitchAngle + + 0. + + + + Reference + + INT - Générique 30.0 cm + + + + LoadBearing + + false + + + + IsExternal + + false + + + + 3b6D5lTQmZ7iAh$I46iq6o + + + + Pset_SlabCommon + + + + + + + + + 3T5nsmo0tOg4lPxhK_WdT_ + + + + + + + + + + + + Nombre de carreaux (non-arrondi) + + 296.9857218 + + + + Nombre de carreaux (arrondi) + + 297. + + + + Nombre de carreaux coupés + + 1. + + + + 0m2IJkyTfJVOBI0FNK23Y6 + + + + Nombre de carreaux de sols (Formule) + + + + + + + + 3rZu7jWDHuJ_LBkTaKNp1n + + + + + + + + + + + + Prix au m3 + + 100. + + + + Coût total du volume + + 1684.8 + + + + 3jr_9$rpwquET77zESiOhD + + + + Coût de la structure (Formule) + + + + + + + 1nVDIoU1lZZiCAE$9UvI_y + + + + + + + + + + + + ID dynamique par classification + + Dalle - Générique 30.0 cm:5352648 + + + + 3s75db4dRFdrj17mnSNdl0 + + + + Description du produit (Formule) + + + + + + 11vVX52TOptvLenRS6XHcE + + + + + + + + + + + + Surface supérieure (Texture) + + Sol par défaut + + + + Surface latérale (Texture) + + Sol par défaut + + + + Surface inférieure (Texture) + + Sol par défaut + + + + 39gisUjhglU3LUYVWkUkJo + + + + Données générales de surfaces (Pour export) + + + + + + + + 1lEDM6f4kHs0Hyr1qgElqd + + + + + + + + + + + + Renovation Status + + Existing + + + + 2X6hUadvCfQ$a$ArD7jmsz + + + + AC_Pset_RenovationAndPhasing + + + + + + 29ybQKCuDy$9Nbhzie7waA + + + + + + + + + + + + Longeur carreau + 0.6 + + + Largeur carreau + 0.3 + + + Largeur joint + 0.01 + + + 0j$IZrndx1lok7Oqu9Og9m + + + + Nombre de carreaux de sols (Formule) + ARCHICAD BIM Quantities + + + + + + + + 2A14Iocd8AULFuqIW66wOX + + + + + + + + + + + + Surface supérieure + 56.16 + + + Surface conditionnelle supérieure + 56.16 + + + Surface latérale + 9.48 + + + Surface inférieure + 56.16 + + + Surface conditionnelle inférieure + 56.16 + + + 19PHB$A__TRfGEEjTsDux_ + + + + Données générales de surfaces (Pour export) + ARCHICAD BIM Quantities + + + + + + + + + + 0_Lb3luX2b0ZDyjxqDR2fj + + + + + + + + + + + + 3KXnMQaRz0Z9PTKJ56VrVt + + + + INT - Générique 30.0 cm + 2455109 + notdefined + + + 3Z6S2MNSg0pZc06vfl7GB0 + + + + + + + + + + + + + + + + + + + + 3WXq88Ew$DTQC2$57T45EZ + + + + + + + + + + + + + + + Reference + + Espace 11 + + + + Category + + Jour + + + + 3_LKo0I831BRHCxgZj4s1C + + + + Pset_SpaceCommon + + + + + + + 1WT$IC9DfzAlNlFR_anO0K + + + + + + + + + + + + Ratio surfaces vitrées + + 0. + + + + Surface vitrée légale + + 0.1 + + + + Surface vitrée réglementée? + + false + + + + 3eukMDGeyW9oXPNf6AAvnA + + + + Surfaces vitrées (Formule) + + + + + + + + 1hOO0joaXaQrnkTFZ2mKuB + + + + + + + + + + + + ID dynamique par classification + + Espace - 001 + + + + 3q0mTXXBp1daRaa01MIZVq + + + + Description du produit (Formule) + + + + + + 21AwKcOZTZ$ooU8HzKT85i + + + + + + + + + + + + Renovation Status + + Existing + + + + 3KQbdQcnjuiem908_jmAzX + + + + AC_Pset_RenovationAndPhasing + + + + + + 1r3tR7ZTYWC3oMal6G_20j + + + + + + + + + + + + Epaisseur du faux-plafond + 0.3 + + + Niveau inférieur du faux-plafond + 2.7 + + + 16_F0ewbeLg7v1FfSr$OQs + + + + Faux-plafonds (Formule) + ARCHICAD BIM Quantities + + + + + + + 0xis$DJcXTXC811yFBATxw + + + + + + + + + + + + + + + + + + + + Reference + + Espace 12 + + + + Category + + Jour + + + + 0WRtxr67yteQwsKZvBLDCU + + + + Pset_SpaceCommon + + + + + + + 1xoS5VBoy4sJs0uFRtHxL2 + + + + + + + + + + + + Ratio surfaces vitrées + + 0. + + + + Surface vitrée légale + + 0.1 + + + + Surface vitrée réglementée? + + false + + + + 0IYKj17Qpsp3Yy4OTG6pTp + + + + Surfaces vitrées (Formule) + + + + + + + + 3dwHW1NYON4nSc64OTHrmJ + + + + + + + + + + + + ID dynamique par classification + + Espace - 001 + + + + 0erJwpFa4vi3hX6YXsiKlY + + + + Description du produit (Formule) + + + + + + 0pv4lUrCyXZYLX$ECeunxs + + + + + + + + + + + + Renovation Status + + Existing + + + + 3jDWPnLvYM4M0Ns8wnwoOt + + + + AC_Pset_RenovationAndPhasing + + + + + + 3KDsKzixqp7ox7301EGlYq + + + + + + + + + + + + Epaisseur du faux-plafond + 0.3 + + + Niveau inférieur du faux-plafond + 2.7 + + + 0R6PVYiBe3KRzVbCgq39fZ + + + + Faux-plafonds (Formule) + ARCHICAD BIM Quantities + + + + + + + 2y5loBRHHPuMU00NF0nBya + + + + + + + + + + + + + + + + + + + + Reference + + Espace 13 + + + + Category + + Jour + + + + 0LNQmzifZMF07PNqBKS_25 + + + + Pset_SpaceCommon + + + + + + + 1G1bS_v8THEKkkctUMIV$M + + + + + + + + + + + + Ratio surfaces vitrées + + 0. + + + + Surface vitrée légale + + 0.1 + + + + Surface vitrée réglementée? + + false + + + + 2Gec_EUy9xz8F3VkAcshPz + + + + Surfaces vitrées (Formule) + + + + + + + + 0Y85jX5x8Ot_exR1aUG$aj + + + + + + + + + + + + ID dynamique par classification + + Espace - 001 + + + + 2guK1mAAIZ0oE_WCpcYzZP + + + + Description du produit (Formule) + + + + + + 00ys44J5lxaMNv_WJVj1CB + + + + + + + + + + + + Renovation Status + + Existing + + + + 05dv_oQvmFVoQKAABdK4tP + + + + AC_Pset_RenovationAndPhasing + + + + + + 2YfiHQGP8pFfL6b$RBjLw9 + + + + + + + + + + + + Epaisseur du faux-plafond + 0.3 + + + Niveau inférieur du faux-plafond + 2.7 + + + 05DTI0T2ojOItoiCFo$3UC + + + + Faux-plafonds (Formule) + ARCHICAD BIM Quantities + + + + + + + 2zzlM4omfpe6$rbAKkASb2 + + + + + + + + + + + + + + + + + + + + Reference + + Espace 14 + + + + Category + + Jour + + + + 1CBO_9nNZe7gNMbB0DCA4R + + + + Pset_SpaceCommon + + + + + + + 0Y0u1lh7Ww5ReLSaNPpKVr + + + + + + + + + + + + Ratio surfaces vitrées + + 0. + + + + Surface vitrée légale + + 0.1 + + + + Surface vitrée réglementée? + + false + + + + 1f0aQbaCZjwudhS6IqG2PY + + + + Surfaces vitrées (Formule) + + + + + + + + 3AwBYHWGNHjWbnwhCmtC9O + + + + + + + + + + + + ID dynamique par classification + + Espace - 001 + + + + 2OBg7Z_T0z1fLN$FkF5Vim + + + + Description du produit (Formule) + + + + + + 2JwKvrhFb87HAj5oYrgZC1 + + + + + + + + + + + + Renovation Status + + Existing + + + + 36iByfTDncmYO7mUCAXtNg + + + + AC_Pset_RenovationAndPhasing + + + + + + 3NHyHK7uIiQxtR1WOuphiB + + + + + + + + + + + + Epaisseur du faux-plafond + 0.3 + + + Niveau inférieur du faux-plafond + 2.7 + + + 0QZzs5qBGNIj5tsedUu_wK + + + + Faux-plafonds (Formule) + ARCHICAD BIM Quantities + + + + + + + 0m2IN8z2UhqC3A0AuGHS5a + + + + + + + + + + + + AboveGround + + unknown + + + + 1ST2BUXCysVLPP3XJZ3Sf0 + + + + Pset_BuildingStoreyCommon + + + + + + 05By6mCdTacvCTFJIxdIZ2 + + + + + + + + + + + + + 1. + 0. + 0. + + + + + 0. + 0. + 1. + + + + + 0. + 0. + -6. + + + + + + + + + + + + + + + + + + + + + + + 3kknIDuW56e9XuW3A6wxTo + + + + Toit de base:Toiture:5352729 + Toit de base:Toiture + + + + 5352729 + notdefined + + + 3NRjDWHHaMiBVpayOofHDD + + + + + + + + + + + + Reference + + Toiture + + + + 0bCpuKrV4LLcSTcRDHZ5hn + + + + Pset_QuantityTakeOff + + + + + + 3X56vgBjxs2JiMtdVXRzO7 + + + + + + + + + + + + IsExternal + + true + + + + Reference + + Toiture + + + + ProjectedArea + + 64.31 + + + + 06NPDpNiZw32z62rxTw8uX + + + + Pset_RoofCommon + + + + + + + + 2M0_jV5pG3e_hsy5UBtZvx + + + + + + + + + + + + + 0. + 1. + 0. + + + + + 0. + 0. + 1. + + + + + 5.1 + -0.35 + 6. + + + + + + + + + + + + + + + + + + + + + + + + 0. + -5.45 + + + + + 5.9 + -5.45 + + + + + 5.9 + 5.45 + + + + + 0. + 5.45 + + + + + + + + + + + + + area + + + + + + + + 1. + 0. + 0. + + + + + 0. + 0. + 1. + + + + + 0. + 0. + 0. + + + + + + + + + + + + + + + + 0. + 0. + 1. + + + + + + + + + + + + + 0.54 + + + 0.3803921569 + 0.2941176471 + 0.2431372549 + + + + + + 0. + + 0.7 + + + 0.5 + + notdefined + + + Terre + both + + + + + + + + + + + + + + + + + + + + + + Body + SweptSolid + + + + + + A-ROOF-____-OTLN.Modèle IFC + + + + + + + + + + + 3kknIDuW56e9XuW326wxTo + + + + Toit de base:Toiture:5352729 + Toit de base:Toiture + + + + + + + 5352729 + roof + + + 3Wy43$lzexvUtWFi5N6B3w + + + + + + + + + + + + Matériau de construction IFC + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.54 + unknown + + + + + + Matériau de construction IFC 0.54 + + + + + + axis3 + negative + 0.54 + + + 1SOXWt5vo5yJjQ7g7D6jAw + + + + + + + + + + + + Reference + + Toiture + + + + 1iSiZ44bDlUWTlPIag2F51 + + + + Pset_QuantityTakeOff + + + + + + 2bRBgwf5dLFluvzp4MYGja + + + + + + + + + + + + PitchAngle + + 0. + + + + Reference + + Toiture + + + + ThermalTransmittance + + 0.1351178059 + + + + IsExternal + + true + + + + 1ATjt$JVvRjwv5VUSRhFKb + + + + Pset_SlabCommon + + + + + + + + + 3t4CaL4cQUoPOrwVEegy96 + + + + + + + + + + + + Type de Construction + + Constitution Toit, chevrons et pannes + + + + 2_pVhOC55WSkcbm2VsvBr_ + + + + Limites spatiales + + + + + + 3AeLID$00vL3dQBWEpnsyY + + + + + + + + + + + + ID dynamique par classification + + Toit - Toit de base:Toiture:5352729 + + + + 3n6z0BoEST0F0zyUkwKPVp + + + + Description du produit (Formule) + + + + + + 3Ycbk1okEvHceqKNMTePog + + + + + + + + + + + + Surface supérieure (Texture) + + Terre + + + + Surface latérale (Texture) + + Terre + + + + Surface inférieure (Texture) + + Terre + + + + 3ltTErFMIArcKtIiY59ZI3 + + + + Données générales de surfaces (Pour export) + + + + + + + + 0gZ$Xy2niv4TFob5hha1Zr + + + + + + + + + + + + Renovation Status + + Existing + + + + 0uRzyKFs8NRzk0ny6c3vIS + + + + AC_Pset_RenovationAndPhasing + + + + + + 0_b06kMUb3dkZuCm75$vXf + + + + + + + + + + + + Surface conditionnelle supérieure + 64.31 + + + Surface latérale + 18.144 + + + Surface conditionnelle inférieure + 64.31 + + + 2SXq2NBJrro8Ff7GO8EQt3 + + + + Données générales de surfaces (Pour export) + ARCHICAD BIM Quantities + + + + + + + + 3vTqhTNJ5pSUUHaIrqJYqc + + + + + + + + + + + + Toit + + + + + + 2pQkoGUPpovOvSpTAdqX_z + + + + Classification ARCHICAD 22 + + + + + + + + + 3S9FHooEJdsAtEa_DlmKfK + + + + Matériau de construction IFC 540 + DC24F472-C8E4-E7D8-ADCE-93E36FC14A54 + roof + + + 3CxMvTO7bq$CPRwsCvFEa7 + + + + + + + + + + + + 0L6Ksk7iTBT9hmk0knebY3 + + + + Par défaut:293242 + + + Reference + + Par défaut + + + + 39kY5ptYVzul3$oKaPqu7H + + + + Pset_ZoneCommon + + + + + + 242fSVs3Ygwcu91GmAex7F + + + + + + + + + + + + 0L6Ksk7iTBT9hmk0gnebY3 + + + + + + + + + + + + + + + + + + + 1. + 0. + 0. + + + + + 0. + 0. + -1. + + + + + 0. + 1.75 + 2.7 + + + + + + + + + + + + + + + + + + + + + 0. + 1.75 + 0. + + + + + 4.95 + 1.75 + 0. + + + + + 4.95 + 0. + 0. + + + + + 0. + 0. + 0. + + + + + 0. + 1.75 + 0. + + + + + + + + + + + + + continuous + false + + + + + + + + + false + + + + + + + + + + + + + + + + + 106rH$bAf6LRvJEm3hPrpZ + + + + 2ndLevel + 2a + + + + + + + + + + physical + internal + + + + -1. + 0. + 0. + + + + + 0. + 0. + -1. + + + + + 4.950000045 + 1.849999987 + 2.7 + + + + + + + + + + + + + + + + + + + + + 0. + 3.149999991 + 0. + + + + + 1.850000089 + 3.149999991 + 0. + + + + + 1.850000089 + 0. + 0. + + + + + 0. + 0. + 0. + + + + + 0. + 3.149999991 + 0. + + + + + + + + + + + + + continuous + false + + + + + + + + + false + + + + + + + + + + + + + + + + + 3B_FlwygFLM_DaXTI_J8x6 + + + + 2ndLevel + 2a + + + + + + + + + + physical + internal + + + + 0. + 1. + 0. + + + + + -1. + 0. + 0. + + + + + 4.95 + 2.55 + 2.7 + + + + + + + + + + + + + + + + + + + + + 0. + 2.7 + 0. + + + + + 2.45 + 2.7 + 0. + + + + + 2.45 + 0. + 0. + + + + + 0. + 0. + 0. + + + + + 0. + 2.7 + 0. + + + + + + + + + + + + + continuous + false + + + + + + + + + false + + + + + + + + + + + + + + + + + 3vm2zwcpyxV9EbvSaGY82L + + + + 2ndLevel + 2a + + + + + + + + + + physical + internal + + + + 0. + -1. + 0. + + + + + -1. + 0. + 0. + + + + + 4.95 + 2.45 + 0. + + + + + + + + + + + + + + + + + + + + + 0. + 2.7 + 0. + + + + + 2.45 + 2.7 + 0. + + + + + 2.45 + 0. + 0. + + + + + 0. + 0. + 0. + + + + + 0. + 2.7 + 0. + + + + + + + + + + + + + continuous + false + + + + + + + + + false + + + + + + + + + + + + + + + + + 0x_u8ig1_7FT6Z0rHZf$Sk + + + + 2ndLevel + 2a + + + + + + + + + + physical + internal + + + + -1. + 0. + 0. + + + + + 0. + 0. + -1. + + + + + 3. + 1.85 + 2.7 + + + + + + + + + + + + + + + + + + + + + 0. + 3.15 + 0. + + + + + 3. + 3.15 + 0. + + + + + 3. + 0. + 0. + + + + + 0. + 0. + 0. + + + + + 0. + 3.15 + 0. + + + + + + + + + + + + + continuous + false + + + + + + + + + false + + + + + + + + + + + + + + + + + 21fFoGqh4JUveGDYRT8Msd + + + + 2ndLevel + 2a + + + + + + + + + + physical + internal + + + + 0. + 1. + 0. + + + + + 0. + 0. + 1. + + + + + 4.95 + 0. + 0. + + + + + + + + + + + + + + + + + + + + + 0. + 4.95 + 0. + + + + + 5. + 4.95 + 0. + + + + + 5. + 0. + 0. + + + + + 0. + 0. + 0. + + + + + 0. + 4.95 + 0. + + + + + + + + + + + + + continuous + false + + + + + + + + + false + + + + + + + + + + + + + + + + + 2anK_EploqcR6sta8_iRhn + + + + 2ndLevel + 2a + + + + + + + + + + physical + external + + + + 0. + 0. + -1. + + + + + 1. + 0. + 0. + + + + + 0. + 2.385279860E-8 + 2.700000012 + + + + + + + + + + + + + + + + + + + + + 0. + 4.999999976 + 0. + + + + + 2.700000012 + 4.999999976 + 0. + + + + + 2.700000012 + 0. + 0. + + + + + 0. + 0. + 0. + + + + + 0. + 4.999999976 + 0. + + + + + + + + + + + + + continuous + false + + + + + + + + + false + + + + + + + + + + + + + + + + + 0UIS2iMkGcz5HOENDoS_wh + + + + 2ndLevel + 2a + + + + + + + + + + physical + external + + + + -1. + 0. + 0. + + + + + 0. + -1. + 0. + + + + + 4.950000072 + 5. + 2.700000012 + + + + + + + + + + + + + + + + + + + + + 0. + 2.700000012 + 0. + + + + + 4.950000048 + 2.700000012 + 0. + + + + + 4.950000048 + 0. + 0. + + + + + 0. + 0. + 0. + + + + + 0. + 2.700000012 + 0. + + + + + + + + + + + + + continuous + false + + + + + + + + + false + + + + + + + + + + + + + + + + + 2zE9AVkNho4h6DwDNuPHu_ + + + + 2ndLevel + 2a + + + + + + + + + + physical + external + + + + 0. + 0. + -1. + + + + + 0. + 1. + 0. + + + + + 4.950000018 + 2.838680402E-10 + 2.699999982 + + + + + + + + + + + + + + + + + + + + + 0. + 4.950000018 + 0. + + + + + 2.699999982 + 4.950000018 + 0. + + + + + 2.699999982 + 0. + 0. + + + + + 0. + 0. + 0. + + + + + 0. + 4.950000018 + 0. + + + + + + + + + + + + + continuous + false + + + + + + + + + false + + + + + + + + + + + + + + + + + 2s9Vhy5_bxLdePoLWS8qvg + + + + 2ndLevel + 2a + + + + + + + + + + physical + external + + + + 0. + 1. + 0. + + + + + 0. + 0. + -1. + + + + + 0. + 0. + 2.7 + + + + + + + + + + + + + + + + + + + + + 0. + 3. + 0. + + + + + 0.6 + 3. + 0. + + + + + 0.6 + 0. + 0. + + + + + 0. + 0. + 0. + + + + + 0. + 3. + 0. + + + + + + + + + + + + + continuous + false + + + + + + + + + false + + + + + + + + + + + + + + + + + 0TIOZOkBuf8T8U2sRGMrwz + + + + 2ndLevel + 2a + + + + + + + + + + physical + internal + + + + -1. + 0. + 0. + + + + + 0. + 0. + -1. + + + + + 4.95 + 0.7 + 2.7 + + + + + + + + + + + + + + + + + + + + + 0. + 1.75 + 0. + + + + + 4.95 + 1.75 + 0. + + + + + 4.95 + 0. + 0. + + + + + 0. + 0. + 0. + + + + + 0. + 1.75 + 0. + + + + + + + + + + + + + continuous + false + + + + + + + + + false + + + + + + + + + + + + + + + + + 2QEVQ7wcPaf0JUZGy$FumJ + + + + 2ndLevel + 2a + + + + + + + + + + physical + internal + + + + 0. + 1. + 0. + + + + + -1. + 0. + 0. + + + + + 4.95 + 0. + 2.7 + + + + + + + + + + + + + + + + + + + + + 0. + 2.7 + 0. + + + + + 2.45 + 2.7 + 0. + + + + + 2.45 + 0. + 0. + + + + + 0. + 0. + 0. + + + + + 0. + 2.7 + 0. + + + + + + + + + + + + + continuous + false + + + + + + + + + false + + + + + + + + + + + + + + + + + 32jZ47HE_1n_8WVF7oj$Cc + + + + 2ndLevel + 2a + + + + + + + + + + physical + internal + + + + -1. + 0. + 0. + + + + + 0. + 0. + -1. + + + + + 4.950000045 + -4.470368964E-9 + 2.7 + + + + + + + + + + + + + + + + + + + + + 0. + 0.6000000179 + 0. + + + + + 1.850000089 + 0.6000000179 + 0. + + + + + 1.850000089 + 0. + 0. + + + + + 0. + 0. + 0. + + + + + 0. + 0.6000000179 + 0. + + + + + + + + + + + + + continuous + false + + + + + + + + + false + + + + + + + + + + + + + + + + + 00k8XEVCS50BhUGibCyk_W + + + + 2ndLevel + 2a + + + + + + + + + + physical + internal + + + + 0. + 0. + 1. + + + + + 0. + 1. + 0. + + + + + 0. + 2.838493884E-10 + 0. + + + + + + + + + + + + + + + + + + + + + 0. + 4.95 + 0. + + + + + 2.7 + 4.95 + 0. + + + + + 2.7 + 0. + 0. + + + + + 0. + 0. + 0. + + + + + 0. + 4.95 + 0. + + + + + + + + + + + + + continuous + false + + + + + + + + + false + + + + + + + + + + + + + + + + + 3d$pe3QeJ0jvI4_wUeMbos + + + + 2ndLevel + 2a + + + + + + + + + + physical + internal + + + + 0. + 1. + 0. + + + + + 0. + 0. + 1. + + + + + 4.95 + 0. + 0. + + + + + + + + + + + + + + + + + + + + + 0. + 4.95 + 0. + + + + + 2.45 + 4.95 + 0. + + + + + 2.45 + 0. + 0. + + + + + 0. + 0. + 0. + + + + + 0. + 4.95 + 0. + + + + + + + + + + + + + continuous + false + + + + + + + + + false + + + + + + + + + + + + + + + + + 3rgk3wQvLFUPMrcwCHxiPR + + + + 2ndLevel + 2a + + + + + + + + + + physical + external + + + + 0. + 0. + -1. + + + + + 1. + 0. + 0. + + + + + 0. + 0. + 2.7 + + + + + + + + + + + + + + + + + + + + + 0. + 2.45 + 0. + + + + + 2.7 + 2.45 + 0. + + + + + 2.7 + 0. + 0. + + + + + 0. + 0. + 0. + + + + + 0. + 2.45 + 0. + + + + + + + + + + + + + continuous + false + + + + + + + + + false + + + + + + + + + + + + + + + + + 1dsysC_CIhbyZ3Rp4l_rqI + + + + 2ndLevel + 2a + + + + + + + + + + physical + external + + + + -1. + 0. + 0. + + + + + 0. + -1. + 0. + + + + + 4.950000045 + 2.45 + 2.699999982 + + + + + + + + + + + + + + + + + + + + + 0. + 2.699999982 + 0. + + + + + 4.950000018 + 2.699999982 + 0. + + + + + 4.950000018 + 0. + 0. + + + + + 0. + 0. + 0. + + + + + 0. + 2.699999982 + 0. + + + + + + + + + + + + + continuous + false + + + + + + + + + false + + + + + + + + + + + + + + + + + 3tST5IU045WaMSw9VZIb7c + + + + 2ndLevel + 2a + + + + + + + + + + physical + external + + + + 1. + 0. + 0. + + + + + 0. + 0. + -1. + + + + + 1.95 + 2.45 + 2.7 + + + + + + + + + + + + + + + + + + + + + 0. + 2.450000025 + 0. + + + + + 3. + 2.450000025 + 0. + + + + + 3. + 0. + 0. + + + + + 0. + 0. + 0. + + + + + 0. + 2.450000025 + 0. + + + + + + + + + + + + + continuous + false + + + + + + + + + false + + + + + + + + + + + + + + + + + 0qygEFLhauVNSFuvhzPeEO + + + + 2ndLevel + 2a + + + + + + + + + + physical + internal + + + + 0. + 0. + 1. + + + + + 0. + 1. + 0. + + + + + 0. + -2.838600466E-10 + 0. + + + + + + + + + + + + + + + + + + + + + 0. + 4.95 + 0. + + + + + 2.7 + 4.95 + 0. + + + + + 2.7 + 0. + 0. + + + + + 0. + 0. + 0. + + + + + 0. + 4.95 + 0. + + + + + + + + + + + + + continuous + false + + + + + + + + + false + + + + + + + + + + + + + + + + + 3u461vsrt_FXSXWjSmiHuS + + + + 2ndLevel + 2a + + + + + + + + + + physical + internal + + + + 0. + 1. + 0. + + + + + 1. + 0. + 0. + + + + + 0. + 0. + 0. + + + + + + + + + + + + + + + + + + + + + 0. + 2.7 + 0. + + + + + 2.45 + 2.7 + 0. + + + + + 2.45 + 0. + 0. + + + + + 0. + 0. + 0. + + + + + 0. + 2.7 + 0. + + + + + + + + + + + + + continuous + false + + + + + + + + + false + + + + + + + + + + + + + + + + + 0Ea2jnUsH$xsQ8Xz5wq5TT + + + + 2ndLevel + 2a + + + + + + + + + + physical + internal + + + + 1. + 0. + 0. + + + + + 0. + 0. + -1. + + + + + -4.470352710E-8 + 2.449999991 + 2.7 + + + + + + + + + + + + + + + + + + + + + 0. + 2.450000004 + 0. + + + + + 1.850000089 + 2.450000004 + 0. + + + + + 1.850000089 + 0. + 0. + + + + + 0. + 0. + 0. + + + + + 0. + 2.450000004 + 0. + + + + + + + + + + + + + continuous + false + + + + + + + + + false + + + + + + + + + + + + + + + + + 0kvOorVZlstnvj$87KQg9$ + + + + 2ndLevel + 2a + + + + + + + + + + physical + internal + + + + 0. + 1. + 0. + + + + + 0. + 0. + 1. + + + + + 4.95 + 0. + 0. + + + + + + + + + + + + + + + + + + + + + 0. + 4.95 + 0. + + + + + 2.45 + 4.95 + 0. + + + + + 2.45 + 0. + 0. + + + + + 0. + 0. + 0. + + + + + 0. + 4.95 + 0. + + + + + + + + + + + + + continuous + false + + + + + + + + + false + + + + + + + + + + + + + + + + + 1mzIbAh5_Om3KByS$aIXHg + + + + 2ndLevel + 2a + + + + + + + + + + physical + external + + + + 1. + 0. + 0. + + + + + 0. + -1. + 0. + + + + + -7.152564319E-8 + 2.45 + 0. + + + + + + + + + + + + + + + + + + + + + 0. + 2.700000012 + 0. + + + + + 4.950000048 + 2.700000012 + 0. + + + + + 4.950000048 + 0. + 0. + + + + + 0. + 0. + 0. + + + + + 0. + 2.700000012 + 0. + + + + + + + + + + + + + continuous + false + + + + + + + + + false + + + + + + + + + + + + + + + + + 3qDfQc1FWuq8ZZr4r4RSip + + + + 2ndLevel + 2a + + + + + + + + + + physical + external + + + + 0. + 1. + 0. + + + + + -1. + 0. + 0. + + + + + 4.95 + 0. + 2.7 + + + + + + + + + + + + + + + + + + + + + 0. + 2.7 + 0. + + + + + 2.45 + 2.7 + 0. + + + + + 2.45 + 0. + 0. + + + + + 0. + 0. + 0. + + + + + 0. + 2.7 + 0. + + + + + + + + + + + + + continuous + false + + + + + + + + + false + + + + + + + + + + + + + + + + + 22oyrS517rnckk0hiQxaQD + + + + 2ndLevel + 2a + + + + + + + + + + physical + external + + + + 0. + 0. + 1. + + + + + 0. + -1. + 0. + + + + + 3.15 + 3. + 0. + + + + + + + + + + + + + + + + + + + + + 0. + 3.15 + 0. + + + + + 3. + 3.15 + 0. + + + + + 3. + 0. + 0. + + + + + 0. + 0. + 0. + + + + + 0. + 3.15 + 0. + + + + + + + + + + + + + continuous + false + + + + + + + + + false + + + + + + + + + + + + + + + + + 0H7VLC_vhwPA5Cs9RR8AEL + + + + 2ndLevel + 2a + + + + + + + + + + physical + internal + + + + 0. + -1. + 0. + + + + + -1. + 0. + 0. + + + + + 3.15 + 3. + 0. + + + + + + + + + + + + + + + + + + + + + 0. + 3. + 0. + + + + + 3. + 3. + 0. + + + + + 3. + 0. + 0. + + + + + 0. + 0. + 0. + + + + + 0. + 3. + 0. + + + + + + + + + + + + + continuous + false + + + + + + + + + false + + + + + + + + + + + + + + + + + 3J9RfXIIZX_FfOi8xsg84d + + + + 2ndLevel + 2a + + + + + + + + + + physical + internal + + + + 1. + 0. + 0. + + + + + 0. + 0. + 1. + + + + + 0. + 0. + 0. + + + + + + + + + + + + + + + + + + + + + 0. + 3. + 0. + + + + + 3.15 + 3. + 0. + + + + + 3.15 + 0. + 0. + + + + + 0. + 0. + 0. + + + + + 0. + 3. + 0. + + + + + + + + + + + + + continuous + false + + + + + + + + + false + + + + + + + + + + + + + + + + + 32nPBuMHEIdEb3BZPc8QJJ + + + + 2ndLevel + 2a + + + + + + + + + + physical + internal + + + + 1. + 0. + 0. + + + + + 0. + 0. + -1. + + + + + 0. + 3. + 3. + + + + + + + + + + + + + + + + + + + + + 0. + 3. + 0. + + + + + 3.15 + 3. + 0. + + + + + 3.15 + 0. + 0. + + + + + 0. + 0. + 0. + + + + + 0. + 3. + 0. + + + + + + + + + + + + + continuous + false + + + + + + + + + false + + + + + + + + + + + + + + + + + 0SBDC7LAeNFTIc18PLWoAj + + + + 2ndLevel + 2a + + + + + + + + + + physical + external + + + + 0. + -1. + 0. + + + + + 1. + 0. + 0. + + + + + 0. + 3.000000072 + 3.000000048 + + + + + + + + + + + + + + + + + + + + + 0. + 3.000000048 + 0. + + + + + 3.000000048 + 3.000000048 + 0. + + + + + 3.000000048 + 0. + 0. + + + + + 0. + 0. + 0. + + + + + 0. + 3.000000048 + 0. + + + + + + + + + + + + + continuous + false + + + + + + + + + false + + + + + + + + + + + + + + + + + 3dpO9I1ks7r7DcblVGfpqZ + + + + 2ndLevel + 2a + + + + + + + + + + physical + external + + + + 0. + 0. + -1. + + + + + 0. + 1. + 0. + + + + + 3.149999988 + 0. + 2.99999997 + + + + + + + + + + + + + + + + + + + + + 0. + 3.149999988 + 0. + + + + + 2.99999997 + 3.149999988 + 0. + + + + + 2.99999997 + 0. + 0. + + + + + 0. + 0. + 0. + + + + + 0. + 3.149999988 + 0. + + + + + + + + + + + + + continuous + false + + + + + + + + + false + + + + + + + + + + + + + + + + + 0BelQcNy8GmKdAGE0JnHBw + + + + 2ndLevel + 2a + + + + + + + + + + physical + external + + + + -1. + 0. + 0. + + + + + 0. + -1. + 0. + + + + + 6.9 + 1.75 + 3. + + + + + + + + + + + + + + + + + + + + + 0. + 3. + 0. + + + + + 3.8 + 3. + 0. + + + + + 3.8 + 0. + 0. + + + + + 0. + 0. + 0. + + + + + 0. + 3. + 0. + + + + + + + + + + + + + continuous + false + + + + + + + + + false + + + + + + + + + + + + + + + + + 2Y5BVAnNCGcVCtF3frVDog + + + + 2ndLevel + 2a + + + + + + + + + + physical + internal + + + + -1. + 0. + 0. + + + + + 0. + -1. + 0. + + + + + 3. + 1.75 + 3. + + + + + + + + + + + + + + + + + + + + + 0. + 3. + 0. + + + + + 3. + 3. + 0. + + + + + 3. + 0. + 0. + + + + + 0. + 0. + 0. + + + + + 0. + 3. + 0. + + + + + + + + + + + + + continuous + false + + + + + + + + + false + + + + + + + + + + + + + + + + + 3MBTN3SP09mt7si79KhiJx + + + + 2ndLevel + 2a + + + + + + + + + + physical + internal + + + + 0. + 1. + 0. + + + + + 0. + 0. + 1. + + + + + 10. + 0. + 0. + + + + + + + + + + + + + + + + + + + + + 0. + 4.95 + 0. + + + + + 1.75 + 4.95 + 0. + + + + + 1.75 + 0. + 0. + + + + + 0. + 0. + 0. + + + + + 0. + 4.95 + 0. + + + + + + + + + + + + + continuous + false + + + + + + + + + false + + + + + + + + + + + + + + + + + 0vVHrx5du3t_uaBa3owStS + + + + 2ndLevel + 2a + + + + + + + + + + physical + internal + + + + 0. + 1. + 0. + + + + + 0. + 0. + 1. + + + + + 4.95 + -2.838640434E-10 + 0. + + + + + + + + + + + + + + + + + + + + + 0. + 4.95 + 0. + + + + + 1.75 + 4.95 + 0. + + + + + 1.75 + 0. + 0. + + + + + 0. + 0. + 0. + + + + + 0. + 4.95 + 0. + + + + + + + + + + + + + continuous + false + + + + + + + + + false + + + + + + + + + + + + + + + + + 0YpOz$1JldKz98IoDbeeAe + + + + 2ndLevel + 2a + + + + + + + + + + physical + internal + + + + 1. + 0. + 0. + + + + + 0. + -1. + 0. + + + + + 7. + 1.75 + 0. + + + + + + + + + + + + + + + + + + + + + 0. + 3. + 0. + + + + + 3. + 3. + 0. + + + + + 3. + 0. + 0. + + + + + 0. + 0. + 0. + + + + + 0. + 3. + 0. + + + + + + + + + + + + + continuous + false + + + + + + + + + false + + + + + + + + + + + + + + + + + 02ChMk$A04XGKI_nXrJDTT + + + + 2ndLevel + 2a + + + + + + + + + + physical + internal + + + + 1. + 0. + 0. + + + + + 0. + 0. + -1. + + + + + 0. + 1.75 + 3. + + + + + + + + + + + + + + + + + + + + + 0. + 1.75 + 0. + + + + + 10. + 1.75 + 0. + + + + + 10. + 0. + 0. + + + + + 0. + 0. + 0. + + + + + 0. + 1.75 + 0. + + + + + + + + + + + + + continuous + false + + + + + + + + + false + + + + + + + + + + + + + + + + + 1OY$3GYasN1$k7YnXS6Rkt + + + + 2ndLevel + 2a + + + + + + + + + + physical + external + + + + 0. + -1. + 0. + + + + + 1. + 0. + 0. + + + + + 0. + 1.75 + 2.99999997 + + + + + + + + + + + + + + + + + + + + + 0. + 2.99999997 + 0. + + + + + 1.749999976 + 2.99999997 + 0. + + + + + 1.749999976 + 0. + 0. + + + + + 0. + 0. + 0. + + + + + 0. + 2.99999997 + 0. + + + + + + + + + + + + + continuous + false + + + + + + + + + false + + + + + + + + + + + + + + + + + 1TdcZBKMUxcTpUw51zkiCO + + + + 2ndLevel + 2a + + + + + + + + + + physical + external + + + + 0. + 0. + -1. + + + + + -1. + 0. + 0. + + + + + 10. + 1.75 + 3. + + + + + + + + + + + + + + + + + + + + + 0. + 1.75 + 0. + + + + + 3. + 1.75 + 0. + + + + + 3. + 0. + 0. + + + + + 0. + 0. + 0. + + + + + 0. + 1.75 + 0. + + + + + + + + + + + + + continuous + false + + + + + + + + + false + + + + + + + + + + + + + + + + + 3JI5ZwwtvmdtfBG4FUu_2W + + + + 2ndLevel + 2a + + + + + + + + + + physical + external + + + + 0. + 0. + -1. + + + + + 0. + 1. + 0. + + + + + 9.999999973 + 0. + 2.999999946 + + + + + + + + + + + + + + + + + + + + + 0. + 9.999999973 + 0. + + + + + 2.999999946 + 9.999999973 + 0. + + + + + 2.999999946 + 0. + 0. + + + + + 0. + 0. + 0. + + + + + 0. + 9.999999973 + 0. + + + + + + + + + + + + + continuous + false + + + + + + + + + false + + + + + + + + + + + + + + + + + 3f4CjXh$K2DUpBarsUyOr4 + + + + 2ndLevel + 2a + + + + + + + + + + physical + external + + + + 0. + 1. + 0. + + + + + -1. + 0. + 0. + + + + + 3.15 + 0. + 3. + + + + + + + + + + + + + + + + + + + + + 0. + 3. + 0. + + + + + 3. + 3. + 0. + + + + + 3. + 0. + 0. + + + + + 0. + 0. + 0. + + + + + 0. + 3. + 0. + + + + + + + + + + + + + continuous + false + + + + + + + + + false + + + + + + + + + + + + + + + + + 27OLk3bCiLysNPGLL7ivbb + + + + 2ndLevel + 2a + + + + + + + + + + physical + internal + + + + 0. + 0. + -1. + + + + + 0. + 1. + 0. + + + + + 3.15 + 0. + 3. + + + + + + + + + + + + + + + + + + + + + 0. + 3.15 + 0. + + + + + 3. + 3.15 + 0. + + + + + 3. + 0. + 0. + + + + + 0. + 0. + 0. + + + + + 0. + 3.15 + 0. + + + + + + + + + + + + + continuous + false + + + + + + + + + false + + + + + + + + + + + + + + + + + 2qLEvIe3_ZV6M79pvZEaqn + + + + 2ndLevel + 2a + + + + + + + + + + physical + internal + + + + -1. + 0. + 0. + + + + + 0. + 0. + 1. + + + + + 2.450000025 + 3. + 0. + + + + + + + + + + + + + + + + + + + + + 0. + 3. + 0. + + + + + 2.450000025 + 3. + 0. + + + + + 2.450000025 + 0. + 0. + + + + + 0. + 0. + 0. + + + + + 0. + 3. + 0. + + + + + + + + + + + + + continuous + false + + + + + + + + + false + + + + + + + + + + + + + + + + + 3EIa_e0hmI2Ev44ym3uLmw + + + + 2ndLevel + 2a + + + + + + + + + + physical + internal + + + + 0. + 1. + 0. + + + + + 0. + 0. + 1. + + + + + 3.15 + 0. + 0. + + + + + + + + + + + + + + + + + + + + + 0. + 0.6 + 0. + + + + + 3. + 0.6 + 0. + + + + + 3. + 0. + 0. + + + + + 0. + 0. + 0. + + + + + 0. + 0.6 + 0. + + + + + + + + + + + + + continuous + false + + + + + + + + + false + + + + + + + + + + + + + + + + + 3Raj6ICHkQDxR263s40Qyj + + + + 2ndLevel + 2a + + + + + + + + + + physical + internal + + + + 1. + 0. + 0. + + + + + 0. + 0. + -1. + + + + + 0. + 3. + 3. + + + + + + + + + + + + + + + + + + + + + 0. + 3. + 0. + + + + + 3.15 + 3. + 0. + + + + + 3.15 + 0. + 0. + + + + + 0. + 0. + 0. + + + + + 0. + 3. + 0. + + + + + + + + + + + + + continuous + false + + + + + + + + + false + + + + + + + + + + + + + + + + + 176OAboZ0sMgPc7o7vaeJU + + + + 2ndLevel + 2a + + + + + + + + + + physical + external + + + + 0. + 1. + 0. + + + + + 1. + 0. + 0. + + + + + 0. + -7.152564230E-8 + 0. + + + + + + + + + + + + + + + + + + + + + 0. + 3.000000048 + 0. + + + + + 3.000000048 + 3.000000048 + 0. + + + + + 3.000000048 + 0. + 0. + + + + + 0. + 0. + 0. + + + + + 0. + 3.000000048 + 0. + + + + + + + + + + + + + continuous + false + + + + + + + + + false + + + + + + + + + + + + + + + + + 1cB9cvcPlXYMr5kT5L55al + + + + 2ndLevel + 2a + + + + + + + + + + physical + external + + + + -1. + 0. + 0. + + + + + 0. + -1. + 0. + + + + + 3.15 + 3. + 3. + + + + + + + + + + + + + + + + + + + + + 0. + 3. + 0. + + + + + 3.15 + 3. + 0. + + + + + 3.15 + 0. + 0. + + + + + 0. + 0. + 0. + + + + + 0. + 3. + 0. + + + + + + + + + + + + + continuous + false + + + + + + + + + false + + + + + + + + + + + + + + + + + 3xGrIbRDTr1JxmX26hEUxJ + + + + 2ndLevel + 2a + + + + + + + + + + physical + external + + + + 0. + -1. + 0. + + + + + -1. + 0. + 0. + + + + + 3.15 + 3.8 + 0. + + + + + + + + + + + + + + + + + + + + + 0. + 3. + 0. + + + + + 3.8 + 3. + 0. + + + + + 3.8 + 0. + 0. + + + + + 0. + 0. + 0. + + + + + 0. + 3. + 0. + + + + + + + + + + + + + continuous + false + + + + + + + + + false + + + + + + + + + + + + + + + + + 3tUiWObbr4gUOrdCY_X589 + + + + 2ndLevel + 2a + + + + + + + + + + physical + internal + + + + 0. + 0. + -1. + + + + + 0. + 1. + 0. + + + + + 3.15 + 0. + 3. + + + + + + + + + + + + + + + + + + + + + 0. + 3.15 + 0. + + + + + 3. + 3.15 + 0. + + + + + 3. + 0. + 0. + + + + + 0. + 0. + 0. + + + + + 0. + 3.15 + 0. + + + + + + + + + + + + + continuous + false + + + + + + + + + false + + + + + + + + + + + + + + + + + 3o96gShhUyx8pTxqrrFvDa + + + + 2ndLevel + 2a + + + + + + + + + + physical + internal + + + + -1. + 0. + 0. + + + + + 0. + 0. + 1. + + + + + 2.450000013 + 3.800000045 + 0. + + + + + + + + + + + + + + + + + + + + + 0. + 1.850000089 + 0. + + + + + 2.450000004 + 1.850000089 + 0. + + + + + 2.450000004 + 0. + 0. + + + + + 0. + 0. + 0. + + + + + 0. + 1.850000089 + 0. + + + + + + + + + + + + + continuous + false + + + + + + + + + false + + + + + + + + + + + + + + + + + 3v3kv602gYeXIdSgzXcl6Z + + + + 2ndLevel + 2a + + + + + + + + + + physical + internal + + + + -1. + 0. + 0. + + + + + 0. + 0. + 1. + + + + + 3.150000013 + 3.800000045 + 0. + + + + + + + + + + + + + + + + + + + + + 0. + 1.850000089 + 0. + + + + + 0.6000000179 + 1.850000089 + 0. + + + + + 0.6000000179 + 0. + 0. + + + + + 0. + 0. + 0. + + + + + 0. + 1.850000089 + 0. + + + + + + + + + + + + + continuous + false + + + + + + + + + false + + + + + + + + + + + + + + + + + 2HHARkbdTC7lt2T5tq2Jsa + + + + 2ndLevel + 2a + + + + + + + + + + physical + internal + + + + 1. + 0. + 0. + + + + + 0. + 0. + 1. + + + + + 2.263563204E-8 + -4.470352666E-8 + 0. + + + + + + + + + + + + + + + + + + + + + 0. + 1.850000089 + 0. + + + + + 3.149999991 + 1.850000089 + 0. + + + + + 3.149999991 + 0. + 0. + + + + + 0. + 0. + 0. + + + + + 0. + 1.850000089 + 0. + + + + + + + + + + + + + continuous + false + + + + + + + + + false + + + + + + + + + + + + + + + + + 0mI1lclGju2xtSorXrJP6l + + + + 2ndLevel + 2a + + + + + + + + + + physical + internal + + + + 0. + 0. + 1. + + + + + 0. + -1. + 0. + + + + + 3.15 + 3.8 + 0. + + + + + + + + + + + + + + + + + + + + + 0. + 3.15 + 0. + + + + + 3. + 3.15 + 0. + + + + + 3. + 0. + 0. + + + + + 0. + 0. + 0. + + + + + 0. + 3.15 + 0. + + + + + + + + + + + + + continuous + false + + + + + + + + + false + + + + + + + + + + + + + + + + + 3I_s7M0HXAgdG81isKLlUC + + + + 2ndLevel + 2a + + + + + + + + + + physical + internal + + + + 1. + 0. + 0. + + + + + 0. + 0. + -1. + + + + + 0. + 3.8 + 3. + + + + + + + + + + + + + + + + + + + + + 0. + 3.8 + 0. + + + + + 3.15 + 3.8 + 0. + + + + + 3.15 + 0. + 0. + + + + + 0. + 0. + 0. + + + + + 0. + 3.8 + 0. + + + + + + + + + + + + + continuous + false + + + + + + + + + false + + + + + + + + + + + + + + + + + 3wnJidE5MTKvP$unb$RBiL + + + + 2ndLevel + 2a + + + + + + + + + + physical + external + + + + 0. + -1. + 0. + + + + + 1. + 0. + 0. + + + + + 0. + 3.800000072 + 3.000000048 + + + + + + + + + + + + + + + + + + + + + 0. + 3.000000048 + 0. + + + + + 3.800000143 + 3.000000048 + 0. + + + + + 3.800000143 + 0. + 0. + + + + + 0. + 0. + 0. + + + + + 0. + 3.000000048 + 0. + + + + + + + + + + + + + continuous + false + + + + + + + + + false + + + + + + + + + + + + + + + + + 3zwXh2v98fDVqqQGB81BM5 + + + + 2ndLevel + 2a + + + + + + + + + + physical + external + + + \ No newline at end of file diff --git "a/IfcPython/9000_BIMxBEM_TestMod\303\250le_R19.ifc" "b/IfcPython/9000_BIMxBEM_TestMod\303\250le_R19.ifc" new file mode 100644 index 0000000..c5c68ee --- /dev/null +++ "b/IfcPython/9000_BIMxBEM_TestMod\303\250le_R19.ifc" @@ -0,0 +1,1258 @@ +ISO-10303-21; +HEADER; + +/****************************************************************************************** +* STEP Physical File produced by: The EXPRESS Data Manager Version 5.02.0100.07 : 28 Aug 2013 +* Module: EDMstepFileFactory/EDMstandAlone +* Creation date: Fri Jun 21 10:03:10 2019 +* Host: Windows10-Cyril-RX1 +* Database: C:\Users\Cyril\AppData\Local\Temp\{68BBBC24-5ACF-407E-82FE-48B4BEEC3CE0}\ifc +* Database version: 5507 +* Database creation date: Fri Jun 21 10:03:09 2019 +* Schema: IFC2X3 +* Model: DataRepository.ifc +* Model creation date: Fri Jun 21 10:03:09 2019 +* Header model: DataRepository.ifc_HeaderModel +* Header model creation date: Fri Jun 21 10:03:09 2019 +* EDMuser: sdai-user +* EDMgroup: sdai-group +* License ID and type: 5605 : Permanent license. Expiry date: +* EDMstepFileFactory options: 020000 +******************************************************************************************/ +FILE_DESCRIPTION(('ViewDefinition [CoordinationView_V2.0]'),'2;1'); +FILE_NAME('0000.00','2019-06-21T10:03:10',(''),(''),'The EXPRESS Data Manager Version 5.02.0100.07 : 28 Aug 2013','20190225_1515(x64) - Exporter 19.2.0.0 - Interface alternative d''export 19.2.0.0',''); +FILE_SCHEMA(('IFC2X3')); +ENDSEC; + +DATA; +#1= IFCORGANIZATION($,'Autodesk Revit 2019 (FRA)',$,$,$); +#5= IFCAPPLICATION(#1,'2019','Autodesk Revit 2019 (FRA)','Revit'); +#6= IFCCARTESIANPOINT((0.,0.,0.)); +#9= IFCCARTESIANPOINT((0.,0.)); +#11= IFCDIRECTION((1.,0.,0.)); +#13= IFCDIRECTION((-1.,0.,0.)); +#15= IFCDIRECTION((0.,1.,0.)); +#17= IFCDIRECTION((0.,-1.,0.)); +#19= IFCDIRECTION((0.,0.,1.)); +#21= IFCDIRECTION((0.,0.,-1.)); +#23= IFCDIRECTION((1.,0.)); +#25= IFCDIRECTION((-1.,0.)); +#27= IFCDIRECTION((0.,1.)); +#29= IFCDIRECTION((0.,-1.)); +#31= IFCAXIS2PLACEMENT3D(#6,$,$); +#32= IFCLOCALPLACEMENT(#140,#31); +#35= IFCPERSON($,'Waechter','Cyril',$,$,$,$,$); +#37= IFCORGANIZATION($,'BIM Insight','Ing\X2\00E9\X0\nieur Conseil',$,$); +#38= IFCPERSONANDORGANIZATION(#35,#37,$); +#41= IFCOWNERHISTORY(#38,#5,$,.NOCHANGE.,$,$,$,1561101748); +#42= IFCSIUNIT(*,.LENGTHUNIT.,.CENTI.,.METRE.); +#43= IFCSIUNIT(*,.LENGTHUNIT.,$,.METRE.); +#44= IFCSIUNIT(*,.AREAUNIT.,$,.SQUARE_METRE.); +#45= IFCSIUNIT(*,.VOLUMEUNIT.,$,.CUBIC_METRE.); +#46= IFCSIUNIT(*,.PLANEANGLEUNIT.,$,.RADIAN.); +#47= IFCDIMENSIONALEXPONENTS(0,0,0,0,0,0,0); +#48= IFCMEASUREWITHUNIT(IFCRATIOMEASURE(0.0174532925199433),#46); +#49= IFCCONVERSIONBASEDUNIT(#47,.PLANEANGLEUNIT.,'DEGREE',#48); +#50= IFCSIUNIT(*,.MASSUNIT.,.KILO.,.GRAM.); +#51= IFCDERIVEDUNITELEMENT(#50,1); +#52= IFCDERIVEDUNITELEMENT(#43,-3); +#53= IFCDERIVEDUNIT((#51,#52),.MASSDENSITYUNIT.,$); +#55= IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#56= IFCSIUNIT(*,.FREQUENCYUNIT.,$,.HERTZ.); +#57= IFCSIUNIT(*,.THERMODYNAMICTEMPERATUREUNIT.,$,.KELVIN.); +#58= IFCSIUNIT(*,.THERMODYNAMICTEMPERATUREUNIT.,$,.DEGREE_CELSIUS.); +#59= IFCDERIVEDUNITELEMENT(#50,1); +#60= IFCDERIVEDUNITELEMENT(#57,-1); +#61= IFCDERIVEDUNITELEMENT(#55,-3); +#62= IFCDERIVEDUNIT((#59,#60,#61),.THERMALTRANSMITTANCEUNIT.,$); +#64= IFCDERIVEDUNITELEMENT(#43,3); +#65= IFCDERIVEDUNITELEMENT(#55,-1); +#66= IFCDERIVEDUNIT((#64,#65),.VOLUMETRICFLOWRATEUNIT.,$); +#68= IFCSIUNIT(*,.ELECTRICCURRENTUNIT.,$,.AMPERE.); +#69= IFCSIUNIT(*,.ELECTRICVOLTAGEUNIT.,$,.VOLT.); +#70= IFCSIUNIT(*,.POWERUNIT.,$,.WATT.); +#71= IFCSIUNIT(*,.FORCEUNIT.,.KILO.,.NEWTON.); +#72= IFCSIUNIT(*,.ILLUMINANCEUNIT.,$,.LUX.); +#73= IFCSIUNIT(*,.LUMINOUSFLUXUNIT.,$,.LUMEN.); +#74= IFCSIUNIT(*,.LUMINOUSINTENSITYUNIT.,$,.CANDELA.); +#75= IFCDERIVEDUNITELEMENT(#50,-1); +#76= IFCDERIVEDUNITELEMENT(#43,-2); +#77= IFCDERIVEDUNITELEMENT(#55,3); +#78= IFCDERIVEDUNITELEMENT(#73,1); +#79= IFCDERIVEDUNIT((#75,#76,#77,#78),.USERDEFINED.,'Luminous Efficacy'); +#81= IFCDERIVEDUNITELEMENT(#43,1); +#82= IFCDERIVEDUNITELEMENT(#55,-1); +#83= IFCDERIVEDUNIT((#81,#82),.LINEARVELOCITYUNIT.,$); +#85= IFCSIUNIT(*,.PRESSUREUNIT.,$,.PASCAL.); +#86= IFCDERIVEDUNITELEMENT(#43,-2); +#87= IFCDERIVEDUNITELEMENT(#50,1); +#88= IFCDERIVEDUNITELEMENT(#55,-2); +#89= IFCDERIVEDUNIT((#86,#87,#88),.USERDEFINED.,'Friction Loss'); +#91= IFCUNITASSIGNMENT((#42,#44,#45,#49,#50,#53,#55,#56,#58,#62,#66,#68,#69,#70,#71,#72,#73,#74,#79,#83,#85,#89)); +#93= IFCAXIS2PLACEMENT3D(#6,$,$); +#94= IFCDIRECTION((6.12303176911189E-17,1.)); +#96= IFCGEOMETRICREPRESENTATIONCONTEXT($,'Model',3,0.001,#93,#94); +#99= IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Axis','Model',*,*,*,*,#96,$,.GRAPH_VIEW.,$); +#101= IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Body','Model',*,*,*,*,#96,$,.MODEL_VIEW.,$); +#102= IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Box','Model',*,*,*,*,#96,$,.MODEL_VIEW.,$); +#103= IFCGEOMETRICREPRESENTATIONSUBCONTEXT('FootPrint','Model',*,*,*,*,#96,$,.MODEL_VIEW.,$); +#104= IFCPROJECT('2w19xi7tXBHQ3r21J6FE$P',#41,'0000.00',$,$,'Nom du projet','Avant-Projet',(#96),#91); +#110= IFCPOSTALADDRESS($,$,$,$,('Entrer l''adresse ici'),$,'','Geneva','','Switzerland'); +#114= IFCBUILDING('2w19xi7tXBHQ3r21J6FE$O',#41,'Revit Advanced Sample',$,$,#32,$,'Revit Advanced Sample',.ELEMENT.,$,$,$); +#120= IFCAXIS2PLACEMENT3D(#6,$,$); +#121= IFCLOCALPLACEMENT(#32,#120); +#123= IFCBUILDINGSTOREY('2w19xi7tXBHQ3r21Gvmn4U',#41,'E0',$,'Niveau:Niveaux fini',#121,$,'E0',.ELEMENT.,0.); +#125= IFCCARTESIANPOINT((0.,0.,300.)); +#127= IFCAXIS2PLACEMENT3D(#125,$,$); +#128= IFCLOCALPLACEMENT(#32,#127); +#129= IFCBUILDINGSTOREY('2FFNbHpKH3pPFqjG9MszuE',#41,'E1',$,'Niveau:Niveaux fini',#128,$,'E1',.ELEMENT.,300.); +#131= IFCCARTESIANPOINT((0.,0.,600.)); +#133= IFCAXIS2PLACEMENT3D(#131,$,$); +#134= IFCLOCALPLACEMENT(#32,#133); +#135= IFCBUILDINGSTOREY('2FFNbHpKH3pPFqjG9Msz4T',#41,'TO',$,'Niveau:Niveaux fini',#134,$,'TO',.ELEMENT.,600.); +#137= IFCCARTESIANPOINT((260000000.,120000000.,0.)); +#139= IFCAXIS2PLACEMENT3D(#137,$,$); +#140= IFCLOCALPLACEMENT($,#139); +#141= IFCPOSTALADDRESS($,$,$,$,('Entrer l''adresse ici'),$,'','Geneva','','Switzerland'); +#143= IFCSITE('2w19xi7tXBHQ3r21J6FE$R',#41,'Default',$,$,#140,$,$,.ELEMENT.,(48,51,23,999633),(2,21,3,553905),37360.,$,$); +#147= IFCAXIS2PLACEMENT3D(#6,$,$); +#148= IFCLOCALPLACEMENT(#121,#147); +#150= IFCCARTESIANPOINT((0.,-49.5000000000001)); +#152= IFCAXIS2PLACEMENT2D(#150,#23); +#153= IFCRECTANGLEPROFILEDEF(.AREA.,$,#152,500.,495.); +#154= IFCCARTESIANPOINT((307.,260.,0.)); +#156= IFCAXIS2PLACEMENT3D(#154,#19,#17); +#157= IFCEXTRUDEDAREASOLID(#153,#156,#19,270.); +#158= IFCSHAPEREPRESENTATION(#101,'Body','SweptSolid',(#157)); +#161= IFCPRODUCTDEFINITIONSHAPE($,$,(#158)); +#165= IFCSPACE('0Orm8sh5vFs9MyXfsGBgWx',#41,'01',$,$,#148,#161,'Espace',.ELEMENT.,.INTERNAL.,$); +#170= IFCCARTESIANPOINT((300.,0.)); +#172= IFCCARTESIANPOINT((300.,522.5)); +#174= IFCCARTESIANPOINT((0.,522.5)); +#176= IFCPOLYLINE((#9,#170,#172,#174,#9)); +#178= IFCCARTESIANPOINT((-12.5000000000001,532.500000028387,0.)); +#180= IFCAXIS2PLACEMENT3D(#178,#15,#19); +#181= IFCPLANE(#180); +#182= IFCCURVEBOUNDEDPLANE(#181,#176,$); +#183= IFCCONNECTIONSURFACEGEOMETRY(#182,$); +#184= IFCCARTESIANPOINT((300.,0.)); +#186= IFCCARTESIANPOINT((300.,545.)); +#188= IFCCARTESIANPOINT((0.,545.)); +#190= IFCPOLYLINE((#9,#184,#186,#188,#9)); +#192= IFCCARTESIANPOINT((-12.5000000000001,-12.4999999716133,0.)); +#194= IFCAXIS2PLACEMENT3D(#192,#13,#19); +#195= IFCPLANE(#194); +#196= IFCCURVEBOUNDEDPLANE(#195,#190,$); +#197= IFCCONNECTIONSURFACEGEOMETRY(#196,$); +#198= IFCCARTESIANPOINT((522.499999999999,0.)); +#200= IFCCARTESIANPOINT((522.499999999999,300.)); +#202= IFCCARTESIANPOINT((0.,300.)); +#204= IFCPOLYLINE((#9,#198,#200,#202,#9)); +#206= IFCCARTESIANPOINT((-12.5,-12.4999999716133,0.)); +#208= IFCAXIS2PLACEMENT3D(#206,#17,#11); +#209= IFCPLANE(#208); +#210= IFCCURVEBOUNDEDPLANE(#209,#204,$); +#211= IFCCONNECTIONSURFACEGEOMETRY(#210,$); +#212= IFCCARTESIANPOINT((545.,0.)); +#214= IFCCARTESIANPOINT((545.,522.5)); +#216= IFCCARTESIANPOINT((0.,522.499999999999)); +#218= IFCPOLYLINE((#9,#212,#214,#216,#9)); +#220= IFCCARTESIANPOINT((-12.5000000000001,-12.4999999716133,0.)); +#222= IFCAXIS2PLACEMENT3D(#220,#21,#15); +#223= IFCPLANE(#222); +#224= IFCCURVEBOUNDEDPLANE(#223,#218,$); +#225= IFCCONNECTIONSURFACEGEOMETRY(#224,$); +#226= IFCCARTESIANPOINT((272.5,0.)); +#228= IFCCARTESIANPOINT((272.5,300.)); +#230= IFCCARTESIANPOINT((0.,300.)); +#232= IFCPOLYLINE((#9,#226,#228,#230,#9)); +#234= IFCCARTESIANPOINT((510.,-12.4999999716133,0.)); +#236= IFCAXIS2PLACEMENT3D(#234,#11,#15); +#237= IFCPLANE(#236); +#238= IFCCURVEBOUNDEDPLANE(#237,#232,$); +#239= IFCCONNECTIONSURFACEGEOMETRY(#238,$); +#240= IFCCARTESIANPOINT((272.5,0.)); +#242= IFCCARTESIANPOINT((272.5,300.)); +#244= IFCCARTESIANPOINT((0.,300.)); +#246= IFCPOLYLINE((#9,#240,#242,#244,#9)); +#248= IFCCARTESIANPOINT((510.,260.,0.)); +#250= IFCAXIS2PLACEMENT3D(#248,#11,#15); +#251= IFCPLANE(#250); +#252= IFCCURVEBOUNDEDPLANE(#251,#246,$); +#253= IFCCONNECTIONSURFACEGEOMETRY(#252,$); +#254= IFCCARTESIANPOINT((342.5,0.)); +#256= IFCCARTESIANPOINT((342.5,327.5)); +#258= IFCCARTESIANPOINT((0.,327.5)); +#260= IFCPOLYLINE((#9,#254,#256,#258,#9)); +#262= IFCCARTESIANPOINT((-12.5000000000001,190.,300.)); +#264= IFCAXIS2PLACEMENT3D(#262,#21,#15); +#265= IFCPLANE(#264); +#266= IFCCURVEBOUNDEDPLANE(#265,#260,$); +#267= IFCCONNECTIONSURFACEGEOMETRY(#266,$); +#268= IFCCARTESIANPOINT((202.5,0.)); +#270= IFCCARTESIANPOINT((202.499999999998,522.499999999999)); +#272= IFCCARTESIANPOINT((0.,522.499999999999)); +#274= IFCPOLYLINE((#9,#268,#270,#272,#9)); +#276= IFCCARTESIANPOINT((-12.5,-12.4999999716133,300.)); +#278= IFCAXIS2PLACEMENT3D(#276,#21,#15); +#279= IFCPLANE(#278); +#280= IFCCURVEBOUNDEDPLANE(#279,#274,$); +#281= IFCCONNECTIONSURFACEGEOMETRY(#280,$); +#282= IFCCARTESIANPOINT((342.500000000001,0.)); +#284= IFCCARTESIANPOINT((342.500000000001,195.)); +#286= IFCCARTESIANPOINT((0.,195.)); +#288= IFCPOLYLINE((#9,#282,#284,#286,#9)); +#290= IFCCARTESIANPOINT((315.,190.,300.)); +#292= IFCAXIS2PLACEMENT3D(#290,#21,#15); +#293= IFCPLANE(#292); +#294= IFCCURVEBOUNDEDPLANE(#293,#288,$); +#295= IFCCONNECTIONSURFACEGEOMETRY(#294,$); +#296= IFCPROPERTYSINGLEVALUE('Reference',$,IFCIDENTIFIER('Espace 01'),$); +#297= IFCPROPERTYSET('3xSmoq7Ij1TRqB19Z1qxQc',#41,'Pset_SpaceCommon',$,(#296)); +#302= IFCRELDEFINESBYPROPERTIES('1Ngk1yM5133x6ya3ziLA0Q',#41,$,$,(#165),#297); +#306= IFCAXIS2PLACEMENT3D(#6,$,$); +#307= IFCLOCALPLACEMENT(#121,#306); +#308= IFCCARTESIANPOINT((3.76587649952853E-13,-9.94759830064140E-14)); +#310= IFCAXIS2PLACEMENT2D(#308,#23); +#311= IFCRECTANGLEPROFILEDEF(.AREA.,$,#310,244.999999999998,495.); +#312= IFCCARTESIANPOINT((762.499999999999,132.500000028386,0.)); +#314= IFCAXIS2PLACEMENT3D(#312,#19,#15); +#315= IFCEXTRUDEDAREASOLID(#311,#314,#19,270.); +#316= IFCSHAPEREPRESENTATION(#101,'Body','SweptSolid',(#315)); +#318= IFCPRODUCTDEFINITIONSHAPE($,$,(#316)); +#320= IFCSPACE('0Orm8sh5vFs9MyXfsGBgWv',#41,'02',$,$,#307,#318,'Espace',.ELEMENT.,.INTERNAL.,$); +#323= IFCCARTESIANPOINT((272.5,0.)); +#325= IFCCARTESIANPOINT((272.5,300.)); +#327= IFCCARTESIANPOINT((0.,300.)); +#329= IFCPOLYLINE((#9,#323,#325,#327,#9)); +#331= IFCCARTESIANPOINT((510.,-12.4999999716133,0.)); +#333= IFCAXIS2PLACEMENT3D(#331,#11,#15); +#334= IFCPLANE(#333); +#335= IFCCURVEBOUNDEDPLANE(#334,#329,$); +#336= IFCCONNECTIONSURFACEGEOMETRY(#335,$); +#337= IFCCARTESIANPOINT((522.500000000001,0.)); +#339= IFCCARTESIANPOINT((522.500000000001,300.)); +#341= IFCCARTESIANPOINT((0.,300.)); +#343= IFCPOLYLINE((#9,#337,#339,#341,#9)); +#345= IFCCARTESIANPOINT((510.,-12.4999999716132,0.)); +#347= IFCAXIS2PLACEMENT3D(#345,#17,#11); +#348= IFCPLANE(#347); +#349= IFCCURVEBOUNDEDPLANE(#348,#343,$); +#350= IFCCONNECTIONSURFACEGEOMETRY(#349,$); +#351= IFCCARTESIANPOINT((272.499999999998,0.)); +#353= IFCCARTESIANPOINT((272.499999999998,300.)); +#355= IFCCARTESIANPOINT((0.,300.)); +#357= IFCPOLYLINE((#9,#351,#353,#355,#9)); +#359= IFCCARTESIANPOINT((1032.5,-12.4999999716132,0.)); +#361= IFCAXIS2PLACEMENT3D(#359,#11,#15); +#362= IFCPLANE(#361); +#363= IFCCURVEBOUNDEDPLANE(#362,#357,$); +#364= IFCCONNECTIONSURFACEGEOMETRY(#363,$); +#365= IFCCARTESIANPOINT((272.5,0.)); +#367= IFCCARTESIANPOINT((272.499999999999,522.5)); +#369= IFCCARTESIANPOINT((0.,522.5)); +#371= IFCPOLYLINE((#9,#365,#367,#369,#9)); +#373= IFCCARTESIANPOINT((510.,-12.4999999716133,0.)); +#375= IFCAXIS2PLACEMENT3D(#373,#21,#15); +#376= IFCPLANE(#375); +#377= IFCCURVEBOUNDEDPLANE(#376,#371,$); +#378= IFCCONNECTIONSURFACEGEOMETRY(#377,$); +#379= IFCCARTESIANPOINT((300.,0.)); +#381= IFCCARTESIANPOINT((300.,522.5)); +#383= IFCCARTESIANPOINT((0.,522.5)); +#385= IFCPOLYLINE((#9,#379,#381,#383,#9)); +#387= IFCCARTESIANPOINT((510.,260.,0.)); +#389= IFCAXIS2PLACEMENT3D(#387,#15,#19); +#390= IFCPLANE(#389); +#391= IFCCURVEBOUNDEDPLANE(#390,#385,$); +#392= IFCCONNECTIONSURFACEGEOMETRY(#391,$); +#393= IFCCARTESIANPOINT((202.499999999998,0.)); +#395= IFCCARTESIANPOINT((202.499999999998,522.5)); +#397= IFCCARTESIANPOINT((0.,522.500000000001)); +#399= IFCPOLYLINE((#9,#393,#395,#397,#9)); +#401= IFCCARTESIANPOINT((510.,-12.4999999716132,300.)); +#403= IFCAXIS2PLACEMENT3D(#401,#21,#15); +#404= IFCPLANE(#403); +#405= IFCCURVEBOUNDEDPLANE(#404,#399,$); +#406= IFCCONNECTIONSURFACEGEOMETRY(#405,$); +#407= IFCCARTESIANPOINT((70.,0.)); +#409= IFCCARTESIANPOINT((70.,327.5)); +#411= IFCCARTESIANPOINT((0.,327.5)); +#413= IFCPOLYLINE((#9,#407,#409,#411,#9)); +#415= IFCCARTESIANPOINT((705.,190.,300.)); +#417= IFCAXIS2PLACEMENT3D(#415,#21,#15); +#418= IFCPLANE(#417); +#419= IFCCURVEBOUNDEDPLANE(#418,#413,$); +#420= IFCCONNECTIONSURFACEGEOMETRY(#419,$); +#421= IFCCARTESIANPOINT((70.,0.)); +#423= IFCCARTESIANPOINT((70.,195.)); +#425= IFCCARTESIANPOINT((0.,195.)); +#427= IFCPOLYLINE((#9,#421,#423,#425,#9)); +#429= IFCCARTESIANPOINT((510.,190.,300.)); +#431= IFCAXIS2PLACEMENT3D(#429,#21,#15); +#432= IFCPLANE(#431); +#433= IFCCURVEBOUNDEDPLANE(#432,#427,$); +#434= IFCCONNECTIONSURFACEGEOMETRY(#433,$); +#435= IFCPROPERTYSINGLEVALUE('Reference',$,IFCIDENTIFIER('Espace 02'),$); +#436= IFCPROPERTYSET('0HJhLXbpv6MhiRYkttBmrg',#41,'Pset_SpaceCommon',$,(#435)); +#438= IFCRELDEFINESBYPROPERTIES('1izKwT3YDA1ehK5SAT84gN',#41,$,$,(#320),#436); +#442= IFCAXIS2PLACEMENT3D(#6,$,$); +#443= IFCLOCALPLACEMENT(#121,#442); +#444= IFCCARTESIANPOINT((4.12114786740858E-13,9.94759830064140E-14)); +#446= IFCAXIS2PLACEMENT2D(#444,#23); +#447= IFCRECTANGLEPROFILEDEF(.AREA.,$,#446,245.,495.); +#448= IFCCARTESIANPOINT((762.5,387.500000028386,0.)); +#450= IFCAXIS2PLACEMENT3D(#448,#19,#17); +#451= IFCEXTRUDEDAREASOLID(#447,#450,#19,270.); +#452= IFCSHAPEREPRESENTATION(#101,'Body','SweptSolid',(#451)); +#454= IFCPRODUCTDEFINITIONSHAPE($,$,(#452)); +#456= IFCSPACE('0Orm8sh5vFs9MyXfsGBgWu',#41,'03',$,$,#443,#454,'Espace',.ELEMENT.,.INTERNAL.,$); +#459= IFCCARTESIANPOINT((272.5,0.)); +#461= IFCCARTESIANPOINT((272.5,300.)); +#463= IFCCARTESIANPOINT((0.,300.)); +#465= IFCPOLYLINE((#9,#459,#461,#463,#9)); +#467= IFCCARTESIANPOINT((510.,260.,0.)); +#469= IFCAXIS2PLACEMENT3D(#467,#11,#15); +#470= IFCPLANE(#469); +#471= IFCCURVEBOUNDEDPLANE(#470,#465,$); +#472= IFCCONNECTIONSURFACEGEOMETRY(#471,$); +#473= IFCCARTESIANPOINT((300.,0.)); +#475= IFCCARTESIANPOINT((300.,522.5)); +#477= IFCCARTESIANPOINT((0.,522.5)); +#479= IFCPOLYLINE((#9,#473,#475,#477,#9)); +#481= IFCCARTESIANPOINT((510.,260.,0.)); +#483= IFCAXIS2PLACEMENT3D(#481,#15,#19); +#484= IFCPLANE(#483); +#485= IFCCURVEBOUNDEDPLANE(#484,#479,$); +#486= IFCCONNECTIONSURFACEGEOMETRY(#485,$); +#487= IFCCARTESIANPOINT((300.,0.)); +#489= IFCCARTESIANPOINT((300.,522.5)); +#491= IFCCARTESIANPOINT((0.,522.5)); +#493= IFCPOLYLINE((#9,#487,#489,#491,#9)); +#495= IFCCARTESIANPOINT((510.,532.500000028387,0.)); +#497= IFCAXIS2PLACEMENT3D(#495,#15,#19); +#498= IFCPLANE(#497); +#499= IFCCURVEBOUNDEDPLANE(#498,#493,$); +#500= IFCCONNECTIONSURFACEGEOMETRY(#499,$); +#501= IFCCARTESIANPOINT((272.500000000002,0.)); +#503= IFCCARTESIANPOINT((272.500000000002,300.)); +#505= IFCCARTESIANPOINT((0.,300.)); +#507= IFCPOLYLINE((#9,#501,#503,#505,#9)); +#509= IFCCARTESIANPOINT((1032.5,260.,0.)); +#511= IFCAXIS2PLACEMENT3D(#509,#11,#15); +#512= IFCPLANE(#511); +#513= IFCCURVEBOUNDEDPLANE(#512,#507,$); +#514= IFCCONNECTIONSURFACEGEOMETRY(#513,$); +#515= IFCCARTESIANPOINT((272.5,0.)); +#517= IFCCARTESIANPOINT((272.500000000001,522.5)); +#519= IFCCARTESIANPOINT((0.,522.5)); +#521= IFCPOLYLINE((#9,#515,#517,#519,#9)); +#523= IFCCARTESIANPOINT((510.,260.,0.)); +#525= IFCAXIS2PLACEMENT3D(#523,#21,#15); +#526= IFCPLANE(#525); +#527= IFCCURVEBOUNDEDPLANE(#526,#521,$); +#528= IFCCONNECTIONSURFACEGEOMETRY(#527,$); +#529= IFCCARTESIANPOINT((272.500000000001,0.)); +#531= IFCCARTESIANPOINT((272.500000000001,327.5)); +#533= IFCCARTESIANPOINT((0.,327.5)); +#535= IFCPOLYLINE((#9,#529,#531,#533,#9)); +#537= IFCCARTESIANPOINT((705.,260.,300.)); +#539= IFCAXIS2PLACEMENT3D(#537,#21,#15); +#540= IFCPLANE(#539); +#541= IFCCURVEBOUNDEDPLANE(#540,#535,$); +#542= IFCCONNECTIONSURFACEGEOMETRY(#541,$); +#543= IFCCARTESIANPOINT((272.5,0.)); +#545= IFCCARTESIANPOINT((272.5,195.)); +#547= IFCCARTESIANPOINT((0.,195.)); +#549= IFCPOLYLINE((#9,#543,#545,#547,#9)); +#551= IFCCARTESIANPOINT((510.,260.,300.)); +#553= IFCAXIS2PLACEMENT3D(#551,#21,#15); +#554= IFCPLANE(#553); +#555= IFCCURVEBOUNDEDPLANE(#554,#549,$); +#556= IFCCONNECTIONSURFACEGEOMETRY(#555,$); +#557= IFCPROPERTYSINGLEVALUE('Reference',$,IFCIDENTIFIER('Espace 03'),$); +#558= IFCPROPERTYSET('31A8qx$W15TuHGd9wslaL3',#41,'Pset_SpaceCommon',$,(#557)); +#560= IFCRELDEFINESBYPROPERTIES('05JJcjurH6aRpmWObA1ojq',#41,$,$,(#456),#558); +#564= IFCAXIS2PLACEMENT3D(#6,$,$); +#565= IFCLOCALPLACEMENT(#128,#564); +#567= IFCCARTESIANPOINT((-1.42108547152020E-13,-2.41584530158434E-13)); +#569= IFCAXIS2PLACEMENT2D(#567,#23); +#570= IFCRECTANGLEPROFILEDEF(.AREA.,$,#569,300.,315.000000000001); +#571= IFCCARTESIANPOINT((160.,352.500000028386,0.)); +#573= IFCAXIS2PLACEMENT3D(#571,#19,#13); +#574= IFCEXTRUDEDAREASOLID(#570,#573,#19,300.); +#575= IFCSHAPEREPRESENTATION(#101,'Body','SweptSolid',(#574)); +#577= IFCPRODUCTDEFINITIONSHAPE($,$,(#575)); +#579= IFCSPACE('0Orm8sh5vFs9MyXfsGBgWX',#41,'11',$,$,#565,#577,'Espace',.ELEMENT.,.INTERNAL.,$); +#582= IFCCARTESIANPOINT((342.5,0.)); +#584= IFCCARTESIANPOINT((342.5,327.5)); +#586= IFCCARTESIANPOINT((0.,327.5)); +#588= IFCPOLYLINE((#9,#582,#584,#586,#9)); +#590= IFCCARTESIANPOINT((-12.5000000000001,190.,0.)); +#592= IFCAXIS2PLACEMENT3D(#590,#21,#15); +#593= IFCPLANE(#592); +#594= IFCCURVEBOUNDEDPLANE(#593,#588,$); +#595= IFCCONNECTIONSURFACEGEOMETRY(#594,$); +#596= IFCCARTESIANPOINT((300.,0.)); +#598= IFCCARTESIANPOINT((300.,327.5)); +#600= IFCCARTESIANPOINT((0.,327.5)); +#602= IFCPOLYLINE((#9,#596,#598,#600,#9)); +#604= IFCCARTESIANPOINT((-12.5000000000001,532.500000028387,0.)); +#606= IFCAXIS2PLACEMENT3D(#604,#15,#19); +#607= IFCPLANE(#606); +#608= IFCCURVEBOUNDEDPLANE(#607,#602,$); +#609= IFCCONNECTIONSURFACEGEOMETRY(#608,$); +#610= IFCCARTESIANPOINT((300.,0.)); +#612= IFCCARTESIANPOINT((300.,342.5)); +#614= IFCCARTESIANPOINT((0.,342.5)); +#616= IFCPOLYLINE((#9,#610,#612,#614,#9)); +#618= IFCCARTESIANPOINT((-12.5000000000001,190.,0.)); +#620= IFCAXIS2PLACEMENT3D(#618,#13,#19); +#621= IFCPLANE(#620); +#622= IFCCURVEBOUNDEDPLANE(#621,#616,$); +#623= IFCCONNECTIONSURFACEGEOMETRY(#622,$); +#624= IFCCARTESIANPOINT((327.5,0.)); +#626= IFCCARTESIANPOINT((327.5,342.5)); +#628= IFCCARTESIANPOINT((0.,342.5)); +#630= IFCPOLYLINE((#9,#624,#626,#628,#9)); +#632= IFCCARTESIANPOINT((-12.5000000000001,190.,300.)); +#634= IFCAXIS2PLACEMENT3D(#632,#19,#11); +#635= IFCPLANE(#634); +#636= IFCCURVEBOUNDEDPLANE(#635,#630,$); +#637= IFCCONNECTIONSURFACEGEOMETRY(#636,$); +#638= IFCCARTESIANPOINT((327.5,0.)); +#640= IFCCARTESIANPOINT((327.5,300.)); +#642= IFCCARTESIANPOINT((0.,300.)); +#644= IFCPOLYLINE((#9,#638,#640,#642,#9)); +#646= IFCCARTESIANPOINT((-12.5000000000001,190.,0.)); +#648= IFCAXIS2PLACEMENT3D(#646,#17,#11); +#649= IFCPLANE(#648); +#650= IFCCURVEBOUNDEDPLANE(#649,#644,$); +#651= IFCCONNECTIONSURFACEGEOMETRY(#650,$); +#652= IFCCARTESIANPOINT((342.5,0.)); +#654= IFCCARTESIANPOINT((342.5,300.)); +#656= IFCCARTESIANPOINT((0.,300.)); +#658= IFCPOLYLINE((#9,#652,#654,#656,#9)); +#660= IFCCARTESIANPOINT((315.,190.,0.)); +#662= IFCAXIS2PLACEMENT3D(#660,#11,#15); +#663= IFCPLANE(#662); +#664= IFCCURVEBOUNDEDPLANE(#663,#658,$); +#665= IFCCONNECTIONSURFACEGEOMETRY(#664,$); +#666= IFCPROPERTYSINGLEVALUE('Reference',$,IFCIDENTIFIER('Espace 11'),$); +#667= IFCPROPERTYSET('2OTd$oYwb8hQljVekrryPa',#41,'Pset_SpaceCommon',$,(#666)); +#669= IFCRELDEFINESBYPROPERTIES('1mLsQGH79DMRrv_hh89kGc',#41,$,$,(#579),#667); +#673= IFCAXIS2PLACEMENT3D(#6,$,$); +#674= IFCLOCALPLACEMENT(#128,#673); +#675= IFCCARTESIANPOINT((29.1666666666656,8.52651282912120E-14)); +#677= IFCAXIS2PLACEMENT2D(#675,#23); +#678= IFCRECTANGLEPROFILEDEF(.AREA.,$,#677,175.,1000.); +#679= IFCCARTESIANPOINT((510.,126.666666695052,0.)); +#681= IFCAXIS2PLACEMENT3D(#679,#19,#17); +#682= IFCEXTRUDEDAREASOLID(#678,#681,#19,300.); +#683= IFCSHAPEREPRESENTATION(#101,'Body','SweptSolid',(#682)); +#685= IFCPRODUCTDEFINITIONSHAPE($,$,(#683)); +#687= IFCSPACE('0Orm8sh5vFs9MyXfsGBgWc',#41,'12',$,$,#674,#685,'Espace',.ELEMENT.,.INTERNAL.,$); +#690= IFCCARTESIANPOINT((202.5,0.)); +#692= IFCCARTESIANPOINT((202.499999999998,522.499999999999)); +#694= IFCCARTESIANPOINT((0.,522.499999999999)); +#696= IFCPOLYLINE((#9,#690,#692,#694,#9)); +#698= IFCCARTESIANPOINT((-12.5,-12.4999999716133,0.)); +#700= IFCAXIS2PLACEMENT3D(#698,#21,#15); +#701= IFCPLANE(#700); +#702= IFCCURVEBOUNDEDPLANE(#701,#696,$); +#703= IFCCONNECTIONSURFACEGEOMETRY(#702,$); +#704= IFCCARTESIANPOINT((202.499999999998,0.)); +#706= IFCCARTESIANPOINT((202.499999999998,522.5)); +#708= IFCCARTESIANPOINT((0.,522.500000000001)); +#710= IFCPOLYLINE((#9,#704,#706,#708,#9)); +#712= IFCCARTESIANPOINT((510.,-12.4999999716132,0.)); +#714= IFCAXIS2PLACEMENT3D(#712,#21,#15); +#715= IFCPLANE(#714); +#716= IFCCURVEBOUNDEDPLANE(#715,#710,$); +#717= IFCCONNECTIONSURFACEGEOMETRY(#716,$); +#718= IFCCARTESIANPOINT((327.5,0.)); +#720= IFCCARTESIANPOINT((327.5,300.)); +#722= IFCCARTESIANPOINT((0.,300.)); +#724= IFCPOLYLINE((#9,#718,#720,#722,#9)); +#726= IFCCARTESIANPOINT((-12.5000000000001,190.,0.)); +#728= IFCAXIS2PLACEMENT3D(#726,#17,#11); +#729= IFCPLANE(#728); +#730= IFCCURVEBOUNDEDPLANE(#729,#724,$); +#731= IFCCONNECTIONSURFACEGEOMETRY(#730,$); +#732= IFCCARTESIANPOINT((300.,0.)); +#734= IFCCARTESIANPOINT((300.,202.5)); +#736= IFCCARTESIANPOINT((0.,202.5)); +#738= IFCPOLYLINE((#9,#732,#734,#736,#9)); +#740= IFCCARTESIANPOINT((-12.5000000000001,-12.4999999716132,0.)); +#742= IFCAXIS2PLACEMENT3D(#740,#13,#19); +#743= IFCPLANE(#742); +#744= IFCCURVEBOUNDEDPLANE(#743,#738,$); +#745= IFCCONNECTIONSURFACEGEOMETRY(#744,$); +#746= IFCCARTESIANPOINT((1045.,0.)); +#748= IFCCARTESIANPOINT((1045.,300.)); +#750= IFCCARTESIANPOINT((0.,300.)); +#752= IFCPOLYLINE((#9,#746,#748,#750,#9)); +#754= IFCCARTESIANPOINT((-12.5,-12.4999999716132,0.)); +#756= IFCAXIS2PLACEMENT3D(#754,#17,#11); +#757= IFCPLANE(#756); +#758= IFCCURVEBOUNDEDPLANE(#757,#752,$); +#759= IFCCONNECTIONSURFACEGEOMETRY(#758,$); +#760= IFCCARTESIANPOINT((202.499999999996,0.)); +#762= IFCCARTESIANPOINT((202.499999999996,300.)); +#764= IFCCARTESIANPOINT((0.,300.)); +#766= IFCPOLYLINE((#9,#760,#762,#764,#9)); +#768= IFCCARTESIANPOINT((1032.5,-12.4999999716132,0.)); +#770= IFCAXIS2PLACEMENT3D(#768,#11,#15); +#771= IFCPLANE(#770); +#772= IFCCURVEBOUNDEDPLANE(#771,#766,$); +#773= IFCCONNECTIONSURFACEGEOMETRY(#772,$); +#774= IFCCARTESIANPOINT((1045.,0.)); +#776= IFCCARTESIANPOINT((1045.,202.499999999996)); +#778= IFCCARTESIANPOINT((0.,202.5)); +#780= IFCPOLYLINE((#9,#774,#776,#778,#9)); +#782= IFCCARTESIANPOINT((-12.5,-12.4999999716132,300.)); +#784= IFCAXIS2PLACEMENT3D(#782,#19,#11); +#785= IFCPLANE(#784); +#786= IFCCURVEBOUNDEDPLANE(#785,#780,$); +#787= IFCCONNECTIONSURFACEGEOMETRY(#786,$); +#788= IFCCARTESIANPOINT((300.,0.)); +#790= IFCCARTESIANPOINT((300.,327.5)); +#792= IFCCARTESIANPOINT((0.,327.5)); +#794= IFCPOLYLINE((#9,#788,#790,#792,#9)); +#796= IFCCARTESIANPOINT((705.,190.,0.)); +#798= IFCAXIS2PLACEMENT3D(#796,#15,#19); +#799= IFCPLANE(#798); +#800= IFCCURVEBOUNDEDPLANE(#799,#794,$); +#801= IFCCONNECTIONSURFACEGEOMETRY(#800,$); +#802= IFCCARTESIANPOINT((300.,0.)); +#804= IFCCARTESIANPOINT((300.,390.)); +#806= IFCCARTESIANPOINT((0.,390.)); +#808= IFCPOLYLINE((#9,#802,#804,#806,#9)); +#810= IFCCARTESIANPOINT((315.,190.,0.)); +#812= IFCAXIS2PLACEMENT3D(#810,#15,#19); +#813= IFCPLANE(#812); +#814= IFCCURVEBOUNDEDPLANE(#813,#808,$); +#815= IFCCONNECTIONSURFACEGEOMETRY(#814,$); +#816= IFCPROPERTYSINGLEVALUE('Reference',$,IFCIDENTIFIER('Espace 12'),$); +#817= IFCPROPERTYSET('18yinxtj5BHwxc_3yeCzKL',#41,'Pset_SpaceCommon',$,(#816)); +#819= IFCRELDEFINESBYPROPERTIES('1PeSh1p2X1OxZLOhPbYcen',#41,$,$,(#687),#817); +#823= IFCAXIS2PLACEMENT3D(#6,$,$); +#824= IFCLOCALPLACEMENT(#128,#823); +#825= IFCCARTESIANPOINT((1.70530256582424E-13,-2.41584530158434E-13)); +#827= IFCAXIS2PLACEMENT2D(#825,#23); +#828= IFCRECTANGLEPROFILEDEF(.AREA.,$,#827,300.,315.000000000003); +#829= IFCCARTESIANPOINT((860.,352.500000028385,0.)); +#831= IFCAXIS2PLACEMENT3D(#829,#19,#13); +#832= IFCEXTRUDEDAREASOLID(#828,#831,#19,300.); +#833= IFCSHAPEREPRESENTATION(#101,'Body','SweptSolid',(#832)); +#835= IFCPRODUCTDEFINITIONSHAPE($,$,(#833)); +#837= IFCSPACE('0Orm8sh5vFs9MyXfsGBgWZ',#41,'13',$,$,#824,#835,'Espace',.ELEMENT.,.INTERNAL.,$); +#840= IFCCARTESIANPOINT((70.,0.)); +#842= IFCCARTESIANPOINT((70.,327.5)); +#844= IFCCARTESIANPOINT((0.,327.5)); +#846= IFCPOLYLINE((#9,#840,#842,#844,#9)); +#848= IFCCARTESIANPOINT((705.,190.,0.)); +#850= IFCAXIS2PLACEMENT3D(#848,#21,#15); +#851= IFCPLANE(#850); +#852= IFCCURVEBOUNDEDPLANE(#851,#846,$); +#853= IFCCONNECTIONSURFACEGEOMETRY(#852,$); +#854= IFCCARTESIANPOINT((272.500000000001,0.)); +#856= IFCCARTESIANPOINT((272.500000000001,327.5)); +#858= IFCCARTESIANPOINT((0.,327.5)); +#860= IFCPOLYLINE((#9,#854,#856,#858,#9)); +#862= IFCCARTESIANPOINT((705.,260.,0.)); +#864= IFCAXIS2PLACEMENT3D(#862,#21,#15); +#865= IFCPLANE(#864); +#866= IFCCURVEBOUNDEDPLANE(#865,#860,$); +#867= IFCCONNECTIONSURFACEGEOMETRY(#866,$); +#868= IFCCARTESIANPOINT((300.,0.)); +#870= IFCCARTESIANPOINT((300.,327.5)); +#872= IFCCARTESIANPOINT((0.,327.5)); +#874= IFCPOLYLINE((#9,#868,#870,#872,#9)); +#876= IFCCARTESIANPOINT((705.,190.,0.)); +#878= IFCAXIS2PLACEMENT3D(#876,#15,#19); +#879= IFCPLANE(#878); +#880= IFCCURVEBOUNDEDPLANE(#879,#874,$); +#881= IFCCONNECTIONSURFACEGEOMETRY(#880,$); +#882= IFCCARTESIANPOINT((300.,0.)); +#884= IFCCARTESIANPOINT((300.,327.5)); +#886= IFCCARTESIANPOINT((0.,327.5)); +#888= IFCPOLYLINE((#9,#882,#884,#886,#9)); +#890= IFCCARTESIANPOINT((705.,532.500000028387,0.)); +#892= IFCAXIS2PLACEMENT3D(#890,#15,#19); +#893= IFCPLANE(#892); +#894= IFCCURVEBOUNDEDPLANE(#893,#888,$); +#895= IFCCONNECTIONSURFACEGEOMETRY(#894,$); +#896= IFCCARTESIANPOINT((342.500000000003,0.)); +#898= IFCCARTESIANPOINT((342.500000000003,300.)); +#900= IFCCARTESIANPOINT((0.,300.)); +#902= IFCPOLYLINE((#9,#896,#898,#900,#9)); +#904= IFCCARTESIANPOINT((1032.5,190.,0.)); +#906= IFCAXIS2PLACEMENT3D(#904,#11,#15); +#907= IFCPLANE(#906); +#908= IFCCURVEBOUNDEDPLANE(#907,#902,$); +#909= IFCCONNECTIONSURFACEGEOMETRY(#908,$); +#910= IFCCARTESIANPOINT((327.5,0.)); +#912= IFCCARTESIANPOINT((327.499999999999,342.500000000003)); +#914= IFCCARTESIANPOINT((0.,342.500000000002)); +#916= IFCPOLYLINE((#9,#910,#912,#914,#9)); +#918= IFCCARTESIANPOINT((705.,190.,300.)); +#920= IFCAXIS2PLACEMENT3D(#918,#19,#11); +#921= IFCPLANE(#920); +#922= IFCCURVEBOUNDEDPLANE(#921,#916,$); +#923= IFCCONNECTIONSURFACEGEOMETRY(#922,$); +#924= IFCCARTESIANPOINT((300.,0.)); +#926= IFCCARTESIANPOINT((300.,342.5)); +#928= IFCCARTESIANPOINT((0.,342.500000000002)); +#930= IFCPOLYLINE((#9,#924,#926,#928,#9)); +#932= IFCCARTESIANPOINT((705.,190.,0.)); +#934= IFCAXIS2PLACEMENT3D(#932,#13,#19); +#935= IFCPLANE(#934); +#936= IFCCURVEBOUNDEDPLANE(#935,#930,$); +#937= IFCCONNECTIONSURFACEGEOMETRY(#936,$); +#938= IFCPROPERTYSINGLEVALUE('Reference',$,IFCIDENTIFIER('Espace 13'),$); +#939= IFCPROPERTYSET('3rT5tO7xbEjgOjgcy8zFw_',#41,'Pset_SpaceCommon',$,(#938)); +#941= IFCRELDEFINESBYPROPERTIES('3pDbqLne977g_0wSiKCfGN',#41,$,$,(#837),#939); +#945= IFCAXIS2PLACEMENT3D(#6,$,$); +#946= IFCLOCALPLACEMENT(#128,#945); +#947= IFCCARTESIANPOINT((5.68434188608080E-14,-3.26849658449646E-13)); +#949= IFCAXIS2PLACEMENT2D(#947,#23); +#950= IFCRECTANGLEPROFILEDEF(.AREA.,$,#949,380.,315.000000000002); +#951= IFCCARTESIANPOINT((510.,352.500000028386,0.)); +#953= IFCAXIS2PLACEMENT3D(#951,#19,#13); +#954= IFCEXTRUDEDAREASOLID(#950,#953,#19,300.); +#955= IFCSHAPEREPRESENTATION(#101,'Body','SweptSolid',(#954)); +#957= IFCPRODUCTDEFINITIONSHAPE($,$,(#955)); +#959= IFCSPACE('0Orm8sh5vFs9MyXfsGBgWW',#41,'14',$,$,#946,#957,'Espace',.ELEMENT.,.INTERNAL.,$); +#962= IFCCARTESIANPOINT((342.500000000001,0.)); +#964= IFCCARTESIANPOINT((342.500000000001,195.)); +#966= IFCCARTESIANPOINT((0.,195.)); +#968= IFCPOLYLINE((#9,#962,#964,#966,#9)); +#970= IFCCARTESIANPOINT((315.,190.,0.)); +#972= IFCAXIS2PLACEMENT3D(#970,#21,#15); +#973= IFCPLANE(#972); +#974= IFCCURVEBOUNDEDPLANE(#973,#968,$); +#975= IFCCONNECTIONSURFACEGEOMETRY(#974,$); +#976= IFCCARTESIANPOINT((70.,0.)); +#978= IFCCARTESIANPOINT((70.,195.)); +#980= IFCCARTESIANPOINT((0.,195.)); +#982= IFCPOLYLINE((#9,#976,#978,#980,#9)); +#984= IFCCARTESIANPOINT((510.,190.,0.)); +#986= IFCAXIS2PLACEMENT3D(#984,#21,#15); +#987= IFCPLANE(#986); +#988= IFCCURVEBOUNDEDPLANE(#987,#982,$); +#989= IFCCONNECTIONSURFACEGEOMETRY(#988,$); +#990= IFCCARTESIANPOINT((272.5,0.)); +#992= IFCCARTESIANPOINT((272.5,195.)); +#994= IFCCARTESIANPOINT((0.,195.)); +#996= IFCPOLYLINE((#9,#990,#992,#994,#9)); +#998= IFCCARTESIANPOINT((510.,260.,0.)); +#1000= IFCAXIS2PLACEMENT3D(#998,#21,#15); +#1001= IFCPLANE(#1000); +#1002= IFCCURVEBOUNDEDPLANE(#1001,#996,$); +#1003= IFCCONNECTIONSURFACEGEOMETRY(#1002,$); +#1004= IFCCARTESIANPOINT((342.5,0.)); +#1006= IFCCARTESIANPOINT((342.5,300.)); +#1008= IFCCARTESIANPOINT((0.,300.)); +#1010= IFCPOLYLINE((#9,#1004,#1006,#1008,#9)); +#1012= IFCCARTESIANPOINT((315.,190.,0.)); +#1014= IFCAXIS2PLACEMENT3D(#1012,#11,#15); +#1015= IFCPLANE(#1014); +#1016= IFCCURVEBOUNDEDPLANE(#1015,#1010,$); +#1017= IFCCONNECTIONSURFACEGEOMETRY(#1016,$); +#1018= IFCCARTESIANPOINT((300.,0.)); +#1020= IFCCARTESIANPOINT((300.,390.)); +#1022= IFCCARTESIANPOINT((0.,390.)); +#1024= IFCPOLYLINE((#9,#1018,#1020,#1022,#9)); +#1026= IFCCARTESIANPOINT((315.,190.,0.)); +#1028= IFCAXIS2PLACEMENT3D(#1026,#15,#19); +#1029= IFCPLANE(#1028); +#1030= IFCCURVEBOUNDEDPLANE(#1029,#1024,$); +#1031= IFCCONNECTIONSURFACEGEOMETRY(#1030,$); +#1032= IFCCARTESIANPOINT((300.,0.)); +#1034= IFCCARTESIANPOINT((300.,342.5)); +#1036= IFCCARTESIANPOINT((0.,342.500000000002)); +#1038= IFCPOLYLINE((#9,#1032,#1034,#1036,#9)); +#1040= IFCCARTESIANPOINT((705.,190.,0.)); +#1042= IFCAXIS2PLACEMENT3D(#1040,#13,#19); +#1043= IFCPLANE(#1042); +#1044= IFCCURVEBOUNDEDPLANE(#1043,#1038,$); +#1045= IFCCONNECTIONSURFACEGEOMETRY(#1044,$); +#1046= IFCCARTESIANPOINT((300.,0.)); +#1048= IFCCARTESIANPOINT((300.,390.)); +#1050= IFCCARTESIANPOINT((0.,390.)); +#1052= IFCPOLYLINE((#9,#1046,#1048,#1050,#9)); +#1054= IFCCARTESIANPOINT((315.,532.500000028387,0.)); +#1056= IFCAXIS2PLACEMENT3D(#1054,#15,#19); +#1057= IFCPLANE(#1056); +#1058= IFCCURVEBOUNDEDPLANE(#1057,#1052,$); +#1059= IFCCONNECTIONSURFACEGEOMETRY(#1058,$); +#1060= IFCCARTESIANPOINT((390.,0.)); +#1062= IFCCARTESIANPOINT((390.,342.5)); +#1064= IFCCARTESIANPOINT((0.,342.500000000001)); +#1066= IFCPOLYLINE((#9,#1060,#1062,#1064,#9)); +#1068= IFCCARTESIANPOINT((315.,190.,300.)); +#1070= IFCAXIS2PLACEMENT3D(#1068,#19,#11); +#1071= IFCPLANE(#1070); +#1072= IFCCURVEBOUNDEDPLANE(#1071,#1066,$); +#1073= IFCCONNECTIONSURFACEGEOMETRY(#1072,$); +#1074= IFCPROPERTYSINGLEVALUE('Reference',$,IFCIDENTIFIER('Espace 14'),$); +#1075= IFCPROPERTYSET('1FMDyHWnX6xB3nwyMdfaRg',#41,'Pset_SpaceCommon',$,(#1074)); +#1077= IFCRELDEFINESBYPROPERTIES('14vd1C5iv9Gg1mBj2G4tZH',#41,$,$,(#959),#1075); +#1081= IFCCARTESIANPOINT((-35.,532.500000028387,0.)); +#1083= IFCAXIS2PLACEMENT3D(#1081,$,$); +#1084= IFCLOCALPLACEMENT(#121,#1083); +#1085= IFCCARTESIANPOINT((1045.,0.)); +#1087= IFCPOLYLINE((#9,#1085)); +#1089= IFCSHAPEREPRESENTATION(#99,'Axis','Curve2D',(#1087)); +#1092= IFCCARTESIANPOINT((522.5,0.)); +#1094= IFCAXIS2PLACEMENT2D(#1092,#25); +#1095= IFCRECTANGLEPROFILEDEF(.AREA.,$,#1094,1045.,45.); +#1096= IFCAXIS2PLACEMENT3D(#6,$,$); +#1097= IFCEXTRUDEDAREASOLID(#1095,#1096,#19,300.); +#1098= IFCCOLOURRGB($,0.470588235294118,0.470588235294118,0.470588235294118); +#1099= IFCSURFACESTYLERENDERING(#1098,0.,$,$,$,$,IFCNORMALISEDRATIOMEASURE(0.5),IFCSPECULAREXPONENT(64.),.NOTDEFINED.); +#1100= IFCSURFACESTYLE('Stuc',.BOTH.,(#1099)); +#1102= IFCPRESENTATIONSTYLEASSIGNMENT((#1100)); +#1104= IFCSTYLEDITEM(#1097,(#1102),$); +#1107= IFCSHAPEREPRESENTATION(#101,'Body','SweptSolid',(#1097)); +#1109= IFCPRODUCTDEFINITIONSHAPE($,$,(#1089,#1107)); +#1111= IFCWALLSTANDARDCASE('3kknIDuW56e9XuW3A6wxiH',#41,'Mur de base:Ext - B\X2\00E9\X0\ton - 45 cm:5349754',$,'Mur de base:Ext - B\X2\00E9\X0\ton - 45 cm',#1084,#1109,'5349754'); +#1120= IFCMATERIAL('Stuc'); +#1123= IFCPRESENTATIONSTYLEASSIGNMENT((#1100)); +#1125= IFCSTYLEDITEM($,(#1123),$); +#1127= IFCSTYLEDREPRESENTATION(#96,'Style','Material',(#1125)); +#1130= IFCMATERIALDEFINITIONREPRESENTATION($,$,(#1127),#1120); +#1133= IFCMATERIAL('Isolation ext\X2\00E9\X0\rieure'); +#1134= IFCCOLOURRGB($,0.470588235294118,0.470588235294118,0.470588235294118); +#1135= IFCSURFACESTYLERENDERING(#1134,0.,$,$,$,$,IFCNORMALISEDRATIOMEASURE(0.5),IFCSPECULAREXPONENT(64.),.NOTDEFINED.); +#1136= IFCSURFACESTYLE('Isolation ext\X2\00E9\X0\rieure',.BOTH.,(#1135)); +#1138= IFCPRESENTATIONSTYLEASSIGNMENT((#1136)); +#1140= IFCSTYLEDITEM($,(#1138),$); +#1142= IFCSTYLEDREPRESENTATION(#96,'Style','Material',(#1140)); +#1144= IFCMATERIALDEFINITIONREPRESENTATION($,$,(#1142),#1133); +#1147= IFCMATERIAL('B\X2\00E9\X0\ton, coul\X2\00E9\X0\ sur place, gris'); +#1148= IFCCOLOURRGB($,0.470588235294118,0.470588235294118,0.470588235294118); +#1149= IFCSURFACESTYLERENDERING(#1148,0.,$,$,$,$,IFCNORMALISEDRATIOMEASURE(0.5),IFCSPECULAREXPONENT(64.),.NOTDEFINED.); +#1150= IFCSURFACESTYLE('B\X2\00E9\X0\ton, coul\X2\00E9\X0\ sur place, gris',.BOTH.,(#1149)); +#1152= IFCPRESENTATIONSTYLEASSIGNMENT((#1150)); +#1154= IFCSTYLEDITEM($,(#1152),$); +#1156= IFCSTYLEDREPRESENTATION(#96,'Style','Material',(#1154)); +#1158= IFCMATERIALDEFINITIONREPRESENTATION($,$,(#1156),#1147); +#1161= IFCMATERIALLAYER(#1120,5.,$); +#1163= IFCMATERIALLAYER(#1133,20.,$); +#1164= IFCMATERIALLAYER(#1147,20.,$); +#1165= IFCMATERIALLAYERSET((#1161,#1163,#1164),'Mur de base:Ext - B\X2\00E9\X0\ton - 45 cm'); +#1170= IFCMATERIALLAYERSETUSAGE(#1165,.AXIS2.,.NEGATIVE.,22.5); +#1171= IFCWALLTYPE('2d1_2huaH1mh73LqfuAgpQ',#41,'Ext - B\X2\00E9\X0\ton - 45 cm',$,$,$,$,'3136248',$,.STANDARD.); +#1173= IFCPROPERTYSINGLEVALUE('Reference',$,IFCIDENTIFIER('Ext - B\X2\00E9\X0\ton - 45 cm'),$); +#1174= IFCPROPERTYSET('2O$jiqOyX1JuFkiCfW$qNt',#41,'Pset_QuantityTakeOff',$,(#1173)); +#1176= IFCPROPERTYSINGLEVALUE('ThermalTransmittance',$,IFCTHERMALTRANSMITTANCEMEASURE(0.162786859608057),$); +#1177= IFCPROPERTYSINGLEVALUE('IsExternal',$,IFCBOOLEAN(.T.),$); +#1178= IFCPROPERTYSINGLEVALUE('ExtendToStructure',$,IFCBOOLEAN(.F.),$); +#1179= IFCPROPERTYSINGLEVALUE('LoadBearing',$,IFCBOOLEAN(.F.),$); +#1180= IFCPROPERTYSET('3kknIDuW56e9XuYy_6wxiH',#41,'Pset_WallCommon',$,(#1173,#1176,#1177,#1178,#1179)); +#1182= IFCRELDEFINESBYPROPERTIES('3alo5qFB10svroJk1oQe_k',#41,$,$,(#1111),#1174); +#1186= IFCRELDEFINESBYPROPERTIES('1W2BHuR6T5Gwx8zgFGA8Bv',#41,$,$,(#1111),#1180); +#1189= IFCCLASSIFICATION('http://www.csiorg.net/uniformat','1998',$,'Uniformat'); +#1191= IFCCARTESIANPOINT((-12.5000000000001,-35.,0.)); +#1193= IFCAXIS2PLACEMENT3D(#1191,#19,#15); +#1194= IFCLOCALPLACEMENT(#121,#1193); +#1195= IFCCARTESIANPOINT((545.,0.)); +#1197= IFCPOLYLINE((#9,#1195)); +#1199= IFCSHAPEREPRESENTATION(#99,'Axis','Curve2D',(#1197)); +#1201= IFCCARTESIANPOINT((272.5,-3.55271367880050E-15)); +#1203= IFCAXIS2PLACEMENT2D(#1201,#25); +#1204= IFCRECTANGLEPROFILEDEF(.AREA.,$,#1203,545.,45.); +#1205= IFCAXIS2PLACEMENT3D(#6,$,$); +#1206= IFCEXTRUDEDAREASOLID(#1204,#1205,#19,300.); +#1207= IFCSTYLEDITEM(#1206,(#1102),$); +#1210= IFCSHAPEREPRESENTATION(#101,'Body','SweptSolid',(#1206)); +#1212= IFCPRODUCTDEFINITIONSHAPE($,$,(#1199,#1210)); +#1214= IFCWALLSTANDARDCASE('3kknIDuW56e9XuW3A6wxiG',#41,'Mur de base:Ext - B\X2\00E9\X0\ton - 45 cm:5349755',$,'Mur de base:Ext - B\X2\00E9\X0\ton - 45 cm',#1194,#1212,'5349755'); +#1217= IFCMATERIALLAYERSETUSAGE(#1165,.AXIS2.,.NEGATIVE.,22.5); +#1218= IFCPROPERTYSET('1oe1hOAC18aheobj0E_Yyc',#41,'Pset_QuantityTakeOff',$,(#1173)); +#1220= IFCPROPERTYSINGLEVALUE('ThermalTransmittance',$,IFCTHERMALTRANSMITTANCEMEASURE(0.162786859608057),$); +#1221= IFCPROPERTYSET('3kknIDuW56e9XuYy_6wxiG',#41,'Pset_WallCommon',$,(#1173,#1177,#1178,#1179,#1220)); +#1223= IFCRELDEFINESBYPROPERTIES('039eXxyKPEzx_A5kdsfQ8$',#41,$,$,(#1214),#1218); +#1227= IFCRELDEFINESBYPROPERTIES('1fC1zb_hzCVP1dkaZW8CNL',#41,$,$,(#1214),#1221); +#1230= IFCCARTESIANPOINT((1055.,-12.4999999716132,0.)); +#1232= IFCAXIS2PLACEMENT3D(#1230,#19,#13); +#1233= IFCLOCALPLACEMENT(#121,#1232); +#1234= IFCCARTESIANPOINT((1045.,0.)); +#1236= IFCPOLYLINE((#9,#1234)); +#1238= IFCSHAPEREPRESENTATION(#99,'Axis','Curve2D',(#1236)); +#1240= IFCCARTESIANPOINT((522.5,0.)); +#1242= IFCAXIS2PLACEMENT2D(#1240,#25); +#1243= IFCRECTANGLEPROFILEDEF(.AREA.,$,#1242,1045.,45.); +#1244= IFCAXIS2PLACEMENT3D(#6,$,$); +#1245= IFCEXTRUDEDAREASOLID(#1243,#1244,#19,300.); +#1246= IFCSTYLEDITEM(#1245,(#1102),$); +#1249= IFCSHAPEREPRESENTATION(#101,'Body','SweptSolid',(#1245)); +#1251= IFCPRODUCTDEFINITIONSHAPE($,$,(#1238,#1249)); +#1253= IFCWALLSTANDARDCASE('3kknIDuW56e9XuW3A6wxiN',#41,'Mur de base:Ext - B\X2\00E9\X0\ton - 45 cm:5349756',$,'Mur de base:Ext - B\X2\00E9\X0\ton - 45 cm',#1233,#1251,'5349756'); +#1256= IFCMATERIALLAYERSETUSAGE(#1165,.AXIS2.,.NEGATIVE.,22.5); +#1257= IFCPROPERTYSET('0TgVJkRGX7mf6qAn3jTWLQ',#41,'Pset_QuantityTakeOff',$,(#1173)); +#1259= IFCPROPERTYSINGLEVALUE('ThermalTransmittance',$,IFCTHERMALTRANSMITTANCEMEASURE(0.162786859608057),$); +#1260= IFCPROPERTYSET('3kknIDuW56e9XuYy_6wxiN',#41,'Pset_WallCommon',$,(#1173,#1177,#1178,#1179,#1259)); +#1262= IFCRELDEFINESBYPROPERTIES('1Vu7BuAzL4Pg$KoajdkJJp',#41,$,$,(#1253),#1257); +#1266= IFCRELDEFINESBYPROPERTIES('27wc4yTafBRhVFy8XY97aQ',#41,$,$,(#1253),#1260); +#1269= IFCCARTESIANPOINT((1032.5,555.,0.)); +#1271= IFCAXIS2PLACEMENT3D(#1269,#19,#17); +#1272= IFCLOCALPLACEMENT(#121,#1271); +#1273= IFCCARTESIANPOINT((545.,0.)); +#1275= IFCPOLYLINE((#9,#1273)); +#1277= IFCSHAPEREPRESENTATION(#99,'Axis','Curve2D',(#1275)); +#1279= IFCCARTESIANPOINT((272.5,0.)); +#1281= IFCAXIS2PLACEMENT2D(#1279,#25); +#1282= IFCRECTANGLEPROFILEDEF(.AREA.,$,#1281,545.,45.0000000000002); +#1283= IFCAXIS2PLACEMENT3D(#6,$,$); +#1284= IFCEXTRUDEDAREASOLID(#1282,#1283,#19,300.); +#1285= IFCSTYLEDITEM(#1284,(#1102),$); +#1288= IFCSHAPEREPRESENTATION(#101,'Body','SweptSolid',(#1284)); +#1290= IFCPRODUCTDEFINITIONSHAPE($,$,(#1277,#1288)); +#1292= IFCWALLSTANDARDCASE('3kknIDuW56e9XuW3A6wxiM',#41,'Mur de base:Ext - B\X2\00E9\X0\ton - 45 cm:5349757',$,'Mur de base:Ext - B\X2\00E9\X0\ton - 45 cm',#1272,#1290,'5349757'); +#1295= IFCMATERIALLAYERSETUSAGE(#1165,.AXIS2.,.NEGATIVE.,22.5); +#1296= IFCPROPERTYSET('1Fr6KKBiL89vj4M$Rh0Fk0',#41,'Pset_QuantityTakeOff',$,(#1173)); +#1298= IFCPROPERTYSINGLEVALUE('ThermalTransmittance',$,IFCTHERMALTRANSMITTANCEMEASURE(0.162786859608057),$); +#1299= IFCPROPERTYSET('3kknIDuW56e9XuYy_6wxiM',#41,'Pset_WallCommon',$,(#1173,#1177,#1178,#1179,#1298)); +#1301= IFCRELDEFINESBYPROPERTIES('2DXksaWvr8qeX_ZcI2TJoJ',#41,$,$,(#1292),#1296); +#1305= IFCRELDEFINESBYPROPERTIES('1ROoWdZo99dQ5hV1m0gOT6',#41,$,$,(#1292),#1299); +#1308= IFCCARTESIANPOINT((510.,510.,0.)); +#1310= IFCAXIS2PLACEMENT3D(#1308,#19,#17); +#1311= IFCLOCALPLACEMENT(#121,#1310); +#1312= IFCCARTESIANPOINT((500.,-0.)); +#1314= IFCPOLYLINE((#9,#1312)); +#1316= IFCSHAPEREPRESENTATION(#99,'Axis','Curve2D',(#1314)); +#1318= IFCCARTESIANPOINT((250.,0.)); +#1320= IFCAXIS2PLACEMENT2D(#1318,#25); +#1321= IFCRECTANGLEPROFILEDEF(.AREA.,$,#1320,500.,10.0000000000001); +#1322= IFCAXIS2PLACEMENT3D(#6,$,$); +#1323= IFCEXTRUDEDAREASOLID(#1321,#1322,#19,300.); +#1324= IFCCOLOURRGB($,0.498039215686275,0.498039215686275,0.498039215686275); +#1325= IFCSURFACESTYLERENDERING(#1324,0.,$,$,$,$,IFCNORMALISEDRATIOMEASURE(0.5),IFCSPECULAREXPONENT(64.),.NOTDEFINED.); +#1326= IFCSURFACESTYLE('Mur par d\X2\00E9\X0\faut',.BOTH.,(#1325)); +#1328= IFCPRESENTATIONSTYLEASSIGNMENT((#1326)); +#1330= IFCSTYLEDITEM(#1323,(#1328),$); +#1333= IFCSHAPEREPRESENTATION(#101,'Body','SweptSolid',(#1323)); +#1335= IFCPRODUCTDEFINITIONSHAPE($,$,(#1316,#1333)); +#1337= IFCWALLSTANDARDCASE('3kknIDuW56e9XuW3A6wxaZ',#41,'Mur de base:Int - Pl\X2\00E2\X0\tre 10.0:5350216',$,'Mur de base:Int - Pl\X2\00E2\X0\tre 10.0',#1311,#1335,'5350216'); +#1340= IFCMATERIAL('Mur par d\X2\00E9\X0\faut'); +#1341= IFCPRESENTATIONSTYLEASSIGNMENT((#1326)); +#1343= IFCSTYLEDITEM($,(#1341),$); +#1345= IFCSTYLEDREPRESENTATION(#96,'Style','Material',(#1343)); +#1347= IFCMATERIALDEFINITIONREPRESENTATION($,$,(#1345),#1340); +#1350= IFCMATERIALLAYER(#1340,10.,$); +#1351= IFCMATERIALLAYERSET((#1350),'Mur de base:Int - Pl\X2\00E2\X0\tre 10.0'); +#1354= IFCMATERIALLAYERSETUSAGE(#1351,.AXIS2.,.NEGATIVE.,5.); +#1355= IFCWALLTYPE('2oqeEfCy933wX62opuNr$O',#41,'Int - Pl\X2\00E2\X0\tre 10.0',$,$,$,$,'806577',$,.STANDARD.); +#1356= IFCPROPERTYSINGLEVALUE('Reference',$,IFCIDENTIFIER('Int - Pl\X2\00E2\X0\tre 10.0'),$); +#1357= IFCPROPERTYSET('2HwDDFgBn9TO6UJAzNQTB0',#41,'Pset_QuantityTakeOff',$,(#1356)); +#1359= IFCPROPERTYSINGLEVALUE('IsExternal',$,IFCBOOLEAN(.F.),$); +#1360= IFCPROPERTYSET('3kknIDuW56e9XuYy_6wxaZ',#41,'Pset_WallCommon',$,(#1178,#1179,#1356,#1359)); +#1362= IFCRELDEFINESBYPROPERTIES('2xiDbk4DHD9hVtnyn4i0IG',#41,$,$,(#1337),#1357); +#1366= IFCRELDEFINESBYPROPERTIES('3nx6wNDFDFPeTtuAy2ncv2',#41,$,$,(#1337),#1360); +#1369= IFCCARTESIANPOINT((515.,260.,0.)); +#1371= IFCAXIS2PLACEMENT3D(#1369,$,$); +#1372= IFCLOCALPLACEMENT(#121,#1371); +#1373= IFCCARTESIANPOINT((495.,0.)); +#1375= IFCPOLYLINE((#9,#1373)); +#1377= IFCSHAPEREPRESENTATION(#99,'Axis','Curve2D',(#1375)); +#1379= IFCCARTESIANPOINT((247.5,-7.99360577730113E-15)); +#1381= IFCAXIS2PLACEMENT2D(#1379,#25); +#1382= IFCRECTANGLEPROFILEDEF(.AREA.,$,#1381,495.,10.); +#1383= IFCAXIS2PLACEMENT3D(#6,$,$); +#1384= IFCEXTRUDEDAREASOLID(#1382,#1383,#19,300.); +#1385= IFCSTYLEDITEM(#1384,(#1328),$); +#1388= IFCSHAPEREPRESENTATION(#101,'Body','SweptSolid',(#1384)); +#1390= IFCPRODUCTDEFINITIONSHAPE($,$,(#1377,#1388)); +#1392= IFCWALLSTANDARDCASE('3kknIDuW56e9XuW3A6wxc4',#41,'Mur de base:Int - Pl\X2\00E2\X0\tre 10.0:5350383',$,'Mur de base:Int - Pl\X2\00E2\X0\tre 10.0',#1372,#1390,'5350383'); +#1395= IFCMATERIALLAYERSETUSAGE(#1351,.AXIS2.,.NEGATIVE.,5.); +#1396= IFCPROPERTYSET('26PISZvhH1KA2H_bSpWPdX',#41,'Pset_QuantityTakeOff',$,(#1356)); +#1398= IFCPROPERTYSET('3kknIDuW56e9XuYy_6wxc4',#41,'Pset_WallCommon',$,(#1178,#1179,#1356,#1359)); +#1400= IFCRELDEFINESBYPROPERTIES('16RtaVQRvBaeIKb1X4n5bc',#41,$,$,(#1392),#1396); +#1404= IFCRELDEFINESBYPROPERTIES('3j8kd9ENzCtv13M3eaZEmK',#41,$,$,(#1392),#1398); +#1409= IFCAXIS2PLACEMENT3D(#6,$,$); +#1410= IFCLOCALPLACEMENT(#121,#1409); +#1411= IFCCARTESIANPOINT((-1.13686837721616E-13,0.)); +#1413= IFCAXIS2PLACEMENT2D(#1411,#23); +#1414= IFCRECTANGLEPROFILEDEF(.AREA.,$,#1413,540.,1040.); +#1415= IFCCARTESIANPOINT((510.,260.,0.)); +#1417= IFCAXIS2PLACEMENT3D(#1415,#21,#15); +#1418= IFCEXTRUDEDAREASOLID(#1414,#1417,#19,30.); +#1419= IFCCOLOURRGB($,0.498039215686275,0.498039215686275,0.498039215686275); +#1420= IFCSURFACESTYLERENDERING(#1419,0.,$,$,$,$,IFCNORMALISEDRATIOMEASURE(0.5),IFCSPECULAREXPONENT(64.),.NOTDEFINED.); +#1421= IFCSURFACESTYLE('Sol par d\X2\00E9\X0\faut',.BOTH.,(#1420)); +#1423= IFCPRESENTATIONSTYLEASSIGNMENT((#1421)); +#1425= IFCSTYLEDITEM(#1418,(#1423),$); +#1428= IFCSHAPEREPRESENTATION(#101,'Body','SweptSolid',(#1418)); +#1430= IFCPRODUCTDEFINITIONSHAPE($,$,(#1428)); +#1432= IFCSLAB('3kknIDuW56e9XuW3A6wxuu',#41,'Sol:EXT - G\X2\00E9\X0\n\X2\00E9\X0\rique 30.0 cm:5350483',$,'Sol:EXT - G\X2\00E9\X0\n\X2\00E9\X0\rique 30.0 cm',#1410,#1430,'5350483',.NOTDEFINED.); +#1435= IFCSLABTYPE('15Z0yK0RiHrPC20026FoLQ',#41,'EXT - G\X2\00E9\X0\n\X2\00E9\X0\rique 30.0 cm',$,$,$,$,'759',$,.NOTDEFINED.); +#1436= IFCMATERIAL('Sol par d\X2\00E9\X0\faut'); +#1437= IFCPRESENTATIONSTYLEASSIGNMENT((#1421)); +#1439= IFCSTYLEDITEM($,(#1437),$); +#1441= IFCSTYLEDREPRESENTATION(#96,'Style','Material',(#1439)); +#1443= IFCMATERIALDEFINITIONREPRESENTATION($,$,(#1441),#1436); +#1446= IFCMATERIALLAYER(#1436,30.,$); +#1447= IFCMATERIALLAYERSET((#1446),'Sol:EXT - G\X2\00E9\X0\n\X2\00E9\X0\rique 30.0 cm'); +#1450= IFCMATERIALLAYERSETUSAGE(#1447,.AXIS3.,.POSITIVE.,0.); +#1451= IFCPROPERTYSINGLEVALUE('Reference',$,IFCIDENTIFIER('EXT - G\X2\00E9\X0\n\X2\00E9\X0\rique 30.0 cm'),$); +#1452= IFCPROPERTYSET('2EpBtuzDLD7RBRhapiaGt9',#41,'Pset_QuantityTakeOff',$,(#1451)); +#1454= IFCPROPERTYSINGLEVALUE('PitchAngle',$,IFCPLANEANGLEMEASURE(0.),$); +#1455= IFCPROPERTYSET('3kknIDuW56e9XuYyc6wxuu',#41,'Pset_SlabCommon',$,(#1177,#1179,#1451,#1454)); +#1457= IFCRELDEFINESBYPROPERTIES('1gfgVbgtjBsRWHxG4r35qH',#41,$,$,(#1432),#1452); +#1461= IFCRELDEFINESBYPROPERTIES('1zJeLG9of42BiCJ824M7Ji',#41,$,$,(#1432),#1455); +#1464= IFCCARTESIANPOINT((-35.,532.500000028387,0.)); +#1466= IFCAXIS2PLACEMENT3D(#1464,$,$); +#1467= IFCLOCALPLACEMENT(#128,#1466); +#1468= IFCCARTESIANPOINT((1045.,0.)); +#1470= IFCPOLYLINE((#9,#1468)); +#1472= IFCSHAPEREPRESENTATION(#99,'Axis','Curve2D',(#1470)); +#1474= IFCCARTESIANPOINT((522.5,0.)); +#1476= IFCAXIS2PLACEMENT2D(#1474,#25); +#1477= IFCRECTANGLEPROFILEDEF(.AREA.,$,#1476,1045.,45.); +#1478= IFCAXIS2PLACEMENT3D(#6,$,$); +#1479= IFCEXTRUDEDAREASOLID(#1477,#1478,#19,300.); +#1480= IFCSTYLEDITEM(#1479,(#1102),$); +#1483= IFCSHAPEREPRESENTATION(#101,'Body','SweptSolid',(#1479)); +#1485= IFCPRODUCTDEFINITIONSHAPE($,$,(#1472,#1483)); +#1487= IFCWALLSTANDARDCASE('3kknIDuW56e9XuW3A6wxsj',#41,'Mur de base:Ext - B\X2\00E9\X0\ton - 45 cm:5351366',$,'Mur de base:Ext - B\X2\00E9\X0\ton - 45 cm',#1467,#1485,'5351366'); +#1490= IFCMATERIALLAYERSETUSAGE(#1165,.AXIS2.,.NEGATIVE.,22.5); +#1491= IFCPROPERTYSET('3lBYYmjjX2MB$5haP4Ol6q',#41,'Pset_QuantityTakeOff',$,(#1173)); +#1493= IFCPROPERTYSINGLEVALUE('ThermalTransmittance',$,IFCTHERMALTRANSMITTANCEMEASURE(0.162786859608057),$); +#1494= IFCPROPERTYSET('3kknIDuW56e9XuYy_6wxsj',#41,'Pset_WallCommon',$,(#1173,#1177,#1178,#1179,#1493)); +#1496= IFCRELDEFINESBYPROPERTIES('0uvWuxkR18w8Cz9Qyma0XO',#41,$,$,(#1487),#1491); +#1500= IFCRELDEFINESBYPROPERTIES('2aE1cu7cb9bAe7juEjUEZE',#41,$,$,(#1487),#1494); +#1503= IFCCARTESIANPOINT((-12.5000000000001,-35.,0.)); +#1505= IFCAXIS2PLACEMENT3D(#1503,#19,#15); +#1506= IFCLOCALPLACEMENT(#128,#1505); +#1507= IFCCARTESIANPOINT((545.,0.)); +#1509= IFCPOLYLINE((#9,#1507)); +#1511= IFCSHAPEREPRESENTATION(#99,'Axis','Curve2D',(#1509)); +#1513= IFCCARTESIANPOINT((272.5,-3.55271367880050E-15)); +#1515= IFCAXIS2PLACEMENT2D(#1513,#25); +#1516= IFCRECTANGLEPROFILEDEF(.AREA.,$,#1515,545.,45.); +#1517= IFCAXIS2PLACEMENT3D(#6,$,$); +#1518= IFCEXTRUDEDAREASOLID(#1516,#1517,#19,300.); +#1519= IFCSTYLEDITEM(#1518,(#1102),$); +#1522= IFCSHAPEREPRESENTATION(#101,'Body','SweptSolid',(#1518)); +#1524= IFCPRODUCTDEFINITIONSHAPE($,$,(#1511,#1522)); +#1526= IFCWALLSTANDARDCASE('3kknIDuW56e9XuW3A6wxsi',#41,'Mur de base:Ext - B\X2\00E9\X0\ton - 45 cm:5351367',$,'Mur de base:Ext - B\X2\00E9\X0\ton - 45 cm',#1506,#1524,'5351367'); +#1529= IFCMATERIALLAYERSETUSAGE(#1165,.AXIS2.,.NEGATIVE.,22.5); +#1530= IFCPROPERTYSET('3C6V5OOS99iQZRXFSFVIco',#41,'Pset_QuantityTakeOff',$,(#1173)); +#1532= IFCPROPERTYSINGLEVALUE('ThermalTransmittance',$,IFCTHERMALTRANSMITTANCEMEASURE(0.162786859608057),$); +#1533= IFCPROPERTYSET('3kknIDuW56e9XuYy_6wxsi',#41,'Pset_WallCommon',$,(#1173,#1177,#1178,#1179,#1532)); +#1535= IFCRELDEFINESBYPROPERTIES('0$kc4gnC17pR4VqTz4Hmqy',#41,$,$,(#1526),#1530); +#1539= IFCRELDEFINESBYPROPERTIES('336Eyc1cj7TBTgvVZxksJ1',#41,$,$,(#1526),#1533); +#1542= IFCCARTESIANPOINT((1055.,-12.4999999716132,0.)); +#1544= IFCAXIS2PLACEMENT3D(#1542,#19,#13); +#1545= IFCLOCALPLACEMENT(#128,#1544); +#1546= IFCCARTESIANPOINT((1045.,0.)); +#1548= IFCPOLYLINE((#9,#1546)); +#1550= IFCSHAPEREPRESENTATION(#99,'Axis','Curve2D',(#1548)); +#1552= IFCCARTESIANPOINT((522.5,0.)); +#1554= IFCAXIS2PLACEMENT2D(#1552,#25); +#1555= IFCRECTANGLEPROFILEDEF(.AREA.,$,#1554,1045.,45.); +#1556= IFCAXIS2PLACEMENT3D(#6,$,$); +#1557= IFCEXTRUDEDAREASOLID(#1555,#1556,#19,300.); +#1558= IFCSTYLEDITEM(#1557,(#1102),$); +#1561= IFCSHAPEREPRESENTATION(#101,'Body','SweptSolid',(#1557)); +#1563= IFCPRODUCTDEFINITIONSHAPE($,$,(#1550,#1561)); +#1565= IFCWALLSTANDARDCASE('3kknIDuW56e9XuW3A6wxsZ',#41,'Mur de base:Ext - B\X2\00E9\X0\ton - 45 cm:5351368',$,'Mur de base:Ext - B\X2\00E9\X0\ton - 45 cm',#1545,#1563,'5351368'); +#1568= IFCMATERIALLAYERSETUSAGE(#1165,.AXIS2.,.NEGATIVE.,22.5); +#1569= IFCPROPERTYSET('3hY3VHgZz8YOCSJ4cGnUC5',#41,'Pset_QuantityTakeOff',$,(#1173)); +#1571= IFCPROPERTYSINGLEVALUE('ThermalTransmittance',$,IFCTHERMALTRANSMITTANCEMEASURE(0.162786859608057),$); +#1572= IFCPROPERTYSET('3kknIDuW56e9XuYy_6wxsZ',#41,'Pset_WallCommon',$,(#1173,#1177,#1178,#1179,#1571)); +#1574= IFCRELDEFINESBYPROPERTIES('3HM7AWbBPB$fvcrc1KxDFB',#41,$,$,(#1565),#1569); +#1578= IFCRELDEFINESBYPROPERTIES('3Gb1hNiUT65f4e3Si6YWQq',#41,$,$,(#1565),#1572); +#1581= IFCCARTESIANPOINT((1032.5,555.,0.)); +#1583= IFCAXIS2PLACEMENT3D(#1581,#19,#17); +#1584= IFCLOCALPLACEMENT(#128,#1583); +#1585= IFCCARTESIANPOINT((545.,0.)); +#1587= IFCPOLYLINE((#9,#1585)); +#1589= IFCSHAPEREPRESENTATION(#99,'Axis','Curve2D',(#1587)); +#1591= IFCCARTESIANPOINT((272.5,0.)); +#1593= IFCAXIS2PLACEMENT2D(#1591,#25); +#1594= IFCRECTANGLEPROFILEDEF(.AREA.,$,#1593,545.,45.0000000000002); +#1595= IFCAXIS2PLACEMENT3D(#6,$,$); +#1596= IFCEXTRUDEDAREASOLID(#1594,#1595,#19,300.); +#1597= IFCSTYLEDITEM(#1596,(#1102),$); +#1600= IFCSHAPEREPRESENTATION(#101,'Body','SweptSolid',(#1596)); +#1602= IFCPRODUCTDEFINITIONSHAPE($,$,(#1589,#1600)); +#1604= IFCWALLSTANDARDCASE('3kknIDuW56e9XuW3A6wxsY',#41,'Mur de base:Ext - B\X2\00E9\X0\ton - 45 cm:5351369',$,'Mur de base:Ext - B\X2\00E9\X0\ton - 45 cm',#1584,#1602,'5351369'); +#1607= IFCMATERIALLAYERSETUSAGE(#1165,.AXIS2.,.NEGATIVE.,22.5); +#1608= IFCPROPERTYSET('3hBhyIImTAIeEVFqqem9_R',#41,'Pset_QuantityTakeOff',$,(#1173)); +#1610= IFCPROPERTYSINGLEVALUE('ThermalTransmittance',$,IFCTHERMALTRANSMITTANCEMEASURE(0.162786859608057),$); +#1611= IFCPROPERTYSET('3kknIDuW56e9XuYy_6wxsY',#41,'Pset_WallCommon',$,(#1173,#1177,#1178,#1179,#1610)); +#1613= IFCRELDEFINESBYPROPERTIES('3L5L$hUb55_87DS_srD01d',#41,$,$,(#1604),#1608); +#1617= IFCRELDEFINESBYPROPERTIES('2N5S4Y1JT0lwC_sciSIAgG',#41,$,$,(#1604),#1611); +#1620= IFCCARTESIANPOINT((315.,510.,0.)); +#1622= IFCAXIS2PLACEMENT3D(#1620,#19,#17); +#1623= IFCLOCALPLACEMENT(#128,#1622); +#1624= IFCCARTESIANPOINT((315.,0.)); +#1626= IFCPOLYLINE((#9,#1624)); +#1628= IFCSHAPEREPRESENTATION(#99,'Axis','Curve2D',(#1626)); +#1630= IFCCARTESIANPOINT((157.500000000001,8.88178419700125E-15)); +#1632= IFCAXIS2PLACEMENT2D(#1630,#25); +#1633= IFCRECTANGLEPROFILEDEF(.AREA.,$,#1632,315.000000000001,10.); +#1634= IFCAXIS2PLACEMENT3D(#6,$,$); +#1635= IFCEXTRUDEDAREASOLID(#1633,#1634,#19,300.); +#1636= IFCSTYLEDITEM(#1635,(#1328),$); +#1639= IFCSHAPEREPRESENTATION(#101,'Body','SweptSolid',(#1635)); +#1641= IFCPRODUCTDEFINITIONSHAPE($,$,(#1628,#1639)); +#1643= IFCWALLSTANDARDCASE('3kknIDuW56e9XuW3A6wx3k',#41,'Mur de base:Int - Pl\X2\00E2\X0\tre 10.0:5352069',$,'Mur de base:Int - Pl\X2\00E2\X0\tre 10.0',#1623,#1641,'5352069'); +#1646= IFCMATERIALLAYERSETUSAGE(#1351,.AXIS2.,.NEGATIVE.,5.); +#1647= IFCPROPERTYSET('1jsL5pOQT9UewPIC3inhq2',#41,'Pset_QuantityTakeOff',$,(#1356)); +#1649= IFCPROPERTYSET('3kknIDuW56e9XuYy_6wx3k',#41,'Pset_WallCommon',$,(#1178,#1179,#1356,#1359)); +#1651= IFCRELDEFINESBYPROPERTIES('18jBGzv4j6WPi4h3dE_$ZJ',#41,$,$,(#1643),#1647); +#1655= IFCRELDEFINESBYPROPERTIES('1zNzgLT9L5QBZ2vX2kdY9t',#41,$,$,(#1643),#1649); +#1658= IFCCARTESIANPOINT((705.,510.,0.)); +#1660= IFCAXIS2PLACEMENT3D(#1658,#19,#17); +#1661= IFCLOCALPLACEMENT(#128,#1660); +#1662= IFCCARTESIANPOINT((315.,-0.)); +#1664= IFCPOLYLINE((#9,#1662)); +#1666= IFCSHAPEREPRESENTATION(#99,'Axis','Curve2D',(#1664)); +#1668= IFCCARTESIANPOINT((157.500000000001,-3.99680288865056E-15)); +#1670= IFCAXIS2PLACEMENT2D(#1668,#25); +#1671= IFCRECTANGLEPROFILEDEF(.AREA.,$,#1670,315.000000000002,10.0000000000001); +#1672= IFCAXIS2PLACEMENT3D(#6,$,$); +#1673= IFCEXTRUDEDAREASOLID(#1671,#1672,#19,300.); +#1674= IFCSTYLEDITEM(#1673,(#1328),$); +#1677= IFCSHAPEREPRESENTATION(#101,'Body','SweptSolid',(#1673)); +#1679= IFCPRODUCTDEFINITIONSHAPE($,$,(#1666,#1677)); +#1681= IFCWALLSTANDARDCASE('3kknIDuW56e9XuW3A6wx22',#41,'Mur de base:Int - Pl\X2\00E2\X0\tre 10.0:5352169',$,'Mur de base:Int - Pl\X2\00E2\X0\tre 10.0',#1661,#1679,'5352169'); +#1684= IFCMATERIALLAYERSETUSAGE(#1351,.AXIS2.,.NEGATIVE.,5.); +#1685= IFCPROPERTYSET('1lF9BYfz144w2W52tdgC8y',#41,'Pset_QuantityTakeOff',$,(#1356)); +#1687= IFCPROPERTYSET('3kknIDuW56e9XuYy_6wx22',#41,'Pset_WallCommon',$,(#1178,#1179,#1356,#1359)); +#1689= IFCRELDEFINESBYPROPERTIES('3ycmDJAiz3vAFII976TY_Q',#41,$,$,(#1681),#1685); +#1693= IFCRELDEFINESBYPROPERTIES('3VtJ62XHP9ueS3Q1Xjldgc',#41,$,$,(#1681),#1687); +#1696= IFCCARTESIANPOINT((10.,190.,0.)); +#1698= IFCAXIS2PLACEMENT3D(#1696,$,$); +#1699= IFCLOCALPLACEMENT(#128,#1698); +#1700= IFCCARTESIANPOINT((1000.,0.)); +#1702= IFCPOLYLINE((#9,#1700)); +#1704= IFCSHAPEREPRESENTATION(#99,'Axis','Curve2D',(#1702)); +#1706= IFCCARTESIANPOINT((500.,0.)); +#1708= IFCAXIS2PLACEMENT2D(#1706,#25); +#1709= IFCRECTANGLEPROFILEDEF(.AREA.,$,#1708,1000.,10.); +#1710= IFCAXIS2PLACEMENT3D(#6,$,$); +#1711= IFCEXTRUDEDAREASOLID(#1709,#1710,#19,300.); +#1712= IFCSTYLEDITEM(#1711,(#1328),$); +#1715= IFCSHAPEREPRESENTATION(#101,'Body','SweptSolid',(#1711)); +#1717= IFCPRODUCTDEFINITIONSHAPE($,$,(#1704,#1715)); +#1719= IFCWALLSTANDARDCASE('3kknIDuW56e9XuW3A6wx4U',#41,'Mur de base:Int - Pl\X2\00E2\X0\tre 10.0:5352309',$,'Mur de base:Int - Pl\X2\00E2\X0\tre 10.0',#1699,#1717,'5352309'); +#1722= IFCMATERIALLAYERSETUSAGE(#1351,.AXIS2.,.NEGATIVE.,5.); +#1723= IFCPROPERTYSET('1zf7IsfCL0yAOWGUSzW9KO',#41,'Pset_QuantityTakeOff',$,(#1356)); +#1725= IFCPROPERTYSET('3kknIDuW56e9XuYy_6wx4U',#41,'Pset_WallCommon',$,(#1178,#1179,#1356,#1359)); +#1727= IFCRELDEFINESBYPROPERTIES('1CSR7kcW5AWfDHxQjbVHbV',#41,$,$,(#1719),#1723); +#1731= IFCRELDEFINESBYPROPERTIES('3ln7R9uz53aBdLof20DB3Y',#41,$,$,(#1719),#1725); +#1736= IFCAXIS2PLACEMENT3D(#6,$,$); +#1737= IFCLOCALPLACEMENT(#128,#1736); +#1738= IFCCARTESIANPOINT((-1.13686837721616E-13,0.)); +#1740= IFCAXIS2PLACEMENT2D(#1738,#23); +#1741= IFCRECTANGLEPROFILEDEF(.AREA.,$,#1740,540.,1040.); +#1742= IFCCARTESIANPOINT((510.,260.,0.)); +#1744= IFCAXIS2PLACEMENT3D(#1742,#21,#15); +#1745= IFCEXTRUDEDAREASOLID(#1741,#1744,#19,30.); +#1746= IFCSTYLEDITEM(#1745,(#1423),$); +#1749= IFCSHAPEREPRESENTATION(#101,'Body','SweptSolid',(#1745)); +#1751= IFCPRODUCTDEFINITIONSHAPE($,$,(#1749)); +#1753= IFCSLAB('3kknIDuW56e9XuW3A6wxQZ',#41,'Sol:INT - G\X2\00E9\X0\n\X2\00E9\X0\rique 30.0 cm:5352648',$,'Sol:INT - G\X2\00E9\X0\n\X2\00E9\X0\rique 30.0 cm',#1737,#1751,'5352648',.NOTDEFINED.); +#1756= IFCSLABTYPE('3KXnMQaRz0Z9PTKJ56VrVt',#41,'INT - G\X2\00E9\X0\n\X2\00E9\X0\rique 30.0 cm',$,$,$,$,'2455109',$,.NOTDEFINED.); +#1757= IFCMATERIALLAYER(#1436,30.,$); +#1758= IFCMATERIALLAYERSET((#1757),'Sol:INT - G\X2\00E9\X0\n\X2\00E9\X0\rique 30.0 cm'); +#1761= IFCMATERIALLAYERSETUSAGE(#1758,.AXIS3.,.POSITIVE.,0.); +#1762= IFCPROPERTYSINGLEVALUE('Reference',$,IFCIDENTIFIER('INT - G\X2\00E9\X0\n\X2\00E9\X0\rique 30.0 cm'),$); +#1763= IFCPROPERTYSET('2Q8ku8$DfA0u$5WE8JXQtz',#41,'Pset_QuantityTakeOff',$,(#1762)); +#1765= IFCPROPERTYSET('3kknIDuW56e9XuYyc6wxQZ',#41,'Pset_SlabCommon',$,(#1179,#1359,#1454,#1762)); +#1767= IFCRELDEFINESBYPROPERTIES('2cnWUhhY9Fs8J3tClaHPsk',#41,$,$,(#1753),#1763); +#1771= IFCRELDEFINESBYPROPERTIES('2fIgbRRqP5KRfCYBXmgVfq',#41,$,$,(#1753),#1765); +#1774= IFCAXIS2PLACEMENT3D(#1777,$,$); +#1775= IFCLOCALPLACEMENT(#134,#1774); +#1777= IFCCARTESIANPOINT((-35.,-35.,0.)); +#1779= IFCROOF('3kknIDuW56e9XuW3A6wxTo',#41,'Toit de base:Toiture:5352729',$,'Toit de base:Toiture',#1775,$,'5352729',.NOTDEFINED.); +#1781= IFCAXIS2PLACEMENT3D(#6,$,$); +#2189= IFCAXIS2PLACEMENT3D(#6,$,$); +#1784= IFCCARTESIANPOINT((-5.68434188608080E-14,0.)); +#1786= IFCAXIS2PLACEMENT2D(#1784,#23); +#1787= IFCRECTANGLEPROFILEDEF(.AREA.,$,#1786,1090.,590.); +#1788= IFCCARTESIANPOINT((545.,295.,0.)); +#1790= IFCAXIS2PLACEMENT3D(#1788,$,$); +#1791= IFCEXTRUDEDAREASOLID(#1787,#1790,#19,54.0000000000001); +#1792= IFCCOLOURRGB($,0.380392156862745,0.294117647058824,0.243137254901961); +#1793= IFCSURFACESTYLERENDERING(#1792,0.,$,$,$,$,IFCNORMALISEDRATIOMEASURE(0.5),IFCSPECULAREXPONENT(128.),.NOTDEFINED.); +#1794= IFCSURFACESTYLE('Terre',.BOTH.,(#1793)); +#1796= IFCPRESENTATIONSTYLEASSIGNMENT((#1794)); +#1798= IFCSTYLEDITEM(#1791,(#1796),$); +#1801= IFCSHAPEREPRESENTATION(#101,'Body','SweptSolid',(#1791)); +#1803= IFCPRODUCTDEFINITIONSHAPE($,$,(#1801)); +#1805= IFCAXIS2PLACEMENT3D(#6,$,$); +#1806= IFCLOCALPLACEMENT(#1775,#2189); +#1808= IFCSLAB('3kknIDuW56e9XuW326wxTo',#41,'Toit de base:Toiture:5352729',$,'Toit de base:Toiture',#1806,#1803,'5352729',.ROOF.); +#1811= IFCRELAGGREGATES('1aQ2ChDUD12vQUjEGAkRtB',#41,$,$,#1779,(#1808)); +#1815= IFCMATERIAL('Terre'); +#1816= IFCPRESENTATIONSTYLEASSIGNMENT((#1794)); +#1818= IFCSTYLEDITEM($,(#1816),$); +#1820= IFCSTYLEDREPRESENTATION(#96,'Style','Material',(#1818)); +#1822= IFCMATERIALDEFINITIONREPRESENTATION($,$,(#1820),#1815); +#1825= IFCMATERIAL('Toiture - Membrane EPDM'); +#1826= IFCCOLOURRGB($,0.498039215686275,0.498039215686275,0.498039215686275); +#1827= IFCSURFACESTYLERENDERING(#1826,0.,$,$,$,$,IFCNORMALISEDRATIOMEASURE(0.5),IFCSPECULAREXPONENT(64.),.NOTDEFINED.); +#1828= IFCSURFACESTYLE('Toiture - Membrane EPDM',.BOTH.,(#1827)); +#1830= IFCPRESENTATIONSTYLEASSIGNMENT((#1828)); +#1832= IFCSTYLEDITEM($,(#1830),$); +#1834= IFCSTYLEDREPRESENTATION(#96,'Style','Material',(#1832)); +#1836= IFCMATERIALDEFINITIONREPRESENTATION($,$,(#1834),#1825); +#1839= IFCMATERIAL('Polystyr\X2\00E8\X0\ne, expans\X2\00E9\X0\'); +#1840= IFCCOLOURRGB($,0.470588235294118,0.470588235294118,0.470588235294118); +#1841= IFCSURFACESTYLERENDERING(#1840,0.,$,$,$,$,IFCNORMALISEDRATIOMEASURE(0.5),IFCSPECULAREXPONENT(64.),.NOTDEFINED.); +#1842= IFCSURFACESTYLE('Polystyr\X2\00E8\X0\ne, expans\X2\00E9\X0\',.BOTH.,(#1841)); +#1844= IFCPRESENTATIONSTYLEASSIGNMENT((#1842)); +#1846= IFCSTYLEDITEM($,(#1844),$); +#1848= IFCSTYLEDREPRESENTATION(#96,'Style','Material',(#1846)); +#1850= IFCMATERIALDEFINITIONREPRESENTATION($,$,(#1848),#1839); +#1853= IFCMATERIALLAYER(#1815,12.,$); +#1854= IFCMATERIALLAYER(#1825,5.,$); +#1855= IFCMATERIALLAYER(#1839,25.,$); +#1856= IFCMATERIALLAYER(#1147,12.,$); +#1857= IFCMATERIALLAYERSET((#1853,#1854,#1855,#1856),'Toit de base:Toiture'); +#1863= IFCPROPERTYSINGLEVALUE('Reference',$,IFCIDENTIFIER('Toiture'),$); +#1864= IFCPROPERTYSET('35JlUbL$jBthuflu4chsAt',#41,'Pset_QuantityTakeOff',$,(#1863)); +#1866= IFCPROPERTYSINGLEVALUE('ProjectedArea',$,IFCAREAMEASURE(64.31),$); +#1867= IFCPROPERTYSET('3kknIDuW56e9XuYyk6wxTo',#41,'Pset_RoofCommon',$,(#1177,#1863,#1866)); +#1869= IFCPROPERTYSET('0dfl0rxu93ewcSpBLVTbIV',#41,'Pset_QuantityTakeOff',$,(#1863)); +#1871= IFCPROPERTYSINGLEVALUE('ThermalTransmittance',$,IFCTHERMALTRANSMITTANCEMEASURE(0.135117805877925),$); +#1872= IFCPROPERTYSET('3kknIDuW56e9XuYyc6wxTo',#41,'Pset_SlabCommon',$,(#1177,#1454,#1863,#1871)); +#1874= IFCRELDEFINESBYPROPERTIES('3lg26T1mnCaRKg5jeTIx7N',#41,$,$,(#1779),#1864); +#1878= IFCRELDEFINESBYPROPERTIES('0u1oQSqhr0lBBb__TvSY7z',#41,$,$,(#1779),#1867); +#1881= IFCRELDEFINESBYPROPERTIES('1vTP5Grur4Y99pyc7rZFWh',#41,$,$,(#1808),#1869); +#1885= IFCRELDEFINESBYPROPERTIES('0q5TANzt1C58s_gvIlrAJL',#41,$,$,(#1808),#1872); +#1888= IFCZONE('0L6Ksk7iTBT9hmk0knebY3',#41,'Par d\X2\00E9\X0\faut:293242',$,$); +#1890= IFCRELASSIGNSTOGROUP('0L6Ksk7iTBT9hmk0gnebY3',#41,$,$,(#165,#320,#456,#579,#687,#837,#959),$,#1888); +#1893= IFCPROPERTYSINGLEVALUE('Reference',$,IFCIDENTIFIER('Par d\X2\00E9\X0\faut'),$); +#1894= IFCPROPERTYSET('0y48mV0uPDte75qOklpKPW',#41,'Pset_ZoneCommon',$,(#1893)); +#1896= IFCRELDEFINESBYPROPERTIES('0Pb9sxANv7IhA2dnhXnuui',#41,$,$,(#1888),#1894); +#1901= IFCPROPERTYSINGLEVALUE('AboveGround',$,IFCLOGICAL(.U.),$); +#1902= IFCPROPERTYSET('3Zu5Bv0LOHrPC12_o6FoQQ',#41,'Pset_BuildingStoreyCommon',$,(#1901)); +#1904= IFCRELDEFINESBYPROPERTIES('0eodFBt0b1EhzPxe0RLG6u',#41,$,$,(#123),#1902); +#1908= IFCRELCONTAINEDINSPATIALSTRUCTURE('3Zu5Bv0LOHrPC10066FoQQ',#41,$,$,(#1111,#1214,#1253,#1292,#1337,#1392,#1432),#123); +#1918= IFCPROPERTYSET('3kknIDuW56e9XuYzw6wxqX',#41,'Pset_BuildingStoreyCommon',$,(#1901)); +#1920= IFCRELDEFINESBYPROPERTIES('1VJa4vO3HA0hV4_151xpz5',#41,$,$,(#129),#1918); +#1924= IFCRELCONTAINEDINSPATIALSTRUCTURE('3kknIDuW56e9XuW3E6wxqX',#41,$,$,(#1487,#1526,#1565,#1604,#1643,#1681,#1719,#1753),#129); +#1935= IFCPROPERTYSET('3kknIDuW56e9XuYzw6wx8o',#41,'Pset_BuildingStoreyCommon',$,(#1901)); +#1937= IFCRELDEFINESBYPROPERTIES('2dMM_xcnzA6gQodg7e8v5s',#41,$,$,(#135),#1935); +#1941= IFCRELCONTAINEDINSPATIALSTRUCTURE('3kknIDuW56e9XuW3E6wx8o',#41,$,$,(#1779),#135); +#1945= IFCRELAGGREGATES('0T07AInOnDgftwhkO1hCav',#41,$,$,#104,(#143)); +#1949= IFCRELAGGREGATES('2S1Hnv0fj8Gw8WbkVSxUf0',#41,$,$,#143,(#114)); +#1953= IFCRELAGGREGATES('3Zu5Bv0LOHrPC100A6FoQQ',#41,$,$,#123,(#165,#320,#456)); +#1959= IFCRELAGGREGATES('3kknIDuW56e9XuW326wxqX',#41,$,$,#129,(#579,#687,#837,#959)); +#1966= IFCRELAGGREGATES('27PCKGLxT4mxtV9cw6mgBW',#41,$,$,#114,(#123,#129,#135)); +#1972= IFCPROPERTYSINGLEVALUE('NumberOfStoreys',$,IFCINTEGER(3),$); +#1973= IFCPROPERTYSINGLEVALUE('IsLandmarked',$,IFCLOGICAL(.U.),$); +#1974= IFCPROPERTYSET('27PCKGLxT4mxtVBOQ6mgBW',#41,'Pset_BuildingCommon',$,(#1972,#1973)); +#1976= IFCRELDEFINESBYPROPERTIES('1RiDqPca91Ggyj2GKmbJZ_',#41,$,$,(#114),#1974); +#1980= IFCRELASSOCIATESMATERIAL('1a9Zdalf1E3gocuacAAa4c',#41,$,$,(#1111),#1170); +#1983= IFCRELASSOCIATESMATERIAL('3q957M3Sz07xsWe42MS7IU',#41,$,$,(#1171),#1165); +#1986= IFCRELASSOCIATESMATERIAL('00W4qTnPL0yR$wGWRicnxq',#41,$,$,(#1214),#1217); +#1989= IFCRELASSOCIATESMATERIAL('3mGq3mbSL0KBmat4KgXHe0',#41,$,$,(#1253),#1256); +#1992= IFCRELASSOCIATESMATERIAL('0a4WTa$cTDKPiLSxLhbLLz',#41,$,$,(#1292),#1295); +#1995= IFCRELASSOCIATESMATERIAL('0zv$9hiYz79BMt5LtPdG5D',#41,$,$,(#1337),#1354); +#1998= IFCRELASSOCIATESMATERIAL('3QjBfoujL6QvzM6eKp$Cbt',#41,$,$,(#1355),#1351); +#2001= IFCRELASSOCIATESMATERIAL('0r616WLzH65Pf5a24068qi',#41,$,$,(#1392),#1395); +#2004= IFCRELASSOCIATESMATERIAL('3wpirySA554QYFYuVnVAwq',#41,$,$,(#1432),#1450); +#2007= IFCRELASSOCIATESMATERIAL('1zYMcvsAn5RBQxtUmVFHLJ',#41,$,$,(#1487),#1490); +#2010= IFCRELASSOCIATESMATERIAL('2GAfxRp8v0rwvPBxfm8RIq',#41,$,$,(#1526),#1529); +#2013= IFCRELASSOCIATESMATERIAL('1$A9XtPKf56OTICvl48w8x',#41,$,$,(#1565),#1568); +#2016= IFCRELASSOCIATESMATERIAL('3CtM6l0cj45AIL1wqSmBae',#41,$,$,(#1604),#1607); +#2019= IFCRELASSOCIATESMATERIAL('3$1ngYTh5EkO9x9Z0DwUGT',#41,$,$,(#1643),#1646); +#2022= IFCRELASSOCIATESMATERIAL('2uwNKzF0v6u9QHvmC3Fn_0',#41,$,$,(#1681),#1684); +#2025= IFCRELASSOCIATESMATERIAL('1P0mmjQ9vCPRm6W59I$A4W',#41,$,$,(#1719),#1722); +#2028= IFCRELASSOCIATESMATERIAL('1ak$X3wjnEUexuVUbNRpGy',#41,$,$,(#1753),#1761); +#2031= IFCRELASSOCIATESMATERIAL('0klizvAPv1092LFKB$w6bv',#41,$,$,(#1435),#1447); +#2034= IFCRELASSOCIATESMATERIAL('3A0vyedkz9k9KmhrH5B_2L',#41,$,$,(#1756),#1758); +#2037= IFCRELASSOCIATESMATERIAL('1a69EER0H2uBuR4av3RpXA',#41,$,$,(#1808),#1857); +#2040= IFCRELDEFINESBYTYPE('0CWzE$7Xr0GONjv1u_eKtU',#41,$,$,(#1111,#1214,#1253,#1292,#1487,#1526,#1565,#1604),#1171); +#2043= IFCRELDEFINESBYTYPE('27MgCEbqT4WwcZ_rwVJHyK',#41,$,$,(#1337,#1392,#1643,#1681,#1719),#1355); +#2046= IFCRELDEFINESBYTYPE('3LtgkKHAD49RJWuR$bDmWE',#41,$,$,(#1432),#1435); +#2049= IFCRELDEFINESBYTYPE('1SS7g0LWnBhvI6zNvjcW06',#41,$,$,(#1753),#1756); +#2052= IFCRELSPACEBOUNDARY('0NnfzCwT1A9gtgrPOgEuV0',#41,'2ndLevel',$,#165,#1111,#183,.PHYSICAL.,.EXTERNAL.); +#2054= IFCRELSPACEBOUNDARY('2KO8glb5n2nuWwM5zdGVIX',#41,'2ndLevel',$,#165,#1214,#197,.PHYSICAL.,.EXTERNAL.); +#2055= IFCRELSPACEBOUNDARY('0_CyRBkWr2aBmZY3JOK77T',#41,'2ndLevel',$,#165,#1253,#211,.PHYSICAL.,.EXTERNAL.); +#2056= IFCRELSPACEBOUNDARY('0jsQPulnT0NvQ7QdSpz95K',#41,'2ndLevel',$,#165,#1432,#225,.PHYSICAL.,.EXTERNAL.); +#2057= IFCRELSPACEBOUNDARY('3e4xJsq71BOfMTv1EY8Rd4',#41,'2ndLevel',$,#165,#1337,#239,.PHYSICAL.,.INTERNAL.); +#2058= IFCRELSPACEBOUNDARY('1elrc$Iiz5a9JMg6_Ii2NG',#41,'2ndLevel',$,#165,#1337,#253,.PHYSICAL.,.INTERNAL.); +#2059= IFCRELSPACEBOUNDARY('3AKNz6wnDCmPWGONuzXMcm',#41,'2ndLevel',$,#165,#1753,#267,.PHYSICAL.,.INTERNAL.); +#2060= IFCRELSPACEBOUNDARY('1vvXhoOcPC_eXaCChicFBG',#41,'2ndLevel',$,#165,#1753,#281,.PHYSICAL.,.INTERNAL.); +#2061= IFCRELSPACEBOUNDARY('3E1uhxnFz77QbDIf1FFsqp',#41,'2ndLevel',$,#165,#1753,#295,.PHYSICAL.,.INTERNAL.); +#2062= IFCRELSPACEBOUNDARY('2FBiISEcH22OZw6Qbsr3sG',#41,'2ndLevel',$,#320,#1337,#336,.PHYSICAL.,.INTERNAL.); +#2064= IFCRELSPACEBOUNDARY('3Iu41pDrX5$RoZwsPVE7Cx',#41,'2ndLevel',$,#320,#1253,#350,.PHYSICAL.,.EXTERNAL.); +#2065= IFCRELSPACEBOUNDARY('1W5NBmuP1BKwU4L35KNjZK',#41,'2ndLevel',$,#320,#1292,#364,.PHYSICAL.,.EXTERNAL.); +#2066= IFCRELSPACEBOUNDARY('0cW8qU98P9DuB3FBHM6dZq',#41,'2ndLevel',$,#320,#1432,#378,.PHYSICAL.,.EXTERNAL.); +#2067= IFCRELSPACEBOUNDARY('1z6dCYe9n0OBALrNUG6o3W',#41,'2ndLevel',$,#320,#1392,#392,.PHYSICAL.,.INTERNAL.); +#2068= IFCRELSPACEBOUNDARY('2y4G9Hdjb9ZP1yOvXvStzq',#41,'2ndLevel',$,#320,#1753,#406,.PHYSICAL.,.INTERNAL.); +#2069= IFCRELSPACEBOUNDARY('2lkZWSRzX15h_SaSdpJzmE',#41,'2ndLevel',$,#320,#1753,#420,.PHYSICAL.,.INTERNAL.); +#2070= IFCRELSPACEBOUNDARY('1bpVIIf8jDWhtDdjI0HolC',#41,'2ndLevel',$,#320,#1753,#434,.PHYSICAL.,.INTERNAL.); +#2071= IFCRELSPACEBOUNDARY('2io2BEawf0YuhVAFsZpdMC',#41,'2ndLevel',$,#456,#1337,#472,.PHYSICAL.,.INTERNAL.); +#2073= IFCRELSPACEBOUNDARY('2G2FGHJSP99O6lb$Ugf1x5',#41,'2ndLevel',$,#456,#1392,#486,.PHYSICAL.,.INTERNAL.); +#2074= IFCRELSPACEBOUNDARY('0lBTVmUUj5l9Jfm4RThoUH',#41,'2ndLevel',$,#456,#1111,#500,.PHYSICAL.,.EXTERNAL.); +#2075= IFCRELSPACEBOUNDARY('3VahDyYSX3Mfkjm_jHM6xo',#41,'2ndLevel',$,#456,#1292,#514,.PHYSICAL.,.EXTERNAL.); +#2076= IFCRELSPACEBOUNDARY('0aLFCvydLEpO0QvnwAgVf$',#41,'2ndLevel',$,#456,#1432,#528,.PHYSICAL.,.EXTERNAL.); +#2077= IFCRELSPACEBOUNDARY('1dZuymAc93SwrqOQ9Asj9t',#41,'2ndLevel',$,#456,#1753,#542,.PHYSICAL.,.INTERNAL.); +#2078= IFCRELSPACEBOUNDARY('0E2ob4qfz2SgxH6pL$G7OF',#41,'2ndLevel',$,#456,#1753,#556,.PHYSICAL.,.INTERNAL.); +#2079= IFCRELSPACEBOUNDARY('0WjidWWZHFex0JbpqHbLcA',#41,'2ndLevel',$,#579,#1753,#595,.PHYSICAL.,.INTERNAL.); +#2081= IFCRELSPACEBOUNDARY('2PlEYbwpb7sAIvW1C0JCj6',#41,'2ndLevel',$,#579,#1487,#609,.PHYSICAL.,.EXTERNAL.); +#2082= IFCRELSPACEBOUNDARY('0UQE7Rr9z8OR4OlKlCgAZ9',#41,'2ndLevel',$,#579,#1526,#623,.PHYSICAL.,.EXTERNAL.); +#2083= IFCRELSPACEBOUNDARY('0mfRPeWfb1EPSdsXQ8OHPs',#41,'2ndLevel',$,#579,#1779,#637,.PHYSICAL.,.EXTERNAL.); +#2084= IFCRELSPACEBOUNDARY('2XpekyaXfBmQtKD5Sy3g75',#41,'2ndLevel',$,#579,#1719,#651,.PHYSICAL.,.INTERNAL.); +#2085= IFCRELSPACEBOUNDARY('3_kFE6wjjC7OP4gWFa4r0g',#41,'2ndLevel',$,#579,#1643,#665,.PHYSICAL.,.INTERNAL.); +#2086= IFCRELSPACEBOUNDARY('1tcyNZWMvEnh1nfsGEpD1_',#41,'2ndLevel',$,#687,#1753,#703,.PHYSICAL.,.INTERNAL.); +#2088= IFCRELSPACEBOUNDARY('0YooOc9I5BzfnKbrwuME$V',#41,'2ndLevel',$,#687,#1753,#717,.PHYSICAL.,.INTERNAL.); +#2089= IFCRELSPACEBOUNDARY('2K1gDvMYb6VBr4mHQIgctB',#41,'2ndLevel',$,#687,#1719,#731,.PHYSICAL.,.INTERNAL.); +#2090= IFCRELSPACEBOUNDARY('2I98i1Xtj2CgDqReRL8tm0',#41,'2ndLevel',$,#687,#1526,#745,.PHYSICAL.,.EXTERNAL.); +#2091= IFCRELSPACEBOUNDARY('2BEVOlhobCYhWQMzWUk6na',#41,'2ndLevel',$,#687,#1565,#759,.PHYSICAL.,.EXTERNAL.); +#2092= IFCRELSPACEBOUNDARY('1racykgZD5c9QnHv67UvvC',#41,'2ndLevel',$,#687,#1604,#773,.PHYSICAL.,.EXTERNAL.); +#2093= IFCRELSPACEBOUNDARY('3blAEMo8bFkQRq6VcT_Ck7',#41,'2ndLevel',$,#687,#1779,#787,.PHYSICAL.,.EXTERNAL.); +#2094= IFCRELSPACEBOUNDARY('3hjryw7$9AbhauUNg84bhn',#41,'2ndLevel',$,#687,#1719,#801,.PHYSICAL.,.INTERNAL.); +#2095= IFCRELSPACEBOUNDARY('1cj6pIZcH3CvLBm50TUaPs',#41,'2ndLevel',$,#687,#1719,#815,.PHYSICAL.,.INTERNAL.); +#2096= IFCRELSPACEBOUNDARY('2gXFbPY2n1befVqVFblILA',#41,'2ndLevel',$,#837,#1753,#853,.PHYSICAL.,.INTERNAL.); +#2098= IFCRELSPACEBOUNDARY('2DUV_$QoT41AC2UL3CbK8s',#41,'2ndLevel',$,#837,#1753,#867,.PHYSICAL.,.INTERNAL.); +#2099= IFCRELSPACEBOUNDARY('3ebIhBcX98gRz3v_VQLqGT',#41,'2ndLevel',$,#837,#1719,#881,.PHYSICAL.,.INTERNAL.); +#2100= IFCRELSPACEBOUNDARY('2qRyplZTHB5Q1Wf1TC1XGt',#41,'2ndLevel',$,#837,#1487,#895,.PHYSICAL.,.EXTERNAL.); +#2101= IFCRELSPACEBOUNDARY('1AOEKSAHb2ogy__WCj$uoL',#41,'2ndLevel',$,#837,#1604,#909,.PHYSICAL.,.EXTERNAL.); +#2102= IFCRELSPACEBOUNDARY('25mOnTj$f2dBYuQVtNrtWq',#41,'2ndLevel',$,#837,#1779,#923,.PHYSICAL.,.EXTERNAL.); +#2103= IFCRELSPACEBOUNDARY('32NoU_QoTBsBAx80JHzO4n',#41,'2ndLevel',$,#837,#1681,#937,.PHYSICAL.,.INTERNAL.); +#2104= IFCRELSPACEBOUNDARY('3MjH$v5QP7pRByum27UTl3',#41,'2ndLevel',$,#959,#1753,#975,.PHYSICAL.,.INTERNAL.); +#2106= IFCRELSPACEBOUNDARY('3ouHOVCKn0axCKqGuVM_ta',#41,'2ndLevel',$,#959,#1753,#989,.PHYSICAL.,.INTERNAL.); +#2107= IFCRELSPACEBOUNDARY('32Shf8iNn6jQsXew_dHlP5',#41,'2ndLevel',$,#959,#1753,#1003,.PHYSICAL.,.INTERNAL.); +#2108= IFCRELSPACEBOUNDARY('0NaTWoa_f0nhNVFzpigbJp',#41,'2ndLevel',$,#959,#1643,#1017,.PHYSICAL.,.INTERNAL.); +#2109= IFCRELSPACEBOUNDARY('0vVSCrfPD4OvP6qpJCq85M',#41,'2ndLevel',$,#959,#1719,#1031,.PHYSICAL.,.INTERNAL.); +#2110= IFCRELSPACEBOUNDARY('3rRaLprZfD9hv$$EotKmW6',#41,'2ndLevel',$,#959,#1681,#1045,.PHYSICAL.,.INTERNAL.); +#2111= IFCRELSPACEBOUNDARY('3vcJ50jOP1rw_Nqispq6$P',#41,'2ndLevel',$,#959,#1487,#1059,.PHYSICAL.,.EXTERNAL.); +#2112= IFCRELSPACEBOUNDARY('0juoH2lsT5BPQH$ccIQ0Xi',#41,'2ndLevel',$,#959,#1779,#1073,.PHYSICAL.,.EXTERNAL.); +#2113= IFCRELCONNECTSPATHELEMENTS('2X4QG2E_f8vP74UhKPqLiU',#41,'3kknIDuW56e9XuW3A6wxiH|3kknIDuW56e9XuW3A6wxiG','Structural',$,#1111,#1214,(),(),.ATEND.,.ATSTART.); +#2118= IFCRELCONNECTSPATHELEMENTS('2rF7Q$vef0Nfk73BBxRl11',#41,'3kknIDuW56e9XuW3A6wxiH|3kknIDuW56e9XuW3A6wxiM','Structural',$,#1111,#1292,(),(),.ATSTART.,.ATEND.); +#2122= IFCRELCONNECTSPATHELEMENTS('10GRANyGz239qcr9hisYRF',#41,'3kknIDuW56e9XuW3A6wxiG|3kknIDuW56e9XuW3A6wxiN','Structural',$,#1214,#1253,(),(),.ATEND.,.ATSTART.); +#2127= IFCRELCONNECTSPATHELEMENTS('0h8FFkSpjAxvl$DFpXMpe0',#41,'3kknIDuW56e9XuW3A6wxiN|3kknIDuW56e9XuW3A6wxiM','Structural',$,#1253,#1292,(),(),.ATEND.,.ATSTART.); +#2131= IFCRELCONNECTSPATHELEMENTS('0yMaB7OS5CWRuoH8svNfvW',#41,'3kknIDuW56e9XuW3A6wxiH|3kknIDuW56e9XuW3A6wxaZ','Structural',$,#1111,#1337,(),(),.ATSTART.,.ATPATH.); +#2135= IFCRELCONNECTSPATHELEMENTS('0Pi6RojLL4pRHpk9u8vwH4',#41,'3kknIDuW56e9XuW3A6wxiN|3kknIDuW56e9XuW3A6wxaZ','Structural',$,#1253,#1337,(),(),.ATEND.,.ATPATH.); +#2138= IFCRELCONNECTSPATHELEMENTS('0_$FegoHX5zu6zGGFcHM1h',#41,'3kknIDuW56e9XuW3A6wxaZ|3kknIDuW56e9XuW3A6wxc4','Structural',$,#1337,#1392,(),(),.ATSTART.,.ATPATH.); +#2143= IFCRELCONNECTSPATHELEMENTS('2Ikau4CwP4mBaWqMGdFS63',#41,'3kknIDuW56e9XuW3A6wxiM|3kknIDuW56e9XuW3A6wxc4','Structural',$,#1292,#1392,(),(),.ATEND.,.ATPATH.); +#2147= IFCRELCONNECTSPATHELEMENTS('1jcAUD_pf1E9R8MSaChw7J',#41,'3kknIDuW56e9XuW3A6wxsj|3kknIDuW56e9XuW3A6wxsi','Structural',$,#1487,#1526,(),(),.ATEND.,.ATSTART.); +#2152= IFCRELCONNECTSPATHELEMENTS('3tm1SBC7vDPe8Xfz_45u0k',#41,'3kknIDuW56e9XuW3A6wxsj|3kknIDuW56e9XuW3A6wxsY','Structural',$,#1487,#1604,(),(),.ATSTART.,.ATEND.); +#2156= IFCRELCONNECTSPATHELEMENTS('3zH3bDO6j279gtP0nuU0CE',#41,'3kknIDuW56e9XuW3A6wxsi|3kknIDuW56e9XuW3A6wxsZ','Structural',$,#1526,#1565,(),(),.ATEND.,.ATSTART.); +#2161= IFCRELCONNECTSPATHELEMENTS('066sVr5jX0oRqw_SwbduhW',#41,'3kknIDuW56e9XuW3A6wxsZ|3kknIDuW56e9XuW3A6wxsY','Structural',$,#1565,#1604,(),(),.ATEND.,.ATSTART.); +#2165= IFCRELCONNECTSPATHELEMENTS('3C$o9q9GP62fis32OnH5Xw',#41,'3kknIDuW56e9XuW3A6wxsj|3kknIDuW56e9XuW3A6wx3k','Structural',$,#1487,#1643,(),(),.ATSTART.,.ATPATH.); +#2169= IFCRELCONNECTSPATHELEMENTS('2foTWsixXCfRg4AmAHbvMb',#41,'3kknIDuW56e9XuW3A6wx3k|3kknIDuW56e9XuW3A6wx4U','Structural',$,#1643,#1719,(),(),.ATPATH.,.ATEND.); +#2174= IFCRELCONNECTSPATHELEMENTS('36nmR7zcjE5BWZyfPkIDBg',#41,'3kknIDuW56e9XuW3A6wxsj|3kknIDuW56e9XuW3A6wx22','Structural',$,#1487,#1681,(),(),.ATSTART.,.ATPATH.); +#2178= IFCRELCONNECTSPATHELEMENTS('3vkE7us6rDxR__pSB_MXVG',#41,'3kknIDuW56e9XuW3A6wx22|3kknIDuW56e9XuW3A6wx4U','Structural',$,#1681,#1719,(),(),.ATPATH.,.ATEND.); +#2182= IFCRELCONNECTSPATHELEMENTS('2bzL9lWVn6gwjIWHeeD$lQ',#41,'3kknIDuW56e9XuW3A6wxsi|3kknIDuW56e9XuW3A6wx4U','Structural',$,#1526,#1719,(),(),.ATSTART.,.ATPATH.); +#2185= IFCRELCONNECTSPATHELEMENTS('3mBKnxaBDAFRhhbPbM_buU',#41,'3kknIDuW56e9XuW3A6wxsY|3kknIDuW56e9XuW3A6wx4U','Structural',$,#1604,#1719,(),(),.ATEND.,.ATPATH.); +#2190= IFCPRESENTATIONLAYERASSIGNMENT('A-FLOR-____-OTLN',$,(#1428,#1749),$); +#2192= IFCPRESENTATIONLAYERASSIGNMENT('A-ROOF-____-OTLN',$,(#1801),$); +#2194= IFCPRESENTATIONLAYERASSIGNMENT('A-WALL-____-OTLN',$,(#1089,#1107,#1199,#1210,#1238,#1249,#1277,#1288,#1472,#1483,#1511,#1522,#1550,#1561,#1589,#1600),$); +#2196= IFCPRESENTATIONLAYERASSIGNMENT('I-WALL-____-OTLN',$,(#1316,#1333,#1377,#1388,#1628,#1639,#1666,#1677,#1704,#1715),$); +#2198= IFCPRESENTATIONLAYERASSIGNMENT('M-AREA-____-OTLN',$,(#158,#316,#452,#575,#683,#833,#955),$); +ENDSEC; + +END-ISO-10303-21; diff --git a/IfcPython/CMakeLists.txt b/IfcPython/CMakeLists.txt new file mode 100644 index 0000000..f73418d --- /dev/null +++ b/IfcPython/CMakeLists.txt @@ -0,0 +1,22 @@ +cmake_minimum_required(VERSION 3.0.0) +project(pybind11_examples VERSION 0.1.0) + +# --------------------------------------------------------------------------- # +# OPTIONS +# --------------------------------------------------------------------------- # + + +# --------------------------------------------------------------------------- # +# BIMxBEM +# --------------------------------------------------------------------------- # + +# --------------------------------------------------------------------------- # +# PYBIND11 +# --------------------------------------------------------------------------- # +IF(IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/pybind11") + message(STATUS "Adding pybind11 subdirectory.") + add_subdirectory(pybind11) +ELSE() + message(STATUS "Searching for pybind11...") + find_package(pybind11 REQUIRED) +ENDIF() diff --git a/IfcPython/Readme.md b/IfcPython/Readme.md index e69de29..753bca4 100644 --- a/IfcPython/Readme.md +++ b/IfcPython/Readme.md @@ -0,0 +1,2 @@ +# Ifc python reader for BEM +Use IfcOpenShell to feed data to BEM \ No newline at end of file diff --git a/IfcPython/display_boundaries.py b/IfcPython/display_boundaries.py new file mode 100644 index 0000000..2252e07 --- /dev/null +++ b/IfcPython/display_boundaries.py @@ -0,0 +1,76 @@ +# coding: utf8 +"""This module display IfcRelSpaceBoundary with standard ifcopenshell viewer""" +import ifcopenshell +import ifcopenshell.geom +import OCC.BRep +import OCC.BRepBuilderAPI +import OCC.gp +import OCC.TopoDS + + +def display_boundaries(ifc_path): + """Display all IfcRelSpace Boundary from file""" + ifc_file = ifcopenshell.open(ifc_path) + + space_boundaries = ifc_file.by_type("IfcRelSpaceBoundary") + settings = ifcopenshell.geom.settings() + # s.set(s.USE_PYTHON_OPENCASCADE, True) + # s.set(s.USE_WORLD_COORDS, True) + settings.set(settings.EXCLUDE_SOLIDS_AND_SURFACES, False) + settings.set(settings.INCLUDE_CURVES, True) + + occ_display = ifcopenshell.geom.utils.initialize_display() + for boundary in (b for b in space_boundaries if b.Name == "2ndLevel"): + # Retrieve boundary wire + geom = ifcopenshell.geom.create_shape( + settings, boundary.ConnectionGeometry.SurfaceOnRelatingElement.OuterBoundary + ) # type: OCC.TopoDS.Compound + + wire = get_wire(geom) + + plane = get_plane(boundary) + + # Create boundary face + face = OCC.BRepBuilderAPI.BRepBuilderAPI_MakeFace(plane, wire).Face() + + # Display boundary face + ifcopenshell.geom.utils.display_shape(face) + + occ_display.FitAll() + + input("Press any key") + + +def get_wire(geom): + """Retrieve boundaries surface wire""" + ifc_verts = geom.verts + occ_verts = [ + OCC.gp.gp_Pnt(ifc_verts[i], ifc_verts[i + 1], ifc_verts[i + 2]) + for i in range(0, len(ifc_verts), 3) + ] + edges = [ + OCC.BRepBuilderAPI.BRepBuilderAPI_MakeEdge( + occ_verts[i], occ_verts[i + 1] + ).Edge() + for i in range(0, len(occ_verts), 2) + ] + wire_maker = OCC.BRepBuilderAPI.BRepBuilderAPI_MakeWire() + for edge in edges: + wire_maker.Add(edge) + return wire_maker.Wire() + + +def get_plane(boundary): + """Retrieve the plane boundary is built on""" + position = ( + boundary.ConnectionGeometry.SurfaceOnRelatingElement.BasisSurface.Position + ) + coordinates = position.Location.Coordinates + direction = position.RefDirection.DirectionRatios + location = OCC.gp.gp_Pnt(coordinates[0], coordinates[1], coordinates[2]) + direction = OCC.gp.gp_Dir(direction[0], direction[1], direction[2]) + return OCC.gp.gp_Pln(location, direction) + + +if __name__ == "__main__": + display_boundaries(ifc_path="IfcPython/9000_BIMxBEM_TestModèle_ACAD.ifc") diff --git a/IfcPython/freecad_display_boundaries.py b/IfcPython/freecad_display_boundaries.py new file mode 100644 index 0000000..8bbb6b6 --- /dev/null +++ b/IfcPython/freecad_display_boundaries.py @@ -0,0 +1,91 @@ +# coding: utf8 +import ifcopenshell +import ifcopenshell.geom +import OCC.BRep +import OCC.BRepTools +import OCC.TopoDS +import ptvsd + +import FreeCAD +import Part + + +def display_boundaries(ifc_path): + ifc_file = ifcopenshell.open(ifc_path) + settings = ifcopenshell.geom.settings() + settings.set(settings.INCLUDE_CURVES, True) + brep = False + if brep: + settings.set(settings.USE_PYTHON_OPENCASCADE, True) + settings.set(settings.USE_BREP_DATA, True) + settings.set(settings.USE_WORLD_COORDS, True) + else: + settings.set(settings.USE_PYTHON_OPENCASCADE, False) + space_boundaries = ifc_file.by_type("IfcRelSpaceBoundary") + + doc = FreeCAD.ActiveDocument + + for space_boundary in (b for b in space_boundaries if b.Name == "2ndLevel"): + outer_boundary = ( + space_boundary.ConnectionGeometry.SurfaceOnRelatingElement.OuterBoundary + ) + ifc_shape = ifcopenshell.geom.create_shape(settings, outer_boundary) + + + face = doc.addObject("Part::Feature", "Face") + if brep: + face.Shape = Part.Face(geom_by_brep(ifc_shape)) + else: + face.Shape = Part.Face(geom_by_mesh(ifc_shape)) + face.Placement = get_placement(space_boundary) + face.ViewObject.ShapeColor = get_color(space_boundary.RelatedBuildingElement) + + doc.recompute() + + +def geom_by_brep(ifc_shape): + tmp_file = "/tmp/shape.brep" + OCC.BRepTools.breptools_Write(ifc_shape, tmp_file) + return Part.read(tmp_file).Wires + + +def geom_by_mesh(ifc_shape): + """Retrieve boundaries surface wire""" + ifc_verts = ifc_shape.verts + occ_verts = [FreeCAD.Vector(ifc_verts[i:i+3]) for i in range(0, len(ifc_verts), 3)] + return Part.makePolygon(occ_verts) + + +def get_placement(boundary): + """Retrieve the plane boundary placement""" + position = ( + boundary.ConnectionGeometry.SurfaceOnRelatingElement.BasisSurface.Position + ) + base = FreeCAD.Vector(position.Location.Coordinates) + rotation = FreeCAD.Rotation( + FreeCAD.Vector(1, 0, 0), FreeCAD.Vector(position.RefDirection.DirectionRatios) + ) + return FreeCAD.Placement(base, rotation) + + +def get_color(ifc_product): + product_colors = { + "IfcWall": (0.7, 0.3, 0.0), + "IfcWindow": (0.0, 0.7, 1.0), + "IfcSlab": (0.7, 0.7, 0.5), + "IfcRoof": (0.0, 0.3, 0.0), + } + for product, color in product_colors.items(): + if ifc_product.is_a(product): + return color + + +if __name__ == "__main__": + # Allow other computers to attach to ptvsd at this IP address and port. + ptvsd.enable_attach(address=("localhost", 5678), redirect_output=True) + # Pause the program until a remote debugger is attached + ptvsd.wait_for_attach() + # breakpoint() + display_boundaries( + ifc_path="/home/cyril/git/BIMxBEM/IfcPython/9000_BIMxBEM_TestModèle_ACAD.ifc" + ) diff --git a/IfcPython/ifcxmltest.py b/IfcPython/ifcxmltest.py new file mode 100644 index 0000000..1d3fd2f --- /dev/null +++ b/IfcPython/ifcxmltest.py @@ -0,0 +1,18 @@ +# coding: utf8 +import ifcopenshell + +# ifcxml support in ifcopenshell is work in progress +ifc_path = "IfcPython/9000_BIMxBEM_TestModèle_ACAD.ifcxml" + + +def read_space_boundaries(): + ifc_file = ifcopenshell.open(ifc_path) + + space_boundaries = ifc_file.by_type("IfcRelSpaceBoundary") + + for boundary in (b for b in space_boundaries if b.Name == "2ndLevel"): + boundary + + +if __name__ == "__main__": + read_space_boundaries() diff --git a/IfcPython/main.py b/IfcPython/main.py new file mode 100644 index 0000000..c8fc38d --- /dev/null +++ b/IfcPython/main.py @@ -0,0 +1,5 @@ +# coding=utf8 +import ifcopenshell + +ifc_file = ifcopenshell.open('') + diff --git a/IfcPython/requirements.txt b/IfcPython/requirements.txt new file mode 100644 index 0000000..4d42688 --- /dev/null +++ b/IfcPython/requirements.txt @@ -0,0 +1,4 @@ +ifcopenshell +OCC +black +pylint diff --git a/pybind11_examples/CMakeLists.txt b/pybind11_examples/CMakeLists.txt new file mode 100644 index 0000000..99026ae --- /dev/null +++ b/pybind11_examples/CMakeLists.txt @@ -0,0 +1,23 @@ +cmake_minimum_required(VERSION 3.0.0) +project(pybind11_examples VERSION 0.1.0 LANGUAGE CXX) + +# --------------------------------------------------------------------------- # +# OPTIONS +# --------------------------------------------------------------------------- # + + +# --------------------------------------------------------------------------- # +# PYBIND11 +# --------------------------------------------------------------------------- # +IF(IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/pybind11") + message(STATUS "Adding pybind11 subdirectory.") + add_subdirectory(pybind11) +ELSE() + message(STATUS "Searching for pybind11...") + find_package(pybind11 REQUIRED) +ENDIF() + + +pybind11_add_module(example example.cpp) + + diff --git a/pybind11_examples/example.cpp b/pybind11_examples/example.cpp new file mode 100644 index 0000000..4795578 --- /dev/null +++ b/pybind11_examples/example.cpp @@ -0,0 +1,50 @@ +#include + +namespace py = pybind11; + +int add(int i = 1, int j = 2) { + return i + j; +}; + +struct Pet +{ + Pet(const std::string &name):name(name) { } + void setName(const std::string &name_) { name = name_; } + const std::string &getName() const { return name; } + std::string name; + std::string nick; +}; + + +struct Dog : Pet +{ + Dog(const std::string &name) : Pet(name) { } + std::string bark() const { return "woof!"; } +}; + + +PYBIND11_MODULE(example, m) { + m.doc() = "pybind11 example plugin"; // optional module docstring + + m.def("add", &add, "A function which adds two numbers", py::arg("i")=1, py::arg("j")=2); + + m.attr("the_answer") = 42; + py::object world = py::cast("World"); + m.attr("what") = world; + + py::class_(m, "Pet") + .def(py::init()) + .def("setName", &Pet::setName) + .def("getName", &Pet::getName) + .def_readwrite("nick", &Pet::nick) + .def("__repr__",[](const Pet &a) { + return ""; + } + ) + ; + + py::class_(m, "Dog") + .def(py::init()) + .def("bark", &Dog::bark) + ; +}; \ No newline at end of file