use of org.concord.energy3d.model.Mirror in project energy3d by concord-consortium.
the class Scene method removeAllHeliostats.
public void removeAllHeliostats() {
final ArrayList<HousePart> heliostats = new ArrayList<HousePart>();
final HousePart selectedPart = SceneManager.getInstance().getSelectedPart();
if (selectedPart != null) {
final Foundation foundation = selectedPart instanceof Foundation ? (Foundation) selectedPart : selectedPart.getTopContainer();
for (final HousePart part : parts) {
if (part instanceof Mirror && part.getTopContainer() == foundation) {
heliostats.add(part);
}
}
} else {
for (final HousePart part : parts) {
if (part instanceof Mirror) {
heliostats.add(part);
}
}
}
if (heliostats.isEmpty()) {
JOptionPane.showMessageDialog(MainFrame.getInstance(), "There is no heliostat to remove.", "No Heliostat", JOptionPane.INFORMATION_MESSAGE);
return;
}
if (JOptionPane.showConfirmDialog(MainFrame.getInstance(), "Do you really want to remove all " + heliostats.size() + " heliostats" + (selectedPart != null ? " on the selected foundation" : "") + "?", "Confirm", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE) != JOptionPane.YES_OPTION) {
return;
}
final RemoveMultiplePartsCommand c = new RemoveMultiplePartsCommand(heliostats);
for (final HousePart part : heliostats) {
remove(part, false);
}
redrawAll();
SceneManager.getInstance().getUndoManager().addEdit(c);
edited = true;
}
use of org.concord.energy3d.model.Mirror in project energy3d by concord-consortium.
the class Scene method setSizeForAllHeliostats.
public void setSizeForAllHeliostats(final double width, final double height) {
for (final HousePart p : parts) {
if (p instanceof Mirror) {
((Mirror) p).setMirrorWidth(width);
((Mirror) p).setMirrorHeight(height);
p.draw();
}
}
SceneManager.getInstance().refresh();
}
use of org.concord.energy3d.model.Mirror in project energy3d by concord-consortium.
the class Scene method setTargetForAllHeliostats.
public void setTargetForAllHeliostats(final Foundation target) {
final List<Foundation> oldTargets = new ArrayList<Foundation>();
for (final HousePart p : parts) {
if (p instanceof Mirror) {
final Mirror m = (Mirror) p;
final Foundation t = m.getReceiver();
if (t != null && !oldTargets.contains(t)) {
oldTargets.add(t);
}
m.setReceiver(target);
p.draw();
}
}
if (target != null) {
target.drawSolarReceiver();
}
if (!oldTargets.isEmpty()) {
for (final Foundation t : oldTargets) {
t.drawSolarReceiver();
}
}
SceneManager.getInstance().refresh();
}
use of org.concord.energy3d.model.Mirror in project energy3d by concord-consortium.
the class SceneManager method update.
@Override
public void update(final ReadOnlyTimer timer) {
final double tpf = timer.getTimePerFrame();
passManager.updatePasses(tpf);
taskManager.getQueue(GameTaskQueue.UPDATE).setExecuteMultiple(executeAllTask);
taskManager.getQueue(GameTaskQueue.UPDATE).execute(canvas.getCanvasRenderer().getRenderer());
if (operationFlag) {
executeOperation();
}
if (mouseState != null) {
mouseMoved();
}
if (Scene.isRedrawAll()) {
Scene.getInstance().redrawAllNow();
}
if (rotAnim && viewMode == ViewMode.NORMAL && canvas.getCanvasRenderer() != null) {
final Matrix3 rotate = new Matrix3();
rotate.fromAngleNormalAxis(45 * tpf * MathUtils.DEG_TO_RAD, Vector3.UNIT_Z);
final Camera camera = getCamera();
camera.setLocation(rotate.applyPre(camera.getLocation(), null));
camera.lookAt(0, 0, 1, Vector3.UNIT_Z);
getCameraNode().updateFromCamera();
Scene.getInstance().updateEditShapes();
}
final Heliodon heliodon = Heliodon.getInstance();
if (heliodon != null) {
if (sunAnim) {
heliodon.setHourAngle(heliodon.getHourAngle() + tpf * 0.5, true, true, false);
SceneManager.getInstance().changeSkyTexture();
SceneManager.getInstance().setShading(heliodon.isNightTime());
final boolean night = Heliodon.getInstance().isNightTime();
for (final HousePart part : Scene.getInstance().getParts()) {
if (part instanceof Mirror) {
final Mirror m = (Mirror) part;
if (night) {
// call this so that the light beams can be set invisible
m.drawSunBeam();
} else {
if (m.getReceiver() != null) {
m.draw();
}
}
} else if (part instanceof ParabolicTrough) {
final ParabolicTrough t = (ParabolicTrough) part;
if (night) {
// call this so that the light beams can be set invisible
t.drawSunBeam();
} else {
t.draw();
}
} else if (part instanceof ParabolicDish) {
final ParabolicDish d = (ParabolicDish) part;
if (night) {
// call this so that the light beams can be set invisible
d.drawSunBeam();
} else {
d.draw();
}
} else if (part instanceof FresnelReflector) {
final FresnelReflector f = (FresnelReflector) part;
if (night) {
// call this so that the light beams can be set invisible
f.drawSunBeam();
} else {
f.draw();
}
} else if (part instanceof SolarPanel) {
final SolarPanel sp = (SolarPanel) part;
if (!night && sp.getTracker() != Trackable.NO_TRACKER) {
sp.draw();
}
if (sp.isSunBeamVisible()) {
sp.drawSunBeam();
}
} else if (part instanceof Rack) {
final Rack rack = (Rack) part;
if (!night && rack.getTracker() != Trackable.NO_TRACKER) {
rack.draw();
}
if (rack.isSunBeamVisible()) {
rack.drawSunBeam();
}
}
}
}
heliodon.update();
}
if (cameraControl != null && cameraControl.isAnimating()) {
cameraControl.animate();
}
root.updateGeometricState(tpf);
}
use of org.concord.energy3d.model.Mirror in project energy3d by concord-consortium.
the class SolarRadiation method resetTrackables.
public void resetTrackables() {
Heliodon.getInstance().getCalendar().set(Calendar.HOUR_OF_DAY, hourOfDay);
Heliodon.getInstance().getCalendar().set(Calendar.MINUTE, minuteOfHour);
for (final HousePart part : Scene.getInstance().getParts()) {
if (part instanceof Mirror) {
final Mirror m = (Mirror) part;
if (m.getReceiver() != null) {
m.draw();
}
} else if (part instanceof FresnelReflector) {
final FresnelReflector fr = (FresnelReflector) part;
if (fr.getReceiver() != null) {
fr.draw();
}
} else if (part instanceof ParabolicTrough) {
final ParabolicTrough pt = (ParabolicTrough) part;
pt.draw();
} else if (part instanceof ParabolicDish) {
final ParabolicDish pd = (ParabolicDish) part;
pd.draw();
} else if (part instanceof SolarPanel) {
final SolarPanel sp = (SolarPanel) part;
if (sp.getTracker() != Trackable.NO_TRACKER) {
sp.draw();
}
} else if (part instanceof Rack) {
final Rack rack = (Rack) part;
if (rack.getTracker() != Trackable.NO_TRACKER) {
rack.draw();
}
}
}
}
Aggregations