Skip to content

Commit d10ec50

Browse files
authored
Merge pull request #60 from HarutakaMatsumoto/develop
Implemented all parts of ReliefComponent except RectifiedGridCoverage
2 parents 486fc96 + a716a9d commit d10ec50

File tree

8 files changed

+50
-8
lines changed

8 files changed

+50
-8
lines changed

sources/include/citygml/cityobject.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,11 @@ namespace citygml {
3939
COT_SolitaryVegetationObject = 1ll<< 13,
4040
COT_WaterBody = 1ll<< 14,
4141
COT_ReliefFeature = 1ll<< 15,
42+
COT_ReliefComponent = 1ll<< 35,
43+
COT_TINRelief = 1ll<< 36,
44+
COT_MassPointRelief = 1ll<< 37,
45+
COT_BreaklineRelief = 1ll<< 38,
46+
COT_RasterRelief = 1ll<< 39,
4247
COT_LandUse = 1ll<< 16,
4348
COT_Tunnel = 1ll<< 17,
4449
COT_Bridge = 1ll<< 18,

sources/include/citygml/geometry.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@ namespace citygml {
3434
GT_InteriorWall = 1 << 6,
3535
GT_Ceiling = 1 << 7,
3636
GT_OuterCeiling = 1 << 8,
37-
GT_OuterFloor = 1 << 9
37+
GT_OuterFloor = 1 << 9,
38+
GT_Tin = 1 << 10,
3839
};
3940

4041
unsigned int getLOD() const;

sources/include/parser/nodetypes.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,9 +146,11 @@ namespace citygml {
146146
NODETYPE( GML, Shell )
147147
NODETYPE( GML, PolyhedralSurface )
148148
NODETYPE( GML, Surface )
149-
NODETYPE( GML, PolygonPatch)
149+
NODETYPE( GML, PolygonPatch )
150150

151151
NODETYPE( GML, LineString )
152+
153+
NODETYPE( GML, RectifiedGridCoverage )
152154

153155
// BLDG
154156
NODETYPE( BLDG, Building )

sources/src/citygml/citygmlfactory.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@ namespace citygml {
5858
return Geometry::GeometryType::GT_OuterCeiling;
5959
case CityObject::CityObjectsType::COT_OuterFloorSurface:
6060
return Geometry::GeometryType::GT_OuterFloor;
61+
case CityObject::CityObjectsType::COT_TINRelief:
62+
return Geometry::GeometryType::GT_Tin;
6163
default:
6264
return Geometry::GeometryType::GT_Unknown;
6365
}

sources/src/citygml/geometry.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,8 @@ namespace citygml {
9696
return "OuterCeiling";
9797
case GeometryType::GT_OuterFloor:
9898
return "OuterFloor";
99+
case GeometryType::GT_Tin:
100+
return "Tin";
99101
default:
100102
return "Unknown";
101103
}

sources/src/parser/cityobjectelementparser.cpp

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,11 @@ namespace citygml {
9393
typeIDTypeMap.insert(HANDLE_TYPE(BLDG, OuterFloorSurface));
9494
typeIDTypeMap.insert(HANDLE_TYPE(GRP, CityObjectGroup));
9595
typeIDTypeMap.insert(HANDLE_TYPE(DEM, ReliefFeature));
96+
typeIDTypeMap.insert(HANDLE_TYPE(DEM, ReliefComponent));
97+
typeIDTypeMap.insert(HANDLE_TYPE(DEM, TINRelief));
98+
typeIDTypeMap.insert(HANDLE_TYPE(DEM, MassPointRelief));
99+
typeIDTypeMap.insert(HANDLE_TYPE(DEM, BreaklineRelief));
100+
typeIDTypeMap.insert(HANDLE_TYPE(DEM, RasterRelief));
96101
typeIDTypeMap.insert(HANDLE_TYPE(BLDG, IntBuildingInstallation));
97102

98103
typeIDTypeMapInitialized = true;
@@ -280,14 +285,27 @@ namespace citygml {
280285
|| node == NodeType::GRP_ParentNode
281286
|| node == NodeType::TRANS_TrafficAreaNode
282287
|| node == NodeType::TRANS_AuxiliaryTrafficAreaNode
283-
|| node == NodeType::WTR_BoundedByNode) {
288+
|| node == NodeType::WTR_BoundedByNode
289+
|| node == NodeType::DEM_ReliefComponentNode
290+
|| node == NodeType::DEM_TINReliefNode
291+
|| node == NodeType::DEM_MassPointReliefNode
292+
|| node == NodeType::DEM_BreaklineReliefNode
293+
|| node == NodeType::DEM_RasterReliefNode
294+
|| node == NodeType::DEM_GridNode) {
284295
setParserForNextElement(new CityObjectElementParser(m_documentParser, m_factory, m_logger, [this](CityObject* obj) {
285296
m_model->addChildCityObject(obj);
286297
}));
287298
} else if (node == NodeType::APP_AppearanceNode // Compatibility with CityGML 1.0 (in CityGML 2 CityObjects can only contain appearanceMember elements)
288299
|| node == NodeType::APP_AppearanceMemberNode) {
289300

290301
setParserForNextElement(new AppearanceElementParser(m_documentParser, m_factory, m_logger));
302+
} else if (node == NodeType::DEM_ExtentNode
303+
|| node == NodeType::DEM_TinNode
304+
|| node == NodeType::DEM_ReliefPointsNode
305+
|| node == NodeType::DEM_RidgeOrValleyLinesNode
306+
|| node == NodeType::DEM_BreaklinesNode) {
307+
308+
parseGeometryForLODLevel(std::stoi(m_model->getAttribute("dem:lod")));
291309
} else if (node == NodeType::BLDG_Lod1MultiCurveNode
292310
|| node == NodeType::BLDG_Lod1MultiSurfaceNode
293311
|| node == NodeType::BLDG_Lod1SolidNode
@@ -380,13 +398,13 @@ namespace citygml {
380398
|| node == NodeType::CORE_ExternalReferenceNode
381399
|| node == NodeType::GML_MultiPointNode
382400
|| node == NodeType::GRP_GeometryNode
383-
|| node == NodeType::DEM_ReliefComponentNode
384401
|| node == NodeType::GEN_Lod0GeometryNode
385402
|| node == NodeType::GEN_Lod0ImplicitRepresentationNode
386403
|| node == NodeType::GEN_Lod0TerrainIntersectionNode
387404
|| node == NodeType::TRANS_Lod0NetworkNode
388405
|| node == NodeType::WTR_Lod0MultiCurveNode
389-
|| node == NodeType::WTR_Lod0MultiSurfaceNode) {
406+
|| node == NodeType::WTR_Lod0MultiSurfaceNode
407+
|| node == NodeType::GML_RectifiedGridCoverageNode) {
390408
CITYGML_LOG_INFO(m_logger, "Skipping CityObject child element <" << node << "> at " << getDocumentLocation() << " (Currently not supported!)");
391409
setParserForNextElement(new SkipElementParser(m_documentParser, m_logger, node));
392410
return true;
@@ -504,6 +522,15 @@ namespace citygml {
504522
|| node == NodeType::LUSE_Lod3MultiSurfaceNode
505523
|| node == NodeType::LUSE_Lod4MultiSurfaceNode
506524
|| node == NodeType::DEM_ReliefComponentNode
525+
|| node == NodeType::DEM_TINReliefNode
526+
|| node == NodeType::DEM_MassPointReliefNode
527+
|| node == NodeType::DEM_BreaklineReliefNode
528+
|| node == NodeType::DEM_RasterReliefNode
529+
|| node == NodeType::DEM_TinNode
530+
|| node == NodeType::DEM_ReliefPointsNode
531+
|| node == NodeType::DEM_RidgeOrValleyLinesNode
532+
|| node == NodeType::DEM_BreaklinesNode
533+
|| node == NodeType::DEM_GridNode
507534
|| node == NodeType::GEN_Lod0GeometryNode
508535
|| node == NodeType::GEN_Lod0ImplicitRepresentationNode
509536
|| node == NodeType::GEN_Lod0TerrainIntersectionNode

sources/src/parser/geometryelementparser.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ namespace citygml {
6060
geometryTypeIDSet.insert(NodeType::GML_PolyhedralSurfaceNode.typeID());
6161
geometryTypeIDSet.insert(NodeType::GML_SurfaceNode.typeID());
6262
geometryTypeIDSet.insert(NodeType::GML_MultiCurveNode.typeID());
63+
geometryTypeIDSet.insert(NodeType::GML_MultiPointNode.typeID());
6364
geometryTypeIDSetInitialized = true;
6465

6566
}
@@ -138,7 +139,7 @@ namespace citygml {
138139
};
139140

140141
setParserForNextElement(new SequenceParser(m_documentParser, m_logger, patchParserFactory, node));
141-
142+
return true;
142143
}
143144

144145
return GMLObjectElementParser::parseChildElementStartTag(node, attributes);

sources/src/parser/nodetypes.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -587,9 +587,11 @@ namespace citygml {
587587
DEFINE_NODE( GML, Shell )
588588
DEFINE_NODE( GML, PolyhedralSurface )
589589
DEFINE_NODE( GML, Surface )
590-
DEFINE_NODE( GML, PolygonPatch)
590+
DEFINE_NODE( GML, PolygonPatch )
591591

592-
DEFINE_NODE( GML, LineString)
592+
DEFINE_NODE( GML, LineString )
593+
594+
DEFINE_NODE( GML, RectifiedGridCoverage )
593595

594596
// BLDG
595597
DEFINE_NODE( BLDG, Building )

0 commit comments

Comments
 (0)