Ignore:
Timestamp:
05/10/18 16:04:51 (6 years ago)
Author:
davidb
Message:

Reworking of the code-base to separate logic from graphics. This version of Expeditee now supports a JFX graphics as an alternative to SWING

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/expeditee/io/flowlayout/XGroupItem.java

    r976 r1102  
    1919package org.expeditee.io.flowlayout;
    2020
    21 import java.awt.Point;
    22 import java.awt.Polygon;
    23 import java.awt.Rectangle;
    2421import java.util.ArrayList;
    2522import java.util.Collection;
     
    3128import java.util.List;
    3229
     30import org.expeditee.core.Point;
     31import org.expeditee.core.bounds.AxisAlignedBoxBounds;
     32import org.expeditee.core.bounds.PolygonBounds;
    3333import org.expeditee.gui.Frame;
    3434import org.expeditee.gui.FrameUtils;
     
    110110        }
    111111
    112         public XGroupItem(Frame frame, List<Item> y_ordered_items,
    113                         Polygon enclosing_polygon) {
     112        public XGroupItem(Frame frame, List<Item> y_ordered_items, PolygonBounds enclosing_polygon) {
    114113                this.frame = frame;
    115114                this.out_of_flow = FlowType.in_flow;
     
    124123                }
    125124
    126                 Rectangle enclosing_bounding_rect = enclosing_polygon.getBounds();
     125                AxisAlignedBoxBounds enclosing_bounding_rect = AxisAlignedBoxBounds.getEnclosing(enclosing_polygon);
    127126                initSpanArray(enclosing_bounding_rect);
    128127
     
    134133                remaining_item_list = new ArrayList<Item>();
    135134
    136                 separateYOverlappingItems(frame, y_ordered_items, enclosing_polygon,
    137                                 raw_text_item_list, grouped_item_list, remaining_item_list);
     135                separateYOverlappingItems(frame, y_ordered_items, enclosing_polygon, raw_text_item_list, grouped_item_list, remaining_item_list);
    138136
    139137                // Step 2: Add in the raw-text items
     
    161159        }
    162160
    163         protected XGroupItem(XGroupItem imprint, Rectangle copy_to_bounding_rect) {
     161        protected XGroupItem(XGroupItem imprint, AxisAlignedBoxBounds copy_to_bounding_rect)
     162        {
    164163                super();
    165164
     
    192191                                                                                                // straight away?
    193192
    194                 this.bounding_rect = new Rectangle(copy_to_bounding_rect); // deep copy
     193                this.bounding_rect = new AxisAlignedBoxBounds(copy_to_bounding_rect); // deep copy
    195194                                                                                                                                        // to be on
    196195                                                                                                                                        // the safe
     
    198197        }
    199198
    200         protected void initSpanArray(Rectangle bounding_rect) {
     199        protected void initSpanArray(AxisAlignedBoxBounds bounding_rect) {
    201200                this.bounding_rect = bounding_rect;
    202201
     
    533532                                                        // to make it appear where the start of the arrow is
    534533
    535                                                         Rectangle start_rect = start_item.getArea()
    536                                                                         .getBounds();
     534                                                        AxisAlignedBoxBounds start_rect = start_item.getBoundingBox();
    537535
    538536                                                        XGroupItem xgroup_item_shallow_copy = new XGroupItem(
     
    630628         * @return
    631629         */
    632         public Collection<Item> getItemsInNestedEnclosure(Item given_item,
    633                         AreaPolygon outer_polygon) {
     630        public Collection<Item> getItemsInNestedEnclosure(Item given_item, PolygonBounds outer_polygon)
     631        {
    634632                Collection<Item> sameEnclosure = null;
    635633                Collection<Item> seen = new HashSet<Item>();
     
    649647                                seen.addAll(i_enclosing_dots);
    650648
    651                                 Polygon i_polygon = new Polygon();
     649                                PolygonBounds i_polygon = new PolygonBounds();
    652650                                for (int di = 0; di < i_enclosing_dots.size(); di++) {
    653651                                        Item d = i_enclosing_dots.get(di);
     
    684682
    685683        public void separateYOverlappingItems(Frame frame, List<Item> item_list,
    686                         Polygon enclosing_polygon, List<Text> raw_text_item_list,
     684                        PolygonBounds enclosing_polygon, List<Text> raw_text_item_list,
    687685                        List<XGroupItem> grouped_item_list, List<Item> remaining_item_list) {
    688686                final List<Item> origonal_item_list = new ArrayList<Item>(item_list);
     
    692690                // of lines/polylines/polygons
    693691
    694                 AreaPolygon area_enclosing_polygon = new AreaPolygon(enclosing_polygon);
    695 
    696                 List<AreaPolygon> area_enclosed_polygon_list = new ArrayList<AreaPolygon>();
     692                PolygonBounds area_enclosing_polygon = new PolygonBounds(enclosing_polygon);
     693
     694                List<PolygonBounds> area_enclosed_polygon_list = new ArrayList<PolygonBounds>();
    697695
    698696                while (item_list.size() > 0) {
     
    724722                                                                .remove(0); // shift
    725723
    726                                                 Polygon enclosed_polygon = enclosure_item
    727                                                                 .getEnclosedShape();
     724                                                PolygonBounds enclosed_polygon = enclosure_item.getEnclosedShape();
    728725
    729726                                                if (enclosed_polygon != null) {
     
    739736                                                        // group)
    740737
    741                                                         AreaPolygon area_enclosed_polygon = new AreaPolygon(
    742                                                                         enclosed_polygon);
    743                                                         area_enclosed_polygon_list
    744                                                                         .add(area_enclosed_polygon);
     738                                                        PolygonBounds area_enclosed_polygon = new PolygonBounds(enclosed_polygon);
     739                                                        area_enclosed_polygon_list.add(area_enclosed_polygon);
    745740
    746741                                                        item_list.remove(enclosure_item);
     
    763758                                                        while (item_iterator.hasNext()) {
    764759                                                                Item item_to_check = item_iterator.next();
    765                                                                 Point pt_to_check = new Point(
    766                                                                                 item_to_check.getX(),
    767                                                                                 item_to_check.getY());
    768 
    769                                                                 if (area_enclosed_polygon
    770                                                                                 .isPerimeterPoint(pt_to_check)) {
     760                                                                Point pt_to_check = new Point(item_to_check.getX(), item_to_check.getY());
     761
     762                                                                if (area_enclosed_polygon.isVertex(pt_to_check)) {
    771763                                                                        items_on_perimeter.add(item_to_check);
    772764                                                                }
     
    801793                // Sort areas, smallest to largest
    802794                Collections.sort(area_enclosed_polygon_list,
    803                                 new Comparator<AreaPolygon>() {
    804 
    805                                         public int compare(AreaPolygon ap1, AreaPolygon ap2) {
     795                                new Comparator<PolygonBounds>() {
     796
     797                                        public int compare(PolygonBounds ap1, PolygonBounds ap2) {
    806798                                                Double ap1_area = ap1.getArea();
    807799                                                Double ap2_area = ap2.getArea();
     
    817809                        // ri = remove index pos
    818810
    819                         AreaPolygon rpoly = area_enclosed_polygon_list.get(ri);
     811                        PolygonBounds rpoly = area_enclosed_polygon_list.get(ri);
    820812
    821813                        for (int ci = ri + 1; ci < area_enclosed_polygon_list.size(); ci++) {
    822814                                // ci = check index pos
    823                                 AreaPolygon cpoly = area_enclosed_polygon_list.get(ci);
     815                                PolygonBounds cpoly = area_enclosed_polygon_list.get(ci);
    824816                                if (rpoly.completelyContains(cpoly)) {
    825817                                        area_enclosed_polygon_list.remove(ci);
     
    837829                // recursive call below
    838830
    839                 for (AreaPolygon area_polygon : area_enclosed_polygon_list) {
    840 
    841                         Collection<Item> enclosed_items = FrameUtils.getItemsEnclosedBy(
    842                                         frame, area_polygon);
     831                for (PolygonBounds area_polygon : area_enclosed_polygon_list) {
     832
     833                        Collection<Item> enclosed_items = FrameUtils.getItemsEnclosedBy(frame, area_polygon);
    843834                        List<Item> enclosed_item_list = new ArrayList<Item>(enclosed_items);
    844835
     
    849840                                // Filter out enclosed-items points that are part of the
    850841                                // polygon's perimeter
    851                                 if (area_polygon.isPerimeterPoint(enclosed_item.getPosition())) {
     842                                if (area_polygon.isVertex(enclosed_item.getPosition())) {
    852843                                        enclosed_item_list.remove(i);
    853844                                        // Don't include items the user hasn't asked us to.
     
    863854                        // Recursively work on the identified sub-group
    864855
    865                         XGroupItem xgroup_item = new XGroupItem(frame, enclosed_item_list,
    866                                         area_polygon);
     856                        XGroupItem xgroup_item = new XGroupItem(frame, enclosed_item_list, area_polygon);
    867857
    868858                        grouped_item_list.add(xgroup_item);
Note: See TracChangeset for help on using the changeset viewer.