/* JWildfire - an image and animation processor written in Java Copyright (C) 1995-2014 Andreas Maschke This is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this software; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jwildfire.create.eden.sunflow; import java.util.ArrayList; import java.util.List; import org.jwildfire.create.eden.sunflow.base.PartBuilder; public class SunflowSceneBuilder implements PartBuilder { private final ImageBuilder imageBuilder = new ImageBuilder(this); private final CameraBuilder cameraBuilder = new CameraBuilder(this); private final TraceDepthsBuilder traceDepthsBuilder = new TraceDepthsBuilder(this); private final List<LightBuilder> lightBuilders = new ArrayList<LightBuilder>(); private final List<SunSkyLightBuilder> sunSkyLightBuilders = new ArrayList<SunSkyLightBuilder>(); private final List<ShaderBuilder> shaderBuilders = new ArrayList<ShaderBuilder>(); private final List<LegacyMeshBuilder> legacyMeshBuilders = new ArrayList<LegacyMeshBuilder>(); private final List<MeshBuilder> meshBuilders = new ArrayList<MeshBuilder>(); private final List<SphereBuilder> sphereBuilders = new ArrayList<SphereBuilder>(); private final List<BoxBuilder> boxBuilders = new ArrayList<BoxBuilder>(); private final List<CylinderBuilder> cylinderBuilders = new ArrayList<CylinderBuilder>(); private final List<BanchoffSurfaceBuilder> banchoffSurfaceBuilders = new ArrayList<BanchoffSurfaceBuilder>(); private final List<SphereflakeBuilder> sphereflakeBuilders = new ArrayList<SphereflakeBuilder>(); private final List<TorusBuilder> torusBuilders = new ArrayList<TorusBuilder>(); private final List<PlaneBuilder> planeBuilders = new ArrayList<PlaneBuilder>(); private final List<JuliaBuilder> juliaBuilders = new ArrayList<JuliaBuilder>(); public String getProduct() { StringBuilder sb = new StringBuilder(); buildPart(sb); return sb.toString(); } public ImageBuilder openImage() { return imageBuilder; } public CameraBuilder openCamera() { return cameraBuilder; } public TraceDepthsBuilder openTraceDepths() { return traceDepthsBuilder; } public LightBuilder addLight() { LightBuilder lightBuilder = new LightBuilder(this); lightBuilders.add(lightBuilder); return lightBuilder; } public SunSkyLightBuilder addSkyLight() { SunSkyLightBuilder sunSkyLightBuilder = new SunSkyLightBuilder(this); sunSkyLightBuilders.add(sunSkyLightBuilder); return sunSkyLightBuilder; } public ShaderBuilder addShader() { ShaderBuilder shaderBuilder = new ShaderBuilder(this); shaderBuilders.add(shaderBuilder); return shaderBuilder; } @Deprecated public LegacyMeshBuilder addLegacyMesh() { LegacyMeshBuilder meshBuilder = new LegacyMeshBuilder(this); legacyMeshBuilders.add(meshBuilder); return meshBuilder; } public MeshBuilder addMesh() { MeshBuilder meshBuilder = new MeshBuilder(this); meshBuilders.add(meshBuilder); return meshBuilder; } public SphereBuilder addSphere() { SphereBuilder sphereBuilder = new SphereBuilder(this); sphereBuilders.add(sphereBuilder); return sphereBuilder; } public BoxBuilder addBox() { BoxBuilder boxBuilder = new BoxBuilder(this); boxBuilders.add(boxBuilder); return boxBuilder; } public CylinderBuilder addCylinder() { CylinderBuilder cylinderBuilder = new CylinderBuilder(this); cylinderBuilders.add(cylinderBuilder); return cylinderBuilder; } public BanchoffSurfaceBuilder addBanchoffSurface() { BanchoffSurfaceBuilder banchoffSurfaceBuilder = new BanchoffSurfaceBuilder(this); banchoffSurfaceBuilders.add(banchoffSurfaceBuilder); return banchoffSurfaceBuilder; } public SphereflakeBuilder addSphereflake() { SphereflakeBuilder sphereflakeBuilder = new SphereflakeBuilder(this); sphereflakeBuilders.add(sphereflakeBuilder); return sphereflakeBuilder; } public JuliaBuilder addJulia() { JuliaBuilder juliaBuilder = new JuliaBuilder(this); juliaBuilders.add(juliaBuilder); return juliaBuilder; } public PlaneBuilder addPlane() { PlaneBuilder planeBuilder = new PlaneBuilder(this); planeBuilders.add(planeBuilder); return planeBuilder; } public TorusBuilder addTorus() { TorusBuilder torusBuilder = new TorusBuilder(this); torusBuilders.add(torusBuilder); return torusBuilder; } @Override public void buildPart(StringBuilder pTarget) { imageBuilder.buildPart(pTarget); cameraBuilder.buildPart(pTarget); traceDepthsBuilder.buildPart(pTarget); for (LightBuilder lightBuilder : lightBuilders) { lightBuilder.buildPart(pTarget); } for (SunSkyLightBuilder sunSkyLightBuilder : sunSkyLightBuilders) { sunSkyLightBuilder.buildPart(pTarget); } for (ShaderBuilder shaderBuilder : shaderBuilders) { shaderBuilder.buildPart(pTarget); } for (LegacyMeshBuilder legacyMeshBuilder : legacyMeshBuilders) { legacyMeshBuilder.buildPart(pTarget); } for (MeshBuilder meshBuilder : meshBuilders) { meshBuilder.buildPart(pTarget); } for (SphereBuilder sphereBuilder : sphereBuilders) { sphereBuilder.buildPart(pTarget); } for (BoxBuilder boxBuilder : boxBuilders) { boxBuilder.buildPart(pTarget); } for (CylinderBuilder cylinderBuilder : cylinderBuilders) { cylinderBuilder.buildPart(pTarget); } for (BanchoffSurfaceBuilder banchoffSurfaceBuilder : banchoffSurfaceBuilders) { banchoffSurfaceBuilder.buildPart(pTarget); } for (SphereflakeBuilder sphereflakeBuilder : sphereflakeBuilders) { sphereflakeBuilder.buildPart(pTarget); } for (TorusBuilder torusBuilder : torusBuilders) { torusBuilder.buildPart(pTarget); } for (PlaneBuilder planeBuilder : planeBuilders) { planeBuilder.buildPart(pTarget); } for (JuliaBuilder juliaBuilder : juliaBuilders) { juliaBuilder.buildPart(pTarget); } } }