Search in sources :

Example 1 with PvCustomPrice

use of org.concord.energy3d.simulation.PvCustomPrice in project energy3d by concord-consortium.

the class PvProjectInfoPanel method update.

void update(final Foundation foundation) {
    final PvDesignSpecs specs = Scene.getInstance().getPvDesignSpecs();
    final PvCustomPrice price = Scene.getInstance().getPvCustomPrice();
    int countSolarPanels = 0;
    double cost = 0;
    double panelArea = 0;
    final List<SolarPanel> panels = foundation.getSolarPanels();
    if (!panels.isEmpty()) {
        countSolarPanels += panels.size();
        for (final SolarPanel s : panels) {
            cost += price.getTotalCost(s);
            panelArea += s.getPanelWidth() * s.getPanelHeight();
        }
    }
    final List<Rack> racks = foundation.getRacks();
    if (!racks.isEmpty()) {
        for (final Rack r : racks) {
            countSolarPanels += r.getNumberOfSolarPanels();
            cost += price.getTotalCost(r);
            panelArea += r.getArea();
        }
    }
    countBar.setValue(countSolarPanels);
    countBar.setMaximum(specs.getMaximumNumberOfSolarPanels());
    countBar.setEnabled(specs.isNumberOfSolarPanelsEnabled());
    float landArea;
    final FoundationPolygon polygon = foundation.getPolygon();
    if (polygon != null && polygon.isVisible()) {
        landArea = (float) polygon.getArea();
    } else {
        landArea = (float) foundation.getArea();
    }
    cost += landArea * price.getLandUnitPrice() * price.getLifespan();
    landAreaBar.setValue(countSolarPanels == 0 ? 0 : landArea / countSolarPanels);
    costBar.setValue(Math.round(cost));
    costBar.setMaximum(specs.getMaximumBudget());
    costBar.setEnabled(specs.isBudgetEnabled());
    String t = "Total cost over " + price.getLifespan() + " years";
    if (specs.isBudgetEnabled()) {
        t += " (" + "<$" + specs.getMaximumBudget() + ")";
    }
    costPanel.setBorder(EnergyPanel.createTitledBorder(t, true));
    panelAreaBar.setValue((float) panelArea);
    panelAreaBar.setMaximum(foundation.getArea());
    repaint();
}
Also used : Rack(org.concord.energy3d.model.Rack) PvCustomPrice(org.concord.energy3d.simulation.PvCustomPrice) PvDesignSpecs(org.concord.energy3d.simulation.PvDesignSpecs) SolarPanel(org.concord.energy3d.model.SolarPanel) FoundationPolygon(org.concord.energy3d.model.FoundationPolygon)

Example 2 with PvCustomPrice

use of org.concord.energy3d.simulation.PvCustomPrice in project energy3d by concord-consortium.

the class PvProjectInfoPanel method updateBudgetMaximum.

public void updateBudgetMaximum() {
    final PvCustomPrice price = Scene.getInstance().getPvCustomPrice();
    final PvDesignSpecs specs = Scene.getInstance().getPvDesignSpecs();
    String t = "Total cost over " + price.getLifespan() + " years";
    if (specs.isBudgetEnabled()) {
        t += " (" + "<$" + specs.getMaximumBudget() + ")";
    }
    costBar.setMaximum(specs.getMaximumBudget());
    costPanel.setBorder(EnergyPanel.createTitledBorder(t, true));
    costBar.setEnabled(specs.isBudgetEnabled());
    costBar.repaint();
}
Also used : PvCustomPrice(org.concord.energy3d.simulation.PvCustomPrice) PvDesignSpecs(org.concord.energy3d.simulation.PvDesignSpecs)

Example 3 with PvCustomPrice

use of org.concord.energy3d.simulation.PvCustomPrice in project energy3d by concord-consortium.

the class Scene method init.

