Ciao.
Devo importare un formato xml , di nome IFCper l'architettura.
Questo formato è ad oggetti , ovvero in tutto l'xml ci sono le entità che possono essere Wall , Window , door ecc....
Ogni entità ha un id(identificativo univoco , un ref(riferimento ad un id) e un tipo che puo' essere ifcWall.
per es questo è l'ifcProject da cui si inizia:
[code]
<IfcProject id="i1">
<GlobalId>3Dnr_WURnBz8naa7SrcgQx</GlobalId>
<OwnerHistory>
<IfcOwnerHistory xsi:nil="true" ref="i2"/>
</OwnerHistory>
<Name>Default Project</Name>
<Description>Description of Default Project</Description>
<RepresentationContexts ex:cType="set">
<IfcGeometricRepresentationContext pos="0" xsi:nil="true" ref="i20"/>
</RepresentationContexts>
<UnitsInContext>
<IfcUnitAssignment xsi:nil="true" ref="i7"/>
</UnitsInContext>
</IfcProject>
[code]
se voglio importare la geometria mi concentrero' sul nodo <IfcGeometricRepresentationContext pos="0" xsi:nil="true" ref="i20"/>
quindi andro al riferimento all'ìd i20 che è dello stesso tipo (IfcGeometricRepresentationContext):
quindi all'id "i21"codice:<IfcGeometricRepresentationContext id="i20"> <ContextType>Model</ContextType> <CoordinateSpaceDimension>3</CoordinateSpaceDimension> <Precision>0.00001</Precision> <WorldCoordinateSystem> <IfcAxis2Placement3D xsi:nil="true" ref="i21"/> </WorldCoordinateSystem> </IfcGeometricRepresentationContext>
e all' id:ref="i22" e otterro' finalmente i punti:codice:<IfcAxis2Placement3D xsi:nil="true" ref="i21"/> e otterrò: <IfcAxis2Placement3D id="i21"> <Location> <IfcCartesianPoint xsi:nil="true" ref="i22"/> </Location> </IfcAxis2Placement3D>
Io sto cercando una buona soluzione , e l'ho pensata cosi:codice:<IfcCartesianPoint id="i22"> <Coordinates ex:cType="list"> <IfcLengthMeasure pos="0">0.</IfcLengthMeasure> <IfcLengthMeasure pos="1">0.</IfcLengthMeasure> <IfcLengthMeasure pos="2">0.</IfcLengthMeasure> </Coordinates> </IfcCartesianPoint>
prima di tutto creo una classe ifcEntity e da questa faccio ereditare tutte le entità ,poi
deserializzzo il documento e metto tutti gli id delle entità in una mappa , cosi:
map<stringID,CEntityIFC>mappa
poi inizio ad attraversare il documento(tutto fatto di ifcEntity) e per ogni riferimento carico l'entità e vorrei il tipo.
Per ogni tipo la logica sarà diversa a seconda se l'entità è un wall o una door ecc...
una volta che arrivo all'oggetto che mi serve leggo i dati e ho finito.
Ho pensato che si potrebbero utilizzare i template per gestire la logica , ma non sono molto preparato e chiedo a voi.
Grazie.

Rispondi quotando