use of org.concord.energy3d.simulation.PvDesignSpecs 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();
}
use of org.concord.energy3d.simulation.PvDesignSpecs 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();
}
use of org.concord.energy3d.simulation.PvDesignSpecs 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) + "°, " + ld.getLongitudes().get(city) + "°), 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();
}
});
}
use of org.concord.energy3d.simulation.PvDesignSpecs in project energy3d by concord-consortium.
the class CspProjectCostGraph method updateBudget.
public void updateBudget() {
if (budgetPanel != null && foundation != null) {
calculateCost();
final PvDesignSpecs pvSpecs = Scene.getInstance().getPvDesignSpecs();
budgetBar.setEnabled(pvSpecs.isBudgetEnabled());
budgetBar.setMaximum(pvSpecs.getMaximumBudget());
final String t = "Total (" + (pvSpecs.isBudgetEnabled() ? "\u2264 $" + noDecimals.format(pvSpecs.getMaximumBudget()) : "$") + ")";
budgetPanel.setBorder(EnergyPanel.createTitledBorder(t, true));
budgetBar.setValue((float) totalCost);
budgetBar.repaint();
budgetPanel.repaint();
}
}
use of org.concord.energy3d.simulation.PvDesignSpecs in project energy3d by concord-consortium.
the class PvProjectCostGraph method updateBudget.
public void updateBudget() {
if (budgetPanel != null && foundation != null) {
calculateCost();
final PvDesignSpecs pvSpecs = Scene.getInstance().getPvDesignSpecs();
budgetBar.setEnabled(pvSpecs.isBudgetEnabled());
budgetBar.setMaximum(pvSpecs.getMaximumBudget());
final String t = "Total (" + (pvSpecs.isBudgetEnabled() ? "\u2264 $" + noDecimals.format(pvSpecs.getMaximumBudget()) : "$") + ")";
budgetPanel.setBorder(EnergyPanel.createTitledBorder(t, true));
budgetBar.setValue((float) totalCost);
budgetBar.repaint();
budgetPanel.repaint();
}
}
Aggregations