use of org.concord.energy3d.simulation.DesignSpecs 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.DesignSpecs in project energy3d by concord-consortium.
the class BuildingInfoPanel method updateWallNumberBounds.
public void updateWallNumberBounds() {
final DesignSpecs specs = Scene.getInstance().getDesignSpecs();
String t = "Number of walls";
if (specs.isNumberOfWallsEnabled()) {
t += " (" + specs.getMinimumNumberOfWalls() + " - " + specs.getMaximumNumberOfWalls() + ")";
}
wallCountBar.setMinimum(specs.getMinimumNumberOfWalls());
wallCountBar.setMaximum(specs.getMaximumNumberOfWalls());
wallCountPanel.setBorder(EnergyPanel.createTitledBorder(t, true));
wallCountBar.setEnabled(specs.isNumberOfWallsEnabled());
wallCountBar.repaint();
}
use of org.concord.energy3d.simulation.DesignSpecs in project energy3d by concord-consortium.
the class BuildingInfoPanel method updateHeightBounds.
public void updateHeightBounds() {
final DesignSpecs specs = Scene.getInstance().getDesignSpecs();
final double r = 3.28084;
String t = "Height (";
switch(Scene.getInstance().getUnit()) {
case InternationalSystemOfUnits:
if (specs.isHeightEnabled()) {
t += twoDecimals.format(specs.getMinimumHeight()) + " - " + twoDecimals.format(specs.getMaximumHeight()) + " ";
}
t += "m)";
heightBar.setMinimum(specs.getMinimumHeight());
heightBar.setMaximum(specs.getMaximumHeight());
break;
case USCustomaryUnits:
if (specs.isHeightEnabled()) {
t += noDecimals.format(specs.getMinimumHeight() * r) + " - " + noDecimals.format(specs.getMaximumHeight() * r) + " ";
}
t += "ft)";
heightBar.setMinimum(specs.getMinimumHeight() * r);
heightBar.setMaximum(specs.getMaximumHeight() * r);
break;
}
heightPanel.setBorder(EnergyPanel.createTitledBorder(t, true));
heightBar.setEnabled(specs.isHeightEnabled());
heightBar.repaint();
}
use of org.concord.energy3d.simulation.DesignSpecs in project energy3d by concord-consortium.
the class BuildingInfoPanel method updateSolarPanelNumberBounds.
public void updateSolarPanelNumberBounds() {
final DesignSpecs specs = Scene.getInstance().getDesignSpecs();
String t = "Number of solar panels";
if (specs.isNumberOfSolarPanelsEnabled()) {
t += " (" + specs.getMinimumNumberOfSolarPanels() + " - " + specs.getMaximumNumberOfSolarPanels() + ")";
}
solarPanelCountBar.setMinimum(specs.getMinimumNumberOfSolarPanels());
solarPanelCountBar.setMaximum(specs.getMaximumNumberOfSolarPanels());
solarPanelCountPanel.setBorder(EnergyPanel.createTitledBorder(t, true));
solarPanelCountBar.setEnabled(specs.isNumberOfSolarPanelsEnabled());
solarPanelCountBar.repaint();
}
use of org.concord.energy3d.simulation.DesignSpecs in project energy3d by concord-consortium.
the class BuildingInfoPanel method updateWindowToFloorRatioBounds.
public void updateWindowToFloorRatioBounds() {
final DesignSpecs specs = Scene.getInstance().getDesignSpecs();
String t = "Window/floor area ratio";
if (specs.isWindowToFloorRatioEnabled()) {
t += " (" + twoDecimals.format(specs.getMinimumWindowToFloorRatio()) + " - " + twoDecimals.format(specs.getMaximumWindowToFloorRatio()) + ")";
}
windowToFloorBar.setMinimum(specs.getMinimumWindowToFloorRatio());
windowToFloorBar.setMaximum(specs.getMaximumWindowToFloorRatio());
windowToFloorPanel.setBorder(EnergyPanel.createTitledBorder(t, true));
windowToFloorBar.setEnabled(specs.isWindowToFloorRatioEnabled());
windowToFloorBar.repaint();
}
Aggregations