private void init() {
    root.detachAllChildren();
    originalHouseRoot.detachAllChildren();
    notReceivingShadowRoot.detachAllChildren();
    root.attachChild(originalHouseRoot);
    root.attachChild(notReceivingShadowRoot);
    if (url != null) {
        for (final HousePart p : parts) {
            final boolean b = p instanceof Tree || p instanceof Human;
            (b ? notReceivingShadowRoot : originalHouseRoot).attachChild(p.getRoot());
        }
        System.out.println("initSceneNow done");
    }
    root.updateWorldBound(true);
    SceneManager.getInstance().updateHeliodonAndAnnotationSize();
    SceneManager.getInstance().setAxesVisible(!hideAxes);
    SceneManager.getInstance().getSolarLand().setVisible(solarMapForLand);
    setTheme(theme);
    SceneManager.getInstance().getLand().setDefaultColor(landColor != null ? landColor : new ColorRGBA(0, 1, 0, 0.5f));
    PvModulesData.getInstance();
    final EnergyPanel energyPanel = EnergyPanel.getInstance();
    if (calendar != null) {
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MILLISECOND, 0);
        if (url == null) {
            // if a new file is created, its default time is always set to noon so that the user does not get a dark night scene
            calendar.set(Calendar.HOUR_OF_DAY, 12);
            calendar.set(Calendar.MINUTE, 0);
        }
        final Date time = calendar.getTime();
        Heliodon.getInstance().setDate(time);
        Heliodon.getInstance().setTime(time);
        Util.setSilently(energyPanel.getDateSpinner(), time);
        Util.setSilently(energyPanel.getTimeSpinner(), time);
        if ("Boston".equals(city) || city == null || "".equals(city)) {
            city = "Boston, MA";
            latitude = 42;
        }
        // already silent
        energyPanel.setLatitude(latitude);
        Util.selectSilently(energyPanel.getCityComboBox(), city);
        final LocationData ld = LocationData.getInstance();
        if (ld.getLatitudes().get(city) != null) {
            energyPanel.getCityComboBox().setToolTipText("<html>(" + ld.getLatitudes().get(city) + "&deg;, " + ld.getLongitudes().get(city) + "&deg;), elevation " + ld.getAltitudes().get(city).intValue() + "m<br>Use Edit>Set Region... to select country and region.</html>");
        } else {
            JOptionPane.showMessageDialog(MainFrame.getInstance(), city + " not supported. Please upgrade your Energy3D to the latest.", "Missing City", JOptionPane.ERROR_MESSAGE);
        }
        Scene.getInstance().updateTreeLeaves();
        SceneManager.getInstance().changeSkyTexture();
        if (!first) {
            SceneManager.getInstance().setHeliodonVisible(isHeliodonVisible);
            Util.selectSilently(MainPanel.getInstance().getHeliodonButton(), isHeliodonVisible);
            EventQueue.invokeLater(new Runnable() {

                @Override
                public void run() {
                    MainPanel.getInstance().getSunAnimationButton().setEnabled(isHeliodonVisible);
                }
            });
        }
        Heliodon.getInstance().drawSun();
        SceneManager.getInstance().setShading(Heliodon.getInstance().isNightTime());
    }
    // previous versions do not have the following classes
    if (designSpecs == null) {
        designSpecs = new DesignSpecs();
    } else {
        designSpecs.setDefaultValues();
    }
    if (pvDesignSpecs == null) {
        pvDesignSpecs = new PvDesignSpecs();
    } else {
        pvDesignSpecs.setDefaultValues();
    }
    if (cspDesignSpecs == null) {
        cspDesignSpecs = new CspDesignSpecs();
    } else {
        cspDesignSpecs.setDefaultValues();
    }
    if (pvCustomPrice == null) {
        pvCustomPrice = new PvCustomPrice();
    } else {
        pvCustomPrice.setDefaultValues();
    }
    if (cspCustomPrice == null) {
        cspCustomPrice = new CspCustomPrice();
    } else {
        cspCustomPrice.setDefaultValues();
    }
    if (ground == null) {
        ground = new Ground();
    }
    if (atmosphere == null) {
        atmosphere = new Atmosphere();
    }
    if (unit == null) {
        unit = Unit.InternationalSystemOfUnits;
    }
    // restore the default values
    if (Util.isZero(heatVectorLength)) {
        heatVectorLength = 5000;
    }
    if (Util.isZero(heatFluxGridSize)) {
        heatFluxGridSize = 2;
    }
    if (Util.isZero(solarStep)) {
        solarStep = 2;
    }
    if (Util.isZero(timeStep)) {
        timeStep = 15;
    }
    if (Util.isZero(solarPanelNx)) {
        solarPanelNx = 4;
    }
    if (Util.isZero(solarPanelNy)) {
        solarPanelNy = 4;
    }
    if (Util.isZero(rackNx)) {
        rackNx = 8;
    }
    if (Util.isZero(rackNy)) {
        rackNy = 8;
    }
    if (Util.isZero(mirrorNx)) {
        mirrorNx = 4;
    }
    if (Util.isZero(mirrorNy)) {
        mirrorNy = 4;
    }
    if (Util.isZero(parabolicDishN)) {
        parabolicDishN = 4;
    }
    if (Util.isZero(rackCellSize)) {
        rackCellSize = 1;
    }
    if (Util.isZero(solarContrast)) {
        solarContrast = 50;
    }
    // in case we need to have more instruction sheets
    if (instructionSheetText != null) {
        if (instructionSheetText.length < INSTRUCTION_SHEET_NUMBER) {
            final String[] tmp = new String[INSTRUCTION_SHEET_NUMBER];
            System.arraycopy(instructionSheetText, 0, tmp, 0, instructionSheetText.length);
            instructionSheetText = tmp;
        }
    }
    if (instructionSheetTextType != null) {
        if (instructionSheetTextType.length < INSTRUCTION_SHEET_NUMBER) {
            final String[] tmp = new String[INSTRUCTION_SHEET_NUMBER];
            System.arraycopy(instructionSheetTextType, 0, tmp, 0, instructionSheetTextType.length);
            instructionSheetTextType = tmp;
        }
    }
    setEdited(false);
    setCopyBuffer(null);
    Util.setSilently(energyPanel.getColorMapSlider(), solarContrast);
    // need to do this to avoid logging
    Util.setSilently(MainPanel.getInstance().getNoteTextArea(), note == null ? "" : note);
    EventQueue.invokeLater(new Runnable() {

        @Override
        public void run() {
            energyPanel.updateThermostat();
            // necessary for the scroll bars to show up appropriately
            MainPanel.getInstance().setNoteVisible(MainPanel.getInstance().isNoteVisible());
            // moved from OpenNow to here to avoid triggering EnergyComputer -> RedrawAllNow before open is completed
            MainPanel.getInstance().getEnergyButton().setSelected(false);
            SceneManager.getInstance().getUndoManager().discardAllEdits();
            MainApplication.getEventLog().clear();
        }
    });
}
Also used : Human(org.concord.energy3d.model.Human) PvCustomPrice(org.concord.energy3d.simulation.PvCustomPrice) Ground(org.concord.energy3d.simulation.Ground) Date(java.util.Date) ReadOnlyColorRGBA(com.ardor3d.math.type.ReadOnlyColorRGBA) ColorRGBA(com.ardor3d.math.ColorRGBA) EnergyPanel(org.concord.energy3d.gui.EnergyPanel) LocationData(org.concord.energy3d.simulation.LocationData) DesignSpecs(org.concord.energy3d.simulation.DesignSpecs) CspDesignSpecs(org.concord.energy3d.simulation.CspDesignSpecs) PvDesignSpecs(org.concord.energy3d.simulation.PvDesignSpecs) CspDesignSpecs(org.concord.energy3d.simulation.CspDesignSpecs) Atmosphere(org.concord.energy3d.simulation.Atmosphere) PvDesignSpecs(org.concord.energy3d.simulation.PvDesignSpecs) Tree(org.concord.energy3d.model.Tree) CspCustomPrice(org.concord.energy3d.simulation.CspCustomPrice) HousePart(org.concord.energy3d.model.HousePart)

