Package testinggrounds

Source Code of testinggrounds.Network$Node

package testinggrounds;

import graphics.common.Box;
import java.awt.Color;
import java.awt.Graphics2D;
import java.util.LinkedList;
import java.util.List;
import java.util.Random;

import graphics.java.BezierCurve;
import graphics.common.GraphicsObject;
import graphics.java.Oval;
import graphics.common.Point;
import graphics.common.Point2D;
import graphics.common.Size;
import graphics.common.Size2D;

public class Network implements GraphicsObject {

    private Point mNetworkTranslation;
    private List<Node> mNodes;
    private static final int INTENSITY_MAX = 100;
    private static final int CURVE_GRANULARITY = 50;
    private static final Size OVAL_SIZE = new Size2D( 30, 15 );

    public Network() {
        mNetworkTranslation = new Point2D( 0, 0 ); //not using this yet
        mNodes = new LinkedList<Node>();
    }

    class Node implements GraphicsObject {

        public Node( GraphicsObject graphic ) {
            mGraphic = graphic;
            mEdgeLines = new LinkedList<BezierCurve>();
            mEdges = new LinkedList<Node>();
            mGenerator = new Random( System.nanoTime() );
        }

        public void addEdge( Node other ) {
            mEdges.add( other );
            generateLine( other );
        }

        private void generateLine( Node other ) {
            Point p1 = new Point2D(), p2 = new Point2D(), p3 = new Point2D(), p4 = new Point2D();
            placeAnchors( other, p1, p2, p3, p4 );
            mEdgeLines.add( new BezierCurve( new Point2D( p1 ), new Point2D( p2 ), new Point2D( p3 ), new Point2D( p4 ),
                    new Color( 150, 0, 150 ), CURVE_GRANULARITY ) );
            randomizeAnchors( p1, p2, p3, p4 );
            mEdgeLines.add( new BezierCurve( p1, p2, p3, p4,
                    new Color( 150, 0, 150 ), CURVE_GRANULARITY ) );
        }

        private void placeAnchors( Node other, Point p1, Point p2, Point p3, Point p4 ) {
            Point[] tpoints = mGraphic.getPoints();
            Size[] tsize = mGraphic.getSize();
            Point[] opoints = other.getPoints();
            Size[] osize = other.getSize();

            p1.modify( new Point2D( tpoints[ 0].getX() + tsize[ 0].getWidth() / 2,
                    tpoints[ 0].getY() + tsize[ 0].getHeight() / 2 ) );
            p4.modify( new Point2D( opoints[ 0].getX() + osize[ 0].getWidth() / 2,
                    opoints[ 0].getY() + osize[ 0].getHeight() / 2 ) );
            p2.modify( new Point2D( p1.getX() + (opoints[ 0].getX() - tpoints[ 0].getX()) / 3,
                    p1.getY() + (opoints[ 0].getY() - tpoints[ 0].getY()) / 3 ) );
            p3.modify( new Point2D( p4.getX() - (opoints[ 0].getX() - tpoints[ 0].getX()) / 3,
                    p4.getY() - (opoints[ 0].getY() - tpoints[ 0].getY()) / 3 ) );
        }

        private void randomizeAnchors( Point p1, Point p2, Point p3, Point p4 ) {
            int curveIntensity = mGenerator.nextInt( INTENSITY_MAX );

            if ( p1.getX() < p4.getX() ) {
                if ( p1.getY() < p4.getY() ) {
                    if ( mGenerator.nextInt( 5000 ) < 2500 ) {
                        p2.modify( new Point2D( curveIntensity, curveIntensity ) );
                        p3.modify( new Point2D( curveIntensity, -curveIntensity ) );
                    } else {
                        p2.modify( new Point2D( -curveIntensity, curveIntensity ) );
                        p3.modify( new Point2D( -curveIntensity, -curveIntensity ) );
                    }
                } else {
                    p2.modify( new Point2D( 0, curveIntensity ) );
                    p3.modify( new Point2D( curveIntensity, 0 ) );
                }
            } else if ( p1.getY() < p4.getY() ) {
                p2.modify( new Point2D( 0, -curveIntensity ) );
                p3.modify( new Point2D( -curveIntensity, 0 ) );
            } else {
                p2.modify( new Point2D( 0, curveIntensity ) );
                p3.modify( new Point2D( -curveIntensity, 0 ) );
            }
        }

        @Override
        public void draw( Graphics2D g, double delta ) {
            for ( BezierCurve bc : mEdgeLines ) {
                bc.draw( g, delta );
            }
            mGraphic.draw( g, delta );
        }

        @Override
        public String getName() {
            return "networknode";
        }

        @Override
        public Point[] getPoints() {
            return mGraphic.getPoints();
        }

        @Override
        public Size[] getSize() {
            return mGraphic.getSize();
        }

        @Override
        public Box[] getBox() {
            return mGraphic.getBox();
        }

        @Override
        public boolean equals( Object other ) {
            if ( other == this ) {
                return true;
            }
            if ( !(other instanceof Node) ) {
                return false;
            }
            Node otherNode = (Node) other;
            if ( mGraphic.getPoints()[ 0].equals( otherNode.mGraphic.getPoints()[ 0] )
                    && mGraphic.getSize()[ 0].equals( otherNode.mGraphic.getSize()[ 0] ) ) {
                return true;
            }
            return false;
        }

        @Override
        public void dispose() {
        }
        private GraphicsObject mGraphic;
        private List<BezierCurve> mEdgeLines;
        private List<Node> mEdges;
        private Random mGenerator;
    }

    public void addNode( Point loc ) {
        mNodes.add( new Node( new Oval( loc, OVAL_SIZE ) ) );
    }

    public void addNode( Node n ) {
        mNodes.add( n );
    }

    public void addEdge( Node n1, Node n2 ) {
        int n1i = mNodes.indexOf( n1 );
        int n2i = mNodes.indexOf( n2 );
        if ( n1i < 0 || n2i < 0 ) {
            return;
        }
        mNodes.get( n1i ).addEdge( n2 );
    }

    public void generateRandom( Size networkSize, int numNodes ) {
    }

    @Override
    public void draw( Graphics2D g, double delta ) {
        for ( GraphicsObject go : mNodes ) {
            go.draw( g, delta );
        }
    }

    @Override
    public String getName() {
        return "network";
    }

    @Override
    public Point[] getPoints() {
        return new Point[]{ mNetworkTranslation };
    }

    @Override
    public Size[] getSize() {
        return null;
    }

    @Override
    public Box[] getBox() {
        throw new UnsupportedOperationException();
    }

    @Override
    public void dispose() {
    }
}
TOP

Related Classes of testinggrounds.Network$Node

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.