Package com.ardor3d.extension.terrain.providers.awt

Source Code of com.ardor3d.extension.terrain.providers.awt.AbstractAwtElement

/**
* Copyright (c) 2008-2012 Ardor Labs, Inc.
*
* This file is part of Ardor3D.
*
* Ardor3D is free software: you can redistribute it and/or modify it
* under the terms of its license which may be found in the accompanying
* LICENSE file or at <http://www.ardor3d.com/LICENSE>.
*/

package com.ardor3d.extension.terrain.providers.awt;

import java.awt.AlphaComposite;
import java.awt.Composite;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.util.Map;

import com.ardor3d.math.Transform;
import com.ardor3d.math.Vector3;
import com.ardor3d.math.Vector4;
import com.ardor3d.math.type.ReadOnlyTransform;
import com.ardor3d.math.type.ReadOnlyVector4;
import com.google.common.collect.Maps;

public abstract class AbstractAwtElement {

    protected final Transform _transform = new Transform();
    protected Composite _compositeOverride;
    protected ElementUpdateListener _listener;
    protected Map<RenderingHints.Key, Object> hints = Maps.newHashMap();

    protected Vector4 _awtBounds = new Vector4();

    public AbstractAwtElement(final ReadOnlyTransform transform, final Composite compositeOverride) {
        _transform.set(transform);
        _compositeOverride = compositeOverride;

        hints.put(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        hints.put(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);
        hints.put(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
    }

    public ReadOnlyTransform getTransform() {
        return _transform;
    }

    public void setTransform(final ReadOnlyTransform transform) {
        _transform.set(transform);
        updateBounds();
    }

    public Composite getCompositeOverride() {
        return _compositeOverride;
    }

    public void setCompositeOverride(final Composite override) {
        _compositeOverride = override;
        updateBounds();
    }

    public abstract void drawTo(BufferedImage image, ReadOnlyTransform localTransform, int clipmapLevel);

    public abstract void updateBoundsFromElement();

    public void updateBounds() {
        final Vector4 oldBounds = new Vector4(_awtBounds);
        // update using size of element
        updateBoundsFromElement();

        // So apply transform
        final double x = _awtBounds.getX(), y = _awtBounds.getY(), width = _awtBounds.getZ(), height = _awtBounds
                .getW();
        final Vector3[] vects = new Vector3[] { //
        //
                new Vector3(x, y, 0), //
                new Vector3(x + width, y, 0), //
                new Vector3(x + width, y + height, 0), //
                new Vector3(x, y + height, 0) //
        };

        // update final bounds info.
        double minX, minY, maxX, maxY;
        minX = minY = Double.POSITIVE_INFINITY;
        maxX = maxY = Double.NEGATIVE_INFINITY;

        for (final Vector3 vect : vects) {
            _transform.applyForward(vect);
            if (vect.getX() < minX) {
                minX = vect.getX();
            }
            if (vect.getX() > maxX) {
                maxX = vect.getX();
            }
            if (vect.getY() < minY) {
                minY = vect.getY();
            }
            if (vect.getY() > maxY) {
                maxY = vect.getY();
            }
        }

        _awtBounds.set(minX, minY, maxX - minX, maxY - minY);

        if (_listener != null) {
            _listener.elementUpdated(oldBounds, _awtBounds);
        }
    }

    public ReadOnlyVector4 getBounds() {
        return _awtBounds;
    }

    public void setUpdateListener(final ElementUpdateListener listener) {
        _listener = listener;
    }

    public static AlphaComposite makeAlphaComposite(final float alpha) {
        final int type = AlphaComposite.SRC_OVER;
        return AlphaComposite.getInstance(type, alpha);
    }

    public Map<RenderingHints.Key, Object> getHints() {
        return hints;
    }
}
TOP

Related Classes of com.ardor3d.extension.terrain.providers.awt.AbstractAwtElement

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.