Search in sources :

Example 41 with Wall

use of org.concord.energy3d.model.Wall in project energy3d by concord-consortium.

the class EnergyDailyAnalysis method updateGraph.

@Override
public void updateGraph() {
    final int n = (int) Math.round(60.0 / Scene.getInstance().getTimeStep());
    for (int i = 0; i < 24; i++) {
        SolarRadiation.getInstance().computeEnergyAtHour(i);
        final HousePart selectedPart = SceneManager.getInstance().getSelectedPart();
        if (selectedPart instanceof Foundation) {
            if (graph instanceof BuildingEnergyDailyGraph) {
                final Foundation selectedBuilding = (Foundation) selectedPart;
                final double window = selectedBuilding.getPassiveSolarNow();
                final double solarPanel = selectedBuilding.getPhotovoltaicNow();
                final double heater = selectedBuilding.getHeatingNow();
                final double ac = selectedBuilding.getCoolingNow();
                final double net = selectedBuilding.getTotalEnergyNow();
                graph.addData("Windows", window);
                graph.addData("Solar Panels", solarPanel);
                graph.addData("Heater", heater);
                graph.addData("AC", ac);
                graph.addData("Net", net);
            } else {
                graph.addData("Solar", selectedPart.getSolarPotentialNow());
            }
        } else if (selectedPart instanceof Window) {
            final Window window = (Window) selectedPart;
            final double solar = selectedPart.getSolarPotentialNow() * window.getSolarHeatGainCoefficient();
            graph.addData("Solar", solar);
            final double[] loss = selectedPart.getHeatLoss();
            final int t0 = n * i;
            double sum = 0;
            for (int k = t0; k < t0 + n; k++) {
                sum += loss[k];
            }
            graph.addData("Heat Gain", -sum);
        } else if (selectedPart instanceof Wall || selectedPart instanceof Roof || selectedPart instanceof Door) {
            final double solar = selectedPart.getSolarPotentialNow();
            graph.addData("Solar", solar);
            final double[] loss = selectedPart.getHeatLoss();
            final int t0 = n * i;
            double sum = 0;
            for (int k = t0; k < t0 + n; k++) {
                sum += loss[k];
            }
            graph.addData("Heat Gain", -sum);
        } else if (selectedPart instanceof SolarPanel) {
            graph.addData("Solar", ((SolarPanel) selectedPart).getYieldNow());
        } else if (selectedPart instanceof Rack) {
            graph.addData("Solar", ((Rack) selectedPart).getYieldNow());
        }
    }
    graph.repaint();
}
Also used : Window(org.concord.energy3d.model.Window) Rack(org.concord.energy3d.model.Rack) Roof(org.concord.energy3d.model.Roof) Wall(org.concord.energy3d.model.Wall) SolarPanel(org.concord.energy3d.model.SolarPanel) Foundation(org.concord.energy3d.model.Foundation) HousePart(org.concord.energy3d.model.HousePart) Door(org.concord.energy3d.model.Door)

Example 42 with Wall

use of org.concord.energy3d.model.Wall in project energy3d by concord-consortium.

the class PrintController method update.

