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();
}
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);
}
}
}
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;
}
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;
}
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();
}
Aggregations