public void leerMuros(List<Piso> pisos, IfcModel ifcModel) { try { for (Piso pisoActual : pisos) { for (Muro muroActual : pisoActual.getMuros()) { muroActual.objectPlacement.setPlacementRelTo_placementRelTo(new Coordenada()); muroActual.objectPlacement.setPlacementRelTo_relativePlacement(new Coordenada()); muroActual.objectPlacement.setRelativePlacement_location(new Coordenada()); // 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.]. // planchaActual.objectPlacement.setRelativePlacement_axis(new Coordenada(1,0,0)); muroActual.objectPlacement.setRelativePlacement_axis(null); // planchaActual.objectPlacement.setRelativePlacement_refDirection(new Coordenada(0,0,1)); muroActual.objectPlacement.setRelativePlacement_refDirection(null); muroActual.representation.setRepresentation_position_location(new Coordenada()); // 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.]. // planchaActual.representation.setRepresentation_position_axis(new Coordenada(1,0,0)); muroActual.representation.setRepresentation_position_axis(null); // planchaActual.representation.setRepresentation_position_refDirection(new // Coordenada(0,0,1)); muroActual.representation.setRepresentation_position_refDirection(null); muroActual.representation.setRepresentation_extruded_direction(new Coordenada()); Object objeto = ifcModel.getIfcObjectByID(muroActual.getId()); if (objeto instanceof IfcWallStandardCase) { IfcWallStandardCase muroEncontrado = (IfcWallStandardCase) ifcModel.getIfcObjectByID(muroActual.getId()); // Se ubica en el nodo objectPlacement->placementRelTo de la plancha IfcLocalPlacement objectPlacement = (IfcLocalPlacement) muroEncontrado.getObjectPlacement(); IfcLocalPlacement placementRelToA = (IfcLocalPlacement) objectPlacement.getPlacementRelTo(); // Se lee PlacementRelTo IfcLocalPlacement placementRelToB = (IfcLocalPlacement) placementRelToA.getPlacementRelTo(); IfcAxis2Placement3D relativePlacementA = (IfcAxis2Placement3D) placementRelToB.getRelativePlacement(); muroActual.objectPlacement.setPlacementRelTo_placementRelTo( LectorCoordenada.Leer(relativePlacementA.getLocation())); // Se lee RelativePlacement IfcAxis2Placement3D relativePlacementB = (IfcAxis2Placement3D) placementRelToA.getRelativePlacement(); muroActual.objectPlacement.setPlacementRelTo_relativePlacement( LectorCoordenada.Leer(relativePlacementB.getLocation())); // Se lee location IfcAxis2Placement3D relativePlacementC = (IfcAxis2Placement3D) objectPlacement.getRelativePlacement(); LectorAxis2Placement3D.leerAxis2Placement3D( muroActual.objectPlacement, relativePlacementC); // Se lee Representation IfcProductDefinitionShape representation = (IfcProductDefinitionShape) muroEncontrado.getRepresentation(); // se asume que siempre va a existir UNA sola representacion (SOLO SE LEE LA POSICION 0) for (IfcRepresentation repActual : representation.getRepresentations()) { // posible valores = Clipping - Curve2D - SweptSolid if (repActual.getRepresentationType().toString().equals("SweptSolid")) { // System.err.println("Procesando representation " + repActual.getStepLineNumber() + // " en muro " + muroActual.getId()); procesarSweptSolid(repActual, muroActual); } else if (repActual.getRepresentationType().toString().equals("Clipping")) { // System.err.println("En muro " + muroActual.getId() + " procesando representation // tipo Clipping con STEP number = " + repActual.getStepLineNumber()); procesarClipping(repActual, muroActual); } else if (repActual.getRepresentationType().toString().equals("Curve2D")) { // System.err.println("MURO " + muroActual.getId() + " DESCARTADA REPRESENTATION // PORQUE ES TIPO \"Curve2D\" STEP NUMBER = " + repActual.getStepLineNumber()); muroActual.representation.setRepresentation_representationType( "DESCARTADA - " + repActual.getRepresentationType().toString()); } else { System.err.println("DESCARTADA REPRESENTATION PORQUE ES TIPO DESCONOCIDO"); } } } else { // System.err.println( "DESCARTADO MURO CON ID = " + muroActual.getId() + " PORQUE NO ES IfcWallStandardCase"); } } } } catch (Exception e) { e.printStackTrace(); } finally { // rm.release(); } }