@Override
public void update(final ReadOnlyTimer globalTimer) {
    if (isPrintPreview) {
        rotate();
    }
    if (isFinished()) {
        return;
    }
    final Spatial originalHouseRoot = Scene.getOriginalHouseRoot();
    if (init) {
        init = false;
        finish = false;
        if (!isPrintPreview) {
            Scene.getRoot().detachChild(pagesRoot);
            pagesRoot.detachAllChildren();
            for (final HousePart part : printParts) {
                if (part instanceof Wall) {
                    ((Wall) part).setBackMeshesVisible(true);
                }
            }
            for (final HousePart part : printParts) {
                part.hideLabels();
                part.getOriginal().hideLabels();
            }
        } else {
            printParts = new ArrayList<HousePart>(Scene.getInstance().getParts().size());
            final boolean orgSolarHeatMap = SceneManager.getInstance().getSolarHeatMap();
            SceneManager.getInstance().setSolarHeatMapWithoutUpdate(false);
            for (final HousePart part : Scene.getInstance().getParts()) {
                if (part.isPrintable()) {
                    final HousePart printPart = (HousePart) ObjectCloner.deepCopy(part);
                    printParts.add(printPart);
                    Scene.getRoot().attachChild(printPart.getRoot());
                    printPart.setOriginal(part);
                    printPart.flatten(1.0);
                }
            }
            SceneManager.getInstance().setSolarHeatMapWithoutUpdate(orgSolarHeatMap);
            final ArrayList<ArrayList<Spatial>> pages = new ArrayList<ArrayList<Spatial>>();
            computePageDimension();
            computePrintCenters(pages);
            arrangePrintPages(pages);
            if (!restartFlag) {
                SceneManager.getInstance().updatePrintPreviewScene(true);
            }
            drawPrintParts(0);
        }
        originalHouseRoot.getSceneHints().setCullHint(CullHint.Always);
        timer.reset();
    }
    final double viewSwitchDelay = 0.5;
    if (!finish && (!isPrintPreview || timer.getTimeInSeconds() > viewSwitchDelay)) {
        final double t = timer.getTimeInSeconds() - (isPrintPreview ? viewSwitchDelay : 0);
        drawPrintParts(isPrintPreview ? t : 1 - t);
        finish = t > 1;
        if (finish) {
            timer.reset();
        }
    }
    if (finish) {
        if (isPrintPreview) {
            Scene.getRoot().attachChild(pagesRoot);
        }
        if (isPrintPreview && restartFlag) {
            restartFlag = false;
        }
        // (time - startTime) > 1.0;
        final boolean doTheEndAnimation = timer.getTimeInSeconds() > viewSwitchDelay;
        if (!isPrintPreview && doTheEndAnimation) {
            originalHouseRoot.setRotation(new Matrix3().fromAngles(0, 0, 0));
            angle = 0;
            for (final HousePart housePart : printParts) {
                Scene.getRoot().detachChild(housePart.getRoot());
            }
            printParts = null;
            if (!isPrintPreview && restartFlag) {
                /* to force redraw when animated back to normal scene */
                // redraw does not stretch the walls of print parts the roof. there is also no need for redraw since nothing has changed
                Scene.getInstance().redrawAllNow();
                setPrintPreview(true);
                return;
            }
            originalHouseRoot.setScale(1);
            originalHouseRoot.setTranslation(0, 0, 0);
            originalHouseRoot.updateGeometricState(timer.getTimePerFrame(), true);
            final CanvasRenderer renderer = SceneManager.getInstance().getCanvas().getCanvasRenderer();
            renderer.makeCurrentContext();
            renderer.getRenderer().setBackgroundColor(ColorRGBA.BLACK);
            renderer.releaseCurrentContext();
            SceneManager.getInstance().setShading(shadingSelected);
            SceneManager.getInstance().setShadow(shadowSelected);
            Heliodon.getInstance().setVisible(heliodonSelected);
            SceneManager.getInstance().updatePrintPreviewScene(false);
            if (!doTheEndAnimation) {
                // to avoid concurrency exception
                setFinished(true);
            }
        }
        if (printParts != null) {
            for (final HousePart part : printParts) {
                if (part instanceof Foundation) {
                    part.getRoot().getSceneHints().setCullHint(isPrintPreview ? CullHint.Always : CullHint.Inherit);
                }
            }
        }
        if (isPrintPreview && printParts != null) {
            for (final HousePart part : printParts) {
                if (part instanceof Wall) {
                    ((Wall) part).setBackMeshesVisible(false);
                }
            }
        }
        if (isPrintPreview || doTheEndAnimation) {
            originalHouseRoot.getSceneHints().setCullHint(CullHint.Inherit);
            if (isPrintPreview && printParts != null) {
                int printSequence = 0;
                for (final HousePart part : printParts) {
                    part.getOriginal().drawLabels(printSequence);
                    printSequence = part.drawLabels(printSequence);
                }
                SceneManager.getInstance().refresh();
            }
            setFinished(true);
        }
    }
}
Also used : Wall(org.concord.energy3d.model.Wall) Spatial(com.ardor3d.scenegraph.Spatial) CanvasRenderer(com.ardor3d.framework.CanvasRenderer) ArrayList(java.util.ArrayList) Foundation(org.concord.energy3d.model.Foundation) HousePart(org.concord.energy3d.model.HousePart) CullHint(com.ardor3d.scenegraph.hint.CullHint) Matrix3(com.ardor3d.math.Matrix3)

Example 43 with Wall

use of org.concord.energy3d.model.Wall in project energy3d by concord-consortium.

the class GroupAnnualAnalysis method toJson.

