Package es.iiia.shapegrammar.shape

Examples of es.iiia.shapegrammar.shape.IntersectionModel


       
        ExecutionReport.shapeTested();
       
        //monitor.beginTask("Detecting intersections", 1);      
        // Get the intersection we will use to find a transformation
        IntersectionModel from = subShape.getIntersections().get(0);
        // Get the list of intersection in the subshape
        ArrayList<IntersectionModel> fromIntersections = subShape.getIntersections();
        // Get the list of intersection in the shape
        ArrayList<IntersectionModel> toIntersections = shape.getIntersections();
        //monitor.worked(1);
        //monitor.beginTask("Checking " + shape.getIntersections().size() + " intersections", shape.getIntersections().size());
    
        ExecutionReport.setIntersections(toIntersections.size());
        ExecutionReport.setCombinations(fromIntersections.size(), toIntersections.size());      
       
        // Point pairing tester allows detection of unpaired poins upon transformation
        PointPairingTester pairTester = new PointPairingTester(subShape, shape);
        ShapeModel lastFound = null;
        boolean markerFound, exclusionFound;      

        /* create all non identical permutations of points
          1. Take first transformation from subShape (has smallest angle)
          2. Create second triplets
          3. For each combination of points create transformation and test
        */

        Matrix A = new Matrix(6, 6);
        Matrix b = new Matrix(6, 1);
        Matrix solution;
        Matrix subsolution = new Matrix(2, 2);
        Point2D transformedPoint = new Point2D.Double();

        // output transform
        AffineTransform outTransform = new AffineTransform();

        int[] fromIndexes = new int[3];

        // TODO: REDO
        fromIndexes[0] = 0;
        fromIndexes[1] = 1;
        fromIndexes[2] = 2;

        // create left matrix
        // 1st row
        IntersectionTriplet fromTriplet = from.getTriplet();

        A.set(0, 0, from.getIntersection().getX());
        A.set(0, 1, from.getIntersection().getY());
        A.set(0, 2, 1);
        // 2nd
        A.set(1, 3, from.getIntersection().getX());
        A.set(1, 4, from.getIntersection().getY());
        A.set(1, 5, 1);
        // 3rd
        A.set(2, 0, fromTriplet.getPointA().getX());
        A.set(2, 1, fromTriplet.getPointA().getY());
        A.set(2, 2, 1);
        // 4th
        A.set(3, 3, fromTriplet.getPointA().getX());
        A.set(3, 4, fromTriplet.getPointA().getY());
        A.set(3, 5, 1);
        // 5th
        A.set(4, 0, fromTriplet.getPointB().getX());
        A.set(4, 1, fromTriplet.getPointB().getY());
        A.set(4, 2, 1);
        // 6th
        A.set(5, 3, fromTriplet.getPointB().getX());
        A.set(5, 4, fromTriplet.getPointB().getY());
        A.set(5, 5, 1);

        // now find all intersection points in shape with same angle and ratio as original intersection
        IntersectionModel to;
        ArrayList<IntersectionTriplet> intersectionPairs;
        IntersectionTriplet currentPair;

        //Debugger.getInstance().addMessage("Init pair: " + from.getIntersection().toString() + fromTriplet.toString());

        // show markers
        //System.out.println("MARKERS");
        for (MarkerModel model : shape.getMarkers()) {
          Debugger.getInstance().addMessage(model.getLocation().toString());
        }
       
        // get itersections with the same angle
        toIntersections = shape.getIntersections(from.getAngle());     
       
        ExecutionReport.setGoodIntersections(toIntersections.size());
        long triplets = 0;
        for (IntersectionModel intr : toIntersections) {
          ArrayList<IntersectionTriplet> arr = intr.getTriplets(fromTriplet.getRatio());
          if (arr != null) {
            triplets += arr.size();
          }
        }
        ExecutionReport.setTriplets(triplets);
       
        // intersections are ordered by the angle
        // we start with the smallest angle and continue to the top limit
        for (int tos = 0; tos < toIntersections.size(); tos++) {
            ExecutionReport.intersectionTested();
           
          //monitor.setTaskName("Checking " + (tos + 1) + ". intersection");       
            if (monitor.isCanceled()) {
              return subShapes;
            }
           
          // initial validation
            to = toIntersections.get(tos);

            Debugger.getInstance().addMessage("=================================");
            Debugger.getInstance().addMessage("Intersection: " + to.getIntersection());
           
//            // we stop if we've reached bigger angle
//            if (to.getAngle() > from.getAngle()) {
//                break;
//            }
//
//            // we continue to search for the exact angle and ratio
//            if (to.getAngle() < from.getAngle()) {
//                continue;
//            }

            // now we have an intersection with the good angle
            // we will search for all points on carriers that have the same ratio as the
            // initial intersection triplet
            // intersection is defined by point and two carriers
            intersectionPairs = to.getTriplets(fromTriplet.getRatio());
                    
           
            // there exist no triplets on carriers with given ratio
            if (intersectionPairs == null)
                continue;

            // iterate for all found pairs
            for (int pair = 0; pair < intersectionPairs.size(); pair++) {
              ExecutionReport.tripletTested();
             
              //monitor.subTask("Checking intersection triplets");
              if (monitor.isCanceled()) {
                  return subShapes;
                }
             
                // get current pair
                currentPair = intersectionPairs.get(pair);                           
               
                Debugger.getInstance().addMessage("Pair: " + currentPair);             
                Debugger.getInstance().addMessage("TESTING: " + to.getIntersection().toString() + currentPair.toString());
               
                // we test this 2 times (once when we flip pointA and pointB (symmetry))
                // TODO: Test ratio .. if by flip does not change continue
                for (int j = 0; j < 1; j++) {
//                  if (monitor.isCanceled()) {
//                      return subShapes;
//                    }
                 
                  // this counter is to see how much transformations were tested


                    b.set(0, 0, to.getIntersection().getX());
                    b.set(1, 0, to.getIntersection().getY());
                    b.set(2, 0, j == 0 ? currentPair.getPointA().getX() : currentPair.getPointB().getX());
                    b.set(3, 0, j == 0 ? currentPair.getPointA().getY() : currentPair.getPointB().getY());
                    b.set(4, 0, j == 0 ? currentPair.getPointB().getX() : currentPair.getPointA().getX());
                    b.set(5, 0, j == 0 ? currentPair.getPointB().getY() : currentPair.getPointA().getY());

View Full Code Here

TOP

Related Classes of es.iiia.shapegrammar.shape.IntersectionModel

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.