Aggregations

PvCustomPrice (org.concord.energy3d.simulation.PvCustomPrice)3 PvDesignSpecs (org.concord.energy3d.simulation.PvDesignSpecs)3 ColorRGBA (com.ardor3d.math.ColorRGBA)1 ReadOnlyColorRGBA (com.ardor3d.math.type.ReadOnlyColorRGBA)1 Date (java.util.Date)1 EnergyPanel (org.concord.energy3d.gui.EnergyPanel)1 FoundationPolygon (org.concord.energy3d.model.FoundationPolygon)1 HousePart (org.concord.energy3d.model.HousePart)1 Human (org.concord.energy3d.model.Human)1 Rack (org.concord.energy3d.model.Rack)1 SolarPanel (org.concord.energy3d.model.SolarPanel)1 Tree (org.concord.energy3d.model.Tree)1 Atmosphere (org.concord.energy3d.simulation.Atmosphere)1 CspCustomPrice (org.concord.energy3d.simulation.CspCustomPrice)1 CspDesignSpecs (org.concord.energy3d.simulation.CspDesignSpecs)1 DesignSpecs (org.concord.energy3d.simulation.DesignSpecs)1 Ground (org.concord.energy3d.simulation.Ground)1 LocationData (org.concord.energy3d.simulation.LocationData)1