@Override
public String toJson() {
    String type = "Unknown";
    final ArrayList<String> names = new ArrayList<String>();
    for (final HousePart p : selectedParts) {
        if (p instanceof SolarPanel) {
            names.add("Solar " + p.getId());
            type = "Solar Panel";
        } else if (p instanceof Rack) {
            names.add("Solar " + p.getId());
            type = "Rack";
        } else if (p instanceof Mirror) {
            names.add("Solar " + p.getId());
            type = "Mirror";
        } else if (p instanceof ParabolicTrough) {
            names.add("Solar " + p.getId());
            type = "Parabolic Trough";
        } else if (p instanceof ParabolicDish) {
            names.add("Solar " + p.getId());
            type = "Parabolic Dish";
        } else if (p instanceof FresnelReflector) {
            names.add("Solar " + p.getId());
            type = "Fresnel Reflector";
        } else if (p instanceof Wall) {
            names.add("Heat Gain " + p.getId());
            type = "Wall";
        } else if (p instanceof Roof) {
            names.add("Heat Gain " + p.getId());
            type = "Roof";
        } else if (p instanceof Door) {
            names.add("Heat Gain " + p.getId());
            type = "Door";
        } else if (p instanceof Window) {
            names.add("Solar " + p.getId());
            names.add("Heat Gain " + p.getId());
            type = "Window";
        } else if (p instanceof Foundation) {
            final Foundation foundation = (Foundation) p;
            switch(foundation.getProjectType()) {
                case Foundation.TYPE_PV_PROJECT:
                    names.add("PV " + p.getId());
                    break;
                case Foundation.TYPE_CSP_PROJECT:
                    names.add("CSP " + p.getId());
                    break;
                case Foundation.TYPE_BUILDING:
                    names.add("Building " + p.getId());
                    break;
            }
            type = "Foundation";
        }
    }
    String s = "{\"Type\": \"" + type + "\", \"Months\": " + getNumberOfDataPoints();
    for (final String name : names) {
        final List<Double> data = graph.getData(name);
        if (data == null) {
            continue;
        }
        s += ", \"" + name + "\": {";
        s += "\"Monthly\": [";
        for (final Double x : data) {
            s += Graph.ENERGY_FORMAT.format(x) + ",";
        }
        s = s.substring(0, s.length() - 1);
        s += "]\n";
        s += ", \"Total\": " + Graph.ENERGY_FORMAT.format(getResult(name));
        s += "}";
    }
    s += "}";
    return s;
}
Also used : Window(org.concord.energy3d.model.Window) ParabolicTrough(org.concord.energy3d.model.ParabolicTrough) FresnelReflector(org.concord.energy3d.model.FresnelReflector) Wall(org.concord.energy3d.model.Wall) ArrayList(java.util.ArrayList) Door(org.concord.energy3d.model.Door) ParabolicDish(org.concord.energy3d.model.ParabolicDish) Rack(org.concord.energy3d.model.Rack) Roof(org.concord.energy3d.model.Roof) SolarPanel(org.concord.energy3d.model.SolarPanel) Foundation(org.concord.energy3d.model.Foundation) Mirror(org.concord.energy3d.model.Mirror) HousePart(org.concord.energy3d.model.HousePart)

Example 44 with Wall

use of org.concord.energy3d.model.Wall in project energy3d by concord-consortium.

the class GroupDailyAnalysis method toJson.

