Package edu.uci.ics.jung.visualization.transform.shape

Examples of edu.uci.ics.jung.visualization.transform.shape.TransformingGraphics


        this.renderer = vv.getRenderer();
        this.transformingRenderer = new BasicRenderer<V,E>();
        this.perspectiveTransformer =
            new PerspectiveShapeTransformer(new PerspectiveTransform(), vv.getRenderContext().getMultiLayerTransformer().getTransformer(Layer.VIEW));
        this.transformingRenderer.setVertexRenderer(new TransformingImageVertexIconRenderer<V,E>());
        this.lensGraphicsDecorator = new TransformingGraphics(perspectiveTransformer);
        this.savedGraphicsDecorator = renderContext.getGraphicsContext();

        this.renderer = vv.getRenderer();
    }
View Full Code Here


        this.pickSupport = renderContext.getPickSupport();
        this.perspectiveTransformer =
            new PerspectiveShapeTransformer(new PerspectiveTransform(),
                vv.getRenderContext().getMultiLayerTransformer().getTransformer(Layer.VIEW));
        this.savedGraphicsDecorator = renderContext.getGraphicsContext();
        this.lensGraphicsDecorator = new TransformingGraphics(perspectiveTransformer);
    }
View Full Code Here

   
    @Override
    public void paintIconForVertex(RenderContext<V,E> rc, V v, Layout<V,E> layout) {

        GraphicsDecorator g = rc.getGraphicsContext();
        TransformingGraphics g2d = (TransformingGraphics)g;
        boolean vertexHit = true;
        // get the shape to be rendered
        Shape shape = rc.getVertexShapeTransformer().transform(v);
       
        Point2D p = layout.transform(v);
        p = rc.getMultiLayerTransformer().transform(Layer.LAYOUT, p);
        float x = (float)p.getX();
        float y = (float)p.getY();

        // create a transform that translates to the location of
        // the vertex to be rendered
        AffineTransform xform = AffineTransform.getTranslateInstance(x,y);
        // transform the vertex shape with xtransform
        shape = xform.createTransformedShape(shape);
       
        vertexHit = vertexHit(rc, shape);
        if (vertexHit) {
          if(rc.getVertexIconTransformer() != null) {
            Icon icon = rc.getVertexIconTransformer().transform(v);
            if(icon != null) {
           
                    BufferedImage image = new BufferedImage(icon.getIconWidth(),
                            icon.getIconHeight(), BufferedImage.TYPE_INT_ARGB);
                    Graphics2D ig = image.createGraphics();
                    icon.paintIcon(null, ig, 0, 0);
                    int imageWidth = image.getWidth(null);
                    int imageHeight = image.getHeight(null);
                   
                    int xLoc = (int) (x - imageWidth / 2);
                    int yLoc = (int) (y - imageHeight / 2);
                    Rectangle2D imageRectangle = new Rectangle2D.Double(xLoc, yLoc,
                            imageWidth, imageHeight);
                   
                    Shape perspectiveShape =
                        ((ShapeTransformer) g2d.getTransformer()).transform(imageRectangle);
                   
                    // see if the transformer will affect the imageRectangle,
                    if(imageRectangle.equals(perspectiveShape.getBounds2D()) == false) {
                       
                        RenderedImage ri = getPerspectiveImage(image, imageRectangle,
                                perspectiveShape);
                       
                        if (ri != null) {
                           
                            Shape clip = g2d.getClip();
                            g2d.setClip(perspectiveShape);
                            g2d.drawRenderedImage(ri, AffineTransform
                                    .getTranslateInstance(xLoc, yLoc));
                            g2d.setClip(clip);
                        }
                    } else {
                        g2d.drawImage(image, AffineTransform.getTranslateInstance(xLoc,
                                yLoc), null);
                    }

            } else {
              paintShapeForVertex(rc, v, shape);
View Full Code Here

     * is scaled in the x-direction so that its width is equal to the distance between
     * <code>(x1,y1)</code> and <code>(x2,y2)</code>.
     */
    protected void drawSimpleEdge(RenderContext<V,E> rc, Layout<V,E> layout, E e) {
       
      TransformingGraphics g = (TransformingGraphics)rc.getGraphicsContext();
        Graph<V,E> graph = layout.getGraph();
        Pair<V> endpoints = graph.getEndpoints(e);
        V v1 = endpoints.getFirst();
        V v2 = endpoints.getSecond();
        Point2D p1 = layout.transform(v1);
        Point2D p2 = layout.transform(v2);
        p1 = rc.getMultiLayerTransformer().transform(Layer.LAYOUT, p1);
        p2 = rc.getMultiLayerTransformer().transform(Layer.LAYOUT, p2);
        float x1 = (float) p1.getX();
        float y1 = (float) p1.getY();
        float x2 = (float) p2.getX();
        float y2 = (float) p2.getY();
       
        float flatness = 0;
        MutableTransformer transformer = rc.getMultiLayerTransformer().getTransformer(Layer.VIEW);
        if(transformer instanceof LensTransformer) {
            LensTransformer ht = (LensTransformer)transformer;
            RectangularShape lensShape = ht.getLensShape();
            if(lensShape.contains(x1,y1) || lensShape.contains(x2,y2)) {
                flatness = .05f;
            }
        }

        boolean isLoop = v1.equals(v2);
        Shape s2 = rc.getVertexShapeTransformer().transform(v2);
        Shape edgeShape = rc.getEdgeShapeTransformer().transform(Context.<Graph<V,E>,E>getInstance(graph, e));
       
        boolean edgeHit = true;
        boolean arrowHit = true;
        Rectangle deviceRectangle = null;
        JComponent vv = rc.getScreenDevice();
        if(vv != null) {
            Dimension d = vv.getSize();
            deviceRectangle = new Rectangle(0,0,d.width,d.height);
        }

        AffineTransform xform = AffineTransform.getTranslateInstance(x1, y1);
       
        if(isLoop) {
            // this is a self-loop. scale it is larger than the vertex
            // it decorates and translate it so that its nadir is
            // at the center of the vertex.
            Rectangle2D s2Bounds = s2.getBounds2D();
            xform.scale(s2Bounds.getWidth(),s2Bounds.getHeight());
            xform.translate(0, -edgeShape.getBounds2D().getWidth()/2);
        } else {
            // this is a normal edge. Rotate it to the angle between
            // vertex endpoints, then scale it to the distance between
            // the vertices
            float dx = x2-x1;
            float dy = y2-y1;
            float thetaRadians = (float) Math.atan2(dy, dx);
            xform.rotate(thetaRadians);
            float dist = (float) Math.sqrt(dx*dx + dy*dy);
            xform.scale(dist, 1.0);
        }
       
        edgeShape = xform.createTransformedShape(edgeShape);
       
        MutableTransformer vt = rc.getMultiLayerTransformer().getTransformer(Layer.VIEW);
        if(vt instanceof LensTransformer) {
          vt = ((LensTransformer)vt).getDelegate();
        }
        edgeHit = vt.transform(edgeShape).intersects(deviceRectangle);

        if(edgeHit == true) {
           
            Paint oldPaint = g.getPaint();
           
            // get Paints for filling and drawing
            // (filling is done first so that drawing and label use same Paint)
            Paint fill_paint = rc.getEdgeFillPaintTransformer().transform(e);
            if (fill_paint != null)
            {
                g.setPaint(fill_paint);
                g.fill(edgeShape, flatness);
            }
            Paint draw_paint = rc.getEdgeDrawPaintTransformer().transform(e);
            if (draw_paint != null)
            {
                g.setPaint(draw_paint);
                g.draw(edgeShape, flatness);
            }
           
            float scalex = (float)g.getTransform().getScaleX();
            float scaley = (float)g.getTransform().getScaleY();
            // see if arrows are too small to bother drawing
            if(scalex < .3 || scaley < .3) return;
           
            if (rc.getEdgeArrowPredicate().evaluate(Context.<Graph<V,E>,E>getInstance(graph, e))) {
               
                Shape destVertexShape =
                    rc.getVertexShapeTransformer().transform(graph.getEndpoints(e).getSecond());

                AffineTransform xf = AffineTransform.getTranslateInstance(x2, y2);
                destVertexShape = xf.createTransformedShape(destVertexShape);
               
                arrowHit = rc.getMultiLayerTransformer().getTransformer(Layer.VIEW).transform(destVertexShape).intersects(deviceRectangle);
                if(arrowHit) {
                   
                    AffineTransform at =
                        edgeArrowRenderingSupport.getArrowTransform(rc, new GeneralPath(edgeShape), destVertexShape);
                    if(at == null) return;
                    Shape arrow = rc.getEdgeArrowTransformer().transform(Context.<Graph<V,E>,E>getInstance(graph, e));
                    arrow = at.createTransformedShape(arrow);
                    g.setPaint(rc.getArrowFillPaintTransformer().transform(e));
                    g.fill(arrow);
                    g.setPaint(rc.getArrowDrawPaintTransformer().transform(e));
                    g.draw(arrow);
                }
                if (graph.getEdgeType(e) == EdgeType.UNDIRECTED) {
                    Shape vertexShape =
                        rc.getVertexShapeTransformer().transform(graph.getEndpoints(e).getFirst());
                    xf = AffineTransform.getTranslateInstance(x1, y1);
                    vertexShape = xf.createTransformedShape(vertexShape);
                   
                    arrowHit = rc.getMultiLayerTransformer().getTransformer(Layer.VIEW).transform(vertexShape).intersects(deviceRectangle);
                   
                    if(arrowHit) {
                        AffineTransform at = edgeArrowRenderingSupport.getReverseArrowTransform(rc, new GeneralPath(edgeShape), vertexShape, !isLoop);
                        if(at == null) return;
                        Shape arrow = rc.getEdgeArrowTransformer().transform(Context.<Graph<V,E>,E>getInstance(graph, e));
                        arrow = at.createTransformedShape(arrow);
                        g.setPaint(rc.getArrowFillPaintTransformer().transform(e));
                        g.fill(arrow);
                        g.setPaint(rc.getArrowDrawPaintTransformer().transform(e));
                        g.draw(arrow);
                    }
                }
            }
            // use existing paint for text if no draw paint specified
            if (draw_paint == null)
                g.setPaint(oldPaint);
//            String label = edgeStringer.getLabel(e);
//            if (label != null) {
//                labelEdge(g, graph, e, label, x1, x2, y1, y2);
//            }
           
           
            // restore old paint
            g.setPaint(oldPaint);
        }
    }
View Full Code Here

TOP

Related Classes of edu.uci.ics.jung.visualization.transform.shape.TransformingGraphics

Copyright © 2018 www.massapicom. 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.