private static Map<Geometry, SceneGraphComponent> getGeometries_R( SceneGraphComponent root, SceneGraphPath p) { p.push(root); Map<Geometry, SceneGraphComponent> r = new HashMap<Geometry, SceneGraphComponent>(); if (root.getGeometry() != null) { Geometry g = root.getGeometry(); if (g instanceof PointSet) { // remove vertex normals if flat shading PointSet pSet = (PointSet) g; if (pSet.getVertexAttributes().containsAttribute(Attribute.NORMALS)) { EffectiveAppearance ea = EffectiveAppearance.create(p); DefaultGeometryShader dgs = ShaderUtility.createDefaultGeometryShader(ea); DefaultPolygonShader ps = (DefaultPolygonShader) dgs.getPolygonShader(); if (!ps.getSmoothShading()) { pSet.setVertexAttributes(Attribute.NORMALS, null); } } } r.put(root.getGeometry(), root); } for (int i = 0; i < root.getChildComponentCount(); i++) { Map<Geometry, SceneGraphComponent> subList = getGeometries_R(root.getChildComponent(i), p); if (subList.size() != 0) { r.putAll(subList); } } p.pop(); return r; }