@Override
public String toJson() {
    String type = "Unknown";
    final ArrayList<String> names = new ArrayList<String>();
    for (final HousePart p : selectedParts) {
        if (p instanceof SolarPanel) {
            names.add("Solar " + p.getId());
            type = "Solar Panel";
        } else if (p instanceof Rack) {
            names.add("Solar " + p.getId());
            type = "Rack";
        } else if (p instanceof Mirror) {
            names.add("Solar " + p.getId());
            type = "Mirror";
        } else if (p instanceof ParabolicTrough) {
            names.add("Solar " + p.getId());
            type = "Parabolic Trough";
        } else if (p instanceof ParabolicDish) {
            names.add("Solar " + p.getId());
            type = "Parabolic Dish";
        } else if (p instanceof FresnelReflector) {
            names.add("Solar " + p.getId());
            type = "Fresnel Reflector";
        } else if (p instanceof Wall) {
            names.add("Heat Gain " + p.getId());
            type = "Wall";
        } else if (p instanceof Roof) {
            names.add("Heat Gain " + p.getId());
            type = "Roof";
        } else if (p instanceof Door) {
            names.add("Heat Gain " + p.getId());
            type = "Door";
        } else if (p instanceof Window) {
            names.add("Solar " + p.getId());
            names.add("Heat Gain " + p.getId());
            type = "Window";
        } else if (p instanceof Foundation) {
            final Foundation foundation = (Foundation) p;
            switch(foundation.getProjectType()) {
                case Foundation.TYPE_PV_PROJECT:
                    names.add("PV " + p.getId());
                    break;
                case Foundation.TYPE_CSP_PROJECT:
                    names.add("CSP " + p.getId());
                    break;
                case Foundation.TYPE_BUILDING:
                    names.add("Building " + p.getId());
                    break;
            }
            type = "Foundation";
        }
    }
    String s = "{\"Type\": \"" + type + "\"";
    for (final String name : names) {
        final List<Double> data = graph.getData(name);
        if (data == null) {
            continue;
        }
        s += ", \"" + name + "\": {";
        s += "\"Hourly\": [";
        for (final Double x : data) {
            s += Graph.FIVE_DECIMALS.format(x) + ",";
        }
        s = s.substring(0, s.length() - 1);
        s += "]\n";
        s += ", \"Total\": " + Graph.ENERGY_FORMAT.format(getResult(name));
        s += "}";
    }
    s += "}";
    return s;
}
Also used : Window(org.concord.energy3d.model.Window) ParabolicTrough(org.concord.energy3d.model.ParabolicTrough) FresnelReflector(org.concord.energy3d.model.FresnelReflector) Wall(org.concord.energy3d.model.Wall) ArrayList(java.util.ArrayList) Door(org.concord.energy3d.model.Door) ParabolicDish(org.concord.energy3d.model.ParabolicDish) Rack(org.concord.energy3d.model.Rack) Roof(org.concord.energy3d.model.Roof) SolarPanel(org.concord.energy3d.model.SolarPanel) Foundation(org.concord.energy3d.model.Foundation) Mirror(org.concord.energy3d.model.Mirror) HousePart(org.concord.energy3d.model.HousePart)

Example 45 with Wall

use of org.concord.energy3d.model.Wall in project energy3d by concord-consortium.

the class GroupDailyAnalysis method updateGraph.

