Search in sources :

Example 1 with MeshLocator

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

the class Scene method pasteToPickedLocationOnMesh.

public void pasteToPickedLocationOnMesh(final Mesh mesh) {
    EnergyPanel.getInstance().updateRadiationHeatMap();
    if (copyBuffer == null) {
        return;
    }
    if (copyBuffer instanceof Foundation) {
        return;
    }
    final HousePart selectedPart = SceneManager.getInstance().getSelectedPart();
    if (!(selectedPart instanceof Foundation)) {
        return;
    }
    final HousePart c = copyBuffer.copy(false);
    if (c == null) {
        return;
    }
    Vector3 position = SceneManager.getInstance().getPickedLocationOnMesh(mesh);
    if (position == null) {
        return;
    }
    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 (copyBuffer instanceof Rack) {
        final Rack rack = (Rack) c;
        rack.moveSolarPanels(position);
        setIdOfChildren(c);
        final MeshLocator originalMeshLocator = ((Rack) copyBuffer).getMeshLocator();
        if (originalMeshLocator != null) {
            final UserData ud = (UserData) mesh.getUserData();
            rack.setMeshLocator(new MeshLocator((Foundation) ud.getHousePart(), ud.getNodeIndex(), ud.getMeshIndex()));
        }
    } else if (copyBuffer instanceof SolarPanel) {
        final SolarPanel panel = (SolarPanel) c;
        final MeshLocator originalMeshLocator = ((SolarPanel) copyBuffer).getMeshLocator();
        if (originalMeshLocator != null) {
            final UserData ud = (UserData) mesh.getUserData();
            panel.setMeshLocator(new MeshLocator((Foundation) ud.getHousePart(), ud.getNodeIndex(), ud.getMeshIndex()));
        }
    }
    add(c, true);
    copyBuffer = c;
    SceneManager.getInstance().setSelectedPart(c);
    SceneManager.getInstance().getUndoManager().addEdit(new PastePartCommand(c));
}
Also used : Rack(org.concord.energy3d.model.Rack) UserData(org.concord.energy3d.model.UserData) MeshLocator(org.concord.energy3d.model.MeshLocator) 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)

Aggregations

Vector3 (com.ardor3d.math.Vector3)1 ReadOnlyVector3 (com.ardor3d.math.type.ReadOnlyVector3)1 Foundation (org.concord.energy3d.model.Foundation)1 HousePart (org.concord.energy3d.model.HousePart)1 MeshLocator (org.concord.energy3d.model.MeshLocator)1 Rack (org.concord.energy3d.model.Rack)1 SolarPanel (org.concord.energy3d.model.SolarPanel)1 UserData (org.concord.energy3d.model.UserData)1 PastePartCommand (org.concord.energy3d.undo.PastePartCommand)1