Package research

Source Code of research.PolyLineConnector

/*
* @(#)PolyLineConnector.java
*
* Project:    JHotdraw - a GUI framework for technical drawings
*        http://www.jhotdraw.org
*        http://jhotdraw.sourceforge.net
* Copyright:  ? by the original author(s) and all contributors
* License:    Lesser GNU Public License (LGPL)
*        http://www.opensource.org/licenses/lgpl-license.html
*/

package research;

import research.figure.PolyLineFigure;
import research.connector.ChopBoxConnector;

import java.awt.*;

import research.util.Geom;

/**
* PolyLineConnector finds connection points on a
* PolyLineFigure.
*
* @see research.figure.PolyLineFigure
*
* @version <$CURRENT_VERSION$>
*/
public class PolyLineConnector extends ChopBoxConnector {

  /*
   * Serialization support.
   */
  private static final long serialVersionUID = 6018435940519102865L;

  public PolyLineConnector() {
    super();
  }

  /**
   * Constructs a connector with the given owner figure.
   */
  public PolyLineConnector(Figure owner) {
    super(owner);
  }

  protected Point chop(Figure target, Point from) {
    PolyLineFigure p = (PolyLineFigure)owner();
    // *** based on PolygonFigure's heuristic
    Point ctr = p.center();
    int cx = -1;
    int cy = -1;
    long len = Long.MAX_VALUE;

    // Try for points along edge

    for (int i = 0; i < p.pointCount()-1; i++) {
      Point p1 = p.pointAt(i);
      Point p2 = p.pointAt(i+1);
      Point chop = Geom.intersect(p1.x,
                 p1.y,
                 p2.x,
                 p2.y,
                 from.x,
                 from.y,
                 ctr.x,
                 ctr.y);
      if (chop != null) {
        long cl = Geom.length2(chop.x, chop.y, from.x, from.y);
        if (cl < len) {
          len = cl;
          cx = chop.x;
          cy = chop.y;
        }
      }
    }
    // if none found, pick closest vertex
    //if (len ==  Long.MAX_VALUE) {
    { // try anyway
      for (int i = 0; i < p.pointCount(); i++) {
        Point pp = p.pointAt(i);
        long l = Geom.length2(pp.x, pp.y, from.x, from.y);
        if (l < len) {
          len = l;
          cx = pp.x;
          cy = pp.y;
        }
      }
    }
    return new Point(cx, cy);
  }
}

TOP

Related Classes of research.PolyLineConnector

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.