@Override
public void updateGraph() {
    final int n = (int) Math.round(60.0 / Scene.getInstance().getTimeStep());
    for (int i = 0; i < 24; i++) {
        SolarRadiation.getInstance().computeEnergyAtHour(i);
        for (final HousePart p : selectedParts) {
            final String customText = p.getLabelCustomText();
            if (p instanceof Window) {
                final Window window = (Window) p;
                final double solar = p.getSolarPotentialNow() * window.getSolarHeatGainCoefficient();
                graph.addData("Solar " + p.getId(), solar);
                final double[] loss = p.getHeatLoss();
                final int t0 = n * i;
                double sum = 0;
                for (int k = t0; k < t0 + n; k++) {
                    sum += loss[k];
                }
                graph.addData("Heat Gain " + p.getId(), -sum);
            } else if (p instanceof Wall || p instanceof Roof) {
                final double[] loss = p.getHeatLoss();
                final int t0 = n * i;
                double sum = 0;
                for (int k = t0; k < t0 + n; k++) {
                    sum += loss[k];
                }
                graph.addData("Heat Gain " + p.getId(), -sum);
            } else if (p instanceof SolarPanel) {
                if (customText != null) {
                    graph.addData("Solar " + p.getId() + graph.getDataNameDelimiter() + customText, ((SolarPanel) p).getYieldNow());
                } else {
                    graph.addData("Solar " + p.getId(), ((SolarPanel) p).getYieldNow());
                }
            } else if (p instanceof Rack) {
                if (customText != null) {
                    graph.addData("Solar " + p.getId() + graph.getDataNameDelimiter() + customText, ((Rack) p).getYieldNow());
                } else {
                    graph.addData("Solar " + p.getId(), ((Rack) p).getYieldNow());
                }
            } else if (p instanceof Mirror) {
                final Mirror mirror = (Mirror) p;
                final double solar = mirror.getSolarPotentialNow() * mirror.getSystemEfficiency();
                if (customText != null) {
                    graph.addData("Solar " + p.getId() + graph.getDataNameDelimiter() + customText, solar);
                } else {
                    graph.addData("Solar " + p.getId(), solar);
                }
            } else if (p instanceof ParabolicTrough) {
                final ParabolicTrough trough = (ParabolicTrough) p;
                final double solar = trough.getSolarPotentialNow() * trough.getSystemEfficiency();
                if (customText != null) {
                    graph.addData("Solar " + p.getId() + graph.getDataNameDelimiter() + customText, solar);
                } else {
                    graph.addData("Solar " + p.getId(), solar);
                }
            } else if (p instanceof ParabolicDish) {
                final ParabolicDish dish = (ParabolicDish) p;
                final double solar = dish.getSolarPotentialNow() * dish.getSystemEfficiency();
                if (customText != null) {
                    graph.addData("Solar " + p.getId() + graph.getDataNameDelimiter() + customText, solar);
                } else {
                    graph.addData("Solar " + p.getId(), solar);
                }
            } else if (p instanceof FresnelReflector) {
                final FresnelReflector reflector = (FresnelReflector) p;
                final double solar = reflector.getSolarPotentialNow() * reflector.getSystemEfficiency();
                if (customText != null) {
                    graph.addData("Solar " + p.getId() + graph.getDataNameDelimiter() + customText, solar);
                } else {
                    graph.addData("Solar " + p.getId(), solar);
                }
            } else if (p instanceof Foundation) {
                final boolean mean = group.getType().endsWith("(Mean)");
                final Foundation foundation = (Foundation) p;
                switch(foundation.getProjectType()) {
                    case Foundation.TYPE_PV_PROJECT:
                        double pv = foundation.getPhotovoltaicNow();
                        if (mean) {
                            pv /= foundation.getNumberOfSolarPanels();
                            if (customText != null) {
                                graph.addData("PV " + p.getId() + graph.getDataNameDelimiter() + customText + " mean", pv);
                            } else {
                                graph.addData("PV " + p.getId() + " mean", pv);
                            }
                        } else {
                            if (customText != null) {
                                graph.addData("PV " + p.getId() + graph.getDataNameDelimiter() + customText, pv);
                            } else {
                                graph.addData("PV " + p.getId(), pv);
                            }
                        }
                        break;
                    case Foundation.TYPE_CSP_PROJECT:
                        double csp = foundation.getCspNow();
                        if (mean) {
                            csp /= foundation.countParts(new Class[] { Mirror.class, ParabolicTrough.class, ParabolicDish.class });
                            if (customText != null) {
                                graph.addData("CSP " + p.getId() + graph.getDataNameDelimiter() + customText + " mean", csp);
                            } else {
                                graph.addData("CSP " + p.getId() + " mean", csp);
                            }
                        } else {
                            if (customText != null) {
                                graph.addData("CSP " + p.getId() + graph.getDataNameDelimiter() + customText, csp);
                            } else {
                                graph.addData("CSP " + p.getId(), csp);
                            }
                        }
                        break;
                    case Foundation.TYPE_BUILDING:
                        final double totalEnergy = foundation.getTotalEnergyNow();
                        graph.addData("Building " + p.getId(), totalEnergy);
                        break;
                }
            }
        }
    }
    graph.repaint();
}
Also used : Window(org.concord.energy3d.model.Window) ParabolicTrough(org.concord.energy3d.model.ParabolicTrough) FresnelReflector(org.concord.energy3d.model.FresnelReflector) Wall(org.concord.energy3d.model.Wall) ParabolicDish(org.concord.energy3d.model.ParabolicDish) Rack(org.concord.energy3d.model.Rack) Roof(org.concord.energy3d.model.Roof) SolarPanel(org.concord.energy3d.model.SolarPanel) Foundation(org.concord.energy3d.model.Foundation) Mirror(org.concord.energy3d.model.Mirror) HousePart(org.concord.energy3d.model.HousePart)

Aggregations

Wall (org.concord.energy3d.model.Wall)57 HousePart (org.concord.energy3d.model.HousePart)45 Foundation (org.concord.energy3d.model.Foundation)37 Roof (org.concord.energy3d.model.Roof)31 Window (org.concord.energy3d.model.Window)28 Door (org.concord.energy3d.model.Door)25 Rack (org.concord.energy3d.model.Rack)23 SolarPanel (org.concord.energy3d.model.SolarPanel)23 ArrayList (java.util.ArrayList)16 Mirror (org.concord.energy3d.model.Mirror)14 FresnelReflector (org.concord.energy3d.model.FresnelReflector)12 Floor (org.concord.energy3d.model.Floor)11 List (java.util.List)10 ParabolicDish (org.concord.energy3d.model.ParabolicDish)10 ParabolicTrough (org.concord.energy3d.model.ParabolicTrough)10 ActionEvent (java.awt.event.ActionEvent)9 ActionListener (java.awt.event.ActionListener)9 Tree (org.concord.energy3d.model.Tree)8 JMenuItem (javax.swing.JMenuItem)7 JPanel (javax.swing.JPanel)7