Search in sources :

Example 6 with Rack

use of org.concord.energy3d.model.Rack in project energy3d by concord-consortium.

the class Scene method pasteToPickedLocationOnRoof.

public void pasteToPickedLocationOnRoof() {
    EnergyPanel.getInstance().updateRadiationHeatMap();
    if (copyBuffer == null) {
        return;
    }
    if (copyBuffer instanceof Foundation) {
        return;
    }
    final HousePart selectedPart = SceneManager.getInstance().getSelectedPart();
    if (!(selectedPart instanceof Roof)) {
        return;
    }
    final HousePart c = copyBuffer.copy(false);
    if (c == null) {
        return;
    }
    Vector3 position = SceneManager.getInstance().getPickedLocationOnRoof();
    if (position == null) {
        return;
    }
    if (selectedPart != c.getContainer()) {
        // solar panels and racks can be pasted to a different parent
        if (c instanceof SolarPanel) {
            ((SolarPanel) c).moveTo(selectedPart);
        } else if (c instanceof Rack) {
            ((Rack) c).moveTo(selectedPart);
        }
    }
    position = c.toRelative(position.subtractLocal(c.getContainer().getAbsPoint(0)));
    final Vector3 center = c.toRelative(c.getAbsCenter().subtractLocal(c.getContainer().getAbsPoint(0)));
    position = position.subtractLocal(center);
    final int n = c.getPoints().size();
    for (int i = 0; i < n; i++) {
        final Vector3 v = c.getPoints().get(i);
        v.addLocal(position);
    }
    if (c instanceof Rack) {
        ((Rack) c).moveSolarPanels(position);
        setIdOfChildren(c);
    }
    add(c, true);
    copyBuffer = c;
    SceneManager.getInstance().setSelectedPart(c);
    SceneManager.getInstance().getUndoManager().addEdit(new PastePartCommand(c));
}
Also used : Rack(org.concord.energy3d.model.Rack) Roof(org.concord.energy3d.model.Roof) SolarPanel(org.concord.energy3d.model.SolarPanel) Foundation(org.concord.energy3d.model.Foundation) ReadOnlyVector3(com.ardor3d.math.type.ReadOnlyVector3) Vector3(com.ardor3d.math.Vector3) HousePart(org.concord.energy3d.model.HousePart) PastePartCommand(org.concord.energy3d.undo.PastePartCommand)

Example 7 with Rack

use of org.concord.energy3d.model.Rack in project energy3d by concord-consortium.

the class Scene method pasteToPickedLocationOnFoundation.

public void pasteToPickedLocationOnFoundation() {
    if (SceneManager.getInstance().getSolarHeatMap()) {
        EnergyPanel.getInstance().updateRadiationHeatMap();
    }
    final HousePart selectedPart = SceneManager.getInstance().getSelectedPart();
    if (!(selectedPart instanceof Foundation)) {
        return;
    }
    final Foundation foundation = (Foundation) selectedPart;
    if (copyNode != null) {
        final Vector3 position = SceneManager.getInstance().getPickedLocationOnFoundation();
        if (position == null) {
            return;
        }
        copyNodeState.setAbsolutePosition(position.clone());
        Node newNode = null;
        try {
            newNode = foundation.importCollada(copyNodeState.getSourceURL(), position);
        } catch (final Throwable t) {
            t.printStackTrace();
        }
        if (newNode != null) {
            // copy the attributes that aren't copied by import
            final NodeState s = foundation.getNodeState(newNode);
            s.setDefaultColor(copyNodeState.getDefaultColor());
            s.setName(copyNodeState.getName());
            if (copyNodeState.getMeshesWithReversedNormal() != null) {
                for (final Integer i : copyNodeState.getMeshesWithReversedNormal()) {
                    s.reverseNormalOfMesh(i);
                    Util.reverseFace(Util.getMesh(newNode, i));
                }
            }
            if (copyNodeState.getDeletedMeshes() != null) {
                for (final Integer i : copyNodeState.getDeletedMeshes()) {
                    foundation.deleteMesh(Util.getMesh(newNode, i));
                }
            }
            final HashMap<Integer, ReadOnlyColorRGBA> meshColors = copyNodeState.getMeshColors();
            if (meshColors != null) {
                for (final Integer i : meshColors.keySet()) {
                    s.setMeshColor(i, meshColors.get(i));
                    Util.getMesh(newNode, i).setDefaultColor(s.getMeshColor(i));
                }
            }
        }
    } else {
        if (copyBuffer != null) {
            final HousePart c = copyBuffer.copy(false);
            if (c == null) {
                return;
            }
            Vector3 position = SceneManager.getInstance().getPickedLocationOnFoundation();
            if (position == null) {
                return;
            }
            // move to this foundation
            c.setContainer(foundation);
            position = c.toRelative(position.subtractLocal(c.getContainer().getAbsPoint(0)));
            final Vector3 center = c.toRelative(c.getAbsCenter().subtractLocal(c.getContainer().getAbsPoint(0)));
            position = position.subtractLocal(center);
            final int n = c.getPoints().size();
            for (int i = 0; i < n; i++) {
                final Vector3 v = c.getPoints().get(i);
                v.addLocal(position);
            }
            if (c instanceof Rack) {
                ((Rack) c).moveSolarPanels(position);
                setIdOfChildren(c);
            }
            add(c, true);
            copyBuffer = c;
            SceneManager.getInstance().setSelectedPart(c);
            SceneManager.getInstance().getUndoManager().addEdit(new PastePartCommand(c));
        }
    }
}
Also used : ReadOnlyColorRGBA(com.ardor3d.math.type.ReadOnlyColorRGBA) Rack(org.concord.energy3d.model.Rack) NodeState(org.concord.energy3d.model.NodeState) Node(com.ardor3d.scenegraph.Node) Foundation(org.concord.energy3d.model.Foundation) ReadOnlyVector3(com.ardor3d.math.type.ReadOnlyVector3) Vector3(com.ardor3d.math.Vector3) HousePart(org.concord.energy3d.model.HousePart) PastePartCommand(org.concord.energy3d.undo.PastePartCommand)

