Changeset 1102 for trunk/src/org/expeditee/io/flowlayout/XGroupItem.java
- Timestamp:
- 05/10/18 16:04:51 (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/expeditee/io/flowlayout/XGroupItem.java
r976 r1102 19 19 package org.expeditee.io.flowlayout; 20 20 21 import java.awt.Point;22 import java.awt.Polygon;23 import java.awt.Rectangle;24 21 import java.util.ArrayList; 25 22 import java.util.Collection; … … 31 28 import java.util.List; 32 29 30 import org.expeditee.core.Point; 31 import org.expeditee.core.bounds.AxisAlignedBoxBounds; 32 import org.expeditee.core.bounds.PolygonBounds; 33 33 import org.expeditee.gui.Frame; 34 34 import org.expeditee.gui.FrameUtils; … … 110 110 } 111 111 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) { 114 113 this.frame = frame; 115 114 this.out_of_flow = FlowType.in_flow; … … 124 123 } 125 124 126 Rectangle enclosing_bounding_rect = enclosing_polygon.getBounds();125 AxisAlignedBoxBounds enclosing_bounding_rect = AxisAlignedBoxBounds.getEnclosing(enclosing_polygon); 127 126 initSpanArray(enclosing_bounding_rect); 128 127 … … 134 133 remaining_item_list = new ArrayList<Item>(); 135 134 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); 138 136 139 137 // Step 2: Add in the raw-text items … … 161 159 } 162 160 163 protected XGroupItem(XGroupItem imprint, Rectangle copy_to_bounding_rect) { 161 protected XGroupItem(XGroupItem imprint, AxisAlignedBoxBounds copy_to_bounding_rect) 162 { 164 163 super(); 165 164 … … 192 191 // straight away? 193 192 194 this.bounding_rect = new Rectangle(copy_to_bounding_rect); // deep copy193 this.bounding_rect = new AxisAlignedBoxBounds(copy_to_bounding_rect); // deep copy 195 194 // to be on 196 195 // the safe … … 198 197 } 199 198 200 protected void initSpanArray( Rectanglebounding_rect) {199 protected void initSpanArray(AxisAlignedBoxBounds bounding_rect) { 201 200 this.bounding_rect = bounding_rect; 202 201 … … 533 532 // to make it appear where the start of the arrow is 534 533 535 Rectangle start_rect = start_item.getArea() 536 .getBounds(); 534 AxisAlignedBoxBounds start_rect = start_item.getBoundingBox(); 537 535 538 536 XGroupItem xgroup_item_shallow_copy = new XGroupItem( … … 630 628 * @return 631 629 */ 632 public Collection<Item> getItemsInNestedEnclosure(Item given_item, 633 AreaPolygon outer_polygon){630 public Collection<Item> getItemsInNestedEnclosure(Item given_item, PolygonBounds outer_polygon) 631 { 634 632 Collection<Item> sameEnclosure = null; 635 633 Collection<Item> seen = new HashSet<Item>(); … … 649 647 seen.addAll(i_enclosing_dots); 650 648 651 Polygon i_polygon = new Polygon();649 PolygonBounds i_polygon = new PolygonBounds(); 652 650 for (int di = 0; di < i_enclosing_dots.size(); di++) { 653 651 Item d = i_enclosing_dots.get(di); … … 684 682 685 683 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, 687 685 List<XGroupItem> grouped_item_list, List<Item> remaining_item_list) { 688 686 final List<Item> origonal_item_list = new ArrayList<Item>(item_list); … … 692 690 // of lines/polylines/polygons 693 691 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>(); 697 695 698 696 while (item_list.size() > 0) { … … 724 722 .remove(0); // shift 725 723 726 Polygon enclosed_polygon = enclosure_item 727 .getEnclosedShape(); 724 PolygonBounds enclosed_polygon = enclosure_item.getEnclosedShape(); 728 725 729 726 if (enclosed_polygon != null) { … … 739 736 // group) 740 737 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); 745 740 746 741 item_list.remove(enclosure_item); … … 763 758 while (item_iterator.hasNext()) { 764 759 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)) { 771 763 items_on_perimeter.add(item_to_check); 772 764 } … … 801 793 // Sort areas, smallest to largest 802 794 Collections.sort(area_enclosed_polygon_list, 803 new Comparator< AreaPolygon>() {804 805 public int compare( AreaPolygon ap1, AreaPolygonap2) {795 new Comparator<PolygonBounds>() { 796 797 public int compare(PolygonBounds ap1, PolygonBounds ap2) { 806 798 Double ap1_area = ap1.getArea(); 807 799 Double ap2_area = ap2.getArea(); … … 817 809 // ri = remove index pos 818 810 819 AreaPolygonrpoly = area_enclosed_polygon_list.get(ri);811 PolygonBounds rpoly = area_enclosed_polygon_list.get(ri); 820 812 821 813 for (int ci = ri + 1; ci < area_enclosed_polygon_list.size(); ci++) { 822 814 // ci = check index pos 823 AreaPolygoncpoly = area_enclosed_polygon_list.get(ci);815 PolygonBounds cpoly = area_enclosed_polygon_list.get(ci); 824 816 if (rpoly.completelyContains(cpoly)) { 825 817 area_enclosed_polygon_list.remove(ci); … … 837 829 // recursive call below 838 830 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); 843 834 List<Item> enclosed_item_list = new ArrayList<Item>(enclosed_items); 844 835 … … 849 840 // Filter out enclosed-items points that are part of the 850 841 // polygon's perimeter 851 if (area_polygon.is PerimeterPoint(enclosed_item.getPosition())) {842 if (area_polygon.isVertex(enclosed_item.getPosition())) { 852 843 enclosed_item_list.remove(i); 853 844 // Don't include items the user hasn't asked us to. … … 863 854 // Recursively work on the identified sub-group 864 855 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); 867 857 868 858 grouped_item_list.add(xgroup_item);
Note:
See TracChangeset
for help on using the changeset viewer.