@@ -2438,16 +2438,18 @@ std::vector< CJT::GeoObject> CJGeoCreator::makeLoD00(DataManager* h, CJT::Kernel
24382438 if (settingsCollection.makeRoofPrint ())
24392439 {
24402440 double roofOutlineHeight = footprintHeight;
2441+ std::string surfaceType = CJObjectEnum::getString (CJObjectID::CJTTypeProjectedRoofOutline);
24412442 if (settingsCollection.makeFootPrint ())
24422443 {
24432444 roofOutlineHeight = urr.Z ();
2445+ surfaceType = CJObjectEnum::getString (CJObjectID::CJTypeRoofSurface);
24442446 }
24452447 TopoDS_Shape roofShape = helperFunctions::createHorizontalFace (lll, urr, -rotationAngle, roofOutlineHeight);
24462448 faceCopyCollection.emplace_back (roofShape);
24472449
24482450 CJT::GeoObject geoObject = kernel->convertToJSON (roofShape, " 0.0" );
24492451 std::map<std::string, std::string> semanticData;
2450- semanticData.emplace (CJObjectEnum::getString (CJObjectID::CJType), CJObjectEnum::getString (CJObjectID::CJTypeRoofSurface) );
2452+ semanticData.emplace (CJObjectEnum::getString (CJObjectID::CJType), surfaceType );
24512453 geoObject.appendSurfaceData (semanticData);
24522454 geoObject.appendSurfaceTypeValue (0 );
24532455 geoObjectCollection.emplace_back (geoObject);
@@ -2521,12 +2523,12 @@ std::vector< CJT::GeoObject> CJGeoCreator::makeLoD02(DataManager* h, CJT::Kernel
25212523
25222524 std::vector< CJT::GeoObject> geoObjectCollection;
25232525
2524- std::map<std::string, std::string> semanticRoofData;
2525- semanticRoofData.emplace (CJObjectEnum::getString (CJObjectID::CJType), CJObjectEnum::getString (CJObjectID::CJTypeRoofSurface));
2526+
25262527 std::map<std::string, std::string> semanticFootData;
25272528 semanticFootData.emplace (CJObjectEnum::getString (CJObjectID::CJType), CJObjectEnum::getString (CJObjectID::CJTypeGroundSurface));
25282529
25292530 gp_Pnt urr = h->getUrrPoint ();
2531+ double footprintHeight = settingCollection.footprintElevation () + h->getObjectTranslation ().TranslationPart ().Z ();
25302532
25312533 std::vector<TopoDS_Shape> faceCopyCollection;
25322534 if (settingCollection.makeRoofPrint ())
@@ -2538,10 +2540,22 @@ std::vector< CJT::GeoObject> CJGeoCreator::makeLoD02(DataManager* h, CJT::Kernel
25382540
25392541 gp_Trsf trsf;
25402542 trsf.SetRotation (gp_Ax1 (gp_Pnt (0 , 0 , 0 ), gp_Vec (0 , 0 , 1 )), -settingCollection.gridRotation ());
2541- if (hasFootprints_) { trsf.SetTranslationPart (gp_Vec (0 , 0 , urr.Z ())); }
2543+
2544+ std::map<std::string, std::string> semanticRoofData;
2545+
2546+ std::string surfaceType = CJObjectEnum::getString (CJObjectID::CJTTypeProjectedRoofOutline);
2547+ if (hasFootprints_) {
2548+ surfaceType = CJObjectEnum::getString (CJObjectID::CJTypeRoofSurface);
2549+ trsf.SetTranslationPart (gp_Vec (0 , 0 , urr.Z ()));
2550+ }
2551+ else
2552+ {
2553+ trsf.SetTranslationPart (gp_Vec (0 , 0 , footprintHeight));
2554+ }
25422555 roofOutline.Move (trsf);
25432556 faceCopyCollection.emplace_back (roofOutline);
25442557
2558+ semanticRoofData.emplace (CJObjectEnum::getString (CJObjectID::CJType), surfaceType);
25452559 CJT::GeoObject geoObject = kernel->convertToJSON (roofOutline, " 0.2" );
25462560 geoObject.appendSurfaceData (semanticRoofData);
25472561 geoObject.appendSurfaceTypeValue (0 );
0 commit comments