Example 8 with Rack

use of org.concord.energy3d.model.Rack in project energy3d by concord-consortium.

the class Scene method removeAllRacks.

public void removeAllRacks() {
    final ArrayList<HousePart> racks = 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 Rack && part.getTopContainer() == foundation) {
                racks.add(part);
            }
        }
    } else {
        for (final HousePart part : parts) {
            if (part instanceof Rack) {
                racks.add(part);
            }
        }
    }
    if (racks.isEmpty()) {
        JOptionPane.showMessageDialog(MainFrame.getInstance(), "There is no rack to remove.", "No Rack", JOptionPane.INFORMATION_MESSAGE);
        return;
    }
    if (JOptionPane.showConfirmDialog(MainFrame.getInstance(), "Do you really want to remove all " + racks.size() + " solar panel racks" + (selectedPart != null ? " on the selected foundation" : "") + "?", "Confirm", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE) != JOptionPane.YES_OPTION) {
        return;
    }
    final RemoveMultiplePartsCommand c = new RemoveMultiplePartsCommand(racks);
    for (final HousePart part : racks) {
        remove(part, false);
    }
    redrawAll();
    SceneManager.getInstance().getUndoManager().addEdit(c);
    edited = true;
}
Also used : Rack(org.concord.energy3d.model.Rack) ArrayList(java.util.ArrayList) Foundation(org.concord.energy3d.model.Foundation) HousePart(org.concord.energy3d.model.HousePart) RemoveMultiplePartsCommand(org.concord.energy3d.undo.RemoveMultiplePartsCommand)

Example 9 with Rack

use of org.concord.energy3d.model.Rack in project energy3d by concord-consortium.

the class Scene method setSolarPanelColorForAllRacks.

public void setSolarPanelColorForAllRacks(final int colorOption) {
    for (final HousePart p : parts) {
        if (p instanceof Rack) {
            final Rack rack = (Rack) p;
            rack.getSolarPanel().setColorOption(colorOption);
            rack.draw();
        }
    }
    SceneManager.getInstance().refresh();
}
Also used : Rack(org.concord.energy3d.model.Rack) HousePart(org.concord.energy3d.model.HousePart)

Example 10 with Rack

use of org.concord.energy3d.model.Rack in project energy3d by concord-consortium.

the class Scene method setMonthlyTiltAnglesForAllRacks.

public void setMonthlyTiltAnglesForAllRacks(final double[] angles) {
    for (final HousePart p : parts) {
        if (p instanceof Rack) {
            ((Rack) p).setMonthlyTiltAngles(angles);
            p.draw();
        }
    }
    SceneManager.getInstance().refresh();
}
Also used : Rack(org.concord.energy3d.model.Rack) HousePart(org.concord.energy3d.model.HousePart)

Aggregations

Rack (org.concord.energy3d.model.Rack)126 HousePart (org.concord.energy3d.model.HousePart)67 SolarPanel (org.concord.energy3d.model.SolarPanel)66 Foundation (org.concord.energy3d.model.Foundation)45 Window (org.concord.energy3d.model.Window)27 Roof (org.concord.energy3d.model.Roof)25 Wall (org.concord.energy3d.model.Wall)23 Mirror (org.concord.energy3d.model.Mirror)22 Door (org.concord.energy3d.model.Door)20 FresnelReflector (org.concord.energy3d.model.FresnelReflector)16 ParabolicTrough (org.concord.energy3d.model.ParabolicTrough)16 ParabolicDish (org.concord.energy3d.model.ParabolicDish)15 ActionEvent (java.awt.event.ActionEvent)12 ActionListener (java.awt.event.ActionListener)12 Vector3 (com.ardor3d.math.Vector3)10 ReadOnlyVector3 (com.ardor3d.math.type.ReadOnlyVector3)10 JMenuItem (javax.swing.JMenuItem)10 Tree (org.concord.energy3d.model.Tree)10 Floor (org.concord.energy3d.model.Floor)9 ArrayList (java.util.ArrayList)8