commit 6dde6425c2a740e110c3fa857e024c1f6041760f Author: Jocelyn Fiat Date: Mon Jun 17 09:09:33 2024 +0200 init diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ba91dc8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +.DS_Store +.*.swp +EIFGENs/ diff --git a/Problem Description.txt b/Problem Description.txt new file mode 100644 index 0000000..fbcf3bc --- /dev/null +++ b/Problem Description.txt @@ -0,0 +1,30 @@ +This project has several problems for which I have no answer, so I'm turning to Eiffel Software for help. Notes about implementation follow the questions/problems. + +I have problems with both Studio 20.05 and 22.05. + +1a) In 20.05 it runs in workbench mode and if finalized keeping assertions. When finalized with assertions discarded get "feature call on Void target." + +1b) In 22.05 seg faults in workbench mode and when finalized keeping assertions. When finalized with assertions discarded it runs. ?? + + +2) Compilations seems extremely slow for descendants of VITP_WIDGET (e.g. ANDAMAN_ISLANDS_WIDGET, ATTU_WIDGET, ALEUTIAN_ISLANDS_WIDGET, etc.) BTW, all the xx_WIDGET classes should be named xx_MODEL, because they are descendants of EV_MODEL not EV_WIDGET; this is a holdover from years of work. + + +3) Getting CatCalls in EV_TOOL_BAR_RADIO_BUTTON_IMP.set_item_parent_imp? + + +4) Problem with pick-and-put. Run the program [in one of the modes that actually runs]. There is a window with two main sections: a map on the left and a set of three panels on the right. Right click on a red square near the top of the "Japanese Order of Appearance Chart". You can now drop the pebble on Yokosuka Navy Yard (Japan). When right clicking on a red square Japan should light up; it does not. The feature that highlights Japan is getting called, but the interface is not reacting to the change in color. To see what should happen, click on one of the red squares that happen to be on the map. Or, click on the yellow square that is over the word "Pacific" at the top-left of the map; this will highlight Japan, Saigon, and Truk. So this "highlighting" works if the pick-and-put begins in the same (i.e. the map) "window". This leads into the next issue. + + +5) Try to zoom in/out with the plus/minus buttons at the top of each tool. When zooming in, the scrollbars react but the content does not change until the mouse is moved into the view. Zooming out does not have that problem. + + +Implementation notes: + +1) The main abstraction for the interface is VIEW, which is responsible for displaying its `target'. When a COMMAND or other actions changes an object, it can ask they system to update all the views that contain that target. For example, a red square is an ATTACK_UNIT_WIDGET which displays an ATTACK_UNIT. Each SEA_AREA and PORT in the map is also a VIEW. + +2) The main window contains two TOOL objects. (A TOOL is a VIEW.) Each TOOL contains one or more views. Placement of the tools and views is performed by classes in the "jj_vision" cluster. + +3) The pick-and-put features are in class VIEW. Near the bottom of the class are feature grouped in "Basic operations" (to be redefined in descendants) and "Agents and support". + +4) The game is in two parts: Implementation and Interface diff --git a/jj_containers/README.md b/jj_containers/README.md new file mode 100644 index 0000000..46e3c14 --- /dev/null +++ b/jj_containers/README.md @@ -0,0 +1,6 @@ +# jj_containers +This cluster of classes adds useful features to some of the base/elks containers. For example, features 'is\_all\_same' and 'is\_all\_different' are convinient for comparing items in a list. + +Classes JJ\_ARRAYED\_STACK and JJ\_LINKED\_STACK grant access to any item in the stack, not just the top item. + +Feature 'prune' removes the first occurrence starting from the beginning of a list instead of starting from the cursor position. \ No newline at end of file diff --git a/jj_containers/forum.txt b/jj_containers/forum.txt new file mode 100644 index 0000000..b436e00 --- /dev/null +++ b/jj_containers/forum.txt @@ -0,0 +1,18 @@ +Eiffel Forum License, version 2 + +1. Permission is hereby granted to use, copy, modify and/or + distribute this package, provided that: + * copyright notices are retained unchanged, + * any distribution of this package, whether modified or not, + includes this license text. +2. Permission is hereby also granted to distribute binary programs + which depend on this package. If the binary program depends on a + modified version of this package, you are encouraged to publicly + release the modified version of this package. + +THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT WARRANTY. ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE TO ANY PARTY FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES ARISING IN ANY WAY OUT OF THE USE OF THIS PACKAGE. diff --git a/jj_containers/jj_array.e b/jj_containers/jj_array.e new file mode 100644 index 0000000..ff12bef --- /dev/null +++ b/jj_containers/jj_array.e @@ -0,0 +1,154 @@ +note + description: "[ + This class adds some useful features to the ARRAY class. + ]" + author: "Jimmy J. Johnson" + date: "10/27/21" + copyright: "Copyright (c) 2021, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +class + JJ_ARRAY [G] + +inherit + + ARRAY [G] + +create + make, + make_filled, + make_from_array, + make_from_special, + make_from_cil + +convert + to_cil: {NATIVE_ARRAY [G]}, + to_special: {SPECIAL [G]}, + make_from_cil ({NATIVE_ARRAY [G]}) + + +feature -- Measurement + + most_occuring_item: like item + -- The item in Current that occurs the most times. + -- If more than one item occurs the same most number of time, then + -- the then the first of those items. + require + not_empty: not is_empty + local + i, j: INTEGER_32 + n, c: INTEGER_32 + index: INTEGER_32 + do + c := 0 + n := 1 + from i := 1 + until i > count + loop + c := 1 + from j := i + 1 + until j > count + loop + if at (i) ~ at (j) then + c := c + 1 + end + j := j + 1 + end + if c > n then + index := i + end + i := i + 1 + end + check + index_big_enough: index >= 1 + end + check + index_small_enough: index <= count + end + Result := at (index) + end + + unique_count: INTEGER_32 + -- The number of items in Current that occur only once. + local + i, j: INTEGER_32 + n: INTEGER_32 + checked: ARRAYED_SET [like item] + duplicate_found: BOOLEAN + v: like item + do + create checked.make (count) + from i := 1 + until i > count + loop + n := 1 + v := at (i) + duplicate_found := False + if not checked.has (v) then + checked.extend (v) + from j := i + 1 + until duplicate_found or else j > count + loop + if at (i) ~ at (j) then + duplicate_found := True + end + j := j + 1 + end + end + if not duplicate_found then + Result := Result + 1 + end + i := i + 1 + end + ensure + result_large_enough: Result >= 0 + result_small_enough: Result <= count + all_unique_implication: + end + +feature -- Status report + + is_all_same: BOOLEAN + -- Are all the elements in Current equivalent? + -- Uses object comparison to check sameness. + local + i: INTEGER + a: G + do + -- Simple check if all are same as the first + -- Assume true until finding a contradiction + a := at (1) + Result := True + from i := 2 + until not Result or else i > count + loop + Result := a ~ at (i) + i := i + 1 + end + end + + is_all_different: BOOLEAN + -- Are all the elements in Current different from each other? + -- Uses object comparison not reference comparison. + local + i, j: INTEGER_32 + a: G + do + -- Must check all against each of the others. + -- Assume true until finding two that are the same. + Result := True + from i := 1 + until i > count + loop + a := at (i) + from j := i + 1 + until not Result or else j > count + loop + Result := not (a ~ at (i)) + j := j + 1 + end + i := i + 1 + end + end + +end diff --git a/jj_containers/jj_array2.e b/jj_containers/jj_array2.e new file mode 100644 index 0000000..6e3b1f9 --- /dev/null +++ b/jj_containers/jj_array2.e @@ -0,0 +1,89 @@ +note + description: "[ + A 2-d array with some additional features, including those added + by class {JJ_ARRAY}. + ]" + author: "Jimmy J. Johnson" + date: "10/27/21" + copyright: "Copyright (c) 2021, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +class + JJ_ARRAY2 [G] + +inherit + + ARRAY2 [G] + + JJ_ARRAY [G] + rename + make as array_make, + item as array_item, + put as array_put, + force as array_force, + resize as array_resize, + wipe_out as array_wipe_out, + make_filled as array_make_filled + export + {NONE} + array_make, array_force, + array_resize, array_wipe_out, make_from_array, + array_make_filled, make_from_special, make_from_cil, + remove_head, remove_tail, keep_head, keep_tail, + grow, conservative_resize, conservative_resize_with_default, + automatic_grow + {ARRAY2} + array_put, array_item + {ANY} + copy, is_equal, area, to_c + end + +create + make, + make_filled + +feature -- Query + + occurrences_per_row (a_item: G; a_row: INTEGER_32): INTEGER_32 + -- The number of times `a_item' appears in `a_row'. + require + row_index_big_enough: a_row >= 1 + row_index_small_enough: a_row <= height + local + i: INTEGER + do + from i := 1 + until i > width + loop + if a_item ~ item (a_row, i) then + Result := Result + 1 + end + i := i + 1 + end + ensure + result_large_enough: Result >= 0 + result_small_enough: Result <= width + end + + occurrences_per_column (a_item: G; a_column: INTEGER_32): INTEGER_32 + -- The number of times `a_item' appears in `a_column'. + require + column_index_big_enough: a_column >= 1 + column_index_small_enough: a_column <= width + local + i: INTEGER + do + from i := 1 + until i > height + loop + if a_item ~ item (i, a_column) then + Result := Result + 1 + end + i := i + 1 + end + ensure + result_large_enough: Result >= 0 + result_small_enough: Result <= height + end + +end diff --git a/jj_containers/jj_arrayed_list.e b/jj_containers/jj_arrayed_list.e new file mode 100644 index 0000000..3a1b523 --- /dev/null +++ b/jj_containers/jj_arrayed_list.e @@ -0,0 +1,148 @@ +note + description: "[ + An {ARRAYED_LIST} but with feature `prune' changed to remove the first + occurance of an item after the *beginning* of the list instead of after + the current cursor postion. + ]" + author: "Jimmy J. Johnson" + date: "10/27/21" + copyright: "Copyright (c) 2021, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +class + JJ_ARRAYED_LIST [G] + +inherit + + ARRAYED_LIST [G] + rename + replace as list_replace, + after as is_after, -- I just don't like the original names + before as is_before, + full as is_full + redefine + prune, -- to prune from beginning of list + array_item + select + prune + end + + ARRAYED_LIST [G] + rename + prune as prune_ise, -- to keep the original version + replace as list_replace, + after as is_after, + before as is_before, + full as is_full + redefine + array_item + end + +create + make, make_filled + +feature -- Access + + as_set: JJ_ARRAYED_SET [G] + -- The set of items in Current. + local + i: INTEGER + do + create Result.make (count) + from i := 1 + until i > count + loop + Result.extend (i_th (i)) + i := i + 1 + end + end + +feature -- Basic operations + + prune (a_item: like item) + -- Remove first occurance of `a_item' starting at the first item. + -- Move cursor to right neighbor. + -- (or `after' if no right neighbor or if `a_item' does not occur). + do + start + Precursor {ARRAYED_LIST} (a_item) + end + + replace (a_item, a_new_item: like item) + -- Remove `a_item' and insert `a_new_item'. + require + item_exists: a_item /= Void + new_item_exists: a_new_item /= Void + has_item: has (a_item) + local + i: INTEGER + do + i := index + start + search (a_item) + check + object_found: object_comparison implies a_item ~ item + item_found: not object_comparison implies a_item = item + -- because of pecondition "has_item" + end + list_replace (a_new_item) + go_i_th (i) + ensure + has_new_item: has (a_new_item) + count_same: count = old count + end + +feature -- Status report + + is_all_same: BOOLEAN + -- Are all the elements in Current equivalent? + -- Uses object comparison to check sameness. + local + i: INTEGER_32 + a: G + do + -- Simple check if all are same as the first. + -- Assume true until finding a contradiction + a := at (i) + Result := True + from i := 2 + until not Result or else i > count + loop + Result := a ~ at (i) + i := i + 1 + end + end + + is_all_different: BOOLEAN + -- Are all the elements in Current different from each other? + -- Uses object comparison not reference comparison + local + i, j: INTEGER_32 + a: G + do + -- Must check all against each of the others. + -- Assume true until finding two that are the same. + Result := True + from i := 1 + until not Result or else i > count + loop + from j := i + 1 + until not Result or else j > count + loop + Result := not (a ~ at (i)) + j := j + 1 + end + i := i + 1 + end + end + +feature {NONE} -- Implementation + + array_item (i: INTEGER): like item + -- Entry at index `i', if in index interval. + -- Redefined to make result type "like item" instead of type G. + do + Result := Precursor {ARRAYED_LIST} (i) + end + +end diff --git a/jj_containers/jj_arrayed_set.e b/jj_containers/jj_arrayed_set.e new file mode 100644 index 0000000..6e9d9e5 --- /dev/null +++ b/jj_containers/jj_arrayed_set.e @@ -0,0 +1,65 @@ +note + description: "[ + ARRAYED_SET with added feature for replacing an existing item. + ]" + author: "Jimmy J. Johnson" + date: "10/27/21" + copyright: "Copyright (c) 2021, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +class + JJ_ARRAYED_SET [G] + +inherit + + ARRAYED_SET [G] + rename + replace as list_replace, + after as is_after, + before as is_before, + full as is_full + export + {ANY} + for_all, + there_exists, + capacity, + i_th + undefine + make_from_iterable, +-- put, + prune, + array_item, + is_inserted, + changeable_comparison_criterion -- Possibly allows duplicates + select + put + end + + JJ_ARRAYED_LIST [G] + rename + has as has alias "∋" + undefine + put, + sequence_put, + extend, + force +-- changeable_comparison_criterion + redefine + replace + end + +create + make, make_filled + +feature -- Basic operations + + replace (a_item, a_new_item: like item) + -- If `a_new_item' is not in Current and `a_item' is, remove + -- `a_item' and insert `a_new_item'. + do + if has (a_item) and then not has (a_new_item) then + Precursor {JJ_ARRAYED_LIST} (a_item, a_new_item) + end + end + +end diff --git a/jj_containers/jj_arrayed_stack.e b/jj_containers/jj_arrayed_stack.e new file mode 100644 index 0000000..f7b7182 --- /dev/null +++ b/jj_containers/jj_arrayed_stack.e @@ -0,0 +1,45 @@ +note + description: "[ + An {ARRAYED_STACK} which allows inspection of any item, not just the + top one. Items are still added to and removed from the top. + ]" + author: "Jimmy J. Johnson" + date: "10/27/21" + copyright: "Copyright (c) 2021, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +class + JJ_ARRAYED_STACK [G] + +inherit + + ARRAYED_STACK [G] + export + {ANY} + i_th, + first, + last, + valid_index, + do_all, + do_all_with_index, + do_if, + do_if_with_index, + for_all, + there_exists + redefine + array_item + end + +create + make, make_filled + +feature {NONE} -- Implementation + + array_item (i: INTEGER): like item + -- Entry at index `i', if in index interval. + -- Redefined to make result type "like item" instead of type G. + do + Result := Precursor {ARRAYED_STACK} (i) + end + +end diff --git a/jj_containers/jj_containers.ecf b/jj_containers/jj_containers.ecf new file mode 100644 index 0000000..5a44af6 --- /dev/null +++ b/jj_containers/jj_containers.ecf @@ -0,0 +1,21 @@ + + + + + + + + + + + + /.git$ + /.svn$ + /CVS$ + /EIFGENs$ + /demo$ + /docs$ + + + + diff --git a/jj_containers/jj_fixed_array.e b/jj_containers/jj_fixed_array.e new file mode 100644 index 0000000..1961b34 --- /dev/null +++ b/jj_containers/jj_fixed_array.e @@ -0,0 +1,34 @@ +note + description: "[ + An arrayed list that cannot change size. + ]" + author: "Jimmy J. Johnson" + date: "10/27/21" + copyright: "Copyright (c) 2021, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +class + JJ_FIXED_ARRAY [G] + +inherit + + FIXED [G] + rename + full as is_full + undefine + copy, + is_equal + end + + JJ_ARRAYED_LIST [G] + undefine + is_full, + resizable + end + +create + make, + make_filled + +end + diff --git a/jj_containers/jj_fixed_set.e b/jj_containers/jj_fixed_set.e new file mode 100644 index 0000000..8e157ac --- /dev/null +++ b/jj_containers/jj_fixed_set.e @@ -0,0 +1,35 @@ +note + description: "[ + A set implemented as an array that cannot resize. + ]" + author: "Jimmy J. Johnson" + date: "10/27/21" + copyright: "Copyright (c) 2021, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +class + JJ_FIXED_SET [G] + +inherit + + FIXED [G] + rename + has as has alias "∋", + full as is_full + undefine + copy, + is_equal, + changeable_comparison_criterion + end + + JJ_ARRAYED_SET [G] + undefine + is_full, + resizable + end + +create + make, + make_filled + +end diff --git a/jj_containers/jj_linked_stack.e b/jj_containers/jj_linked_stack.e new file mode 100644 index 0000000..c901365 --- /dev/null +++ b/jj_containers/jj_linked_stack.e @@ -0,0 +1,47 @@ +note + description: "[ + A {LINKED_STACK} which allows inspection of any item, not just the + top one. Items are still added to and removed from the top. + ]" + author: "Jimmy J. Johnson" + date: "10/27/21" + copyright: "Copyright (c) 2021, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +class + JJ_LINKED_STACK [G] + +inherit + + LINKED_STACK [G] + export {ANY} + i_th, + first, + last, + valid_index + redefine + i_th, + at + end + +create + make + +feature -- Access + + i_th alias "[]" (a_index: INTEGER): like item + -- Redefined to anchor to item. + do + Result := Precursor {LINKED_STACK} (a_index) + end + +feature {NONE} -- Implementation + + at alias "@" (i: INTEGER): like item + -- Entry at index `i', if in index interval. + -- Redefined to make result type "like item" instead of type G. + do + Result := Precursor {LINKED_STACK} (i) + end + +end diff --git a/jj_containers/jj_minimum_priority_queue.e b/jj_containers/jj_minimum_priority_queue.e new file mode 100644 index 0000000..299f5ee --- /dev/null +++ b/jj_containers/jj_minimum_priority_queue.e @@ -0,0 +1,48 @@ +note + description: "[ + A priority queue implemented as sorted lists, but giving + the minimum value instead of, like Eiffel Software's class, + the maximum value. + ]" + author: "Jimmy J. Johnson" + date: "11/11/21" + copyright: "Copyright (c) 2021, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +class + JJ_MINIMUM_PRIORITY_QUEUE [G -> COMPARABLE] + +inherit + + LINKED_PRIORITY_QUEUE [G] + redefine + item, + remove + end + +create + make, + make_from_iterable + +create {JJ_MINIMUM_PRIORITY_QUEUE} + make_sublist + +feature -- Access + + item: G + -- Item at bottom of queue (i.e. smallest value) + do + Result := i_th (1) + end + +feature -- Removal + + remove + -- Remove item of highest value. + do + go_i_th (1) + Precursor {LINKED_PRIORITY_QUEUE} + go_i_th (1) + end + +end diff --git a/jj_containers/jj_sortable_array.e b/jj_containers/jj_sortable_array.e new file mode 100644 index 0000000..bb0a6a4 --- /dev/null +++ b/jj_containers/jj_sortable_array.e @@ -0,0 +1,264 @@ +note + description: "[ + An array whose items *can* be ordered by a total-ordered relationship. + Feature `set_ordered' causes `extend' to place an item into the array + at its proper sort order position. + Feature `prune' is redefined in {JJ_ARRAYED_LIST} to remove the first + occurrence of an item at or after the beginning of the list, not after + the current position, as in {ARRAYED_LIST}. + ]" + author: "Jimmy J. Johnson" + date: "10/27/21" + copyright: "Copyright (c) 2021, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +class + JJ_SORTABLE_ARRAY [G -> COMPARABLE] + +inherit + + JJ_ARRAYED_LIST [G] + export + {NONE} + force -- to trap a design error temporarily + redefine + put, + extend, + replace, + has, + is_inserted + end + +create + make, make_filled + +feature -- Status report + + is_inserting_ordered: BOOLEAN + -- Should items be inserted in their ordered position? + -- The default is to add items at the end of the list; the list + -- can be sorted later. + + is_sorted: BOOLEAN + -- Is the structure sorted? + local + c: CURSOR + prev: like item + do + Result := True + if count > 1 then + from + c := cursor + start + check not off end + prev := item + forth + until + is_after or not Result + loop + Result := (prev <= item) + prev := item + forth + end + go_to (c) + end + end + +feature -- Status setting + + set_ordered + -- Sort Current and then ensure future insertions place items + -- at their proper position based on a total order relation. + do + sort + is_inserting_ordered := True + ensure + is_ordered: is_inserting_ordered + is_sorted: is_sorted + end + + set_unordered + -- Make future insertions place items at the end of the list. + -- This is the default. + do + is_inserting_ordered := False + ensure + not_ordered: not is_inserting_ordered + end + +feature -- Query + + has (a_item: like item): BOOLEAN + -- Does current include `v'? + do + if object_comparison then + -- can use the binary search + Result := seek_position (a_item).was_found + else + -- Must check references; the binary search does not; + -- it uses `is_less' which compares objects. + Result := Precursor (a_item) + end + end + + seek_position (a_item: like item): TUPLE [position: INTEGER; was_found: BOOLEAN] + -- The position of `a_item' in Current or the position where + -- it would be inserted. Sets `was_found' if `a_item' was + -- in Current. + local + pos: INTEGER + low, mid, high: INTEGER + found: BOOLEAN + c: CURSOR + do + if is_inserting_ordered then + -- do a binary search + check + is_sorted: is_sorted + -- because `is_inserting_ordered' keeps Current sorted. + end + from + low := 1 + high := count + until found or else (low > high) + loop + mid := (low + high) // 2 + if a_item < i_th (mid) then + high := mid - 1 + elseif a_item > i_th (mid) then + low := mid + 1 + else + found := True + end + end + if found then + -- Account for duplicates + from pos := mid + until pos > count - 1 or else i_th (pos + 1) > a_item + loop + pos := pos + 1 + end + elseif count = 0 then + pos := 1 + elseif a_item < i_th (mid) then + pos := mid + else + pos := mid + 1 + end + else + -- perform a linear search + c := cursor + start + search (a_item) + pos := index + if is_after then + found := False + else + found := True + end + go_to (c) + end + Result := [pos, found] + end + + is_inserted (a_item: like item): BOOLEAN + -- Was `a_item' inserted into Current? + -- Redefined because {ARRAYED_LIST} always extends items at the + -- end; that is not necessarily the case for this class. + do + Result := has (a_item) + end + +feature -- Basic operations + + extend (a_item: like item) + -- Put `a_item' into Current at `seek_position'. + local + i: INTEGER + do + if is_empty or else not is_inserting_ordered then + -- add to end + Precursor {JJ_ARRAYED_LIST} (a_item) + else + i := seek_position (a_item).position + if i > count then + -- Add at end + Precursor {JJ_ARRAYED_LIST} (a_item) + else + -- Add at ordered position. + insert (a_item, i) + end + end + ensure then + still_sorted: is_inserting_ordered implies is_sorted + end + + put (a_item: like item) + -- Put `a_item' into Current at `seek_position'. + -- Same as extend. + do + extend (a_item) + end + + replace (a_item, a_new_item: like item) + -- Remove `a_item' and insert `a_new_item'. + -- Redefined to ensure `a_new_item' is inserted into the proper + -- place. + do + prune (a_item) + extend (a_new_item) + end + + sort + -- Sort all items. + -- Has O(`count' * log (`count')) complexity. + --| Uses comb-sort (BYTE February '91) + -- Adapted from ISE's feature from {SORTED_TWO_WAY_LIST}. + local + no_change: BOOLEAN + gap: INTEGER + i, j: INTEGER + left_v, v: like item + do + if not is_empty then + from + gap := count * 10 // 13 + until + gap = 0 + loop + from + no_change := False + i := 1 + gap + until + no_change + loop + no_change := True + from + j := 1 -- first element index + until + i > count + loop + left_v := i_th (j) + v := i_th (i) -- item at first index + gap + if v < left_v then + -- Swap `left_v' with `v' + no_change := False + put_i_th (left_v, i) + put_i_th (v, j) + end + j := j + 1 + i := i + 1 + end + end + gap := gap * 10 // 13 + end + end + ensure + is_sorted: is_sorted + end + +invariant + + is_inserting_ordered_implication: is_inserting_ordered implies is_sorted + +end diff --git a/jj_containers/jj_sortable_fixed_array.e b/jj_containers/jj_sortable_fixed_array.e new file mode 100644 index 0000000..31ee720 --- /dev/null +++ b/jj_containers/jj_sortable_fixed_array.e @@ -0,0 +1,33 @@ +note + description: "[ + An array that can be sorted and cannot resize. + ]" + author: "Jimmy J. Johnson" + date: "10/27/21" + copyright: "Copyright (c) 2021, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +class + JJ_SORTABLE_FIXED_ARRAY [G -> COMPARABLE] + +inherit + + FIXED [G] + rename + full as is_full + undefine + copy, + is_equal + end + + JJ_SORTABLE_ARRAY [G] + undefine + is_full, + resizable + end + +create + make, + make_filled + +end diff --git a/jj_containers/jj_sortable_fixed_set.e b/jj_containers/jj_sortable_fixed_set.e new file mode 100644 index 0000000..847027c --- /dev/null +++ b/jj_containers/jj_sortable_fixed_set.e @@ -0,0 +1,34 @@ +note + description: "[ + An array that can be sorted and cannot resize. + ]" + author: "Jimmy J. Johnson" + date: "10/27/21" + copyright: "Copyright (c) 2021, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +class + JJ_SORTABLE_FIXED_SET [G -> COMPARABLE] + +inherit + + FIXED [G] + rename + has as has alias "∋", + full as is_full + undefine + changeable_comparison_criterion, + copy, + is_equal + end + + JJ_SORTABLE_SET [G] + undefine + is_full, + resizable + end + +create + make, make_filled + +end diff --git a/jj_containers/jj_sortable_set.e b/jj_containers/jj_sortable_set.e new file mode 100644 index 0000000..950c771 --- /dev/null +++ b/jj_containers/jj_sortable_set.e @@ -0,0 +1,76 @@ +note + description: "[ + A set, implemented as an array, whose items *can* be ordered based on + a total-order relationship. + Feature `set_ordered' causes `extend' to place an item into the array + at its proper sort-order position. + Feature `prune' is redefined in {JJ_ARRAYED_LIST} to remove the first + occurrence of an item at or after the beginning of the list, not after + the current position, as in {ARRAYED_LIST}. + ]" + author: "Jimmy J. Johnson" + date: "10/27/21" + copyright: "Copyright (c) 2021, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +class + JJ_SORTABLE_SET [G -> COMPARABLE] + +inherit + + JJ_ARRAYED_SET [G] + export + {ANY} + for_all, + there_exists, + capacity, + i_th + undefine + put, + sequence_put, + prune, + array_item, + is_inserted, + has + redefine + extend + select + put, + extend + end + + JJ_SORTABLE_ARRAY [G] + rename + has as has alias "∋", + extend as jj_sl_extend + export {ANY} + i_th + undefine + changeable_comparison_criterion, + replace + end + +create + make, make_filled + +feature -- Basic operations + + extend (a_item: like item) + -- Put `a_item' into Current at `seek_position' if + -- not alread in the array. + local + i: INTEGER + do + if not has (a_item) then + i := seek_position (a_item).position + if i > count then + -- add `a_item' at the end + force (a_item) + else + -- add `a_item' at its ordered position + insert (a_item, i) + end + end + end + +end diff --git a/jj_vision/Forum.txt b/jj_vision/Forum.txt new file mode 100644 index 0000000..b436e00 --- /dev/null +++ b/jj_vision/Forum.txt @@ -0,0 +1,18 @@ +Eiffel Forum License, version 2 + +1. Permission is hereby granted to use, copy, modify and/or + distribute this package, provided that: + * copyright notices are retained unchanged, + * any distribution of this package, whether modified or not, + includes this license text. +2. Permission is hereby also granted to distribute binary programs + which depend on this package. If the binary program depends on a + modified version of this package, you are encouraged to publicly + release the modified version of this package. + +THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT WARRANTY. ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE TO ANY PARTY FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES ARISING IN ANY WAY OUT OF THE USE OF THIS PACKAGE. diff --git a/jj_vision/README.md b/jj_vision/README.md new file mode 100644 index 0000000..549766b --- /dev/null +++ b/jj_vision/README.md @@ -0,0 +1,2 @@ +# jj_vision + Windowing framework build on Vision2 diff --git a/jj_vision/bitmaps/bitmaps.e b/jj_vision/bitmaps/bitmaps.e new file mode 100644 index 0000000..2461f91 --- /dev/null +++ b/jj_vision/bitmaps/bitmaps.e @@ -0,0 +1,23 @@ +note + description: "[ + Bitmaps created programatically from PIXEL_BUFFERS + ]" + author: "Jimmy J. Johnson" + date: "$Date: 2012-05-19 11:28:28 -0400 (Sat, 19 May 2012) $" + revision: "$Revision: 9 $" + +class + BITMAPS + +inherit + + PIXEL_BUFFERS + +feature -- Access + + icon_back_color: EV_PIXMAP + do + create Result.make_with_pixel_buffer (Icon_back_color_buffer) + end + +end diff --git a/jj_vision/bitmaps/clientlnk.e b/jj_vision/bitmaps/clientlnk.e new file mode 100644 index 0000000..3a7e615 --- /dev/null +++ b/jj_vision/bitmaps/clientlnk.e @@ -0,0 +1,73 @@ +note + description: "Pixel buffer that replaces original image file.% + %The original version of this class has been generated by Image Eiffel Code." + +class + CLIENTLNK + +inherit + EV_PIXEL_BUFFER + +create + make + +feature {NONE} -- Initialization + + make + -- Initialization + do + make_with_size (16, 16) + fill_memory + end + +feature {NONE} -- Image data + + c_colors_0 (a_ptr: POINTER; a_offset: INTEGER) + -- Fill `a_ptr' with colors data from `a_offset'. + external + "C inline" + alias + "{ + { + #define B(q) \ + #q + #ifdef EIF_WINDOWS + #define A(a,r,g,b) \ + B(\x##b\x##g\x##r\x##a) + #else + #define A(a,r,g,b) \ + B(\x##r\x##g\x##b\x##a) + #endif + char l_data[] = + A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6) + A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,25,57,FF)A(FF,25,57,FF)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,25,57,FF)A(FF,25,57,FF)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,00,00,50)A(FF,00,00,50)A(FF,00,00,50)A(FF,00,00,50)A(FF,00,00,50)A(FF,00,00,50)A(FF,00,00,50)A(FF,00,00,50)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,25,57,FF)A(FF,25,57,FF)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,25,57,FF)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,50)A(FF,00,00,50) + A(FF,00,00,50)A(FF,00,00,50)A(FF,00,00,50)A(FF,00,00,50)A(FF,00,00,50)A(FF,00,00,50)A(FF,00,00,50)A(FF,00,00,50)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,50)A(FF,00,00,50)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,50)A(FF,00,00,50)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,00,00,50)A(FF,00,00,50)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6) + A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6)A(FF,D6,D6,D6); + memcpy ((EIF_NATURAL_32 *)$a_ptr + $a_offset, &l_data, sizeof l_data - 1); + } + }" + end + + build_colors (a_ptr: POINTER) + -- Build `colors'. + do + c_colors_0 (a_ptr, 0) + end + +feature {NONE} -- Image data filling. + + fill_memory + -- Fill image data into memory. + local + l_pointer: POINTER + do + if attached {EV_PIXEL_BUFFER_IMP} implementation as l_imp then + l_pointer := l_imp.data_ptr + if not l_pointer.is_default_pointer then + build_colors (l_pointer) + l_imp.unlock + end + end + end + +end -- CLIENTLNK diff --git a/jj_vision/bitmaps/icon_auto_slice_limits_color.e b/jj_vision/bitmaps/icon_auto_slice_limits_color.e new file mode 100644 index 0000000..8ee5655 --- /dev/null +++ b/jj_vision/bitmaps/icon_auto_slice_limits_color.e @@ -0,0 +1,73 @@ +note + description: "Pixel buffer that replaces original image file.% + %The original version of this class has been generated by Image Eiffel Code." + +class + ICON_AUTO_SLICE_LIMITS_COLOR + +inherit + EV_PIXEL_BUFFER + +create + make + +feature {NONE} -- Initialization + + make + -- Initialization + do + make_with_size (16, 16) + fill_memory + end + +feature {NONE} -- Image data + + c_colors_0 (a_ptr: POINTER; a_offset: INTEGER) + -- Fill `a_ptr' with colors data from `a_offset'. + external + "C inline" + alias + "{ + { + #define B(q) \ + #q + #ifdef EIF_WINDOWS + #define A(a,r,g,b) \ + B(\x##b\x##g\x##r\x##a) + #else + #define A(a,r,g,b) \ + B(\x##r\x##g\x##b\x##a) + #endif + char l_data[] = + A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(FF,0E,0E,0E)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(FF,0E,0E,0E)A(FF,0E,0E,0E)A(FF,7A,7A,7A)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(FF,7A,7A,7A)A(FF,0E,0E,0E)A(FF,0E,0E,0E)A(FF,7A,7A,7A)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(FF,7A,7A,7A)A(FF,0E,0E,0E)A(FF,0E,0E,0E)A(FF,7A,7A,7A)A(00,00,00,00)A(00,00,00,00)A(FF,50,32,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(FF,50,32,00)A(00,00,00,00)A(00,00,00,00)A(FF,7A,7A,7A)A(FF,0E,0E,0E) + A(FF,0E,0E,0E)A(FF,7A,7A,7A)A(00,00,00,00)A(FF,50,32,00)A(FF,73,4A,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(FF,50,32,00)A(FF,73,4A,00)A(00,00,00,00)A(FF,7A,7A,7A)A(FF,0E,0E,0E)A(FF,0E,0E,0E)A(FF,7A,7A,7A)A(FF,50,32,00)A(FF,73,4A,00)A(FF,73,4A,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(FF,50,32,00)A(FF,73,4A,00)A(FF,73,4A,00)A(FF,7A,7A,7A)A(FF,0E,0E,0E)A(FF,0E,0E,0E)A(FF,50,32,00)A(FF,73,4A,00)A(FF,73,4A,00)A(FF,73,4A,00)A(FF,73,4A,00)A(FF,73,4A,00)A(FF,73,4A,00)A(FF,73,4A,00)A(FF,73,4A,00)A(FF,73,4A,00)A(FF,73,4A,00)A(FF,73,4A,00)A(FF,73,4A,00)A(FF,73,4A,00)A(FF,0E,0E,0E)A(FF,0E,0E,0E)A(FF,73,4A,00)A(FF,73,4A,00)A(FF,73,4A,00)A(FF,73,4A,00)A(FF,73,4A,00)A(FF,73,4A,00)A(FF,73,4A,00)A(FF,73,4A,00)A(FF,73,4A,00)A(FF,73,4A,00)A(FF,73,4A,00)A(FF,73,4A,00)A(FF,73,4A,00)A(FF,96,62,00)A(FF,0E,0E,0E)A(FF,0E,0E,0E)A(FF,7A,7A,7A)A(FF,73,4A,00)A(FF,73,4A,00)A(FF,96,62,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(FF,73,4A,00)A(FF,73,4A,00)A(FF,96,62,00)A(FF,7A,7A,7A)A(FF,0E,0E,0E) + A(FF,0E,0E,0E)A(FF,7A,7A,7A)A(00,00,00,00)A(FF,73,4A,00)A(FF,96,62,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(FF,73,4A,00)A(FF,96,62,00)A(00,00,00,00)A(FF,7A,7A,7A)A(FF,0E,0E,0E)A(FF,0E,0E,0E)A(FF,7A,7A,7A)A(00,00,00,00)A(00,00,00,00)A(FF,96,62,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(FF,96,62,00)A(00,00,00,00)A(00,00,00,00)A(FF,7A,7A,7A)A(FF,0E,0E,0E)A(FF,0E,0E,0E)A(FF,7A,7A,7A)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(FF,7A,7A,7A)A(FF,0E,0E,0E)A(FF,0E,0E,0E)A(FF,7A,7A,7A)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(FF,7A,7A,7A)A(FF,0E,0E,0E)A(FF,0E,0E,0E)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(FF,0E,0E,0E) + A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00); + memcpy ((EIF_NATURAL_32 *)$a_ptr + $a_offset, &l_data, sizeof l_data - 1); + } + }" + end + + build_colors (a_ptr: POINTER) + -- Build `colors'. + do + c_colors_0 (a_ptr, 0) + end + +feature {NONE} -- Image data filling. + + fill_memory + -- Fill image data into memory. + local + l_pointer: POINTER + do + if attached {EV_PIXEL_BUFFER_IMP} implementation as l_imp then + l_pointer := l_imp.data_ptr + if not l_pointer.is_default_pointer then + build_colors (l_pointer) + l_imp.unlock + end + end + end + +end -- ICON_AUTO_SLICE_LIMITS_COLOR diff --git a/jj_vision/bitmaps/icon_back_color.e b/jj_vision/bitmaps/icon_back_color.e new file mode 100644 index 0000000..9110ce9 --- /dev/null +++ b/jj_vision/bitmaps/icon_back_color.e @@ -0,0 +1,73 @@ +note + description: "Pixel buffer that replaces original image file.% + %The original version of this class has been generated by Image Eiffel Code." + +class + ICON_BACK_COLOR + +inherit + EV_PIXEL_BUFFER + +create + make + +feature {NONE} -- Initialization + + make + -- Initialization + do + make_with_size (16, 16) + fill_memory + end + +feature {NONE} -- Image data + + c_colors_0 (a_ptr: POINTER; a_offset: INTEGER) + -- Fill `a_ptr' with colors data from `a_offset'. + external + "C inline" + alias + "{ + { + #define B(q) \ + #q + #ifdef EIF_WINDOWS + #define A(a,r,g,b) \ + B(\x##b\x##g\x##r\x##a) + #else + #define A(a,r,g,b) \ + B(\x##r\x##g\x##b\x##a) + #endif + char l_data[] = + A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,33,66,FF)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,33,66,FF)A(FF,CC,FF,FF)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,33,66,FF)A(FF,CC,FF,FF)A(FF,99,FF,FF)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01) + A(00,01,01,01)A(00,01,01,01)A(FF,33,66,FF)A(FF,CC,FF,FF)A(FF,99,FF,FF)A(FF,99,FF,FF)A(FF,00,00,00)A(FF,33,66,FF)A(FF,33,66,FF)A(FF,33,66,FF)A(FF,33,66,FF)A(FF,33,66,FF)A(FF,33,66,FF)A(FF,33,66,FF)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(FF,33,66,FF)A(FF,CC,FF,FF)A(FF,99,FF,FF)A(FF,33,CC,FF)A(FF,99,FF,FF)A(FF,99,FF,FF)A(FF,99,FF,FF)A(FF,99,FF,FF)A(FF,99,FF,FF)A(FF,99,FF,FF)A(FF,99,FF,FF)A(FF,99,FF,FF)A(FF,33,99,FF)A(FF,00,00,00)A(00,01,01,01)A(FF,33,66,FF)A(FF,CC,FF,FF)A(FF,99,FF,FF)A(FF,33,CC,FF)A(FF,33,CC,FF)A(FF,33,CC,FF)A(FF,33,CC,FF)A(FF,33,CC,FF)A(FF,33,CC,FF)A(FF,33,CC,FF)A(FF,33,CC,FF)A(FF,33,CC,FF)A(FF,33,CC,FF)A(FF,33,99,FF)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,00)A(FF,33,99,FF)A(FF,33,CC,FF)A(FF,33,CC,FF)A(FF,33,99,FF)A(FF,33,99,FF)A(FF,33,99,FF)A(FF,33,99,FF)A(FF,33,99,FF)A(FF,33,99,FF)A(FF,33,99,FF)A(FF,33,99,FF)A(FF,33,99,FF)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,00)A(FF,33,99,FF)A(FF,33,CC,FF)A(FF,33,99,FF)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(00,01,01,01) + A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,00)A(FF,33,99,FF)A(FF,33,99,FF)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,00)A(FF,33,99,FF)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,00)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01) + A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01); + memcpy ((EIF_NATURAL_32 *)$a_ptr + $a_offset, &l_data, sizeof l_data - 1); + } + }" + end + + build_colors (a_ptr: POINTER) + -- Build `colors'. + do + c_colors_0 (a_ptr, 0) + end + +feature {NONE} -- Image data filling. + + fill_memory + -- Fill image data into memory. + local + l_pointer: POINTER + do + check attached {EV_PIXEL_BUFFER_IMP} implementation as l_imp then + l_pointer := l_imp.data_ptr + if l_pointer /= default_pointer then + build_colors (l_pointer) + l_imp.unlock + end + end + end + +end -- ICON_BACK_COLOR diff --git a/jj_vision/bitmaps/icon_bparrow_color.e b/jj_vision/bitmaps/icon_bparrow_color.e new file mode 100644 index 0000000..29d9b85 --- /dev/null +++ b/jj_vision/bitmaps/icon_bparrow_color.e @@ -0,0 +1,71 @@ +note + description: "Pixel buffer that replaces original image file.% + %The original version of this class has been generated by Image Eiffel Code." + +class + ICON_BPARROW_COLOR + +inherit + EV_PIXEL_BUFFER + +create + make + +feature {NONE} -- Initialization + + make + -- Initialization + do + make_with_size (12, 12) + fill_memory + end + +feature {NONE} -- Image data + + c_colors_0 (a_ptr: POINTER; a_offset: INTEGER) + -- Fill `a_ptr' with colors data from `a_offset'. + external + "C inline" + alias + "{ + { + #define B(q) \ + #q + #ifdef EIF_WINDOWS + #define A(a,r,g,b) \ + B(\x##b\x##g\x##r\x##a) + #else + #define A(a,r,g,b) \ + B(\x##r\x##g\x##b\x##a) + #endif + char l_data[] = + A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,A2,AB,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,A2,AB,00)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,A2,AB,00)A(FF,FF,FF,00)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,A2,AB,00)A(FF,A2,AB,00)A(FF,A2,AB,00)A(FF,A2,AB,00)A(FF,A2,AB,00)A(FF,A2,AB,00)A(FF,FF,FF,CA)A(FF,FF,FF,00)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,A2,AB,00)A(FF,FF,FF,CA)A(FF,FF,FF,CA)A(FF,FF,FF,CA)A(FF,FF,FF,CA)A(FF,FF,FF,CA)A(FF,FF,FF,CA)A(FF,FF,FF,CA)A(FF,FF,FF,00)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(FF,A2,AB,00)A(FF,FF,FF,CA)A(FF,FF,FF,00)A(FF,FF,FF,00)A(FF,FF,FF,00)A(FF,FF,FF,00)A(FF,FF,FF,00) + A(FF,FF,FF,00)A(FF,FF,FF,00)A(FF,A2,AB,00)A(FF,00,00,00)A(00,01,01,01)A(FF,A2,AB,00)A(FF,E1,E1,00)A(FF,E1,E1,00)A(FF,E1,E1,00)A(FF,E1,E1,00)A(FF,E1,E1,00)A(FF,E1,E1,00)A(FF,FF,FF,00)A(FF,A2,AB,00)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,E1,E1,00)A(FF,A2,AB,00)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,00)A(FF,A2,AB,00)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,00)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01); + memcpy ((EIF_NATURAL_32 *)$a_ptr + $a_offset, &l_data, sizeof l_data - 1); + } + }" + end + + build_colors (a_ptr: POINTER) + -- Build `colors'. + do + c_colors_0 (a_ptr, 0) + end + +feature {NONE} -- Image data filling. + + fill_memory + -- Fill image data into memory. + local + l_pointer: POINTER + do + if attached {EV_PIXEL_BUFFER_IMP} implementation as l_imp then + l_pointer := l_imp.data_ptr + if not l_pointer.is_default_pointer then + build_colors (l_pointer) + l_imp.unlock + end + end + end + +end -- ICON_BPARROW_COLOR diff --git a/jj_vision/bitmaps/icon_check_exports_color.e b/jj_vision/bitmaps/icon_check_exports_color.e new file mode 100644 index 0000000..ee58549 --- /dev/null +++ b/jj_vision/bitmaps/icon_check_exports_color.e @@ -0,0 +1,73 @@ +note + description: "Pixel buffer that replaces original image file.% + %The original version of this class has been generated by Image Eiffel Code." + +class + ICON_CHECK_EXPORTS_COLOR + +inherit + EV_PIXEL_BUFFER + +create + make + +feature {NONE} -- Initialization + + make + -- Initialization + do + make_with_size (16, 16) + fill_memory + end + +feature {NONE} -- Image data + + c_colors_0 (a_ptr: POINTER; a_offset: INTEGER) + -- Fill `a_ptr' with colors data from `a_offset'. + external + "C inline" + alias + "{ + { + #define B(q) \ + #q + #ifdef EIF_WINDOWS + #define A(a,r,g,b) \ + B(\x##b\x##g\x##r\x##a) + #else + #define A(a,r,g,b) \ + B(\x##r\x##g\x##b\x##a) + #endif + char l_data[] = + A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(FF,80,80,80)A(FF,80,80,80)A(FF,80,80,80)A(FF,80,80,80)A(FF,80,80,80)A(FF,80,80,80)A(FF,80,80,80)A(FF,80,80,80)A(FF,80,80,80)A(FF,80,80,80)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(FF,80,80,80)A(FF,FF,FF,FF)A(FF,FF,FF,FF)A(FF,FF,FF,FF)A(FF,FF,FF,FF)A(FF,FF,FF,FF)A(FF,FF,FF,FF)A(FF,FF,FF,FF)A(FF,FF,FF,FF)A(FF,80,80,80)A(FF,00,00,00)A(00,00,00,00)A(00,00,00,00)A(FF,B9,3D,00)A(FF,B9,3D,00)A(FF,B9,3D,00)A(FF,B9,3D,00)A(FF,B9,3D,00)A(FF,B9,3D,00)A(FF,B9,3D,00)A(FF,B9,3D,00)A(FF,B9,3D,00)A(FF,B9,3D,00)A(FF,FF,FF,FF)A(FF,FF,FF,FF)A(FF,80,80,80)A(FF,FF,FF,FF)A(FF,00,00,00)A(00,00,00,00)A(FF,B9,3D,00)A(FF,FF,FF,FF)A(FF,FF,FF,FF)A(FF,FF,FF,FF)A(FF,FF,FF,FF)A(FF,FF,FF,FF)A(FF,FF,FF,FF)A(FF,FF,FF,FF)A(FF,FF,FF,FF)A(FF,B9,3D,00)A(FF,FF,FF,FF)A(FF,FF,FF,FF)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,B9,3D,00)A(FF,FF,FF,FF)A(FF,FF,FF,FF)A(FF,B9,3D,00)A(FF,FF,FF,FF)A(FF,FF,FF,FF)A(FF,FF,FF,FF)A(FF,FF,FF,FF)A(FF,FF,FF,FF)A(FF,B9,3D,00)A(FF,C0,C0,C0)A(FF,C0,C0,C0)A(FF,C0,C0,C0)A(FF,FF,FF,FF)A(FF,C0,C0,C0)A(FF,00,00,00) + A(FF,B9,3D,00)A(FF,FF,FF,FF)A(FF,FF,FF,FF)A(FF,B9,3D,00)A(FF,B9,3D,00)A(FF,B9,3D,00)A(FF,FF,FF,FF)A(FF,FF,FF,FF)A(FF,FF,FF,FF)A(FF,B9,3D,00)A(FF,FF,FF,FF)A(FF,19,50,00)A(FF,FF,FF,FF)A(FF,FF,FF,FF)A(FF,C0,C0,C0)A(FF,00,00,00)A(FF,B9,3D,00)A(FF,FF,FF,FF)A(FF,FF,FF,FF)A(FF,B9,3D,00)A(FF,B9,3D,00)A(FF,B9,3D,00)A(FF,B9,3D,00)A(FF,B9,3D,00)A(FF,FF,FF,FF)A(FF,B9,3D,00)A(FF,19,50,00)A(FF,00,00,00)A(FF,C0,C0,C0)A(FF,FF,FF,FF)A(FF,C0,C0,C0)A(FF,00,00,00)A(FF,B9,3D,00)A(FF,FF,FF,FF)A(FF,FF,FF,FF)A(FF,B9,3D,00)A(FF,B9,3D,00)A(FF,B9,3D,00)A(FF,B9,3D,00)A(FF,B9,3D,00)A(FF,FF,FF,FF)A(FF,19,50,00)A(FF,31,96,00)A(FF,00,00,00)A(FF,FF,FF,FF)A(FF,FF,FF,FF)A(FF,C0,C0,C0)A(FF,00,00,00)A(FF,B9,3D,00)A(FF,FF,FF,FF)A(FF,19,50,00)A(FF,B9,3D,00)A(FF,B9,3D,00)A(FF,B9,3D,00)A(FF,FF,FF,FF)A(FF,FF,FF,FF)A(FF,19,50,00)A(FF,31,96,00)A(FF,31,96,00)A(FF,00,00,00)A(FF,C0,C0,C0)A(FF,FF,FF,FF)A(FF,C0,C0,C0)A(FF,00,00,00)A(FF,B9,3D,00)A(FF,FF,FF,FF)A(FF,19,50,00)A(FF,19,50,00)A(FF,FF,FF,FF)A(FF,FF,FF,FF)A(FF,FF,FF,FF)A(FF,19,50,00)A(FF,31,96,00)A(FF,31,96,00)A(FF,25,73,00)A(FF,00,00,00)A(FF,FF,FF,FF)A(FF,FF,FF,FF)A(FF,C0,C0,C0)A(FF,00,00,00) + A(FF,B9,3D,00)A(FF,FF,FF,FF)A(FF,19,50,00)A(FF,31,96,00)A(FF,19,50,00)A(FF,FF,FF,FF)A(FF,19,50,00)A(FF,31,96,00)A(FF,31,96,00)A(FF,25,73,00)A(FF,00,00,00)A(FF,C0,C0,C0)A(FF,C0,C0,C0)A(FF,FF,FF,FF)A(FF,C0,C0,C0)A(FF,00,00,00)A(FF,B9,3D,00)A(FF,B9,3D,00)A(FF,19,50,00)A(FF,31,96,00)A(FF,31,96,00)A(FF,19,50,00)A(FF,31,96,00)A(FF,31,96,00)A(FF,25,73,00)A(FF,00,00,00)A(FF,FF,FF,FF)A(FF,FF,FF,FF)A(FF,FF,FF,FF)A(FF,FF,FF,FF)A(FF,C0,C0,C0)A(FF,00,00,00)A(00,00,00,00)A(00,00,00,00)A(FF,00,00,00)A(FF,31,96,00)A(FF,31,96,00)A(FF,31,96,00)A(FF,31,96,00)A(FF,25,73,00)A(FF,00,00,00)A(FF,C0,C0,C0)A(FF,C0,C0,C0)A(FF,C0,C0,C0)A(FF,C0,C0,C0)A(FF,FF,FF,FF)A(FF,C0,C0,C0)A(FF,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(FF,00,00,00)A(FF,31,96,00)A(FF,31,96,00)A(FF,25,73,00)A(FF,00,00,00)A(FF,FF,FF,FF)A(FF,FF,FF,FF)A(FF,FF,FF,FF)A(FF,FF,FF,FF)A(FF,FF,FF,FF)A(FF,FF,FF,FF)A(FF,C0,C0,C0)A(FF,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(FF,80,80,80)A(FF,00,00,00)A(FF,25,73,00)A(FF,00,00,00)A(FF,C0,C0,C0)A(FF,C0,C0,C0)A(FF,C0,C0,C0)A(FF,C0,C0,C0)A(FF,C0,C0,C0)A(FF,C0,C0,C0)A(FF,C0,C0,C0)A(FF,C0,C0,C0)A(FF,00,00,00) + A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00); + memcpy ((EIF_NATURAL_32 *)$a_ptr + $a_offset, &l_data, sizeof l_data - 1); + } + }" + end + + build_colors (a_ptr: POINTER) + -- Build `colors'. + do + c_colors_0 (a_ptr, 0) + end + +feature {NONE} -- Image data filling. + + fill_memory + -- Fill image data into memory. + local + l_pointer: POINTER + do + if attached {EV_PIXEL_BUFFER_IMP} implementation as l_imp then + l_pointer := l_imp.data_ptr + if not l_pointer.is_default_pointer then + build_colors (l_pointer) + l_imp.unlock + end + end + end + +end -- ICON_CHECK_EXPORTS_COLOR diff --git a/jj_vision/bitmaps/icon_close_color.e b/jj_vision/bitmaps/icon_close_color.e new file mode 100644 index 0000000..a95e4e8 --- /dev/null +++ b/jj_vision/bitmaps/icon_close_color.e @@ -0,0 +1,70 @@ +note + description: "Pixel buffer that replaces original image file.% + %The original version of this class has been generated by Image Eiffel Code." + +class + ICON_CLOSE_COLOR + +inherit + EV_PIXEL_BUFFER + +create + make + +feature {NONE} -- Initialization + + make + -- Initialization + do + make_with_size (8, 8) + fill_memory + end + +feature {NONE} -- Image data + + c_colors_0 (a_ptr: POINTER; a_offset: INTEGER) + -- Fill `a_ptr' with colors data from `a_offset'. + external + "C inline" + alias + "{ + { + #define B(q) \ + #q + #ifdef EIF_WINDOWS + #define A(a,r,g,b) \ + B(\x##b\x##g\x##r\x##a) + #else + #define A(a,r,g,b) \ + B(\x##r\x##g\x##b\x##a) + #endif + char l_data[] = + A(FF,00,00,00)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,00)A(FF,00,00,00)A(00,01,01,01)A(FF,00,00,00)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,00)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,80)A(FF,00,00,80)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,00)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,00)A(FF,00,00,00)A(00,01,01,01)A(FF,00,00,00)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,00)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01); + memcpy ((EIF_NATURAL_32 *)$a_ptr + $a_offset, &l_data, sizeof l_data - 1); + } + }" + end + + build_colors (a_ptr: POINTER) + -- Build `colors'. + do + c_colors_0 (a_ptr, 0) + end + +feature {NONE} -- Image data filling. + + fill_memory + -- Fill image data into memory. + local + l_pointer: POINTER + do + check attached {EV_PIXEL_BUFFER_IMP} implementation as l_imp then + l_pointer := l_imp.data_ptr + if l_pointer /= default_pointer then + build_colors (l_pointer) + l_imp.unlock + end + end + end + +end -- ICON_CLOSE_COLOR diff --git a/jj_vision/bitmaps/icon_delete_color.e b/jj_vision/bitmaps/icon_delete_color.e new file mode 100644 index 0000000..97922fe --- /dev/null +++ b/jj_vision/bitmaps/icon_delete_color.e @@ -0,0 +1,73 @@ +note + description: "Pixel buffer that replaces original image file.% + %The original version of this class has been generated by Image Eiffel Code." + +class + ICON_DELETE_COLOR + +inherit + EV_PIXEL_BUFFER + +create + make + +feature {NONE} -- Initialization + + make + -- Initialization + do + make_with_size (16, 16) + fill_memory + end + +feature {NONE} -- Image data + + c_colors_0 (a_ptr: POINTER; a_offset: INTEGER) + -- Fill `a_ptr' with colors data from `a_offset'. + external + "C inline" + alias + "{ + { + #define B(q) \ + #q + #ifdef EIF_WINDOWS + #define A(a,r,g,b) \ + B(\x##b\x##g\x##r\x##a) + #else + #define A(a,r,g,b) \ + B(\x##r\x##g\x##b\x##a) + #endif + char l_data[] = + A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,F9,00,00)A(FF,7F,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,7F,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,FF,69,28)A(FF,FF,56,12)A(FF,F9,00,00)A(FF,7F,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,DC,00,00)A(FF,7F,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,DC,00,00)A(FF,FF,69,28)A(FF,F9,00,00)A(FF,7F,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,DC,00,00)A(FF,7F,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,DC,00,00)A(FF,DC,00,00)A(FF,F9,00,00)A(FF,7F,00,00)A(00,01,01,01)A(00,01,01,01)A(FF,DC,00,00)A(FF,7F,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01) + A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,DC,00,00)A(FF,F9,00,00)A(FF,7F,00,00)A(FF,DC,00,00)A(FF,7F,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,DC,00,00)A(FF,F9,00,00)A(FF,7F,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,DC,00,00)A(FF,F9,00,00)A(FF,7F,00,00)A(FF,7F,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,DC,00,00)A(FF,7F,00,00)A(00,01,01,01)A(00,01,01,01)A(FF,F9,00,00)A(FF,7F,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,DC,00,00)A(FF,7F,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,F9,00,00)A(FF,7F,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01) + A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,DC,00,00)A(FF,7F,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,F9,00,00)A(FF,7F,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,FF,2A,2B)A(FF,FF,69,28)A(FF,7F,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,F9,00,00)A(FF,7F,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,FF,2A,2B)A(FF,FF,69,28)A(FF,7F,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,7F,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,7F,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01) + A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01); + memcpy ((EIF_NATURAL_32 *)$a_ptr + $a_offset, &l_data, sizeof l_data - 1); + } + }" + end + + build_colors (a_ptr: POINTER) + -- Build `colors'. + do + c_colors_0 (a_ptr, 0) + end + +feature {NONE} -- Image data filling. + + fill_memory + -- Fill image data into memory. + local + l_pointer: POINTER + do + check attached {EV_PIXEL_BUFFER_IMP} implementation as l_imp then + l_pointer := l_imp.data_ptr + if l_pointer /= default_pointer then + build_colors (l_pointer) + l_imp.unlock + end + end + end + +end -- ICON_DELETE_COLOR diff --git a/jj_vision/bitmaps/icon_edit_expression_color.e b/jj_vision/bitmaps/icon_edit_expression_color.e new file mode 100644 index 0000000..e3c52f8 --- /dev/null +++ b/jj_vision/bitmaps/icon_edit_expression_color.e @@ -0,0 +1,70 @@ +note + description: "Pixel buffer that replaces original image file.% + %The original version of this class has been generated by Image Eiffel Code." + +class + ICON_EDIT_EXPRESSION_COLOR + +inherit + EV_PIXEL_BUFFER + +create + make + +feature {NONE} -- Initialization + + make + -- Initialization + do + make_with_size (8, 8) + fill_memory + end + +feature {NONE} -- Image data + + c_colors_0 (a_ptr: POINTER; a_offset: INTEGER) + -- Fill `a_ptr' with colors data from `a_offset'. + external + "C inline" + alias + "{ + { + #define B(q) \ + #q + #ifdef EIF_WINDOWS + #define A(a,r,g,b) \ + B(\x##b\x##g\x##r\x##a) + #else + #define A(a,r,g,b) \ + B(\x##r\x##g\x##b\x##a) + #endif + char l_data[] = + A(00,01,01,01)A(00,01,01,01)A(FF,6E,6E,6E)A(FF,6E,6E,6E)A(FF,6E,6E,6E)A(00,01,01,01)A(FF,56,56,56)A(00,01,01,01)A(00,01,01,01)A(FF,6E,6E,6E)A(FF,56,56,56)A(FF,56,56,56)A(FF,56,56,56)A(FF,32,32,32)A(FF,56,56,56)A(00,01,01,01)A(FF,6E,6E,6E)A(FF,32,32,32)A(FF,32,32,32)A(FF,32,32,32)A(FF,32,32,32)A(00,01,01,01)A(FF,32,32,32)A(00,01,01,01)A(FF,32,32,32)A(00,01,01,01)A(00,01,01,01)A(FF,96,62,00)A(FF,73,4A,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,96,62,00)A(FF,73,4A,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,96,62,00)A(FF,73,4A,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,96,62,00)A(FF,73,4A,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,96,62,00)A(FF,73,4A,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01); + memcpy ((EIF_NATURAL_32 *)$a_ptr + $a_offset, &l_data, sizeof l_data - 1); + } + }" + end + + build_colors (a_ptr: POINTER) + -- Build `colors'. + do + c_colors_0 (a_ptr, 0) + end + +feature {NONE} -- Image data filling. + + fill_memory + -- Fill image data into memory. + local + l_pointer: POINTER + do + if attached {EV_PIXEL_BUFFER_IMP} implementation as l_imp then + l_pointer := l_imp.data_ptr + if not l_pointer.is_default_pointer then + build_colors (l_pointer) + l_imp.unlock + end + end + end + +end -- ICON_EDIT_EXPRESSION_COLOR diff --git a/jj_vision/bitmaps/icon_folders_color.e b/jj_vision/bitmaps/icon_folders_color.e new file mode 100644 index 0000000..d0e8ca4 --- /dev/null +++ b/jj_vision/bitmaps/icon_folders_color.e @@ -0,0 +1,74 @@ +note + description: "Pixel buffer that replaces original image file.% + %The original version of this class has been generated by Image Eiffel Code." + +class + ICON_FOLDERS_COLOR + +inherit + EV_PIXEL_BUFFER + +create + make + +feature {NONE} -- Initialization + + make + -- Initialization + do + make_with_size (20, 20) + fill_memory + end + +feature {NONE} -- Image data + + c_colors_0 (a_ptr: POINTER; a_offset: INTEGER) + -- Fill `a_ptr' with colors data from `a_offset'. + external + "C inline" + alias + "{ + { + #define B(q) \ + #q + #ifdef EIF_WINDOWS + #define A(a,r,g,b) \ + B(\x##b\x##g\x##r\x##a) + #else + #define A(a,r,g,b) \ + B(\x##r\x##g\x##b\x##a) + #endif + char l_data[] = + A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,66,66,00)A(FF,66,66,00)A(FF,66,66,00)A(FF,66,66,00)A(FF,66,66,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,66,66,00)A(FF,FF,FB,F0)A(FF,FF,FF,99)A(FF,FF,FF,99)A(FF,FF,FF,99)A(FF,CC,CC,99)A(FF,04,04,04)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,66,66,00)A(FF,66,66,00)A(FF,66,66,00)A(FF,66,66,00)A(FF,66,66,00)A(FF,66,66,00)A(FF,66,66,00)A(FF,66,66,00)A(FF,66,66,00)A(FF,66,66,00)A(FF,66,66,00)A(FF,66,66,00)A(FF,66,66,00)A(FF,66,66,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01) + A(00,01,01,01)A(FF,66,66,00)A(FF,FF,FF,99)A(FF,FF,FF,99)A(FF,FF,FF,99)A(FF,FF,FF,99)A(FF,FF,FF,99)A(FF,FF,FF,99)A(FF,FF,FF,99)A(FF,FF,FF,99)A(FF,FF,FF,99)A(FF,FF,FF,99)A(FF,FF,FF,99)A(FF,FF,FF,99)A(FF,FF,FF,99)A(FF,04,04,04)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,66,66,00)A(FF,FF,FF,99)A(FF,FF,CC,00)A(FF,FF,FF,FF)A(FF,FF,CC,00)A(FF,FF,FF,FF)A(FF,FF,CC,00)A(FF,FF,FF,99)A(FF,FF,CC,00)A(FF,FF,CC,00)A(FF,FF,CC,00)A(FF,FF,CC,00)A(FF,FF,CC,00)A(FF,CC,99,00)A(FF,04,04,04)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,66,66,00)A(FF,FF,FF,99)A(FF,FF,FF,FF)A(FF,FF,CC,00)A(FF,FF,FF,FF)A(FF,66,66,00)A(FF,66,66,00)A(FF,66,66,00)A(FF,66,66,00)A(FF,66,66,00)A(FF,FF,CC,00)A(FF,FF,CC,00)A(FF,FF,CC,00)A(FF,CC,99,00)A(FF,04,04,04)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,66,66,00)A(FF,FF,FF,99)A(FF,FF,CC,00)A(FF,FF,FF,FF)A(FF,66,66,00)A(FF,FF,FB,F0)A(FF,FF,FF,99)A(FF,FF,FF,99)A(FF,FF,FF,99)A(FF,CC,CC,99)A(FF,04,04,04)A(FF,FF,CC,00)A(FF,CC,99,00)A(FF,CC,99,00)A(FF,04,04,04)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01) + A(00,01,01,01)A(FF,66,66,00)A(FF,FF,FF,99)A(FF,FF,FF,FF)A(FF,66,66,00)A(FF,66,66,00)A(FF,66,66,00)A(FF,66,66,00)A(FF,66,66,00)A(FF,66,66,00)A(FF,66,66,00)A(FF,66,66,00)A(FF,66,66,00)A(FF,66,66,00)A(FF,66,66,00)A(FF,66,66,00)A(FF,66,66,00)A(FF,66,66,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,66,66,00)A(FF,FF,FF,99)A(FF,FF,CC,00)A(FF,66,66,00)A(FF,FF,FF,99)A(FF,FF,FF,99)A(FF,FF,FF,99)A(FF,FF,FF,99)A(FF,FF,FF,99)A(FF,FF,FF,99)A(FF,FF,FF,99)A(FF,FF,FF,99)A(FF,FF,FF,99)A(FF,FF,FF,99)A(FF,FF,FF,99)A(FF,FF,FF,99)A(FF,FF,FF,99)A(FF,04,04,04)A(00,01,01,01)A(00,01,01,01)A(FF,66,66,00)A(FF,FF,FF,99)A(FF,FF,FF,99)A(FF,66,66,00)A(FF,FF,FF,99)A(FF,FF,CC,00)A(FF,FF,FF,FF)A(FF,FF,CC,00)A(FF,FF,FF,FF)A(FF,FF,CC,00)A(FF,FF,FF,99)A(FF,FF,CC,00)A(FF,FF,CC,00)A(FF,FF,CC,00)A(FF,FF,CC,00)A(FF,FF,CC,00)A(FF,CC,99,00)A(FF,04,04,04)A(00,01,01,01)A(00,01,01,01)A(FF,66,66,00)A(FF,FF,FF,99)A(FF,FF,CC,00)A(FF,66,66,00)A(FF,FF,FF,99)A(FF,FF,FF,FF)A(FF,FF,CC,00)A(FF,FF,FF,FF)A(FF,FF,CC,00)A(FF,FF,FF,99)A(FF,FF,CC,00)A(FF,FF,FF,99)A(FF,FF,CC,00)A(FF,FF,CC,00)A(FF,FF,CC,00)A(FF,FF,CC,00)A(FF,CC,99,00)A(FF,04,04,04)A(00,01,01,01) + A(00,01,01,01)A(FF,66,66,00)A(FF,FF,FF,99)A(FF,FF,FF,99)A(FF,66,66,00)A(FF,FF,FF,99)A(FF,FF,CC,00)A(FF,FF,FF,FF)A(FF,FF,CC,00)A(FF,FF,FF,99)A(FF,FF,CC,00)A(FF,FF,FF,99)A(FF,FF,CC,00)A(FF,FF,CC,00)A(FF,FF,CC,00)A(FF,FF,CC,00)A(FF,CC,99,00)A(FF,CC,99,00)A(FF,04,04,04)A(00,01,01,01)A(00,01,01,01)A(FF,04,04,04)A(FF,04,04,04)A(FF,04,04,04)A(FF,66,66,00)A(FF,FF,FF,99)A(FF,FF,FF,FF)A(FF,FF,CC,00)A(FF,FF,FF,99)A(FF,FF,CC,00)A(FF,FF,FF,99)A(FF,FF,CC,00)A(FF,FF,CC,00)A(FF,FF,CC,00)A(FF,FF,CC,00)A(FF,CC,99,00)A(FF,FF,CC,00)A(FF,CC,99,00)A(FF,04,04,04)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,66,66,00)A(FF,FF,FF,99)A(FF,FF,CC,00)A(FF,FF,FF,99)A(FF,FF,CC,00)A(FF,FF,FF,99)A(FF,FF,CC,00)A(FF,FF,CC,00)A(FF,FF,CC,00)A(FF,FF,CC,00)A(FF,CC,99,00)A(FF,FF,CC,00)A(FF,CC,99,00)A(FF,CC,99,00)A(FF,04,04,04)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,66,66,00)A(FF,FF,FF,99)A(FF,FF,FF,99)A(FF,FF,CC,00)A(FF,FF,FF,99)A(FF,FF,CC,00)A(FF,FF,CC,00)A(FF,FF,CC,00)A(FF,FF,CC,00)A(FF,CC,99,00)A(FF,FF,CC,00)A(FF,CC,99,00)A(FF,FF,CC,00)A(FF,CC,99,00)A(FF,04,04,04)A(00,01,01,01) + A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,66,66,00)A(FF,FF,FF,99)A(FF,FF,CC,00)A(FF,FF,FF,99)A(FF,FF,CC,00)A(FF,FF,CC,00)A(FF,FF,CC,00)A(FF,FF,CC,00)A(FF,CC,99,00)A(FF,FF,CC,00)A(FF,CC,99,00)A(FF,FF,CC,00)A(FF,CC,99,00)A(FF,CC,99,00)A(FF,04,04,04)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,66,66,00)A(FF,FF,FF,99)A(FF,FF,FF,99)A(FF,FF,CC,00)A(FF,FF,CC,00)A(FF,FF,CC,00)A(FF,FF,CC,00)A(FF,CC,99,00)A(FF,FF,CC,00)A(FF,CC,99,00)A(FF,FF,CC,00)A(FF,CC,99,00)A(FF,CC,99,00)A(FF,CC,99,00)A(FF,04,04,04)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,04,04,04)A(FF,04,04,04)A(FF,04,04,04)A(FF,04,04,04)A(FF,04,04,04)A(FF,04,04,04)A(FF,04,04,04)A(FF,04,04,04)A(FF,04,04,04)A(FF,04,04,04)A(FF,04,04,04)A(FF,04,04,04)A(FF,04,04,04)A(FF,04,04,04)A(FF,04,04,04)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01); + memcpy ((EIF_NATURAL_32 *)$a_ptr + $a_offset, &l_data, sizeof l_data - 1); + } + }" + end + + build_colors (a_ptr: POINTER) + -- Build `colors'. + do + c_colors_0 (a_ptr, 0) + end + +feature {NONE} -- Image data filling. + + fill_memory + -- Fill image data into memory. + local + l_pointer: POINTER + do + check attached {EV_PIXEL_BUFFER_IMP} implementation as l_imp then + l_pointer := l_imp.data_ptr + if l_pointer /= default_pointer then + build_colors (l_pointer) + l_imp.unlock + end + end + end + +end -- ICON_FOLDERS_COLOR diff --git a/jj_vision/bitmaps/icon_format_exporteds_color.e b/jj_vision/bitmaps/icon_format_exporteds_color.e new file mode 100644 index 0000000..42b5dcb --- /dev/null +++ b/jj_vision/bitmaps/icon_format_exporteds_color.e @@ -0,0 +1,73 @@ +note + description: "Pixel buffer that replaces original image file.% + %The original version of this class has been generated by Image Eiffel Code." + +class + ICON_FORMAT_EXPORTEDS_COLOR + +inherit + EV_PIXEL_BUFFER + +create + make + +feature {NONE} -- Initialization + + make + -- Initialization + do + make_with_size (16, 16) + fill_memory + end + +feature {NONE} -- Image data + + c_colors_0 (a_ptr: POINTER; a_offset: INTEGER) + -- Fill `a_ptr' with colors data from `a_offset'. + external + "C inline" + alias + "{ + { + #define B(q) \ + #q + #ifdef EIF_WINDOWS + #define A(a,r,g,b) \ + B(\x##b\x##g\x##r\x##a) + #else + #define A(a,r,g,b) \ + B(\x##r\x##g\x##b\x##a) + #endif + char l_data[] = + A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(00,01,01,01)A(FF,00,00,80)A(FF,00,00,80)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,80)A(FF,00,00,80)A(00,01,01,01)A(FF,00,00,80)A(00,01,01,01)A(FF,00,00,80)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,80)A(00,01,01,01)A(FF,00,00,80)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,80)A(00,01,01,01)A(00,01,01,01)A(FF,00,96,31)A(FF,00,96,31)A(FF,00,50,00)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,80)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01) + A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,96,31)A(FF,00,80,00)A(FF,00,50,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,96,31)A(FF,00,80,00)A(FF,00,50,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,96,31)A(FF,00,96,31)A(FF,00,96,31)A(FF,00,96,31)A(FF,00,80,00)A(FF,00,80,00)A(FF,00,80,00)A(FF,00,80,00)A(FF,00,50,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,96,31)A(FF,00,80,00)A(FF,00,80,00)A(FF,00,80,00)A(FF,00,80,00)A(FF,00,80,00)A(FF,00,80,00)A(FF,00,80,00)A(FF,00,50,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,50,00)A(FF,00,50,00)A(FF,00,50,00)A(FF,00,80,00)A(FF,00,80,00)A(FF,00,50,00)A(FF,00,50,00)A(FF,00,50,00)A(FF,00,50,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01) + A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,80,00)A(FF,00,80,00)A(FF,00,50,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,80,00)A(FF,00,80,00)A(FF,00,50,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,80)A(00,01,01,01)A(00,01,01,01)A(FF,00,50,00)A(FF,00,50,00)A(FF,00,50,00)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,80)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,80)A(00,01,01,01)A(FF,00,00,80)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,80)A(00,01,01,01)A(FF,00,00,80)A(00,01,01,01)A(FF,00,00,80)A(FF,00,00,80)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,80)A(FF,00,00,80)A(00,01,01,01) + A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(00,01,01,01); + memcpy ((EIF_NATURAL_32 *)$a_ptr + $a_offset, &l_data, sizeof l_data - 1); + } + }" + end + + build_colors (a_ptr: POINTER) + -- Build `colors'. + do + c_colors_0 (a_ptr, 0) + end + +feature {NONE} -- Image data filling. + + fill_memory + -- Fill image data into memory. + local + l_pointer: POINTER + do + if attached {EV_PIXEL_BUFFER_IMP} implementation as l_imp then + l_pointer := l_imp.data_ptr + if not l_pointer.is_default_pointer then + build_colors (l_pointer) + l_imp.unlock + end + end + end + +end -- ICON_FORMAT_EXPORTEDS_COLOR diff --git a/jj_vision/bitmaps/icon_format_text_color.e b/jj_vision/bitmaps/icon_format_text_color.e new file mode 100644 index 0000000..c181a59 --- /dev/null +++ b/jj_vision/bitmaps/icon_format_text_color.e @@ -0,0 +1,73 @@ +note + description: "Pixel buffer that replaces original image file.% + %The original version of this class has been generated by Image Eiffel Code." + +class + ICON_FORMAT_TEXT_COLOR + +inherit + EV_PIXEL_BUFFER + +create + make + +feature {NONE} -- Initialization + + make + -- Initialization + do + make_with_size (16, 16) + fill_memory + end + +feature {NONE} -- Image data + + c_colors_0 (a_ptr: POINTER; a_offset: INTEGER) + -- Fill `a_ptr' with colors data from `a_offset'. + external + "C inline" + alias + "{ + { + #define B(q) \ + #q + #ifdef EIF_WINDOWS + #define A(a,r,g,b) \ + B(\x##b\x##g\x##r\x##a) + #else + #define A(a,r,g,b) \ + B(\x##r\x##g\x##b\x##a) + #endif + char l_data[] = + A(00,01,01,01)A(FF,62,62,62)A(FF,62,62,62)A(FF,62,62,62)A(FF,62,62,62)A(FF,62,62,62)A(FF,62,62,62)A(FF,62,62,62)A(FF,62,62,62)A(FF,62,62,62)A(FF,62,62,62)A(FF,62,62,62)A(FF,62,62,62)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,62,62,62)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,62,62,62)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,62,62,62)A(FF,F2,F2,F2)A(FF,4A,4A,4A)A(FF,4A,4A,4A)A(FF,4A,4A,4A)A(FF,4A,4A,4A)A(FF,4A,4A,4A)A(FF,4A,4A,4A)A(FF,4A,4A,4A)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,62,62,62)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01) + A(00,01,01,01)A(FF,62,62,62)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,4A,4A,4A)A(FF,4A,4A,4A)A(FF,4A,4A,4A)A(FF,4A,4A,4A)A(FF,4A,4A,4A)A(FF,4A,4A,4A)A(FF,4A,4A,4A)A(FF,E6,E6,E6)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,62,62,62)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,E6,E6,E6)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,62,62,62)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,4A,4A,4A)A(FF,4A,4A,4A)A(FF,4A,4A,4A)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,E6,E6,E6)A(FF,F2,F2,F2)A(FF,E6,E6,E6)A(FF,E6,E6,E6)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,62,62,62)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,E6,E6,E6)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,E6,E6,E6)A(FF,E6,E6,E6)A(FF,E6,E6,E6)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,62,62,62)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,4A,4A,4A)A(FF,4A,4A,4A)A(FF,4A,4A,4A)A(FF,4A,4A,4A)A(FF,4A,4A,4A)A(FF,E6,E6,E6)A(FF,E6,E6,E6)A(FF,E6,E6,E6)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01) + A(00,01,01,01)A(FF,62,62,62)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,E6,E6,E6)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,E6,E6,E6)A(FF,E6,E6,E6)A(FF,E6,E6,E6)A(FF,E6,E6,E6)A(FF,DA,DA,DB)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,62,62,62)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,E6,E6,E6)A(FF,4A,4A,4A)A(FF,4A,4A,4A)A(FF,4A,4A,4A)A(FF,4A,4A,4A)A(FF,4A,4A,4A)A(FF,4A,4A,4A)A(FF,DA,DA,DB)A(FF,DA,DA,DB)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,62,62,62)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,E6,E6,E6)A(FF,E6,E6,E6)A(FF,E6,E6,E6)A(FF,E6,E6,E6)A(FF,E6,E6,E6)A(FF,DA,DA,DB)A(FF,E6,E6,E6)A(FF,DA,DA,DB)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,62,62,62)A(FF,F2,F2,F2)A(FF,E6,E6,E6)A(FF,4A,4A,4A)A(FF,4A,4A,4A)A(FF,4A,4A,4A)A(FF,E6,E6,E6)A(FF,DA,DA,DB)A(FF,DA,DA,DB)A(FF,DA,DA,DB)A(FF,DA,DA,DB)A(FF,DA,DA,DB)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,62,62,62)A(FF,F2,F2,F2)A(FF,E6,E6,E6)A(FF,E6,E6,E6)A(FF,E6,E6,E6)A(FF,DA,DA,DB)A(FF,DA,DA,DB)A(FF,DA,DA,DB)A(FF,DA,DA,DB)A(FF,DA,DA,DB)A(FF,DA,DA,DB)A(FF,DA,DA,DB)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01) + A(00,01,01,01)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01); + memcpy ((EIF_NATURAL_32 *)$a_ptr + $a_offset, &l_data, sizeof l_data - 1); + } + }" + end + + build_colors (a_ptr: POINTER) + -- Build `colors'. + do + c_colors_0 (a_ptr, 0) + end + +feature {NONE} -- Image data filling. + + fill_memory + -- Fill image data into memory. + local + l_pointer: POINTER + do + check attached {EV_PIXEL_BUFFER_IMP} implementation as l_imp then + l_pointer := l_imp.data_ptr + if l_pointer /= default_pointer then + build_colors (l_pointer) + l_imp.unlock + end + end + end + +end -- ICON_FORMAT_TEXT_COLOR diff --git a/jj_vision/bitmaps/icon_forth_color.e b/jj_vision/bitmaps/icon_forth_color.e new file mode 100644 index 0000000..d29acde --- /dev/null +++ b/jj_vision/bitmaps/icon_forth_color.e @@ -0,0 +1,73 @@ +note + description: "Pixel buffer that replaces original image file.% + %The original version of this class has been generated by Image Eiffel Code." + +class + ICON_FORTH_COLOR + +inherit + EV_PIXEL_BUFFER + +create + make + +feature {NONE} -- Initialization + + make + -- Initialization + do + make_with_size (16, 16) + fill_memory + end + +feature {NONE} -- Image data + + c_colors_0 (a_ptr: POINTER; a_offset: INTEGER) + -- Fill `a_ptr' with colors data from `a_offset'. + external + "C inline" + alias + "{ + { + #define B(q) \ + #q + #ifdef EIF_WINDOWS + #define A(a,r,g,b) \ + B(\x##b\x##g\x##r\x##a) + #else + #define A(a,r,g,b) \ + B(\x##r\x##g\x##b\x##a) + #endif + char l_data[] = + A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,33,66,FF)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,33,66,FF)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,33,66,FF)A(FF,33,CC,FF)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,33,66,FF)A(FF,CC,FF,FF)A(FF,33,CC,FF)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01) + A(00,01,01,01)A(FF,33,66,FF)A(FF,33,66,FF)A(FF,33,66,FF)A(FF,33,66,FF)A(FF,33,66,FF)A(FF,33,66,FF)A(FF,33,66,FF)A(FF,33,66,FF)A(FF,33,66,FF)A(FF,CC,FF,FF)A(FF,99,FF,FF)A(FF,33,CC,FF)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,33,66,FF)A(FF,CC,FF,FF)A(FF,CC,FF,FF)A(FF,CC,FF,FF)A(FF,CC,FF,FF)A(FF,CC,FF,FF)A(FF,CC,FF,FF)A(FF,CC,FF,FF)A(FF,CC,FF,FF)A(FF,CC,FF,FF)A(FF,33,CC,FF)A(FF,99,FF,FF)A(FF,33,CC,FF)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(FF,33,66,FF)A(FF,CC,FF,FF)A(FF,33,CC,FF)A(FF,33,CC,FF)A(FF,33,CC,FF)A(FF,33,CC,FF)A(FF,33,CC,FF)A(FF,33,CC,FF)A(FF,33,CC,FF)A(FF,33,CC,FF)A(FF,33,CC,FF)A(FF,33,CC,FF)A(FF,33,CC,FF)A(FF,33,66,FF)A(FF,00,00,00)A(00,01,01,01)A(FF,33,66,FF)A(FF,33,99,FF)A(FF,33,99,FF)A(FF,33,99,FF)A(FF,33,99,FF)A(FF,33,99,FF)A(FF,33,99,FF)A(FF,33,99,FF)A(FF,33,99,FF)A(FF,33,99,FF)A(FF,33,CC,FF)A(FF,33,CC,FF)A(FF,33,66,FF)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,33,99,FF)A(FF,33,CC,FF)A(FF,33,66,FF)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01) + A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,00)A(FF,33,99,FF)A(FF,33,66,FF)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,00)A(FF,33,66,FF)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,00)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01) + A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01); + memcpy ((EIF_NATURAL_32 *)$a_ptr + $a_offset, &l_data, sizeof l_data - 1); + } + }" + end + + build_colors (a_ptr: POINTER) + -- Build `colors'. + do + c_colors_0 (a_ptr, 0) + end + +feature {NONE} -- Image data filling. + + fill_memory + -- Fill image data into memory. + local + l_pointer: POINTER + do + check attached {EV_PIXEL_BUFFER_IMP} implementation as l_imp then + l_pointer := l_imp.data_ptr + if l_pointer /= default_pointer then + build_colors (l_pointer) + l_imp.unlock + end + end + end + +end -- ICON_FORTH_COLOR diff --git a/jj_vision/bitmaps/icon_help_tool_color.e b/jj_vision/bitmaps/icon_help_tool_color.e new file mode 100644 index 0000000..033b5a0 --- /dev/null +++ b/jj_vision/bitmaps/icon_help_tool_color.e @@ -0,0 +1,73 @@ +note + description: "Pixel buffer that replaces original image file.% + %The original version of this class has been generated by Image Eiffel Code." + +class + ICON_HELP_TOOL_COLOR + +inherit + EV_PIXEL_BUFFER + +create + make + +feature {NONE} -- Initialization + + make + -- Initialization + do + make_with_size (16, 16) + fill_memory + end + +feature {NONE} -- Image data + + c_colors_0 (a_ptr: POINTER; a_offset: INTEGER) + -- Fill `a_ptr' with colors data from `a_offset'. + external + "C inline" + alias + "{ + { + #define B(q) \ + #q + #ifdef EIF_WINDOWS + #define A(a,r,g,b) \ + B(\x##b\x##g\x##r\x##a) + #else + #define A(a,r,g,b) \ + B(\x##r\x##g\x##b\x##a) + #endif + char l_data[] = + A(00,01,01,01)A(00,01,01,01)A(FF,73,4A,00)A(FF,73,4A,00)A(FF,73,4A,00)A(FF,73,4A,00)A(FF,73,4A,00)A(FF,73,4A,00)A(FF,73,4A,00)A(FF,73,4A,00)A(FF,73,4A,00)A(FF,73,4A,00)A(FF,73,4A,00)A(FF,73,4A,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,73,4A,00)A(FF,FF,F0,D4)A(FF,FF,F0,D4)A(FF,FF,F0,D4)A(FF,FF,F0,D4)A(FF,FF,F0,D4)A(FF,FF,F0,D4)A(FF,FF,F0,D4)A(FF,FF,F0,D4)A(FF,FF,F0,D4)A(FF,FF,F0,D4)A(FF,FF,F0,D4)A(FF,FF,F0,D4)A(FF,50,32,00)A(00,01,01,01)A(FF,73,4A,00)A(FF,FF,F0,D4)A(FF,FF,F0,D4)A(FF,FF,F0,D4)A(FF,FF,E2,B1)A(FF,FF,F0,D4)A(FF,FF,E2,B1)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,FF,E2,B1)A(FF,FF,E2,B1)A(FF,FF,E2,B1)A(FF,FF,E2,B1)A(FF,FF,D4,8E)A(FF,50,32,00)A(FF,73,4A,00)A(FF,FF,F0,D4)A(FF,FF,F0,D4)A(FF,FF,E2,B1)A(FF,FF,F0,D4)A(FF,FF,E2,B1)A(FF,00,00,00)A(FF,94,83,67)A(FF,FF,E2,B1)A(FF,94,83,67)A(FF,00,00,00)A(FF,FF,E2,B1)A(FF,FF,E2,B1)A(FF,FF,D4,8E)A(FF,FF,D4,8E)A(FF,50,32,00)A(FF,73,4A,00)A(FF,FF,F0,D4)A(FF,FF,F0,D4)A(FF,FF,F0,D4)A(FF,FF,E2,B1)A(FF,FF,E2,B1)A(FF,FF,E2,B1)A(FF,FF,E2,B1)A(FF,FF,E2,B1)A(FF,94,83,67)A(FF,00,00,00)A(FF,FF,E2,B1)A(FF,FF,E2,B1)A(FF,FF,E2,B1)A(FF,FF,D4,8E)A(FF,50,32,00) + A(FF,73,4A,00)A(FF,FF,F0,D4)A(FF,FF,E2,B1)A(FF,FF,E2,B1)A(FF,FF,E2,B1)A(FF,FF,E2,B1)A(FF,FF,E2,B1)A(FF,FF,E2,B1)A(FF,94,83,67)A(FF,00,00,00)A(FF,FF,E2,B1)A(FF,FF,E2,B1)A(FF,FF,E2,B1)A(FF,FF,D4,8E)A(FF,FF,D4,8E)A(FF,50,32,00)A(FF,73,4A,00)A(FF,FF,F0,D4)A(FF,FF,F0,D4)A(FF,FF,E2,B1)A(FF,FF,E2,B1)A(FF,FF,E2,B1)A(FF,FF,E2,B1)A(FF,FF,E2,B1)A(FF,00,00,00)A(FF,FF,E2,B1)A(FF,FF,E2,B1)A(FF,FF,E2,B1)A(FF,FF,D4,8E)A(FF,FF,E2,B1)A(FF,FF,D4,8E)A(FF,50,32,00)A(FF,73,4A,00)A(FF,FF,F0,D4)A(FF,FF,E2,B1)A(FF,FF,E2,B1)A(FF,FF,E2,B1)A(FF,FF,E2,B1)A(FF,FF,E2,B1)A(FF,FF,E2,B1)A(FF,00,00,00)A(FF,FF,E2,B1)A(FF,FF,E2,B1)A(FF,FF,E2,B1)A(FF,FF,E2,B1)A(FF,FF,D4,8E)A(FF,FF,D4,8E)A(FF,50,32,00)A(FF,73,4A,00)A(FF,FF,F0,D4)A(FF,FF,F0,D4)A(FF,FF,E2,B1)A(FF,FF,E2,B1)A(FF,FF,E2,B1)A(FF,FF,E2,B1)A(FF,FF,E2,B1)A(FF,FF,E2,B1)A(FF,FF,E2,B1)A(FF,FF,E2,B1)A(FF,FF,D4,8E)A(FF,FF,D4,8E)A(FF,FF,D4,8E)A(FF,FF,D4,8E)A(FF,50,32,00)A(FF,73,4A,00)A(FF,FF,F0,D4)A(FF,FF,E2,B1)A(FF,FF,E2,B1)A(FF,FF,E2,B1)A(FF,FF,E2,B1)A(FF,FF,E2,B1)A(FF,FF,E2,B1)A(FF,00,00,00)A(FF,FF,E2,B1)A(FF,FF,D4,8E)A(FF,FF,E2,B1)A(FF,FF,D4,8E)A(FF,FF,D4,8E)A(FF,FF,D4,8E)A(FF,50,32,00) + A(00,01,01,01)A(FF,73,4A,00)A(FF,FF,D4,8E)A(FF,FF,D4,8E)A(FF,FF,D4,8E)A(FF,FF,D4,8E)A(FF,FF,D4,8E)A(FF,FF,D4,8E)A(FF,FF,D4,8E)A(FF,FF,D4,8E)A(FF,FF,D4,8E)A(FF,FF,D4,8E)A(FF,FF,D4,8E)A(FF,FF,D4,8E)A(FF,50,32,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,50,32,00)A(FF,50,32,00)A(FF,50,32,00)A(FF,50,32,00)A(FF,50,32,00)A(FF,50,32,00)A(FF,50,32,00)A(FF,FF,F0,D4)A(FF,FF,E2,B1)A(FF,FF,D4,8E)A(FF,50,32,00)A(FF,50,32,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,73,4A,00)A(FF,FF,F0,D4)A(FF,FF,D4,8E)A(FF,50,32,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,73,4A,00)A(FF,FF,D4,8E)A(FF,50,32,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,73,4A,00)A(FF,50,32,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01) + A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,50,32,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01); + memcpy ((EIF_NATURAL_32 *)$a_ptr + $a_offset, &l_data, sizeof l_data - 1); + } + }" + end + + build_colors (a_ptr: POINTER) + -- Build `colors'. + do + c_colors_0 (a_ptr, 0) + end + +feature {NONE} -- Image data filling. + + fill_memory + -- Fill image data into memory. + local + l_pointer: POINTER + do + check attached {EV_PIXEL_BUFFER_IMP} implementation as l_imp then + l_pointer := l_imp.data_ptr + if l_pointer /= default_pointer then + build_colors (l_pointer) + l_imp.unlock + end + end + end + +end -- ICON_HELP_TOOL_COLOR diff --git a/jj_vision/bitmaps/icon_maximize_color.e b/jj_vision/bitmaps/icon_maximize_color.e new file mode 100644 index 0000000..af314a6 --- /dev/null +++ b/jj_vision/bitmaps/icon_maximize_color.e @@ -0,0 +1,70 @@ +note + description: "Pixel buffer that replaces original image file.% + %The original version of this class has been generated by Image Eiffel Code." + +class + ICON_MAXIMIZE_COLOR + +inherit + EV_PIXEL_BUFFER + +create + make + +feature {NONE} -- Initialization + + make + -- Initialization + do + make_with_size (8, 8) + fill_memory + end + +feature {NONE} -- Image data + + c_colors_0 (a_ptr: POINTER; a_offset: INTEGER) + -- Fill `a_ptr' with colors data from `a_offset'. + external + "C inline" + alias + "{ + { + #define B(q) \ + #q + #ifdef EIF_WINDOWS + #define A(a,r,g,b) \ + B(\x##b\x##g\x##r\x##a) + #else + #define A(a,r,g,b) \ + B(\x##r\x##g\x##b\x##a) + #endif + char l_data[] = + A(00,01,01,01)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(00,01,01,01)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(00,01,01,01)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,00)A(00,01,01,01)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,00)A(00,01,01,01)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,00)A(00,01,01,01)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,00)A(00,01,01,01)A(FF,00,00,80)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,80)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01); + memcpy ((EIF_NATURAL_32 *)$a_ptr + $a_offset, &l_data, sizeof l_data - 1); + } + }" + end + + build_colors (a_ptr: POINTER) + -- Build `colors'. + do + c_colors_0 (a_ptr, 0) + end + +feature {NONE} -- Image data filling. + + fill_memory + -- Fill image data into memory. + local + l_pointer: POINTER + do + check attached {EV_PIXEL_BUFFER_IMP} implementation as l_imp then + l_pointer := l_imp.data_ptr + if l_pointer /= default_pointer then + build_colors (l_pointer) + l_imp.unlock + end + end + end + +end -- ICON_MAXIMIZE_COLOR diff --git a/jj_vision/bitmaps/icon_minimize_all_color.e b/jj_vision/bitmaps/icon_minimize_all_color.e new file mode 100644 index 0000000..e7bb1fb --- /dev/null +++ b/jj_vision/bitmaps/icon_minimize_all_color.e @@ -0,0 +1,73 @@ +note + description: "Pixel buffer that replaces original image file.% + %The original version of this class has been generated by Image Eiffel Code." + +class + ICON_MINIMIZE_ALL_COLOR + +inherit + EV_PIXEL_BUFFER + +create + make + +feature {NONE} -- Initialization + + make + -- Initialization + do + make_with_size (16, 16) + fill_memory + end + +feature {NONE} -- Image data + + c_colors_0 (a_ptr: POINTER; a_offset: INTEGER) + -- Fill `a_ptr' with colors data from `a_offset'. + external + "C inline" + alias + "{ + { + #define B(q) \ + #q + #ifdef EIF_WINDOWS + #define A(a,r,g,b) \ + B(\x##b\x##g\x##r\x##a) + #else + #define A(a,r,g,b) \ + B(\x##r\x##g\x##b\x##a) + #endif + char l_data[] = + A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,80)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,00,00,00)A(FF,00,00,80)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,80)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,00,00,00)A(FF,00,00,00)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,6E,6E,6E)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,00,00,00)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,00,00,00) + A(FF,00,00,00)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,6E,6E,6E)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,E6,E6,E6)A(FF,E6,E6,E6)A(FF,E6,E6,E6)A(FF,F2,F2,F2)A(FF,00,00,00)A(FF,6E,6E,6E)A(FF,6E,6E,6E)A(FF,6E,6E,6E)A(FF,00,00,00)A(FF,00,00,00)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,6E,6E,6E)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,00,00,00)A(FF,E6,E6,E6)A(FF,E6,E6,E6)A(FF,DA,DA,DA)A(FF,00,00,00)A(FF,00,00,00)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,6E,6E,6E)A(FF,6E,6E,6E)A(FF,6E,6E,6E)A(FF,6E,6E,6E)A(FF,6E,6E,6E)A(FF,6E,6E,6E)A(FF,6E,6E,6E)A(FF,00,00,00)A(FF,DA,DA,DA)A(FF,DA,DA,DA)A(FF,E6,E6,E6)A(FF,00,00,00)A(FF,00,00,00)A(FF,F2,F2,F2)A(FF,E6,E6,E6)A(FF,E6,E6,E6)A(FF,6E,6E,6E)A(FF,F2,F2,F2)A(FF,E6,E6,E6)A(FF,E6,E6,E6)A(FF,E6,E6,E6)A(FF,E6,E6,E6)A(FF,DA,DA,DA)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,F2,F2,F2)A(FF,E6,E6,E6)A(FF,F2,F2,F2)A(FF,6E,6E,6E)A(FF,E6,E6,E6)A(FF,E6,E6,E6)A(FF,DA,DA,DA)A(FF,DA,DA,DA)A(FF,DA,DA,DA)A(FF,E6,E6,E6)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01) + A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,25,73)A(FF,00,25,73)A(FF,00,25,73)A(FF,00,25,73)A(FF,00,25,73)A(00,01,01,01)A(00,01,01,01)A(FF,00,25,73)A(FF,00,25,73)A(FF,00,25,73)A(FF,00,25,73)A(FF,00,25,73)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,25,73)A(FF,00,25,73)A(FF,00,25,73)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,25,73)A(FF,00,25,73)A(FF,00,25,73)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,25,73)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,25,73)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01) + A(FF,62,62,62)A(FF,62,62,62)A(FF,62,62,62)A(FF,62,62,62)A(FF,62,62,62)A(FF,62,62,62)A(FF,62,62,62)A(FF,62,62,62)A(FF,62,62,62)A(FF,62,62,62)A(FF,62,62,62)A(FF,62,62,62)A(FF,62,62,62)A(FF,62,62,62)A(FF,62,62,62)A(FF,62,62,62); + memcpy ((EIF_NATURAL_32 *)$a_ptr + $a_offset, &l_data, sizeof l_data - 1); + } + }" + end + + build_colors (a_ptr: POINTER) + -- Build `colors'. + do + c_colors_0 (a_ptr, 0) + end + +feature {NONE} -- Image data filling. + + fill_memory + -- Fill image data into memory. + local + l_pointer: POINTER + do + check attached {EV_PIXEL_BUFFER_IMP} implementation as l_imp then + l_pointer := l_imp.data_ptr + if l_pointer /= default_pointer then + build_colors (l_pointer) + l_imp.unlock + end + end + end + +end -- ICON_MINIMIZE_ALL_COLOR diff --git a/jj_vision/bitmaps/icon_minimize_color.e b/jj_vision/bitmaps/icon_minimize_color.e new file mode 100644 index 0000000..bb76e1c --- /dev/null +++ b/jj_vision/bitmaps/icon_minimize_color.e @@ -0,0 +1,70 @@ +note + description: "Pixel buffer that replaces original image file.% + %The original version of this class has been generated by Image Eiffel Code." + +class + ICON_MINIMIZE_COLOR + +inherit + EV_PIXEL_BUFFER + +create + make + +feature {NONE} -- Initialization + + make + -- Initialization + do + make_with_size (8, 8) + fill_memory + end + +feature {NONE} -- Image data + + c_colors_0 (a_ptr: POINTER; a_offset: INTEGER) + -- Fill `a_ptr' with colors data from `a_offset'. + external + "C inline" + alias + "{ + { + #define B(q) \ + #q + #ifdef EIF_WINDOWS + #define A(a,r,g,b) \ + B(\x##b\x##g\x##r\x##a) + #else + #define A(a,r,g,b) \ + B(\x##r\x##g\x##b\x##a) + #endif + char l_data[] = + A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,80)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,80)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01); + memcpy ((EIF_NATURAL_32 *)$a_ptr + $a_offset, &l_data, sizeof l_data - 1); + } + }" + end + + build_colors (a_ptr: POINTER) + -- Build `colors'. + do + c_colors_0 (a_ptr, 0) + end + +feature {NONE} -- Image data filling. + + fill_memory + -- Fill image data into memory. + local + l_pointer: POINTER + do + check attached {EV_PIXEL_BUFFER_IMP} implementation as l_imp then + l_pointer := l_imp.data_ptr + if l_pointer /= default_pointer then + build_colors (l_pointer) + l_imp.unlock + end + end + end + +end -- ICON_MINIMIZE_COLOR diff --git a/jj_vision/bitmaps/icon_new_class_color.e b/jj_vision/bitmaps/icon_new_class_color.e new file mode 100644 index 0000000..a31288a --- /dev/null +++ b/jj_vision/bitmaps/icon_new_class_color.e @@ -0,0 +1,73 @@ +note + description: "Pixel buffer that replaces original image file.% + %The original version of this class has been generated by Image Eiffel Code." + +class + ICON_NEW_CLASS_COLOR + +inherit + EV_PIXEL_BUFFER + +create + make + +feature {NONE} -- Initialization + + make + -- Initialization + do + make_with_size (16, 16) + fill_memory + end + +feature {NONE} -- Image data + + c_colors_0 (a_ptr: POINTER; a_offset: INTEGER) + -- Fill `a_ptr' with colors data from `a_offset'. + external + "C inline" + alias + "{ + { + #define B(q) \ + #q + #ifdef EIF_WINDOWS + #define A(a,r,g,b) \ + B(\x##b\x##g\x##r\x##a) + #else + #define A(a,r,g,b) \ + B(\x##r\x##g\x##b\x##a) + #endif + char l_data[] = + A(FF,FF,FF,00)A(00,01,01,01)A(00,01,01,01)A(FF,80,80,80)A(FF,FF,FF,00)A(00,01,01,01)A(00,01,01,01)A(FF,80,80,80)A(FF,FF,FF,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,80,80,80)A(FF,FF,FF,00)A(00,01,01,01)A(FF,80,80,80)A(FF,FF,FF,00)A(00,01,01,01)A(FF,80,80,80)A(FF,FF,FF,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,80,80,80)A(FF,FF,FF,00)A(FF,80,80,80)A(FF,FF,FF,00)A(FF,80,80,80)A(FF,FF,FF,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,80,80,80)A(FF,FF,FF,00)A(FF,FF,FF,00)A(FF,FF,FF,00)A(FF,00,62,96)A(FF,00,62,96)A(FF,00,62,96)A(FF,00,62,96)A(FF,00,62,96)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,80,80,80)A(FF,FF,FF,00)A(FF,FF,FF,00)A(FF,FF,FF,00)A(FF,00,92,DC)A(FF,00,92,DC)A(FF,00,92,DC)A(FF,00,92,DC)A(FF,00,92,DC)A(FF,00,62,96)A(FF,00,62,96)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01) + A(00,01,01,01)A(FF,80,80,80)A(FF,FF,FF,00)A(FF,80,80,80)A(FF,FF,FF,00)A(FF,80,80,80)A(FF,FF,FF,00)A(FF,00,62,96)A(FF,00,62,96)A(FF,00,62,96)A(FF,00,62,96)A(FF,00,92,DC)A(FF,00,4A,73)A(FF,00,00,73)A(00,01,01,01)A(00,01,01,01)A(FF,80,80,80)A(FF,FF,FF,00)A(FF,00,92,DC)A(FF,80,80,80)A(FF,FF,FF,00)A(FF,00,62,96)A(FF,80,80,80)A(FF,FF,FF,00)A(FF,00,62,96)A(FF,00,62,96)A(FF,00,62,96)A(FF,00,62,96)A(FF,00,62,96)A(FF,00,4A,73)A(FF,00,00,73)A(00,01,01,01)A(FF,FF,FF,00)A(FF,00,62,96)A(FF,00,92,DC)A(FF,80,80,80)A(FF,FF,FF,00)A(FF,00,62,96)A(FF,00,62,96)A(FF,80,80,80)A(FF,00,62,96)A(FF,00,62,96)A(FF,00,62,96)A(FF,00,62,96)A(FF,00,62,96)A(FF,00,4A,73)A(FF,00,00,73)A(00,01,01,01)A(00,01,01,01)A(FF,00,62,96)A(FF,00,92,DC)A(FF,00,62,96)A(FF,00,62,96)A(FF,00,62,96)A(FF,00,62,96)A(FF,00,62,96)A(FF,00,62,96)A(FF,00,62,96)A(FF,00,62,96)A(FF,00,62,96)A(FF,00,62,96)A(FF,00,4A,73)A(FF,00,00,73)A(00,01,01,01)A(00,01,01,01)A(FF,00,62,96)A(FF,00,92,DC)A(FF,00,62,96)A(FF,00,62,96)A(FF,00,62,96)A(FF,00,62,96)A(FF,00,62,96)A(FF,00,62,96)A(FF,00,62,96)A(FF,00,62,96)A(FF,00,62,96)A(FF,00,4A,73)A(FF,00,4A,73)A(FF,00,00,73)A(00,01,01,01) + A(00,01,01,01)A(00,01,01,01)A(FF,00,62,96)A(FF,00,92,DC)A(FF,00,4A,73)A(FF,00,62,96)A(FF,00,62,96)A(FF,00,62,96)A(FF,00,62,96)A(FF,00,62,96)A(FF,00,4A,73)A(FF,00,4A,73)A(FF,00,4A,73)A(FF,00,00,73)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,62,96)A(FF,00,00,73)A(FF,00,4A,73)A(FF,00,4A,73)A(FF,00,4A,73)A(FF,00,4A,73)A(FF,00,4A,73)A(FF,00,4A,73)A(FF,00,00,73)A(FF,00,00,73)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,73)A(FF,00,00,73)A(FF,00,00,73)A(FF,00,00,73)A(FF,00,00,73)A(FF,00,00,73)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01) + A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01); + memcpy ((EIF_NATURAL_32 *)$a_ptr + $a_offset, &l_data, sizeof l_data - 1); + } + }" + end + + build_colors (a_ptr: POINTER) + -- Build `colors'. + do + c_colors_0 (a_ptr, 0) + end + +feature {NONE} -- Image data filling. + + fill_memory + -- Fill image data into memory. + local + l_pointer: POINTER + do + check attached {EV_PIXEL_BUFFER_IMP} implementation as l_imp then + l_pointer := l_imp.data_ptr + if l_pointer /= default_pointer then + build_colors (l_pointer) + l_imp.unlock + end + end + end + +end -- ICON_NEW_CLASS_COLOR diff --git a/jj_vision/bitmaps/icon_new_development_tool_color.e b/jj_vision/bitmaps/icon_new_development_tool_color.e new file mode 100644 index 0000000..2157fec --- /dev/null +++ b/jj_vision/bitmaps/icon_new_development_tool_color.e @@ -0,0 +1,73 @@ +note + description: "Pixel buffer that replaces original image file.% + %The original version of this class has been generated by Image Eiffel Code." + +class + ICON_NEW_DEVELOPMENT_TOOL_COLOR + +inherit + EV_PIXEL_BUFFER + +create + make + +feature {NONE} -- Initialization + + make + -- Initialization + do + make_with_size (16, 16) + fill_memory + end + +feature {NONE} -- Image data + + c_colors_0 (a_ptr: POINTER; a_offset: INTEGER) + -- Fill `a_ptr' with colors data from `a_offset'. + external + "C inline" + alias + "{ + { + #define B(q) \ + #q + #ifdef EIF_WINDOWS + #define A(a,r,g,b) \ + B(\x##b\x##g\x##r\x##a) + #else + #define A(a,r,g,b) \ + B(\x##r\x##g\x##b\x##a) + #endif + char l_data[] = + A(FF,FF,FF,00)A(00,01,01,01)A(00,01,01,01)A(FF,80,80,80)A(FF,FF,FF,00)A(00,01,01,01)A(00,01,01,01)A(FF,80,80,80)A(FF,FF,FF,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,80,80,80)A(FF,FF,FF,00)A(00,01,01,01)A(FF,80,80,80)A(FF,FF,FF,00)A(00,01,01,01)A(FF,80,80,80)A(FF,FF,FF,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,80,80,80)A(FF,FF,FF,00)A(FF,80,80,80)A(FF,FF,FF,00)A(FF,80,80,80)A(FF,FF,FF,00)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(00,01,01,01)A(FF,00,00,80)A(FF,80,80,80)A(FF,FF,FF,00)A(FF,FF,FF,00)A(FF,FF,FF,00)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,80)A(00,01,01,01)A(FF,00,00,80)A(FF,80,80,80)A(FF,FF,FF,00)A(FF,FF,FF,00)A(FF,FF,FF,00)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,80) + A(00,01,01,01)A(FF,80,80,80)A(FF,FF,FF,00)A(FF,80,80,80)A(FF,FF,FF,00)A(FF,80,80,80)A(FF,FF,FF,00)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,00,00,00)A(FF,80,80,80)A(FF,FF,FF,00)A(FF,F2,F2,F2)A(FF,80,80,80)A(FF,FF,FF,00)A(FF,F2,F2,F2)A(FF,80,80,80)A(FF,FF,FF,00)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,E6,E6,E6)A(FF,00,00,00)A(FF,FF,FF,00)A(FF,00,00,00)A(FF,F2,F2,F2)A(FF,80,80,80)A(FF,FF,FF,00)A(FF,F2,F2,F2)A(FF,6E,6E,6E)A(FF,80,80,80)A(FF,FF,FF,00)A(FF,F2,F2,F2)A(FF,E6,E6,E6)A(FF,E6,E6,E6)A(FF,F2,F2,F2)A(FF,E6,E6,E6)A(FF,F2,F2,F2)A(FF,00,00,00)A(00,01,01,01)A(FF,00,00,00)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,6E,6E,6E)A(FF,F2,F2,F2)A(FF,E6,E6,E6)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,E6,E6,E6)A(FF,E6,E6,E6)A(FF,E6,E6,E6)A(FF,F2,F2,F2)A(FF,00,00,00)A(00,01,01,01)A(FF,00,00,00)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,6E,6E,6E)A(FF,F2,F2,F2)A(FF,E6,E6,E6)A(FF,E6,E6,E6)A(FF,E6,E6,E6)A(FF,E6,E6,E6)A(FF,F2,F2,F2)A(FF,E6,E6,E6)A(FF,E6,E6,E6)A(FF,00,00,00) + A(00,01,01,01)A(FF,00,00,00)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,6E,6E,6E)A(FF,6E,6E,6E)A(FF,6E,6E,6E)A(FF,6E,6E,6E)A(FF,6E,6E,6E)A(FF,6E,6E,6E)A(FF,6E,6E,6E)A(FF,6E,6E,6E)A(FF,6E,6E,6E)A(FF,00,00,00)A(00,01,01,01)A(FF,00,00,00)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,E6,E6,E6)A(FF,6E,6E,6E)A(FF,E6,E6,E6)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,E6,E6,E6)A(FF,E6,E6,E6)A(FF,E6,E6,E6)A(FF,DA,DA,DA)A(FF,00,00,00)A(00,01,01,01)A(FF,00,00,00)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,E6,E6,E6)A(FF,F2,F2,F2)A(FF,6E,6E,6E)A(FF,E6,E6,E6)A(FF,F2,F2,F2)A(FF,E6,E6,E6)A(FF,E6,E6,E6)A(FF,E6,E6,E6)A(FF,E6,E6,E6)A(FF,E6,E6,E6)A(FF,E6,E6,E6)A(FF,00,00,00)A(00,01,01,01)A(FF,00,00,00)A(FF,E6,E6,E6)A(FF,E6,E6,E6)A(FF,E6,E6,E6)A(FF,E6,E6,E6)A(FF,6E,6E,6E)A(FF,F2,F2,F2)A(FF,E6,E6,E6)A(FF,E6,E6,E6)A(FF,E6,E6,E6)A(FF,E6,E6,E6)A(FF,DA,DA,DA)A(FF,E6,E6,E6)A(FF,DA,DA,DA)A(FF,00,00,00)A(00,01,01,01)A(FF,00,00,00)A(FF,F2,F2,F2)A(FF,E6,E6,E6)A(FF,F2,F2,F2)A(FF,E6,E6,E6)A(FF,6E,6E,6E)A(FF,E6,E6,E6)A(FF,E6,E6,E6)A(FF,DA,DA,DA)A(FF,DA,DA,DA)A(FF,E6,E6,E6)A(FF,DA,DA,DA)A(FF,E6,E6,E6)A(FF,E6,E6,E6)A(FF,00,00,00) + A(00,01,01,01)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00); + memcpy ((EIF_NATURAL_32 *)$a_ptr + $a_offset, &l_data, sizeof l_data - 1); + } + }" + end + + build_colors (a_ptr: POINTER) + -- Build `colors'. + do + c_colors_0 (a_ptr, 0) + end + +feature {NONE} -- Image data filling. + + fill_memory + -- Fill image data into memory. + local + l_pointer: POINTER + do + check attached {EV_PIXEL_BUFFER_IMP} implementation as l_imp then + l_pointer := l_imp.data_ptr + if l_pointer /= default_pointer then + build_colors (l_pointer) + l_imp.unlock + end + end + end + +end -- ICON_NEW_DEVELOPMENT_TOOL_COLOR diff --git a/jj_vision/bitmaps/icon_new_supplier_color.e b/jj_vision/bitmaps/icon_new_supplier_color.e new file mode 100644 index 0000000..9e16a40 --- /dev/null +++ b/jj_vision/bitmaps/icon_new_supplier_color.e @@ -0,0 +1,73 @@ +note + description: "Pixel buffer that replaces original image file.% + %The original version of this class has been generated by Image Eiffel Code." + +class + ICON_NEW_SUPPLIER_COLOR + +inherit + EV_PIXEL_BUFFER + +create + make + +feature {NONE} -- Initialization + + make + -- Initialization + do + make_with_size (16, 16) + fill_memory + end + +feature {NONE} -- Image data + + c_colors_0 (a_ptr: POINTER; a_offset: INTEGER) + -- Fill `a_ptr' with colors data from `a_offset'. + external + "C inline" + alias + "{ + { + #define B(q) \ + #q + #ifdef EIF_WINDOWS + #define A(a,r,g,b) \ + B(\x##b\x##g\x##r\x##a) + #else + #define A(a,r,g,b) \ + B(\x##r\x##g\x##b\x##a) + #endif + char l_data[] = + A(00,01,01,01)A(FF,80,80,80)A(FF,FF,FF,00)A(00,01,01,01)A(00,01,01,01)A(FF,80,80,80)A(FF,FF,FF,00)A(00,01,01,01)A(00,01,01,01)A(FF,80,80,80)A(FF,FF,FF,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,80,80,80)A(FF,FF,FF,00)A(00,01,01,01)A(FF,80,80,80)A(FF,FF,FF,00)A(00,01,01,01)A(FF,80,80,80)A(FF,FF,FF,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,80,80,80)A(FF,FF,FF,00)A(FF,80,80,80)A(FF,FF,FF,00)A(FF,80,80,80)A(FF,FF,FF,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,80,80,80)A(FF,FF,FF,00)A(FF,FF,FF,00)A(FF,FF,FF,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,80,80,80)A(FF,FF,FF,00)A(FF,FF,FF,00)A(FF,FF,FF,00)A(FF,00,00,B9)A(FF,00,00,B9)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01) + A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,80,80,80)A(FF,FF,FF,00)A(FF,80,80,80)A(FF,FF,FF,00)A(FF,80,80,80)A(FF,FF,FF,00)A(FF,25,57,FF)A(FF,00,00,B9)A(FF,00,00,B9)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,80,80,80)A(FF,FF,FF,00)A(FF,00,00,B9)A(FF,80,80,80)A(FF,FF,FF,00)A(FF,00,00,B9)A(FF,80,80,80)A(FF,FF,FF,00)A(FF,25,57,FF)A(FF,25,57,FF)A(FF,00,00,B9)A(FF,00,00,B9)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,50)A(FF,80,80,80)A(FF,FF,FF,00)A(FF,00,00,50)A(FF,00,00,50)A(FF,80,80,80)A(FF,FF,FF,00)A(FF,00,00,50)A(FF,00,00,B9)A(FF,80,80,80)A(FF,FF,FF,00)A(FF,00,00,B9)A(FF,25,57,FF)A(FF,25,57,FF)A(FF,00,00,B9)A(FF,00,00,B9)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,25,57,FF)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,50)A(FF,00,00,50) + A(FF,00,00,50)A(FF,00,00,50)A(FF,00,00,50)A(FF,00,00,50)A(FF,00,00,50)A(FF,00,00,50)A(FF,00,00,50)A(FF,00,00,50)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,50)A(FF,00,00,50)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,50)A(FF,00,00,50)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,50)A(FF,00,00,50)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(00,01,01,01) + A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01); + memcpy ((EIF_NATURAL_32 *)$a_ptr + $a_offset, &l_data, sizeof l_data - 1); + } + }" + end + + build_colors (a_ptr: POINTER) + -- Build `colors'. + do + c_colors_0 (a_ptr, 0) + end + +feature {NONE} -- Image data filling. + + fill_memory + -- Fill image data into memory. + local + l_pointer: POINTER + do + check attached {EV_PIXEL_BUFFER_IMP} implementation as l_imp then + l_pointer := l_imp.data_ptr + if l_pointer /= default_pointer then + build_colors (l_pointer) + l_imp.unlock + end + end + end + +end -- ICON_NEW_SUPPLIER_COLOR diff --git a/jj_vision/bitmaps/icon_object_symbol.e b/jj_vision/bitmaps/icon_object_symbol.e new file mode 100644 index 0000000..773d53c --- /dev/null +++ b/jj_vision/bitmaps/icon_object_symbol.e @@ -0,0 +1,73 @@ +note + description: "Pixel buffer that replaces original image file.% + %The original version of this class has been generated by Image Eiffel Code." + +class + ICON_OBJECT_SYMBOL + +inherit + EV_PIXEL_BUFFER + +create + make + +feature {NONE} -- Initialization + + make + -- Initialization + do + make_with_size (16, 16) + fill_memory + end + +feature {NONE} -- Image data + + c_colors_0 (a_ptr: POINTER; a_offset: INTEGER) + -- Fill `a_ptr' with colors data from `a_offset'. + external + "C inline" + alias + "{ + { + #define B(q) \ + #q + #ifdef EIF_WINDOWS + #define A(a,r,g,b) \ + B(\x##b\x##g\x##r\x##a) + #else + #define A(a,r,g,b) \ + B(\x##r\x##g\x##b\x##a) + #endif + char l_data[] = + A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,80,00,00)A(00,01,01,01)A(00,01,01,01)A(FF,80,00,00)A(00,01,01,01)A(00,01,01,01)A(FF,80,00,00)A(00,01,01,01)A(00,01,01,01)A(FF,80,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,80,00,00)A(FF,C0,C0,C0)A(00,01,01,01)A(FF,80,00,00)A(FF,C0,C0,C0)A(00,01,01,01)A(FF,80,00,00)A(FF,C0,C0,C0)A(00,01,01,01)A(FF,80,00,00)A(FF,C0,C0,C0)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,80,00,00)A(FF,80,00,00)A(FF,80,00,00)A(FF,80,00,00)A(FF,80,00,00)A(FF,80,00,00)A(FF,80,00,00)A(FF,80,00,00)A(FF,80,00,00)A(FF,80,00,00)A(FF,80,00,00)A(FF,80,00,00)A(FF,80,00,00)A(FF,80,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,C0,C0,C0)A(FF,80,00,00)A(FF,C0,C0,C0)A(FF,C0,C0,C0)A(FF,80,00,00)A(FF,C0,C0,C0)A(FF,C0,C0,C0)A(FF,80,00,00)A(FF,C0,C0,C0)A(FF,C0,C0,C0)A(FF,80,00,00)A(FF,C0,C0,C0)A(FF,C0,C0,C0)A(FF,C0,C0,C0) + A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,80,00,00)A(FF,C0,C0,C0)A(00,01,01,01)A(FF,80,00,00)A(FF,C0,C0,C0)A(00,01,01,01)A(FF,80,00,00)A(FF,C0,C0,C0)A(00,01,01,01)A(FF,80,00,00)A(FF,C0,C0,C0)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,80,00,00)A(FF,80,00,00)A(FF,80,00,00)A(FF,80,00,00)A(FF,80,00,00)A(FF,80,00,00)A(FF,80,00,00)A(FF,80,00,00)A(FF,80,00,00)A(FF,80,00,00)A(FF,80,00,00)A(FF,80,00,00)A(FF,80,00,00)A(FF,80,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,C0,C0,C0)A(FF,80,00,00)A(FF,C0,C0,C0)A(FF,C0,C0,C0)A(FF,80,00,00)A(FF,C0,C0,C0)A(FF,C0,C0,C0)A(FF,80,00,00)A(FF,C0,C0,C0)A(FF,C0,C0,C0)A(FF,80,00,00)A(FF,C0,C0,C0)A(FF,C0,C0,C0)A(FF,C0,C0,C0)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,80,00,00)A(FF,C0,C0,C0)A(00,01,01,01)A(FF,80,00,00)A(FF,C0,C0,C0)A(00,01,01,01)A(FF,80,00,00)A(FF,C0,C0,C0)A(00,01,01,01)A(FF,80,00,00)A(FF,C0,C0,C0)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,80,00,00)A(FF,80,00,00)A(FF,80,00,00)A(FF,80,00,00)A(FF,80,00,00)A(FF,80,00,00)A(FF,80,00,00)A(FF,80,00,00)A(FF,80,00,00)A(FF,80,00,00)A(FF,80,00,00)A(FF,80,00,00)A(FF,80,00,00)A(FF,80,00,00)A(00,01,01,01) + A(00,01,01,01)A(00,01,01,01)A(FF,C0,C0,C0)A(FF,80,00,00)A(FF,C0,C0,C0)A(FF,C0,C0,C0)A(FF,80,00,00)A(FF,C0,C0,C0)A(FF,C0,C0,C0)A(FF,80,00,00)A(FF,C0,C0,C0)A(FF,C0,C0,C0)A(FF,80,00,00)A(FF,C0,C0,C0)A(FF,C0,C0,C0)A(FF,C0,C0,C0)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,80,00,00)A(FF,C0,C0,C0)A(00,01,01,01)A(FF,80,00,00)A(FF,C0,C0,C0)A(00,01,01,01)A(FF,80,00,00)A(FF,C0,C0,C0)A(00,01,01,01)A(FF,80,00,00)A(FF,C0,C0,C0)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,80,00,00)A(FF,80,00,00)A(FF,80,00,00)A(FF,80,00,00)A(FF,80,00,00)A(FF,80,00,00)A(FF,80,00,00)A(FF,80,00,00)A(FF,80,00,00)A(FF,80,00,00)A(FF,80,00,00)A(FF,80,00,00)A(FF,80,00,00)A(FF,80,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,C0,C0,C0)A(FF,80,00,00)A(FF,C0,C0,C0)A(FF,C0,C0,C0)A(FF,80,00,00)A(FF,C0,C0,C0)A(FF,C0,C0,C0)A(FF,80,00,00)A(FF,C0,C0,C0)A(FF,C0,C0,C0)A(FF,80,00,00)A(FF,C0,C0,C0)A(FF,C0,C0,C0)A(FF,C0,C0,C0)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,80,00,00)A(FF,C0,C0,C0)A(00,01,01,01)A(FF,80,00,00)A(FF,C0,C0,C0)A(00,01,01,01)A(FF,80,00,00)A(FF,C0,C0,C0)A(00,01,01,01)A(FF,80,00,00)A(FF,C0,C0,C0)A(00,01,01,01)A(00,01,01,01) + A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,C0,C0,C0)A(00,01,01,01)A(00,01,01,01)A(FF,C0,C0,C0)A(00,01,01,01)A(00,01,01,01)A(FF,C0,C0,C0)A(00,01,01,01)A(00,01,01,01)A(FF,C0,C0,C0)A(00,01,01,01)A(00,01,01,01); + memcpy ((EIF_NATURAL_32 *)$a_ptr + $a_offset, &l_data, sizeof l_data - 1); + } + }" + end + + build_colors (a_ptr: POINTER) + -- Build `colors'. + do + c_colors_0 (a_ptr, 0) + end + +feature {NONE} -- Image data filling. + + fill_memory + -- Fill image data into memory. + local + l_pointer: POINTER + do + check attached {EV_PIXEL_BUFFER_IMP} implementation as l_imp then + l_pointer := l_imp.data_ptr + if l_pointer /= default_pointer then + build_colors (l_pointer) + l_imp.unlock + end + end + end + +end -- ICON_OBJECT_SYMBOL diff --git a/jj_vision/bitmaps/icon_open_file_color.e b/jj_vision/bitmaps/icon_open_file_color.e new file mode 100644 index 0000000..06f173b --- /dev/null +++ b/jj_vision/bitmaps/icon_open_file_color.e @@ -0,0 +1,73 @@ +note + description: "Pixel buffer that replaces original image file.% + %The original version of this class has been generated by Image Eiffel Code." + +class + ICON_OPEN_FILE_COLOR + +inherit + EV_PIXEL_BUFFER + +create + make + +feature {NONE} -- Initialization + + make + -- Initialization + do + make_with_size (16, 16) + fill_memory + end + +feature {NONE} -- Image data + + c_colors_0 (a_ptr: POINTER; a_offset: INTEGER) + -- Fill `a_ptr' with colors data from `a_offset'. + external + "C inline" + alias + "{ + { + #define B(q) \ + #q + #ifdef EIF_WINDOWS + #define A(a,r,g,b) \ + B(\x##b\x##g\x##r\x##a) + #else + #define A(a,r,g,b) \ + B(\x##r\x##g\x##b\x##a) + #endif + char l_data[] = + A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,00)A(00,01,01,01)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,00)A(FF,00,00,00)A(00,01,01,01) + A(00,01,01,01)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(00,01,01,01)A(FF,00,00,00)A(FF,FF,FF,FF)A(FF,FF,FF,00)A(FF,FF,FF,FF)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,00)A(FF,FF,FF,00)A(FF,FF,FF,FF)A(FF,FF,FF,00)A(FF,FF,FF,FF)A(FF,FF,FF,00)A(FF,FF,FF,FF)A(FF,FF,FF,00)A(FF,FF,FF,FF)A(FF,FF,FF,00)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,00)A(FF,FF,FF,FF)A(FF,FF,FF,00)A(FF,FF,FF,FF)A(FF,FF,FF,00)A(FF,FF,FF,FF)A(FF,FF,FF,00)A(FF,FF,FF,FF)A(FF,FF,FF,00)A(FF,FF,FF,FF)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,00)A(FF,FF,FF,00)A(FF,FF,FF,FF)A(FF,FF,FF,00)A(FF,FF,FF,FF)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(00,01,01,01) + A(FF,00,00,00)A(FF,FF,FF,FF)A(FF,FF,FF,00)A(FF,FF,FF,FF)A(FF,00,00,00)A(FF,80,80,00)A(FF,80,80,00)A(FF,80,80,00)A(FF,80,80,00)A(FF,80,80,00)A(FF,80,80,00)A(FF,80,80,00)A(FF,80,80,00)A(FF,80,80,00)A(FF,00,00,00)A(00,01,01,01)A(FF,00,00,00)A(FF,FF,FF,00)A(FF,FF,FF,FF)A(FF,00,00,00)A(FF,80,80,00)A(FF,80,80,00)A(FF,80,80,00)A(FF,80,80,00)A(FF,80,80,00)A(FF,80,80,00)A(FF,80,80,00)A(FF,80,80,00)A(FF,80,80,00)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,00)A(FF,FF,FF,FF)A(FF,00,00,00)A(FF,80,80,00)A(FF,80,80,00)A(FF,80,80,00)A(FF,80,80,00)A(FF,80,80,00)A(FF,80,80,00)A(FF,80,80,00)A(FF,80,80,00)A(FF,80,80,00)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,00)A(FF,00,00,00)A(FF,80,80,00)A(FF,80,80,00)A(FF,80,80,00)A(FF,80,80,00)A(FF,80,80,00)A(FF,80,80,00)A(FF,80,80,00)A(FF,80,80,00)A(FF,80,80,00)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01) + A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01); + memcpy ((EIF_NATURAL_32 *)$a_ptr + $a_offset, &l_data, sizeof l_data - 1); + } + }" + end + + build_colors (a_ptr: POINTER) + -- Build `colors'. + do + c_colors_0 (a_ptr, 0) + end + +feature {NONE} -- Image data filling. + + fill_memory + -- Fill image data into memory. + local + l_pointer: POINTER + do + check attached {EV_PIXEL_BUFFER_IMP} implementation as l_imp then + l_pointer := l_imp.data_ptr + if l_pointer /= default_pointer then + build_colors (l_pointer) + l_imp.unlock + end + end + end + +end -- ICON_OPEN_FILE_COLOR diff --git a/jj_vision/bitmaps/icon_redo_color.e b/jj_vision/bitmaps/icon_redo_color.e new file mode 100644 index 0000000..6d36d2b --- /dev/null +++ b/jj_vision/bitmaps/icon_redo_color.e @@ -0,0 +1,73 @@ +note + description: "Pixel buffer that replaces original image file.% + %The original version of this class has been generated by Image Eiffel Code." + +class + ICON_REDO_COLOR + +inherit + EV_PIXEL_BUFFER + +create + make + +feature {NONE} -- Initialization + + make + -- Initialization + do + make_with_size (16, 16) + fill_memory + end + +feature {NONE} -- Image data + + c_colors_0 (a_ptr: POINTER; a_offset: INTEGER) + -- Fill `a_ptr' with colors data from `a_offset'. + external + "C inline" + alias + "{ + { + #define B(q) \ + #q + #ifdef EIF_WINDOWS + #define A(a,r,g,b) \ + B(\x##b\x##g\x##r\x##a) + #else + #define A(a,r,g,b) \ + B(\x##r\x##g\x##b\x##a) + #endif + char l_data[] = + A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01) + A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,80)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,80)A(FF,00,00,80)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,80)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,80)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,80)A(00,01,01,01)A(FF,00,00,80)A(FF,00,00,80)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,80)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,80)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01) + A(00,01,01,01)A(00,01,01,01)A(FF,00,00,80)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,80)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01) + A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01); + memcpy ((EIF_NATURAL_32 *)$a_ptr + $a_offset, &l_data, sizeof l_data - 1); + } + }" + end + + build_colors (a_ptr: POINTER) + -- Build `colors'. + do + c_colors_0 (a_ptr, 0) + end + +feature {NONE} -- Image data filling. + + fill_memory + -- Fill image data into memory. + local + l_pointer: POINTER + do + check attached {EV_PIXEL_BUFFER_IMP} implementation as l_imp then + l_pointer := l_imp.data_ptr + if l_pointer /= default_pointer then + build_colors (l_pointer) + l_imp.unlock + end + end + end + +end -- ICON_REDO_COLOR diff --git a/jj_vision/bitmaps/icon_reset_diagram_color.e b/jj_vision/bitmaps/icon_reset_diagram_color.e new file mode 100644 index 0000000..b4f7145 --- /dev/null +++ b/jj_vision/bitmaps/icon_reset_diagram_color.e @@ -0,0 +1,73 @@ +note + description: "Pixel buffer that replaces original image file.% + %The original version of this class has been generated by Image Eiffel Code." + +class + ICON_RESET_DIAGRAM_COLOR + +inherit + EV_PIXEL_BUFFER + +create + make + +feature {NONE} -- Initialization + + make + -- Initialization + do + make_with_size (16, 16) + fill_memory + end + +feature {NONE} -- Image data + + c_colors_0 (a_ptr: POINTER; a_offset: INTEGER) + -- Fill `a_ptr' with colors data from `a_offset'. + external + "C inline" + alias + "{ + { + #define B(q) \ + #q + #ifdef EIF_WINDOWS + #define A(a,r,g,b) \ + B(\x##b\x##g\x##r\x##a) + #else + #define A(a,r,g,b) \ + B(\x##r\x##g\x##b\x##a) + #endif + char l_data[] = + A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(FF,9B,40,00)A(FF,9B,40,00)A(FF,9B,40,00)A(FF,9B,40,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(FF,9B,40,00)A(FF,3C,0C,00)A(FF,3C,0C,00)A(FF,3C,0C,00)A(FF,3C,0C,00)A(FF,9B,40,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(FF,9B,40,00)A(FF,3C,0C,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(FF,9B,40,00)A(FF,9B,40,00)A(FF,9B,40,00)A(FF,9B,40,00)A(FF,9B,40,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00) + A(00,00,00,00)A(00,00,00,00)A(FF,9B,40,00)A(FF,9B,40,00)A(FF,9B,40,00)A(FF,9B,40,00)A(FF,9B,40,00)A(FF,9B,40,00)A(FF,9B,40,00)A(FF,9B,40,00)A(FF,9B,40,00)A(FF,9B,40,00)A(FF,9B,40,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(FF,9B,40,00)A(FF,9B,40,00)A(FF,9B,40,00)A(FF,FF,FF,00)A(FF,FF,FF,00)A(FF,9B,40,00)A(FF,9B,40,00)A(FF,9B,40,00)A(FF,CD,A0,00)A(FF,9B,40,00)A(FF,9B,40,00)A(FF,3C,0C,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(FF,9B,40,00)A(FF,9B,40,00)A(FF,FF,FF,00)A(FF,CD,A0,00)A(FF,9B,40,00)A(FF,9B,40,00)A(FF,9B,40,00)A(FF,CD,A0,00)A(FF,FF,FF,00)A(FF,CD,A0,00)A(FF,9B,40,00)A(FF,3C,0C,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(FF,9B,40,00)A(FF,9B,40,00)A(FF,FF,FF,00)A(FF,9B,40,00)A(FF,9B,40,00)A(FF,9B,40,00)A(FF,CD,A0,00)A(FF,FF,FF,00)A(FF,FF,FF,00)A(FF,FF,FF,00)A(FF,CD,A0,00)A(FF,3C,0C,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(FF,CD,A0,00)A(FF,FF,FF,00)A(FF,FF,FF,00)A(FF,FF,FF,00)A(FF,CD,A0,00)A(FF,9B,40,00)A(FF,9B,40,00)A(FF,9B,40,00)A(FF,FF,FF,00)A(FF,9B,40,00)A(FF,9B,40,00)A(FF,3C,0C,00)A(00,00,00,00)A(00,00,00,00) + A(00,00,00,00)A(00,00,00,00)A(FF,9B,40,00)A(FF,CD,A0,00)A(FF,FF,FF,00)A(FF,CD,A0,00)A(FF,9B,40,00)A(FF,9B,40,00)A(FF,9B,40,00)A(FF,CD,A0,00)A(FF,FF,FF,00)A(FF,9B,40,00)A(FF,9B,40,00)A(FF,3C,0C,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(FF,9B,40,00)A(FF,9B,40,00)A(FF,CD,A0,00)A(FF,9B,40,00)A(FF,9B,40,00)A(FF,9B,40,00)A(FF,FF,FF,00)A(FF,FF,FF,00)A(FF,9B,40,00)A(FF,9B,40,00)A(FF,9B,40,00)A(FF,3C,0C,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(FF,9B,40,00)A(FF,9B,40,00)A(FF,9B,40,00)A(FF,9B,40,00)A(FF,9B,40,00)A(FF,9B,40,00)A(FF,9B,40,00)A(FF,9B,40,00)A(FF,9B,40,00)A(FF,3C,0C,00)A(FF,3C,0C,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(FF,3C,0C,00)A(FF,3C,0C,00)A(FF,3C,0C,00)A(FF,3C,0C,00)A(FF,3C,0C,00)A(FF,3C,0C,00)A(FF,3C,0C,00)A(FF,3C,0C,00)A(FF,3C,0C,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00) + A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00); + memcpy ((EIF_NATURAL_32 *)$a_ptr + $a_offset, &l_data, sizeof l_data - 1); + } + }" + end + + build_colors (a_ptr: POINTER) + -- Build `colors'. + do + c_colors_0 (a_ptr, 0) + end + +feature {NONE} -- Image data filling. + + fill_memory + -- Fill image data into memory. + local + l_pointer: POINTER + do + if attached {EV_PIXEL_BUFFER_IMP} implementation as l_imp then + l_pointer := l_imp.data_ptr + if not l_pointer.is_default_pointer then + build_colors (l_pointer) + l_imp.unlock + end + end + end + +end -- ICON_RESET_DIAGRAM_COLOR diff --git a/jj_vision/bitmaps/icon_restore_all_color.e b/jj_vision/bitmaps/icon_restore_all_color.e new file mode 100644 index 0000000..2b6afdb --- /dev/null +++ b/jj_vision/bitmaps/icon_restore_all_color.e @@ -0,0 +1,73 @@ +note + description: "Pixel buffer that replaces original image file.% + %The original version of this class has been generated by Image Eiffel Code." + +class + ICON_RESTORE_ALL_COLOR + +inherit + EV_PIXEL_BUFFER + +create + make + +feature {NONE} -- Initialization + + make + -- Initialization + do + make_with_size (16, 16) + fill_memory + end + +feature {NONE} -- Image data + + c_colors_0 (a_ptr: POINTER; a_offset: INTEGER) + -- Fill `a_ptr' with colors data from `a_offset'. + external + "C inline" + alias + "{ + { + #define B(q) \ + #q + #ifdef EIF_WINDOWS + #define A(a,r,g,b) \ + B(\x##b\x##g\x##r\x##a) + #else + #define A(a,r,g,b) \ + B(\x##r\x##g\x##b\x##a) + #endif + char l_data[] = + A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,80)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,00,00,00)A(FF,00,00,80)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,80)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,00,00,00)A(FF,00,00,00)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,6E,6E,6E)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,00,00,00)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,00,00,00) + A(FF,00,00,00)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,6E,6E,6E)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,E6,E6,E6)A(FF,E6,E6,E6)A(FF,E6,E6,E6)A(FF,F2,F2,F2)A(FF,00,00,00)A(FF,6E,6E,6E)A(FF,6E,6E,6E)A(FF,6E,6E,6E)A(FF,00,00,00)A(FF,00,00,00)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,6E,6E,6E)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,00,00,00)A(FF,E6,E6,E6)A(FF,E6,E6,E6)A(FF,DA,DA,DA)A(FF,00,00,00)A(FF,00,00,00)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,6E,6E,6E)A(FF,6E,6E,6E)A(FF,6E,6E,6E)A(FF,6E,6E,6E)A(FF,6E,6E,6E)A(FF,6E,6E,6E)A(FF,6E,6E,6E)A(FF,00,00,00)A(FF,DA,DA,DA)A(FF,DA,DA,DA)A(FF,E6,E6,E6)A(FF,00,00,00)A(FF,00,00,00)A(FF,F2,F2,F2)A(FF,E6,E6,E6)A(FF,E6,E6,E6)A(FF,6E,6E,6E)A(FF,F2,F2,F2)A(FF,E6,E6,E6)A(FF,E6,E6,E6)A(FF,E6,E6,E6)A(FF,E6,E6,E6)A(FF,DA,DA,DA)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,F2,F2,F2)A(FF,E6,E6,E6)A(FF,F2,F2,F2)A(FF,6E,6E,6E)A(FF,E6,E6,E6)A(FF,E6,E6,E6)A(FF,DA,DA,DA)A(FF,DA,DA,DA)A(FF,DA,DA,DA)A(FF,E6,E6,E6)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01) + A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,25,73)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,25,73)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,25,73)A(FF,00,25,73)A(FF,00,25,73)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,25,73)A(FF,00,25,73)A(FF,00,25,73)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,25,73)A(FF,00,25,73)A(FF,00,25,73)A(FF,00,25,73)A(FF,00,25,73)A(00,01,01,01)A(00,01,01,01)A(FF,00,25,73)A(FF,00,25,73)A(FF,00,25,73)A(FF,00,25,73)A(FF,00,25,73)A(00,01,01,01)A(00,01,01,01) + A(FF,62,62,62)A(FF,62,62,62)A(FF,62,62,62)A(FF,62,62,62)A(FF,62,62,62)A(FF,62,62,62)A(FF,62,62,62)A(FF,62,62,62)A(FF,62,62,62)A(FF,62,62,62)A(FF,62,62,62)A(FF,62,62,62)A(FF,62,62,62)A(FF,62,62,62)A(FF,62,62,62)A(FF,62,62,62); + memcpy ((EIF_NATURAL_32 *)$a_ptr + $a_offset, &l_data, sizeof l_data - 1); + } + }" + end + + build_colors (a_ptr: POINTER) + -- Build `colors'. + do + c_colors_0 (a_ptr, 0) + end + +feature {NONE} -- Image data filling. + + fill_memory + -- Fill image data into memory. + local + l_pointer: POINTER + do + check attached {EV_PIXEL_BUFFER_IMP} implementation as l_imp then + l_pointer := l_imp.data_ptr + if l_pointer /= default_pointer then + build_colors (l_pointer) + l_imp.unlock + end + end + end + +end -- ICON_RESTORE_ALL_COLOR diff --git a/jj_vision/bitmaps/icon_restore_color.e b/jj_vision/bitmaps/icon_restore_color.e new file mode 100644 index 0000000..b665aa5 --- /dev/null +++ b/jj_vision/bitmaps/icon_restore_color.e @@ -0,0 +1,70 @@ +note + description: "Pixel buffer that replaces original image file.% + %The original version of this class has been generated by Image Eiffel Code." + +class + ICON_RESTORE_COLOR + +inherit + EV_PIXEL_BUFFER + +create + make + +feature {NONE} -- Initialization + + make + -- Initialization + do + make_with_size (8, 8) + fill_memory + end + +feature {NONE} -- Image data + + c_colors_0 (a_ptr: POINTER; a_offset: INTEGER) + -- Fill `a_ptr' with colors data from `a_offset'. + external + "C inline" + alias + "{ + { + #define B(q) \ + #q + #ifdef EIF_WINDOWS + #define A(a,r,g,b) \ + B(\x##b\x##g\x##r\x##a) + #else + #define A(a,r,g,b) \ + B(\x##r\x##g\x##b\x##a) + #endif + char l_data[] = + A(00,01,01,01)A(00,01,01,01)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(00,01,01,01)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,80)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,80)A(00,01,01,01)A(00,01,01,01); + memcpy ((EIF_NATURAL_32 *)$a_ptr + $a_offset, &l_data, sizeof l_data - 1); + } + }" + end + + build_colors (a_ptr: POINTER) + -- Build `colors'. + do + c_colors_0 (a_ptr, 0) + end + +feature {NONE} -- Image data filling. + + fill_memory + -- Fill image data into memory. + local + l_pointer: POINTER + do + check attached {EV_PIXEL_BUFFER_IMP} implementation as l_imp then + l_pointer := l_imp.data_ptr + if l_pointer /= default_pointer then + build_colors (l_pointer) + l_imp.unlock + end + end + end + +end -- ICON_RESTORE_COLOR diff --git a/jj_vision/bitmaps/icon_save_color.e b/jj_vision/bitmaps/icon_save_color.e new file mode 100644 index 0000000..f8f8590 --- /dev/null +++ b/jj_vision/bitmaps/icon_save_color.e @@ -0,0 +1,73 @@ +note + description: "Pixel buffer that replaces original image file.% + %The original version of this class has been generated by Image Eiffel Code." + +class + ICON_SAVE_COLOR + +inherit + EV_PIXEL_BUFFER + +create + make + +feature {NONE} -- Initialization + + make + -- Initialization + do + make_with_size (16, 16) + fill_memory + end + +feature {NONE} -- Image data + + c_colors_0 (a_ptr: POINTER; a_offset: INTEGER) + -- Fill `a_ptr' with colors data from `a_offset'. + external + "C inline" + alias + "{ + { + #define B(q) \ + #q + #ifdef EIF_WINDOWS + #define A(a,r,g,b) \ + B(\x##b\x##g\x##r\x##a) + #else + #define A(a,r,g,b) \ + B(\x##r\x##g\x##b\x##a) + #endif + char l_data[] = + A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,00)A(FF,AA,A8,64)A(FF,00,00,00)A(FF,00,80,00)A(FF,00,80,00)A(FF,00,80,00)A(FF,00,80,00)A(FF,00,80,00)A(FF,00,80,00)A(FF,00,80,00)A(FF,00,80,00)A(FF,00,00,00)A(00,01,01,01)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,00)A(FF,AA,A8,64)A(FF,00,00,00)A(FF,F5,F5,F5)A(FF,F5,F5,F5)A(FF,F5,F5,F5)A(FF,F5,F5,F5)A(FF,F5,F5,F5)A(FF,F5,F5,F5)A(FF,F5,F5,F5)A(FF,F5,F5,F5)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,00)A(FF,AA,A8,64)A(FF,00,00,00)A(FF,F5,F5,F5)A(FF,F5,F5,F5)A(FF,F5,F5,F5)A(FF,F5,F5,F5)A(FF,F5,F5,F5)A(FF,F5,F5,F5)A(FF,F5,F5,F5)A(FF,F5,F5,F5)A(FF,00,00,00)A(FF,AA,A8,64)A(FF,00,00,00)A(00,01,01,01) + A(00,01,01,01)A(FF,00,00,00)A(FF,AA,A8,64)A(FF,00,00,00)A(FF,F5,F5,F5)A(FF,F5,F5,F5)A(FF,F5,F5,F5)A(FF,F5,F5,F5)A(FF,F5,F5,F5)A(FF,F5,F5,F5)A(FF,F5,F5,F5)A(FF,E4,E4,E4)A(FF,00,00,00)A(FF,AA,A8,64)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,00)A(FF,AA,A8,64)A(FF,00,00,00)A(FF,F5,F5,F5)A(FF,F5,F5,F5)A(FF,F5,F5,F5)A(FF,F5,F5,F5)A(FF,F5,F5,F5)A(FF,E4,E4,E4)A(FF,E4,E4,E4)A(FF,E4,E4,E4)A(FF,00,00,00)A(FF,AA,A8,64)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,00)A(FF,AA,A8,64)A(FF,00,00,00)A(FF,F5,F5,F5)A(FF,F5,F5,F5)A(FF,E4,E4,E4)A(FF,E4,E4,E4)A(FF,E4,E4,E4)A(FF,E4,E4,E4)A(FF,E4,E4,E4)A(FF,E4,E4,E4)A(FF,00,00,00)A(FF,99,99,66)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,00)A(FF,AA,A8,64)A(FF,AA,A8,64)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,99,99,66)A(FF,99,99,66)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,00)A(FF,AA,A8,64)A(FF,AA,A8,64)A(FF,99,99,66)A(FF,99,99,66)A(FF,99,99,66)A(FF,99,99,66)A(FF,99,99,66)A(FF,99,99,66)A(FF,99,99,66)A(FF,99,99,66)A(FF,99,99,66)A(FF,99,99,66)A(FF,00,00,00)A(00,01,01,01) + A(00,01,01,01)A(FF,00,00,00)A(FF,AA,A8,64)A(FF,AA,A8,64)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,80,80,00)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,00)A(FF,AA,A8,64)A(FF,99,99,66)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,EA,E7,E3)A(FF,EA,E7,E3)A(FF,00,00,00)A(FF,80,80,00)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,00)A(FF,99,99,66)A(FF,99,99,66)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,EA,E7,E3)A(FF,EA,E7,E3)A(FF,00,00,00)A(FF,80,80,00)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,00)A(FF,99,99,66)A(FF,80,80,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,EA,E7,E3)A(FF,EA,E7,E3)A(FF,00,00,00)A(FF,80,80,00)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(00,01,01,01) + A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01); + memcpy ((EIF_NATURAL_32 *)$a_ptr + $a_offset, &l_data, sizeof l_data - 1); + } + }" + end + + build_colors (a_ptr: POINTER) + -- Build `colors'. + do + c_colors_0 (a_ptr, 0) + end + +feature {NONE} -- Image data filling. + + fill_memory + -- Fill image data into memory. + local + l_pointer: POINTER + do + check attached {EV_PIXEL_BUFFER_IMP} implementation as l_imp then + l_pointer := l_imp.data_ptr + if l_pointer /= default_pointer then + build_colors (l_pointer) + l_imp.unlock + end + end + end + +end -- ICON_SAVE_COLOR diff --git a/jj_vision/bitmaps/icon_shell_color.e b/jj_vision/bitmaps/icon_shell_color.e new file mode 100644 index 0000000..9140aca --- /dev/null +++ b/jj_vision/bitmaps/icon_shell_color.e @@ -0,0 +1,73 @@ +note + description: "Pixel buffer that replaces original image file.% + %The original version of this class has been generated by Image Eiffel Code." + +class + ICON_SHELL_COLOR + +inherit + EV_PIXEL_BUFFER + +create + make + +feature {NONE} -- Initialization + + make + -- Initialization + do + make_with_size (16, 16) + fill_memory + end + +feature {NONE} -- Image data + + c_colors_0 (a_ptr: POINTER; a_offset: INTEGER) + -- Fill `a_ptr' with colors data from `a_offset'. + external + "C inline" + alias + "{ + { + #define B(q) \ + #q + #ifdef EIF_WINDOWS + #define A(a,r,g,b) \ + B(\x##b\x##g\x##r\x##a) + #else + #define A(a,r,g,b) \ + B(\x##r\x##g\x##b\x##a) + #endif + char l_data[] = + A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,80)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,80)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,80)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,80)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,00)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,00,00,00) + A(00,01,01,01)A(00,01,01,01)A(FF,00,00,00)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,E6,E6,E6)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,00)A(FF,F2,F2,F2)A(FF,9E,9E,9E)A(FF,96,31,00)A(FF,9E,9E,9E)A(FF,56,56,56)A(FF,56,56,56)A(FF,56,56,56)A(FF,56,56,56)A(FF,56,56,56)A(FF,56,56,56)A(FF,E6,E6,E6)A(FF,F2,F2,F2)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,00)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,96,31,00)A(FF,73,25,00)A(FF,F2,F2,F2)A(FF,E6,E6,E6)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,E6,E6,E6)A(FF,E6,E6,E6)A(FF,E6,E6,E6)A(FF,F2,F2,F2)A(FF,00,00,00)A(FF,96,31,00)A(FF,96,31,00)A(FF,96,31,00)A(FF,96,31,00)A(FF,96,31,00)A(FF,96,31,00)A(FF,73,25,00)A(FF,73,25,00)A(FF,9E,9E,9E)A(FF,56,56,56)A(FF,56,56,56)A(FF,56,56,56)A(FF,F2,F2,F2)A(FF,E6,E6,E6)A(FF,E6,E6,E6)A(FF,00,00,00)A(FF,96,31,00)A(FF,73,25,00)A(FF,73,25,00)A(FF,73,25,00)A(FF,73,25,00)A(FF,73,25,00)A(FF,73,25,00)A(FF,50,19,00)A(FF,E6,E6,E6)A(FF,E6,E6,E6)A(FF,E6,E6,E6)A(FF,E6,E6,E6)A(FF,E6,E6,E6)A(FF,E6,E6,E6)A(FF,F2,F2,F2)A(FF,00,00,00) + A(00,01,01,01)A(00,01,01,01)A(FF,00,00,00)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,73,25,00)A(FF,50,19,00)A(FF,9E,9E,9E)A(FF,56,56,56)A(FF,56,56,56)A(FF,56,56,56)A(FF,56,56,56)A(FF,56,56,56)A(FF,E6,E6,E6)A(FF,DA,DA,DA)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,00)A(FF,F2,F2,F2)A(FF,E6,E6,E6)A(FF,50,19,00)A(FF,E6,E6,E6)A(FF,E6,E6,E6)A(FF,F2,F2,F2)A(FF,E6,E6,E6)A(FF,E6,E6,E6)A(FF,E6,E6,E6)A(FF,E6,E6,E6)A(FF,E6,E6,E6)A(FF,E6,E6,E6)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,00)A(FF,E6,E6,E6)A(FF,E6,E6,E6)A(FF,E6,E6,E6)A(FF,E6,E6,E6)A(FF,56,56,56)A(FF,56,56,56)A(FF,56,56,56)A(FF,56,56,56)A(FF,E6,E6,E6)A(FF,DA,DA,DA)A(FF,E6,E6,E6)A(FF,DA,DA,DA)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,00)A(FF,F2,F2,F2)A(FF,F2,F2,F2)A(FF,E6,E6,E6)A(FF,E6,E6,E6)A(FF,E6,E6,E6)A(FF,E6,E6,E6)A(FF,DA,DA,DA)A(FF,DA,DA,DA)A(FF,E6,E6,E6)A(FF,DA,DA,DA)A(FF,E6,E6,E6)A(FF,E6,E6,E6)A(FF,00,00,00)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00) + A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01); + memcpy ((EIF_NATURAL_32 *)$a_ptr + $a_offset, &l_data, sizeof l_data - 1); + } + }" + end + + build_colors (a_ptr: POINTER) + -- Build `colors'. + do + c_colors_0 (a_ptr, 0) + end + +feature {NONE} -- Image data filling. + + fill_memory + -- Fill image data into memory. + local + l_pointer: POINTER + do + check attached {EV_PIXEL_BUFFER_IMP} implementation as l_imp then + l_pointer := l_imp.data_ptr + if l_pointer /= default_pointer then + build_colors (l_pointer) + l_imp.unlock + end + end + end + +end -- ICON_SHELL_COLOR diff --git a/jj_vision/bitmaps/icon_supplier_color.e b/jj_vision/bitmaps/icon_supplier_color.e new file mode 100644 index 0000000..4a82a4e --- /dev/null +++ b/jj_vision/bitmaps/icon_supplier_color.e @@ -0,0 +1,73 @@ +note + description: "Pixel buffer that replaces original image file.% + %The original version of this class has been generated by Image Eiffel Code." + +class + ICON_SUPPLIER_COLOR + +inherit + EV_PIXEL_BUFFER + +create + make + +feature {NONE} -- Initialization + + make + -- Initialization + do + make_with_size (16, 16) + fill_memory + end + +feature {NONE} -- Image data + + c_colors_0 (a_ptr: POINTER; a_offset: INTEGER) + -- Fill `a_ptr' with colors data from `a_offset'. + external + "C inline" + alias + "{ + { + #define B(q) \ + #q + #ifdef EIF_WINDOWS + #define A(a,r,g,b) \ + B(\x##b\x##g\x##r\x##a) + #else + #define A(a,r,g,b) \ + B(\x##r\x##g\x##b\x##a) + #endif + char l_data[] = + A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,B9)A(FF,00,00,B9)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01) + A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,25,57,FF)A(FF,25,57,FF)A(FF,00,00,B9)A(FF,00,00,B9)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,25,57,FF)A(FF,25,57,FF)A(FF,00,00,B9)A(FF,00,00,B9)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,50)A(FF,00,00,50)A(FF,00,00,50)A(FF,00,00,50)A(FF,00,00,50)A(FF,00,00,50)A(FF,00,00,50)A(FF,00,00,50)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,25,57,FF)A(FF,25,57,FF)A(FF,00,00,B9)A(FF,00,00,B9)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,25,57,FF)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,50)A(FF,00,00,50) + A(FF,00,00,50)A(FF,00,00,50)A(FF,00,00,50)A(FF,00,00,50)A(FF,00,00,50)A(FF,00,00,50)A(FF,00,00,50)A(FF,00,00,50)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,50)A(FF,00,00,50)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,B9)A(FF,00,00,B9)A(FF,00,00,50)A(FF,00,00,50)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,50)A(FF,00,00,50)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01) + A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01); + memcpy ((EIF_NATURAL_32 *)$a_ptr + $a_offset, &l_data, sizeof l_data - 1); + } + }" + end + + build_colors (a_ptr: POINTER) + -- Build `colors'. + do + c_colors_0 (a_ptr, 0) + end + +feature {NONE} -- Image data filling. + + fill_memory + -- Fill image data into memory. + local + l_pointer: POINTER + do + check attached {EV_PIXEL_BUFFER_IMP} implementation as l_imp then + l_pointer := l_imp.data_ptr + if l_pointer /= default_pointer then + build_colors (l_pointer) + l_imp.unlock + end + end + end + +end -- ICON_SUPPLIER_COLOR diff --git a/jj_vision/bitmaps/icon_tool_color.e b/jj_vision/bitmaps/icon_tool_color.e new file mode 100644 index 0000000..ce8e038 --- /dev/null +++ b/jj_vision/bitmaps/icon_tool_color.e @@ -0,0 +1,74 @@ +note + description: "Pixel buffer that replaces original image file.% + %The original version of this class has been generated by Image Eiffel Code." + +class + ICON_TOOL_COLOR + +inherit + EV_PIXEL_BUFFER + +create + make + +feature {NONE} -- Initialization + + make + -- Initialization + do + make_with_size (20, 20) + fill_memory + end + +feature {NONE} -- Image data + + c_colors_0 (a_ptr: POINTER; a_offset: INTEGER) + -- Fill `a_ptr' with colors data from `a_offset'. + external + "C inline" + alias + "{ + { + #define B(q) \ + #q + #ifdef EIF_WINDOWS + #define A(a,r,g,b) \ + B(\x##b\x##g\x##r\x##a) + #else + #define A(a,r,g,b) \ + B(\x##r\x##g\x##b\x##a) + #endif + char l_data[] = + A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(FF,7A,7A,7A)A(FF,7A,7A,7A)A(00,00,00,00)A(00,00,00,00)A(FF,7A,7A,7A)A(FF,7A,7A,7A)A(FF,7A,7A,7A)A(FF,7A,7A,7A)A(FF,7A,7A,7A)A(FF,7A,7A,7A)A(FF,7A,7A,7A)A(FF,7A,7A,7A)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(FF,7A,7A,7A)A(FF,FF,FF,FF)A(FF,FF,FF,FF)A(FF,92,92,92)A(FF,92,92,92)A(FF,FF,FF,FF)A(FF,FF,FF,FF)A(FF,FF,FF,FF)A(FF,FF,FF,FF)A(FF,D4,FF,FF)A(FF,D4,F0,FF)A(FF,D4,F0,FF)A(FF,D4,F0,FF)A(FF,6E,6E,6E)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(FF,7A,7A,7A)A(FF,D4,FF,FF)A(FF,CE,CE,CE)A(FF,FF,FF,FF)A(FF,FF,FF,FF)A(FF,D4,F0,FF)A(FF,CE,CE,CE)A(FF,CE,CE,CE)A(FF,CE,CE,CE)A(FF,CE,CE,CE)A(FF,CE,CE,CE)A(FF,CE,CE,CE)A(FF,CE,CE,CE)A(FF,F2,F2,F2)A(FF,31,00,96)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(FF,7A,7A,7A)A(FF,D4,FF,FF)A(FF,CE,CE,CE)A(FF,92,92,92)A(FF,92,92,92)A(FF,CE,CE,CE)A(FF,CE,CE,CE)A(FF,A6,CA,F0)A(FF,A6,CA,F0)A(FF,86,86,86)A(FF,6B,8F,FF)A(FF,86,86,86)A(FF,6B,8F,FF)A(FF,7A,7A,7A)A(FF,DA,DA,DA)A(FF,56,56,56) + A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(FF,7A,7A,7A)A(FF,D4,FF,FF)A(FF,3E,3E,3E)A(FF,1A,1A,1A)A(FF,1A,1A,1A)A(FF,7A,7A,7A)A(FF,86,86,86)A(FF,A6,CA,F0)A(FF,6B,8F,FF)A(FF,86,86,86)A(FF,31,00,96)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,86,86,86)A(FF,31,00,96)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(FF,7A,7A,7A)A(FF,7A,7A,7A)A(FF,3E,3E,3E)A(00,00,00,00)A(00,00,00,00)A(FF,31,00,96)A(FF,1A,1A,1A)A(FF,A6,CA,F0)A(FF,6B,8F,FF)A(FF,00,00,00)A(FF,31,00,96)A(00,00,00,00)A(00,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,56,56,56)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(FF,1A,1A,1A)A(FF,A6,CA,F0)A(FF,86,86,86)A(FF,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(FF,1A,1A,1A)A(FF,A6,CA,F0)A(FF,86,86,86)A(FF,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00) + A(00,00,00,00)A(00,00,00,00)A(FF,73,73,00)A(FF,73,73,00)A(FF,73,73,00)A(FF,73,73,00)A(FF,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(FF,FF,6B,6B)A(FF,FF,6B,6B)A(FF,96,31,00)A(FF,FF,6B,6B)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(FF,73,73,00)A(FF,FF,FB,F0)A(FF,FF,FF,8E)A(FF,FF,FF,8E)A(FF,FF,FF,8E)A(FF,DC,92,00)A(FF,00,00,00)A(00,00,00,00)A(FF,FF,55,00)A(FF,FF,FF,D4)A(FF,FF,C6,6B)A(FF,FF,C6,6B)A(FF,B9,3D,00)A(FF,50,32,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(FF,73,73,00)A(FF,73,73,00)A(FF,73,73,00)A(FF,73,73,00)A(FF,73,73,00)A(FF,73,73,00)A(FF,73,73,00)A(FF,73,73,00)A(FF,73,73,00)A(FF,B9,3D,00)A(FF,FF,FF,8E)A(FF,FF,55,00)A(FF,FF,55,00)A(FF,96,31,00)A(FF,50,32,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(FF,73,73,00)A(FF,FF,FF,8E)A(FF,FF,FF,8E)A(FF,FF,FF,8E)A(FF,FF,FF,8E)A(FF,FF,FF,8E)A(FF,FF,FF,8E)A(FF,FF,FF,8E)A(FF,FF,FF,8E)A(FF,B9,3D,00)A(FF,FF,FF,8E)A(FF,FF,55,00)A(FF,FF,55,00)A(FF,96,31,00)A(FF,50,32,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00) + A(FF,73,73,00)A(FF,FF,FF,8E)A(FF,FF,AA,00)A(FF,FF,FF,FF)A(FF,FF,AA,00)A(FF,FF,FF,8E)A(FF,FF,AA,00)A(FF,FF,FF,8E)A(FF,FF,AA,00)A(FF,B9,3D,00)A(FF,FF,C6,6B)A(FF,FF,55,00)A(FF,FF,55,00)A(FF,96,31,00)A(FF,50,32,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(FF,73,73,00)A(FF,FF,FF,8E)A(FF,FF,FF,FF)A(FF,FF,AA,00)A(FF,FF,FF,8E)A(FF,FF,AA,00)A(FF,FF,FF,8E)A(FF,FF,AA,00)A(FF,DC,92,00)A(FF,B9,3D,00)A(FF,FF,C6,6B)A(FF,FF,55,00)A(FF,FF,55,00)A(FF,96,31,00)A(FF,50,32,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(FF,73,73,00)A(FF,FF,FF,8E)A(FF,FF,AA,00)A(FF,FF,FF,8E)A(FF,FF,AA,00)A(FF,FF,FF,8E)A(FF,FF,AA,00)A(FF,DC,92,00)A(FF,FF,AA,00)A(FF,B9,3D,00)A(FF,FF,C6,6B)A(FF,FF,55,00)A(FF,FF,55,00)A(FF,96,31,00)A(FF,50,32,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(FF,73,73,00)A(FF,FF,FF,8E)A(FF,FF,FF,8E)A(FF,FF,AA,00)A(FF,FF,FF,8E)A(FF,FF,AA,00)A(FF,DC,92,00)A(FF,FF,AA,00)A(FF,DC,92,00)A(FF,B9,3D,00)A(FF,FF,C6,6B)A(FF,FF,55,00)A(FF,FF,55,00)A(FF,96,31,00)A(FF,50,32,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00) + A(FF,73,73,00)A(FF,FF,FF,8E)A(FF,FF,AA,00)A(FF,FF,FF,8E)A(FF,FF,AA,00)A(FF,DC,92,00)A(FF,FF,AA,00)A(FF,DC,92,00)A(FF,DC,92,00)A(FF,B9,3D,00)A(FF,FF,C6,6B)A(FF,FF,55,00)A(FF,FF,55,00)A(FF,96,31,00)A(FF,50,32,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(FF,73,73,00)A(FF,FF,FF,8E)A(FF,FF,FF,8E)A(FF,FF,AA,00)A(FF,DC,92,00)A(FF,FF,AA,00)A(FF,DC,92,00)A(FF,DC,92,00)A(FF,DC,92,00)A(FF,B9,3D,00)A(FF,FF,C6,6B)A(FF,FF,55,00)A(FF,FF,55,00)A(FF,96,31,00)A(FF,50,32,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,00,00,00)A(FF,B9,3D,00)A(FF,FF,55,00)A(FF,96,31,00)A(FF,96,31,00)A(FF,96,31,00)A(FF,50,32,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(FF,50,32,00)A(FF,50,32,00)A(FF,50,32,00)A(FF,50,32,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00)A(00,00,00,00); + memcpy ((EIF_NATURAL_32 *)$a_ptr + $a_offset, &l_data, sizeof l_data - 1); + } + }" + end + + build_colors (a_ptr: POINTER) + -- Build `colors'. + do + c_colors_0 (a_ptr, 0) + end + +feature {NONE} -- Image data filling. + + fill_memory + -- Fill image data into memory. + local + l_pointer: POINTER + do + if attached {EV_PIXEL_BUFFER_IMP} implementation as l_imp then + l_pointer := l_imp.data_ptr + if not l_pointer.is_default_pointer then + build_colors (l_pointer) + l_imp.unlock + end + end + end + +end -- ICON_TOOL_COLOR diff --git a/jj_vision/bitmaps/icon_undo_color.e b/jj_vision/bitmaps/icon_undo_color.e new file mode 100644 index 0000000..06e46fd --- /dev/null +++ b/jj_vision/bitmaps/icon_undo_color.e @@ -0,0 +1,73 @@ +note + description: "Pixel buffer that replaces original image file.% + %The original version of this class has been generated by Image Eiffel Code." + +class + ICON_UNDO_COLOR + +inherit + EV_PIXEL_BUFFER + +create + make + +feature {NONE} -- Initialization + + make + -- Initialization + do + make_with_size (16, 16) + fill_memory + end + +feature {NONE} -- Image data + + c_colors_0 (a_ptr: POINTER; a_offset: INTEGER) + -- Fill `a_ptr' with colors data from `a_offset'. + external + "C inline" + alias + "{ + { + #define B(q) \ + #q + #ifdef EIF_WINDOWS + #define A(a,r,g,b) \ + B(\x##b\x##g\x##r\x##a) + #else + #define A(a,r,g,b) \ + B(\x##r\x##g\x##b\x##a) + #endif + char l_data[] = + A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01) + A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,80)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,80)A(FF,00,00,80)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,80)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,80)A(FF,00,00,80)A(00,01,01,01)A(FF,00,00,80)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,80)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,80)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,80)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01) + A(00,01,01,01)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(FF,00,00,80)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,80)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,80)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01) + A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01); + memcpy ((EIF_NATURAL_32 *)$a_ptr + $a_offset, &l_data, sizeof l_data - 1); + } + }" + end + + build_colors (a_ptr: POINTER) + -- Build `colors'. + do + c_colors_0 (a_ptr, 0) + end + +feature {NONE} -- Image data filling. + + fill_memory + -- Fill image data into memory. + local + l_pointer: POINTER + do + check attached {EV_PIXEL_BUFFER_IMP} implementation as l_imp then + l_pointer := l_imp.data_ptr + if l_pointer /= default_pointer then + build_colors (l_pointer) + l_imp.unlock + end + end + end + +end -- ICON_UNDO_COLOR diff --git a/jj_vision/bitmaps/icon_zoom_in_color.e b/jj_vision/bitmaps/icon_zoom_in_color.e new file mode 100644 index 0000000..b13c598 --- /dev/null +++ b/jj_vision/bitmaps/icon_zoom_in_color.e @@ -0,0 +1,73 @@ +note + description: "Pixel buffer that replaces original image file.% + %The original version of this class has been generated by Image Eiffel Code." + +class + ICON_ZOOM_IN_COLOR + +inherit + EV_PIXEL_BUFFER + +create + make + +feature {NONE} -- Initialization + + make + -- Initialization + do + make_with_size (16, 16) + fill_memory + end + +feature {NONE} -- Image data + + c_colors_0 (a_ptr: POINTER; a_offset: INTEGER) + -- Fill `a_ptr' with colors data from `a_offset'. + external + "C inline" + alias + "{ + { + #define B(q) \ + #q + #ifdef EIF_WINDOWS + #define A(a,r,g,b) \ + B(\x##b\x##g\x##r\x##a) + #else + #define A(a,r,g,b) \ + B(\x##r\x##g\x##b\x##a) + #endif + char l_data[] = + A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,73)A(FF,00,00,73)A(FF,00,00,73)A(FF,00,00,73)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,73)A(FF,00,00,73)A(FF,00,DC,DC)A(FF,00,DC,DC)A(FF,00,DC,DC)A(FF,00,DC,DC)A(FF,00,00,73)A(FF,00,00,73)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,73)A(FF,00,DC,DC)A(FF,00,DC,DC)A(FF,00,00,50)A(FF,00,00,50)A(FF,00,DC,DC)A(FF,00,DC,DC)A(FF,00,00,73)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,73)A(FF,00,DC,DC)A(FF,00,DC,DC)A(FF,00,DC,DC)A(FF,00,00,50)A(FF,00,00,50)A(FF,00,DC,DC)A(FF,00,DC,DC)A(FF,00,DC,DC)A(FF,00,00,50)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,73)A(FF,00,DC,DC)A(FF,00,00,50)A(FF,00,00,50)A(FF,00,00,50)A(FF,00,00,50)A(FF,00,00,50)A(FF,00,00,50)A(FF,00,DC,DC)A(FF,00,00,50)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01) + A(FF,00,00,73)A(FF,00,DC,DC)A(FF,00,00,50)A(FF,00,00,50)A(FF,00,00,50)A(FF,00,00,50)A(FF,00,00,50)A(FF,00,00,50)A(FF,00,DC,DC)A(FF,00,00,50)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,73)A(FF,00,DC,DC)A(FF,00,DC,DC)A(FF,00,DC,DC)A(FF,00,00,50)A(FF,00,00,50)A(FF,00,DC,DC)A(FF,00,DC,DC)A(FF,00,DC,DC)A(FF,00,00,50)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,73)A(FF,00,DC,DC)A(FF,00,DC,DC)A(FF,00,00,50)A(FF,00,00,50)A(FF,00,DC,DC)A(FF,00,DC,DC)A(FF,00,00,50)A(FF,25,00,73)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,73)A(FF,00,00,73)A(FF,00,DC,DC)A(FF,00,DC,DC)A(FF,00,DC,DC)A(FF,00,DC,DC)A(FF,00,00,50)A(FF,00,92,DC)A(FF,48,B8,FF)A(FF,25,00,73)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,50)A(FF,00,00,50)A(FF,00,00,50)A(FF,00,00,50)A(FF,25,00,73)A(FF,00,92,DC)A(FF,00,92,DC)A(FF,48,B8,FF)A(FF,25,00,73)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01) + A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,25,00,73)A(FF,00,92,DC)A(FF,00,92,DC)A(FF,48,B8,FF)A(FF,25,00,73)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,25,00,73)A(FF,00,92,DC)A(FF,00,92,DC)A(FF,48,B8,FF)A(FF,25,00,73)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,25,00,73)A(FF,00,92,DC)A(FF,00,92,DC)A(FF,48,B8,FF)A(FF,25,00,73)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,25,00,73)A(FF,00,92,DC)A(FF,00,92,DC)A(FF,48,B8,FF)A(FF,00,19,50)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,25,00,73)A(FF,00,92,DC)A(FF,00,92,DC)A(FF,00,19,50) + A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,19,50)A(FF,00,19,50)A(00,01,01,01); + memcpy ((EIF_NATURAL_32 *)$a_ptr + $a_offset, &l_data, sizeof l_data - 1); + } + }" + end + + build_colors (a_ptr: POINTER) + -- Build `colors'. + do + c_colors_0 (a_ptr, 0) + end + +feature {NONE} -- Image data filling. + + fill_memory + -- Fill image data into memory. + local + l_pointer: POINTER + do + check attached {EV_PIXEL_BUFFER_IMP} implementation as l_imp then + l_pointer := l_imp.data_ptr + if l_pointer /= default_pointer then + build_colors (l_pointer) + l_imp.unlock + end + end + end + +end -- ICON_ZOOM_IN_COLOR diff --git a/jj_vision/bitmaps/icon_zoom_out_color.e b/jj_vision/bitmaps/icon_zoom_out_color.e new file mode 100644 index 0000000..1f75006 --- /dev/null +++ b/jj_vision/bitmaps/icon_zoom_out_color.e @@ -0,0 +1,73 @@ +note + description: "Pixel buffer that replaces original image file.% + %The original version of this class has been generated by Image Eiffel Code." + +class + ICON_ZOOM_OUT_COLOR + +inherit + EV_PIXEL_BUFFER + +create + make + +feature {NONE} -- Initialization + + make + -- Initialization + do + make_with_size (16, 16) + fill_memory + end + +feature {NONE} -- Image data + + c_colors_0 (a_ptr: POINTER; a_offset: INTEGER) + -- Fill `a_ptr' with colors data from `a_offset'. + external + "C inline" + alias + "{ + { + #define B(q) \ + #q + #ifdef EIF_WINDOWS + #define A(a,r,g,b) \ + B(\x##b\x##g\x##r\x##a) + #else + #define A(a,r,g,b) \ + B(\x##r\x##g\x##b\x##a) + #endif + char l_data[] = + A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,73)A(FF,00,00,73)A(FF,00,00,73)A(FF,00,00,73)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,73)A(FF,00,00,73)A(FF,00,DC,DC)A(FF,00,DC,DC)A(FF,00,DC,DC)A(FF,00,DC,DC)A(FF,00,00,73)A(FF,00,00,73)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,73)A(FF,00,DC,DC)A(FF,00,DC,DC)A(FF,00,DC,DC)A(FF,00,DC,DC)A(FF,00,DC,DC)A(FF,00,DC,DC)A(FF,00,00,73)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,73)A(FF,00,DC,DC)A(FF,00,DC,DC)A(FF,00,DC,DC)A(FF,00,DC,DC)A(FF,00,DC,DC)A(FF,00,DC,DC)A(FF,00,DC,DC)A(FF,00,DC,DC)A(FF,00,00,50)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,73)A(FF,00,DC,DC)A(FF,00,00,50)A(FF,00,00,50)A(FF,00,00,50)A(FF,00,00,50)A(FF,00,00,50)A(FF,00,00,50)A(FF,00,DC,DC)A(FF,00,00,50)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01) + A(FF,00,00,73)A(FF,00,DC,DC)A(FF,00,00,50)A(FF,00,00,50)A(FF,00,00,50)A(FF,00,00,50)A(FF,00,00,50)A(FF,00,00,50)A(FF,00,DC,DC)A(FF,00,00,50)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,73)A(FF,00,DC,DC)A(FF,00,DC,DC)A(FF,00,DC,DC)A(FF,00,DC,DC)A(FF,00,DC,DC)A(FF,00,DC,DC)A(FF,00,DC,DC)A(FF,00,DC,DC)A(FF,00,00,50)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,73)A(FF,00,DC,DC)A(FF,00,DC,DC)A(FF,00,DC,DC)A(FF,00,DC,DC)A(FF,00,DC,DC)A(FF,00,DC,DC)A(FF,00,00,50)A(FF,25,00,73)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,73)A(FF,00,00,73)A(FF,00,DC,DC)A(FF,00,DC,DC)A(FF,00,DC,DC)A(FF,00,DC,DC)A(FF,00,00,50)A(FF,00,92,DC)A(FF,48,B8,FF)A(FF,25,00,73)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,00,50)A(FF,00,00,50)A(FF,00,00,50)A(FF,00,00,50)A(FF,25,00,73)A(FF,00,92,DC)A(FF,00,92,DC)A(FF,48,B8,FF)A(FF,25,00,73)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01) + A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,25,00,73)A(FF,00,92,DC)A(FF,00,92,DC)A(FF,48,B8,FF)A(FF,25,00,73)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,25,00,73)A(FF,00,92,DC)A(FF,00,92,DC)A(FF,48,B8,FF)A(FF,25,00,73)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,25,00,73)A(FF,00,92,DC)A(FF,00,92,DC)A(FF,48,B8,FF)A(FF,25,00,73)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,25,00,73)A(FF,00,92,DC)A(FF,00,92,DC)A(FF,48,B8,FF)A(FF,00,19,50)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,25,00,73)A(FF,00,92,DC)A(FF,00,92,DC)A(FF,00,19,50) + A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(00,01,01,01)A(FF,00,19,50)A(FF,00,19,50)A(00,01,01,01); + memcpy ((EIF_NATURAL_32 *)$a_ptr + $a_offset, &l_data, sizeof l_data - 1); + } + }" + end + + build_colors (a_ptr: POINTER) + -- Build `colors'. + do + c_colors_0 (a_ptr, 0) + end + +feature {NONE} -- Image data filling. + + fill_memory + -- Fill image data into memory. + local + l_pointer: POINTER + do + check attached {EV_PIXEL_BUFFER_IMP} implementation as l_imp then + l_pointer := l_imp.data_ptr + if l_pointer /= default_pointer then + build_colors (l_pointer) + l_imp.unlock + end + end + end + +end -- ICON_ZOOM_OUT_COLOR diff --git a/jj_vision/bitmaps/pixel_buffers.e b/jj_vision/bitmaps/pixel_buffers.e new file mode 100644 index 0000000..82beea2 --- /dev/null +++ b/jj_vision/bitmaps/pixel_buffers.e @@ -0,0 +1,53 @@ +note + description: "[ + Images + ]" + author: "Jimmy J. Johnson" + date: "$Date: 2014-06-15 09:17:19 -0400 (Sun, 15 Jun 2014) $" + revision: "$Revision: 18 $" + +class + PIXEL_BUFFERS + +feature -- Access + + icon_back_color_buffer: ICON_BACK_COLOR once create Result.make end + + icon_forth_color_buffer: ICON_FORTH_COLOR + once + create Result.make + end + + icon_new_supplier_color_buffer: ICON_NEW_SUPPLIER_COLOR once create Result.make end + icon_delete_color_buffer: ICON_DELETE_COLOR once create Result.make end + icon_object_symbol_buffer: ICON_OBJECT_SYMBOL once create Result.make end + icon_new_class_color_buffer: ICON_NEW_CLASS_COLOR once create Result.make end + icon_open_file_color_buffer: ICON_OPEN_FILE_COLOR once create Result.make end + icon_save_color_buffer: ICON_SAVE_COLOR once create Result.make end + icon_undo_color_buffer: ICON_UNDO_COLOR once create Result.make end + icon_redo_color_buffer: ICON_REDO_COLOR once create Result.make end + icon_restore_color_buffer: ICON_RESTORE_COLOR once create Result.make end + icon_maximize_color_buffer: ICON_MAXIMIZE_COLOR once create Result.make end + icon_minimize_all_color_buffer: ICON_MINIMIZE_ALL_COLOR once create Result.make end + icon_restore_all_color_buffer: ICON_RESTORE_ALL_COLOR once create Result.make end + icon_close_color_buffer: ICON_CLOSE_COLOR once create Result.make end + icon_format_text_color_buffer: ICON_FORMAT_TEXT_COLOR once create Result.make end + icon_new_development_tool_color_buffer: ICON_NEW_DEVELOPMENT_TOOL_COLOR once create Result.make end + icon_folders_color_buffer: ICON_FOLDERS_COLOR once create Result.make end + icon_help_tool_color_buffer: ICON_HELP_TOOL_COLOR once create Result.make end + icon_shell_color_buffer: ICON_SHELL_COLOR once create Result.make end + icon_zoom_in_color_buffer: ICON_ZOOM_IN_COLOR once create Result.make end + icon_zoom_out_color_buffer: ICON_ZOOM_OUT_COLOR once create Result.make end + icon_supplier_color_buffer: ICON_SUPPLIER_COLOR once create Result.make end + + icon_edit_expression_color_buffer: ICON_EDIT_EXPRESSION_COLOR once create Result.make end + icon_tool_color_buffer: ICON_TOOL_COLOR once create Result.make end + icon_reset_diagram_color_buffer: ICON_RESET_DIAGRAM_COLOR once create Result.make end + icon_check_exports_color_buffer: ICON_CHECK_EXPORTS_COLOR once create Result.make end + + Icon_bparrow_color_buffer: ICON_BPARROW_COLOR once create Result.make end + Icon_client_link_buffer: CLIENTLNK once create Result.make end + + icon_auto_slice_limits_color_buffer: ICON_AUTO_SLICE_LIMITS_COLOR once create Result.make end + icon_format_exporteds_color_buffer: ICON_FORMAT_EXPORTEDS_COLOR once create Result.make end +end diff --git a/jj_vision/interface/commands/add_field_command.e b/jj_vision/interface/commands/add_field_command.e new file mode 100644 index 0000000..794739c --- /dev/null +++ b/jj_vision/interface/commands/add_field_command.e @@ -0,0 +1,21 @@ +note + description: "[ + {COMMAND} to add a field to a {SCHEMA} + ]" + author: "Jimmy J. Johnson" + copyright: "Copyright 2012, Jimmy J. Johnson" + license: "Eiffel Forum License v2 (see forum.txt)" + URL: "$URL: file:///F:/eiffel_repositories/jj_vision/trunk/interface/commands/add_field_command.e $" + date: "$Date: 2012-03-16 14:05:07 -0400 (Fri, 16 Mar 2012) $" + revision: "$Revision: 7 $" + +class + ADD_FIELD_COMMAND + +inherit + EDIT_COMMAND + +create + make + +end diff --git a/jj_vision/interface/commands/change_fields_command.e b/jj_vision/interface/commands/change_fields_command.e new file mode 100644 index 0000000..6c0ecfa --- /dev/null +++ b/jj_vision/interface/commands/change_fields_command.e @@ -0,0 +1,153 @@ +note + description: "[ + Used by {EDIT_TOOL} to add or remove a {FIELD} in a {SCHEMA}. + Note: this is not to be confused with {EDIT_COMMAND} which is used + to change the "data" in a record or to change the positioning of a + {FIELD}; this changes the {SCHEMA} itself. + ]" + date: "6 Oct 07" + author: "Jimmy J. Johnson" + copyright: "Copyright 2012, Jimmy J. Johnson" + license: "Eiffel Forum License v2 (see forum.txt)" + URL: "$URL: file:///F:/eiffel_repositories/jj_vision/trunk/interface/commands/change_fields_command.e $" + date: "$Date: 2013-04-25 18:11:22 -0400 (Thu, 25 Apr 2013) $" + revision: "$Revision: 14 $" + +class + CHANGE_FIELDS_COMMAND + +inherit + + JJ_COMMAND + redefine + text, + affected_objects, + execute, + undo, + is_executable, + is_undoable + end + +create + make + +feature {NONE} -- Initialization + + make (a_schema: like schema; a_field: like field) + -- Create an instance + do + default_create + schema := a_schema + field := a_field + end + +feature -- Access + + text: STRING + -- Name of this command + do + Result := "Change schema" + end + + schema: SCHEMA + -- The SCHEMA being changed + + field: FIELD + -- FIELD which identifies the "item" to be changed + + affected_objects: LINKED_SET [ANY] + -- Set of objects changable by this command + do + Result := Precursor {JJ_COMMAND} + Result.extend (schema) + Result.extend (field) + end + +feature -- Element change + + set_schema (a_schema: like schema) + -- Change `schema' + require + schema_exists: a_schema /= Void + do + schema := a_schema + ensure + schema_assigned: schema = a_schema + end + + set_field (a_field: FIELD) + -- Change `field' + require + field_exists: a_field /= Void + do + field := a_field + ensure + field_assigned: field = a_field + end + +feature -- Basic operations + + execute + -- Perform the command + do + Precursor {JJ_COMMAND} + schema.time_modified.set_now_utc_fine + if is_delete_command then + schema.start + schema.prune (field) + else + schema.extend (field) + end + end + + undo + -- Undo the command + do + Precursor {JJ_COMMAND} + schema.time_modified.set_now_utc_fine + if is_delete_command then + schema.extend (field) + else + schema.start + schema.prune (field) + end + end + +feature -- Status report + + is_executable: BOOLEAN + -- Can the command be executed? + do + Result := Precursor {JJ_COMMAND} and then + (schema /= Void and field /= Void) and then + (is_delete_command implies schema.has (field)) + end + + is_undoable: BOOLEAN + -- Can the command be undone? + do + Result := PRECURSOR {JJ_COMMAND} and then + (schema /= Void and then field /= Void) and then + (is_delete_command implies not schema.has (field)) + end + +feature -- Status setting + + set_delete_action + -- Make this command delete `field' from `schema' when `execute' is called. + do + is_delete_command := True + end + + set_add_action + -- Make this command add `field' to `schema' when `execute' is called. + do + is_delete_command := False + end + +feature {NONE} -- Implementation + + is_delete_command: BOOLEAN + -- Is this command to be used to delete `field' from `schema'? + +end diff --git a/jj_vision/interface/commands/command_manager.e b/jj_vision/interface/commands/command_manager.e new file mode 100644 index 0000000..174c95f --- /dev/null +++ b/jj_vision/interface/commands/command_manager.e @@ -0,0 +1,217 @@ +note + description: "[ + Objects used by {JJ_APPLICATION} to allow commands to be + undone and redone. + ]" + date: "2 Oct 03" + author: "Jimmy J. Johnson" + copyright: "Copyright 2012, Jimmy J. Johnson" + license: "Eiffel Forum License v2 (see forum.txt)" + URL: "$URL: file:///F:/eiffel_repositories/jj_vision/trunk/interface/commands/command_manager.e $" + date: "$Date: 2012-07-01 01:30:44 -0400 (Sun, 01 Jul 2012) $" + revision: "$Revision: 12 $" + +class + COMMAND_MANAGER + +inherit + + SHARED + export + {NONE} all + undefine + default_create, + copy, + is_equal + end + + LINKED_LIST [JJ_COMMAND] + export + {LINKED_LIST} + all +-- {NONE} +-- all +-- {LINKED_LIST} +-- start, +-- forth, +-- first_element, +-- last_element, +-- count, +-- object_comparison, +-- cursor, +-- go_to, +-- index + {ANY} + wipe_out, + prunable, +-- item, + is_empty, +-- readable, +-- off, + has, + is_equal +-- standard_is_equal, +-- copy, +-- same_type + redefine + default_create, + wipe_out + end + +create + default_create, make + +feature {NONE} -- Initialization + + default_create + -- Initialize `Current'. + do + make + end + +feature -- Access + + marked_index: INTEGER + -- Mark the command at current `last_executed_index' + + last_executed_index: INTEGER + -- Index of last executed (and next undoable) command. + + command: JJ_COMMAND + -- Last inserted command. + require + not_empty: not is_empty + do + Result := i_th (last_executed_index) + end + +feature -- Element change + + add_command (a_command: JJ_COMMAND) + -- Remove any commands which have been undone (they will not be + -- executable after `a_command' is added), then add `a command' + -- to the list and execute it. + require + not_has_command: not has (a_command) + do + from go_i_th (last_executed_index + 1) + until after or else is_empty + loop + remove + end + extend (a_command) + execute + check + last_executed_index = index_of (a_command, 1) + end + ensure + command_added: has (a_command) + command_executed: last_executed_index = count + end + + set_mark + -- Save a reference to the currently undoable command. + -- Useful for marking the command state at which a + -- system was saved. + do + marked_index := last_executed_index + end + +feature -- Status report + + is_undoable: BOOLEAN + -- Can a command be undone? + do + Result := last_executed_index > 0 + end + + is_executable: BOOLEAN + -- Is there a command which can be executed? + -- That is, was one previousely undone or added? + do + Result := last_executed_index + 1 <= count + end + + is_at_marked_state: BOOLEAN + -- Is the cursor at item which was marked_index. + -- Useful for marking and checking if / when a system was saved. + do + Result := last_executed_index = marked_index + end + +feature -- Basic operations + + wipe_out + -- Remove all commands from Current, erasing history. + do + Precursor + last_executed_index := 0 + marked_index := 0 + end + + execute + -- Execute the command at `last_executed_index'. + require + can_execute_a_command: is_executable + local + v: VIEW + c: JJ_COMMAND + do + last_executed_index := last_executed_index + 1 + c := i_th (last_executed_index) + c.execute +-- Persistence_manager.extend_objects (c.affected_objects) + -- Get a view so the views with the objects changed + -- by executing the command can be updated. + v := main_windows.first +-- v.notify_views_with_set (c.affected_objects) + v.draw_views_with_set (c.affected_objects) + -- Call `set_widget_states' to update the undo, redo, and save, etc. buttons. + main_windows.do_all (agent {JJ_MAIN_WINDOW}.set_widget_states) + ensure + last_executed_index_incremented: last_executed_index = old last_executed_index + 1 + end + + undo + -- Reverse execute the last command. + require + can_undo_a_command: is_undoable + local + v: VIEW + c: JJ_COMMAND + do + -- Get the command at the current index and undo it. + c := i_th (last_executed_index) + c.undo + last_executed_index := last_executed_index - 1 +-- persistence_manager.extend_objects (c.affected_objects) + -- Need to get a view so the views with the objects changed + -- by undoing the command can be updated. + v := main_windows.first +-- v.notify_views_with_set (c.affected_objects) + v.draw_views_with_set (c.affected_objects) + -- Call `set_widget_states' to update the undo, redo, and save, etc. buttons. + main_windows.do_all (agent {JJ_MAIN_WINDOW}.set_widget_states) + ensure + last_executed_index_decremented: last_executed_index = old last_executed_index - 1 + end + +feature {NONE} -- Implementation (Handles to "global" application objects) + +-- Persistence_manager: PERSISTENCE_MANAGER is +-- -- Handle (for convinience) to the JJ_APPLICATION's `persistence_manager'. +-- local +-- app: JJ_APPLICATION +-- once +-- app ?= (create {EV_ENVIRONMENT}).application +-- check +-- app /= Void +-- -- Because this class if for use by a JJ_APPLICATION +-- end +-- Result := app.persistence_manager +-- ensure +-- result_exists: Result /= Void +-- end + +end + diff --git a/jj_vision/interface/commands/edit_command.e b/jj_vision/interface/commands/edit_command.e new file mode 100644 index 0000000..0a96ecc --- /dev/null +++ b/jj_vision/interface/commands/edit_command.e @@ -0,0 +1,149 @@ +note + description: "[ + Command used to change a field of an {EDITABLE}. + ]" + date: "27 Jan 05" + author: "Jimmy J. Johnson" + copyright: "Copyright 2012, Jimmy J. Johnson" + license: "Eiffel Forum License v2 (see forum.txt)" + URL: "$URL: file:///F:/eiffel_repositories/jj_vision/trunk/interface/commands/edit_command.e $" + date: "$Date: 2013-04-25 18:11:22 -0400 (Thu, 25 Apr 2013) $" + revision: "$Revision: 14 $" + +class + EDIT_COMMAND + +inherit + + JJ_COMMAND + redefine + text, + affected_objects, + execute, + undo, + is_executable, + is_undoable + end + +create + make + +feature {NONE} -- Initialization + + make (a_record: like record; a_field: like field; a_value: like value) + -- Initialize Current + do + default_create + record := a_record + field := a_field + value := a_value + end + +feature -- Access + + text: STRING + -- Name of this command + do + Result := "Edit record" + end + + record: EDITABLE + -- Object to be changed. + + field: FIELD + -- FIELD which identifies the "item" to be changed + + value: ANY + -- New value + + affected_objects: LINKED_SET [ANY] + -- Set of objects changable by this command + do + create Result.make + Result.extend (record) + end + +feature -- Element change + + set_record (a_record: like record) + -- Change `record' + require + record_exists: a_record /= Void + do + record := a_record + ensure + record_assigned: record = a_record + end + + set_field (a_field: FIELD) + -- Change `field' + require + field_exists: a_field /= Void + do + field := a_field + ensure + field_assigned: field = a_field + end + + set_value (a_value: ANY) + -- Change `value'. + require + value_exists: a_value /= Void + do + value := a_value + ensure + value_assigned: value = a_value + end + +feature -- Basic operations + + execute + -- Perform the command + do + if record.has_value (field.label) then + old_field := field + old_value := record.value (field.label) + end + record.extend_value (value, field.label) + Precursor {JJ_COMMAND} + end + + undo + -- Undo the command + do + if attached old_field as of then + record.extend_value (of, field.label) + else + record.remove_value (field.label) + end + Precursor {JJ_COMMAND} + end + +feature -- Status report + + is_executable: BOOLEAN + -- Can the command be executed? + do + Result := Precursor {JJ_COMMAND} and then + record /= Void and field /= Void and value /= Void + end + + is_undoable: BOOLEAN + -- Can the command be undone? + do + Result := Precursor {JJ_COMMAND} and then + (record /= Void and (old_field /= Void implies old_value /= Void)) and + record.has_value (field.label) + end + +feature {NONE} -- Implementation + + old_value: detachable ANY + -- Hold on to the old value in case of `undo' + + old_field: detachable FIELD + -- Hold the old field. If Void we know that the record previously + -- did not have a field for the one just added by `execute', so + -- `undo' will remove `field'. + +end diff --git a/jj_vision/interface/commands/edit_schema_command.e b/jj_vision/interface/commands/edit_schema_command.e new file mode 100644 index 0000000..6b4f531 --- /dev/null +++ b/jj_vision/interface/commands/edit_schema_command.e @@ -0,0 +1,126 @@ +note + description: "[ + Used by {EDIT_TOOL} to change a {FIELD} in a {SCHEMA}. + Note: this is not to be confused with {EDIT_COMMAND} which is used + to change the "data" in a record or to change the positioning of a + {FIELD}; this changes the {SCHEMA} itself. + ]" + date: "16 Mar 06" + author: "Jimmy J. Johnson" + copyright: "Copyright 2012, Jimmy J. Johnson" + license: "Eiffel Forum License v2 (see forum.txt)" + URL: "$URL: file:///F:/eiffel_repositories/jj_vision/trunk/interface/commands/edit_schema_command.e $" + date: "$Date: 2012-03-16 14:05:07 -0400 (Fri, 16 Mar 2012) $" + revision: "$Revision: 7 $" + +class + EDIT_SCHEMA_COMMAND + +inherit + + EDIT_COMMAND + redefine + make, + text, + affected_objects, + execute, + undo, + is_executable, + is_undoable + end + +create + make + +feature {NONE} -- Initialization + + make (a_record: like record; a_field: like field; a_value: like value) + -- Initialize Current + do + Precursor (a_record, a_field, a_value) + create schema + end + +feature -- Access + + text: STRING + -- Name of this command + do + Result := "Edit schema" + end + + schema: SCHEMA + -- The SCHEMA being changed + + affected_objects: LINKED_SET [ANY] + -- Set of objects changable by this command + do + Result := Precursor {EDIT_COMMAND} + Result.extend (schema) + Result.extend (field) + end + +feature -- Element change + + set_schema (a_schema: like schema) + -- Change `schema' + require + schema_exists: a_schema /= Void + do + schema := a_schema + ensure + schema_assigned: schema = a_schema + end + +feature -- Basic operations + + execute + -- Perform the command + do + schema.time_modified.set_now_utc_fine + Precursor {EDIT_COMMAND} + end + + undo + -- Undo the command + do + schema.time_modified.set_now_utc_fine + Precursor {EDIT_COMMAND} + end + +feature -- Status report + + is_executable: BOOLEAN + -- Can the command be executed? + do + Result := Precursor {EDIT_COMMAND} and then + (schema /= Void and field /= Void) + end + + is_undoable: BOOLEAN + -- Can the command be undone? + do + Result := PRECURSOR {EDIT_COMMAND} and then + (schema /= Void and field /= Void) + end + +feature -- Status setting + + set_delete_action + -- Make this command delete `field' from `schema' when `execute' is called. + do + is_delete_command := True + end + + set_add_action + -- Make this command add `field' to `schema' when `execute' is called. + do + is_delete_command := False + end + +feature {NONE} -- Implementation + + is_delete_command: BOOLEAN + -- Is this command to be used to delete `field' from `schema'? + +end diff --git a/jj_vision/interface/commands/jj_command.e b/jj_vision/interface/commands/jj_command.e new file mode 100644 index 0000000..37b7377 --- /dev/null +++ b/jj_vision/interface/commands/jj_command.e @@ -0,0 +1,102 @@ +note + description: "[ + Root class for commands, allowing undo and redo, and to + facilitate history functions. + ]" + author: "Jimmy J. Johnson" + copyright: "Copyright 2012, Jimmy J. Johnson" + license: "Eiffel Forum License v2 (see forum.txt)" + URL: "$URL: file:///F:/eiffel_repositories/jj_vision/trunk/interface/commands/jj_command.e $" + date: "$Date: 2014-06-15 09:17:19 -0400 (Sun, 15 Jun 2014) $" + revision: "$Revision: 18 $" + +class + JJ_COMMAND + +inherit + + ANY + redefine + default_create + end + +create + default_create + +feature {NONE} -- Initialization + + default_create + -- Set up the command + do + create explanation.make + create affected_objects_imp.make + end + +feature -- Access + + text: STRING + -- Texual representation of what the command does. + do + Result := "do nothing" + end + + explanation: LINKED_LIST [STRING] + -- List of reasons why a command was not executed or undone + -- Can be queried after a call to `is_executable' or `is_undoable' + +feature -- Basic operations + + execute + -- Execute the action represented by the command. + require + executable: is_executable + do + was_executed := True + end + + undo + -- Reverse the action performed in `execute'. + require + undoable: is_undoable + do + was_executed := False + end + + affected_objects: LINKED_SET [ANY] + -- List of object whose views must be updated + do + Result := affected_objects_imp + end + +feature -- Status report + + is_executable: BOOLEAN + -- Can the command be executed? + do + explanation.wipe_out + Result := not was_executed + if not Result then + explanation.extend ("Command already executed") + end + end + + is_undoable: BOOLEAN + -- Can the command be undone? + do + explanation.wipe_out + Result := was_executed + if not Result then + explanation.extend ("Command not yet executed") + end + end + + was_executed: BOOLEAN + -- Has the command been executed? + +feature {NONE} -- Implementation + + affected_objects_imp: like affected_objects + -- List of objects affected by Current + +end + diff --git a/jj_vision/interface/controls/comparable_control.e b/jj_vision/interface/controls/comparable_control.e new file mode 100644 index 0000000..4fb56ca --- /dev/null +++ b/jj_vision/interface/controls/comparable_control.e @@ -0,0 +1,44 @@ +note + description: "[ + A {CONTROL} which allows the editting of a {COMPARABLE}. + ]" + date: "24 Feb 04" + author: "Jimmy J. Johnson" + copyright: "Copyright 2009, Jimmy J. Johnson" + license: "Eiffel Forum License v2 (see forum.txt)" + URL: "$URL: file:///F:/eiffel_repositories/jj_vision/trunk/interface/controls/comparable_control.e $" + date: "$Date: 2012-03-16 14:05:07 -0400 (Fri, 16 Mar 2012) $" + revision: "$Revision: 7 $" + +deferred class + COMPARABLE_CONTROL + +inherit + + CONTROL + redefine + value, + default_field + end + +feature -- Access + + value: COMPARABLE + -- A new object represented by the display. + -- Define to convert the display into the + -- desired type. + do + check attached {COMPARABLE} Precursor as c then + Result := c + end + end + +feature {FIELD_EDITOR_VIEW} -- Implementation + + default_field: COMPARABLE_FIELD + -- Create a field to be used if Current was `default_create'd. + -- The anchor for `field'. + deferred + end + +end diff --git a/jj_vision/interface/controls/control.e b/jj_vision/interface/controls/control.e new file mode 100644 index 0000000..039da0b --- /dev/null +++ b/jj_vision/interface/controls/control.e @@ -0,0 +1,455 @@ +note + description: "[ + Used with {EDITOR} classes to make EV_WIDGETs for displaying and + editting an object. It is composed of an EV_TEXT_FIELD, `display' + and an optional EV_LABEL, `label' which can be positioned to the + top, left, right, or bottom of the `display'. + + A {CONTROL} can be created normally with `default_create' or using + `create_from_field'. Feature `create_from_field' is used to allow + creation of controls from a {SCHEMA} (a list of {FIELD}) for placement + in an {DIALOG_EDITOR_VIEW} (a form maker). Features from `field' can + then be used to determine placement, size, etc for the {CONTROL}. + + The object to be editted is placed into the control with feature + `set_data' and is stored in `data' from ANY. The current `value' + of the object can be obtained if `is_display_valid'. Feature + `is_display_valid' is True when the string displayed in the `text' + field of `display' can be converted into an object of the correct + type. This convertion is ultimately done by feature `string_to_type' + from class FIELD through `field'. + ]" + instructions: "[ + To allow the editting of objects of types other than STRING, redefine + `default_field', or create an heir of {FIELD}, redefine `type'. + + Feature `draw' takes care of checking the `values' type and putting + into `display' the appropriate string if the type of the `value' + does not conform to the control, or if there is no data, etc. If + the data is good then `draw_display' is called to show the actual + data. Therefore, do not redefine `draw'; redefine `draw_data'. + ]" + date: "5 Mar 03" + author: "Jimmy J. Johnson" + copyright: "Copyright 2009, Jimmy J. Johnson" + license: "Eiffel Forum License v2 (see forum.txt)" + URL: "$URL: file:///F:/eiffel_repositories/jj_vision/trunk/interface/controls/control.e $" + date: "$Date: 2012-03-16 14:05:07 -0400 (Fri, 16 Mar 2012) $" + revision: "$Revision: 7 $" + +deferred class + CONTROL + +inherit + + EV_STOCK_COLORS + rename + implementation as colors_implementation + export + {NONE} all + undefine + default_create, + copy, + is_equal + end + + -- Current must be an EV_WIDGET of some sort in order to be placed into + -- and EV_CONTAINER. That's the whole point; do not delete EV_FIXED + -- without adding some other widget. + EV_FIXED + redefine + set_data, + initialize, + create_interface_objects, + destroy, + is_destroyed, + is_in_default_state +-- enable_sensitive, +-- disable_sensitive, +-- is_sensitive + end + +feature {NONE} -- Initialization + + create_interface_objects + -- Create objects to be used by `Current' in `initialize' + -- Implemented by descendants to create attached objects + -- in order to adhere to void-safety due to the implementation bridge pattern. + do + Precursor {EV_FIXED} + create valid_change_actions + create select_actions + create label + create display + field := Default_field + end + + initialize + -- Set up the control + do + Precursor {EV_FIXED} + label.set_minimum_width (1) + label.set_minimum_height (1) + display.set_minimum_height (20) + display.set_minimum_width (50) + extend (label) + extend (display) + -- descendents must create the `display' + -- and set_actions for display. + label_position := Label_top + label.set_pebble_function (agent get_field) +-- label.set_drag_and_drop_mode + set_actions + field.control_list.extend (Current) + end + + make_from_field (a_field: like field) + -- Create a control using the values in `a_field'. + do + default_create + field := a_field + field.control_list.extend (Current) + end + + set_actions + -- Add actions to the controls of Current. + do + display.change_actions.extend (agent on_display_changed) + label.pointer_button_press_actions.extend (agent on_control_selected) + display.pointer_button_press_actions.extend (agent on_control_selected) + end + +feature -- Access + + value: ANY + -- A new object created from the `text' in `display'. + -- Normally only redefine to change the result type by using an + -- assignment attempt on Precursor. This is to to preserve + -- the "definition" post-condition. + require + display_is_valid: is_display_valid + do + Result := field.string_to_type (display.text) + ensure + valid_result: Result /= Void + definition: equal (Result, field.string_to_type (display.text)) + end + + field: like Default_field + -- Dictates appearanced of current Control + -- Redefine `Default_field' to change the type. + + valid_change_actions: EV_NOTIFY_ACTION_SEQUENCE + -- Actions to be called when this control changes to a valid value. + + select_actions: EV_NOTIFY_ACTION_SEQUENCE + -- Actions to be called when this control is selected + +feature -- Element change + + frozen set_data (a_data: ANY) + -- Pass in any type of object and display the string representation + -- of it by calling `refresh'. + -- The argument can be Void as it will be checked on `refresh' and + -- the control will so indicate. + do + Precursor {EV_FIXED} (a_data) + refresh + end + + set_label_top + -- Make the 'label' appear to the top of the `display' + do + label_position := Label_top + ensure + label_position_correct: label_position = Label_top + end + + set_label_bottom + -- Make the 'label' appear to the bottom of the `display' + do + label_position := Label_bottom + ensure + label_position_correct: label_position = Label_bottom + end + + set_label_left + -- Make the `label' appear to the left of the `display'. + do + label_position := Label_left + ensure + label_position_correct: label_position = Label_left + end + + set_label_right + -- Make the 'label' appear to the right of the `display' + do + label_position := Label_right + ensure + label_position_correct: label_position = Label_right + end + + set_label_none + -- Make the 'label' not appear at all. Make a labelless control. + do + label_position := Label_none + ensure + label_position_correct: label_position = Label_none + end + +feature -- Basic operations + + destroy + -- Remove Current from the `control_list' in `field' when + -- the underlying graphical object is destroyed. + do + Precursor {EV_FIXED} + field.control_list.prune (Current) + ensure then + control_not_in_list: not field.control_list.has (Current) + end + + build + -- Position and size the `label' and `display' based on + -- values in `field'. + local + fh: INTEGER + f: EV_FONT + s_size: TUPLE [INTEGER, INTEGER] + do + label.set_text (field.label) + set_item_height (label, (label.font.height).max (label.minimum_height)) + set_item_width (label, (label.font.string_width (label.text)).max (label.minimum_width)) +-- set_item_height (display, field.height.item.max (display.minimum_height)) + set_item_width (display, field.width.item.max (display.minimum_width)) + -- Set the height of the font in `display'. + fh := field.height.item + f := display.font.twin + f.set_height (fh.max (1)) -- `max' to meet precondition h > 0 + display.set_font (f) + -- Use any string because all I need is the height a string + -- would be if it were displayed in that font. I can't use + -- display.text because when the control is first built there + -- may not be any text in it. + s_size := f.string_size ("This is a STRING.") + check attached {INTEGER_REF} s_size.item (2) as dh then + -- because result of `string_size' is a TUPLE [INTEGER, INTEGER] + set_item_height (display, dh.item.max (display.minimum_height)) + end + -- Place the label in the correct possition. + inspect + label_position + when Label_left then + set_item_position (label, 0, 0) + set_item_position (display, label.x_position + label.width, 0) + set_minimum_width (label.width + display.width) + set_minimum_height ((display.height).max (label.height)) + when Label_top then + set_item_position (label, 0, 0) + set_item_position (display, 0, label.font.height) + set_minimum_width ((display.width).max (label.width)) + set_minimum_height (display.height + label.height) + when Label_right then + set_item_position (label, field.width.item.max (display.minimum_width), 0) + set_item_position (display, 0, 0) + set_minimum_width (label.width + display.width) + set_minimum_height ((display.height).max (label.height)) + when Label_bottom then + set_item_position (label, 0, field.height.item.max (display.minimum_height)) + set_item_position (display, 0, 0) + set_minimum_width ((display.width).max (label.width)) + set_minimum_height (display.height + label.height) + when Label_none then + set_item_height (label, label.minimum_height) + set_item_width (label, label.minimum_width) + set_item_position (label, 0, 0) + set_minimum_width (display.width) + set_minimum_height (display.height) + else + check + should_not_happen: False + end + end + end + + frozen refresh + -- Displays the string representation of `data'. + -- Normally do not redefine; redefine `load_display' instead. + do + display.change_actions.block +-- change_actions.block + if field.is_calculated then +-- display.disable_sensitive + else + display.enable_sensitive + end + if field.is_calculated then + display.set_text ("{CONTROL}.refresh -- fix me") +-- display.set_text (field.function_result_as_string) + elseif attached data as d then + display.set_text (field.type_to_string (d)) + else + display.set_text ("Void") + end + build_colors +-- change_actions.resume + display.change_actions.resume + end + +feature -- Query + + is_display_valid: BOOLEAN + -- Is the representation in `display' valid for + -- object of `Type' based on `field'? + -- Default is True because assumes `Type' is an ANY. + do + Result := not equal (display.text, Void_representation) and then + field.is_valid_data (display.text) + end + +feature -- Status report + + is_in_default_state: BOOLEAN = True + -- redefined to make it get past the Eiffel Vision2 + -- post condition of `default create'. + + is_destroyed: BOOLEAN + -- Is current usable as a widget? + do + Result := Precursor {EV_FIXED} and not field.control_list.has (Current) + end + +-- is_sensitive: BOOLEAN is +-- -- Is the object sensitive to user input? +-- do +-- Result := display.is_sensitive +-- end +-- +--feature -- Status setting +-- +-- enable_sensitive is +-- -- Make the `display' sensitive to user input. +-- do +-- display.enable_sensitive +-- end +-- +-- disable_sensitive is +-- -- Make the `display' unresponsive to user input. +-- do +-- display.disable_sensitive +-- end + +feature {NONE} -- Implementation + + load_display (a_value: STRING) + -- Put `a_value' into `display'. + -- This feature should be called when redefining. +-- require +-- value_exists: a_value /= Void + do + display.set_text (a_value.out) + end + + build_colors + -- Change display to red if the `text' in `display' + -- (not necessarilly the same `data' that is in + -- Current) is not valid. + do + if is_display_valid then + display.set_foreground_color (Black) + else + display.set_foreground_color (Red) + end + end + + get_field: like field + -- Getter function for `field' so can use `set_pebble_function'. + -- `set_pebble_function' cannot take an attribute such as + -- `field' as a parameter; it must be a function. + do + Result := field + end + + refresh_dependent_controls + -- Refresh all other controls which are dependent on + -- this one. Called when display changes. + local + c_list: LINKED_LIST [CONTROL] + c: CONTROL + do + c_list := field.controls_dependent + from c_list.start + until c_list.exhausted + loop + c := c_list.item + if c /= Current then + c.refresh + end + c_list.forth + end + end + + on_display_changed + -- Update because something was done in the control + do + build_colors + refresh_dependent_controls + if is_display_valid then + valid_change_actions.call ([Current]) + end + end + + on_control_selected (a_x, a_y, button: INTEGER; + a_x_tilt, a_y_tilt, a_pressure: DOUBLE; + a_screen_x, a_screen_y: INTEGER) + -- Execute the agents in `select_actions' + -- The parameters are ignored but are needed to match the + -- signature of the `pointer_button_press_actions' of `display'. + -- EV_ACTION_SEQUENCE [TUPLE [x, y, button: INTEGER; x_tilt, y_tilt, pressure: DOUBLE; screen_x, screen_y: INTEGER]] + do + select_actions.call ([Current]) + end + +feature {FIELD_EDITOR_VIEW} -- Implementation + + label: EV_LABEL + -- Displays the name (`key') if `is_label_shown' + + display: EV_TEXT_FIELD + -- Displays the `value'. + + label_position: INTEGER + -- Where is the label displayed? (top, + -- bottom, left, or right of the `display'. + + Label_top, Label_bottom, Label_left, Label_right, Label_none: INTEGER = unique + -- Position of `label' in relation to display + + default_field: FIELD + -- Create a field to be used if Current was `default_create'd. + -- The anchor for `field'. + deferred + end + + Void_representation: STRING_32 + -- A string with the value "Void". + once + create Result.make_from_string ("Void") + ensure + definition: equal (Result, ("Void").as_string_32) + end + +invariant + + field_exists: field /= Void + label_exists: label /= Void + display_exists: display /= Void + select_actions_exists: select_actions /= Void + valid_change_actions_exists: valid_change_actions /= Void + + in_control_list_if_not_destroyed: not is_destroyed implies field.control_list.has (Current) + not_in_control_list_if_destroyed: is_destroyed implies not field.control_list.has (Current) + + is_sensitive_definition: is_sensitive implies display.is_sensitive + +end diff --git a/jj_vision/interface/controls/integer_control.e b/jj_vision/interface/controls/integer_control.e new file mode 100644 index 0000000..2a71690 --- /dev/null +++ b/jj_vision/interface/controls/integer_control.e @@ -0,0 +1,102 @@ +note + description: "[ + A {CONTROL} for changing integers + ]" + author: "Jimmy J. Johnson" + copyright: "Copyright 2012, Jimmy J. Johnson" + license: "Eiffel Forum License v2 (see forum.txt)" + URL: "$URL: file:///F:/eiffel_repositories/jj_vision/trunk/interface/controls/integer_control.e $" + date: "$Date: 2012-03-16 14:05:07 -0400 (Fri, 16 Mar 2012) $" + revision: "$Revision: 7 $" + +class + INTEGER_CONTROL + +inherit + + SPIN_CONTROL + redefine + initialize, + value, + set_actions, + increment, + decrement + end + +create + default_create, + make_from_field + +feature {NONE} -- Initialization + + initialize + -- Set up the object + do + Precursor {SPIN_CONTROL} + delta := 1 + end + + set_actions + -- Add actions to the `display'. + do + Precursor {SPIN_CONTROL} + end + +feature -- Access + + value: INTEGER_REF + -- A new object represented by the string in the display. + -- Redefine to convert the displayed string into the + -- desired type. + do + check attached {INTEGER_REF} Precursor {SPIN_CONTROL} as c then + Result := c + end + end + + delta: INTEGER + -- The amount to change `value' when one of the buttons is pressed. + +feature -- Element change + + set_delta (a_delta: INTEGER) + -- Change `delta' + require + positive_delta: a_delta > 0 + do + delta := a_delta + ensure + delta_assigned: delta = a_delta + end + +feature -- Basic operations + + increment + -- Increase the `value' by amount `step'. + do + Precursor {SPIN_CONTROL} + set_data (value.item + delta) + on_display_changed + end + + decrement + -- Decrease the `value' by amount `step'. + do + Precursor {SPIN_CONTROL} + set_data (value.item - delta) + on_display_changed + end + +feature {NONE} -- Implementation + + default_field: INTEGER_FIELD + -- Dictates appearanced of current Control + do + create Result + end + +invariant + + positive_delta: delta > 0 + +end diff --git a/jj_vision/interface/controls/spin_control.e b/jj_vision/interface/controls/spin_control.e new file mode 100644 index 0000000..18d99c5 --- /dev/null +++ b/jj_vision/interface/controls/spin_control.e @@ -0,0 +1,212 @@ +note + description: "[ + A {CONTROL} that adds an `increment_button' and a `decrement_button' + which the user can press to increase or decrease the `value'. + Feature `increment' and `decrement' must be redefined to change + `value', but call the Precursors to make the buttons repeat. + ]" + date: "23 Aug 04" + author: "Jimmy J. Johnson" + copyright: "Copyright 2012, Jimmy J. Johnson" + license: "Eiffel Forum License v2 (see forum.txt)" + URL: "$URL: file:///F:/eiffel_repositories/jj_vision/trunk/interface/controls/spin_control.e $" + date: "$Date: 2012-03-16 14:05:07 -0400 (Fri, 16 Mar 2012) $" + revision: "$Revision: 7 $" + +deferred class + SPIN_CONTROL + +inherit + + COMPARABLE_CONTROL + redefine + initialize, + create_interface_objects, + set_actions, + build +-- enable_sensitive, +-- disable_sensitive, +-- is_sensitive + end + +feature {NONE} -- Initialization + + initialize + -- Set up the control + do + extend (increment_button) + extend (decrement_button) + show_buttons + Precursor {COMPARABLE_CONTROL} + end + + create_interface_objects + -- Create objects to be used by `Current' in `initialize' + -- Implemented by descendants to create attached objects + -- in order to adhere to void-safety due to the implementation bridge pattern. + do + Precursor {COMPARABLE_CONTROL} + create timeout + create increment_button + create decrement_button + timeout.set_interval (500) -- one-half a second? + increment_button.set_text ("+") + decrement_button.set_text ("-") + increment_button.set_minimum_width (10) + decrement_button.set_minimum_width (10) + increment_button.set_minimum_height (1) + decrement_button.set_minimum_height (1) + end + + set_actions + -- Add actions to the buttons. + do + Precursor {COMPARABLE_CONTROL} + -- To make the spin function work `increment' and `decrement' actions are + -- added, not to the buttons, but to a timer which will be started and killed + -- when the appropriate button is pressed and released. + -- `Force_extend' was used to bypass the signature for the agents. + increment_button.pointer_button_press_actions.force_extend (agent start_timeout (agent increment)) + increment_button.pointer_button_release_actions.force_extend (agent kill_timeout) + decrement_button.pointer_button_press_actions.force_extend (agent start_timeout (agent decrement)) + decrement_button.pointer_button_release_actions.force_extend (agent kill_timeout) + end + +feature -- Status report + + is_buttons_hidden: BOOLEAN + -- Are the `increment_button' and the `decrement_button' + -- hidden from view? + +-- is_sensitive: BOOLEAN is +-- -- Can the control react to input? +-- do +-- Result := Precursor {COMPARABLE_CONTROL} and then +-- increment_button.is_sensitive and +-- decrement_button.is_sensitive +-- end + + +feature -- Status setting + + hide_buttons + -- Make the `increment_button' and the `decrement_button' + -- not appear in the control. + do + increment_button.hide + decrement_button.hide + end + + show_buttons + -- Make the `increment_button' and the `decrement_button' + -- appear in the control. + do + increment_button.show + decrement_button.show + end + +-- enable_sensitive is +-- -- Make the `display' sensitive to user input. +-- do +-- -- Redefined to take care of the added buttons +-- Precursor {COMPARABLE_CONTROL} +-- increment_button.enable_sensitive +-- decrement_button.enable_sensitive +-- end +-- +-- disable_sensitive is +-- -- Make the `display' unresponsive to user input. +-- do +-- -- Redefined to take care of the added buttons +-- Precursor {COMPARABLE_CONTROL} +-- increment_button.disable_sensitive +-- decrement_button.disable_sensitive +-- end + +feature -- Basic operations + + increment + -- Intended to be redefined to increase the magnitude of `value'. + -- Default function only sets the `timeout' to a shorter repeat interval. + do + timeout.set_interval (100) + end + + decrement + -- Intended to be redefined to decrease the magnitude of `value'. + -- Default function only sets the `timeout' to a shorter repeat interval. + do + timeout.set_interval (100) + end + +feature {NONE} -- Implementation + + build + -- Position the widgets + local + x, y: INTEGER + h: INTEGER + do + Precursor {COMPARABLE_CONTROL} + -- set the size of the buttons + h := display.height // 2 + x := display.x_position + display.width + y := display.y_position + (display.y_position // 2) + if label_position = Label_right then + x := x + label.x_position + label.width + end + set_item_position (increment_button, x, display.y_position) + set_item_height (increment_button, h.max (increment_button.minimum_height)) + set_item_width (increment_button, h.max (increment_button.minimum_width)) + set_item_height (decrement_button, h.max (decrement_button.minimum_height)) + set_item_width (decrement_button, h.max (decrement_button.minimum_width)) + y := increment_button.y_position + increment_button.height + set_item_position (decrement_button, x, y) + set_minimum_width (minimum_width + increment_button.width) + end + +feature {NONE} -- Implementation + + start_timeout (a_procedure: PROCEDURE) + -- Calls `a_procedure' once and then sets up `timeout' to + -- execute `a_procedure' repeatedly. + require + procedure_exists: a_procedure /= Void + do + a_procedure.call ([]) + timeout.set_interval (1000) + timeout.actions.extend (a_procedure) + end + + kill_timeout + -- Remove actions from the `timeout' so it does not + -- continue to repeat even when the button is released. + do + timeout.actions.wipe_out + timeout.reset_count + end + + increment_button: EV_BUTTON + -- Press to increase the `value' + + decrement_button: EV_BUTTON + -- Press to decrease the `value' + + timeout: EV_TIMEOUT + -- Used when a button is held down. + +invariant + + -- ensure sure buttons are created + increment_button_exists: increment_button /= Void + decrement_button_exists: decrement_button /= Void + timeout_exists: timeout /= Void + + -- ensure buttons are part of current + increment_button_in_current: has (increment_button) + decrement_button_in_current: has (decrement_button) + + is_sensitive_definition: is_sensitive implies increment_button.is_sensitive and + decrement_button.is_sensitive + +end diff --git a/jj_vision/interface/controls/string_control.e b/jj_vision/interface/controls/string_control.e new file mode 100644 index 0000000..0b0ef8c --- /dev/null +++ b/jj_vision/interface/controls/string_control.e @@ -0,0 +1,52 @@ +note + description: "[ + A {CONTROL} in which to edit strings + ]" + author: "Jimmy J. Johnson" + copyright: "Copyright 2012, Jimmy J. Johnson" + license: "Eiffel Forum License v2 (see forum.txt)" + URL: "$URL: file:///F:/eiffel_repositories/jj_vision/trunk/interface/controls/string_control.e $" + date: "$Date: 2012-03-16 14:05:07 -0400 (Fri, 16 Mar 2012) $" + revision: "$Revision: 7 $" + +class + STRING_CONTROL + +inherit + + -- NOTE: do not inherit from other widgets such as EV_TEXT_FIELD. This + -- causes too many clashes with EV_FIXED coming from CONTROL. + -- I have gone up that path too many times. DO NOT DO IT AGAIN! + + COMPARABLE_CONTROL + redefine + value + end + +create + default_create, + make_from_field + +feature {NONE} -- Initialization + +feature -- Access + + value: STRING_32 + -- A new object represented by the string in the display. + -- Redefine to convert the displayed string into the + -- desired type. + do + check attached {STRING_32} Precursor as c then + Result := c + end + end + +feature {NONE} -- Implementation + + default_field: STRING_FIELD + -- Dictates appearanced of current Control + do + create Result + end + +end diff --git a/jj_vision/interface/controls/string_field_schema.e b/jj_vision/interface/controls/string_field_schema.e new file mode 100644 index 0000000..f0a7f8d --- /dev/null +++ b/jj_vision/interface/controls/string_field_schema.e @@ -0,0 +1,48 @@ +note + description: "[ + A {SCHEMA} that describes placement of a {INTEGER_FIELD} + ]" + author: "Jimmy J. Johnson" + copyright: "Copyright 2012, Jimmy J. Johnson" + license: "Eiffel Forum License v2 (see forum.txt)" + URL: "$URL: file:///F:/eiffel_repositories/jj_vision/trunk/interface/controls/string_field_schema.e $" + date: "$Date: 2012-03-16 14:05:07 -0400 (Fri, 16 Mar 2012) $" + revision: "$Revision: 7 $" + +class + STRING_FIELD_SCHEMA + +inherit + + FIELD_SCHEMA + redefine + default_create + end + +create + default_create +create {LINKED_LIST} + make + +feature {NONE} -- Initialize + + default_create + -- Create an instance + do + Precursor {FIELD_SCHEMA} + extend (length_field) + end + +feature -- Access + + length_field: INTEGER_FIELD + -- Create a field to store the `number_of_characters' of a FIELD + once + create Result + Result.set_label ("Length") + Result.set_x (30) + Result.set_y (0) + Result.set_width (50) + end + +end diff --git a/jj_vision/interface/controls/ymd_time_control.e b/jj_vision/interface/controls/ymd_time_control.e new file mode 100644 index 0000000..bb1e4d2 --- /dev/null +++ b/jj_vision/interface/controls/ymd_time_control.e @@ -0,0 +1,111 @@ +note + description: "[ + Used with {EDITOR} classes to make EV_WIDGETs for displaying and + editting data which is a {YMD_TIME} + ]" + date: "7 Mar 03" + author: "Jimmy J. Johnson" + copyright: "Copyright 2012, Jimmy J. Johnson" + license: "Eiffel Forum License v2 (see forum.txt)" + URL: "$URL: file:///F:/eiffel_repositories/jj_vision/trunk/interface/controls/ymd_time_control.e $" + date: "$Date: 2012-03-16 14:05:07 -0400 (Fri, 16 Mar 2012) $" + revision: "$Revision: 7 $" + + +class + YMD_TIME_CONTROL + +inherit + + YMD_CONSTANTS + undefine + default_create, + is_equal, + copy + end + + SPIN_CONTROL + redefine + create_interface_objects, + initialize, + value, + increment, + decrement + end + +create + default_create, + make_from_field + +feature {NONE} -- Initialization + + create_interface_objects + -- Create objects to be used by `Current' in `initialize' + -- Implemented by descendants to create attached objects + -- in order to adhere to void-safety due to the implementation bridge pattern. + do + Precursor {SPIN_CONTROL} + set_delta (One_day) + end + + initialize + -- Set up the control + do + Precursor {SPIN_CONTROL} + end + + +feature -- Access + + value: YMD_TIME + -- A new object represented by the string in the display. + -- Redefine to convert the displayed string into the + -- desired type. + do + check attached {YMD_TIME} Precursor {SPIN_CONTROL} as c then + Result := c + end + end + + delta: YMD_DURATION + -- The amount to change `value' when one of the buttons is pressed. + +feature -- Element change + + set_delta (a_delta: like delta) + -- Change `delta' + require + positive_delta: not a_delta.is_negative + do + delta := a_delta.twin + ensure + delta_assigned: equal (delta, a_delta) + end + +feature -- Basic operations + + increment + -- Increase the `value' by amount `step'. + do + Precursor {SPIN_CONTROL} + set_data (value + delta) + on_display_changed + end + + decrement + -- Decrease the `value' by amount `step'. + do + Precursor {SPIN_CONTROL} + set_data (value - delta) + on_display_changed + end + +feature {NONE} -- Implementation + + default_field: YMD_TIME_FIELD + -- Dictates appearanced of current Control + do + create Result + end + +end diff --git a/jj_vision/interface/fields/comparable_field.e b/jj_vision/interface/fields/comparable_field.e new file mode 100644 index 0000000..1cb8821 --- /dev/null +++ b/jj_vision/interface/fields/comparable_field.e @@ -0,0 +1,49 @@ +note + description: "[ + A {FIELD} used to create a control to edit a COMPARABLE. + ]" + date: "24 Feb 04" + author: "Jimmy J. Johnson" + copyright: "Copyright 2012, Jimmy J. Johnson" + license: "Eiffel Forum License v2 (see forum.txt)" + URL: "$URL: file:///F:/eiffel_repositories/jj_vision/trunk/interface/fields/comparable_field.e $" + date: "$Date: 2012-03-16 14:05:07 -0400 (Fri, 16 Mar 2012) $" + revision: "$Revision: 7 $" + + +deferred class + COMPARABLE_FIELD + +inherit + + FIELD + redefine + default_create, + as_widget, + Type + end + +feature {NONE} -- Initialization + + default_create + -- Initialize `Current'. + do + Precursor {FIELD} + end + +feature -- Transformation + + as_widget: COMPARABLE_CONTROL + -- Each descendent class must create the appropriate control. + -- Redefined to change the type. + deferred + end + +feature -- + + Type: COMPARABLE + -- Anchor for `value' + deferred + end + +end diff --git a/jj_vision/interface/fields/field.e b/jj_vision/interface/fields/field.e new file mode 100644 index 0000000..15b13bd --- /dev/null +++ b/jj_vision/interface/fields/field.e @@ -0,0 +1,483 @@ +note + description: "[ + Used with {EDITOR} classes. + Object that describes how to create a {CONTROL}. + ]" + date: "7 Mar 03" + author: "Jimmy J. Johnson" + copyright: "Copyright 2012, Jimmy J. Johnson" + license: "Eiffel Forum License v2 (see forum.txt)" + URL: "$URL: file:///F:/eiffel_repositories/jj_vision/trunk/interface/fields/field.e $" + date: "$Date: 2012-03-16 14:05:07 -0400 (Fri, 16 Mar 2012) $" + revision: "$Revision: 7 $" + + +deferred class + FIELD + +inherit + + FIELD_CONSTANTS + undefine + default_create, + is_equal + end + + EDITABLE + redefine + default_create, + schema, + is_schema_available, + schema_imp, + set_schema, + remove_schema + end + +feature {NONE} -- Initialization + + default_create + -- Initialize the object. + do + Precursor {EDITABLE} +-- schema_imp := Field_schema + -- Add the "data". The data is the lables and positions. + set_label (Default_label_field_name) + set_x (Default_x) + set_y (Default_y) + set_width (Default_width) + set_height (Default_height) + end + +feature -- Access + + schema: FIELD_SCHEMA + -- The schema used to display and edit a FIELD. + once + create Result + Result.extend_mandatory (Label_field) + Result.extend_mandatory (X_field) + Result.extend_mandatory (Y_field) + Result.extend_mandatory (Width_field) + Result.extend_mandatory (Height_field) +-- Result.set_up + end + + Type: ANY + -- Anchor. + deferred + end + + label: STRING_32 + -- Identifier of this field. + do + check attached {STRING_32} value (Default_label_field_name) as s then + Result := s + end + end + + x: INTEGER_REF + -- x-position of field in a dialog + do + check attached {INTEGER_REF} value (Default_x_field_name) as i then + Result := i + end + end + + y: INTEGER_REF + -- y-position of field in a dialog + do + check attached {INTEGER_REF} value (Default_y_field_name) as i then + Result := i + end + end + + width: INTEGER_REF + -- Width of this field. Used to create a control + -- that is `width' pixels wide. + do + check attached {INTEGER_REF} value (Default_width_field_name) as i then + Result := i + end + end + + height: INTEGER_REF + -- Height of this field. Used to create a control + -- that is `height' pixels tall. + do + check attached {INTEGER_REF} value (Default_height_field_name) as i then + Result := i + end + end + +-- format: STRING is +-- -- Used to set how the data is displayed. +-- do +-- Result ?= value_by_field (format_field) +-- ensure +-- valid_result: Result /= Void +-- end +-- +-- posible_formats: LINKED_SET [STRING] +-- -- Set of posible formats which can be used in `format'. +-- +-- function: STRING_32 +-- -- Function to be assigned to any widget created from +-- -- this field. +-- do +-- Result ?= value_by_field (schema.formula_field) +-- ensure +-- valid_result: Result /= Void +-- end + +-- function_result_as_string: STRING_32 +-- -- The result of executing the `function' converted to +-- -- a string. +-- local +---- p: FUNCTION_PARSER +-- r: ANY +-- t: like Type +-- do +-- if function = Void then +-- Result := "Value is calculated, but no formula entered." +-- else +---- p.parse_string (function) +---- r := parser.last_value +-- if r.same_type (Type) then +-- t ?= r +-- check +-- should_not_happen: t /= Void +-- -- Because `r.same_type' insures `r' conforms to `t'. +-- end +-- Result := type_to_string (t) +-- else +-- -- there was a parse error. +-- Result ?= r +-- check +-- should_not_happen: Result /= Void +-- -- Because parser should return an error string +-- -- if it failed to get a good result. +-- end +-- end +-- end +-- end + +-- function_result_as_type: like type +-- -- The result of executing the `function'. +-- require +-- has_function: function /= Void +-- function_works: is_valid_function (function) +-- local +---- p: FUNCTION_PARSER +-- do +---- p.parse_string (function) +---- Result := p.last_value +-- end + +feature -- Element Change + + set_label (a_string: STRING_32) + -- Change the `name'. + require + string_exists: a_string /= Void + do + extend_value (a_string, Default_label_field_name) + ensure + id_was_set: equal (label, a_string) + end + + set_x (a_x: INTEGER) + do + extend_value (a_x, Default_x_field_name) + ensure + x_was_set: x.item = a_x + end + + set_y (a_y: INTEGER) + do + extend_value (a_y, Default_y_field_name) + ensure + y_was_set: y.item = a_y + end + + set_width (a_width: INTEGER) + -- Change `width' + require + valid_width: a_width > 0 + do + extend_value (a_width, Default_width_field_name) + ensure + width_was_set: width.item = a_width + end + + set_height (a_height: INTEGER) + -- Change `height' + require + valid_height: a_height > 0 + do + extend_value (a_height, Default_height_field_name) + ensure + height_was_set: height.item = a_height + end + +-- set_format (a_format: STRING) is +-- -- Change `format' +-- require +-- schema_exists: schema /= Void +-- valid_format: posible_formats.has (a_format) +-- do +-- extend_with_field (a_format, format_field) +-- extend (a_format, "format") +-- ensure +-- format_was_set: format = a_format +-- end + +-- set_function (a_string: STRING) is +-- -- Change the `formula' +-- require +-- schema_exists: schema /= Void +-- string_exists: a_string /= Void +-- do +-- extend_with_field (a_string, schema.formula_field) +-- ensure +-- formula_was_set: equal (formula, a_string) +-- end + +feature -- Status report + + is_calculated: BOOLEAN + -- Should the value (produced by any control) use the result + -- of executing (parsing) the `formula'? (Oposite is to use + -- what ever data is set into the control.) +-- fix -- Set by `use_formula' or `use_data'. + do +-- Result := formula.count >= 1 + end + + is_schema_available: BOOLEAN + -- Does Current have a schema? + -- Redefined to always be True to follow the redefinition of `schema'. + do + Result := True + end + +feature -- Status setting + + use_function + -- Set `is_calculated' to True + do +-- is_calculated := True + end + + use_data + -- Set `is_calculated' to False + do +-- is_calculated := False + end + +feature -- Query + +-- parser: PARSER is +-- -- Parser for evaluating the `formula' +-- once +-- create Result +-- end + + is_valid_data (a_value: ANY): BOOLEAN + -- Is `a_value' valid data for this field? + -- Must redefine `parsed' if redefine this feature. + do + Result := a_value /= Void and then a_value.conforms_to (Type) + end + + is_valid_function (a_function: STRING_32): BOOLEAN + -- Can `a_function' be parsed, returning a result + -- of the correct `type'? + local +-- p: FUNCTION_PARSER + do +-- p.parse_string (a_function) +-- Result := p.last_value.same_type (type) + end + + string_to_type (a_string: STRING_32): like Type + -- Convert `a_string' to an object of `Type' + -- Default is to simply return `a_string' since + -- it conforms to ANY if it exists. + require + valid_string: is_valid_data (a_string) + do + Result := a_string + end + + type_to_string (a_value: ANY): STRING_32 + -- The string representation of `a_value'. + -- The default is to call feature `out' on `a_value' or to + -- return the string "Void" or "Non-conforming data". + do + if a_value = Void then + Result := "Void" + elseif a_value /= Void and then not a_value.conforms_to (Type) then + Result := "Non-conforming data" + else + Result := a_value.out + end + ensure + result_exists: Result /= Void + end + + controls_from: LINKED_LIST [CONTROL] + -- All the controls whose positioning is dictated by + -- this field (i.e. created from this field) + local + c_list: LINKED_LIST [CONTROL] + c: CONTROL + do + create Result.make + c_list := control_list + from c_list.start + until c_list.exhausted + loop + c := c_list.item + if c.field = Current then -- or c.field.formula.has_field (Current) then +-- make a formula class and put parser in it. + Result.extend (c) + end + c_list.forth + end + end + + controls_dependent: LINKED_LIST [CONTROL] + -- All the controls in `controls_from' plus any controls + -- whose `formula' contains a reference to Current. + local + c_list: LINKED_LIST [CONTROL] + c: CONTROL + do + create Result.make + c_list := control_list + from c_list.start + until c_list.exhausted + loop + c := c_list.item + if c.field = Current then -- or c.field.formula.has_field (Current) then +-- make a formula class and put parser in it. + Result.extend (c) + end + c_list.forth + end + end + + +feature -- Transformation + + as_widget: CONTROL + -- Each descendent class must create the appropriate control and + -- put the control into `control_list'. + deferred + ensure + result_has_field: Result.field = Current + result_added_to_list: control_list.has (Result) + end + +feature {CONTROL} -- Implementation + + control_list: LINKED_LIST [CONTROL] + -- Keeps track of all the controls so one control can update + -- others and used to make formulas work. + -- NOTE: This can be a once feature here as these are only valid + -- for the current execution. + -- The creation procedures for CONTROL should add the created + -- widget to the list; `destroy' from CONTROL should remove it. + -- Declared as once function so the list (of EV_WIDGETs) does + -- not get stored. That could get messy. + once + create Result.make + end + + schema_imp: FIELD_SCHEMA + -- Implementation and/or anchor for `schema'. Set by `set_schema' and + -- removed by `remove_schema. + -- NOTE: The FIELDs in a SCHEMA will determine the keys to be + -- used in `data_table' and will be used to build the controls + -- for obtaining the values asscociated with the keys. + +feature {NONE} -- Implementation (fields used by `field_schema') + + Label_field: STRING_FIELD + -- Create a field to store the `label' of a FIELD + once + create Result +-- Result.extend (Default_name, Default_label_field_name) + Result.set_label (Default_label_field_name) + Result.set_x (0) + Result.set_y (0) + Result.set_width (Default_width) + Result.set_height (Default_height) + end + + X_field: INTEGER_FIELD + -- Create a field to store the `x' value of a FIELD + once + create Result +-- Result.extend (Default_x_field_name, Default_x_field_name) + Result.set_label (Default_x_field_name) + Result.set_x (0) + Result.set_y (50) + Result.set_width (Default_width) + Result.set_height (Default_height) + end + + Y_field: INTEGER_FIELD + -- Create a field to store the `y' value of a FIELD + once + create Result + Result.set_label (Default_y_field_name) + Result.set_x (0) + Result.set_y (100) + Result.set_width (Default_width) + Result.set_height (Default_height) + end + + Width_field: INTEGER_FIELD + -- Create a field to store the `width' of a FIELD + once + create Result + Result.set_label (Default_width_field_name) + Result.set_x (0) + Result.set_y (150) + Result.set_width (Default_width) + Result.set_height (Default_height) + end + + Height_field: INTEGER_FIELD + -- Create a field to store the `height' of a FIELD + once + create Result + Result.set_label (Default_height_field_name) + Result.set_x (0) + Result.set_y (200) + Result.set_width (Default_width) + Result.set_height (Default_height) + end + +feature {NONE} -- Inaplicable + + set_schema (a_schema: like schema_imp) + -- Change `schema' indirectly by changing `schema_imp'. + do + check + should_not_be_called: False + -- Because `schema' was redefined to a constant + end + end + + remove_schema + -- Make `schema' imp Void + do + check + should_not_be_called: False + -- Because `schema' was redefined to a constant + end + end + +end diff --git a/jj_vision/interface/fields/field_constants.e b/jj_vision/interface/fields/field_constants.e new file mode 100644 index 0000000..763569f --- /dev/null +++ b/jj_vision/interface/fields/field_constants.e @@ -0,0 +1,32 @@ +note + description: "[ + Constants for use by classes dealing with class {FIELD} (i.e {FIELD} + and {SCHEMA} and any descendants. + ]" + date: "28 Feb 04" + author: "Jimmy J. Johnson" + copyright: "Copyright 2012, Jimmy J. Johnson" + license: "Eiffel Forum License v2 (see forum.txt)" + URL: "$URL: file:///F:/eiffel_repositories/jj_vision/trunk/interface/fields/field_constants.e $" + date: "$Date: 2012-03-16 14:05:07 -0400 (Fri, 16 Mar 2012) $" + revision: "$Revision: 7 $" + + +class + FIELD_CONSTANTS + +feature -- Access + + Default_label_field_name: STRING = "label" + Default_x_field_name: STRING = "x" + Default_y_field_name: STRING = "y" + Default_height_field_name: STRING = "height" + Default_width_field_name: STRING = "width" + + Default_name: STRING = "name: " + Default_x: INTEGER = 0 + Default_y: INTEGER = 0 + Default_height: INTEGER = 30 + Default_width: INTEGER = 150 + +end diff --git a/jj_vision/interface/fields/field_ref.e b/jj_vision/interface/fields/field_ref.e new file mode 100644 index 0000000..4836e4e --- /dev/null +++ b/jj_vision/interface/fields/field_ref.e @@ -0,0 +1,33 @@ +note + description: "[ + A reference to a {FIELD} for use by once feature + `user_identifier_field' from {SCHEMA} + ]" + date: "7 Oct 07" + author: "Jimmy J. Johnson" + copyright: "Copyright 2012, Jimmy J. Johnson" + license: "Eiffel Forum License v2 (see forum.txt)" + URL: "$URL: file:///F:/eiffel_repositories/jj_vision/trunk/interface/fields/field_ref.e $" + date: "$Date: 2012-03-16 14:05:07 -0400 (Fri, 16 Mar 2012) $" + revision: "$Revision: 7 $" + +class + FIELD_REF + +create + set_field + +feature -- Access + + field: FIELD + -- Item held by current + +feature -- Element change + + set_field (a_field: FIELD) + -- Change the `field'. + do + field := a_field + end + +end diff --git a/jj_vision/interface/fields/field_schema.e b/jj_vision/interface/fields/field_schema.e new file mode 100644 index 0000000..6494fa3 --- /dev/null +++ b/jj_vision/interface/fields/field_schema.e @@ -0,0 +1,24 @@ +note + description: "[ + A {SCHEMA} for a {FIELD} + ]" + author: "Jimmy J. Johnson" + copyright: "Copyright 2012, Jimmy J. Johnson" + license: "Eiffel Forum License v2 (see forum.txt)" + URL: "$URL: file:///F:/eiffel_repositories/jj_vision/trunk/interface/fields/field_schema.e $" + date: "$Date: 2012-03-16 14:05:07 -0400 (Fri, 16 Mar 2012) $" + revision: "$Revision: 7 $" + +class + FIELD_SCHEMA + +inherit + + SCHEMA + +create + default_create +create {LINKED_LIST} + make + +end diff --git a/jj_vision/interface/fields/formula_field.e b/jj_vision/interface/fields/formula_field.e new file mode 100644 index 0000000..16e73fc --- /dev/null +++ b/jj_vision/interface/fields/formula_field.e @@ -0,0 +1,42 @@ +note + description: "[ + A {FIELD} in which to edit formulas + ]" + author: "Jimmy J. Johnson" + copyright: "Copyright 2012, Jimmy J. Johnson" + license: "Eiffel Forum License v2 (see forum.txt)" + URL: "$URL: file:///F:/eiffel_repositories/jj_vision/trunk/interface/fields/formula_field.e $" + date: "$Date: 2012-03-16 14:05:07 -0400 (Fri, 16 Mar 2012) $" + revision: "$Revision: 7 $" + +class FORMULA_FIELD + -- creates an edit box. + +inherit + + STRING_FIELD + redefine + is_valid_data + end + +create + default_create + +feature -- Access + + is_valid_data (a_data: ANY): BOOLEAN + -- Is the value in `a_data' a valid representation + -- for the `Type' of the data. + local +-- scan: SCANNER +-- s: STRING + do +---- create scan +-- s ?= a_data +-- if s /= Void then +---- scan.scan_string (s) +-- end +---- Result := Precursor {STRING_FIELD} (a_data) and then not scan.scanning_error + end + +end diff --git a/jj_vision/interface/fields/integer_field.e b/jj_vision/interface/fields/integer_field.e new file mode 100644 index 0000000..4f5f3e6 --- /dev/null +++ b/jj_vision/interface/fields/integer_field.e @@ -0,0 +1,74 @@ +note + description: "[ + A {FIELD} used to create a {INTEGER_CONTROL} and position that control. + ]" + date: "24 Feb 04" + author: "Jimmy J. Johnson" + copyright: "Copyright 2012, Jimmy J. Johnson" + license: "Eiffel Forum License v2 (see forum.txt)" + URL: "$URL: file:///F:/eiffel_repositories/jj_vision/trunk/interface/fields/integer_field.e $" + date: "$Date: 2012-03-16 14:05:07 -0400 (Fri, 16 Mar 2012) $" + revision: "$Revision: 7 $" + +class + INTEGER_FIELD + +inherit + + COMPARABLE_FIELD + redefine + default_create, + is_valid_data, + string_to_type + end + +create + default_create + +feature {NONE} -- Initialization + + default_create + -- Create an instance + do + Precursor {COMPARABLE_FIELD} + end + +feature -- Querry + + Type: INTEGER_REF + -- Implementation (and anchor) of `value'. + -- Redefined to change type. + once + create Result + end + + string_to_type (a_string: STRING_32): like type + -- Convert `a_string' to an object of `Type'. + do + create Result + Result.set_item (a_string.to_integer) + end + + is_valid_data (a_value: ANY): BOOLEAN + -- Is the value in the display a valid representation + -- for the type of the data. + do + Result := Precursor {COMPARABLE_FIELD} (a_value) + if not Result then + -- It may be that `a_value' is a STRING representation + -- of an integer, so check the string and convert it. + if attached {STRING} a_value as s then + Result := s.is_integer + end + end + end + +feature -- Transformation + + as_widget: INTEGER_CONTROL + -- Create the appropriate type of control + do + create Result.make_from_field (Current) + end + +end diff --git a/jj_vision/interface/fields/schema.e b/jj_vision/interface/fields/schema.e new file mode 100644 index 0000000..2936aff --- /dev/null +++ b/jj_vision/interface/fields/schema.e @@ -0,0 +1,444 @@ +note + description: "[ + A list of {FIELD} where each {FIELD} describes the placement + of a {CONTROL} withing an {EDITOR} + ]" + author: "Jimmy J. Johnson" + copyright: "Copyright 2012, Jimmy J. Johnson" + license: "Eiffel Forum License v2 (see forum.txt)" + URL: "$URL: file:///F:/eiffel_repositories/jj_vision/trunk/interface/fields/schema.e $" + date: "$Date: 2012-03-16 14:05:07 -0400 (Fri, 16 Mar 2012) $" + revision: "$Revision: 7 $" + +class + SCHEMA + +inherit + + LINKED_LIST [FIELD] + rename + item as field + redefine + default_create, + make, + copy, + is_equal, + -- Redefine the following in order to set the time the schema was + -- changed so the dialog editor can use it to determine if it needs + -- to redraw the view. + extend, + put_front, + put_left, + put_right, + merge_left, + merge_right, + -- Need to redefine the following in order to preserve the invariant + -- dealing with the keys (key fields must reside in current). If a + -- field is removed from Current it can no longer be used as a key. + -- Other features are defined in terms of this, so these four should + -- take care of all features from LINKED_LIST. + remove, + replace, + remove_right, + wipe_out + select + make + end + + LINKED_LIST [FIELD] -- inherited identically as above except for `make' + rename + make as list_make, + item as field + redefine + default_create, +-- make, + copy, + is_equal, + -- Redefine the following in order to set the time the schema was + -- changed so the dialog editor can use it to determine if it needs + -- to redraw the view. + extend, + put_front, + put_left, + put_right, + merge_left, + merge_right, + -- Need to redefine the following in order to preserve the invariant + -- dealing with the keys (key fields must reside in current). If a + -- field is removed from Current it can no longer be used as a key. + -- Other features are defined in terms of this, so these four should + -- take care of all features from LINKED_LIST. + remove, + replace, + remove_right, + wipe_out + end + + EDITABLE + redefine + default_create, + copy, + is_equal + end + +create + default_create +create {LINKED_LIST} + make + +feature {NONE} -- Initialization + + default_create + -- Create an instance + -- Redefined because `new_chain' from LINKED_LIST uses `make'. + do + list_make + Precursor {EDITABLE} + create keys_imp.make + create mandatory_fields.make + create time_modified.set_now_utc_fine + extend_mandatory (Name_field) + end + + make + -- Called by `new_chain' from LINKED_LIST + do + Precursor {LINKED_LIST} + default_create + end + +feature -- Access + + identifying_field: FIELD + -- The field used to get a string which will identify an object. + do + Result := identifying_field_ref.field + end + + keys: LINKED_SET [STRING] + -- The keys to use in comparison of EDITABLEs using Current. + -- NOTE: Even though FIELDs are used in `keys_imp', ultimately the label + -- of the FIELD will be used to access data in an EDITABLE, hence the result type. + do + create Result.make + from keys_imp.start + until keys_imp.exhausted + loop + Result.extend (keys_imp.item.label) + keys_imp.forth + end + end + + key_fields: LINKED_SET [FIELD] + -- The fields which are used as keys + do + create Result.make + from keys_imp.start + until keys_imp.exhausted + loop + Result.extend (keys_imp.item) + keys_imp.forth + end + end + + Name_field: STRING_FIELD + -- The FIELD used to access the "name" of the object. + once + create Result + Result.set_label ("Name: ") + end + + time_modified: YMDHMS_TIME + -- Time at which a modification was made (such as adding + -- or removing a field). + +feature -- Element change + + set_identifying_field (a_field: STRING_FIELD) + -- Change the `user_identifying_field' + require + field_exists: a_field /= Void + do + identifying_field_ref.set_field (a_field) + ensure + field_was_assigned: identifying_field = a_field + end + +feature -- Basic operations + + put_front (a_field: like field) + -- Add `a_field' to beginning. + -- Do not move cursor. + -- Reset `time_modified'. + do + Precursor {LINKED_LIST} (a_field) + time_modified.set_now_utc_fine + end + + extend (a_field: like field) + -- Add `a_field' to the end. + -- Do not move cursor. + -- Reset `time_modified'. + do + Precursor {LINKED_LIST} (a_field) + time_modified.set_now_utc_fine + end + + extend_mandatory (a_field: like field) + -- Add `a_field' to Current and make it a manditory field. + -- Reset `time_modified'. + require + is_extendible: extendible + do + check + field_exists: a_field /= Void + end + mandatory_fields.extend (a_field) + extend (a_field) + ensure + has_field: has (a_field) + has_as_mandatory: has_mandatory (a_field) + end + + put_left (a_field: like field) + -- Add `a_field' to the left of cursor position. + -- Do not move cursor. + -- Reset `time_modified'. + do + Precursor {LINKED_LIST} (a_field) + time_modified.set_now_utc_fine + end + + put_right (a_field: like field) + -- Add `a_field' to the left of cursor position. + -- Do not move cursor. + -- Reset `time_modified'. + do + Precursor {LINKED_LIST} (a_field) + time_modified.set_now_utc_fine + end + + merge_left (a_other: like Current) + -- Merge `a_other' into current structure before cursor + -- position. Do not move cursor. Empty `other'. + -- Reset `time_modified'. + do + Precursor {LINKED_LIST} (a_other) + time_modified.set_now_utc_fine + end + + merge_right (a_other: like Current) + -- Merge `a_other' into current structure after cursor + -- position. Do not move cursor. Empty `other'. + -- Reset `time_modified'. + do + Precursor {LINKED_LIST} (a_other) + time_modified.set_now_utc_fine + end + + remove + -- Remove current item. + -- Move cursor to right neighbor + -- (or `after' if no right neighbor). + -- Reset `time_modified'. + -- Also, redefined to preserve invariant. + do + if attached {COMPARABLE_FIELD} field as cf then + keys_imp.prune (cf) + else + -- Do not have to worry about it, because if `v' is not + -- a COMPARABLE_FIELD it would never be in `keys' anyway. + end + Precursor {LINKED_LIST} + time_modified.set_now_utc_fine + end + + replace (v: like field) + -- Replace current item by `v'. + -- Reset `time_modified'. + -- Also, redefined to preserve invariant. + do + if attached {COMPARABLE_FIELD} v as cf then + keys_imp.prune (cf) + else + -- Do not have to worry about it, because if `v' is not + -- a COMPARABLE_FIELD it would never be in `keys' anyway. + end + Precursor {LINKED_LIST} (v) + time_modified.set_now_utc_fine + end + + remove_right + -- Remove item to the right of cursor position. + -- Do not move cursor. + -- Reset `time_modified'. + -- Also, redefined to preserve invariant. + do + if attached {COMPARABLE_FIELD} i_th (index + 1) as cf then + keys_imp.prune (cf) + else + -- Do not have to worry about it, because if `v' is not + -- a COMPARABLE_FIELD it would never be in `keys' anyway. + end + Precursor {LINKED_LIST} + time_modified.set_now_utc_fine + end + + wipe_out + -- Remove all items. + -- Reset `time_modified'. + -- Also, redefined to preserve invariant. + do + keys_imp.wipe_out + Precursor {LINKED_LIST} + time_modified.set_now_utc_fine + end + + add_key_field (a_field: COMPARABLE_FIELD) + -- Add `a_field' to use in comparisons + require + field_exists: a_field /= Void + has_field: has (a_field) + do + keys_imp.extend (a_field) + ensure + has_key: keys_imp.has (a_field) + end + + prune_key_field (a_field: COMPARABLE_FIELD) + -- Remove `a_field' so it no longer is used in comparisons + require + field_exists: a_field /= Void + do + keys_imp.prune (a_field) + ensure + removed: not keys_imp.has (a_field) + end + + promote_key_field (a_field: COMPARABLE_FIELD) + -- Move `a_field' toward the beginning of `keys' by one, so it + -- will be a "more important" key. + require + field_exists: a_field /= Void + has_as_key: key_fields.has (a_field) + local + i: INTEGER + do + if keys_imp.count > 1 then + i := keys_imp.index_of (a_field, 1) + if i > 1 then + go_i_th (i - 1) + swap (i) + end + end + ensure + field_was_promoted: + end + + demote_key_field (a_field: COMPARABLE_FIELD) + -- Move `a_field' toward the end of `keys' by one, so it + -- will be a "less important" key. + require + field_exists: a_field /= Void + has_as_key: key_fields.has (a_field) + local + i: INTEGER + do + if keys_imp.count > 1 then + i := keys_imp.index_of (a_field, 1) + if i < count then + go_i_th (i + 1) + swap (i) + end + end + ensure + field_was_demoted: + end + + set_key_primary (a_field: COMPARABLE_FIELD) + -- Move `a_field' toward the end of `keys' by one, so it + -- will be a "less important" key. + require + field_exists: a_field /= Void + has_as_key: key_fields.has (a_field) + local + i: INTEGER + do + if keys_imp.count > 1 then + i := keys_imp.index_of (a_field, 1) + if i /= 1 then + go_i_th (1) + swap (i) + end + end + ensure + field_is_primary: key_fields.index_of (a_field, 1) = 1 + end + +feature -- Querry + + has_mandatory (a_field: like field): BOOLEAN + -- Is `a_field' required to always be in this schema? + -- (I.e. can it never be deleted?) + require + field_exists: a_field /= Void + do + Result := mandatory_fields.has (a_field) + ensure + definition: Result = mandatory_fields.has (a_field) + end + +feature -- Duplication + + copy (other: like Current) + -- Update current object using fields of object attached + -- to `other', so as to yield equal objects. + -- Redefined to merge the copy operations from both ancestors. + -- NOTE: Feature `infix "<"' from VIEWABLE only checks the `id' + -- and assumes if the `id' (and hence the `time_stamp' from both + -- objects are equal the object must have been copied and is + -- therefore equal. + do + Precursor {LINKED_LIST} (other) + Precursor {EDITABLE} (other) + end + +feature -- Comparison + + is_equal (other: like Current): BOOLEAN + -- Is Current equal to `other'? + do + -- Precursor {VIEWABLE} uses feature `infix "<"' to do the + -- comparison, and there is no less than feature in LINKED_LIST, + -- therefore this feature makes the BIG assumption that if + -- the `id' and `time_stamp' (from VIEWABLE) of both objects + -- are the same then it must have been a copy. There is no other + -- way to make the `time_stamps' equal. + Result := Precursor {EDITABLE} (other) + end + +feature {NONE} -- Implementation + + keys_imp: LINKED_SET [COMPARABLE_FIELD] + -- Set of fields whose associated values can be used to compare + -- one EDITABLE to another in feature `infix "<"' from EDITABLE. + -- The order implies the more significant fields. + + mandatory_fields: LINKED_SET [FIELD] + -- Set of fields which can not be deleted from Current. + + identifying_field_ref: FIELD_REF + -- The field to be used as `identifying_field' as set by the user + -- in place of the default field. + once + create Result.set_field (Name_field) + end + +invariant + + keys_imp_exists: keys_imp /= Void + manditory_fields_exists: mandatory_fields /= Void + keys_reside_in_current: key_fields.for_all (agent has) + mandatory_fields_reside_in_current: mandatory_fields.for_all (agent has) + +end diff --git a/jj_vision/interface/fields/string_field.e b/jj_vision/interface/fields/string_field.e new file mode 100644 index 0000000..e0bb9b1 --- /dev/null +++ b/jj_vision/interface/fields/string_field.e @@ -0,0 +1,48 @@ +note + description: "[ + A {FIELD} describing the placement of a {STRING_CONTROL} + ]" + author: "Jimmy J. Johnson" + copyright: "Copyright 2012, Jimmy J. Johnson" + license: "Eiffel Forum License v2 (see forum.txt)" + URL: "$URL: file:///F:/eiffel_repositories/jj_vision/trunk/interface/fields/string_field.e $" + date: "$Date: 2012-03-16 14:05:07 -0400 (Fri, 16 Mar 2012) $" + revision: "$Revision: 7 $" + +class STRING_FIELD + -- creates an edit box. + +inherit + + COMPARABLE_FIELD + +create + default_create + +feature {NONE} -- Initialization + +feature -- Access + +feature -- Querry + + type: STRING_32 + -- Implementation (and anchor) of `value'. + -- Redefined to change type. + once + create Result.make_from_string ("") + end + + as_type (a_string: STRING_32): like type + -- Convert `a_string' to an object of `Type'. + do + Result := a_string + end + +feature -- Transformation + + as_widget: STRING_CONTROL + do + create Result.make_from_field (Current) + end + +end diff --git a/jj_vision/interface/fields/ymd_time_field.e b/jj_vision/interface/fields/ymd_time_field.e new file mode 100644 index 0000000..92c7992 --- /dev/null +++ b/jj_vision/interface/fields/ymd_time_field.e @@ -0,0 +1,82 @@ +note + description: "[ + A {FIELD} decribing the placement of a {YMD_TIME_CONTROL} + ]" + author: "Jimmy J. Johnson" + copyright: "Copyright 2012, Jimmy J. Johnson" + license: "Eiffel Forum License v2 (see forum.txt)" + URL: "$URL: file:///F:/eiffel_repositories/jj_vision/trunk/interface/fields/ymd_time_field.e $" + date: "$Date: 2012-03-16 14:05:07 -0400 (Fri, 16 Mar 2012) $" + revision: "$Revision: 7 $" + +class + YMD_TIME_FIELD + +inherit + + COMPARABLE_FIELD + redefine + is_valid_data, + string_to_type, + type_to_string + end + +create + default_create + +feature -- Access + + Type: YMD_TIME + -- Implementation (and anchor) of `value'. + -- Redefined to change type. + once + create Result.set_now + end + + is_valid_data (a_value: ANY): BOOLEAN + -- Is the value in `a_value' a valid representation + -- for the `Type' of the data. + local + f: YMD_TIME_FORMATTER + do + Result := Precursor {COMPARABLE_FIELD} (a_value) + if not Result then + -- It may be that `a_value' is a STRING representation + -- of a date, so check the string and convert it. + create f + if attached {STRING} a_value as s then + Result := f.is_valid (s) + end + end + end + + string_to_type (a_string: STRING_32): like Type + -- Convert `a_string' to a YMD_TIME + local + f: YMD_TIME_FORMATTER + do + create f + Result := f.to_ymd_time (a_string) + end + + type_to_string (a_value: ANY): STRING_32 + -- The string representation of `a_value'. + local + f: YMD_TIME_FORMATTER + do + if attached {YMD_TIME} a_value as t then + create f + Result := f.to_string (t) + else + Result := Precursor {COMPARABLE_FIELD} (a_value) + end + end + +feature -- Transformation + + as_widget: YMD_TIME_CONTROL + do + create Result.make_from_field (Current) + end + +end diff --git a/jj_vision/interface/system/about_dialog.e b/jj_vision/interface/system/about_dialog.e new file mode 100644 index 0000000..eae8d43 --- /dev/null +++ b/jj_vision/interface/system/about_dialog.e @@ -0,0 +1,148 @@ +note + description : "About dialog box" + author : "Generated by the New Vision2 Application Wizard." + date : "$Date: 2012-03-16 14:05:07 -0400 (Fri, 16 Mar 2012) $" + revision : "1.0.0" + +class + ABOUT_DIALOG + +inherit + + -- EV_DIALOG + EV_TITLED_WINDOW + -- Used EV_TITLED_WINDOW so the dialog can be declared as + -- "once" and non-modal. The close actions for DIALOGs + -- were too restrictive or not exported. + redefine + create_interface_objects, + initialize + end + +create + default_create + +feature {NONE} -- Initialization + + create_interface_objects + -- Create objects to be used by `Current' in `initialize' + -- Implemented by descendants to create attached objects + -- in order to adhere to void-safety due to the implementation bridge pattern. + do + Precursor {EV_TITLED_WINDOW} + create pixmap + create message_label + create ok_button.make_with_text ("OK") + end + + initialize + -- Populate the dialog box. + local + main_horizontal_box: EV_HORIZONTAL_BOX + left_vertical_box: EV_VERTICAL_BOX + right_vertical_box: EV_VERTICAL_BOX + horizontal_separator: EV_HORIZONTAL_SEPARATOR + buttons_box: EV_HORIZONTAL_BOX + ev_cell: EV_CELL + do + Precursor + + --| Add the pixmap to the dialog box. + --| + --| We do not use `{EV_STOCK_PIXMAPS}.Information_pixmap' + --| directly because a given pixmap can only have one + --| parent. `Information_pixmap' may have alredy been put + --| into another container. + pixmap.copy ((create {EV_STOCK_PIXMAPS}).Information_pixmap) + pixmap.set_minimum_size (pixmap.width, pixmap.height) + + create message_label + message_label.align_text_left + + create horizontal_separator + + ok_button.set_minimum_size (75, 24) + ok_button.select_actions.extend (agent destroy) + + create buttons_box + buttons_box.extend (create {EV_CELL}) -- Fill in empty space on left + buttons_box.extend (ok_button) + buttons_box.disable_item_expand (ok_button) + + create left_vertical_box + left_vertical_box.set_border_width (7) + left_vertical_box.extend (pixmap) + left_vertical_box.disable_item_expand (pixmap) + left_vertical_box.extend (create {EV_CELL}) + + create right_vertical_box + right_vertical_box.set_padding (7) + right_vertical_box.extend (message_label) + right_vertical_box.extend (horizontal_separator) + right_vertical_box.disable_item_expand (horizontal_separator) + right_vertical_box.extend (buttons_box) + right_vertical_box.disable_item_expand (buttons_box) + + create main_horizontal_box + main_horizontal_box.set_border_width (7) + create ev_cell + ev_cell.set_minimum_width (21) + main_horizontal_box.extend (ev_cell) + main_horizontal_box.disable_item_expand (ev_cell) + main_horizontal_box.extend (left_vertical_box) + main_horizontal_box.disable_item_expand (left_vertical_box) + create ev_cell + ev_cell.set_minimum_width (28) + main_horizontal_box.extend (ev_cell) + main_horizontal_box.disable_item_expand (ev_cell) + main_horizontal_box.extend (right_vertical_box) + extend (main_horizontal_box) + +-- set_default_push_button (ok_button) +-- set_default_cancel_button (ok_button) + + set_title (Default_title) + set_message (Default_message) + set_size (400, 150) + end + +feature -- Access + + message: STRING + -- Message displayed in the dialog box. + do + Result := message_label.text + end + +feature -- Element change + + set_message (a_message: STRING) + do + message_label.set_text (a_message) + end + +feature {NONE} -- Implementation + + message_label: EV_LABEL + -- Label situated on the top of the dialog, + -- contains the message. + + pixmap: EV_PIXMAP + -- Pixmap display on the left of the dialog. + + ok_button: EV_BUTTON + -- "OK" button. + +feature {NONE} -- Implementation / Constants + + Default_title: STRING = "Standard Interface Cluster" + -- Default title for the dialog window. + + Default_message: STRING = + "%N%N% + %Written by%N%N% + %Johnson J. Johnson%N%N%N% + %with ISE Eiffel 6.68 (free version) with Eiffel Vision." + + +end diff --git a/jj_vision/interface/system/editable.e b/jj_vision/interface/system/editable.e new file mode 100644 index 0000000..fc76f10 --- /dev/null +++ b/jj_vision/interface/system/editable.e @@ -0,0 +1,283 @@ +note + description: "[ + Used with EDITOR classes. + Object which can be edited in a dialog box, an {EDITOR} using + a format stored in a `schema'. + ]" + date: "7 Mar 03" + author: "Jimmy J. Johnson" + copyright: "Copyright 2012, Jimmy J. Johnson" + license: "Eiffel Forum License v2 (see forum.txt)" + URL: "$URL: file:///F:/eiffel_repositories/jj_vision/trunk/interface/system/editable.e $" + date: "$Date: 2012-03-16 14:05:07 -0400 (Fri, 16 Mar 2012) $" + revision: "$Revision: 7 $" + +class + EDITABLE + +inherit + + TIME_STAMPABLE + redefine + default_create +-- infix "<" + end + +create + default_create + +feature {NONE} -- Initialization + + default_create + do + Precursor {TIME_STAMPABLE} + create data_table.make (5) + schema_imp := Default_schema + end + +feature -- Access + + value (a_key: STRING): detachable ANY + -- The value associated with `key' or Void if none. + require + key_exists: a_key /= Void + do + Result := data_table.item (a_key) + end + + schema: SCHEMA + -- Used to construct a dialog in which to edit the values + -- which are then stored in `data_table'. + require + schema_available: is_schema_available + do + check attached schema_imp as s then + Result := s + end + ensure + result_exists: Result /= Void + end + + display_name: STRING_32 + -- Used as an "out" value for display in TOOLs and other widgets. + do + if attached {STRING_32} value (schema.identifying_field.label) as s then + Result := s + else + Result := Current.id + end + end + +feature -- Element change + + set_target_label_field (a_field: STRING_FIELD) + -- Change the field used to display an identifier in the tools, etc. + -- This is really in the `schema' of the editable. + require + field_exists: a_field /= Void + local + w: JJ_MAIN_WINDOW + do + schema.set_identifying_field (a_field) + -- Because `target_label_field' is posibly used by all views, when it changes + -- all views must be updated because there is no way for the view to know + -- if it contains `target_label_field'. Originally `target_label_field' + -- was added to the views using `add_object' (see VIEW), but using a FIELD + -- implies some EDITABLEs in the system. I wanted the "Standard Interface" + -- cluster to stand alone and not need the "Dynamic Editor" cluster to which + -- this class belongs. + check attached {JJ_APPLICATION} (create {EV_ENVIRONMENT}).application as a then + -- because only JJ_APPLICATIONS should use this. really ??? + -- Get hold of any VIEW; `first_window' will work. + w := a.first_window + w.draw_all_views + end + end + + set_schema (a_schema: like schema) + -- Change `schema' indirectly by changing `schema_imp'. + require + schema_exists: a_schema /= Void + do + schema_imp := a_schema + ensure + schema_was_set: schema = a_schema + end + + remove_schema + -- Make `schema_imp' Void + do + schema_imp := Void + ensure + schema_imp_void: schema = Void + end + + extend_value (a_value: ANY; a_key: STRING) + -- Add `a_value' to the `data_table' and associate it with `a_key' + -- and accessable through feature `value'. + -- NOTE: `a_value' can be Void. + require + key_exists: a_key /= Void + value_exists: a_value /= Void -- temp + do + data_table.force (a_value, a_key) + ensure + has_value: a_value /= Void implies data_table.has_item (a_value) + has_key: data_table.has (a_key) + end + + remove_value (a_key: STRING) + -- Remove the value associated with `a_key' and `a_key'. + require + key_exists: a_key /= Void + do + data_table.remove (a_key) + ensure + not_has_value: not data_table.has (a_key) + not_has_key: not data_table.has (a_key) + end + +-- extend_with_field (a_value: ANY; a_field: FIELD) is +-- -- Change the value of the data as index using the `name' from `a_field'. +-- -- NOTE: `a_value' can be Void. +-- require +-- field_exists: a_field /= Void +-- schema_has_field: schema.has (a_field) +-- do +-- extend (a_value, a_field.label) +-- ensure +-- has_value: a_value /= Void implies data_table.has_item (a_value) +-- has_key: data_table.has (a_field.label) +-- end + +-- change (a_control: VALUE_KEY_PAIR) is +-- -- Change the `value' in Current to the value stored in `a_control' +-- -- NOTE: `a_control' contains a `key' / `value' pair. +-- do +-- data_table.force (a_control.value, a_control.key) +-- end + + remove_unreachable_data + -- Remove any data from this EDITABLE that cannot be + -- accessed using the keys in `a_key_set' or the + -- `keys' in `template'. + do + end + +feature -- Status report + + is_schema_available: BOOLEAN + -- Does Current have a schema? + do + Result := schema_imp /= Void + end + +feature -- Query + + has_schema (a_schema: SCHEMA): BOOLEAN + -- Does `schema' equal `a_schema'? + require + schema_exists: a_schema /= Void + do + Result := schema = a_schema + end + + has_value (a_key: STRING): BOOLEAN + -- Is there a value associated with `a_key'? + require + key_exists: a_key /= Void + do + data_table.search (a_key) + Result := data_table.found + end + +feature -- Comparison + + is_less alias "<" (a_other: like Current): BOOLEAN + -- Is Current less than `a_other'? + -- This uses the `keys' from `schema' first and then the `id'. + do + if not (Current = a_other) then + if schema = Void and a_other.schema = Void then + Result := Current < a_other + elseif schema /= Void and a_other.schema = Void then + Result := True + elseif schema = Void and a_other.schema /= Void then + Result := False + elseif schema /= Void and a_other.schema /= Void then + Result := compare_key_values (a_other) + end + end + ensure then + zero_schemas: (schema = Void and a_other.schema = Void) implies Result = (Current < a_other) + one_schema_current: (schema /= Void and a_other.schema = Void) implies Result + one_schema_other: (schema = Void and a_other.schema /= Void) implies not Result + same_schema_both: (schema /= Void and a_other.schema /= Void) implies Result = compare_key_values (a_other) + end + +feature {NONE} -- Implementation + + compare_key_values (a_other: like Current): BOOLEAN + -- Is Current less than `a_other' when comparing keys? + -- Feature to decompose `infix "<"'. + require + other_exists: a_other /= Void + schema_exists: schema /= Void + other_schema_exists: a_other.schema /= Void + local + keys: LINKED_SET [STRING] + k: STRING + done: BOOLEAN + do + keys := schema.keys + if schema /= a_other.schema then + keys.intersect (a_other.schema.keys) + end + from keys.start + until done or else keys.exhausted + loop + k := keys.item + -- Now compare the values. If both are Void (can happen) or reference + -- the same object (unlikely or imposible) then just continue to + -- the next key. If they are not equal then do comparison. + if attached {COMPARABLE} value (k) as c and + attached {COMPARABLE} a_other.value (k) as other_c then + Result := c < other_c + done := True + end + keys.forth + end + -- At this point we have either made a determination using the + -- values at the keys, in which case `done' will be true, or we + -- have exhausted the keys without making a determination. In + -- the second case compare the `id' features; this should be + -- true if Current was created before `a_other'. (Feature `id' + -- incorporates a `time_stamp'.) + if not done then + Result := Current.id < a_other.id + end + end + +feature {NONE}-- Implementation + + schema_imp: detachable like schema + -- Implementation of `schema'. Set by `set_schema' and + -- removed by `remove_schema. + -- NOTE: The FIELDs in a SCHEMA will determine the keys to be + -- used in `data_table' and will be used to build the controls + -- for obtaining the values asscociated with the keys. + + data_table: HASH_TABLE [ANY, STRING] + -- The actual data is stored here. + + Default_schema: SCHEMA + -- Schema available to all EDITABLEs + once + create Result + end + +invariant + +-- data_table_exists: data_table /= Void + +end diff --git a/jj_vision/interface/system/jj_application.e b/jj_vision/interface/system/jj_application.e new file mode 100644 index 0000000..ebafa34 --- /dev/null +++ b/jj_vision/interface/system/jj_application.e @@ -0,0 +1,223 @@ +note + description: "[ + Root class for an application built using the "jj_vision" classes + ]" + date: "19 Jul 03" + author: "Jimmy J. Johnson" + copyright: "Copyright 2012, Jimmy J. Johnson" + license: "Eiffel Forum License v2 (see forum.txt)" + date: "$Date: 2015-10-24 07:32:40 -0700 (Sat, 24 Oct 2015) $" + revision: "$Revision: 23 $" + +class + JJ_APPLICATION + +inherit + + SHARED + export + {NONE} + all +-- {ANY} +-- persistence_manager + undefine + default_create, + copy + end + + EV_APPLICATION + redefine + create_interface_objects, + destroy + end + +create + make_and_launch + +feature {NONE} -- Initialization + + make_and_launch + -- Initialize and launch application + local +-- l_app: EV_APPLICATION + do +-- -- The use of `l_app' instead of inheritance is the style +-- -- used by the wizard in version 23.09. +-- create l_app +-- prepare +-- -- The next instruction launches GUI message processing. +-- -- It should be the last instruction of a creation procedure +-- -- that initializes GUI objects. Any other processing should +-- -- be done either by agents associated with GUI elements +-- -- or in a separate processor. +-- l_app.launch +-- -- No code should appear here, +-- -- otherwise GUI message processing will be stuck in SCOOP mode. + print ("JJ_APPLICATION.make_and_launch %N") + default_create + prepare + launch + print ("%T end JJ_APPLICATION.make_and_launch %N") + end + + create_interface_objects + -- Set up the attribute + do + Precursor {EV_APPLICATION} + create target + end + + prepare + -- Prepare the application by either loading it from a previous + -- execution or create a new one if an old one doesn't exist. + local + w: like first_window + do + print ("JJ_APPLICATION.prepare %N") +-- initialize_directories +-- rebuild_application + if not is_application_loaded then + print (" JJ_APPLICATION.prepare begin if statement %N") + create w.make (target) + print (" JJ_APPLICATION.prepare after create w %N") + w.show + print (" JJ_APPLICATION.prepare after w.show %N") + end + print ("%T end JJ_APPLICATION.prepare %N") + end + + destroy + -- Save the state of all main_windows and end the application. + do +-- save_system_state + Precursor {EV_APPLICATION} + end + + initialize_directories + -- Set up the datastores for the system info. + local + d: DIRECTORY + do + create d.make (Default_data_path.name) + if not d.exists then + d.create_dir + end + create d.make (Default_settings_path.name) + if not d.exists then + d.create_dir + end + end + +feature -- Access + + target: ANY + -- The top/main object handled by this application + + frozen first_window: like window_anchor + -- Anchor to describe the type of the windows in the program. + require + has_at_least_one_window: has_windows + do + check attached {like window_anchor} main_windows.first as w then + Result := w + end + ensure + result_exists: Result /= Void + end + +-- command_manager: COMMAND_MANAGER is +-- -- Manages the COMMAND's called by the application to allow undo/redo capabilities. +-- once +-- create Result +-- end + + application_state: APPLICATION_STATE + -- The state of the application. + do + create Result + end + +feature -- Status report + + has_windows: BOOLEAN + -- Does at least one window exist in the application? + do + Result := not main_windows.is_empty + end + +feature -- Basic operations + + rebuild_application + -- Rebuild the windows as they were on the last application exit. + local + f: RAW_FILE + a: ANY + do + -- Attempt to read the `application_state' from the disk in order + -- to begin this execution where the last one left off. + create f.make (merged_file_name (Default_settings_path.name.as_string_8, "Application_State")) + if f.exists and then f.is_readable then + f.open_read + if f.is_readable then + if attached {like application_state} f.retrieved as app_state then + -- Force a call to `widget' causing the creation of new windows. + a := app_state.view + is_application_loaded := True + end + end + end + end + + save_system_state + -- Save the state of the system for restoration on next execution. + local + dn: STRING_32 + fn: STRING + d: DIRECTORY + f: RAW_FILE + do + dn := Default_settings_path.name + create d.make (dn) + if not d.exists then + d.recursive_create_dir + end + fn := merged_file_name (Default_settings_path.name.as_string_8, "Application_State") +-- fn := "Application_state" + create f.make (fn) + if f.exists then + f.wipe_out +-- else +-- f.create_read_write + end + f.create_read_write + f.general_store (application_state) + f.close + end + +feature {NONE} -- Implementation + + is_application_loaded: BOOLEAN + -- Was the last application state retrieved from a persistent file and + -- now ready to be used to initialize the application? + -- Set by `load_application_state'. + + Default_application_state_name: STRING = "Application State" + -- To be used as file name of file containing the `state'. + +feature {NONE} -- Implementation (anchors) + + window_anchor: JJ_MAIN_WINDOW + -- Anchor for the type of `first_window' + -- Not to be called; just used to anchor types. + -- Declared as a feature to avoid adding an attribute. + require else + not_callable: False + do + check + do_not_call: False then + -- Because give no info; simply used as anchor. + end + end + +end + diff --git a/jj_vision/interface/system/jj_main_window.e b/jj_vision/interface/system/jj_main_window.e new file mode 100644 index 0000000..2e4b7a3 --- /dev/null +++ b/jj_vision/interface/system/jj_main_window.e @@ -0,0 +1,918 @@ +note + description: "[ + This can be used as base class for the main window(s) of a program, + allowing the program to have multiple main windows, with a standard + set of buttons and actions such as undo/redo, open, save, etc. + + + To enable undo/redo create a descendant of {JJ_COMMAND} and add it to the + `command_mangaer' with `add_command'. + ]" + date: "18 Jul 03" + author: "Jimmy J. Johnson" + copyright: "Copyright 2015, Jimmy J. Johnson" + license: "Eiffel Forum License v2 (see forum.txt)" + URL: "$URL: file:///F:/eiffel_repositories/jj_vision/trunk/interface/system/jj_main_window.e $" + date: "$Date: 2015-10-24 07:32:40 -0700 (Sat, 24 Oct 2015) $" + revision: "$Revision: 23 $" + +class + JJ_MAIN_WINDOW + +inherit + + VIEW + undefine +-- default_create, + copy + redefine + create_interface_objects, + initialize, + draw, + state, +-- set_split_manager, + add_actions + end + + EV_TITLED_WINDOW + rename + object_id as ise_object_id, + item as ev_item, + is_empty as ev_is_empty + undefine + is_in_default_state + redefine + create_interface_objects, + initialize + end + + PIXEL_BUFFERS + undefine + default_create, + copy + end + +create + make + +feature {NONE} -- Initialization + + create_interface_objects + -- Create objects to be used by `Current' in `initialize' + -- Implemented by descendants to create attached objects + -- in order to adhere to void-safety due to the implementation bridge pattern. + do + create split_manager + -- Create the "File" menu + create file_menu + create file_new_target_item + create file_save_item + create file_open_item + create file_exit_item + -- Create the "Edit" menu + create edit_menu + create edit_undo_item + create edit_redo_item + -- Create the "Tools" menu + create tool_menu + create tool_preferences_item + -- Create the "Window" menu + create window_menu + create window_new_item + create window_maximize_all_item + create window_minimize_all_item + create window_raise_all_item + -- Create the "Help" menu + create help_menu + create help_about_item + -- Create the `jj_menu_bar' + create jj_menu_bar + -- Create the main_window box and tool bar + create jj_tool_bar + create jj_tool_bar_box + create jj_tool_bar + create new_target_button + create open_button + create save_button + create undo_button + create redo_button + create new_window_button + create minimize_all_button + create raise_all_button + create help_button +-- -- Create the status bar. +-- create jj_status_bar +-- create jj_status_label + -- Create the dialogs + create preferences_dialog + Precursor {VIEW} + Precursor {EV_TITLED_WINDOW} + end + + initialize + -- Build the interface for this window. +-- local +-- sys: like system + do +-- create split_manager + Precursor {EV_TITLED_WINDOW} + Precursor {VIEW} + main_windows.extend (Current) + -- Create and add the menu bar. + build_standard_menu_bar + show_menu + -- Create and add the toolbar. + build_main_window_tool_bar +-- upper_bar.extend (create {EV_HORIZONTAL_SEPARATOR}) + upper_bar.extend (jj_tool_bar_box) + upper_bar.disable_item_expand (jj_tool_bar_box) + upper_bar.extend (create {EV_HORIZONTAL_SEPARATOR}) + -- Create and add the status bar. +-- build_standard_status_bar +-- lower_bar.extend (jj_status_bar) + -- Set up window attributes +-- set_system (sys) -- commented out for dynamic editor +-- set_target (system) + set_size (Window_width, Window_height) +-- set_actions +-- set_widget_states + set_preferences_dialog (Default_preferences_dialog) + -- Set up the "split-managed" cell, bar, and menu. + extend (split_manager.cell) + jj_tool_bar_box.extend (split_manager.bar) + window_menu.extend (split_manager.menu) + -- Finish the window + set_title (Window_title) +-- draw + end + + add_actions + -- Add actions to the widgets + do + -- add actions to window + close_request_actions.extend (agent on_close_window) + -- add actions to File menu items +-- file_new_target_item.select_actions.extend (agent on_make_new_target) + file_open_item.select_actions.extend (agent on_file_open) + file_save_item.select_actions.extend (agent on_file_save) + file_exit_item.select_actions.extend (agent on_exit) + -- add actions to the Tool menu items + tool_preferences_item.select_actions.extend (agent on_show_preferences_dialog) + -- add actions to Window menu items +-- window_new_item.select_actions.extend (agent on_make_new_window) + window_maximize_all_item.select_actions.extend (agent on_maximize_all) + window_minimize_all_item.select_actions.extend (agent on_minimize_all) + window_raise_all_item.select_actions.extend (agent on_raise_all) +-- window_preferences_item.select_actions.extend (agent on_show_preferences_window) + -- add actions to Help menu items + help_about_item.select_actions.extend (agent on_about) + -- add actions to buttons + new_target_button.set_pebble_function (agent on_get_target) + new_target_button.select_actions.extend (agent on_make_new_target) + new_target_button.drop_actions.extend (agent on_drop_target) +-- open_button.select_actions.extend (agent on_file_open) +-- save_button.select_actions.extend (agent on_file_save) + undo_button.select_actions.extend (agent command_manager.undo) + redo_button.select_actions.extend (agent command_manager.execute) + new_window_button.drop_actions.extend (agent on_drop_in_new_window) +-- new_window_button.select_actions.extend (agent on_make_new_window) + minimize_all_button.select_actions.extend (agent on_minimize_all) + raise_all_button.select_actions.extend (agent on_raise_all) +-- preferences_button.select_actions.extend (agent on_show_preferences_window) + end + + build_standard_menu_bar + -- Create and populate `jj_menu_bar'. + do + -- Add attributes to menu items + file_menu.set_text ("File") + file_new_target_item.set_text ("New target") + file_save_item.set_text ("Save") + file_open_item.set_text ("Open") + file_exit_item.set_text ("Exit") + edit_menu.set_text ("Edit") + edit_undo_item.set_text ("Undo") + edit_redo_item.set_text ("Redo") + tool_menu.set_text ("Tool") + tool_preferences_item.set_text ("Preferences") + window_menu.set_text ("Window") + window_new_item.set_text ("New") + window_maximize_all_item.set_text ("Maximize all") + window_minimize_all_item.set_text ("Minimize all") + window_raise_all_item.set_text ("Raise all") + help_menu.set_text ("Help") + help_about_item.set_text ("About") + -- Register and fill the "File" menu + file_menu.extend (file_new_target_item) + file_menu.extend (file_open_item) + file_menu.extend (file_save_item) + file_menu.extend (create {EV_MENU_SEPARATOR}) + file_menu.extend (file_exit_item) + -- Register and fill the "Edit" menu + edit_menu.extend (edit_undo_item) + edit_menu.extend (edit_redo_item) + -- Register and fill the "Tools" menu + tool_menu.extend (tool_preferences_item) + -- Register and fill the "Window" menu + window_menu.extend (window_new_item) + window_menu.extend (window_maximize_all_item) + window_menu.extend (window_minimize_all_item) + window_menu.extend (window_raise_all_item) + -- Register and fill the "Help" menu + help_menu.extend (help_about_item) + -- Fill the `jj_menu_bar' + jj_menu_bar.extend (file_menu) + jj_menu_bar.extend (edit_menu) + jj_menu_bar.extend (tool_menu) + jj_menu_bar.extend (window_menu) + jj_menu_bar.extend (help_menu) + ensure + menu_bar_created: + jj_menu_bar /= Void and then + not jj_menu_bar.is_empty + end + + build_main_window_tool_bar + -- Create and populate the standard toolbar. + local + lab: EV_LABEL + do + -- Add attributes to buttons + new_target_button.set_pixmap (create {EV_PIXMAP}.make_with_pixel_buffer (Icon_object_symbol_buffer)) + new_target_button.set_tooltip ("New target") + open_button.set_pixmap (create {EV_PIXMAP}.make_with_pixel_buffer (Icon_open_file_color_buffer)) + open_button.set_tooltip ("Open") + save_button.set_pixmap (create {EV_PIXMAP}.make_with_pixel_buffer (Icon_save_color_buffer)) + save_button.set_tooltip ("Save") + undo_button.set_pixmap (create {EV_PIXMAP}.make_with_pixel_buffer (Icon_undo_color_buffer)) + undo_button.set_tooltip ("Undo") + redo_button.set_pixmap (create {EV_PIXMAP}.make_with_pixel_buffer (Icon_redo_color_buffer)) + redo_button.set_tooltip ("Redo") + new_window_button.set_pixmap (create {EV_PIXMAP}.make_with_pixel_buffer (Icon_new_development_tool_color_buffer)) + new_window_button.set_tooltip ("New window") + minimize_all_button.set_pixmap (create {EV_PIXMAP}.make_with_pixel_buffer (Icon_minimize_all_color_buffer)) + minimize_all_button.set_tooltip ("Minimize all") + raise_all_button.set_pixmap (create {EV_PIXMAP}.make_with_pixel_buffer (Icon_restore_all_color_buffer)) + raise_all_button.set_tooltip ("Raise all") + help_button.set_pixmap (create {EV_PIXMAP}.make_with_pixel_buffer (Icon_help_tool_color_buffer)) + help_button.set_tooltip ("Help") + -- Add the buttons to the toolbar + jj_tool_bar.extend (new_target_button) + jj_tool_bar.extend (open_button) + jj_tool_bar.extend (save_button) + jj_tool_bar.extend (create {EV_TOOL_BAR_SEPARATOR}) + jj_tool_bar.extend (undo_button) + jj_tool_bar.extend (redo_button) + jj_tool_bar.extend (create {EV_TOOL_BAR_SEPARATOR}) + jj_tool_bar.extend (new_window_button) + jj_tool_bar.extend (minimize_all_button) + jj_tool_bar.extend (raise_all_button) + jj_tool_bar.extend (create {EV_TOOL_BAR_SEPARATOR}) + jj_tool_bar.extend (help_button) + jj_tool_bar.extend (create {EV_TOOL_BAR_SEPARATOR}) + -- Add the tool bar to the box + jj_tool_bar_box.extend (jj_tool_bar) + jj_tool_bar_box.disable_item_expand (jj_tool_bar) + -- Add some space after the `help_button' + create lab.make_with_text (" ") + jj_tool_bar_box.extend (lab) + jj_tool_bar_box.disable_item_expand (lab) + ensure + toolbar_created: jj_tool_bar /= Void and then not jj_tool_bar.is_empty + end + +-- build_standard_status_bar +-- -- Create and populate the status bar at bottom of window. +-- do +-- jj_status_bar.set_border_width (2) +-- jj_status_label.align_text_left +-- jj_status_bar.extend (jj_status_label) +-- ensure +-- status_bar_created: +-- jj_status_bar /= Void and then +-- jj_status_label /= Void +-- end + +feature -- Access + + state: MAIN_WINDOW_STATE + -- Used to `persist' the state of the widget. + -- Redefined as attribute so it gets stored with the object. + -- Call `make_state' to create a new state from Current. + do + create Result.make (Current) + end + +feature -- Status report + + is_cancelled: BOOLEAN_REF + -- Was an action (in a dialog) cancelled? + -- A once function so any JJ_MAIN_WINDOW can recognize it. + once + create Result + end + +feature -- Status setting + + cancel + -- A cancel button in one of the dialogs was pressed. + -- Sets `is_cancelled' to True. + -- Should be reset to False after it is checked. + do + is_cancelled.set_item (True) + end + + uncancel + -- Resets is_cancelled to False + do + is_cancelled.set_item (False) + end + +feature -- Element change + +-- restore_with_state (a_state: MAIN_WINDOW_STATE) is +-- -- Set up window parameters as read from a file with name `a_file_name'. +-- -- `A_file_name' should include the full path and name of the file. +-- require +-- state_exists: a_state /= Void +-- local +-- t: like target +-- do +-- t ?= a_state.target +-- if t /= Void then +-- set_target (t) +-- end +-- set_position (a_state.x, a_state.y) +-- if a_state.is_maximized then +-- maximize +-- elseif a_state.is_minimized then +-- minimize +-- else +-- restore +-- end +-- set_size (a_state.width, a_state.height) +-- split_manager.restore_with_state (a_state.split_manager_state) +-- end + + show_menu + -- Show the menu bar + do + set_menu_bar (jj_menu_bar) + end + + hide_menu + -- Hide the menu bar + do + remove_menu_bar + end + + show_button_text + -- Show text on all the buttons + do +-- view_manager.show_button_text +-- interface_table.show_button_text + end + + hide_button_text + -- Show text on all the buttons + do +-- view_manager.hide_button_text +-- interface_table.hide_button_text + end + + set_preferences_dialog (a_window: EV_TITLED_WINDOW) + -- Make `a_window' available to Current so `a_window' can be shown + -- when the `preferences_button' or `preferences_item' is selected. + require + window_exists: a_window /= Void + do + preferences_dialog := a_window + ensure + window_registered: preferences_dialog = a_window + end + +-- set_status_text (a_text: STRING_8) +-- -- Change the text in the status bar. +-- do +-- jj_status_label.set_text (a_text) +-- end + +feature -- Basic operations + + draw + -- Update the whole window. + local + s: STRING + do + -- This simply puts the `display_name' (from EDITABLE) or `generating_type' of + -- the `target' into the title bar of the window. + s := application.generating_type + ": " + if not is_view_empty then + if attached {EDITABLE} target as e then + s := s + e.display_name.to_string_8 + else + s := s + target.generating_type.name + end + else + s := s + "Empty" + end + set_title (s) + set_widget_states + end + + frozen ask_to_save + -- Show the `ask_to_save_dialog' + do +-- check attached {JJ_APPLICATION} (create {EV_ENVIRONMENT}).application as a then +-- -- because only {JJ_APPLICATION} should use this. really ??? +-- w := a.first_window +-- ask_to_save_dialog.show_modal_to_window (a.first_window) +-- end + ask_to_save_dialog.show_modal_to_window (Current) + end + + show_save_dialog + -- Show the `file_save_dialog'. + -- Also, passed as an agent in `ask_to_save_dialog'. + do + file_save_dialog.show_modal_to_window (main_windows.first) + end + + validate_file_name_and_save + -- Get a file name and write `save_object' to disk. + require +-- save_object_exists: save_object.item /= Void + local + s: STRING + f: RAW_FILE + do + s := file_save_dialog.file_title + if is_valid_file_name (s) then + create f.make_open_write (s) + f.general_store (target) + else + file_save_dialog.show_modal_to_window (main_windows.first) + end + end + + validate_file_name_and_open + -- Get a file name and read a object into `save_object' + require +-- save_object_exists: save_object.item /= Void + local + s: STRING + f: RAW_FILE + do + s := file_open_dialog.file_name + if is_valid_file_name (s) then + create f.make_open_read (s) + if attached f.retrieved as a then + if attached {like target_imp} a as t then + set_target (t) + end + end +-- if attached {like target_imp} f.retrieved as t then +---- set_save_object (a) +-- target_imp := t +-- end + else + file_open_dialog.show_modal_to_window (main_windows.first) + end + end + +feature {NONE} -- Actions + + on_show_preferences_dialog + -- React to a press of the preferences button or menu by + -- showing the `preferences_dialog'. + require + preferences_dialog_exists: preferences_dialog /= Void + do + preferences_dialog.show + if preferences_dialog.is_minimized then + preferences_dialog.restore + end + preferences_dialog.raise + end + + on_file_open + -- React to a request to read a system from disk. + do + validate_file_name_and_open + set_widget_states + end + + on_file_save + -- React to a request to save the system to disk. + local + w: JJ_MAIN_WINDOW +-- ff: STANDARD_INTERFACE_FILE_FACILITIES + do +-- create ff +-- ff.set_persistent (system) +-- ff.validate_file_name_and_save +-- set_save_object (target) + validate_file_name_and_save +-- if system.is_okay then + -- Change the title of all JJ_MAIN_WINDOWs targeted + -- to `target' + from main_windows.start + until main_windows.exhausted + loop + w := main_windows.item + if w.target = target then + w.draw + end + main_windows.forth + end +-- else +-- -- save operation failed. Write failure? +-- end +-- set_widget_states + end + + on_get_target: like target + -- Needed to be able to `set_pebble_function' for buttons so the + -- button can pick the current `target' as a pebble during a pick. + do + Result := target + end + + on_make_new_target + -- Create a new target after querying user to save + -- current target if necessary. + local + t: like target + do + create t + set_target (t) +-- draw + end + + on_about + -- Display the About dialog. + do + about_dialog.show + end + + on_maximize_all + -- Maximize all the main windows + do + main_windows.do_all (agent {JJ_MAIN_WINDOW}.maximize) + end + + on_minimize_all + -- Minimize all the main windows + do + main_windows.do_all (agent {JJ_MAIN_WINDOW}.minimize) + end + + on_raise_all + -- Raise all the main windows + do + main_windows.do_all (agent {JJ_MAIN_WINDOW}.restore) + end + + on_drop_in_new_window (a_target: like target) + -- React to `a_target' drop on the new_window button. + require + target_exists: a_target /= Void + local + w: like Current + do + create w.make (a_target) + w.show + end + + on_drop_target (a_target: like target) + -- React to drop of `a_target' (on a button?) by changing + -- the `target' and setting up views. + require + target_exists: a_target /= Void + do +-- system.uncancel +-- system.ask_to_save +-- if not system.is_cancelled.item then +-- set_system (a_system) +-- end + end + +-- on_make_new_window +-- Create a new JJ_MAIN_WINDOW (like Current) and +-- target it to the same `system'. +-- local +-- w: like Current +-- do +-- create w.make (target) +-- w.show +-- end + + on_exit + -- End the execution, insuring to save unsaved targets. + local + w: JJ_MAIN_WINDOW + do + from main_windows.start + until main_windows.exhausted or else is_cancelled.item + loop + w := main_windows.item + if not is_view_empty then +-- set_save_object (w.target) + ask_to_save + end + main_windows.forth + end + if not is_cancelled.item then + end_application + end + end + +feature {JJ_MAIN_WINDOW, APPLICATION_STATE} -- Implementation (support routines) + + on_close_window + -- A request to close the window has occured. + -- If this is the only window displaying `system' then give user + -- chance to save the `system' before closing window. + -- Remove the `a_window' from `main_windows' list and destroy it. + -- If it is the last window then end the application. + do + uncancel + check attached {JJ_APPLICATION} (create {EV_ENVIRONMENT}).application as jj_app then + -- Because {JJ_MAIN_WINDOW} (this class) is for use in a {JJ_APPLICATION}. +-- if jj_app.persistence_manager.is_pending then + ask_to_save +-- end + if not is_cancelled.item then + if main_windows.count = 1 then + -- About to close the last window and therefore end the application, + -- so save it's state before destroying this last window. + end_application + else + main_windows.start + main_windows.prune (Current) + destroy + end + end + end + end + +feature {COMMAND_MANAGER} -- Implementation + + set_widget_states + -- Update the state of the buttons and menu items + do + -- Item always enabled +-- file_menu.enable_sensitive +-- file_new_system_item.enable_sensitive +-- file_open_item.enable_sensitive +-- file_exit_item.enable_sensitive +-- help_menu.enable_sensitive +-- help_about_item.enable_sensitive +-- new_window_button.enable_sensitive +-- new_system_button.enable_sensitive +-- open_button.enable_sensitive +-- help_button.enable_sensitive + -- Items conditionally enabled + if is_view_empty then + file_save_item.disable_sensitive + save_button.disable_sensitive + elseif command_manager.is_at_marked_state then + file_save_item.disable_sensitive + save_button.disable_sensitive + else + file_save_item.enable_sensitive + save_button.enable_sensitive + end + + if command_manager.is_undoable then + edit_undo_item.enable_sensitive + undo_button.enable_sensitive + else + edit_undo_item.disable_sensitive + undo_button.disable_sensitive + end + if command_manager.is_executable then + edit_redo_item.enable_sensitive + redo_button.enable_sensitive + else + edit_redo_item.disable_sensitive + redo_button.disable_sensitive + end + end + +feature {NONE} -- Implementation (support routines) + + is_target_in_other_window: BOOLEAN + -- Is `target' also contained in some other JJ_MAIN_WINDOW? + -- Used to determine if it must be saved when Current is closed. + do + if target /= Void then + from main_windows.start + until main_windows.exhausted or else Result + loop + Result := main_windows.item /= Current and then main_windows.item.target = target + main_windows.forth + end + end + end + + end_application + -- Close down the application + do + if attached (create {EV_ENVIRONMENT}).application as a then + a.destroy + end + end + + preferences_dialog: EV_TITLED_WINDOW + -- The window, if any, displayed when the `preferences_button' or + -- `preferences_item' is selected. + -- Can be used as a dialog for setting up the views. + + Default_preferences_dialog: PREFERENCES_WINDOW + -- For setting window parameters + once +-- create Result.make (target) + create Result + Result.close_request_actions.extend (agent Result.hide) + end + +feature {NONE} -- Implementation (dialogs) + + about_dialog: ABOUT_DIALOG + -- Show minimal information about the program. + once + create Result + -- Hide when something else is clicked so it can be non-modal + -- and so the user does not have to hit the "okay" button or + -- explicitely close the dialog. + Result.close_request_actions.extend (agent Result.hide) + Result.focus_out_actions.extend (agent Result.hide) + end + + File_open_dialog: EV_FILE_OPEN_DIALOG + -- Standard + once + create Result +-- Result.filters.extend (["*.*", "All files"]) + Result.open_actions.extend (agent validate_file_name_and_open) + Result.cancel_actions.extend (agent cancel) + end + + Ask_to_save_dialog: EV_QUESTION_DIALOG + -- Asks the user if he wants to save the system. + local + dc: EV_DIALOG_CONSTANTS + do + create dc + create Result +-- Result.set_text ("System is not saved!%N%N Save?") +-- Result.button (dc.Ev_yes).select_actions.extend (agent show_save_dialog) + Result.set_text ("Some objects have changed! Commit changes?") + Result.button (dc.ev_yes).select_actions.extend (agent commit_changes) + Result.button (dc.Ev_cancel).select_actions.extend (agent cancel) + end + + commit_changes + -- Save any changed objects. + do + check attached {JJ_APPLICATION} (create {EV_ENVIRONMENT}).application as jj_app then + -- Because this is used by JJ_APPLICATIONs +-- jj_app.persistence_manager.commit + end + end + + File_save_dialog: EV_FILE_SAVE_DIALOG + -- Standard + once + create Result +-- Result.filters.extend (["*.*", "All files"]) + Result.save_actions.extend (agent validate_file_name_and_save) + Result.cancel_actions.extend (agent cancel) + end + +feature {NONE} -- Menus + + jj_menu_bar: EV_MENU_BAR + -- Standard menu bar for this window. + + file_menu: EV_MENU + -- "File" menu for this window (contains New, Open, Close, Exit...) + + file_new_target_item: EV_MENU_ITEM + -- "File/New system" + + file_open_item: EV_MENU_ITEM + -- "File/Open" + + file_save_item: EV_MENU_ITEM + -- "File/Save" + + file_exit_item: EV_MENU_ITEM + -- "File/Exit" + + edit_menu: EV_MENU + -- "Edit" menu (contains Undo, Redo, Cut, Copy, etc...) + + edit_undo_item: EV_MENU_ITEM + -- "Edit/Undo" + + edit_redo_item: EV_MENU_ITEM + -- "Edit/Redo" + + tool_menu: EV_MENU + -- "Tools" menu (contains Preferences, etc...) + + tool_preferences_item: EV_MENU_ITEM + -- "Tools/Preferences" + + window_menu: EV_MENU + -- "Window" menu for this window (contains Minimize all, Raise all, etc...) + + window_new_item: EV_MENU_ITEM + -- "Window/New" + + window_maximize_all_item: EV_MENU_ITEM + -- "Window/Maximize all" + + window_minimize_all_item: EV_MENU_ITEM + -- "Window/Minimize all" + + window_raise_all_item: EV_MENU_ITEM + -- "Window/Raise all" + + help_menu: EV_MENU + -- "Help" menu for this window (contains About...) + + help_about_item: EV_MENU_ITEM + -- "Help/About" + +feature {NONE} -- Toolbars and buttons + + jj_tool_bar_box: EV_HORIZONTAL_BOX + -- Holder for `jj_tool_bar'. Other items can + -- be added here to make a custom bar or to `upper_bar' + -- to place another tool_bar below this one. + + jj_tool_bar: EV_TOOL_BAR + -- Standard toolbar for this window + + new_window_button: EV_TOOL_BAR_BUTTON + -- Create a new system + + new_target_button: EV_TOOL_BAR_BUTTON + -- Create a new system for this window + + open_button: EV_TOOL_BAR_BUTTON + -- Opens an existing system + + save_button: EV_TOOL_BAR_BUTTON + -- To save the system + + minimize_all_button: EV_TOOL_BAR_BUTTON + -- To minimize all the JJ_MAIN_WINDOWs + + raise_all_button: EV_TOOL_BAR_BUTTON + -- To restore all the JJ_MAIN_WINDOWs + + help_button: EV_TOOL_BAR_BUTTON + -- Opens help engine + + undo_button: EV_TOOL_BAR_BUTTON + -- To undo the last command + + redo_button: EV_TOOL_BAR_BUTTON + -- To redo the last undone command + +feature {NONE} -- Status bar + +-- jj_status_bar: EV_STATUS_BAR +-- -- Standard status bar for this window + +-- jj_status_label: EV_LABEL +-- -- Label situated in the `jj_status_bar'. +-- -- Note: Call `set_status_text' to change the text +-- -- displayed in the status bar. + +feature {NONE} -- Implementation + + split_manager: SPLIT_MANAGER + -- Controls placement of sub-windows + +feature {NONE} -- Implementation / Constants + + Window_title: STRING = "JJ_MAIN_WINDOW" + -- Title of the window. + + Window_width: INTEGER = 800 + -- Initial width for this window. + + Window_height: INTEGER = 600 + -- Initial height for this window. + +invariant + +-- system_exists: system /= Void + +end + diff --git a/jj_vision/interface/system/jj_system.e b/jj_vision/interface/system/jj_system.e new file mode 100644 index 0000000..5f5c8ba --- /dev/null +++ b/jj_vision/interface/system/jj_system.e @@ -0,0 +1,36 @@ +note + description: "[ + Root object for use with {JJ_MAIN_WINDOW} which can be placed + into any number of these windows using the {VIEW} model. + ]" + date: "21 Apr 06" + author: "Jimmy J. Johnson" + copyright: "Copyright 2012, Jimmy J. Johnson" + license: "Eiffel Forum License v2 (see forum.txt)" + URL: "$URL: file:///F:/eiffel_repositories/jj_vision/trunk/interface/system/jj_system.e $" + date: "$Date: 2012-05-31 14:05:35 -0400 (Thu, 31 May 2012) $" + revision: "$Revision: 10 $" + + +class + JJ_SYSTEM + +inherit + + SHARED + +create + default_create + +feature {NONE} -- Initialization + + initialize_interface + -- Set up the interface items into the `interface_table'. + do +-- interface_table.add_item_with_tuple (<<"{SYSTEM} - System not saved text", "System not saved", "The system has not been saved since last change.", "Changes have been made, but the system has not been save.", "icon_red_cross.ico">>) +-- interface_table.add_item_with_tuple (<<"{SYSTEM} - Not in system text", "Not in system", "The displayed interface names are not used by the program.", "The displayed interface names are not used by the program.", "icon_exec_quit_color.ico">>) +-- interface_table.add_item_with_tuple (<<"{SYSTEM} - Not allowed pixmap", "Not allowed", "Operation not allowed", "The operation you are attempting is not allowed.", "icon_delete_color.ico">>) +-- interface_table.add_item_with_tuple (<<"{SYSTEM} - Empty", "Empty", "Empty view or object", "The view or object is empty.", "icon_class_symbol_gray.ico">>) + end + +end diff --git a/jj_vision/interface/system/preferences_window.e b/jj_vision/interface/system/preferences_window.e new file mode 100644 index 0000000..edc9433 --- /dev/null +++ b/jj_vision/interface/system/preferences_window.e @@ -0,0 +1,63 @@ +note + description: "[ + A {VIEW} dialog for setting user preverences + ]" + author: "Jimmy J. Johnson" + copyright: "Copyright 2012, Jimmy J. Johnson" + license: "Eiffel Forum License v2 (see forum.txt)" + URL: "$URL: file:///F:/eiffel_repositories/jj_vision/trunk/interface/system/preferences_window.e $" + date: "$Date: 2015-10-24 07:32:40 -0700 (Sat, 24 Oct 2015) $" + revision: "$Revision: 23 $" + + +class + PREFERENCES_WINDOW + +inherit + +-- SPLIT_VIEW + VIEW + undefine +-- default_create, + copy + redefine + create_interface_objects, + initialize + end + + EV_TITLED_WINDOW + rename + object_id as ise_object_id + undefine + is_in_default_state + redefine + create_interface_objects, + initialize + end + +create + default_create, + make + +feature {NONE} -- Initialization + + create_interface_objects + -- Create objects to be used by `Current' in `initialize' + -- Implemented by descendants to create attached objects + -- in order to adhere to void-safety due to the implementation bridge pattern. + do + Precursor {VIEW} + Precursor {EV_TITLED_WINDOW} + end + + initialize + -- Set up the window + do + Precursor {EV_TITLED_WINDOW} + Precursor {VIEW} + set_title ("System Preferences") +-- split_manager.extend (create {WINDOW_PREFERENCES_VIEW}) + extend (create {WINDOW_PREFERENCES_VIEW}) + end + +end diff --git a/jj_vision/interface/system/shared.e b/jj_vision/interface/system/shared.e new file mode 100644 index 0000000..c2b435c --- /dev/null +++ b/jj_vision/interface/system/shared.e @@ -0,0 +1,42 @@ +note + description: "[ + Global objects for use in the "jj_vision" cluster + ]" + date: "10 May 03" + author: "Jimmy J. Johnson" + copyright: "Copyright 2012, Jimmy J. Johnson" + license: "Eiffel Forum License v2 (see forum.txt)" + URL: "$URL: file:///F:/eiffel_repositories/jj_vision/trunk/interface/system/shared.e $" + date: "$Date: 2015-10-15 13:03:35 -0700 (Thu, 15 Oct 2015) $" + revision: "$Revision: 21 $" + +class + SHARED + +inherit + + ANY + + JJ_FILE_FACILITIES + +feature -- Access, restricted to descendants + + main_windows: LINKED_LIST [JJ_MAIN_WINDOW] + -- List of all open JJ_MAIN_WINDOWs + once + create Result.make + end + + command_manager: COMMAND_MANAGER + -- Used to undo/redo commands for this system + once + create Result + end + +feature -- Access + + minimum_pixmap_size: INTEGER = 8 + maximum_pixmap_size: INTEGER = 64 + +end + diff --git a/jj_vision/interface/system/split_manager.e b/jj_vision/interface/system/split_manager.e new file mode 100644 index 0000000..d32225e --- /dev/null +++ b/jj_vision/interface/system/split_manager.e @@ -0,0 +1,1342 @@ +note + description : "[ + This sets up buttons and menus for "selecting" multiple views and different + formats for those views within a `cell'. The `cell', `menu', and `bar' can + then be added to your container as appropriate. + + It manages the placement of VIEWs in a `cell', allowing nested + split areas to be hidden/shown using buttons and/or menus. The views are placed + in `cell' which can be placed in an EV_CONTAINER. + + Views are added to Current using `extend' or `extend_siblings'. Class JJ_MAIN_WINDOW + has a feature `split_manager' (inherited from VIEW) which allows the placement of + multiple panes (e.g. VIEWs, TOOLs, etc) into the window. The `split_manager' + controls the layout of these VIEWs. The `initialize' feature from a class descended + from JJ_MAIN_WINDOW may look like this + + feature initialize is + -- Set up a window with three VIEWs. + do + Precursor {JJ_MAIN_WINDOW} + -- Allow the user to choose if the children are displayed + -- as tabs, multiple panes, or as a single cell. + split_manager.enable_mode_changes + -- Add two VIEWs to be displayed in an EV_VERTICAL_SPLIT_AREA (when + -- the window mode `is_split_mode'.) + split_manager.set_vertical + split_manager.extend (view_one) + split_manager.extend (view_two) + -- Add a third view into an EV_HORIZONTAL_SPLIT_AREA with the + -- previouse two views (contained in the EV_VERTICAL_SPLIT_AREA) + -- below the new one + split_manager.extend_siblings (view_three, split_manager.last_item) + -- NOTE: a tool bar and menu items are automatically added. + end + + If the number of views added to Current is at least two then the `bar' is filled + with a set of buttons and 'menu' is built with menu items for selecting the + "mode" of the `cell'. When `is_in_split_mode' (the default mode) a number of + views will be displayed in EV_SPLIT_AREAs, recursively, within `cell'. When + `is_maximized_mode' only the `selected_view' will be placed in `cell'. Finally, + when `is_notebook_mode' the views will be displayed as tabs in an EV_NOTEBOOK + within `cell'. + + Here is how the `bar' looks when `is_maximized_mode' or `is_notebook_mode'. + + PB = `preferences_button' + SB = `split_button' + MB = `maximize_button' + NB = `notebook_button' + RB = an EV_TOOL_BAR_RADIO_BUTTON + + |---------------------- bar --------------------------------------| + | |--- mode_bar ---| |--------------- radio bar -------------| | + | | |SB| |MB| |NB| | | |RB| |RB| ... to number of views | | + + When one of the radio buttons is pressed the corresponding view is brought to + the top. + + When `is_split_mode' the radio buttons are replaced with EV_TOOL_BAR_TOGGLE_BUTTONs. + + TB = an EV_TOOL_BAR_TOGGLE_BUTTON + + |------------------------------- bar ---------------------------| + | |--- mode_bar ---| |-------------- toggle bar -----------| | + | | |SB| |MB| |NB| | | |TB| |TB| ... to number of views | | + + When a toggle button is selected the corresponding view becomes visible in a split + area calculated on the fly. + + The items in `menu' are kept in parallel with the buttons, allowing menu selection + to accomplish the same things as the buttons. + ]" + date: "12 Nov 07" + author: "Jimmy J. Johnson" + copyright: "Copyright 2012, Jimmy J. Johnson" + license: "Eiffel Forum License v2 (see forum.txt)" + URL: "$URL: file:///F:/eiffel_repositories/jj_vision/trunk/interface/system/split_manager.e $" + date: "$Date: 2014-05-31 08:53:58 -0400 (Sat, 31 May 2014) $" + revision: "$Revision: 17 $" + +class + SPLIT_MANAGER + +inherit + + SHARED + export + {NONE} all + redefine + default_create + end + + S_TREE + redefine + default_create, + root, + set_root, + extend, + extend_siblings + end + + PIXEL_BUFFERS + undefine + default_create + end + +create + default_create + +feature {NONE} -- Initialization + + default_create + -- Initialize current + do + Precursor {S_TREE} + -- create exported widgets + create bar + create menu + create cell + +-- create root.make (default_view) + last_node := root + selected_node := root +-- view := default_view + -- Assume split mode + is_split_mode := True + -- Only need these widgets if more than one view is added. + create notebook + -- create tool bars + create toggle_bar + create radio_bar + create mode_bar + -- create buttons and menus + create single_mode_button + create split_mode_button + create notebook_mode_button + create mode_menu + create toggle_menu + create radio_menu + create single_mode_item + create split_mode_item + create notebook_mode_item + -- Set widget attributes + single_mode_button.set_pixmap (create {EV_PIXMAP}.make_with_pixel_buffer (Icon_format_text_color_buffer)) + single_mode_button.set_tooltip ("Single mode") + split_mode_button.set_pixmap (create {EV_PIXMAP}.make_with_pixel_buffer (Icon_new_development_tool_color_buffer)) + split_mode_button.set_tooltip ("Split mode") + notebook_mode_button.set_pixmap (create {EV_PIXMAP}.make_with_pixel_buffer (Icon_folders_color_buffer)) + notebook_mode_button.set_tooltip ("Tab mode") + -- Set up the `mode_bar' and its buttons. +-- mode_bar.extend (create {EV_TOOL_BAR_SEPARATOR}) + mode_bar.extend (single_mode_button) + mode_bar.extend (split_mode_button) + mode_bar.extend (notebook_mode_button) +-- mode_bar.extend (create {EV_TOOL_BAR_SEPARATOR}) + split_mode_button.enable_select + -- Set up menus which do not change + menu.set_text ("Views") + mode_menu.set_text ("Mode") + radio_menu.set_text ("Select view") + toggle_menu.set_text ("Select view") + single_mode_item.set_text ("Maximize Mode") + split_mode_item.set_text ("Split Mode") + notebook_mode_item.set_text ("Notebook Mode") + mode_menu.extend (single_mode_item) + mode_menu.extend (split_mode_item) + mode_menu.extend (notebook_mode_item) + split_mode_item.enable_select + -- Actions for `notebook' + notebook.selection_actions.extend (agent on_tab_selected) + -- Actions for buttons +-- preferences_button.select_actions.extend (agent on_show_preferences_dialog) + split_mode_button.select_actions.extend (agent set_split_mode) + single_mode_button.select_actions.extend (agent set_single_mode) + notebook_mode_button.select_actions.extend (agent set_notebook_mode) + -- Actions for menu items +-- preferences_item.select_actions.extend (agent on_show_preferences_dialog) + single_mode_item.select_actions.extend (agent set_single_mode) + split_mode_item.select_actions.extend (agent set_split_mode) + notebook_mode_item.select_actions.extend (agent set_notebook_mode) + end + +feature -- Access + + cell: EV_CELL + -- The container which will be managed. The views will be placed + -- into `cell' based on the user's button, or menu selections. + -- This should be extended into a widget. + + menu: EV_MENU + -- Menu of items to toggle views on and off. + -- Can be inserted into window menu. + + bar: EV_HORIZONTAL_BOX + -- Bar of buttons used to manage views. + -- Can be inserted into a toolbar. + + selected_view: detachable VIEW + -- The currently selected view. + do + if attached selected_node as sn then + Result := sn.view + end + end + + view_count: INTEGER + -- The number of VIEWs contained in and managed by Current. + do + Result := descendents.count + end + + visible_count: INTEGER + -- The number of VIEWs which are visible. + local + s: like leaf_nodes + n: like root + do + s := leaf_nodes + from s.start + until s.exhausted + loop + n := s.item + if n.is_visible then + Result := Result + 1 + end + s.forth + end + end + + first_visible_view: VIEW + -- The first view which is visible. + local + s: like leaf_nodes + n: like root + l_result: detachable VIEW + do + s := leaf_nodes + from s.start + until l_result /= Void or else s.exhausted + loop + n := s.item + if n.is_visible then + l_result := n.view + end + s.forth + end + if l_result = Void then + Result := Default_view + else + Result := l_result + end + ensure + result_exists: Result /= Void + end + + default_view: DEFAULT_VIEW + -- Create an EV_LABEL as a place holder + do + create Result + Result.set_pebble (Result) + Result.set_text ("Empty: no VIEW") + end + + state: SPLIT_MANAGER_STATE + -- Create a structure representing the state of Current; to be used + -- by `restore_state' during execution start. + do + save_split_positions + create Result.make (Current) + ensure + result_exists: Result /= Void + end + +feature -- Element change + + set_root (a_root: like root) + -- Change `root' and resync the manager. + do + Precursor {S_TREE} (a_root) + syncronize + end + +-- restore_with_state (a_state: SPLIT_MANAGER_STATE) is +-- -- Restore Current to state as represented in `a_state' +-- require +-- state_exists: a_state /= Void +-- local +-- des: like descendents +-- ns: SPLIT_MANAGER_NODE_STATE +-- do +-- if a_state.is_mode_frozen then +-- disable_mode_changes +-- else +-- enable_mode_changes +-- end +-- if a_state.is_interface_frozen then +-- disable_interface_changes +-- else +-- enable_interface_changes +-- end +-- if a_state.is_single_mode then +-- set_single_mode +-- elseif a_state.is_split_mode then +-- set_split_mode +-- elseif a_state.is_notebook_mode then +-- set_notebook_mode +-- else +-- check +-- should_not_happen: False +-- -- because there are only three modes. +-- end +-- end +-- -- Restore each node's state +-- des := root.descendents +-- check +-- same_count: des.count = a_state.node_states.count +-- -- The saved node states should have the same form as the +-- -- node tree in the current window. +-- end +-- from +-- a_state.node_states.start +-- des.start +-- until a_state.node_states.exhausted or else des.exhausted +-- loop +-- ns := a_state.node_states.item +-- des.item.restore_with_state (ns) +-- a_state.node_states.forth +-- des.forth +-- end +-- syncronize +-- end + +feature -- Basic operations + + extend (a_item: VIEW) + -- Add `a_item' as a sibling to the previously added item. + do + Precursor {S_TREE} (a_item) + if selected_node = Void then + selected_node := corresponding_node (a_item) + end + add_agents (corresponding_node (a_item)) + syncronize + end + + extend_siblings (a_first, a_second: VIEW) + -- Searching from `root', find the nodes containing `a_first', and/or + -- `a_second' or, if not finding them, create new nodes containing + -- `a_first', and `a_second' and make them children of a new node. + -- Make `root' reference the new node. + local + n: like root + had_first, had_second: BOOLEAN + do + -- Prevent agents from being added twice if the tree already has the item. + if has (a_first) then + had_first := True + end + if has (a_second) then + had_second := True + end + Precursor {S_TREE} (a_first, a_second) + n := corresponding_node (a_first) + if selected_node = Void then + selected_node := n + end + if n.is_view and then not had_first then + add_agents (n) + end + n := corresponding_node (a_second) + if n.is_view and then not had_second then + add_agents (n) + end + syncronize + end + + wipe_out_views + -- Clean out all the views in preperation for rebuilding. + do + -- Wipe out the containers + notebook.wipe_out + -- Wipe out the EV_CONTAINERs + toggle_bar.wipe_out + radio_bar.wipe_out + toggle_menu.wipe_out + radio_menu.wipe_out + -- Reset the view to default state + selected_node := root +-- build_bars + end + + select_view (a_view: VIEW) + -- Make `a_view' the `selected_view' + require + view_exists: a_view /= Void + has_view: has_view (a_view) + do + check attached corresponding_node (a_view) as n then + n.show + selected_node := n + end + syncronize + ensure + view_was_selected: selected_view = a_view + end + + toggle_view (a_view: VIEW) + -- If `a_view' is hidden then show it; if it is shown hide it. + -- The effect from this will show up in split mode. + require + view_exists: a_view /= Void + has_view: has_view (a_view) + local + n: like root + do + n := corresponding_node (a_view) + check + is_view: n.is_view + -- Because if `has_view' then `n' must be a view. + end + if n.is_hidden then + n.show + selected_node := n + else + if visible_count > 1 then + save_split_positions + n.hide + end + end + syncronize + end + + show_all_views + -- Make all the views visible + local + s: like leaf_nodes + do + s := leaf_nodes + from s.start + until s.exhausted + loop + s.item.show + s.forth + end + syncronize + end + + show_view (a_view: VIEW) + -- Make `a_view' visible + require + view_exists: a_view /= Void + has_view: has_view (a_view) + local + n: like root + do + n := corresponding_node (a_view) + if not n.is_visible then + n.show + restore_split_positions + end + select_view (a_view) + ensure + view_visible: corresponding_node (a_view).is_visible + view_selected: selected_view = a_view + end + + hide_view (a_view: VIEW) + -- React to a request to hide `a_view' + require + view_exists: a_view /= Void + has_view: has_view (a_view) + is_in_split_mode: is_split_mode + local + n: like root + do + if visible_count > 1 then + save_split_positions + n := corresponding_node (a_view) + n.hide + if selected_view = a_view then + -- Must select another + select_view (first_visible_view) + end + syncronize + end + ensure + view_not_visible: old visible_count > 1 implies not corresponding_node (a_view).is_visible + end + + disable_view (a_view: VIEW) + -- Prevent `a_view' from appearing and also remove the + -- buttons and menus which will allow it to be shown. + -- Use `enable_view' to restore it to normal. + require + view_exists: a_view /= Void + has_view: has_view (a_view) + do + save_split_positions + corresponding_node (a_view).disable +-- build_bars +-- build_cell + syncronize + ensure + is_in_disabled_views: corresponding_node (a_view).is_disabled + end + + enable_view (a_view: VIEW) + -- Sets the view handling for `a_view' back to normal + -- by restoring the corresponding buttons and menues. + require + view_exists: a_view /= Void + has_view: has_view (a_view) + do + corresponding_node (a_view).enable +-- build_bars +-- build_cell + restore_split_positions + syncronize + ensure + view_not_disabled: not corresponding_node (a_view).is_disabled + end + + set_single_mode_view (a_view: VIEW) + -- Set to single mode with `a_view' visible, filling the `cell'. + require + view_exists: a_view /= Void + has_view: has_view (a_view) +-- mode_is_changable: is_mode_changable + do + set_single_mode + if selected_view /= a_view then + select_view (a_view) + end + ensure + is_single_mode: is_single_mode + correct_view_selected: selected_view = a_view + end + + set_split_mode_view (a_view: VIEW) + -- Multiple views can be visible within `cell'. + -- Ensure `a_view' is the selected view. + require + view_exists: a_view /= Void + has_view: has_view (a_view) +-- mode_is_changable: is_mode_changable + do + set_split_mode + if selected_view /= a_view then + select_view (a_view) + end + ensure + is_split_mode: is_split_mode + correct_view_selected: selected_view = a_view + end + + set_notebook_mode_view (a_view: VIEW) + -- Change to notebook style with `a_view' on top. + require + view_exists: a_view /= Void + has_view: has_view (a_view) +-- mode_is_changable: is_mode_changable + do + set_notebook_mode + if selected_view /= a_view then + select_view (a_view) + end + ensure + is_notebook_mode: is_notebook_mode + correct_view_selected: selected_view = a_view + end + +feature -- Status report + + is_interface_frozen: BOOLEAN + -- Is the set of visible views frozen (i.e. can the user toggle a view + -- on or off)? (Assuming there is more than one view.) + -- This affects the interface, not the programmers ability to change. + + is_mode_frozen: BOOLEAN + -- Is the "mode" frozen (i.e. if `is_single_mode' always single mode)? + -- This affects the interface, not the programmers ability to change. + -- See `enable_mode_changes' and `disable_mode_changes'. + + is_single_mode: BOOLEAN + -- Is only one view in `cell'? + + is_split_mode: BOOLEAN + -- Is the view in split mode (multiple views showing)? + + is_notebook_mode: BOOLEAN + -- Is the view in notebook mode (multiple views in an EV_NOTEBOOK)? + +feature -- Status setting + + enable_mode_changes + -- Allow the *user* (not to be confused with *programer*) to change + -- the way the contained views (if there is more than one view) are + -- presented in `cell' by setting `is_mode_frozen' to True. + -- If more than one view is present and `is_interface_frozen' then + -- buttons and menus for changing the mode will be made available to + -- the programmer in `bar' and `menu' which can then be presented to + -- the user. + do + is_mode_frozen := False + if not is_empty and then view_count >= 2 then + build_bars + end + build_cell + ensure + mode_is_changable: not is_mode_frozen + end + + disable_mode_changes + -- Prevent *user* changes to the "mode" by setting `is_mode_changable' + -- to False. The user will see what ever appearance has been set + -- by the programmer using the `set_..._mode' features. + -- See `set_split_mode', `set_single_mode',and `set_notebook_mode'. + do + is_mode_frozen := True + ensure + mode_is_not_changable: is_mode_frozen + end + + enable_interface_changes + -- Allow the *user* to toggle the visible views. + -- Used to add the buttons and menues from `bar'. + do + is_interface_frozen := False + ensure + views_are_changable: not is_interface_frozen + end + + disable_interface_changes + -- Prevent the *user* from toggling the visible views. + -- Used to hide or remove the buttons and menues from `bar'. + do + is_interface_frozen := True + ensure + views_not_changable: is_interface_frozen + end + + set_single_mode + -- Make the `cell' hold only one widget, either the `selected_view' or, + -- if there are no views, a `default_view'. +-- require +-- mode_is_changable: is_mode_changable + do + if not is_single_mode then + if is_split_mode then + save_split_positions + end + is_single_mode := True + is_split_mode := False + is_notebook_mode := False + syncronize + end +-- select_view (selected_view) + ensure + is_single_mode: is_single_mode + end + + set_split_mode + -- Make the `cell' hold the views recursively in EV_SPLIT_AREAs. + -- If there are no views then `cell' contains a `default_view'. + require + is_mode_changable: not is_mode_frozen + local + d: like descendents + do + if not is_split_mode then + is_split_mode := True + is_single_mode := False + is_notebook_mode := False + restore_split_positions + syncronize + end + if not attached selected_view or else ( + attached selected_view as v and then not has (v)) then + d := descendents + if not d.is_empty then + selected_node := descendents.first + end + end + check attached selected_view as v then + select_view (v) + end + ensure + is_split_mode: is_split_mode + end + + set_notebook_mode + -- Make `cell' hold the views in an EV_NOTEBOOK. + -- If there are no views then `cell' contains a `default_view'. +-- require +-- is_mode_changable: is_mode_changable + do + if not is_notebook_mode then + if is_split_mode then + save_split_positions + end + is_notebook_mode := True + is_single_mode := False + is_split_mode := False + syncronize + end +-- select_view (selected_view) + ensure + is_notebook_mode: is_notebook_mode + end + +feature -- Query + + is_visible (a_view: VIEW): BOOLEAN + -- Is `a_view' visible? (I.e. should it be added to `cell'?) + do + Result := has (a_view) and then corresponding_node (a_view).is_visible + end + + is_disabled (a_view: VIEW): BOOLEAN + -- Is `a_view' able to be shown? + do + Result := has (a_view) and then corresponding_node (a_view).is_disabled + end + + has_split (a_split_area: EV_SPLIT_AREA): BOOLEAN + -- Does Current contain/manage `a_split_area'? + require + split_exists: a_split_area /= Void + local + s: like internal_nodes + do + s := internal_nodes + from s.start + until Result or else s.exhausted + loop + Result := s.item.view = a_split_area + s.forth + end + end + + has_view (a_view: VIEW): BOOLEAN + -- Does Current contain/manage `a_view'? + require + view_exists: a_view /= Void + local + s: like leaf_nodes + do + s := leaf_nodes + from s.start + until Result or else s.exhausted + loop + Result := s.item.view = a_view + s.forth + end + end + + is_conforming_type (a_view: ANY): BOOLEAN + -- Does `a_view' conform to VIEW or EV_SPLIT_AREA? + -- Would have preferred for `a_view' to be an EV_WIDGET but that caused + -- too many name clashes in decendents of VIEW. + require + view_exists: a_view /= Void + do + Result := a_view.conforms_to ({VIEW}) or else a_view.conforms_to ({EV_SPLIT_AREA}) + ensure + definition: Result implies a_view.conforms_to ({VIEW}) or else a_view.conforms_to ({EV_SPLIT_AREA}) + end + +feature {SPLIT_MANAGER_STATE} -- Implementation (Query) + + root: detachable SPLIT_MANAGER_NODE + -- Root node of the tree. + + selected_node: like root + -- The node corresponding the the view last selected by the user. + +feature {NONE} -- Implementation (Basic operations) + + add_agents (a_node: attached like root) + -- Add agents to toggle/raise/minimize the widget + -- (a VIEW) in `a_node'. + require + node_exists: a_node /= Void + is_view: a_node.is_view + has_view: has_node (a_node) + do + a_node.toggle_button.select_actions.extend (agent toggle_view (a_node.view)) + a_node.radio_button.select_actions.extend (agent select_view (a_node.view)) + a_node.toggle_item.select_actions.extend (agent toggle_view (a_node.view)) + a_node.radio_item.select_actions.extend (agent select_view (a_node.view)) + -- Add actions to the buttons of `a_view' if it is a TOOL + if attached {TOOL} a_node.view as t then + -- This item is a tool and therefore has buttons. + t.maximize_actions.extend (agent set_single_mode_view (a_node.view)) + t.restore_actions.extend (agent set_split_mode_view (a_node.view)) + t.close_actions.extend (agent hide_view (a_node.view)) + end + end + + save_split_positions + -- Save the position of splitters for restoration later. + local + n: SPLIT_MANAGER_NODE + s: like internal_nodes + do + s := internal_nodes + from s.start + until s.exhausted + loop + n := s.item + check + node_holds_split_area: n.is_split + -- Because only EV_SPLIT_AREA widgets are added to the nodes in `splits'. + end + n.save_split_position + s.forth + end + end + + restore_split_positions + -- Set the split position of each visible split area to what it was + -- when it was last visible. + local + n: SPLIT_MANAGER_NODE + s: like internal_nodes + do + s := internal_nodes + from s.start + until s.exhausted + loop + n := s.item + check + node_holds_split_area: n.is_split + -- Because only EV_SPLIT_AREA widgets are added to the nodes in `splits'. + end + n.restore_split_position + s.forth + end + end + + syncronize + -- Rebuild all the externally accessed widgets such as `cell', `menu', + -- and `button_bar' reflect the state of the buttons. + -- Also ensure that at least one view is visible if there are any views. + -- and update button and menu states. + do + build_cell + if visible_count >= 1 then + syncronize_tools + -- Make sure the radio items and buttons for the `selected_node' are set to + -- the correct state. This must be called after the radio buttons are added + -- to the bar because the radio buttons for all the views must work together + -- (when one selected the other turn off.) + restore_split_positions +-- syncronize_view_selection_items + end + if view_count >= 2 then + build_bars + syncronize_mode_selection_items + check attached selected_node as sn then + sn.syncronize_buttons + end + end + end + + syncronize_tools + -- Make sure any TOOLs handled by the manager are in the correct + -- state, either maximized or normal. + local + s: like leaf_nodes + do + s := leaf_nodes + from s.start + until s.exhausted + loop + if attached {TOOL} s.item.view as t then + if s.count <= 1 then + t.disable_resize + else + t.enable_resize + end + if is_single_mode then + if t.is_resizable then + t.maximize + end + else + if t.is_resizable then + t.restore + end + end + if is_split_mode then + t.close_button.enable_sensitive + t.maximize_button.enable_sensitive + t.restore_button.enable_sensitive + else + t.close_button.disable_sensitive + t.maximize_button.disable_sensitive +-- t.restore_button.disable_sensitive + end + end + s.forth + end + end + +-- syncronize_view_selection_items is +-- -- Make sure the state of the radio and toggle reflect the value +-- -- of `selected_view' and visible views. +-- local +-- n: like root +-- do +-- -- Fix the radio items +-- +-- i := views.index_of (selected_view, 1) +-- rb := radio_buttons.i_th (i) +-- ri := radio_items.i_th (i) +-- ri.select_actions.block +-- ri.enable_select +-- ri.select_actions.resume +-- rb.select_actions.block +-- rb.enable_select +-- rb.select_actions.resume +-- -- Fix the toggle items +-- from views.start +-- until views.exhausted +-- loop +-- i := views.index +-- wv := views.item +-- if not disabled_views.has (wv) then +-- tb := toggle_buttons.i_th (i) +-- ti := toggle_items.i_th (i) +-- ti.select_actions.block +-- tb.select_actions.block +-- if visible_views.has (wv) then +-- ti.enable_select +-- tb.enable_select +-- else +-- ti.disable_select +-- tb.disable_select +-- end +-- ti.select_actions.resume +-- tb.select_actions.resume +-- end +-- views.forth +-- end +-- ensure +-- selected_view_unchanged: selected_view = old selected_view +-- toggle_items_agree: toggles_agree_with_visible_items +-- radio_items_agree: radios_agree_with_selected_view +-- end + + syncronize_mode_selection_items + -- Set the button states + require + at_least_two_views: view_count >= 2 + do + single_mode_button.select_actions.block + split_mode_button.select_actions.block + notebook_mode_button.select_actions.block + single_mode_item.select_actions.block + split_mode_item.select_actions.block + notebook_mode_item.select_actions.block + if is_split_mode then + split_mode_button.enable_select + split_mode_item.enable_select + elseif is_notebook_mode then + notebook_mode_button.enable_select + notebook_mode_item.enable_select + elseif is_single_mode then + single_mode_button.enable_select + single_mode_item.enable_select + else + check + no_mode_should_not_happen: False + end + end + single_mode_button.select_actions.resume + split_mode_button.select_actions.resume + notebook_mode_button.select_actions.resume + single_mode_item.select_actions.resume + split_mode_item.select_actions.resume + notebook_mode_item.select_actions.resume + -- for testing only + if is_split_mode then + check +-- one: split_mode_button.is_selected +-- two: split_mode_item.is_selected +-- three: not notebook_mode_button.is_selected +-- four: not notebook_mode_item.is_selected +-- five: not single_mode_button.is_selected +-- six: not single_mode_item.is_selected + end + + end + ensure +-- split_mode_implication: is_split_mode implies +-- split_mode_button.is_selected and split_mode_item.is_selected and +-- not notebook_mode_button.is_selected and not notebook_mode_item.is_selected and +-- not single_mode_button.is_selected and not single_mode_item.is_selected +-- notebook_mode_implication: is_notebook_mode implies +-- notebook_mode_button.is_selected and notebook_mode_item.is_selected and +-- not single_mode_button.is_selected and not single_mode_item.is_selected and +-- not split_mode_button.is_selected and not split_mode_item.is_selected +-- single_mode_implication: is_single_mode implies +-- single_mode_button.is_selected and single_mode_item.is_selected and +-- not notebook_mode_button.is_selected and not notebook_mode_item.is_selected and +-- not split_mode_button.is_selected and not split_mode_item.is_selected + end + + block_leaf_actions + -- Removing and adding radio widgets to the `radio_bar' or `radio_menu' causes + -- problems if the select actions fire, therefore block all those actions. + -- The leaf nodes only should have any corresponding button for selections. + local + s: like leaf_nodes + do + s := leaf_nodes + from s.start + until s.exhausted + loop + s.item.block_radio_actions + s.forth + end + end + + resume_leaf_actions + -- Resume actions for leaf node widgets (see `block_leaf_actions') + local + s: like leaf_nodes + do + s := leaf_nodes + from s.start + until s.exhausted + loop + s.item.resume_radio_actions + s.forth + end + end + + build_bars + -- Put the correct buttons in the `bar' and the correct + -- menu items into `menu'. Make sure the button and menu + -- states agree with the state of Current. + require + at_least_two_views: view_count >= 2 + local + n: SPLIT_MANAGER_NODE + s: like leaf_nodes + do +-- toggle_bar.disable_sensitive +-- radio_bar.disable_sensitive +-- toggle_menu.disable_sensitive +-- radio_menu.disable_sensitive + -- Build the `radio_bar', `toggle_bar', `toggle_menu', and `radio_menu' + -- Calling `wipeout' on an EV_TOGGLE_BUTTON or EV_TOGGLE_ITEM caused one + -- of the other buttons or items in the group to be selected. This calls + -- the select actions on that widget, one of which is to select a view. + -- This will eventually lead to a call to `synchronize' and then back + -- to this feature. This is undesirable, so to prevent the callback, + -- we must block the select actions for each of the radio widgets. + block_leaf_actions + toggle_bar.wipe_out + radio_bar.wipe_out + toggle_menu.wipe_out + radio_menu.wipe_out + s := leaf_nodes + from s.start + until s.exhausted + loop + n := s.item + if not n.is_disabled then + toggle_bar.extend (n.toggle_button) + radio_bar.extend (n.radio_button) + toggle_menu.extend (n.toggle_item) +-- radio_menu.extend (n.radio_item) + end + s.forth + end + -- Un-block the actions on any selectable widgets in the bar or menu + from radio_bar.start + until radio_bar.exhausted + loop + check attached {EV_TOOL_BAR_RADIO_BUTTON} radio_bar.item as b then + b.select_actions.resume + end + radio_bar.forth + end + from radio_menu.start + until radio_menu.exhausted + loop + check attached {EV_RADIO_MENU_ITEM} radio_menu.item as ri then + ri.select_actions.resume + end + radio_menu.forth + end + -- Build the bar + bar.wipe_out + if leaf_nodes.count >= 2 then + if not is_mode_frozen then + bar.extend (mode_bar) + bar.disable_item_expand (mode_bar) + end + if not is_interface_frozen then + if is_single_mode or else is_notebook_mode then + bar.extend (radio_bar) + bar.disable_item_expand (radio_bar) + elseif is_split_mode then + bar.extend (toggle_bar) + bar.disable_item_expand (toggle_bar) + end + end + end + -- Build the menu + menu.wipe_out + if not is_mode_frozen then + menu.extend (mode_menu) + end + if not is_interface_frozen then + if is_single_mode or else is_notebook_mode then + menu.extend (radio_menu) + elseif is_split_mode then + menu.extend (toggle_menu) + end + end +-- if visible_count >= 2 then + if view_count >= 2 then + toggle_bar.enable_sensitive + mode_menu.enable_sensitive + radio_menu.enable_sensitive + toggle_menu.enable_sensitive + else + toggle_bar.disable_sensitive + mode_menu.disable_sensitive + radio_menu.disable_sensitive + toggle_menu.disable_sensitive + end + resume_leaf_actions + end + + build_cell + -- Put the appropriate EV_SPLIT_AREA or VIEW into `cell' based on user + -- button or menu selections. This must be done whenever the list + -- of visible_views changes or when a view is disabled. + local + s: like leaf_nodes + n: detachable like root + v: VIEW +-- b: EV_TOOL_BAR_RADIO_BUTTON + do + -- Must wipeout all the containers to prevent putting a view into + -- more than one container at a time. + -- This requires building the notebook here if `is_notebook_mode' + cell.wipe_out + if notebook /= Void then + notebook.selection_actions.block + notebook.wipe_out + end + wipeout_splits + if view_count >= 1 then + if is_single_mode or else view_count < 2 then + check attached {EV_WIDGET} selected_view as ev_w then + -- because all managed `views' should be EV_WIDGETS + cell.extend (ev_w) + end + elseif is_notebook_mode then + s := leaf_nodes + from s.start + until s.exhausted + loop + check + s.item.is_view + -- Because `views' should hold only nodes that contain a VIEW in `widget'. + end + n := s.item + if not n.is_disabled then + check attached {EV_WIDGET} n.view as ev_w then + -- because all managed `views' should be EV_WIDGETS + notebook.extend (ev_w) + notebook.set_item_text (ev_w, ev_w.generating_type) + end + end + s.forth + end + if n /= Void then + check attached {EV_WIDGET} n.view as ev_w then + -- because all managed `views' should be EV_WIDGETS + notebook.select_item (ev_w) + end + end + cell.extend (notebook) + notebook.selection_actions.resume + else + check + is_split_mode: is_split_mode + -- because only mode left + end + if attached root as r then + cell.extend (r.visible_widget) + end + restore_split_positions + end + end + end + + wipeout_splits + -- Clean out all the split areas. + local + s: like internal_nodes + do + s := internal_nodes + from s.start + until s.exhausted + loop + check + is_split: s.item.is_split + -- Because splits hold only nodes containing EV_SPLIT_AREA is `widget'. + end + s.item.split_area.wipe_out + s.forth + end + end + +feature {NONE} -- Implementation (Actions) + + on_mode_change + -- The "mode" has changed, so rebuild the `bar' and `menu' + -- and syncronize other items. + do + save_split_positions + syncronize + end + + on_tab_selected + -- React to a request from the `notebook' to select `a_view' + require + is_notebook_mode: is_notebook_mode + do + check attached {VIEW} notebook.selected_item as v then + select_view (v) + end + end + +feature {NONE} -- Implementation + + has_invalid_leaf_type: BOOLEAN + -- Used by invariant to make sure all leaf nodes contain VIEWs. + local + s: like leaf_nodes + n: like root + do + s := leaf_nodes + from s.start + until Result or else s.exhausted + loop + n := s.item + Result := not n.is_view + if not n.is_view then + Result := True + end + s.forth + end + end + + has_invalid_internal_type: BOOLEAN + -- Used by invariant to make sure all internal nodes contain EV_SPLIT_AREAs. + local + s: like internal_nodes + n: like root + do + s := internal_nodes + from s.start + until Result or else s.exhausted + loop + n := s.item + Result := not n.is_split + s.forth + end + end + +feature {NONE} -- Implementation (tool bars and buttons) + + notebook: EV_NOTEBOOK + -- Used internally to build `cell' when `notebook_mode_button' is selected. + + mode_bar: EV_TOOL_BAR + -- Holds the view mode buttons (`single_mode_button', + -- `normal_mode_button', and `notebook_mode_button'. + + toggle_bar: EV_TOOL_BAR + -- Holds buttons which toggle multiple views on and off. + + radio_bar: EV_TOOL_BAR + -- Holds buttons used to select one of several views. + + single_mode_button: EV_TOOL_BAR_RADIO_BUTTON + -- Used to put the views into a maximized state + + split_mode_button: EV_TOOL_BAR_RADIO_BUTTON + -- Puts the manager into normal view mode (all selected views are visible). + + notebook_mode_button: EV_TOOL_BAR_RADIO_BUTTON + -- Puts the manager into a mode in which the views are + -- placed withing an EV_NOTEBOOK. + +feature {NONE} -- Implementation (menus and items) + + mode_menu: EV_MENU + -- Holds menu items for changing the mode + + toggle_menu: EV_MENU + -- Holds menu items used when not `is_maximized' and not `is_builder_mode' + -- to toggle views on and off or to `maximize' the views. + + radio_menu: EV_MENU + -- Holds menu items used when `is_maximized' and not `is_builder_mode' + -- to select one of several views or to `restore' the views. + + single_mode_item: EV_RADIO_MENU_ITEM + -- Maximizes the `selected_view' + + split_mode_item: EV_RADIO_MENU_ITEM + -- Reverts to `is_split_mode' + + notebook_mode_item: EV_RADIO_MENU_ITEM + -- Changes to notebook mode + +invariant + + cell_exists: cell /= Void + not_has_invalid_leaf_type: not has_invalid_leaf_type + not_has_invalid_internal_type: not has_invalid_internal_type + +-- one_view_implies_root_exists: count >= 1 implies root /= Void +-- one_view_implies_selected_node_exists: count >= 1 implies selected_node /= Void +-- two_views_implies_exported_widgets_exist: count >= 2 implies (menu /= Void and bar /= Void) +-- two_views_implies_widgets_exist: count >= 2 implies +-- (notebook /= Void and mode_bar /= Void and toggle_bar /= Void and radio_bar /= Void and +-- single_mode_button /= Void and split_mode_button /= Void and notebook_mode_button /= Void and +-- mode_menu /= Void and toggle_menu /= Void and radio_menu /= Void and +-- single_mode_item /= Void and split_mode_item /= Void and notebook_mode_item /= Void) + +end + diff --git a/jj_vision/interface/tools/edit_tool.e b/jj_vision/interface/tools/edit_tool.e new file mode 100644 index 0000000..0de82c6 --- /dev/null +++ b/jj_vision/interface/tools/edit_tool.e @@ -0,0 +1,425 @@ +note + description: "[ + A {TOOL} used to hold views for editting an {EDITABLE} + ]" + date: "23 Feb 04" + author: "Jimmy J. Johnson" + copyright: "Copyright 2012, Jimmy J. Johnson" + license: "Eiffel Forum License v2 (see forum.txt)" + URL: "$URL: file:///F:/eiffel_repositories/jj_vision/trunk/interface/tools/edit_tool.e $" + date: "$Date: 2013-04-25 18:11:22 -0400 (Thu, 25 Apr 2013) $" + revision: "$Revision: 14 $" + +class + EDIT_TOOL + +inherit + + TOOL + redefine + create_interface_objects, + initialize, + add_actions, + target_imp, + set_target +-- history_dropdown, +-- new_history_item + end + +create + default_create + +feature {NONE} -- Initialization + + create_interface_objects + -- Create objects to be used by `Current' in `initialize' + -- Implemented by descendants to create attached objects + -- in order to adhere to void-safety due to the implementation bridge pattern. + do + Precursor {TOOL} + create list_editor_view + create dialog_editor_view + create field_editor_view + -- Create the new buttons before Precursor {TOOL} so `initialize' + -- can call `set_actions' without a Void reference. + create edit_schema_toggle_button + create schema_label + create new_field_button + create delete_field_button + create align_fields_button + edit_schema_toggle_button.set_pixmap (create {EV_PIXMAP}.make_with_pixel_buffer (Icon_shell_color_buffer)) + edit_schema_toggle_button.set_tooltip ("EDIT_TOOL.edit_schema_toggle_button") + new_field_button.set_pixmap (create {EV_PIXMAP}.make_with_pixel_buffer (Icon_shell_color_buffer)) + new_field_button.set_tooltip ("EDIT_TOOL.new_field_button") + delete_field_button.set_pixmap (create {EV_PIXMAP}.make_with_pixel_buffer (Icon_shell_color_buffer)) + delete_field_button.set_tooltip ("EDIT_TOOL.delete_field_button") + align_fields_button.set_pixmap (create {EV_PIXMAP}.make_with_pixel_buffer (Icon_shell_color_buffer)) + align_fields_button.set_tooltip ("EDIT_TOOL.align_fields_button") + -- Align_fields menu + create align_fields_menu + create align_on_edit_box_check_item + create align_fields_left_item + create align_fields_right_item + create align_fields_top_item + create align_fields_bottom_item + create align_fields_horizontal_center_item + create align_fields_vertical_center_item + -- New field menu + create new_field_menu + create new_string_field_item + create new_integer_field_item + create new_date_field_item + -- Use default schema at first + create schema + end + + initialize + -- Set up the window + -- Create the views in the window using agents. + local + vs: EV_VERTICAL_SEPARATOR + do + build_align_fields_menu + build_new_field_menu + -- Create the tool and its views + Precursor {TOOL} + -- Add `schema_label' to the `title_bar'. + check + title_bar_has_target_label: title_bar.has (target_label) + -- because Precursor {TOOL} should have put it there. + end + title_bar.start + title_bar.search (tool_name_label) + create vs + title_bar.put_right (schema_label) + title_bar.disable_item_expand (schema_label) + title_bar.put_right (vs) + title_bar.disable_item_expand (vs) + -- Add the buttons to the `tool_bar' (from TOOL) + tool_bar.extend (edit_schema_toggle_button) + -- Create the views + split_manager.set_horizontal + split_manager.extend_siblings (field_editor_view, dialog_editor_view) + split_manager.set_vertical + split_manager.extend_siblings (split_manager.last_view, list_editor_view) + -- Set up the views in this tool. + split_manager.enable_mode_changes + split_manager.set_split_mode + split_manager.disable_view (field_editor_view) + end + +-- initialize_interface +-- -- Add interface items for this class to the `interface_table'. +-- do +-- Precursor {TOOL} +-- interface_table.add_item_with_tuple (<<"{EDIT_TOOL}", "EDIT_TOOL", "This is an EDIT_TOOL.", "This tool is used to create schemas.", "icon_tool_color.ico">>) +-- interface_table.add_item_with_tuple (<<"{EDIT_TOOL}.edit_schema_toggle_button", "Toggles schema build mode", "Click this button to tobble between schema building and normal view", "This tool is used to create schemas.", "icon_tool_color.ico">>) +-- interface_table.add_item_with_tuple (<<"{EDIT_TOOL}.new_field_button", "Create a new field", "Open a drop-down menu for adding fields.", "This button opens a drop-down menu for creating new fields.", "icon_exe_up_to_date.ico">>) +-- interface_table.add_item_with_tuple (<<"{EDIT_TOOL}.delete_field_button", "Delete field", "Delete the selected fields", "This button deletes the selected fields from the schema.", "icon_exec_quit_color.ico">>) +-- interface_table.add_item_with_tuple (<<"{EDIT_TOOL}.align_fields_button", "Align fields", "Align the selected fields.", "This button pulls down a menu for aligning fields in various methods.", "icon_format_clickable_color.ico">>) + +-- interface_table.add_item_with_tuple (<<"{EDIT_TOOL} - new_string_field", "Create a STRING field", "Create a STRING field", "Creates a new field of type STRING.", "icon_display_labels_color.ico">>) +-- interface_table.add_item_with_tuple (<<"{EDIT_TOOL} - new_integer_field", "Create an INTEGER field", "Create an INTEGER field", "Creates a new field of type INTEGER.", "icon_once_symbol.ico">>) +-- interface_table.add_item_with_tuple (<<"{EDIT_TOOL} - new_date_field", "Create a DATE field", "Create a DATE field", "Creates a new field of type DATE.", "icon_new_editor_color.ico">>) +-- end + + build_align_fields_menu + -- Build the `align_fields_menu'. + do + -- put items into the menu + align_fields_menu.extend (align_on_edit_box_check_item) + align_fields_menu.extend (align_fields_left_item) + align_fields_menu.extend (align_fields_right_item) + align_fields_menu.extend (align_fields_top_item) + align_fields_menu.extend (align_fields_bottom_item) + align_fields_menu.extend (align_fields_horizontal_center_item) + align_fields_menu.extend (align_fields_vertical_center_item) + end + + build_new_field_menu + -- Build the `new_field_menu' + do + -- Put the items into the menu + new_field_menu.extend (new_string_field_item) + new_field_menu.extend (new_integer_field_item) + new_field_menu.extend (new_date_field_item) + end + + add_actions + -- Add actions to the widgets + do + Precursor {TOOL} + -- Set actions for buttons and menus + edit_schema_toggle_button.select_actions.extend (agent on_edit_schema_toggle_button_pressed) + new_field_button.select_actions.extend (agent on_new_field_button_pressed) + new_string_field_item.select_actions.extend (agent on_create_new_string_field) + new_date_field_item.select_actions.extend (agent on_create_new_date_field) + new_integer_field_item.select_actions.extend (agent on_create_new_integer_field) + delete_field_button.select_actions.extend (agent on_delete_field) + -- Set actions for views + dialog_editor_view.control_select_actions.extend (agent on_control_selected) + -- Reminder: Though the `target_label' is part of TOOL, the ability to + -- change the "field" displayed in the label is only changable from + -- a system using this [EDIT_TOOL] class. + tool_name_label.drop_actions.extend (agent on_set_target_label_field) + end + +feature -- Access + + selected_control: detachable CONTROL + -- The control last selected by the user in "schema-edit" mode. + + list_editor_view: LIST_EDITOR_VIEW + -- View in list format for editting the schema. + + dialog_editor_view: DIALOG_EDITOR_VIEW + -- View for editting a record. + + field_editor_view: FIELD_EDITOR_VIEW + -- View for editting specific fields from the record's schema. + +feature -- Element change + + set_target (a_target: like target) + -- Change `target' and pass it on to the views. + do + -- Must handle a FIELD differently. + if attached {FIELD} a_target as f then + if is_edit_schema_mode then + field_editor_view.set_record (f) + end + else + Precursor {TOOL} (a_target) + list_editor_view.set_record (a_target) + dialog_editor_view.set_record (a_target) + dialog_editor_view.set_schema (get_schema) + draw + end + end + +feature -- Status report + + is_edit_schema_mode: BOOLEAN + -- Is the tool in a mode to allow changes to the schema? + +feature {NONE} -- Implementation (actions) + + on_edit_schema_toggle_button_pressed + -- React to a press of the edit_schema_toggle_button' by + -- toggling between "schema-edit" mode and "normal" mode. + do + if edit_schema_toggle_button.is_selected then + -- Add the `field_editor_view'. + split_manager.enable_view (field_editor_view) + split_manager.set_split_mode + split_manager.disable_mode_changes + dialog_editor_view.control_select_actions.resume + -- Add the buttons + tool_bar.extend (new_field_button) + tool_bar.extend (delete_field_button) + tool_bar.extend (align_fields_button) + is_edit_schema_mode := True + else + -- Remove the `field_editor_view'. + split_manager.enable_mode_changes + split_manager.disable_view (field_editor_view) + dialog_editor_view.control_select_actions.block + -- Remove the buttons + tool_bar.start + tool_bar.prune (new_field_button) + tool_bar.start + tool_bar.prune (delete_field_button) + tool_bar.start + tool_bar.prune (align_fields_button) + is_edit_schema_mode := False + end + end + + on_control_selected (a_control: CONTROL) + -- A control has been selected in "schema-edit" mode. + -- Added as agent to `dialog_editor_view.control_selected_actions' in + -- feature `on_edit_schema_toggle_button_pressed'. + require + control_exists: a_control /= Void + do + selected_control := a_control + field_editor_view.set_record (a_control.field) + field_editor_view.set_schema (a_control.field.schema) + syncronize_buttons + ensure + control_was_selected: selected_control = a_control + field_was_set: field_editor_view.record = a_control.field + end + + on_new_field_button_pressed + -- React to a press of the `new_field_button'. + do + new_field_menu.show + end + + on_create_new_string_field + -- React to a menu item or button used to create a new string field. + local + f: STRING_FIELD + c: CHANGE_FIELDS_COMMAND + do + create f + create c.make (schema, f) + command_manager.add_command (c) + end + + on_create_new_date_field + -- React to a menu item or button used to create a new date field. + local + f: YMD_TIME_FIELD + c: CHANGE_FIELDS_COMMAND + do + create f + create c.make (schema, f) + command_manager.add_command (c) + end + + on_create_new_integer_field + -- React to a menu item or button used to create a new integer field. + local + f: INTEGER_FIELD + c: CHANGE_FIELDS_COMMAND + do + create f + create c.make (schema, f) + command_manager.add_command (c) + end + + on_delete_field + -- Remove the selected field from the schema. + require + is_deletable: not target.schema.has_mandatory (field_editor_view.record) + local + f: FIELD + c: CHANGE_FIELDS_COMMAND + do + if not field_editor_view.is_view_empty then + f := field_editor_view.record + create c.make (schema, f) + c.set_delete_action + command_manager.add_command (c) + end + end + + on_set_target_label_field (a_field: STRING_FIELD) + -- Change the "global" field to be used to determine what part of + -- an EDITABLE (based on `a_field') to display in the drop-downs + -- and lists, etc. (See `set_target_label_field' from EDITABLE.) + require + field_exists: a_field /= Void + local + e: EDITABLE + do + -- Because `target_label_field' is a once feature just need to + -- make sure it is called; to do that I need an EDITABLE. + create e + e.set_target_label_field (a_field) + end + + +feature {FIELD_EDITOR_VIEW} -- Implementation + + get_schema: SCHEMA + -- Obtain a schema from the `record' + require + target_exists: target /= Void + do + if target.schema /= schema then + Result := target.schema + schema := Result + else + Result := schema + end + ensure + result_exists: result /= Void + end + +feature {NONE} -- Implementation + + target_imp: detachable EDITABLE + -- Detachable implementation of `target' for void-safety + + schema: SCHEMA + -- The last schema used and passed to the views. + + syncronize_buttons + -- Make sure the buttons are in the correct state. + local + f: FIELD + do + f := field_editor_view.record + if schema.has_mandatory (f) then + delete_field_button.disable_sensitive + else + delete_field_button.enable_sensitive + end + end + +feature {NONE} -- Implementation (buttons) + + edit_schema_toggle_button: EV_TOGGLE_BUTTON --EV_TOOL_BAR_TOGGLE_BUTTON + -- Toggles between normal mode and a mode allowing + -- editting of the `schema' from `record'. + + schema_label: EV_LABEL + -- Shows the `id' or name of the schema currently in use. + + align_fields_button: EV_BUTTON --EV_TOOL_BAR_BUTTON + -- Aligns a group of fields + + delete_field_button: EV_BUTTON --EV_TOOL_BAR_BUTTON + -- Deletes the selected field(s) from the `schema' of `record' + + new_field_button: EV_BUTTON --EV_TOOL_BAR_BUTTON + -- Pulls down a menu for creating a new field + + new_field_menu: EV_MENU + -- Pull down menu for selecting the type of field + -- activated by the `new_field_button'. + + new_string_field_item: EV_MENU_ITEM + -- Used to create a new STRING_FIELD + + new_integer_field_item: EV_MENU_ITEM + -- Used to create a new INTEGER_FIELD + + new_date_field_item: EV_MENU_ITEM + -- Used to create a new YMD_TIME_FIELD + + align_fields_menu: EV_MENU + -- Pull down menu for selecting the field alignment method, + -- activated by the `align_field_button'. + + align_on_edit_box_check_item: EV_CHECK_MENU_ITEM + -- Select to make allignments key off the edit boxes of the + -- selected controls as opposed to the labels. + + align_fields_left_item: EV_MENU_ITEM + -- Align the left sides of the selected controls + + align_fields_right_item: EV_MENU_ITEM + -- Align the right sides of the selected controls + + align_fields_top_item: EV_MENU_ITEM + -- Align the tops of the selected controls + + align_fields_bottom_item: EV_MENU_ITEM + -- Align the bottoms of the selected controls + + align_fields_horizontal_center_item: EV_MENU_ITEM + -- Align the horizontal centers of the selected controls + + align_fields_vertical_center_item: EV_MENU_ITEM + -- Align the vertical centers of the selected controls + +invariant + + has_schema_if_has_record: target_imp /= Void implies schema /= Void + has_correct_schema: target_imp /= Void implies target.has_schema (schema) + +end diff --git a/jj_vision/interface/tools/text_tool.e b/jj_vision/interface/tools/text_tool.e new file mode 100644 index 0000000..40da565 --- /dev/null +++ b/jj_vision/interface/tools/text_tool.e @@ -0,0 +1,80 @@ +note + description: "[ + A {TOOL} that holds a {TEXT_VIEW} in which to edit a long string + ]" + date: "4 Jan 08" + author: "Jimmy J. Johnson" + copyright: "Copyright 2012, Jimmy J. Johnson" + license: "Eiffel Forum License v2 (see forum.txt)" + URL: "$URL: file:///F:/eiffel_repositories/jj_vision/trunk/interface/tools/text_tool.e $" + date: "$Date: 2013-06-16 13:26:06 -0700 (Sun, 16 Jun 2013) $" + revision: "$Revision: 15 $" + +class + TEXT_TOOL + +inherit + + TOOL + redefine + create_interface_objects, + initialize, + build_tool_bars, + add_actions +-- view + end + +create + default_create + +feature {NONE} -- Initialization + + create_interface_objects + -- Create objects to be used by `Current' in `initialize' + -- Implemented by descendants to create attached objects + -- in order to adhere to void-safety due to the implementation bridge pattern. + do + Precursor {TOOL} + create clear_button + create view + clear_button.set_pixmap (create {EV_PIXMAP}.make_with_pixel_buffer (Icon_shell_color_buffer)) + clear_button.set_tooltip ("{EDIT_TOOL}.clear_button") + end + + initialize + -- Build the interface for this window + do + Precursor {TOOL} + split_manager.extend (view) + end + + build_tool_bars + -- Create the two toolbars. + do + Precursor {TOOL} + tool_bar.extend (clear_button) +-- tool_bar.extend (create {EV_TOOL_BAR_SEPARATOR}) + end + + add_actions + -- Adds agents to the buttons and menues. + do + Precursor {TOOL} + clear_button.pointer_button_press_actions.force_extend (agent clear) + end + +feature {NONE} -- Implementation + + clear + -- delete all text + do + view.remove_text + end + + clear_button: EV_BUTTON --EV_TOOL_BAR_BUTTON + -- Button to move to previous record + + view: TEXT_VIEW + -- Text area for displaying ships info, etc. + +end diff --git a/jj_vision/interface/tools/tool.e b/jj_vision/interface/tools/tool.e new file mode 100644 index 0000000..82df15a --- /dev/null +++ b/jj_vision/interface/tools/tool.e @@ -0,0 +1,750 @@ +note + description: "[ + Base class for all the tool windows. Has history list for + stepping forward and backward through the `viewable_items' + which have been displayed in the tool. + + The {TOOL} is a EV_FRAME containing an EV_VERTICAL_BOX called + `main_container'. Into `main_container' is placed an EV_HORIZONTAL_BOX + serving as a toolbar called `title_bar'. (An EV_HORIZONTAL_BOX was + used instead of a EV_TOOL_BAR in order to add widgets other than + EV_TOOLBAR_BUTTONS to the toolbar, giving the desired look.) The + `title_bar' is built by adding text, buttons, spaces, other bars, etc + to it. Below the `title_bar' is added the `cell' from `split_manager' + which contains any {VIEW}s in the tool. + + TNL = `tool_name_label' -- contains the `name' of the tool + HTB = `history_tool_bar` -- contains the forth and back buttons + TL = `target_label' -- shows the name of the object in the tool + TB = `tool_bar' -- clients add buttons here + UT = `user_text' -- an EV_LABEL allowed to expand (see `set_user_text') + RTB = `resize_tool_bar' -- contains the minimize/miximize and close buttons + FB = `forth_button' -- To go back in the history + BB = `back_button' -- to go forward in the history + xB = `maximize_button' or `restore_button' + X = `close_button' + `bar' = split_manager.bar -- any buttons produced by `split_manager' are here + + |------------------------------ title bar -----------------------------------| + | | TNL | |--- HTB ---| | TL | |-- TB --| | `bar' | | UT | |--- RTB ---| + | | |BB| |FB| | | ... | | ... | | |xB| |X| | + |----------------------------------------------------------------------------| + | | + | | + | split_manager.cell | + | | + | | + |----------------------------------------------------------------------------| + + The `bar' and `cell', both from `split_manager', will be empty because no + {VIEW}s have been added to the `split_manager'. Descendants should follow this + pattern as described in class {SPLIT_MANAGER}, redefining `initialize'. + + feature initialize is + -- Set up the window. + -- Redefine to add the views to the window. + do + Precursor {TOOL} + split_manager.extend (view_one) + split_manager.extend (view_two) + end + + Feature `initialize' above assumes two features, `view_one' and `view_two', + to be defined to return a descendant of {VIEW} and some effected EV_WIDGET. + ]" + date: "30 Sep 03" + author: "Jimmy J. Johnson" + copyright: "Copyright 2012, Jimmy J. Johnson" + license: "Eiffel Forum License v2 (see forum.txt)" + URL: "$URL: file:///F:/eiffel_repositories/jj_vision/trunk/interface/tools/tool.e $" + date: "$Date: 2015-10-24 07:32:40 -0700 (Sat, 24 Oct 2015) $" + revision: "$Revision: 23 $" + +class + TOOL + +inherit + + VIEW + undefine +-- default_create, + copy + redefine + create_interface_objects, + initialize, + add_actions, + set_target, + draw, + state + end + + EV_FRAME + rename + object_id as ise_object_id + undefine + is_in_default_state + redefine + create_interface_objects, + initialize + end + + PIXEL_BUFFERS + undefine + default_create, + copy + end + +create + make + +feature {NONE} -- Initialization + + create_interface_objects + -- Create objects to be used by `Current' in `initialize' + -- Implemented by descendants to create attached objects + -- in order to adhere to void-safety due to the implementation bridge pattern. + do + Precursor {VIEW} + Precursor {EV_FRAME} +-- create history + create history_dropdown + create main_container + -- Create the action sequences + create maximize_actions + create close_actions + create restore_actions + -- Create the buttons + create title_bar + create tool_bar + create history_tool_bar +-- create user_text + create resize_tool_bar + create tool_name_label + create target_label +-- create history_combo -- see "fix me" comment before `update_history_combo' feature + create split_manager + -- Create buttons + create back_button + create forth_button + create maximize_button + create restore_button + create close_button + size_button := maximize_button + -- Set button attributes + back_button.set_pixmap (create {EV_PIXMAP}.make_with_pixel_buffer (Icon_back_color_buffer)) + back_button.set_tooltip ("Back") + forth_button.set_pixmap (create {EV_PIXMAP}.make_with_pixel_buffer (Icon_forth_color_buffer)) + forth_button.set_tooltip ("Forth") + maximize_button.set_pixmap (create {EV_PIXMAP}.make_with_pixel_buffer (Icon_maximize_color_buffer)) + maximize_button.set_tooltip ("Maximize") + restore_button.set_pixmap (create {EV_PIXMAP}.make_with_pixel_buffer (Icon_restore_color_buffer)) + restore_button.set_tooltip ("Restore") + close_button.set_pixmap (create {EV_PIXMAP}.make_with_pixel_buffer (Icon_close_color_buffer)) + close_button.set_tooltip ("Close") + end + + initialize + -- Build the interface for this window + -- Must create `view' before calling this. + local + hs: EV_HORIZONTAL_SEPARATOR + do + Precursor {EV_FRAME} + Precursor {VIEW} +-- tools.extend (Current) + -- Prevent the tool from holding more than one target, so + -- the history functions will work. + history_dropdown.set_parent_tool (Current) + target_label.set_minimum_width (Target_label_width) +-- view_manager.set_single_mode +-- split_manager.disable_mode_changes + -- Create the toolbar + build_tool_bars + build_title_bar + -- To get the tool bar look I used small 16x16 pixel icons. + -- The `title_bar' is an EV_HORIZONTAL_BOX which contains several + -- widets. These are a EV_LABLE, an EV_TOOL_BAR, another label + -- (which is allowed to expand), and finally another EV_TOOL_BAR + -- containing the `minimize_button' or the `restore_button' (depending + -- on `is_maximized') and the `close_button'. + main_container.extend (title_bar) + main_container.disable_item_expand (title_bar) + create hs + main_container.extend (hs) + main_container.disable_item_expand (hs) + main_container.extend (split_manager.cell) + extend (main_container) + set_minimum_height (100) +-- set_view (Default_view) +-- set_button_states + -- No, do not call `add_actions'; it is already called + -- from {VIEW}.`initialize' throught {SPLIT_VIEW} +-- add_actions + end + + build_title_bar + -- Create the small title bar at top of tool + local + lab: EV_LABEL + do + -- Add the name of tool to the title bar + tool_name_label.set_text (generating_type.name) + title_bar.extend (tool_name_label) + title_bar.disable_item_expand (tool_name_label) + -- Add the forth and back buttons (in `history_tool_bar') + title_bar.extend (history_tool_bar) + title_bar.disable_item_expand (history_tool_bar) + -- Add a title to the tool +-- title_bar.extend (target_label) +-- title_bar.disable_item_expand (target_label) + -- Add a history list combo box +-- history_combo.disable_edit +-- title_bar.extend (history_combo) -- see "fix me" comment before `update_history_combo' feature + -- If use EV_COMBO_BOX the title bar must be bigger to + -- allow for `minimum_height' of the box. + -- Add the tool bar (to be used in descendants + title_bar.extend (tool_bar) + title_bar.disable_item_expand (tool_bar) + -- Put in a spacer to move the mode buttons to right + create lab.make_with_text (" ") + title_bar.extend (lab) + title_bar.disable_item_expand (lab) + -- Add the `bar' from `view_manager' here + title_bar.extend (split_manager.bar) +-- title_bar.disable_item_expand (split_manager.bar) + -- Add the maximize/minimize and hide buttons (in `resize_tool_bar') + title_bar.extend (resize_tool_bar) + title_bar.disable_item_expand (resize_tool_bar) + end + + build_tool_bars + -- Create the tool bar. + local + vs: EV_VERTICAL_SEPARATOR + do + history_tool_bar.extend (back_button) + history_tool_bar.extend (forth_button) + history_tool_bar.extend (target_label) +-- create vs +-- history_tool_bar.extend (vs) +-- history_tool_bar.disable_item_expand (vs) + resize_tool_bar.extend (size_button) + resize_tool_bar.extend (close_button) + end + + add_actions + -- Add functionality to the buttons. + do + Precursor {VIEW} + target_label.set_pebble_function (agent on_get_target) + -- Add actions to the buttons. + maximize_button.select_actions.extend (agent on_maximize) + restore_button.select_actions.extend (agent on_restore) + close_button.select_actions.extend (agent on_close) + back_button.select_actions.extend (agent on_back) + forth_button.select_actions.extend (agent on_forth) + -- Add actions to `history' + history_dropdown.select_actions.extend (agent on_history_item_selected) + target_label.pointer_button_press_actions.extend (agent on_target_label_selected) +-- target_label.drop_actions.extend (agent on_field_dropped_on_target_label) + -- see "fix me" comment before `update_history_combo' feature +-- history_combo.select_actions.extend (agent on_history_selected) + -- Add actions to update any views contained in this tool +-- No. Don't do this as the tool may contain views which only want to handle a part of the viewable. +-- Passing the wrong kind breaks the contract. Make each descendent descide what to pass to its children views. +-- viewable_added_action_sequence.extend (agent on_viewable_added) + end + +feature -- Access + + tool_bar: EV_HORIZONTAL_BOX --EV_TOOL_BAR + -- Available for adding new buttons in descendants. + + state: TOOL_STATE + -- Snapshot of the current settings of Current + do + create Result.make (Current) + end + +feature -- Element change + + set_target (a_target: like target) + -- Change the value of `target' and add it to the `object_set' (the set + -- of objects contained in this view. The old target is removed from + -- the set. + do + Precursor {VIEW} (a_target) + update_history +-- if target_imp /= a_target then +-- Precursor {VIEW} (a_target) +---- add_object (a_target.target_label_field) +---- tool_label.set_accept_cursor (a_viewable.accept_cursor) +---- tool_label.set_deny_cursor (a_viewable.deny_cursor) +-- update_history +-- draw +-- end + end + +-- set_user_text (a_string: STRING) +-- -- Change the `user_text' +-- do +-- user_text.set_text (a_string) +-- end + +feature {SPLIT_MANAGER, HISTORY_DROPDOWN} -- Access + + tool_name_label: EV_LABEL + -- String in top left of toolbar to display the name of the tool. + + target_label: EV_LABEL + -- String in the bar to display the name of the `target'. + + maximize_actions: EV_NOTIFY_ACTION_SEQUENCE + -- Actions to be performed when the tool is maximized. + + close_actions: EV_NOTIFY_ACTION_SEQUENCE + -- Actions to be performed when the tool is closed. + + restore_actions: EV_NOTIFY_ACTION_SEQUENCE + -- Actions to be performed when the tool is restored. + +feature -- Element change + +-- set_user_text (a_text: STRING_8) +-- -- Change the `user_text' that is displayed in the title bar. +-- do +-- user_text.set_text (a_text) +-- end + +feature -- Status report + + is_maximized: BOOLEAN + -- Is the tool in a maximized state? + + is_resizable: BOOLEAN + -- Is the tool resizable? (E.g. is the `resize_tool_bar' visible?) + do + Result := resize_tool_bar.is_displayed + end + +-- is_destroyed: BOOLEAN +-- -- Is `Current' no longer usable? +-- do +-- Result := not tools.has (Current) and Precursor {EV_FRAME} +-- end + +feature -- Status setting + + enable_resize + -- Allow the `resize_tool_bar' to show. + do + resize_tool_bar.show + end + + disable_resize + -- Hide the `resize_tool_bar'. + do + resize_tool_bar.hide + end + + enable_history + -- Make the `history_tool_bar' visible + do + history_tool_bar.show +-- target_label.show + end + + disable_history + -- Make the `history_tool_bar' NOT visible + do + history_tool_bar.hide +-- target_label.hide + end + +feature -- Basic operations + + draw + -- Builds the string shown at top of the tool in `viewable_label' + -- using the id of the object. + local + n: STRING + s: STRING + f: EV_FONT + i: INTEGER + w: INTEGER -- for testing + do + if is_view_empty then + n := "Empty" + else + if attached {EDITABLE} target as e then + n := e.display_name + else + n := target.generating_type + end + end + f := target_label.font + create s.make (0) + from i := 1 + until i > n.count or else f.string_width (s) >= Target_label_width + loop + w := f.string_width (s) + s.append_character (n.item (i)) + i := i + 1 + end + if f.string_width (s) > Target_label_width then + s.remove_tail (1) + end + target_label.set_text (s) + target_label.set_tooltip (n) + set_button_states + end + +feature {NONE} -- Actions + +-- on_field_dropped_on_target_label (a_field: STRING_FIELD) is +-- -- React to a drop of `a_field' onto the `target_label'. +-- require +-- field_exists: a_field /= Void +-- do +-- target.set_target_label_field (a_field) +-- draw_views (target.target_label_field) +-- end + + on_target_label_selected (a_x, a_y, a_button: INTEGER; + a_x_tilt, a_y_tilt, a_pressure: DOUBLE; + a_screen_x, a_screen_y: INTEGER) + -- + do + if a_button = 1 then + history_dropdown.show + end + end + + on_history_item_selected + -- React to an item selection from the `history_dropdown'. + do + set_target (selected_history_item_target) + end + + on_get_target: like target + -- Used as agent for `target_label.get_pebble_function' because + -- an attribute cannot be used as an agent + do + Result := target + end + + -- see "fix me" comment before `update_history_combo' feature +-- on_history_selected is +-- -- Handle an item select in the history combo box +-- require +-- history_exists: history /= Void +-- local +-- cli: CLUSTER_LIST_ITEM +-- do +-- cli ?= history_combo.selected_item +-- check +-- cli_not_void: cli /= Void -- because only CLUSTER_LIST_ITEMS should be in list +-- end +-- set_cluster (cli.cluster) +-- end + + on_back + -- Handle a go back request (from button or menu). + require + history_exists: history_dropdown /= Void + history_can_go_back: not history_dropdown.is_off and then not history_dropdown.is_before + local + v: HISTORY_ITEM + do + history_dropdown.back + v := history_dropdown.item + check attached {like target} v.target as t then + set_target (t) + end + set_button_states + end + + on_forth + -- Handle a go forth request (from button or menu). + require + history_exists: history_dropdown /= Void + history_can_go_forth: not history_dropdown.is_off and then not history_dropdown.is_after + local + v: HISTORY_ITEM + do + history_dropdown.forth + v := history_dropdown.item + check attached {like target} v.target as t then + set_target (t) + end + set_button_states + end + + on_maximize + -- React to a request (button or menu) to "maximize" by performing + -- the actions in `maximize_actions'. + require + resizing_allowed: is_resizable + do + maximize_actions.call ([]) + end + + on_restore + -- React to a request (button or menu) to "maximize" by performing + -- the actions in `maximize_actions'. + require + resizing_allowed: is_resizable + do + restore_actions.call ([]) + end + + on_close + -- React to a close request by executing the `close_actions'. + require + resizing_allowed: is_resizable + do + close_actions.call ([]) + end + +feature {SPLIT_MANAGER, TOOL_STATE} -- Actions + + maximize + -- Put window in maximized state + require + resizing_allowed: is_resizable + do + is_maximized := True + if not (size_button = restore_button) then + resize_tool_bar.go_i_th (resize_tool_bar.index_of (size_button, 1)) + resize_tool_bar.replace (restore_button) + size_button := restore_button + end + close_button.disable_sensitive + end + + restore + -- Put window back in default state + require +-- resizing_allowed: is_resizable + do + is_maximized := False + if not (size_button = maximize_button) then + resize_tool_bar.go_i_th (resize_tool_bar.index_of (size_button, 1)) + resize_tool_bar.replace (maximize_button) + size_button := maximize_button + end + close_button.enable_sensitive + end + + close_button: EV_TOOL_BAR_BUTTON + -- Button containing an "X" icon + + maximize_button: EV_TOOL_BAR_BUTTON + -- Button which parent can access intended + -- to be used to maximize the tool. + + restore_button: EV_TOOL_BAR_BUTTON + -- Button which parent can access intended + -- to be used to normalize (restore) the tool. + +feature {NONE} -- Implementation + + update_history + -- Update the history list. + require + target_exists: target /= Void + local + found: BOOLEAN + v: HISTORY_ITEM + oldest_v: HISTORY_ITEM + do +-- if not history.has (viewable) then -- not needed if history is a SET + -- does history have viewable? Must do a search because list items + from history_dropdown.start + until found or else history_dropdown.is_exhausted + loop + v := history_dropdown.item + if v.is_simular (new_history_item) then + found := True + else + history_dropdown.forth + end + end + if found then + -- leave list as is but change time stamp of found item + v := history_dropdown.item + v.reset_time_stamp + else + -- not found so must add a new one + v := new_history_item + history_dropdown.extend (v) + if history_dropdown.count > maximum_history_items then + -- find oldest item in list and remove it + oldest_v := history_dropdown.first + from history_dropdown.start + until history_dropdown.is_exhausted + loop + v := history_dropdown.item + if v.time_stamp < oldest_v.time_stamp then + oldest_v := history_dropdown.item + end + history_dropdown.forth + end + history_dropdown.start + history_dropdown.prune (oldest_v) + end + history_dropdown.start + history_dropdown.search (v) + -- Display a string describing the target + target_label.set_text (v.target.generating_type.name + " " + v.time_stamp.as_string) + check + not_off: not history_dropdown.is_off -- because just inserted it + end + end +-- update_history_combo -- see "fix me" comment before `update_history_combo' feature +-- set_button_states +-- end + ensure + proper_histroy_count: history_dropdown.count <= maximum_history_items + end + +-- Fix me!!! + -- `update_history_combo' is a problem. + -- Line "history_combo.wipe_out" causes a system crash, perhaps the screen + -- objects are not getting destroyed? Tried destroying each item in combo + -- but that did not help. + -- Also, can't seem to set the text; get an infinate loop? + -- Besides, the combo box is too tall; it make the TOOL's toolbar and buttons + -- too big, so commenting it out. +-- update_history_combo is +-- -- Put the history items into the `history_combo' box +-- local +-- cli: CLUSTER_LIST_ITEM +-- pos: CURSOR +-- c: CLUSTER +-- do +-- history_combo.wipe_out +-- pos := history.cursor +-- c := history.item.cluster +-- from history.start +-- until history.exhausted +-- loop +-- if history.item.cluster /= c then +-- create cli.make (history.item.cluster) +-- history_combo.extend (cli) +-- end +-- history.forth +-- end +-- history.go_to (pos) +-- history_combo.enable_edit -- so set_text will work +-- history_combo.set_text (history.item.cluster.id) +-- history_combo.disable_edit +-- end + + set_button_states + -- Set the states of the back and forth buttons. + do + if history_dropdown.is_empty or history_dropdown.is_first or history_dropdown.is_before then + back_button.disable_sensitive + else + back_button.enable_sensitive + end + if history_dropdown.is_empty or history_dropdown.is_last or history_dropdown.is_after then + forth_button.disable_sensitive + else + forth_button.enable_sensitive + end + if history_dropdown.is_empty then + target_label.disable_sensitive + else + target_label.enable_sensitive + end + end + + main_container: EV_VERTICAL_BOX + -- Holds the other widgets in the TOOL. + + title_bar: EV_HORIZONTAL_BOX + -- Holds the name of tool, `history_tool_bar', and `resize_tool_bar'. + + history_tool_bar: EV_HORIZONTAL_BOX --EV_TOOL_BAR + -- The toolbar with the forth, back and posibly history buttons. + +-- user_text: EV_LABEL +-- -- Text settable by `set_user_text' + + resize_tool_bar: EV_TOOL_BAR + -- Tool bar to hold resize and close buttons + +feature {NONE} -- Implementation + + forth_button: EV_BUTTON --EV_TOOL_BAR_BUTTON + -- Button containing go back icon + + back_button: EV_BUTTON --EV_TOOL_BAR_BUTTON + -- Button containing go forth icon + + size_button: EV_TOOL_BAR_BUTTON + -- Button containing maximize or restore icon + +-- history_combo: EV_COMBO_BOX -- see "fix me" comment before `update_history_combo' feature + -- To pull down a history list + + maximum_history_items: INTEGER = 5 + -- Number of items to keep in history list + +feature {HISTORY_DROPDOWN} -- Implementation + + history_dropdown: HISTORY_DROPDOWN + -- A dropdown-like box containing the clusters previously targetted + -- in this tool from which selections can be made to retarget the tool. + + new_history_item: HISTORY_ITEM + -- Helper routine called by `update_history' when it needs to + -- create a new time-stamped viewable for placement in the `history'. + -- Made a seperate routine because descendents may want to store + -- other types of items in the history list. + do + create Result.make (target) + end + + selected_history_item_target: like target + -- The item from the `history_dropdown' typecast to `target' + do + check attached {HISTORY_ITEM} history_dropdown.selected_item as hi then + check attached {like target} hi.target as t then + Result := t + end + end + ensure + Result_exists: Result /= Void + end + +feature {NONE} -- Implementation + + split_manager: SPLIT_MANAGER + -- Controls placement of sub-windows + + +--feature {TOOL} -- Implementation + +-- tools: LINKED_SET [TOOL] +-- -- Keeps track of all the TOOLs in the system +-- once +-- create Result.make +-- end + +feature {NONE} -- Constants + + Target_label_width: INTEGER = 100 + -- Sets the size of the `target_label' in pixels. + +invariant + + close_button_exists: close_button /= Void + restore_button_exists: restore_button /= Void + maximize_button_exists: maximize_button /= Void + +-- label_clickable_when: history.is_empty implies not object_label.is_sensitive + +end diff --git a/jj_vision/interface/views/color_fader.e b/jj_vision/interface/views/color_fader.e new file mode 100644 index 0000000..5651644 --- /dev/null +++ b/jj_vision/interface/views/color_fader.e @@ -0,0 +1,203 @@ +note + description: "[ + Helper class for manipulating an {EV_COLOR}. Specifically, it + gives a range of colors starting from `color' and fading toward + a darker or lighter color. + Black is at the "dark" end of the scale and a dark_grey (first + passing through a lighter color) is at the other end. + ]" + author: "Jimmy J. Johnson" + revision: "$Revision: 33 $" + +class + COLOR_FADER + +inherit + + ANY + redefine + default_create + end + +create + default_create, + make_with_color, + make_with_color_and_count + +feature {NONE} -- Initialization + + default_create + -- Initialize with `color' rgb = [0.5, 0.5, 0.5] (a mid-tone grey) + -- and five steps. + do + create color.make_with_rgb (0.5, 0.5, 0.5) + count := 10 + end + + make_with_color (a_color: EV_COLOR) + -- Initialize with `a_color' and five steps + require + color_exists: a_color /= Void + do + create color.make_with_rgb (a_color.red, a_color.green, a_color.blue) + count := 10 + end + + make_with_color_and_count (a_color: EV_COLOR; a_count: INTEGER) + -- Set `color' and `count' + require + color_exists: a_color /= Void + count_large_enough: a_count >= 0 + do + create color.make_with_rgb (a_color.red, a_color.green, a_color.blue) + count := a_count + end + +feature -- Access + + color: EV_COLOR + -- The original color on which results are based + + count: INTEGER + -- The number of steps (or max distance) to go from the original color to full dark + + distance: INTEGER + -- The current place in the range of colors + -- (Higher numbers are further away from `color'; a `step' + -- of zero gives the original color.) + + i_th_darker (a_distance: INTEGER): EV_COLOR + -- The color a `a_distance' away from `color' toward the black + require + distance_large_enough: a_distance >= 0 + distance_small_enough: a_distance <= count + local + r, g, b: REAL_32 + r_dist, g_dist, b_dist: REAL_32 + r_step, g_step, b_step: REAL_32 + do + r_dist := Darkest - color.red + g_dist := Darkest - color.green + b_dist := Darkest - color.blue + r_step := r_dist / count + g_step := g_dist / count + b_step := b_dist / count + r := color.red + r_step * a_distance + g := color.green + g_step * a_distance + b := color.blue + b_step * a_distance + create Result.make_with_rgb (r, g, b) + end + + darker: EV_COLOR + -- The color a `distance' away from `color' toward the `Darkest' + do + Result := i_th_darker (distance) + end + + i_th_lighter (a_distance: INTEGER): EV_COLOR + -- The color a `a_distance' away from `color' toward the `Grey' + require + distance_large_enough: a_distance >= 0 + distance_small_enough: a_distance <= count + local + r, g, b: REAL_32 + r_dist, g_dist, b_dist: REAL_32 + r_step, g_step, b_step: REAL_32 + do + r_dist := Grey - color.red + g_dist := Grey - color.green + b_dist := Grey - color.blue + r_step := r_dist / count + g_step := g_dist / count + b_step := b_dist / count + r := color.red + r_step * a_distance + g := color.green + g_step * a_distance + b := color.blue + b_step * a_distance + create Result.make_with_rgb (r, g, b) + end + + lighter: EV_COLOR + -- The color a `distance' away from `color' toward the lighter end + do + Result := i_th_lighter (distance) + end + +feature -- Element change + + set_color (a_color: EV_COLOR) + -- Make `color' have the same rgb values as `a_color' (copies the values) + require + color_exists: a_color /= Void + do + color.set_rgb (a_color.red, a_color.green, a_color.blue) + end + + set_count (a_count: INTEGER) + -- Change the `count' + require + count_big_enough: a_count >= 0 + do + count := a_count + end + +feature -- Basic operations + + forth + -- Increment the `step' up to a maximum of `count' + require + not_after: not is_after + do + distance := distance + 1 + end + + back + -- Decrement the `step' downn to a minimum of zero + require + not_before: not is_before + do + distance := distance - 1 + end + + finish + -- Move the the last position + do + distance := count + end + + start + -- Move to the first position + do + distance := 1 + end + +feature -- Status report + + is_before: BOOLEAN + -- Is the `step' before the range? + do + Result := distance = 0 + end + + is_after: BOOLEAN + -- Is the `step' greater than `count' + do + Result := distance > count + end + +feature {NONE} -- Implementation + + Lightest: REAL_32 = 0.8 + -- The lightest value to which Current will fade + + Darkest: REAL_32 = 0.2 + -- The darkest value to which Current will fade + + Grey: REAL_32 = 0.6 + -- A medium value toward which Current can fade + +invariant + + color_exists: color /= Void + count_large_enough: count >= 0 + +end diff --git a/jj_vision/interface/views/default_view.e b/jj_vision/interface/views/default_view.e new file mode 100644 index 0000000..9059a52 --- /dev/null +++ b/jj_vision/interface/views/default_view.e @@ -0,0 +1,61 @@ +note + description: "[ + Used by {VIEW_MANAGER} as a place holder when it has + no other views. + ]" + date: "29 Aug 03" + author: "Jimmy J. Johnson" + copyright: "Copyright 2012, Jimmy J. Johnson" + license: "Eiffel Forum License v2 (see forum.txt)" + URL: "$URL: file:///F:/eiffel_repositories/jj_vision/trunk/interface/views/default_view.e $" + date: "$Date: 2015-10-24 07:32:40 -0700 (Sat, 24 Oct 2015) $" + revision: "$Revision: 23 $" + +class + DEFAULT_VIEW + +inherit + + VIEW + undefine +-- default_create, + copy + redefine + create_interface_objects, + initialize + end + + EV_LABEL + rename + object_id as ise_object_id + undefine + is_in_default_state + redefine + create_interface_objects, + initialize + end + + +create + default_create + +feature {NONE} -- Initialization + + create_interface_objects + -- Create objects to be used by `Current' in `initialize' + -- Implemented by descendants to create attached objects + -- in order to adhere to void-safety due to the implementation bridge pattern. + do + Precursor {VIEW} + Precursor {EV_LABEL} + end + + initialize + -- Set up the view + do + Precursor {VIEW} + Precursor {EV_LABEL} + set_text ("Default view") + end + +end diff --git a/jj_vision/interface/views/dialog_editor_view.e b/jj_vision/interface/views/dialog_editor_view.e new file mode 100644 index 0000000..3336af6 --- /dev/null +++ b/jj_vision/interface/views/dialog_editor_view.e @@ -0,0 +1,443 @@ +note + description: "[ + A {VIEW} for displaying an {EDITABLE} using it's `schema' + ]" + date: "30 Mar 04" + author: "Jimmy J. Johnson" + copyright: "Copyright 2012, Jimmy J. Johnson" + license: "Eiffel Forum License v2 (see forum.txt)" + URL: "$URL: file:///F:/eiffel_repositories/jj_vision/trunk/interface/views/dialog_editor_view.e $" + date: "$Date: 2012-05-31 14:05:35 -0400 (Thu, 31 May 2012) $" + revision: "$Revision: 10 $" + +class + DIALOG_EDITOR_VIEW + +inherit + + EV_STOCK_COLORS + rename + implementation as colors_implementation + export + {NONE} all + undefine + default_create, + is_equal, + copy + end + + VIEW + rename + target_imp as record_imp, + target as record, + set_target as set_record + undefine +-- default_create, + copy, + is_equal + redefine + create_interface_objects, + initialize, + record_imp, + set_record, + draw + end + +-- EV_CELL + EV_FRAME + undefine + is_in_default_state + redefine + create_interface_objects, + initialize +-- data, -- to make it inaplicable +-- set_data -- to make it inaplicable + end + +create + default_create + +feature {NONE} -- Initialization + + create_interface_objects + -- Create objects to be used by `Current' in `initialize' + -- Implemented by descendants to create attached objects + -- in order to adhere to void-safety due to the implementation bridge pattern. + do + Precursor {VIEW} + Precursor {EV_FRAME} + create changed_controls.make + create controls.make + create save_actions + create control_select_actions + create scrollable_area + create time_drawn.from_seconds (0) + end + + initialize + -- Create an editor view. + do + Precursor {EV_FRAME} + Precursor {VIEW} + extend (scrollable_area) + set_save_on_change + set_actions + end + + set_actions + -- Add actions to the widgets + do + scrollable_area.item.drop_actions.extend (agent on_drop_editable) + end + +feature -- Access + + scrollable_area: EDITOR_SCROLL_AREA + + schema: SCHEMA + -- Current schema in use by the editor. + require + has_schema: has_schema + do + check attached schema_imp as s then + Result := s + end + end + + save_actions: EV_NOTIFY_ACTION_SEQUENCE + -- Actions to be performed after the record is saved. + + control_select_actions: EV_NOTIFY_ACTION_SEQUENCE + -- Actions to be performed when a control is clicked. + +feature -- Element change + + set_record (a_record: like record) + -- Change `record' to `a_record' + -- Reload the data into the controls + do + Precursor {VIEW} (a_record) + draw + end + + set_schema (a_schema: like schema) + -- Change `schema' to `a_schema'. + -- Uses the pattern described in feature `set_target' from VIEW to + -- add `a_schema' to the `object_set' (the set of objects contained + -- in this view) and removes the old schema (if it had one) from + -- the `object_set'. + -- Also, removes old/add new fields contained in `a_schema'. + do + -- Save the old `record' + if attached schema_imp as s and then s /= a_schema then +-- target_set.prune (s) + schema_imp := a_schema +-- target_set.extend (s) + draw + end + ensure + schema_assigned: schema = a_schema +-- contains_schema: target_set.has (a_schema) +-- old_schema_removed: (old schema /= Void) and (old schema /= schema) implies not target_set.has (old schema) + end + +feature -- Basic operations + + draw + -- Rebuild and show the view. + do + if has_schema then + if is_rebuild_needed then + build_controls + end + if record /= Void then + fill_controls + if attached schema as s and then record.has_schema (s) then + enable_controls + else + disable_controls + end + else + disable_controls + end + end + end + + disable + -- Make the controls unresponsive to input. + do + is_user_disabled := True + end + + enable + -- Make the controls responsive to input. + do + is_user_disabled := False + end + +feature -- Status report + + is_user_disabled: BOOLEAN + -- Has the user requested the controls to be disabled? + + is_save_on_change: BOOLEAN + -- Are changes made in the controls automatically + -- saved to `record'? In other words, is `record' + -- updated anytime a change is made, or must it + -- be done manually with a call to `save_record'? + + has_schema: BOOLEAN + -- Is a `schema' assigned to Current? + do + Result := attached schema_imp + end + +feature -- Status setting + + set_save_on_change + -- Make automatic updates to `record' whenever + -- a change is made in any control. + do + is_save_on_change := True + end + + set_save_on_request + -- Require `save_record' to be called in order to + -- accept any changes make in any control. + do + is_save_on_change := False + end + +feature -- Basic operations + + disable_controls + -- Disable all controls. + local + c: CONTROL + do + from controls.start + until controls.exhausted + loop + c := controls.item + c.disable_sensitive + check attached c.parent as p then + p.set_foreground_color (Red) + p.propagate_foreground_color + end + controls.forth + end + end + + enable_controls + -- Enable all controls. + local + c: CONTROL + do + from controls.start + until controls.exhausted + loop + c := controls.item + c.enable_sensitive + check attached c.parent as p then + p.set_foreground_color (Black) + p.propagate_foreground_color + end + controls.forth + end + end + +feature {NONE} -- Implementation + + build_controls + -- Create controls for each FIELD in `schema'. + require + schema_exists: schema /= Void + local + f: FIELD + c: CONTROL + do + check attached {EDITOR_FIXED} scrollable_area.item as ef then + -- Because `scrollable_area' is an {EDITOR_SCROLL_AREA} + -- which *should* hold an {EDITOR_FIXED}. + ef.wipe_out + controls.wipe_out + if attached schema as s then + from s.start + until s.exhausted + loop + f := s.field + c := f.as_widget + -- add actions to each control as it is created + c.valid_change_actions.extend (agent on_control_changed (c)) + c.select_actions.extend (agent on_control_selected (c)) + -- c.display.pointer_button_press_actions.force_extend (agent on_control_selected (c)) + -- c.label.pointer_button_press_actions.force_extend (agent on_control_selected (c)) + -- put the control into the fixed + ef.extend (c) + -- place the control in the correct spot + scrollable_area.position_control (c) + -- keep track of the control + controls.extend (c) + if is_user_disabled then + disable_controls + end + s.forth + end + if not is_user_disabled then + enable_controls + end + end + end + check attached schema as s then + time_drawn := s.time_modified.twin + end + end + + save_record + -- Get the data from each control and put it into the + -- the record if the data is valid. + require + record_exitsts: record /= Void + local + dat: ANY -- for testing + con: CONTROL -- control + c: EDIT_COMMAND + do + from changed_controls.start + until changed_controls.off + loop + con := changed_controls.item + if con.is_display_valid and then not con.field.is_calculated then + dat := con.value + c := new_edit_command (record, con.field, con.value) + -- Disable drawing to keep this control from being updated + -- when the EDIT_COMMAND is executed. + disable_drawing + command_manager.add_command (c) + enable_drawing + end + changed_controls.forth + end + save_actions.call ([]) + changed_controls.wipe_out + end + + new_edit_command (a_record: like record; a_field: FIELD; a_value: ANY): EDIT_COMMAND + -- Used by `save_record' to get an EDIT_COMMAND + require + record_exists: record /= Void + do + create Result.make (a_record, a_field, a_value) + end + + fill_controls + -- Put the data from the record into the corresponding control + require + record_exists: record /= Void + local + key: STRING + con: CONTROL + do + from + controls.start + until + controls.exhausted + loop + key := controls.item.field.label + con := controls.item + if attached record.value (key) as dat then + con.set_data (dat) + end + con.refresh + controls.forth + end + end + +feature {CONTROL} -- implementation + + on_drop_editable (a_editable: EDITABLE) + -- React to drop of `a_editable' on Current except if + -- it is a FIELD. (FIELDs are handled by FIELD_EDITOR_VIEW.) +-- Fix me !!! This makes the interface inconsistent by allowing a drop +-- of a type that is really not allowed. + require + editable_exists: a_editable /= Void + do + -- The `parent_tool' (a EDIT_TOOL) takes care of the special + -- case, when `a_editable' is a FIELD. + if attached parent_tool as pt then + pt.set_target (a_editable) + end + end + + on_control_changed (a_control: CONTROL) + -- A change has been made to value in `a_control' + require + control_exists: a_control /= Void + do + changed_controls.extend (a_control) + if is_save_on_change then + save_record + disable_drawing + draw_views (record) + enable_drawing + end + end + + on_control_selected (a_control: CONTROL) + -- React to `a_control' being selected. + require + control_exists: a_control /= Void + do + control_select_actions.call ([a_control]) + end + +feature {NONE} -- Implementation + + controls: LINKED_SET [CONTROL] + -- All the controls in the pages. + + changed_controls: LINKED_SET [CONTROL] + -- Controls whose data has changed since last save + + is_rebuild_needed: BOOLEAN + -- Used internally to let `draw' know that the controls + -- need to be rebuilt, because the schema has changed + -- since the last call to `draw'. This prevents calling + -- `build_controls' (and unnecessarily recreating the + -- controls again) on every call to `draw'. + require + schema_exists: schema /= Void + do + check attached schema as s then + Result := time_drawn < s.time_modified + end + end + + time_drawn: YMDHMS_TIME + -- The time the controls were last drawn. + -- This is used to allow the controls for a schema to be + -- redrawn only after the `schema' has changed, not every + -- time a new `record' is set. + -- Updated by `build_controls'. + + record_imp: detachable EDITABLE + -- Detachable implementation of `target' for void-safety + + schema_imp: detachable like schema + -- Detachable implementation of `schema' + +feature {NONE} -- Inaplicable + +-- data: ANY +-- -- Not to be used +-- +-- set_data (a_data: like data) is +-- -- Not to be used +-- do +-- check +-- False +-- end +-- end + +end diff --git a/jj_vision/interface/views/dimable.e b/jj_vision/interface/views/dimable.e new file mode 100644 index 0000000..c7f2ea5 --- /dev/null +++ b/jj_vision/interface/views/dimable.e @@ -0,0 +1,191 @@ +note + description: "[ + A widget that can appear bright or dim + ]" + author: "Jimmy J. Johnson" + +deferred class + DIMABLE + +inherit + + ANY + redefine + default_create + end + +feature -- Initialization + + default_create + -- Set the default `dimming_level' + do + dimming_level := Dimmer + previous_dimming_level := Dimmest + end + +feature -- Access + + dimming_level: INTEGER_32 + -- The amount colors will be dimmed + -- (One of `Dim', `Dimmer', or `Dimmest') + + previous_dimming_level: INTEGER_32 + -- Used to `restore' to the prior dimming level + + Bright: INTEGER = 0 + Normal: INTEGER_32 = 7 + Dim: INTEGER = 10 + Dimmer: INTEGER_32 = 15 + Dimmest: INTEGER_32 = 20 + +feature -- Element change + + set_dimming_level (a_level: like dimming_level) + -- Change the `dimming_level' + require + valid_level: a_level = Bright or a_level = Normal or a_level = Dim or + a_level = Dimmer or a_level = Dimmest + do +-- io.put_string ("DIMABLE.set_dimming_level -- ") +-- if attached {VITP_ITEM} Current as v then +-- io.put_string ("on " + v.name) +-- else +-- io.put_string (" on? " + generating_type) +-- end +-- io.put_string (" from " + previous_dimming_level.out) +-- io.put_string (" to " + dimming_level.out + "%N") + previous_dimming_level := dimming_level + dimming_level := a_level + end + +feature -- Basic operations + + restore_dimming_level + -- Set the `dimming_level' to the `previous_dimming_level' + do + set_dimming_level (previous_dimming_level) + end + +feature -- Status report + + is_bright: BOOLEAN + -- Should the resulting colors be "bright"? + do + Result := dimming_level = Bright + end + + is_normal: BOOLEAN + -- Should the resulting colors be "normal"? + do + Result := dimming_level = Normal + end + + is_dimmed: BOOLEAN + -- Should the resulting colors be "dim"? + do + Result := dimming_level = Dim + end + + is_more_dimmed: BOOLEAN + -- Should the resulting colors be "dimmer"? + do + Result := dimming_level = Dimmer + end + + is_completely_dimmed: BOOLEAN + -- Should the resulting colors be "dimmest"? + do + Result := dimming_level = Dimmest + end + +feature -- Status setting + + set_bright + -- Change the color dimming level to "bright + do + set_dimming_level (Bright) + end + + set_normal + -- Change the `dimming_level' to "normal" + do + set_dimming_level (normal) + end + + set_dimmed + -- Change the color dimming level to "dim" + do + set_dimming_level (Dim) + end + + set_more_dimmed + -- Change the color dimming level to `Dimmer' + do + set_dimming_level (Dimmer) + end + + set_completely_dimmed + -- Change the color dimming level to `Dimmest' + do + set_dimming_level (Dimmest) + end + +feature -- Query + + adjusted_color (a_color: EV_COLOR): EV_COLOR + -- A new color from `a_color' adjusted based on the `dimming_level' + require + color_exists: a_color /= Void + do + fader.set_color (a_color) + Result := fader.i_th_lighter (dimming_level) + end + + dim_color (a_color: EV_COLOR): EV_COLOR + -- A new color based on `a_color' at a "faded" level + require + color_exists: a_color /= Void + do + fader.set_color (a_color) + Result := fader.i_th_lighter (Dim) + end + + dimmer_color (a_color: EV_COLOR): EV_COLOR + -- A new color based on `a_color' at a "faded" level + require + color_exists: a_color /= Void + do + fader.set_color (a_color) + Result := fader.i_th_lighter (Dimmer) + end + + dimmest_color (a_color: EV_COLOR): EV_COLOR + -- A new color based on `a_color' at a "faded" level + require + color_exists: a_color /= Void + do + fader.set_color (a_color) + Result := fader.i_th_lighter (Default_step_count) + end + +feature {NONE} -- Implementation + + fader: COLOR_FADER + -- Used to calculate a new color based on some initial color and dimming level + once + create Result + Result.set_count (Default_step_count) + end + + Default_step_count: INTEGER_32 = 20 + -- Number of variable color settings used in the `fader' + +invariant + + valid_dimming_level: dimming_level = Bright or + dimming_level = Normal or + dimming_level = Dim or + dimming_level = Dimmer or + dimming_level = Dimmest + +end diff --git a/jj_vision/interface/views/field_editor_view.e b/jj_vision/interface/views/field_editor_view.e new file mode 100644 index 0000000..4784925 --- /dev/null +++ b/jj_vision/interface/views/field_editor_view.e @@ -0,0 +1,69 @@ +note + description: "[ + An special {DIALOG_EDITOR_VIEW} used to edit a {FIELD} + + A {FIELD_SCHEMA} can not be created when a {FIELD} is created, + because, as Manu from ISE described, both {FIELD} and {SCHEMA} + would rely on the creation of the other, and an object would + be referenced before the created object was ever assigned to + the `Result' in `default_create'. + ]" + date: "27 Feb 04" + author: "Jimmy J. Johnson" + copyright: "Copyright 2012, Jimmy J. Johnson" + license: "Eiffel Forum License v2 (see forum.txt)" + URL: "$URL: file:///F:/eiffel_repositories/jj_vision/trunk/interface/views/field_editor_view.e $" + date: "$Date: 2012-03-16 14:05:07 -0400 (Fri, 16 Mar 2012) $" + revision: "$Revision: 7 $" + +class + FIELD_EDITOR_VIEW + +inherit + + DIALOG_EDITOR_VIEW + redefine + record_imp, + set_record, + new_edit_command + end + +create + default_create + +feature -- Element change + + set_record (a_record: like record) + -- Change the `record'. + do + -- Redefined to ensure the `schema' for `a_record' is set. + -- It may alread be here, but not always. + -- Note that `draw' is called by Precursor. + set_schema (a_record.schema) + Precursor {DIALOG_EDITOR_VIEW} (a_record) + end + +feature {NONE} -- Implementation (actions) + + parent_schema: SCHEMA + -- The schema being editted by the `parent_tool' which + -- must be a EDIT_TOOL. + do + check attached {EDIT_TOOL} parent_tool as pt then + Result := pt.get_schema + end + end + + new_edit_command (a_record: like record; a_field: FIELD; a_value: ANY): EDIT_SCHEMA_COMMAND + -- Used by `save_record' to get the correct type of command. + -- It is special for this type as it is a field that is + -- changing but the command affects a SCHEMA. + do + create Result.make (a_record, a_field, a_value) + Result.set_schema (parent_schema) + end + + record_imp: detachable FIELD + -- Detachable implementation of `target' for void-safety + +end diff --git a/jj_vision/interface/views/filename_view.e b/jj_vision/interface/views/filename_view.e new file mode 100644 index 0000000..8c0a4ba --- /dev/null +++ b/jj_vision/interface/views/filename_view.e @@ -0,0 +1,151 @@ +note + description: "[ + A {VIEW} used to display the names of files as filtered + ]" + date: "26 Jan 04" + author: "Jimmy J. Johnson" + copyright: "Copyright 2012, Jimmy J. Johnson" + license: "Eiffel Forum License v2 (see forum.txt)" + URL: "$URL: file:///F:/eiffel_repositories/jj_vision/trunk/interface/views/filename_view.e $" + date: "$Date: 2012-05-31 14:05:35 -0400 (Thu, 31 May 2012) $" + revision: "$Revision: 10 $" + +class + FILENAME_VIEW + +inherit + + EV_VERTICAL_BOX + rename + object_id as ise_object_id + undefine + is_in_default_state + redefine + create_interface_objects, + initialize + end + + VIEW + undefine + copy, + is_equal + redefine + create_interface_objects, + initialize, + draw + end + +create + default_create + +feature {NONE} -- Initialization + + create_interface_objects + -- Create objects to be used by `Current' in `initialize' + -- Implemented by descendants to create attached objects + -- in order to adhere to void-safety due to the implementation bridge pattern. + do + Precursor {VIEW} + Precursor {EV_VERTICAL_BOX} + create browse_button + create directory_text + create file_list + browse_button.set_pixmap (create {EV_PIXMAP}.make_with_pixel_buffer (Icon_shell_color_buffer)) + browse_button.set_tooltip ("{FILENAME_VIEW.Browse_button") + end + + initialize + -- Create an editor view. + do + Precursor {EV_VERTICAL_BOX} + Precursor {VIEW} + extend (browse_button) + extend (directory_text) + extend (file_list) + disable_item_expand (browse_button) + disable_item_expand (directory_text) + set_actions + end + + set_actions + -- Add actions to the widgets and view. + do + browse_button.select_actions.extend (agent on_browse_button_pressed) + directory_text.change_actions.extend (agent on_directory_text_changed) + end + +feature {NONE} -- Actions + + on_browse_button_pressed + -- React to a press of the browse button + do + directory_dialog.show_modal_to_window (parent_window) + end + + on_directory_selected + -- React to a directory selection from the `directory_dialog'. + do + directory_text.set_text (directory_dialog.directory) + end + + on_directory_text_changed + -- React to a change of the `directory_text'. + do + draw + end + +feature -- Basic operations + + draw + -- Redraw the view + local + d: DIRECTORY + lin: ARRAYED_LIST [STRING] + s, ext: STRING + i: EV_LIST_ITEM + p: EV_PIXMAP + do + file_list.wipe_out + create d.make_open_read (directory_text.text) + if d.exists then + lin := d.linear_representation + from lin.start + until lin.exhausted + loop + s := lin.item + ext := s.twin + ext.keep_tail (3) + if equal (ext, "ico") or equal (ext, "png") then + create p + p.set_with_named_file (directory_dialog.directory + "\" + s) + create i.make_with_text (s) + i.set_pixmap (p) + i.set_pebble (directory_dialog.directory + "\" + s) + file_list.extend (i) + end + lin.forth + end + end + d.close + end + +feature {NONE} -- Implementation + + browse_button: EV_BUTTON + -- To open a directory dialog + + directory_text: EV_TEXT + -- To display the directory (or path). + + file_list: EV_LIST + -- To display the filenames of the files + + directory_dialog: EV_DIRECTORY_DIALOG + -- The standard direcory selection dialog. + once + create Result + Result.set_start_directory ("d:/eiffel54/studio/bitmaps/ico") + Result.ok_actions.extend (agent on_directory_selected) + end + +end diff --git a/jj_vision/interface/views/fixed_view.e b/jj_vision/interface/views/fixed_view.e new file mode 100644 index 0000000..7123b00 --- /dev/null +++ b/jj_vision/interface/views/fixed_view.e @@ -0,0 +1,59 @@ +note + description: "[ + An EV_FIXED which is also a {VIEW} + ]" + date: "12 Sep 03" + author: "Jimmy J. Johnson" + copyright: "Copyright 2012, Jimmy J. Johnson" + license: "Eiffel Forum License v2 (see forum.txt)" + URL: "$URL: file:///F:/eiffel_repositories/jj_vision/trunk/interface/views/fixed_view.e $" + date: "$Date: 2015-10-24 07:32:40 -0700 (Sat, 24 Oct 2015) $" + revision: "$Revision: 23 $" + +class + FIXED_VIEW + +inherit + + VIEW + undefine +-- default_create, + copy, + is_equal + redefine + create_interface_objects, + initialize + end + + EV_FIXED + rename + object_id as ise_object_id + undefine + is_in_default_state + redefine + create_interface_objects, + initialize + end + +create + default_create + +feature {NONE} -- Initialization + + create_interface_objects + -- Create objects to be used by `Current' in `initialize' + -- Implemented by descendants to create attached objects + -- in order to adhere to void-safety due to the implementation bridge pattern. + do + Precursor {VIEW} + Precursor {EV_FIXED} + end + + initialize + -- Create an editor view. + do + Precursor {EV_FIXED} + Precursor {VIEW} + end + +end diff --git a/jj_vision/interface/views/horizontal_split_view.e b/jj_vision/interface/views/horizontal_split_view.e new file mode 100644 index 0000000..cfbcb80 --- /dev/null +++ b/jj_vision/interface/views/horizontal_split_view.e @@ -0,0 +1,57 @@ +note + description: "[ + A {VIEW} that is also an {EV_HORIZONTAL_SPLIT_AREA} + ]" + author: "Jimmy J. Johnson" + copyright: "Copyright 2012, Jimmy J. Johnson" + license: "Eiffel Forum License v2 (see forum.txt)" + URL: "$URL: file:///F:/eiffel_repositories/jj_vision/trunk/interface/views/horizontal_split_view.e $" + date: "$Date: 2015-10-24 07:32:40 -0700 (Sat, 24 Oct 2015) $" + revision: "$Revision: 23 $" + +class + HORIZONTAL_SPLIT_VIEW + +inherit + + EV_HORIZONTAL_SPLIT_AREA + undefine + is_in_default_state + redefine + create_interface_objects, + initialize + end + + VIEW + undefine +-- default_create, + copy + redefine + create_interface_objects, + initialize +-- draw + end + +create + default_create + +feature {NONE} -- Initialization + + create_interface_objects + -- Create objects to be used by `Current' in `initialize' + -- Implemented by descendants to create attached objects + -- in order to adhere to void-safety due to the implementation bridge pattern. + do + Precursor {VIEW} + Precursor {EV_HORIZONTAL_SPLIT_AREA} + end + + initialize + -- Set up the widget + do + Precursor {VIEW} + Precursor {EV_HORIZONTAL_SPLIT_AREA} + draw + end + +end diff --git a/jj_vision/interface/views/jj_drawing_area_view.e b/jj_vision/interface/views/jj_drawing_area_view.e new file mode 100644 index 0000000..e47e503 --- /dev/null +++ b/jj_vision/interface/views/jj_drawing_area_view.e @@ -0,0 +1,62 @@ +note + description: "[ + A {VIEW} combined with an EV_DRAWING_AREA + ]" + author: "Jimmy J. Johnson" + copyright: "Copyright 2012, Jimmy J. Johnson" + license: "Eiffel Forum License v2 (see forum.txt)" + URL: "$URL: file:///F:/eiffel_repositories/jj_vision/trunk/interface/views/jj_drawing_area_view.e $" + date: "$Date: 2012-11-27 20:19:38 -0500 (Tue, 27 Nov 2012) $" + revision: "$Revision: 13 $" + +class + JJ_DRAWING_AREA_VIEW + +inherit + + EV_DRAWING_AREA + undefine + is_in_default_state + redefine + create_interface_objects, + initialize + end + + VIEW + undefine + copy + redefine + create_interface_objects, + initialize, + add_actions + end + +create + default_create + +feature {NONE} -- Initialization + + create_interface_objects + -- Create objects to be used by `Current' in `initialize' + -- Implemented by descendants to create attached objects + -- in order to adhere to void-safety due to the implementation bridge pattern. + do + Precursor {VIEW} + Precursor {EV_DRAWING_AREA} + end + + initialize + -- Set up the widget + do + Precursor {VIEW} + Precursor {EV_DRAWING_AREA} +-- set_actions + end + + add_actions + do + resize_actions.force_extend (agent draw) + expose_actions.force_extend (agent draw) + end + +end diff --git a/jj_vision/interface/views/jj_figure_world_view.e b/jj_vision/interface/views/jj_figure_world_view.e new file mode 100644 index 0000000..92236f5 --- /dev/null +++ b/jj_vision/interface/views/jj_figure_world_view.e @@ -0,0 +1,121 @@ +note + description : "[ + This class ties together the concept of EV_FIGURE_WORLD, EV_DRAWING_AREA, + and EV_DRAWING_AREA_PROJECTOR in a simpler interface. + In order to fake out Eiffel Vision to allow a widget to be decreased in + size (I call this the `set_minimum_size' problem'), the drawing + area is contained in an EV_FIXED allowing the drawing area's size + to follow that of the fixed, and thereby, indirectly the size of the + parent window. + + While this worked for the editor classes it does not seem to work here. + I don't know why. Is the problem with `resize_fixed' or with the fact + that, in the graphics program where it is used, I am also using the + "jj_vision" classes. Perhaps the problem is there.??? + ]" + date: "27 Sep 03" + author: "Jimmy J. Johnson" + copyright: "Copyright 2012, Jimmy J. Johnson" + license: "Eiffel Forum License v2 (see forum.txt)" + URL: "$URL: file:///F:/eiffel_repositories/jj_vision/trunk/interface/views/jj_figure_world_view.e $" + date: "$Date: 2012-05-31 14:05:35 -0400 (Thu, 31 May 2012) $" + revision: "$Revision: 10 $" + +class + JJ_FIGURE_WORLD_VIEW + +inherit + + EV_FRAME + undefine + is_in_default_state + redefine + create_interface_objects, + initialize + end + + VIEW + undefine +-- default_create, + copy + redefine + create_interface_objects, + initialize, + draw + end + +create + default_create + +feature {NONE} -- Initialization + + create_interface_objects + -- Create objects to be used by `Current' in `initialize' + -- Implemented by descendants to create attached objects + -- in order to adhere to void-safety due to the implementation bridge pattern. + do + Precursor {VIEW} + Precursor {EV_FRAME} + create fixed + create world + create drawing_area + create projector.make (world, drawing_area) + end + + initialize + -- Set up the widget + do + Precursor {VIEW} + Precursor {EV_FRAME} + extend (drawing_area) + set_actions +-- draw + end + + set_actions + do + resize_actions.force_extend (agent draw) + drawing_area.expose_actions.force_extend (agent draw) + end + +feature -- Access + + world: EV_FIGURE_WORLD + -- World which Current will manipulate. + + drawing_area: EV_DRAWING_AREA + -- Area on which `world' will be projected. + -- It is contained within a `fixed' area of Current. + -- Exported to allow direct drawing on it. + +feature -- Element change + + set_world (a_world: EV_FIGURE_WORLD) + -- Change the `world' of figures to be displayed + require + world_exists: a_world /= Void + do + world := a_world + projector.set_world (a_world) + end + +feature {NONE} -- Drawing / Refresh operations + + draw + -- Build the view + do + drawing_area.clear + if projector /= Void then + projector.full_project + end + end + +feature {NONE} -- Implementation + + projector: EV_DRAWING_AREA_PROJECTOR + -- For projecting the world onto the drawing area. + + fixed: EV_FIXED + -- Container placed in the EV_FRAME to control size of `drawing_area'. + +end diff --git a/jj_vision/interface/views/jj_model_world_cell_view.e b/jj_vision/interface/views/jj_model_world_cell_view.e new file mode 100644 index 0000000..876047d --- /dev/null +++ b/jj_vision/interface/views/jj_model_world_cell_view.e @@ -0,0 +1,77 @@ +note + description : "[ + A scrollable drawing area (i.e. an {EV_MODEL_WORLD_CELL} that + is a {VIEW}. + ]" + author: "Jimmy J. Johnson" + +class + JJ_MODEL_WORLD_CELL_VIEW + +inherit + + VIEW + undefine +-- default_create, + copy, + is_equal + redefine + create_interface_objects, + initialize, + draw + end + + EV_MODEL_WORLD_CELL + undefine + is_in_default_state + redefine + create_interface_objects, + initialize + end + +create + make + +feature {NONE} -- Initialization + + create_interface_objects + -- Create objects to be used by `Current' in `initialize' + -- Implemented by descendants to create attached objects + -- in order to adhere to void-safety due to the implementation bridge pattern. + do + -- Must create `world' because not calling `make_with_world' + create world + Precursor {EV_MODEL_WORLD_CELL} + Precursor {VIEW} + is_autoscroll_enabled := true + end + + initialize + -- Set up by calling both precursor versions + do + Precursor {EV_MODEL_WORLD_CELL} + Precursor {VIEW} + end + +feature -- Basic operations + + add_model (a_model: JJ_MODEL_WORLD_VIEW) + -- Add `a_model' to the `world' and set + -- the `parent' of `a_model' + do + world.extend (a_model) + a_model.set_parent_view (Current) + end + +feature {NONE} -- Drawing / Refresh operations + + draw + -- Build the view + do + drawing_area.clear + if projector /= Void then + projector.full_project + end + end + +end diff --git a/jj_vision/interface/views/jj_model_world_view.e b/jj_vision/interface/views/jj_model_world_view.e new file mode 100644 index 0000000..48e77b6 --- /dev/null +++ b/jj_vision/interface/views/jj_model_world_view.e @@ -0,0 +1,100 @@ +note + description: "[ + An {EV_MODEL_WORLD} that is also a {VIEW}. + It is a group of figures that allow redraws through the {VIEW} + class interface (e.g. when the underlying object model changes, + the views displaying that object can be redrawn.) + ]" + author: "Jimmy J. Johnson" + date: "$Date$" + revision: "$Revision$" + +class + JJ_MODEL_WORLD_VIEW + +inherit + + VIEW + redefine +-- default_create, + create_interface_objects, + draw + end + + EV_MODEL_WORLD + redefine + default_create, + create_interface_objects + end + +create + make + +create {JJ_MODEL_WORLD_VIEW} + list_make + +feature {NONE} -- Initialization + + default_create + -- Standard creation procedure, added to align with the pattern + -- used by `default_create' from {EV_ANY}. + -- Remember, `make' from {VIEW} calls `default_create', which + -- in {EV_ANY} calls both `create_interface_objects' and later + -- `initialize'. However, `default_create' from {EV_MODEL_WORLD} + -- does NOT call `initialize'. + do + -- Precursor eventually calls `create_interface_objects' + Precursor {EV_MODEL_WORLD} + -- now, also call `initialzie' + initialize + end + + create_interface_objects + -- Create objects to be used by `Current' in `initialize'. + -- Called by `defult_create'. + -- Implemented by descendants to create attached objects + -- in order to adhere to void-safety due to the implementation + -- bridge pattern. + do + Precursor {VIEW} + Precursor {EV_MODEL_WORLD} + end + +feature -- Element change + + parent: detachable EV_CONTAINER + -- Parent of the current view. + -- To be effected by joining with an EV_ class. + -- An {EV_MODEL_WORLD} as a descendent of {EV_MODEL} is to be + -- extended into an {EV_MODEL_WORLD_CELL}, which is an {EV_CONTAINER}, + -- but there seems to be no way to determine this container. + do + check + do_not_call: False then + -- because can not return what is expected. + end + end + + is_destroyed: BOOLEAN + -- Has the view been destroyed? + -- This will be joined with an EV_WIDGET feature. + -- See comment for feature `parent'. + do +-- check +-- do_not_call: False then +-- -- because can not return what is expected. +-- end + Result := false + end + +feature -- Basic operations + + draw + -- Redraw the window + do +-- world.wipe_out +-- world.full_redraw + Precursor {VIEW} + end + +end diff --git a/jj_vision/interface/views/jj_scrollable_drawing_area_view.e b/jj_vision/interface/views/jj_scrollable_drawing_area_view.e new file mode 100644 index 0000000..fac9856 --- /dev/null +++ b/jj_vision/interface/views/jj_scrollable_drawing_area_view.e @@ -0,0 +1,210 @@ +note + description : "[ + This class ties together the concept of EV_MODEL_WORLD, EV_DRAWING_AREA, + and EV_MODEL_DRAWING_AREA_PROJECTOR in a simpler interface. The drawing + area is contained in an EV_FIXED within an EV_SCROLLABLE_AREA, + allowing the + ]" + date: "18 Jul 03" + author: "Jimmy J. Johnson" + copyright: "Copyright 2012, Jimmy J. Johnson" + license: "Eiffel Forum License v2 (see forum.txt)" + URL: "$URL: file:///F:/eiffel_repositories/jj_vision/trunk/interface/views/jj_scrollable_drawing_area_view.e $" + date: "$Date: 2012-06-11 16:54:43 -0400 (Mon, 11 Jun 2012) $" + revision: "$Revision: 11 $" + +class + JJ_SCROLLABLE_DRAWING_AREA_VIEW + +inherit + + VIEW + undefine + copy + redefine + create_interface_objects, + initialize, + draw + end + + EV_SCROLLABLE_AREA + undefine + is_in_default_state + redefine + create_interface_objects, + initialize + end + +create + default_create + +feature {NONE} -- Initialization + + create_interface_objects + -- Create objects to be used by `Current' in `initialize' + -- Implemented by descendants to create attached objects + -- in order to adhere to void-safety due to the implementation bridge pattern. + do + Precursor {VIEW} + Precursor {EV_SCROLLABLE_AREA} + create fixed + create world + create drawing_area + create projector.make (world, drawing_area) + end + + initialize + -- Set up the widget + do + Precursor {VIEW} + Precursor {EV_SCROLLABLE_AREA} + extend (fixed) + fixed.extend (drawing_area) + set_actions + end + + set_actions + do + resize_actions.force_extend (agent draw) + resize_actions.extend (agent resize_fixed) + end + +feature -- Access + + world: EV_FIGURE_WORLD + -- World which Current will manipulate. + + drawing_area: EV_DRAWING_AREA + -- Area on which `world' will be projected. + -- It is contained within a `fixed' area of Current. + -- Exported to allow direct drawing on it. + +feature -- Element change + + set_world (a_world: EV_FIGURE_WORLD) + -- Change the `world' of figures to be displayed + require + world_exists: a_world /= Void + do + world := a_world + projector.set_world (a_world) + end + +feature {NONE} -- Drawing / Refresh operations + + resize_fixed (a_x, a_y, a_width, a_height: INTEGER) + -- Change the size of `drawing_area' to be at least as big as the + -- scroll area but no bigger, by removing the old one area re- + -- extending it into `fixed'. + -- The parameters are there so the feature has the correct + -- signature but are not used in the calculations. + local + big_x, big_y: INTEGER + f: like fixed + do + -- Must check for parent because `parent_window' makes no + -- since if Current is not contained in some container. + if parent_window /= Void then + -- This feature is ineficient as is because of all the + -- re-parenting that is going on. + -- Must `lock_update' from EV_WINDOW to prevent + -- severe flickering on all the re-parenting. + parent_window.lock_update + -- Block the actions so don't get infinite loop + resize_actions.block + -- Create a new fixed with the correct size to + -- replace the wrong sized one. + create f + -- Transfer all the `drawing_area' to the new fixed + -- For some reason the `drawing_area' does not always have + -- parent `fixed' as expected; hence all the checks and the + -- statement to make the parent of `drawing_area' call `prune'. + fixed.start + fixed.prune (drawing_area) + check + not fixed.has (drawing_area) + end + if attached {EV_CONTAINER} drawing_area.parent as p then + p.prune (drawing_area) + end + check + drawing_area.parent = Void + end + f.extend (drawing_area) + -- Put any actions in `fixed' into the new fixed `f'. + f.conforming_pick_actions.merge_right (fixed.conforming_pick_actions) + f.drop_actions.merge_right (fixed.drop_actions) + f.pick_actions.merge_right (fixed.pick_actions) + f.pick_ended_actions.merge_right (fixed.pick_ended_actions) + f.focus_in_actions.merge_right (fixed.focus_in_actions) + f.key_press_actions.merge_right (fixed.key_press_actions) + f.key_press_string_actions.merge_right (fixed.key_press_string_actions) + f.key_release_actions.merge_right (fixed.key_release_actions) + f.pointer_button_press_actions.merge_right (fixed.pointer_button_press_actions) + f.pointer_button_release_actions.merge_right (fixed.pointer_button_release_actions) + f.pointer_double_press_actions.merge_right (fixed.pointer_double_press_actions) + f.pointer_enter_actions.merge_right (fixed.pointer_enter_actions) + f.pointer_leave_actions.merge_right (fixed.pointer_leave_actions) + f.pointer_motion_actions.merge_right (fixed.pointer_motion_actions) + f.resize_actions.merge_right (fixed.resize_actions) + -- Replace `fixed' with the new fixed, `f'. + replace (f) + -- Make the size of `drawing_area' at least as big as Current. + f.set_item_size (drawing_area, client_width.max (world.bounding_box.width), client_height.max (world.bounding_box.height)) +-- f.set_item_size (drawing_area, width.max (world.bounding_box.width), height.max (world.bounding_box.height)) + resize_actions.resume + parent_window.unlock_update + end + -- From here down would be used if `set_item_size' from + -- VIEWPORT worked properly. As of 26 Nov 02 ISE can not + -- answer why I get a post-condition violation on the + -- feature even though it passes the pre-conditions. + -- The calls to `item.set_minimum_width (50) were there + -- for testing and probably not needed if `set_item_size' + -- ever works. +---- from item.start +---- until item.exhausted +---- loop +---- c := item.item +---- big_x := (c.x_position + c.width).max (big_x) +---- big_y := (c.y_position + c.height).max (big_y) +---- item.forth +---- end +-- item.set_minimum_width (50) +-- item.set_minimum_height (50) +-- item.set_minimum_width (25) +---- if big_x < client_width or big_y < client_height then +------ if big_x < client_width then +------ set_item_width (client_width) +------ end +---- if big_y < client_height then +---- set_item_height (client_height) +---- end +------ set_item_size (client_width, client_height) +---- item.set_minimum_size (client_width, client_height) +---- else +---- set_item_size (big_x, big_y) +------ item.set_minimum_size (big_x, big_y) +---- end + end + + draw + -- Build the view + do + drawing_area.clear + if projector /= Void then + projector.full_project + end + end + +feature {NONE} -- Implementation + + projector: EV_DRAWING_AREA_PROJECTOR + -- For projecting the world onto the drawing area. + + fixed: EV_FIXED + -- Container placed in the EV_FRAME to facilitate + -- the placement of scrollbars and other widgets. + +end + diff --git a/jj_vision/interface/views/list_editor_view.e b/jj_vision/interface/views/list_editor_view.e new file mode 100644 index 0000000..cd6f306 --- /dev/null +++ b/jj_vision/interface/views/list_editor_view.e @@ -0,0 +1,388 @@ +note + description: "[ + A {VIEW} which allows the editting of an {EDITABLE} in a + multi-column list. + ]" + date: "24 Feb 04" + author: "Jimmy J. Johnson" + copyright: "Copyright 2012, Jimmy J. Johnson" + license: "Eiffel Forum License v2 (see forum.txt)" + URL: "$URL: file:///F:/eiffel_repositories/jj_vision/trunk/interface/views/list_editor_view.e $" + date: "$Date: 2012-05-31 14:05:35 -0400 (Thu, 31 May 2012) $" + revision: "$Revision: 10 $" + +class + LIST_EDITOR_VIEW + +inherit + + EV_STOCK_COLORS + rename + implementation as colors_implementation + export + {NONE} all + undefine + default_create, + is_equal, + copy + end + + EV_NOTEBOOK + rename + item as page, + selected_item as selected_page, + select_item as select_page, + set_item_text as set_page_text + undefine + is_in_default_state + redefine + create_interface_objects, + initialize +-- data, +-- set_data + end + + VIEW + rename + target_imp as record_imp, + target as record, + set_target as set_record + undefine +-- default_create, + copy, + is_equal + redefine + create_interface_objects, + initialize, + record_imp + end + +create + default_create + +feature {NONE} -- Initialization + + create_interface_objects + -- Create objects to be used by `Current' in `initialize' + -- Implemented by descendants to create attached objects + -- in order to adhere to void-safety due to the implementation bridge pattern. + do + Precursor {VIEW} + Precursor {EV_NOTEBOOK} + create changed_controls.make + create controls.make + create save_actions + create control_select_actions + end + + initialize + -- Create an editor view. + do + Precursor {VIEW} + Precursor {EV_NOTEBOOK} + set_save_on_change + set_actions + end + + set_actions + -- + do + drop_actions.extend (agent on_drop_object) +-- selection_actions.extend (agent on_page_selected) + end + +feature -- Access + +-- record: EDITABLE + -- The object that contains the data to be editted. + -- Data in `record' is reached via feature `value (a_key)'. + + schema: detachable SCHEMA + -- Describes how to build the controls which + -- will be used to edit `record'. + + save_actions: EV_NOTIFY_ACTION_SEQUENCE + -- Actions to be performed after the record is saved. + + control_select_actions: EV_NOTIFY_ACTION_SEQUENCE + -- Actions to be performed when a control is clicked. + +feature -- Element change + + set_schema (a_schema: like schema) + -- Change `schema' to `a_schema'. + require + schema_exists: a_schema /= Void + do + if schema /= a_schema then + schema := a_schema + build_pages + if record /= Void then + fill_controls + end + end + if record = Void then + disable_controls -- at least until user loads a record + end + ensure + schema_was_set: schema = a_schema + end + + set_target (a_record: like record) + -- Change `record' to `a_record' + -- Reload the data into the controls + require + record_exists: a_record /= Void + do + record_imp := a_record + if not is_user_disabled then + enable_controls + end + fill_controls + ensure + record_was_set: record = a_record + end + +feature -- Basic operations + + disable + -- Make the controls unresponsive to input. + do + is_user_disabled := True + end + + enable + -- Make the controls responsive to input. + do + is_user_disabled := False + end + +feature -- Status report + + is_user_disabled: BOOLEAN + -- Has the user requested the controls to be disabled? + + is_save_on_change: BOOLEAN + -- Are changes made in the controls automatically + -- saved to `record'? In other words, is `record' + -- updated anytime a change is made, or must it + -- be done manually with a call to `save_record'? + +feature -- Status setting + + set_save_on_change + -- Make automatic updates to `record' whenever + -- a change is made in any control. + do + is_save_on_change := True + end + + set_save_on_request + -- Require `save_record' to be called in order to + -- accept any changes make in any control. + do + is_save_on_change := False + end + +feature -- Basic operations + + disable_controls + -- Disable all controls. + local + c: CONTROL + do + from controls.start + until controls.exhausted + loop + c := controls.item + c.disable_sensitive + check attached c.parent as p then + p.set_foreground_color (Red) + p.propagate_foreground_color + end + controls.forth + end + end + + enable_controls + -- Enable all controls. + local + c: CONTROL + do + from controls.start + until controls.exhausted + loop + c := controls.item + c.enable_sensitive + check attached c.parent as p then + p.set_foreground_color (Black) + p.propagate_foreground_color + end + controls.forth + end + end + +feature {NONE} -- Implementation (actions) + + on_drop_object (a_object: like record) + -- React to `a_object' dropping on Current. + require + object_exists: a_object /= Void + local +-- p: DATABASE_EDIT_TOOL + do +-- p ?= parent +-- if p /= Void then +-- parent_tool.set_object (a_object) +-- end + end + +feature {NONE} -- Implementation + + build_pages + -- Create a tab in the notebook for each schema_page in `schema'. +-- local +---- ep: EDITOR_PAGE +---- sa: EV_SCROLLABLE_AREA +-- sa: EDITOR_SCROLL_AREA +-- ef: EDITOR_FIXED +-- sp: SCHEMA_PAGE +-- f: FIELD +-- c: CONTROL + do +-- wipe_out +-- from schema.start +-- until schema.exhausted +-- loop +-- -- for each SCHEMA_PAGE in `schema', make a scroll +-- -- area and put it in Current (an EV_NOTEBOOK). This +-- -- will create a tabbed page for each page in the schema. +-- create sa +-- extend (sa) +-- select_page (sa) +-- sp := schema.item +-- set_page_text (sa, sp.name) +-- -- For each FIELD in the SCHEMA_PAGE create a CONTROL +-- -- and put it into the 'fixed' from EDITOR_SCROLL_AREA. +-- from sp.start +-- until sp.exhausted +-- loop +-- -- create a control from the field +-- f := sp.item +-- c := f.as_widget +-- -- add actions to each control as it is created +-- c.display.change_actions.extend (agent on_control_changed (c)) +-- c.display.pointer_button_press_actions.force_extend (agent on_control_selected (c)) +-- c.label.pointer_button_press_actions.force_extend (agent on_control_selected (c)) +-- -- put the control into the fixed +-- sa.item.extend (c) +-- -- place the control in the correct spot +-- sa.position_control (c) +-- -- keep track of the control +-- controls.extend (c) +-- sp.forth +-- end +-- if is_user_disabled then +-- disable_controls +-- end +-- schema.forth +-- end +-- if record /= Void then +-- fill_controls +-- end + end + + save_record + -- Get the data from each control and put it into the + -- the record if the data is valid. + require + record_exitsts: record /= Void + local + dat: ANY -- COMPARABLE -- data + con: CONTROL -- control + do + from changed_controls.start + until changed_controls.off + loop + con := changed_controls.item + if con.is_display_valid and then not con.field.is_calculated then + dat := con.value + record.extend_value (dat, con.field.id) + end + changed_controls.forth + end + save_actions.call ([]) + changed_controls.wipe_out + end + + fill_controls + -- Put the data from the record into the corresponding control + require + record_exists: record /= Void + local + key: STRING + con: CONTROL + do + from + controls.start + until + controls.exhausted + loop + key := controls.item.field.id + con := controls.item + if attached record.value (key) as dat then + con.set_data (dat) + end + con.refresh + controls.forth + end + end + +feature {CONTROL} -- implementation + + on_control_changed (a_control: CONTROL) + -- A change has been made to value in `a_control' + do + changed_controls.extend (a_control) + if is_save_on_change then + save_record + end + end + + on_control_selected (a_control: CONTROL) + -- React to `a_control' being selected. + require + control_exists: a_control /= Void + do + control_select_actions.call ([a_control]) + end + +feature {NONE} -- Implementation + + controls: LINKED_SET [CONTROL] + -- All the controls in the pages. + + changed_controls: LINKED_SET [CONTROL] + -- Controls whose data has changed since last save + + record_imp: detachable EDITABLE + -- Detachable implementation of `target' for void-safety + +feature {NONE} -- Inaplicable + +-- data: ANY +-- -- Not to be used +-- +-- set_data (a_data: like data) is +-- -- Not to be used +-- do +-- check +-- False +-- end +-- end + +invariant + + invariant_clause: -- Your invariant here + +end diff --git a/jj_vision/interface/views/split_view.e b/jj_vision/interface/views/split_view.e new file mode 100644 index 0000000..d526798 --- /dev/null +++ b/jj_vision/interface/views/split_view.e @@ -0,0 +1,52 @@ +note + description: "[ + A {VIEW} that can be split into multiple panes through calls + to feature `split_manager'. (See {SPLIT_MANAGER} or {TOOL} + for example.) + ]" + author: "Jimmy J. Johnson" + date: "5/1/19" + +deferred class + SPLIT_VIEW + +inherit + +-- VIEW +-- redefine +-- create_interface_objects +-- end + +--feature {NONE} -- Initialization + +-- create_interface_objects +-- -- Create objects to be used by `Current' in `initialize' +-- -- Implemented by descendants to create attached objects +-- -- in order to adhere to void-safety due to the implementation bridge pattern. +-- do +-- create split_manager +-- Precursor {VIEW} +-- end + +feature -- Access + + split_manager: SPLIT_MANAGER + -- Manages the placement of sub-views within current. + attribute + create Result + end + +feature -- Element change + + set_split_manager (a_manager: SPLIT_MANAGER) + -- Change `split_manager' + require + manager_exists: a_manager /= Void + do + split_manager := a_manager + ensure + manager_assigned: split_manager = a_manager + end + + +end diff --git a/jj_vision/interface/views/text_view.e b/jj_vision/interface/views/text_view.e new file mode 100644 index 0000000..e607b16 --- /dev/null +++ b/jj_vision/interface/views/text_view.e @@ -0,0 +1,63 @@ +note + description: "[ + A {VIEW} in which to display text + ]" + date: "4 Jan 08" + author: "Jimmy J. Johnson" + copyright: "Copyright 2012, Jimmy J. Johnson" + license: "Eiffel Forum License v2 (see forum.txt)" + URL: "$URL: file:///F:/eiffel_repositories/jj_vision/trunk/interface/views/text_view.e $" + date: "$Date: 2012-05-31 14:05:35 -0400 (Thu, 31 May 2012) $" + revision: "$Revision: 10 $" + +class + TEXT_VIEW + +inherit + + EV_TEXT + undefine + is_in_default_state + redefine + create_interface_objects, + initialize + end + + + VIEW + undefine + copy + redefine + create_interface_objects, + initialize + end + +create + default_create + +feature {NONE} -- Initialization + + create_interface_objects + -- Create objects to be used by `Current' in `initialize' + -- Implemented by descendants to create attached objects + -- in order to adhere to void-safety due to the implementation bridge pattern. + do + Precursor {VIEW} + Precursor {EV_TEXT} + end + + initialize + -- Set up the widget + do + Precursor {VIEW} + Precursor {EV_TEXT} + set_actions + draw + end + + set_actions + do + resize_actions.force_extend (agent draw) + end + +end diff --git a/jj_vision/interface/views/vertical_split_view.e b/jj_vision/interface/views/vertical_split_view.e new file mode 100644 index 0000000..dd03cc5 --- /dev/null +++ b/jj_vision/interface/views/vertical_split_view.e @@ -0,0 +1,56 @@ +note + description: "[ + A {VIEW} that is also an {EV_VERTICAL_SPLIT_AREA} + ]" + author: "Jimmy J. Johnson" + copyright: "Copyright 2012, Jimmy J. Johnson" + license: "Eiffel Forum License v2 (see forum.txt)" + URL: "$URL: file:///F:/eiffel_repositories/jj_vision/trunk/interface/views/vertical_split_view.e $" + date: "$Date: 2015-10-24 07:32:40 -0700 (Sat, 24 Oct 2015) $" + revision: "$Revision: 23 $" + +class + VERTICAL_SPLIT_VIEW + +inherit + + VIEW + undefine +-- default_create, + copy + redefine + create_interface_objects, + initialize + end + + EV_VERTICAL_SPLIT_AREA + undefine + is_in_default_state + redefine + create_interface_objects, + initialize + end + +create + default_create + +feature {NONE} -- Initialization + + create_interface_objects + -- Create objects to be used by `Current' in `initialize' + -- Implemented by descendants to create attached objects + -- in order to adhere to void-safety due to the implementation bridge pattern. + do + Precursor {VIEW} + Precursor {EV_VERTICAL_SPLIT_AREA} + end + + initialize + -- Set up the widget + do + Precursor {VIEW} + Precursor {EV_VERTICAL_SPLIT_AREA} + draw + end + +end diff --git a/jj_vision/interface/views/view.e b/jj_vision/interface/views/view.e new file mode 100644 index 0000000..caa5978 --- /dev/null +++ b/jj_vision/interface/views/view.e @@ -0,0 +1,747 @@ +note + description: "[ + Used as common ancestor to all "windows" in a system built using the + "jj_vision" cluster. It provides a way through feature `draw_views' + for updating all the views which contain that `target'. + Alternatively, the view + can force the redraw of views containing any of several objects by passing + a set of changed objects to feature `draw_views_with_set'. + The class should be an ancestor ancestor along with + some effected EV_WIDGET. + NOTE: Views which are `is_destroyed' are removed from the global `views' set + in feature `draw_views'. + ]" + date: "18 Jul 03" + author: "Jimmy J. Johnson" + copyright: "Copyright 2012, Jimmy J. Johnson" + license: "Eiffel Forum License v2 (see forum.txt)" + URL: "$URL: file:///F:/eiffel_repositories/jj_vision/trunk/interface/views/view.e $" + date: "$Date: 2015-10-24 07:32:40 -0700 (Sat, 24 Oct 2015) $" + revision: "$Revision: 23 $" + +deferred class + VIEW + +inherit + + DIMABLE + undefine + default_create + redefine + set_dimming_level + end + + SHARED + undefine + default_create + end + + PIXEL_BUFFERS + undefine + default_create + end + +--create +-- make + +feature {NONE} -- Initialization + + make (a_target: like target) + -- Create a new view to display `a_target' + do + -- This assignment is required to avoid violating a + -- precondition "not_empty" later when calling + -- feature `create_interface_objects". + target_imp := a_target + -- `default_create from: + -- 1) {EV_ANY} calls `create_interface_objects', later `initialize' + -- 2) {EV_MODEL calls only `create_interface_objects' + default_create + set_target (a_target) -- calls `draw' +-- draw + end + + create_interface_objects + -- Create objects to be used by `Current' in `initialize' + -- Implemented by descendants to create attached objects + -- in order to adhere to void-safety due to the implementation + -- bridge pattern. + -- Called by `default_create' from {EV_ANY} or {EV_MODEL} + require + not_interface_objects_created: not is_interface_objects_created + do + create pixmap.make_with_pixel_buffer (Icon_new_class_color_buffer) + is_interface_objects_created := true + ensure + interface_objects_created: is_interface_objects_created + end + + initialize + -- Initialize the view and insert it into a global list of views. + require + view_not_initialized: not is_view_initialized + do +-- initialize_dimable + dimming_level := Dim + previous_dimming_level := Dimmer + add_actions + is_view_initialized := True + ensure + initialized: is_view_initialized + end + + add_actions + -- Add any actions to Current. + require + not_initialized: not is_view_initialized + do + pointer_button_press_actions.extend (agent on_prepick_right_click) + pick_actions.extend (agent on_picked) + pointer_motion_actions.extend (agent on_postput_move) + end + +feature -- Status report + + is_interface_objects_created: BOOLEAN + -- Has `create_interface_objects' been called? + + is_view_initialized: BOOLEAN + -- Has `initialize' been called? + + is_pick_notifiable: BOOLEAN + -- Should Current be notified by other views (normally + -- a view contained in Current) that some event has + -- occurred? + -- Feature `set_parent_view' must have been called on + -- the child view for this to take effect. + + has_parent_view: BOOLEAN + -- Does Current know the view in which it resides? + do + Result := attached parent_view_imp + end + +feature -- Access + + application: JJ_APPLICATION + -- The application in which Current resides. + do + check attached {JJ_APPLICATION} (create {EV_ENVIRONMENT}).application as app then + -- because this class is for use in a {JJ_APPLICATION}. + Result := app + end + end + + pixmap: EV_PIXMAP + -- The pixmap associated with this view + +-- application: JJ_APPLICATION is +-- -- Convience feature for obtaining the current application. +-- local +-- app: JJ_APPLICATION +-- once +-- app ?= (create {EV_ENVIRONMENT}).application +-- check +-- jj_application_exists: app /= Void +-- -- Because VIEWs are used in JJ_APPLICATIONs. +-- end +-- ensure +-- result_exists: Result /= Void +-- end + +-- command_manager: COMMAND_MANAGER is +-- -- Manages the COMMAND's called by the system to allow undo/redo capabilities. +-- -- (This is a handle to the `command_manager' from a JJ_APPLICATION; putting it +-- -- here instead of in SHARED allows redefinition of the `command_manager' in +-- -- descendents of JJ_APPLICATION. +-- once +-- Result := application.command_manager +-- end + + frozen target: attached like target_imp + -- The primary target in this view. This feature along with + -- `set_target' allows the view to handle one target specially. + require + not_empty: not is_view_empty + do + check attached target_imp as t then + Result := t + end + end + + parent_window: JJ_MAIN_WINDOW + -- The {JJ_MAIN_WINDOW} if any which contains this view. + -- Must redefine to change type. + do + check attached {EV_CONTAINABLE} Current as c then + Result := recursive_parent_window (c) + end + ensure + valid_result: Result /= Void + end + + parent_tool: detachable TOOL + -- The TOOL, if any, in which Current resides. + local + con: detachable EV_CONTAINER + do + from con := parent + until Result /= Void or else con = Void + loop + if attached {TOOL} con as t then + Result := t + else + con := con.parent + end + end + end + + parent_view: attached like parent_view_imp + -- The view in which Current resides. + -- Provides a way for a model view to notify a parent + -- container of changes + require + has_parent_view: has_parent_view + do + check attached parent_view_imp as p then + Result := p + end + end + + parent: detachable EV_CONTAINER + -- Parent of the current view. + -- To be effected by joining with an EV_ class + deferred + end + + state: VIEW_STATE + -- A snapshot of the current look of the view + do + create Result.make (Current) + end + +feature -- Element change + + set_target (a_target: like target) + -- Change the value of `target' and realign the table or list + -- of views in which `a_target' is displayed. + do +-- print ("VIEW.set_target: a_target = " + target.out + "%N") + -- Remove the old association + if attached target_imp and then target /= a_target then + check + has_associated_view: views_table.has (target) + -- because `target_imp' not Void and `make' + end + views_table.prune (Current) + target_imp := Void + end + if target_imp = Void then + -- the expected case, except of initial creation +-- print ("VIEW.set_target: if statement target_imp = Void %N") + target_imp := a_target + views_table.extend (Current) + elseif not views_table.has_view (Current) then +-- print ("VIEW.set_target: not views_table.has (Current) %N") + check + same_object: target_imp = a_target + -- because of assignment statement in `make' + end + views_table.extend (Current) + end + draw + ensure + has_target: has_target (a_target) + end + + set_parent_view (a_view: VIEW) + -- Set `parent_view' to `a_view', allowing Current to + -- notify `a_view' of some event (e.g. right click). + do + parent_view_imp := a_view + end + + set_dimming_level (a_level: like dimming_level) + -- Change the `dimming_level' + do + Precursor (a_level) +-- paint + end + +feature -- Basic operations + +-- paint +-- -- Draw the current view when some property like +-- -- background color changes +-- do +-- end + + draw + -- Draw the current view. + -- Default does nothing + require + view_is_drawable: not is_draw_disabled + do + end + + draw_other_views (a_target: ANY) + -- Draw all views that contain `a_target' except Current + -- This also cleans any "destroyed" views from the `views' set. + require + target_exists: a_target /= Void + local + b: BOOLEAN + do + b := is_draw_disabled + disable_drawing + draw_views (a_target) + if not b then + enable_drawing + end + end + + draw_views (a_target: ANY) + -- Draw the views which contain `a_target'. + local + lin: LINEAR [VIEW] + marks: LINKED_SET [VIEW] -- Views marked for removal. + v: VIEW + do + create marks.make + lin := views_table.linear (a_target) + from lin.start + until lin.after + loop + v := lin.item + if v.is_destroyed then + marks.extend (v) + elseif not v.is_draw_disabled then + v.draw + end + lin.forth + end + -- Clean out any views that are no longer usable. + from marks.start + until marks.exhausted + loop + views_table.prune (marks.item) + marks.forth + end + end + + draw_views_with_set (a_set: LINEAR [ANY]) + -- Draw the views which contain any of the objects in `a_set'. + -- This also cleans any "destroyed" views from the `views' set. + require + set_exists: a_set /= Void + local + lin: LINEAR [VIEW] + marks: LINKED_SET [VIEW] -- Views marked for removal. + v: VIEW + do + create marks.make + lin := views_table.linear_with_set (a_set) + from lin.start + until lin.after + loop + v := lin.item + if v.is_destroyed then + marks.extend (v) + elseif not v.is_draw_disabled then + v.draw + end + lin.forth + end + -- Clean out any views that are no longer usable. + from marks.start + until marks.exhausted + loop + views_table.prune (marks.item) + marks.forth + end + end + + draw_all_views + -- Draw *all* the views in the system. + -- Also cleans any "destroyed" views for the `views' set. + local + lin: LINEAR [VIEW] + marks: LINKED_SET [VIEW] -- Views marked for removal. + v: VIEW + do + create marks.make + lin := views_table.linear_representation + from lin.start + until lin.after + loop + v := lin.item + if v.is_destroyed then + marks.extend (v) + elseif not v.is_draw_disabled then + v.draw + end + lin.forth + end + -- Clean out any views that are no longer usable. + from marks.start + until marks.exhausted + loop + views_table.prune (marks.item) + marks.forth + end + end + +feature -- Status report + + is_in_default_state: BOOLEAN = true + -- Is `Current' in its default state? + -- The intent of this class is to be joined with an EV_WIDGET. + -- The default state of a descendent is most likely not the same + -- as the default state of the parent EV_WIDGET (after all, a + -- new type widget is being defined that, by definition looks + -- different from the parent.) + -- This silly feature is the post-condition of `default_create' + -- from EV_WIDGET, which required a choice--either redefine this + -- feature in every EV_WIDGET descendant or, as chosen here, use + -- this version (the EV_WIDGET version is irrelavent anyway) and + -- undefine it in the inherit class of the EV_WIDGET parent. + + is_destroyed: BOOLEAN + -- Has the view been destroyed? + -- This will be joined with an EV_WIDGET feature + deferred + end + + is_view_empty: BOOLEAN + -- Are there no objects in this VIEW? + do + Result := target_imp = Void + end + + is_draw_disabled: BOOLEAN + -- Can the view be drawn using 'draw'? + +feature -- Status setting + + disable_drawing + -- Block the view from being redrawn by calling draw. + -- Used to reduce number of calls to draw. + do + is_draw_disabled := True + ensure + drawing_not_allowed: is_draw_disabled + end + + enable_drawing + -- Allow the view to be redrawn on a call to draw. + do + is_draw_disabled := False + ensure + drawing_allowed: not is_draw_disabled + end + +feature -- Query + + has_target (a_target: like target): BOOLEAN + -- Does Current contain `a_target'? + do + Result := target_imp = a_target + end + + display_name (a_object: ANY): STRING + -- An identifying "out" value corresponding to `a_object'. + require + object_exists: a_object /= Void + do + if attached {EDITABLE} a_object as e then + Result := e.display_name + else + Result := "fix me" + print ("VIEW.display_name -- get from once table?") + end + ensure + result_exists: Result /= Void + end + + yes_cursor (a_target: ANY): EV_POINTER_STYLE + -- Cursor for `a_target'. + do + create Result.make_with_pixel_buffer (Icon_new_class_color_buffer, 0, 0) + end + + no_cursor (a_target: ANY): EV_CURSOR + -- Cursor for `a_target'. + do + create Result + end + + linear (a_object: ANY): LINEAR [VIEW] + -- List of views in which `a_object' is displayed. The + -- resulting list could be empty. + do + Result := views_table.linear (a_object) + end + + linear_with_set (a_set: LINEAR [ANY]): LINEAR [VIEW] + -- List of views in which any of the objects in `a_set' + -- is displayed. + do + Result := views_table.linear_with_set (a_set) + end + + frozen post_pick_move_agent: PROCEDURE [TUPLE [a_x, a_y: INTEGER; + a_x_tilt, a_y_tilt, a_pressure: DOUBLE; + a_screen_x, a_screen_y: INTEGER]] + -- Creates an agent out of `on_postput_move' which is added to + -- the `pointer_motion_actions' of *ALL* views when a pick occurs + -- (see `on_picked'). Holding on to this agent as a once feature + -- allows `on_postput_move' to remove this agent from *ALL* the + -- views after the pick has ended and the mouse is moved [in one + -- of the views]. + once + Result := agent on_postput_move + end + +feature -- Basic operations + + target_changed_operations + -- This feature is called by `notify_views' to perform + -- actions when that view's `target' was modified. + do + print ("{VIEW}.target_changed_operations %N") + + end + + pick_notified_operations (a_target: ANY) + -- React to the pick of `a_target' from some view + do + print ("{VIEW}.pick_notified_operations on {" + generating_type.name + "}%N") + + end + + pick_ended_operations + -- React to the end of a pick and drop operation + do + print ("{VIEW}.pick_ended_operations on {" + generating_type.name + "} %N") + + end + +feature {NONE} -- Agents and support (actions) + + frozen on_prepick_right_click (x, y, button: INTEGER; + x_tilt, y_tilt, pressure: DOUBLE; + screen_x, screen_y: INTEGER) + -- Notify the parent of all views that contain `target' + -- that a pick event occurred involving `target'. + local + lin: LINEAR [VIEW] + marks: LINKED_SET [VIEW] -- Views marked for removal. + v: VIEW + do +-- is_picking.set_item (true) + create marks.make + lin := views_table.linear (target) + from lin.start + until lin.after + loop + v := lin.item + if v.is_destroyed then + marks.extend (v) + elseif v.has_parent_view then + -- Notifiy the parent view of the pick + v.parent_view.pick_notified_operations (target) + -- Save the view for notification when pick ends + pick_notified_views.extend (v.parent_view) + end + lin.forth + end + -- Clean out any views that are no longer usable. + from marks.start + until marks.exhausted + loop + views_table.prune (marks.item) + marks.forth + end + end + + frozen on_picked (a_x, a_y: INTEGER) + -- Notify the parent of all views that contain `target' + -- that a pick event occurred involving `target'. + local + lin: LINEAR [VIEW] + marks: LINKED_SET [VIEW] -- Views marked for removal. + v: VIEW + do + is_picking.set_item (true) +-- create marks.make +-- lin := views_table.linear (target) +-- from lin.start +-- until lin.after +-- loop +-- v := lin.item +-- if v.is_destroyed then +-- marks.extend (v) +-- elseif v.has_parent_view then +-- -- Notifiy the parent view of the pick +-- v.parent_view.pick_notified_operations (target) +-- -- Save the view for notification when pick ends +-- pick_notified_views.extend (v.parent_view) +-- end +-- lin.forth +-- end +-- -- Clean out any views that are no longer usable. +-- from marks.start +-- until marks.exhausted +-- loop +-- views_table.prune (marks.item) +-- marks.forth +-- end + end + + frozen on_postput_move (a_x, a_y: INTEGER; + a_x_tilt, a_y_tilt, a_pressure: DOUBLE; + a_screen_x, a_screen_y: INTEGER) + -- Feature added as agent to `pointer_motion_actions' + -- to react after a pnp operations has ended. It calls + -- feature `postput_operations'. + -- Redefine `postput_operations' to clean up any operations + -- that occurred in `do_prepick_operations'. + -- See index clause for information on pick-and-put. + local + v: VIEW + do + print ("{VIEW}.on_postput_move on " + generating_type.name + "%N") + -- Notify views when a transport has ended. + if is_picking.item and then not application.transport_in_progress then + print ("%T `is_picking and not transport_in_progress pick_notified_views.count = " + pick_notified_views.count.out + "%N") + is_picking.set_item (false) + -- Inform any parent views that the pick has ended + from pick_notified_views.start + until pick_notified_views.after + loop + v := pick_notified_views.item + v.pick_ended_operations + pick_notified_views.forth + end + pick_notified_views.wipe_out + end + end + + notify_changed (a_target: ANY) + -- Inform the views that have `a_target' that `a_target' + -- has changed (i.e. call `on_target_changed' for those + -- views). + -- This also cleans any "destroyed" views from the `views' set. + local + lin: LINEAR [VIEW] + marks: LINKED_SET [VIEW] -- Views marked for removal. + v: VIEW + do + create marks.make + lin := views_table.linear (a_target) + from lin.start + until lin.after + loop + v := lin.item + if v.is_destroyed then + marks.extend (v) + elseif not v.is_draw_disabled then + v.target_changed_operations + end + lin.forth + end + -- Clean out any views that are no longer usable. + from marks.start + until marks.exhausted + loop + views_table.prune (marks.item) + marks.forth + end + end + + frozen is_picking: BOOLEAN_REF + -- Is a pick-and-put (PNP) operation in progress? + -- It seems the PNP operations intercepts events system- + -- wide, so this is a global reference. + -- See index clause for information on pick-and-put. + once + create Result + end + + pick_notified_views: LINKED_SET [VIEW] + -- List of views that were notfied by `on_picked' + once + create Result.make + end + +feature -- Action sequences + + pointer_button_press_actions: EV_POINTER_BUTTON_ACTION_SEQUENCE + -- Actions to be performed when screen pointer button is pressed. + -- Defined here as place-holder to be undefined (i.e. joined) to + -- the version from {EV_WIDGET} or {EV_MODEL}. + -- See index clause for information on pick-and-put. + deferred + end + + pointer_motion_actions: EV_POINTER_MOTION_ACTION_SEQUENCE + -- Actions to be performed when screen pointer moves. + -- Defined here as place-holder to be undefined (i.e. joined) to + -- the version from {EV_WIDGET} or {EV_MODEL}. + -- See index clause for information on pick-and-put. + deferred + end + + pick_actions: EV_PND_START_ACTION_SEQUENCE + -- Actions to be performed when `pebble' is picked up. + -- Defined here as place-holder to be undefined by some + -- {EV_WIDGET} or {EV_MODEL}. + deferred + end + + drop_actions: EV_PND_ACTION_SEQUENCE --EV_PND_START_ACTION_SEQUENCE + -- Actions to be performed when a pebble is dropped here. + deferred + end + +feature {NONE} -- Implementation + + recursive_parent_window (a_containable: EV_CONTAINABLE): JJ_MAIN_WINDOW + -- The {JJ_MAIN_WINDOW} which contains this tool. + -- This procedure was provided by Julian Rodgers from the Eiffel + -- users group. + do + check attached {EV_CONTAINER} a_containable.parent as cur_parent then + -- because parent of EV_CONTAINABLE must be an EV_CONTAINER + if attached {JJ_MAIN_WINDOW} cur_parent as w then + Result := w + else + check attached {EV_CONTAINABLE} cur_parent as con_parent then + -- because, if `cur_parent' is not a {JJ_MAIN_WINDOW} it must be EV_CONTAINABLE + Result := recursive_parent_window (con_parent) + end + end + end + ensure + result_exists: Result /= Void + end + +feature {NONE} -- Implemetation + + target_imp: detachable ANY + -- Detachable implementation of `target' for void safety + + views_table: VIEW_TARGET_TABLE + -- Global table associating objects to views + once + create Result + end + + parent_view_imp: detachable VIEW + -- Detachable implementation of `parent_view' + +invariant + +-- not_empty: target_imp /= Void + +end diff --git a/jj_vision/interface/views/window_preferences_view.e b/jj_vision/interface/views/window_preferences_view.e new file mode 100644 index 0000000..1704cef --- /dev/null +++ b/jj_vision/interface/views/window_preferences_view.e @@ -0,0 +1,290 @@ +note + description: "[ + A {VIEW} placed in a {PREFERENCES_WINDOW} for setting the + startup and appearance attributes of a {JJ_MAIN_WINDOW} + ]" + date: "12 Sep 03" + author: "Jimmy J. Johnson" + copyright: "Copyright 2012, Jimmy J. Johnson" + license: "Eiffel Forum License v2 (see forum.txt)" + URL: "$URL: file:///F:/eiffel_repositories/jj_vision/trunk/interface/views/window_preferences_view.e $" + date: "$Date: 2015-10-24 07:32:40 -0700 (Sat, 24 Oct 2015) $" + revision: "$Revision: 23 $" + +class + WINDOW_PREFERENCES_VIEW + +inherit + + SHARED + undefine + default_create, + is_equal + end + + FIXED_VIEW + undefine + copy + redefine + create_interface_objects, + initialize + end + +create + default_create + +feature {NONE} -- Initialization + + create_interface_objects + -- Create objects to be used by `Current' in `initialize' + -- Implemented by descendants to create attached objects + -- in order to adhere to void-safety due to the implementation bridge pattern. + do + Precursor {FIXED_VIEW} + create apply_to_label + create apply_to_combo_box + create hide_menu_check_button + create hide_button_text_check_button + create button_size_label + create button_size_spin_button.make_with_value_range (create + {INTEGER_INTERVAL}.make (Minimum_pixmap_size, Maximum_pixmap_size)) + create language_combo_box + create start_up_options_label + create height_label + create height_spin_button + create width_label + create width_spin_button + create x_position_label + create x_position_spin_button + create y_position_label + create y_position_spin_button + create mode_label + create mode_combo_box + end + + initialize + -- Set up the dialog + do + Precursor {FIXED_VIEW} + hide_menu_check_button.align_text_left + hide_button_text_check_button.align_text_right +-- height_spin_button.align_text_left +-- width_spin_button.align_text_left +-- x_position_spin_button.align_text_left +-- y_position_spin_button.align_text_left + + extend (apply_to_label) + extend (apply_to_combo_box) + extend (hide_menu_check_button) + extend (hide_button_text_check_button) + extend (button_size_label) + extend (button_size_spin_button) + extend (language_combo_box) + extend (start_up_options_label) + extend (height_label) + extend (height_spin_button) + extend (width_label) + extend (width_spin_button) + extend (x_position_label) + extend (x_position_spin_button) + extend (y_position_label) + extend (y_position_spin_button) + extend (mode_label) + extend (mode_combo_box) + + build_widgets + set_actions + end + +feature {NONE} -- Basic operations + + build_widgets + -- Set the apperance and location of all the controls + local + + do +-- Fix so it looks up these interface items + apply_to_label.set_text ("Apply these changes to") + apply_to_combo_box.extend (create {EV_LIST_ITEM}.make_with_text ("All")) + apply_to_combo_box.extend (create {EV_LIST_ITEM}.make_with_text ("New")) + hide_menu_check_button.set_text ("Hide menu bar") + hide_button_text_check_button.set_text ("Hide button text") + language_combo_box.set_text ("English") + start_up_options_label.set_text ("Start-up options") + height_label.set_text ("Height") + width_label.set_text ("Width") + x_position_label.set_text ("X position") + y_position_label.set_text ("Y position") + mode_label.set_text ("Select mode") + button_size_label.set_text ("Button size") + + set_item_position (apply_to_label, Spacing, Spacing) + set_item_position (apply_to_combo_box, + apply_to_label.x_position + apply_to_label.width + Spacing, + apply_to_label.y_position) + set_item_position (hide_menu_check_button, + Spacing, + apply_to_combo_box.y_position + apply_to_combo_box.height + Spacing) + set_item_position (hide_button_text_check_button, + Spacing, + hide_menu_check_button.y_position + hide_menu_check_button.height + Spacing) + set_item_position (button_size_label, + Spacing, + hide_button_text_check_button.y_position + hide_button_text_check_button.height + Spacing) + set_item_position (button_size_spin_button, + button_size_label.x_position + button_size_label.width + Spacing, + button_size_label.y_position) + set_item_position (language_combo_box, + Spacing, + button_size_spin_button.y_position + button_size_spin_button.height + Spacing) + set_item_position (start_up_options_label, + Spacing, + language_combo_box.y_position + language_combo_box.height + Spacing) + set_item_position (height_label, + Spacing + Spacing, + start_up_options_label.y_position + start_up_options_label.height + 2) + set_item_position (height_spin_button, + height_label.x_position + height_label.width + Spacing, + height_label.y_position) + set_item_position (width_label, + Spacing + Spacing, + height_spin_button.y_position + height_spin_button.height + Spacing) + set_item_position (width_spin_button, + height_spin_button.x_position, + width_label.y_position) + set_item_position (x_position_label, + height_spin_button.x_position + height_spin_button.width + Spacing + Spacing, + height_label.y_position) + set_item_position (x_position_spin_button, + x_position_label.x_position + x_position_label.width + Spacing, + x_position_label.y_position) + set_item_position (y_position_label, + x_position_label.x_position, + width_label.y_position) + set_item_position (y_position_spin_button, + y_position_label.x_position + y_position_label.width + Spacing, + y_position_label.y_position) + set_item_position (mode_label, + Spacing, + width_label.y_position + width_label.height + Spacing + Spacing) + set_item_position (mode_combo_box, + mode_label.x_position + mode_label.width + Spacing, + mode_label.y_position) + end + + set_actions + -- Add agents to the controls + do + hide_menu_check_button.select_actions.extend (agent on_hide_menu_option_changed) + hide_button_text_check_button.select_actions.extend (agent on_hide_button_text_check_button_changed) + button_size_spin_button.change_actions.extend (agent on_button_size_spin_button_changed) + end + +feature {NONE} -- Basic operations + + on_hide_menu_option_changed + -- React to a change of the `hide_menu_check_button' by showing ro hiding + -- the menu bar in all the main windows in the system + local + mw: JJ_MAIN_WINDOW + do + from main_windows.start + until main_windows.exhausted + loop + mw := main_windows.item + if not hide_menu_check_button.is_selected and then mw.menu_bar = Void then + mw.show_menu + else + mw.hide_menu + end + main_windows.forth + end + end + + on_hide_button_text_check_button_changed + -- React to a change of the `hide_button_text_check_button' by showing or hiding + -- text on all the buttons in the systems `main_windows'. + local + mw: JJ_MAIN_WINDOW + do + from main_windows.start + until main_windows.exhausted + loop + mw := main_windows.item + if hide_button_text_check_button.is_selected then + mw.hide_button_text + else + mw.show_button_text + end + main_windows.forth + end + end + + on_button_size_spin_button_changed (a_value: INTEGER) + -- React to a change of the `button_size_spin_button' by changing the + -- size of the toolbar buttons in the system's `main_window'. + do + io.put_string ("Fix me! WINDOW_PREFERENCES_VIEW.on_button_size_spin_button_changed %N") + end + +feature {NONE} -- Implementation + + apply_to_label: EV_LABEL + -- Label to go with `apply_to_combo_box' + + apply_to_combo_box: EV_COMBO_BOX + -- Apply settings to one or all windows in system + + hide_menu_check_button: EV_CHECK_BUTTON + -- Check to show main menu + + hide_button_text_check_button: EV_CHECK_BUTTON + -- Check to display text along with the pixmaps on buttons. + + button_size_label: EV_LABEL + -- Label to go with `button_size_spin_button'. + + button_size_spin_button: EV_SPIN_BUTTON + -- Sets the size of the pixmaps (and consequently the size of the buttons). + + language_combo_box: EV_COMBO_BOX + -- Select the language to use + + start_up_options_label: EV_LABEL + -- Simply a heading saying "Start up options". + + height_label: EV_LABEL + -- Label to go with `height_spin_button' + + height_spin_button: EV_SPIN_BUTTON + -- Sets the start-up height of a MAIN_WINDOW + + width_label: EV_LABEL + -- Label to go with `height_spin_button' + + width_spin_button: EV_SPIN_BUTTON + -- Sets the start-up width of a MAIN_WINDOW + + x_position_label: EV_LABEL + -- Label to to with `x_position_spin_button + + x_position_spin_button: EV_SPIN_BUTTON + -- Sets the start-up `x_position' of a MAIN_WINDOW + + y_position_label: EV_LABEL + -- Label to to with `y_position_spin_button + + y_position_spin_button: EV_SPIN_BUTTON + -- Sets the start-up `y_position' of a MAIN_WINDOW + + mode_label: EV_LABEL + -- Label to go with `mode_combo_box' + + mode_combo_box: EV_COMBO_BOX + -- Select the start-up mode of a MAIN_WINDOW + +feature {NONE} -- Implementation (constants) + + Spacing: INTEGER = 10 + +end diff --git a/jj_vision/jj_vision to do list.doc b/jj_vision/jj_vision to do list.doc new file mode 100644 index 0000000..95f4277 Binary files /dev/null and b/jj_vision/jj_vision to do list.doc differ diff --git a/jj_vision/jj_vision.ecf b/jj_vision/jj_vision.ecf new file mode 100644 index 0000000..71fdc3a --- /dev/null +++ b/jj_vision/jj_vision.ecf @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + /.git$ + /.svn$ + /tests$ + /unfinished$ + + + + diff --git a/jj_vision/support/application_state.e b/jj_vision/support/application_state.e new file mode 100644 index 0000000..9c409bd --- /dev/null +++ b/jj_vision/support/application_state.e @@ -0,0 +1,122 @@ +note + description: "[ + Used by {JJ_APPLICATION} to persist "state" attributes (number + of windows, etc.) of the application + ]" + date: "12 Oct 04" + author: "Jimmy J. Johnson" + copyright: "Copyright 2012, Jimmy J. Johnson" + license: "Eiffel Forum License v2 (see forum.txt)" + URL: "$URL: file:///F:/eiffel_repositories/jj_vision/trunk/support/application_state.e $" + date: "$Date: 2012-05-31 14:05:35 -0400 (Thu, 31 May 2012) $" + revision: "$Revision: 10 $" + +class + APPLICATION_STATE + +inherit + + SHARED + redefine + default_create + end + + STATE + redefine + default_create, + make, + set_view_attributes + end + +create + default_create, + make + +feature {NONE} -- Initialization + + default_create + -- Initialize `Current' using the currently running application. + local + wins: LINKED_LIST [JJ_MAIN_WINDOW] + w: JJ_MAIN_WINDOW + ws: MAIN_WINDOW_STATE + do +-- target_id := application.persistence_manager.user_datastore.object_id (application.target) + create window_states.make + wins := main_windows + from wins.start + until wins.exhausted + loop + w := wins.item + ws := w.state + window_states.extend (ws) + wins.forth + end + end + +feature -- Initialization + + make (a_application: JJ_APPLICATION) + -- Initialize `Current'. + do + default_create + end + +feature -- Access + + set_view_attributes + -- Initialize the windows of the applicatin from the attributes of Current. + local + ws: MAIN_WINDOW_STATE + fw, w: detachable JJ_MAIN_WINDOW + do + check + at_least_one_main_window: window_states.count >= 1 + -- Because to save the state an application must have run creating + -- at least one window in the process. + end + + if main_windows.count >= 1 then + -- Close any open windows except one; keep one so application doesn't exit. + -- There may be zero windows if it is starting from a previous state. + from main_windows.start + until main_windows.count <= 1 + loop + main_windows.item.on_close_window + end + -- Hold on to the remaining window + fw := main_windows.first + end + -- Force creation of new windows from the state. + from window_states.start + until window_states.exhausted + loop + ws := window_states.item + -- Force creation of a window by calling `widget'; no need + -- to do anything with `w'. + w := ws.view + w.show + window_states.forth + end + -- Destroy the old, last remaining window. + if fw /= Void then + fw.on_close_window + end + end + +feature {NONE} -- Implementation + +-- system: JJ_SYSTEM +-- target_id: OBJECT_ID + -- The object_id of the data this application will manipulate. + + window_states: LINKED_LIST [MAIN_WINDOW_STATE] + -- The list of windows used by the application. + + new_view: JJ_APPLICATION + -- Redefined to return the current application; not create a new one. + do + Result := application + end + +end diff --git a/jj_vision/support/editor_fixed.e b/jj_vision/support/editor_fixed.e new file mode 100644 index 0000000..06228dd --- /dev/null +++ b/jj_vision/support/editor_fixed.e @@ -0,0 +1,51 @@ +note + description: "[ + An EV_FIXED which can only hold {CONTROL} + ]" + author: "Jimmy J. Johnson" + copyright: "Copyright 2012, Jimmy J. Johnson" + license: "Eiffel Forum License v2 (see forum.txt)" + URL: "$URL: file:///F:/eiffel_repositories/jj_vision/trunk/support/editor_fixed.e $" + date: "$Date: 2012-03-16 14:05:07 -0400 (Fri, 16 Mar 2012) $" + revision: "$Revision: 7 $" + +class + EDITOR_FIXED + +inherit + + EV_FIXED + redefine + initialize +-- item + end + +create + default_create + +feature {NONE} -- Initialization + + initialize + -- Initialize `Current'. + do + Precursor {EV_FIXED} + set_actions + end + + set_actions + -- Add actions to current + do + + end + +feature -- Access + +-- item: CONTROL is +-- -- Redefined to allow only CONTROLs to be placed in current +-- do +-- Result ?= Precursor {EV_FIXED} +-- ensure then +-- valid_result: Result /= Void +-- end + +end diff --git a/jj_vision/support/editor_scroll_area.e b/jj_vision/support/editor_scroll_area.e new file mode 100644 index 0000000..4564554 --- /dev/null +++ b/jj_vision/support/editor_scroll_area.e @@ -0,0 +1,220 @@ +note + description: "[ + Used by the {DIALOG_EDITOR_VIEW} to hold an {EDITOR_FIXED}. This was + a functional decomposition of the dialog editor in order to simplify + scrolling, sizing of the fixed area, and of positioning of controls. + Note: the creation of controls and reacting to events on the + controls is handled elsewhere. + ]" + date: "23 Feb 04" + author: "Jimmy J. Johnson" + copyright: "Copyright 2012, Jimmy J. Johnson" + license: "Eiffel Forum License v2 (see forum.txt)" + URL: "$URL: file:///F:/eiffel_repositories/jj_vision/trunk/support/editor_scroll_area.e $" + date: "$Date: 2012-03-16 14:05:07 -0400 (Fri, 16 Mar 2012) $" + revision: "$Revision: 7 $" + +class + EDITOR_SCROLL_AREA + +inherit + + EV_STOCK_COLORS + rename + implementation as colors_implementation + export + {NONE} all + undefine + default_create, + is_equal, + copy + end + + EV_SCROLLABLE_AREA + redefine + initialize +-- item + end + +create + default_create + +feature {NONE} -- Initialization + + initialize + -- Create an instance + local + f: EDITOR_FIXED + do + Precursor {EV_SCROLLABLE_AREA} + create f + extend (f) + set_actions + end + + set_actions + -- Add actions to current + do + resize_actions.extend (agent resize_fixed) + end + +feature -- Access + +-- item: EDITOR_FIXED is +-- -- Redefined to change type to a EDITOR_FIXED so it +-- -- can be used for custom placement of the controls. +-- do +-- Result ?= Precursor {EV_SCROLLABLE_AREA} +-- ensure then +-- valid_result: Result /= Void +-- end + +feature -- Basic operations + + position_control (a_control: CONTROL) + -- Place `a_control' in the correct spot based on info + -- in the control's `field'. + -- Has no effect if `a_control' is not in Current (in `fixed') + require + control_exists: a_control /= Void + local + f: FIELD + do + check attached {EDITOR_FIXED} item as ef then + -- because currents should only hold and EDITOR_FIXED. + if ef.has (a_control) then + a_control.build + -- `a_control.draw' sets the minimum size + -- of `a_control' then `fixed.set_item_size' + -- changes the "actual size" of `a_control'. + ef.set_item_width (a_control, a_control.minimum_width) + ef.set_item_height (a_control, a_control.minimum_height) + -- Now use the values in the FIELDs of `a_control' + -- to set its position in the page. + f := a_control.field + ef.set_item_position (a_control, f.x.item, f.y.item) + -- Call `resized_fixed' to make the scrollbars in + -- current agree with the new size. + -- This does a lot of re-parenting so ineficient, but + -- if ISE can tell me how to get VIEWPORT.`set_item_size', + -- which was attempted in `resize_fixed', to work then this + -- line can probably come out. + resize_fixed (0,0,0,0) -- the parameters are not used + end + end + end + +feature {NONE} -- Implementation + + resize_fixed (a_x, a_y, a_width, a_height: INTEGER) + -- Change the size of `item' to be at least as big as this + -- scroll area but no bigger than needed based on the + -- controls in `item'. + -- The parameters are there so the feature has the correct + -- signature but are not used in the calculations. + local + x_max, y_max: INTEGER + do +-- -- Must check for parent because `parent_window' makes no +-- -- since if Current is not contained in some container. +-- if parent_window (Current) /= Void then +-- -- This feature is ineficient as is because of all the +-- -- re-parenting that is going on. +-- -- Must `lock_update' from EV_WINDOW to prevent +-- -- severe flickering on all the re-parenting. +-- parent_window (Current).lock_update +-- -- Block the actions so don't get infinite loop +-- resize_actions.block +-- -- Create a new fixed with the correct size to +-- -- replace the wrong sized one. +-- create f +-- -- Transfer all the controls to the new fixed +-- from item.start +-- until item.exhausted +-- loop +-- c := item.item +-- item.remove +-- f.extend (c) +-- end +-- -- Put any actions in `fixed' into the new fixed `f'. +-- f.conforming_pick_actions.merge_right (item.conforming_pick_actions) +-- f.drop_actions.merge_right (item.drop_actions) +-- f.pick_actions.merge_right (item.pick_actions) +-- f.pick_ended_actions.merge_right (item.pick_ended_actions) +-- f.focus_in_actions.merge_right (item.focus_in_actions) +-- f.key_press_actions.merge_right (item.key_press_actions) +-- f.key_press_string_actions.merge_right (item.key_press_string_actions) +-- f.key_release_actions.merge_right (item.key_release_actions) +-- f.pointer_button_press_actions.merge_right (item.pointer_button_press_actions) +-- f.pointer_button_release_actions.merge_right (item.pointer_button_release_actions) +-- f.pointer_double_press_actions.merge_right (item.pointer_double_press_actions) +-- f.pointer_enter_actions.merge_right (item.pointer_enter_actions) +-- f.pointer_leave_actions.merge_right (item.pointer_leave_actions) +-- f.pointer_motion_actions.merge_right (item.pointer_motion_actions) +-- f.resize_actions.merge_right (item.resize_actions) +-- -- Replace `fixed' with the new fixed, `f'. +-- replace (f) +-- -- Make the size of fixed at least as big as Current. +-- f.set_minimum_size (client_width, client_height) +-- resize_actions.resume +-- parent_window (Current).unlock_update +-- end + -- From here down would be used if `set_item_size' from + -- VIEWPORT worked properly. As of 26 Nov 02 ISE can not + -- answer why I get a post-condition violation on the + -- feature even though it passes the pre-conditions. + -- The calls to `item.set_minimum_width (50) were there + -- for testing a probably not needed if `set_item_size' + -- ever works. + if readable then + check attached {EDITOR_FIXED} item as ef then + -- Because current should only hold EDITOR_FIXED widgets. + from ef.start + until ef.exhausted + loop + check attached {CONTROL} ef.item as c then + -- Because all these items should be CONTROLs. + x_max := (c.x_position + c.width).max (x_max) + y_max := (c.y_position + c.height).max (y_max) + ef.forth + end + end + end + item.set_minimum_width (0) + item.set_minimum_height (0) + if x_max < width then + set_item_width (width) + else + set_item_width (x_max) + end + if y_max < height then + set_item_height (height) + else + set_item_height (y_max) + end + end + end + +feature {NONE} -- Implementation + + parent_window (a_containable: EV_CONTAINABLE): EV_WINDOW + -- The EV_WINDOW, if any, which contains Current. + -- This recursive procedure was provided by Julian Rodgers + -- from the Eiffel users group. + require + cotainable_has_parent: a_containable.parent /= Void + do + check attached {EV_CONTAINER} a_containable.parent as cur_parent then + -- because parent of EV_CONTAINABLE must be an EV_CONTAINER + if attached {EV_WINDOW} cur_parent as w then + Result := w + else + check attached {EV_CONTAINABLE} cur_parent as con_parent then + -- because, if not an EV_WINDOW it must be EV_CONTAINABLE + Result := parent_window (con_parent) + end + end + end + end + +end diff --git a/jj_vision/support/history_dropdown.e b/jj_vision/support/history_dropdown.e new file mode 100644 index 0000000..41cecf5 --- /dev/null +++ b/jj_vision/support/history_dropdown.e @@ -0,0 +1,313 @@ +note + description: "[ + Used to create the drop-down lists for the history + buttons in a {TOOL} + ]" + author: "Jimmy J. Johnson" + copyright: "Copyright 2012, Jimmy J. Johnson" + license: "Eiffel Forum License v2 (see forum.txt)" + URL: "$URL: file:///F:/eiffel_repositories/jj_vision/trunk/support/history_dropdown.e $" + date: "$Date: 2014-05-31 08:53:58 -0400 (Sat, 31 May 2014) $" + revision: "$Revision: 17 $" + +class + HISTORY_DROPDOWN + +inherit + + ANY + undefine + default_create, + copy + end + + EV_DIALOG +-- EV_TITLED_WINDOW + rename + item as ev_dialog_item, + extend as ev_dialog_extend, + prune as ev_dialog_prune, + count as ev_dialog_count, + is_empty as ev_dialog_is_empty +-- start as ev_dialog_start, +-- forth as ev_dialog_forth, +-- exhausted as ev_dialog_exhausted + export + {NONE} + all + {ANY} + is_destroyed + redefine + create_interface_objects, + initialize, + show + end + +create + default_create + +feature {NONE} -- Initialization + + create_interface_objects + -- Create objects to be used by `Current' in `initialize' + -- Implemented by descendants to create attached objects + -- in order to adhere to void-safety due to the implementation bridge pattern. + do + Precursor {EV_DIALOG} + create select_actions + create list + end + + initialize + -- Set up current + do + Precursor {EV_DIALOG} + ev_dialog_extend (list) + set_actions + end + + set_actions + -- + do + list.select_actions.extend (agent on_item_selected) + list.focus_out_actions.extend (agent hide) + focus_out_actions.extend (agent hide) + end + +feature -- Access + + parent_tool: TOOL + -- Tool to use for placement of the dialog. + require + has_parent: has_parent_tool + do + check attached parent_tool_imp as t then + Result := t + end + end + + item: HISTORY_ITEM + -- The current item in the `list' + require + not_empty: not is_empty + do + check attached {like item} list.item as hi then + Result := hi + end + ensure + result_exists: Result /= Void + end + + first: like item + -- The first item in the `list' + require + not_empty: not is_empty + do + check attached {like item} list.first as hi then + Result := hi + end + ensure + result_exists: Result /= Void + end + + selected_item: like item + -- Item selected by the user from + do + check attached {like item} list.selected_item as hi then + Result := hi + end + end + + count: INTEGER + -- The number of items in the `list' + do + Result := list.count + ensure + definition: Result = list.count + end + + select_actions: EV_NOTIFY_ACTION_SEQUENCE + -- Actions to be performed when an item is selected. + +feature -- Element change + + extend (a_item: like selected_item) + -- Add `a_item' to the `list' + require + item_exists: a_item /= Void + do + list.extend (a_item) + ensure + item_added: list.has (a_item) + end + + prune (a_item: like item) + -- Remove `a_item' from the `list'. + do + list.prune (a_item) + ensure + item_removed: not list.has (a_item) + end + + set_parent_tool (a_tool: TOOL) + -- Change `parent_tool' + require + tool_exists: a_tool /= Void + do + parent_tool_imp := a_tool + ensure + tool_assigned: parent_tool = a_tool + end + +feature -- Basic operations + + show + -- Request that `Current' be displayed when its parent is. + -- Build the list + do +-- if not list.off then +-- list.item.enable_select +-- end + set_position (parent_tool.target_label.screen_x, parent_tool.target_label.screen_y) + set_width (150) + set_height (150) +-- if not parent_tool.is_view_off then +-- set_title (parent_tool.target.id) +-- end + Precursor {EV_DIALOG} +-- Precursor {EV_TITLED_WINDOW} + end + +feature -- Cursor movement + + start + -- Go to first item in the `list'. + do + list.start + end + + forth + -- Go to next item in the `list' + require + not_after: not is_after + do + list.forth + end + + back + -- Move the `list' cursor back one item. + require + not_before: not is_before + do + list.back + end + + search (a_item: like item) + -- Move to first position (at or after current + -- position) where `item' and `v' are equal. + -- If structure does not include `v' ensure that + -- `exhausted' will be true. + -- This uses reference equality checks + do + list.search (a_item) + end + +feature -- Query + + has_parent_tool: BOOLEAN + -- Does current have a parent of type {TOOL}? + do + Result := attached parent_tool + end + + has_similar_items (a_time_stamped_viewable: like item): BOOLEAN + -- Does current contain a_viewable with + do + from start + until is_exhausted or Result + loop + Result := item.is_simular (a_time_stamped_viewable) + forth + end + end + +feature -- Status report + + is_exhausted: BOOLEAN + -- Is the `list' exhausted? + do + Result := list.exhausted + ensure + definition: Result = list.exhausted + end + + is_off: BOOLEAN + -- Is the `list' cursor past the end or before the first item? + do + Result := list.off + ensure + definition: Result = list.off + end + + is_empty: BOOLEAN + -- Is the `list' empty? + do + Result := list.is_empty + ensure + definition: Result = list.is_empty + end + + is_first: BOOLEAN + -- Is the `list' cursor on the first item? + do + Result := list.isfirst + ensure + definition: Result = list.isfirst + end + + is_last: BOOLEAN + -- Is the `list' cursor on the last item? + do + Result := list.islast + ensure + definition: Result = list.islast + end + + is_before: BOOLEAN + -- Is the `list' cursor before the first item? + do + Result := list.before + ensure + definition: Result = list.before + end + + is_after: BOOLEAN + -- Is the `list' cursor after the last item? + do + Result := list.after + ensure + definition: Result = list.after + end + +feature -- Actions + + on_item_selected + -- React to a list item selection + do + select_actions.call ([list.selected_item]) + end + +feature {NONE} -- Implementation + + list: HISTORY_LIST + -- EV_LIST descendant which holds HISTORY_ITEMs + + parent_tool_imp: detachable like parent_tool + -- Detachable implementation of `parent_tool' for void-safe Eiffel + +invariant + + list_exists: list /= Void + select_actions_exists: select_actions /= Void + +end diff --git a/jj_vision/support/history_item.e b/jj_vision/support/history_item.e new file mode 100644 index 0000000..812dafa --- /dev/null +++ b/jj_vision/support/history_item.e @@ -0,0 +1,158 @@ +note + description: "[ + Item for placement into a {HISTORY_DROPDOWN}, pairing + an {EDITABLE} with a `time_stamp'. + ]" + date: "23 Aug 04" + author: "Jimmy J. Johnson" + copyright: "Copyright 2012, Jimmy J. Johnson" + license: "Eiffel Forum License v2 (see forum.txt)" + URL: "$URL: file:///F:/eiffel_repositories/jj_vision/trunk/support/history_item.e $" + date: "$Date: 2015-10-24 07:32:40 -0700 (Sat, 24 Oct 2015) $" + revision: "$Revision: 23 $" + +class + HISTORY_ITEM + +inherit + + COMPARABLE + undefine + default_create, + copy + end + + VIEW + rename + parent as view_parent, + pixmap as view_pixmap + undefine +-- default_create, + is_equal, + copy + redefine + create_interface_objects, + initialize, + set_target, + draw + end + + EV_LIST_ITEM + rename + object_id as ise_object_id + undefine + is_equal, + is_in_default_state + redefine + create_interface_objects, + initialize + end + +create + make + +feature {NONE} -- Initialization + + create_interface_objects + -- Create objects to be used by `Current' in `initialize' + -- Implemented by descendants to create attached objects + -- in order to adhere to void-safety due to the implementation bridge pattern. + do + Precursor {VIEW} + Precursor {EV_LIST_ITEM} + create time_stamp + end + + initialize + -- Setup current + do + Precursor {EV_LIST_ITEM} + Precursor {VIEW} + end + +feature -- Access + + time_stamp: YMDHMS_TIME + -- To keep track of objects creation time + +feature -- Element change + + set_target (a_target: like target) + -- change `target' + do + Precursor {VIEW} (a_target) + reset_time_stamp + draw + end + + reset_time_stamp + -- Make `time_stamp' be the current system time + do + time_stamp := create {YMDHMS_TIME}.set_now + end + +feature -- Querry + + is_simular (a_other: like Current): BOOLEAN + -- Does Current and other contain the same `target'? + require + other_exists: a_other /= Void + do + Result := target = a_other.target + ensure + definition: Result implies target = a_other.target + end + +feature -- Comparison + + is_less alias "<" (a_other: like Current): BOOLEAN + -- Is Current less than `a_other'? + do + Result := (time_stamp < a_other.time_stamp) + end + +feature {NONE} -- Implementation + + pointer_button_release_actions: EV_POINTER_BUTTON_ACTION_SEQUENCE + -- Actions to be performed when screen pointer button is pressed. + -- Defined here as place-holder to be undefined (i.e. joined) to + -- the version from {EV_WIDGET} or {EV_MODEL}. + -- See index clause for information on pick-and-put. + obsolete + "Do not call; deferred in {VIEW} to implement pick-and-put" + do + create Result + check + do_not_call: false + -- Because this feature should be UNDEFINED and the + -- version from {EV_WIDGET} or {EV_MODEL} called. + end + end + + draw + -- Put the correct text into this EV_LIST_ITEM. + do + if not is_view_empty then + if attached {EDITABLE} target as e then + set_text (e.display_name) + else + set_text (target.generating_type + " " + time_stamp.as_string) + end + end + end + + view_parent: EV_FIXED + -- Not used. + -- Result type is just so it conforms for redefinition. + do + check + do_not_call: False then + end + end + +invariant + + time_stamp_exists: time_stamp /= Void + target_exists: target /= Void + +end diff --git a/jj_vision/support/history_list.e b/jj_vision/support/history_list.e new file mode 100644 index 0000000..72d1c8c --- /dev/null +++ b/jj_vision/support/history_list.e @@ -0,0 +1,48 @@ +note + description: "[ + A list of {VIEWABLE} + ]" + author: "Jimmy J. Johnson" + copyright: "Copyright 2012, Jimmy J. Johnson" + license: "Eiffel Forum License v2 (see forum.txt)" + URL: "$URL: file:///F:/eiffel_repositories/jj_vision/trunk/support/history_list.e $" + date: "$Date: 2012-03-16 14:05:07 -0400 (Fri, 16 Mar 2012) $" + revision: "$Revision: 7 $" + +class + +-- HISTORY_LIST [G -> HISTORY_ITEM] + -- Generics would not work because the assignment attemts in `item' + -- and `selected_item' can not have a assignment target which is + -- a generic type because the type could be expanded. + + HISTORY_LIST + +inherit + + EV_LIST + redefine +-- item, +-- selected_item + end + +create + default_create + +feature -- Access + +-- item: HISTORY_ITEM is +-- -- Redefined to lock in the type +-- do +-- Result ?= Precursor {EV_LIST} +-- end + +-- selected_item: like item is +-- -- Currently selected item. +-- -- Topmost selected item if multiple items are selected. +-- -- Redefined to lock in type +-- do +-- Result ?= Precursor {EV_LIST} +-- end + +end diff --git a/jj_vision/support/jj_file_facilities.e b/jj_vision/support/jj_file_facilities.e new file mode 100644 index 0000000..f703510 --- /dev/null +++ b/jj_vision/support/jj_file_facilities.e @@ -0,0 +1,217 @@ +note + description: "[ + Facilities for verifying file names, extensions, paths, directores, etc." + ]" + author: "Jimmy J. Johnson" + copyright: "Copyright 2009, Jimmy J. Johnson" + license: "Eiffel Forum License v2 (see forum.txt)" + URL: "$URL: file:///F:/eiffel_repositories/jj_support/trunk/jj_other/jj_file_facilities.e $" + date: "$Date: 2014-12-31 09:42:58 -0800 (Wed, 31 Dec 2014) $" + revision: "$Revision: 53 $" + +class + JJ_FILE_FACILITIES + +feature -- Access + + Default_program_path: PATH + -- The path name of directory where the system thinks its executable is located. + -- The default is the directory from where the program was launched. + once + create Result.make_current + end + + Default_data_path: PATH + -- The name of the directory where data objects will be persisted. + once +-- create Result.make_from_string (Default_program_path.name + "/jj_data/data.txt") + create Result.make_from_string ("localhost") + end + + Default_settings_path: PATH + -- The name of the directory where program settings will be persisted + once + create Result.make_from_string (Default_program_path.name + "//jj_settings/settings.dat") + end + +feature -- Querry + + is_valid_file_name (a_name: STRING): BOOLEAN + -- Is `a_name' a valid file name? + require + name_exists: a_name /= Void + local + fn: FILE_NAME + do + if not a_name.is_empty then + create fn.make_from_string (a_name) + Result := fn.is_valid +-- if fn.is_valid then +-- -- Get the last character from the FILE_NAME. Must convert to a STRING +-- -- because features `item' and `count' are not exported from FILE_NAME. +-- c := a_name.string.item (a_name.string.count) +-- Result := is_name_consistent (a_name) and then (c /= '/' and c /= '\') +-- end + end + end + + is_valid_directory_name (a_name: STRING): BOOLEAN + -- Is `a_name' a valid dirrectory name? + require + name_exists: a_name /= Void + local + dn: DIRECTORY_NAME + do + if not a_name.is_empty then + create dn.make_from_string (a_name) + Result := dn.is_valid +-- if fn.is_valid then +-- -- Get the last character from the FILE_NAME. Must convert to a STRING +-- -- because features `item' and `count' are not exported from FILE_NAME. +-- c := a_name.string.item (a_name.string.count) +-- Result := is_name_consistent (a_name) and then (c /= '/' and c /= '\') +-- end + end + end + + is_valid_name (a_name: STRING): BOOLEAN + -- Is `a_name' a consistent file or path name? + -- `A_name' cannot contain the characters *?"<>|. + -- It can only contain a colon, :, as the second character if it has a drive letter. + -- It can only contain the same slashes, either / or \, not both. + require + name_exists: a_name /= Void + name_not_empty: not a_name.is_empty + do + Result := is_valid_file_name (a_name) or else is_valid_directory_name (a_name) +-- Result := not a_name.has ('*') and then +-- not a_name.has ('?') and then +-- not a_name.has ('"') and then +-- not a_name.has ('<') and then +-- not a_name.has ('>') and then +-- not a_name.has ('|') and then +-- not (a_name.has ('\') and then a_name.has ('/')) and then +-- not (a_name.has ('/') and then a_name.has ('\')) and then +-- ((not (a_name.occurrences (':') > 1)) and then +-- ((a_name.occurrences (':') = 1 and then a_name.item (2) = ':' and then a_name.item (1).is_alpha) or else +-- a_name.occurrences (':') = 0)) + end + + is_mergeable (a_path_name: STRING; a_file_name: STRING): BOOLEAN + -- Is `a_path_name' and `a_file_name' mergeable? + require + path_name_exists: a_path_name /= Void + file_name_exists: a_file_name /= Void + local + o: OPERATING_ENVIRONMENT + s: STRING + f: FILE_NAME + do + create o + s := a_path_name.string + separator + a_file_name.string + create f.make_from_string (s) + Result := is_valid_name (f) + end + + file_exists (a_name: FILE_NAME): BOOLEAN + -- Does a file or directory with name `a_name' exist? + -- `A_name' should include the full path. + require + file_name_exists: a_name /= Void + valid_name: is_valid_file_name (a_name) + do + -- Use a RAW_FILE just to check existence; the file + -- will not be read or changed here. + Result := (create {RAW_FILE}.make_with_name (a_name)).exists + end + +feature {NONE} -- Implementation + + separator: STRING + -- Separator used by the operating environment + do + Result := (create {OPERATING_ENVIRONMENT}).directory_separator.out + end + +-- portable_file_name (fn: STRING): FILE_NAME is +-- -- Portable file name representation of `fn' +-- require +-- file_name_exists: fn /= Void +-- file_name_not_empty: not fn.is_empty +-- file_name_consistent: is_name_consistent (fn) +-- local +-- sep: CHARACTER +-- abs: BOOLEAN +-- s: STRING +-- sub: STRING +-- drv: STRING +-- pos: INTEGER +-- o: OPERATING_ENVIRONMENT +-- do +-- create Result.make +-- create o +-- s := clone (fn) +-- sep := separator (s) +-- +-- if s.has (':') then +-- drv := s.substring (1, 2) +-- if Result.is_volume_name_valid (drv) then +-- Result.set_volume (drv) +-- end +-- s.keep_tail (s.count - 2) +-- end +-- +-- if s @ 1 = sep then +-- abs := True +-- end +-- +-- if abs then +-- pos := s.index_of (sep, 2) +-- if pos > 1 then +-- Result.set_directory (s.substring (2, pos - 1)) +-- s.keep_tail (s.count - pos) +-- end +-- end +-- +-- from +-- until +-- not s.has (sep) +-- loop +-- from +-- until +-- s.is_empty or else s @ 1 /= sep +-- loop +-- s.keep_tail (s.count - 1) +-- end +-- +-- pos := s.index_of (sep, 1) +-- sub := s.substring (1, pos - 1) +-- Result.extend (sub) +-- s.keep_tail (s.count - pos) +-- end +-- +-- if s.has ('.') then +-- pos := s.index_of ('.', 1) +-- Result.set_file_name (s.substring (1, pos - 1)) +-- Result.add_extension (s.substring (pos + 1, s.count)) +-- elseif not s.is_empty then +-- Result.set_file_name (s) +-- end +-- end + + merged_file_name (a_path_name: STRING; a_file_name: STRING): STRING + -- File name merged from `a_path_name' and file name `a_file_name' + require + path_name_exists: a_path_name /= Void + file_name_exists: a_file_name /= Void + mergeable: is_mergeable (a_path_name, a_file_name) + local + s: STRING + do + s := a_path_name.string + separator + a_file_name.string + create Result.make_from_string (s) + ensure + result_valid: is_valid_file_name (Result) + end + +end diff --git a/jj_vision/support/main_window_state.e b/jj_vision/support/main_window_state.e new file mode 100644 index 0000000..b3ee763 --- /dev/null +++ b/jj_vision/support/main_window_state.e @@ -0,0 +1,150 @@ +note + description: "[ + Used by {JJ_MAIN_WINDOW} to persist "state" attributes (size, + position, height, width, etc.) of the {JJ_MAIN_WINDOW} + ]" + date: "10 Sep 03" + author: "Jimmy J. Johnson" + copyright: "Copyright 2012, Jimmy J. Johnson" + license: "Eiffel Forum License v2 (see forum.txt)" + URL: "$URL: file:///F:/eiffel_repositories/jj_vision/trunk/support/main_window_state.e $" + date: "$Date: 2012-03-16 14:05:07 -0400 (Fri, 16 Mar 2012) $" + revision: "$Revision: 7 $" + +class + MAIN_WINDOW_STATE + +inherit + + VIEW_STATE + redefine + make, + set_view_attributes, + new_view + end + +create + make + +feature {NONE} -- Initialization + + make (a_window: JJ_MAIN_WINDOW) + -- Initialize from attributes of `a_window'. + do + Precursor {VIEW_STATE} (a_window) + x := a_window.x_position + y := a_window.y_position + width := a_window.width + height := a_window.height + is_minimized := a_window.is_minimized + is_maximized := a_window.is_maximized + target := a_window.target + end + +feature -- Access + + set_view_attributes + -- set up the view + do + view.set_position (x, y) + view.set_size (width, height) + if is_maximized then + view.maximize + elseif is_minimized then + view.minimize + else + view.restore + end + end + + x: INTEGER_32 + -- Stores the `x_position' of a window + + y: INTEGER_32 + -- Stores the `y_position' of a window + + height: INTEGER_32 + -- Stores the `height' of a window + + width: INTEGER_32 + -- Stores the `width' of a window + + is_minimized: BOOLEAN + -- Stores the `is_minimized' state of the window + + is_maximized: BOOLEAN + -- Stores the `is_maximized' state of the window + +feature -- Element change + + set_x (a_value: INTEGER_32) + -- Change `x' + require + value_big_enough: a_value >= 0 + do + x := a_value + end + + set_y (a_value: INTEGER_32) + -- Change `y' + require + value_big_enough: a_value >= 0 + do + y := a_value + end + + set_height (a_value: INTEGER_32) + -- Change `height' + require + value_big_enough: a_value >= 0 + do + height := a_value + end + + set_width (a_value: INTEGER_32) + -- Change `width' + require + value_big_enough: a_value >= 0 + do + width := a_value + end + + set_minimized + -- Make `is_minimized' True + do + is_minimized := True + end + + set_maximized + -- Make `is_maximized' True + do + is_maximized := True + end + +feature {NONE} -- Implementation (constants) + + Default_x: INTEGER = 100 + -- Default value for `x' + + Default_y: INTEGER = 100 + -- Default value for `y' + + Default_height: INTEGER = 300 + -- Default value for `height' + + Default_width: INTEGER = 600 + -- Default value for `width' + +feature {NONE} -- Implementation + + new_view: JJ_MAIN_WINDOW + -- Create the `view_imp' + do + create Result.make (target) + end + +invariant + +-- split_manager_state_exists: split_manager_state /= Void + +end diff --git a/jj_vision/support/s_tree.e b/jj_vision/support/s_tree.e new file mode 100644 index 0000000..c8b3749 --- /dev/null +++ b/jj_vision/support/s_tree.e @@ -0,0 +1,423 @@ +note + description: "[ + A binary-like tree for holding "siblings" or "splits" for use by + {SPLIT_MANAGER}. The tree manages the placement of exactly two child + views into a node of the tree. + ]" + date: "17 Nov 07" + author: "Jimmy J. Johnson" + copyright: "Copyright 2012, Jimmy J. Johnson" + license: "Eiffel Forum License v2 (see forum.txt)" + URL: "$URL: file:///F:/eiffel_repositories/jj_vision/trunk/support/s_tree.e $" + date: "$Date: 2012-05-19 11:28:28 -0400 (Sat, 19 May 2012) $" + revision: "$Revision: 9 $" + +deferred class + S_TREE + +inherit + + ANY + redefine + default_create + end + +feature {NONE} -- Initialization + + default_create + -- Create an empty tree. + do + end + + make (a_view: like root_view) + -- Make a new tree whose `root' node contains `a_view'. + require + view_exists: a_view /= Void + do + create root.make (a_view) + last_node := root + end + +feature -- Access + + root: detachable S_TREE_NODE + -- The root of the tree. + + root_view: VIEW + -- The view in the root node. + require + not_empty: not is_empty + do + check attached root as r then + Result := r.view + end + ensure + result_exists: Result /= Void + end + + last_view: like root_view + -- The `view' in the parent node created when two new nodes are + -- added with a call to `extend'. + require + not_empty: not is_empty + do + check attached last_node as ln then + Result := ln.view + end + end + + descendents: LINKED_SET [attached like root] + -- All the nodes descended from `root' "post-order" (first, second, Current) + do + if attached root as r then + Result := r.descendents + else + create Result.make + end + end + + internal_nodes: LINKED_SET [attached like root] + -- All the descendent nodes of Current which are not leaf (`is_empty') nodes + do + if attached root as r then + Result := r.internal_nodes + else + create Result.make + end + end + + leaf_nodes: LINKED_SET [attached like root] + -- All the descendent nodes which are leaf (`is_empty') nodes. + do + if attached root as r then + Result := r.leaf_nodes + else + create Result.make + end + end + +feature -- Element change + + set_root_view (a_view: like root_view) + -- Change the `view' of `root'. + require + view_exists: a_view /= Void + not_empty: not is_empty + do + check attached root as r then + r.set_view (a_view) + end + end + + set_root (a_node: like root) + -- Set `root' to `a_root'. + require + node_exists: a_node /= Void + do + root := a_node + end + +feature -- Measurement + + count: INTEGER + -- The number of nodes in the tree. + do + if attached root as r then + Result := r.descendents.count + end + end + + leaf_count: INTEGER + -- The number of leaf nodes under `root'. + require + not_empty: not is_empty + do + check attached root as r then + Result := r.leaf_nodes.count + end + end + +feature -- Basic operations + +-- test_print is +-- -- +-- do +-- root.test_print (0) +-- io.new_line +-- io.new_line +-- end + + extend (a_view: VIEW) + -- Add `a_view' as a sibling to the previously added view. + require + view_exists: a_view /= Void + not_has_view: not has (a_view) + local + p, n, internal_n: like root + do + create n.make (a_view) + if attached last_node as ln then + if ln.is_orphan then + create p.make (new_view) + p.set_children (ln, n) + root := p + else + create internal_n.make (new_view) + internal_n.set_children (ln.parent, n) + root := internal_n + end + else + root := n + end +-- if last_node = Void then +-- -- Add as root +-- root := n +-- elseif last_node.parent = Void then +-- create p.make (new_view) +-- p.set_children (last_node, n) +-- root := p +-- else +-- check attached last_node.parent as par then +-- create internal_n.make (new_view) +-- internal_n.set_children (par, n) +-- root := internal_n +-- end +-- end + last_node := n + ensure + has_view: has (a_view) + end + + extend_siblings (a_first, a_second: VIEW) + -- Searching from `root', find the nodes containing `a_first', and/or + -- `a_second' or, if not finding them, create new nodes containing + -- `a_first', and `a_second' and make them children of a new node. + -- Set `last_node' to the new node. + require + first_exists: a_first /= Void + second_exists: a_second /= Void + not_same: a_first /= a_second + has_both_only_if_siblings: (has (a_first) and has (a_second)) implies is_siblings (a_first, a_second) + local + n1, n2: like root + new_internal_n: like root + n: like root + do + if has (a_first) and has (a_second)then + n1 := corresponding_node (a_first) + n2 := corresponding_node (a_second) + check + is_siblings: is_siblings (a_first, a_second) + -- Because of precondition "has_both_only_if_siblings" + end + -- The nodes are siblings already in tree so simply change the + -- `view' contained in the `parent' node of `n1' and `n2' to + -- ensure it matches the type set by `new_view'. + check + attached n1.parent as p then + p.set_view (new_view) + last_node := p + end + elseif has (a_first) or has (a_second) then + create new_internal_n.make (new_view) + if has (a_first) then + check + not_has_second: not has (a_second) + -- because of previous if statement. + end + n1 := corresponding_node (a_first) + create n2.make (a_second) + else + check + has_second: has (a_second) + -- because of previous if statement. + end + n2 := corresponding_node (a_second) + create n1.make (a_first) + end + if n1.is_orphan then + check + is_root: n1 = root + -- Only node without a parent should be the root. + end + root := new_internal_n + last_node := new_internal_n + else + check attached n1.parent as p then + check attached p.other_node (n1) as on then + if n1.is_first (p) then + p.set_children (new_internal_n, on) + else + p.set_children (on, new_internal_n) + end + end + end + end + new_internal_n.set_children (n1, n2) + else -- neither `a_first' or `a_second' is already in tree. + create new_internal_n.make (new_view) + create n1.make (a_first) + create n2.make (a_second) + new_internal_n.set_children (n1, n2) + last_node := new_internal_n + if attached root as r then + n := r + create root.make (new_view) + -- Why is this check required? It will not compile without it. + check attached root as r2 then + r2.set_children (n, new_internal_n) + end + else + root := new_internal_n + end + end + ensure + root_exists: root /= Void +-- new_root: root /= old root + root_is_full: attached root as r and then r.is_full +-- root_has_first_view: root.first.view = a_first +-- root_has_second_view: root.second.view = a_second + end + +feature -- Status report + + is_empty: BOOLEAN + -- Is the tree empty? + do + Result := root = Void + end + + is_adding_vertically: BOOLEAN + -- Are views to be inserted into a {VERTICAL_SPLIT_VIEW}? + -- (Instead of a {HORIZONTAL_SPLIT_VIEW} + +feature -- Status setting + + set_vertical + -- Make new veiws be a {VERTICAL_SPLIT_VIEW} + do + is_adding_vertically := True + end + + set_horizontal + -- Make new view be a {HORIZONTAL_SPLIT_VIEW} + do + is_adding_vertically := False + end + +feature -- Query + + has (a_view: VIEW): BOOLEAN + -- Does Current have a node containing `a_view'? + require + view_exists: a_view /= Void + local + s: like descendents + do + if attached root as r then + s := r.descendents + from s.start + until Result or else s.exhausted + loop + Result := s.item.view = a_view + s.forth + end + end + end + + has_node (a_node: like root): BOOLEAN + -- Does the tree contain `a_node'? + require + node_exists: a_node /= Void + local + s: like descendents + do + check attached root as r then + s := r.descendents + from s.start + until Result or else s.exhausted + loop + Result := s.item = a_node + s.forth + end + end + end + + corresponding_node (a_view: VIEW): attached like root + -- The node containing `a_view'. + require + node_exists: a_view /= Void + has_view: has (a_view) + local + found: BOOLEAN + s: LINKED_SET [attached like root] + n: like root + do + check attached root as r then + n := r + s := r.descendents + from s.start + until found or else s.exhausted + loop + n := s.item + if n.view = a_view then + found := True + end + s.forth + end + Result := n + end + end + + is_siblings (a_first, a_second: VIEW): BOOLEAN + -- Are `a_first' and `a_second' views of nodes which are children of a common parent? + require + first_exists: a_first /= Void + second_exists: a_second /= Void + local + n1, n2: like root + do + if has (a_first) and has (a_second) then + n1 := corresponding_node (a_first) + n2 := corresponding_node (a_second) + Result := n1.parent = n2.parent + end + end + +feature {NONE} -- Implementation + + last_node: like root + -- The last node created while building the tree. To give + -- access to the last view. + + new_view: like root_view + -- Create a new `view'. Used to initialize a new root node. + do + if is_adding_vertically then + create {VERTICAL_SPLIT_VIEW} Result + else + create {HORIZONTAL_SPLIT_VIEW} Result + end + end + + has_invalid_node: BOOLEAN + -- Does Current contain a node whose `view' is Void + local + s: like descendents + do + if attached root as r then + s := r.descendents + from s.start + until Result or else s.exhausted + loop + Result := attached s.item as n and then n.view = Void + s.forth + end + end + end + +invariant + + all_nodes_have_an_view: root /= Void implies not has_invalid_node + +end diff --git a/jj_vision/support/s_tree_node.e b/jj_vision/support/s_tree_node.e new file mode 100644 index 0000000..20f76e1 --- /dev/null +++ b/jj_vision/support/s_tree_node.e @@ -0,0 +1,362 @@ +note + description: "[ + Binary nodes of an {S_TREE} used by {SPLIT_MANAGER}. + The node contains a VIEW, but works specially for {SPLIT_AREA_VIEW} + ]" + date: "17 Nov 07" + author: "Jimmy J. Johnson" + copyright: "Copyright 2012, Jimmy J. Johnson" + license: "Eiffel Forum License v2 (see forum.txt)" + URL: "$URL: file:///F:/eiffel_repositories/jj_vision/trunk/support/s_tree_node.e $" + date: "$Date: 2015-11-03 12:26:31 -0800 (Tue, 03 Nov 2015) $" + revision: "$Revision: 24 $" + +class + S_TREE_NODE + +inherit + + ANY + redefine +-- default_create + end + +create + make + +feature {NONE} -- Initialization + + make (a_view: like view) + -- Create a node holding `a_view' in `view'. + require + view_exists: a_view /= Void + do + view := a_view + ensure + view_set: view = a_view + end + +feature -- Access + + view: VIEW + -- The view in this node. +-- do +-- check attached view_imp as ii then +-- Result := ii +-- end +-- end + + first: like Current + -- First child. + do + check attached first_imp as f then + Result := f + end + end + + second: like Current + -- Second child. + do + check attached second_imp as s then + Result := s + end + end + + parent: like Current + -- Parent of which Current is a child. + do + check attached parent_imp as p then + Result := p + end + end + + other_node (a_node: like Current): detachable like Current + -- The child of current which is not `a_node'. + require + node_exists: a_node /= Void + has_node: has (a_node) + do + if a_node = first then + Result := second + else + Result := first + end + ensure + result_exists: Result /= Void + result_is_child: Result.parent = Current + end + + descendents: LINKED_SET [attached like Current] + -- All the nodes descended from Current "post-order" (first, second, Current) + do + create Result.make + if attached first_imp as f and attached second_imp as s then + Result.merge (f.descendents) + Result.merge (s.descendents) + end + Result.extend (Current) + end + + internal_nodes: LINKED_SET [like Current] + -- All the descendent nodes of Current which are not leaf (`is_empty') nodes + do + create Result.make + if attached first_imp as f and attached second_imp as s then + Result.merge (f.internal_nodes) + Result.merge (s.internal_nodes) + Result.extend (Current) + end + end + + leaf_nodes: LINKED_SET [like Current] + -- All the descendent nodes which are leaf (`is_empty') nodes. + do + create Result.make + if attached first_imp as f and attached second_imp as s then + Result.merge (f.leaf_nodes) + Result.merge (s.leaf_nodes) + else + Result.extend (Current) + end + end + +feature -- Element change + + set_view (a_view: like view) + -- Make Current hold `a_view'. + require + view_exists: a_view /= Void + do + view := a_view + ensure + view_set: view = a_view + end + +-- remove_view +-- -- Make sure `view' is Void +-- do +-- view_imp := Void +-- ensure +-- view_removed: view_imp = Void +-- end + + set_children (a_first, a_second: like Current) + -- Change `first'. + require + first_exists: a_first /= Void + second_exists: a_second /= Void + do + first_imp := a_first + second_imp := a_second + a_first.set_parent (Current) + a_second.set_parent (Current) + ensure + first_set: first = a_first + second_set: second = a_second + first_parent_set: a_first.parent = Current + second_parent_set: a_second.parent = Current + is_full: is_full + end + + set_first (a_first: like Current) + -- Change `first' + require + first_exists: a_first /= Void + is_full: is_full + do + first_imp := a_first + first.set_parent (Current) + ensure + first_set: first = a_first + first_parent_set: first.parent = Current + end + + set_second (a_second: like Current) + -- Change `second' + require + second_exists: a_second /= Void + is_full: is_full + do + second_imp := a_second + second.set_parent (Current) + ensure + second_set: second = a_second + second_parent_set: second.parent = Current + end + + remove_children + -- Make sure current has no children. + require + is_full: is_full + do + if attached first_imp as f then + f.remove_parent + end + if attached second_imp as s then + s.remove_parent + end + first_imp := Void + second_imp := Void + ensure + is_empty: is_empty + end + +feature -- Basic operations + + test_print (indent: INTEGER) + -- Output for testing + local + i: INTEGER + do + from i := 1 + until i > indent + loop + io.put_string ("%T") + i := i + 1 + end + io.put_string ("view = ") + if attached view as it then + io.put_string (it.out) + end + io.new_line + if attached first as f then + f.test_print (indent + 1) + end + if attached second as s then + s.test_print (indent + 1) + end + end + + +feature -- Status report + + is_split: BOOLEAN + -- Does Current contain a node that has a + -- {HORIZONTAL_SPLIT_VIEW} or a {VERTICAL_SPLIT_VIEW}? + do + Result := attached {HORIZONTAL_SPLIT_VIEW} view or + attached {VERTICAL_SPLIT_VIEW} view + end + + is_view: BOOLEAN + -- Is this not a split area? + do + Result := not is_split + end + + is_full: BOOLEAN + -- Does Current have two children? + do + Result := first_imp /= Void and second_imp /= Void + ensure + definition: Result implies first_imp /= Void and second_imp /= Void + end + + is_empty: BOOLEAN + -- Does Current have zero children? + do + Result := first_imp = Void and second_imp = Void + ensure + definition: Result implies first_imp = Void and second_imp = Void + end + + is_orphan: BOOLEAN + -- Does Current has no parent? + do + Result := parent_imp = Void + ensure + definition: Result = (parent_imp = Void) + end + +feature -- Query + + is_child_of (a_node: like Current): BOOLEAN + -- Is Current a child of `a_node'? + require + node_exists: a_node /= Void + do + Result := parent = a_node + ensure + definition: Result implies parent = a_node + end + + has (a_node: like Current): BOOLEAN + -- Is `a_node' a child of Current? + require + node_exists: a_node /= Void + do + Result := first = a_node or else second = a_node + ensure + definition: Result implies first = a_node or else second = a_node + end + + is_first (a_node: like Current): BOOLEAN + -- Is Current the first child of `a_node'? + require + node_exists: a_node /= Void + do + Result := a_node.first = Current + ensure + definition: Result implies a_node.first = Current + end + + is_second (a_node: like Current): BOOLEAN + -- Is Current the second child of `a_node'? + require + node_exists: a_node /= Void + do + Result := a_node.second = Current + ensure + definition: Result implies a_node.second = Current + end + + is_sibling (a_node: like Current): BOOLEAN + -- Is `a_node' a sibling of Current? (I.e. is Current and `a_node' + -- both children of the same node? + require + node_exists: a_node /= Void + do + Result := a_node.parent = parent + ensure + definition: Result implies a_node.parent = parent + end + +feature {S_TREE_NODE} -- Implementation + + set_parent (a_node: like parent) + -- Make `a_node' the parent of Current. + require + node_exists: a_node /= Void + has_child: a_node.has (Current) + do + parent_imp := a_node + ensure + parent_set: parent = a_node + end + + remove_parent + -- Make sure current has no parent. + -- Requires the parent to already have no children + require + not_is_orphan: not is_orphan + not_has_child: parent.is_empty + do + parent_imp := Void + ensure + is_orphan: is_orphan + end + + first_imp: detachable like Current + -- Detachable implementation of `first' for Void safety + + second_imp: detachable like Current + -- Detachable implementation of `second' for Void safety + + parent_imp: detachable like Current + -- Detachable implementation of `parent' for Void safety + +invariant + + zero_or_two_children: is_full or is_empty + +end diff --git a/jj_vision/support/split_manager_node.e b/jj_vision/support/split_manager_node.e new file mode 100644 index 0000000..827a1e4 --- /dev/null +++ b/jj_vision/support/split_manager_node.e @@ -0,0 +1,402 @@ +note + description: "[ + Structure to hold info about splits and views in {SPLIT_MANAGER} + ]" + date: "12 Nov 07" + author: "Jimmy J. Johnson" + copyright: "Copyright 2012, Jimmy J. Johnson" + license: "Eiffel Forum License v2 (see forum.txt)" + URL: "$URL: file:///F:/eiffel_repositories/jj_vision/trunk/support/split_manager_node.e $" + date: "$Date: 2012-05-31 14:05:35 -0400 (Thu, 31 May 2012) $" + revision: "$Revision: 10 $" + +class + SPLIT_MANAGER_NODE + +inherit + + SHARED + undefine + default_create + end + + S_TREE_NODE + redefine + default_create, + make, + test_print + end + +create + default_create, + make + +feature {NONE} -- Initialization + + default_create + -- Create an instance containing an EV_VERTICAL_SPLIT_AREA + do + -- Just to preserve the invariant. + create {VERTICAL_SPLIT_VIEW} view + create toggle_button + create radio_button + create toggle_item + create radio_item + end + + make (a_view: like view) + -- Initialize Current making `view' be `a_view' + local + s: STRING_32 + do + view := a_view + create toggle_button + create radio_button + create toggle_item + create radio_item +-- Fix me!! + -- Add tooltips/help/pixmaps to the buttons + toggle_button.set_tooltip ("Toggle " + a_view.generating_type.out) + toggle_button.set_pixmap (a_view.pixmap) + toggle_item.set_text (a_view.generating_type.out) + if is_view then + enable + show + end + end + +feature -- Access + + visible_widget: EV_WIDGET + -- The view or split area to be shown. + require + is_visible: is_branch_visible + local + w1, w2: detachable EV_WIDGET + split_a: EV_SPLIT_AREA + l_result: detachable EV_WIDGET + do + if is_split then + if first.is_branch_visible then + w1 := first.visible_widget + -- Make sure the widget doesn't have a parent. + if attached {EV_SPLIT_AREA} w1.parent as sa then + sa.prune (w1) + end + end +-- if second /= Void and then second.is_branch_visible then + if second.is_branch_visible then + w2 := second.visible_widget + -- Make sure the widget doesn't have a parent. + if attached {EV_SPLIT_AREA} w2.parent as sa then + sa.prune (w2) + end + end + if w1 /= Void and w2 /= Void then + check + is_visible: is_visible + -- Because both branches are visible (see `is_visible') + end + split_a := split_area + split_a.set_first (w1) + split_a.set_second (w2) + l_result := split_a + elseif w1 /= Void then + l_result := w1 + else + l_result := w2 + end + else + check + is_visible: is_visible + -- Becuase of precondition and this is a leaf node on the branch. + end + check attached {EV_WIDGET} view as w then + -- Because VIEWs should be EV_WIDGET. + l_result := w + end + end + check attached l_result as r then + Result := l_result + end + ensure + result_exists: Result /= Void + end + + split_area: EV_SPLIT_AREA + -- The `view' typecast as a {EV_SPLIT_AREA} + require + is_split: is_split + do + check attached {EV_SPLIT_AREA} view as sa then + Result := sa + end + ensure + result_exists: Result /= Void + end + + split_position: INTEGER + -- The last position of the splitter if this is a split area. + + toggle_button: EV_TOOL_BAR_TOGGLE_BUTTON + -- Button to toggle this view on and off. + + radio_button: EV_TOOL_BAR_RADIO_BUTTON + -- Button to select this view. + + toggle_item: EV_CHECK_MENU_ITEM + -- Menu item for toggling this view on and off. + + radio_item: EV_RADIO_MENU_ITEM + -- Menu item for selecting this view. + + state: SPLIT_MANAGER_NODE_STATE + -- To save the status of current. + do + create Result.make (Current) + end + +feature -- Element change + + set_split_position (a_position: INTEGER) + -- Change split_position + require + positive_position: a_position >= 0 + do + split_position := a_position + end + + save_split_position + -- Save the current splitter offset in `split_position'. + require + is_split: is_split + do +-- if is_full then + split_position := split_area.split_position +-- end + end + + restore_split_position + -- Set the EV_SPLIT_AREA's splitter offset to `split_position'. + require + is_split: is_split + local + sa: EV_SPLIT_AREA + do + sa := split_area + if sa.full then + if split_position < sa.minimum_split_position then + sa.set_split_position (sa.minimum_split_position) + elseif split_position > sa.maximum_split_position then + sa.set_split_position (sa.maximum_split_position) + else + sa.set_split_position (split_position) + end + end + end + + syncronize_buttons + -- Make sure the state of the buttons and menu items agree with the status settings. + do + -- Fix radio items (radios are always selected on syncronize) + radio_button.select_actions.block + radio_item.select_actions.block + radio_button.enable_select + radio_item.enable_select + radio_button.select_actions.resume + radio_item.select_actions.resume + -- Fix toggle buttons. + toggle_item.select_actions.block + toggle_button.select_actions.block + if is_visible then + toggle_button.enable_select + toggle_item.enable_select + else + toggle_button.disable_select + toggle_item.disable_select + end + toggle_button.select_actions.resume + toggle_item.select_actions.resume + end + +feature -- Status report + + is_visible: BOOLEAN + -- Is `widget' visible? (I.e. should it be shown?) + do + if is_view and not is_hidden and not is_disabled then + Result := True + elseif is_split then + Result := first.is_branch_visible and second.is_branch_visible + end + end + + is_branch_visible: BOOLEAN + -- Does the `first' or `second' have a visible branch (recursively)? + do + Result := not is_disabled and then ((is_view and not is_hidden) or else + (is_split and then (first.is_branch_visible or second.is_branch_visible))) + end + + is_hidden: BOOLEAN + -- Is `widget' hidden? Has the user hidden it? + + is_disabled: BOOLEAN + -- Is `widget' not showable? + + is_selected: BOOLEAN + -- Is `widget' the currently selected view? + +feature -- Status setting + + hide + -- Make `is_visible' false. + require + allowed_for_views_only: is_view + do + is_hidden := True + syncronize_buttons + end + + show + -- Make `is_visible' true. + require + allowed_for_views_only: is_view + not_disabled: not is_disabled + do + is_hidden := False + syncronize_buttons + end + + enable + -- Make `is_disabled' False. (Make the `widget' showable) + require + allowed_for_views_only: is_view + do + is_disabled := False + syncronize_buttons + end + + disable + -- Make `is_disabled' True. + require + allowed_for_views_only: is_view + do + is_disabled := True + syncronize_buttons + ensure + is_disabled: is_disabled + end + + block_radio_actions + -- The radio items cause problems with call backs when extended and removed + -- from the toolbar or menu, therefore block the actions until the bar + -- and menu is built. + -- Just block all actions + do + radio_item.select_actions.block + radio_button.select_actions.block + toggle_item.select_actions.block + toggle_button.select_actions.block + end + + resume_radio_actions + -- The radio items cause problems with call backs when extended and removed + -- from the toolbar or menu, therefore block the actions until the bar + -- and menu is built + do + radio_item.select_actions.resume + radio_button.select_actions.resume + toggle_item.select_actions.resume + toggle_button.select_actions.resume + end + +feature -- Testing + + test_print (indent: INTEGER) + -- Show on `io' for testing. + local + i: INTEGER + do + from i := 1 + until i > indent + loop + io.put_string ("%T") + i := i + 1 + end + io.put_string ("item = " + view.generating_type) + io.put_string ("%T") +-- if is_split then +-- io.put_string ("is_split %T") +-- if is_visible then +-- io.put_string ("is_visible") +-- else +-- io.put_string ("NOT visible") +-- end +-- io.put_string ("%T") +-- if is_branch_visible then +-- io.put_string ("is_branch_visible") +-- else +-- io.put_string ("NOT is_branch_visible") +-- end +-- else +-- io.put_string ("NOT is_split") +-- end + io.new_line + if is_split then + first.test_print (indent + 1) + second.test_print (indent + 1) + end + end + +feature {NONE} -- Implementation + + is_buttons_syncronized: BOOLEAN + -- Does the state of each button reflect the objects state? + require + applies_to_view: is_view + do + Result := is_toggle_button_syncronized and then + is_radio_button_syncronized and then + is_toggle_item_syncronized and then + is_radio_item_syncronized + end + + is_toggle_button_syncronized: BOOLEAN + -- Does the state of the `toggle_button' reflect the state of `is_visible' + require + applies_to_view: is_view + do + Result := is_visible implies toggle_button.is_selected + end + + is_radio_button_syncronized: BOOLEAN + -- Does the state of the `radio_button' reflect the state of `is_selected' + require + applies_to_view: is_view + do + Result := is_selected implies radio_button.is_selected + end + + is_toggle_item_syncronized: BOOLEAN + -- Does the state of the `toggle_item' reflect the state of `is_visible' + require + applies_to_view: is_view + do + Result := is_visible implies toggle_item.is_selected + end + + is_radio_item_syncronized: BOOLEAN + -- Does the state of the `radio_item' reflect the state of `is_selected' + require + applies_to_view: is_view + do + Result := is_visible implies toggle_button.is_selected + end + +invariant + + view_has_buttons: is_view implies + (toggle_button /= Void and radio_button /= Void and toggle_item /= Void and radio_item /= Void) + +end diff --git a/jj_vision/support/split_manager_node_state.e b/jj_vision/support/split_manager_node_state.e new file mode 100644 index 0000000..9bf13e4 --- /dev/null +++ b/jj_vision/support/split_manager_node_state.e @@ -0,0 +1,123 @@ +note + description: "[ + Saves the state of a {SPLIT_MANGER_NODE} + ]" + date: "17 Jan 08" + author: "Jimmy J. Johnson" + copyright: "Copyright 2012, Jimmy J. Johnson" + license: "Eiffel Forum License v2 (see forum.txt)" + URL: "$URL: file:///F:/eiffel_repositories/jj_vision/trunk/support/split_manager_node_state.e $" + date: "$Date: 2012-03-16 14:05:07 -0400 (Fri, 16 Mar 2012) $" + revision: "$Revision: 7 $" + +class + SPLIT_MANAGER_NODE_STATE + +inherit + + STATE + redefine + make, + set_view_attributes + end + +create + make + +feature {NONE} -- Initialization + + make (a_node: SPLIT_MANAGER_NODE) + -- Create from the argument + do + is_disabled := a_node.is_disabled + is_selected := a_node.is_selected + is_hidden := a_node.is_hidden + split_position := a_node.split_position + if a_node.is_split then + if attached {EV_VERTICAL_SPLIT_AREA} a_node.split_area then + is_vertical := True + first_node_state := a_node.first.state + second_node_state := a_node.second.state + end + else + is_split := False + view_state := a_node.view.state + end + end + +feature -- Access + + set_view_attributes + -- The `view' initialized from attributes of Current. + local + sa: VIEW + do + if attached view_state as vs then + view.set_view (vs.view) + else + if is_vertical then + create {VERTICAL_SPLIT_VIEW} sa + else + create {HORIZONTAL_SPLIT_VIEW} sa + end + view.set_view (sa) + -- Recusive call...[sort of] + check attached first_node_state as f and attached second_node_state as s then + view.set_children (f.view, s.view) + view.set_split_position (split_position) + end + end + if is_disabled then + view.disable + else + view.enable + end + if is_hidden then + view.hide + else + view.show + end + end + +feature {NONE} -- Implementation + + view_state: detachable VIEW_STATE + -- The state of the `view' in a SPLIT_MANAGER_NODE + + first_node_state: detachable SPLIT_MANAGER_NODE_STATE + -- The state of the node's `first' child + + second_node_state: detachable SPLIT_MANAGER_NODE_STATE + -- The state of the node's `second' child + + is_disabled: BOOLEAN + -- Corresponds to `is_disabled' in SPLIT_MANAGER_NODE + + is_selected: BOOLEAN + -- Corresponds to `is_selected' in SPLIT_MANAGER_NODE + + is_hidden: BOOLEAN + -- Corresponds to `is_hidden' in SPLIT_MANAGER_NODE + + split_position: INTEGER_32 + -- Corresponds to `split_position' in SPLIT_MANAGER_NODE + + is_split: BOOLEAN + -- Records that a node contains a {SPLIT_VIEW} + + is_vertical: BOOLEAN + -- Did the node contain an VERTICAL_SPLIT_VIEW? + +feature {NONE} -- Implementation + + new_view: SPLIT_MANAGER_NODE + -- Create the `view_imp' + do + create Result + end + +invariant + + +end + diff --git a/jj_vision/support/split_manager_state.e b/jj_vision/support/split_manager_state.e new file mode 100644 index 0000000..114d296 --- /dev/null +++ b/jj_vision/support/split_manager_state.e @@ -0,0 +1,111 @@ +note + description: "[ + Used to make a STORABLE object for saving and restoring the + state of a {SPLIT_MANAGER} + ]" + date: "10 Sep 03" + author: "Jimmy J. Johnson" + copyright: "Copyright 2012, Jimmy J. Johnson" + license: "Eiffel Forum License v2 (see forum.txt)" + URL: "$URL: file:///F:/eiffel_repositories/jj_vision/trunk/support/split_manager_state.e $" + date: "$Date: 2012-03-16 17:06:23 -0400 (Fri, 16 Mar 2012) $" + revision: "$Revision: 8 $" + +class + SPLIT_MANAGER_STATE + +inherit + + STATE + redefine + make, + set_view_attributes + end + +create + default_create, + make + +feature {NONE} -- Initialization + + make (a_split_manager: SPLIT_MANAGER) + -- Initialize from attributes of `a_split_manager'. + do + Precursor {STATE} (a_split_manager) + is_mode_frozen := a_split_manager.is_mode_frozen + is_interface_frozen := a_split_manager.is_interface_frozen + is_single_mode := a_split_manager.is_single_mode + is_split_mode := a_split_manager.is_split_mode + is_notebook_mode := a_split_manager.is_notebook_mode + if attached a_split_manager.root as r then + root_state := r.state + end + end + +feature -- Access + + set_view_attributes + -- The manager initialized from the attributes of Current. + do + if attached root_state as rs then + view.set_root (rs.view) + end + if is_mode_frozen then + view.disable_mode_changes + else + view.enable_mode_changes + end + if is_interface_frozen then + view.disable_interface_changes + else + view.enable_interface_changes + end + if is_single_mode then + view.set_single_mode + elseif is_split_mode then + view.set_split_mode + elseif is_notebook_mode then + view.set_notebook_mode + else + check + should_not_happen: False + -- because there are only three modes. + end + end + end + +feature {SPLIT_MANAGER} -- Implementation + + root_state: detachable SPLIT_MANAGER_NODE_STATE + -- Representation of the top (binary) node in the tree. + + is_mode_frozen: BOOLEAN + -- Corresponds to `is_mode_frozen' in SPLIT_MANAGER. + + is_interface_frozen: BOOLEAN + -- Corresponds to `is_veiw_frozen' in SPLIT_MANAGER. + + is_single_mode: BOOLEAN + -- Corresponds to `is_single_mode' in SPLIT_MANAGER. + + is_split_mode: BOOLEAN + -- Corresponds to `is_split_mode' in SPLIT_MANAGER. + + is_notebook_mode: BOOLEAN + -- Corresponds to `is_notebook_mode' in SPLIT_MANAGER. + + selected_view: INTEGER + -- Corresponds to `selected_view' in VIEW_MANAGER but hold an + -- integer index to reference the correct view in `views'. + +feature {NONE} -- Implementation + + new_view: SPLIT_MANAGER + -- Create the `view_imp' + do + create Result + end + +invariant + +end diff --git a/jj_vision/support/state.e b/jj_vision/support/state.e new file mode 100644 index 0000000..ad74f91 --- /dev/null +++ b/jj_vision/support/state.e @@ -0,0 +1,78 @@ +note + description: "[ + Common ancestor to classes used to persist the state + of each {VIEW} in the system + ]" + date: "15 Mar 08" + author: "Jimmy J. Johnson" + copyright: "Copyright 2012, Jimmy J. Johnson" + license: "Eiffel Forum License v2 (see forum.txt)" + URL: "$URL: file:///F:/eiffel_repositories/jj_vision/trunk/support/state.e $" + date: "$Date: 2012-05-31 14:05:35 -0400 (Thu, 31 May 2012) $" + revision: "$Revision: 10 $" + +deferred class + STATE + +--inherit +-- ID_FACILITIES + + +feature {NONE} -- Initialization + + make (a_object: ANY) + -- Create a structure to save the state of an object. + -- This is really for persisting the state of EV_WIDGETs or objects + -- that reference EV_WIDGETs, because EV_WIDGETs have no persistent + -- image. + require + object_exists: a_object /= Void + do + end + +feature -- Access + + frozen view: like new_view + -- The object initialized with the attributes of Current. + -- Redefine to add new attributes after calling Precursor. + do + if attached view_imp as v then + Result := v + else + view_imp := new_view + check attached view_imp as v then + Result := v + end + set_view_attributes + end +-- set_view_attributes + ensure + result_exists: Result /= Void + end + +feature {NONE} -- Implementation + + set_view_attributes + -- Set up the view created from Current + do + end + + application: JJ_APPLICATION + -- Handle to the current application + once + check attached {JJ_APPLICATION} (create {EV_ENVIRONMENT}).application as a then + Result := a + end + end + + new_view: ANY + -- Create the `view_imp' + require + not_already_called: not attached view_imp + deferred + end + + view_imp: detachable like new_view + -- Used to create the view only once + +end diff --git a/jj_vision/support/tool_state.e b/jj_vision/support/tool_state.e new file mode 100644 index 0000000..214035b --- /dev/null +++ b/jj_vision/support/tool_state.e @@ -0,0 +1,71 @@ +note + description: "[ + Used to store the appearance of a {TOOL} + ]" + date: "13 Oct 04" + author: "Jimmy J. Johnson" + copyright: "Copyright 2012, Jimmy J. Johnson" + license: "Eiffel Forum License v2 (see forum.txt)" + URL: "$URL: file:///F:/eiffel_repositories/jj_vision/trunk/support/tool_state.e $" + date: "$Date: 2012-03-16 14:05:07 -0400 (Fri, 16 Mar 2012) $" + revision: "$Revision: 7 $" + +class + TOOL_STATE + +inherit + + VIEW_STATE + redefine + make, + set_view_attributes, + new_view + end + +create + make + +feature {NONE} -- Initialization + + make (a_tool: TOOL) + -- Initialize `Current'. + do + Precursor {VIEW_STATE} (a_tool) + is_maximized := a_tool.is_maximized + is_resizable := a_tool.is_resizable + end + +feature -- Access + + set_view_attributes + -- Create a TOOL from the attributes of Current + do + if is_maximized then + view.maximize + else + view.restore + end + if is_resizable then + view.enable_resize + else + view.disable_resize + end + end + +feature {NONE} -- Implementation + + is_maximized: BOOLEAN + -- Holds the value of a tools `is_maximized' feature. + + is_resizable: BOOLEAN + -- Holds the value of a tools `is_resizable' feature. + + new_view: TOOL + -- Create a new tool + do + check attached {like target_anchor} target as t then + create Result.make (t) + end + end + +end diff --git a/jj_vision/support/view_state.e b/jj_vision/support/view_state.e new file mode 100644 index 0000000..223d83a --- /dev/null +++ b/jj_vision/support/view_state.e @@ -0,0 +1,105 @@ +note + description: "[ + Used to store the appearance of a {VIEW} + This class and descendants are used to capture some + attributes of EV_WIDGETs so that the [appearance of] + the widgets can be persisted and restored. + ]" + date: "13 Oct 04" + author: "Jimmy J. Johnson" + copyright: "Copyright 2012, Jimmy J. Johnson" + license: "Eiffel Forum License v2 (see forum.txt)" + URL: "$URL: file:///F:/eiffel_repositories/jj_vision/trunk/support/view_state.e $" + date: "$Date: 2012-03-16 14:05:07 -0400 (Fri, 16 Mar 2012) $" + revision: "$Revision: 7 $" + +class + VIEW_STATE + +inherit + + STATE + redefine + make, + set_view_attributes + end + +create + make + +feature {NONE} -- Initialization + + make (a_view: VIEW) + -- Initialize `Current'. + local + lin: LINEAR [ANY] + a: ANY +-- ds: DATASTORE + do + target := a_view.target +-- ds := Application.persistence_manager.user_datastore +-- a := a_view.target +-- if a /= Void and then ds.is_stored (a) then +-- target_id := Application.persistence_manager.user_datastore.object_id (a) +-- else +-- target_id := Void_id +-- end +-- create target_id_set.make +-- lin := a_view.objects +-- from lin.start +-- until lin.exhausted +-- loop +-- a := lin.item +-- if a /= Void and then ds.is_stored (a)then +-- target_id_set.extend (Application.persistence_manager.user_datastore.object_id (a)) +-- end +-- lin.forth +-- end +-- FIX ME! +-- split_manager_state := a_view.split_manager.state + end + +feature {NONE} -- Access + +-- FIX ME! +-- split_manager_state: SPLIT_MANAGER_STATE + -- Holds the state of the `split_manager'. + + set_view_attributes + -- Set up the view + do +-- Fix me! +-- view.set_split_manager (split_manager_state.view) + end + +feature {NONE} -- Implementation + + target: ANY + -- The object that was displayed in the {VIEW} from + -- which this state was made + + target_anchor: ANY + -- Type anchor for the creation of a new target of the correct type + -- and to check that retrieval of an object from a DATASTORE is of + -- the correct type. + -- Declared as once to prevent adding an attribute to Current + -- Redefine covariantly descendents of VIEW to correspond to the type + -- of the `target' from the redefined VIEW. + do + check + do_not_call: False then + end + end + + new_view: VIEW + -- Create a new VIEW + -- This must be redefined to remove the check + do + check + must_redefine: False then + -- because do not want this class to be deferred, but + -- {VIEW} is not an effected class and cannot be created + end + end + +end diff --git a/jj_vision/support/view_target_table.e b/jj_vision/support/view_target_table.e new file mode 100644 index 0000000..066d151 --- /dev/null +++ b/jj_vision/support/view_target_table.e @@ -0,0 +1,336 @@ +note + description: "[ + Support class used by {VIEW} to associate a target object with + one or more {VIEW} objects. + ]" + author: "Jimmy J. Johnson" + date: "11/11/23" + copyright: "Copyright (c) 2023, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +class + VIEW_TARGET_TABLE + +inherit + + ANY + redefine + default_create + end + +create + default_create + +feature {NONE} -- Initialization + + default_create + -- Create an instance + do + create views_table.make (100) + create views_list.make + end + +feature -- Access + + linear (a_object: ANY): LINEAR [VIEW] + -- List of views in which `a_object' is displayed. The + -- resulting list could be empty. + local + tup: like views_list.item + found: BOOLEAN + do + -- Assume not found, so result is empty (Void-safety) + Result := (create {LINKED_SET [VIEW]}.make).linear_representation + if attached {HASHABLE} a_object as h then + -- Search the hash table + if views_table.has (h) then + Result := views_table.definite_item (h).linear_representation + found := true + end + else + -- Must do sequential search of `views_list' + from views_list.start + until found or else views_list.after + loop + tup := views_list.item + if tup.object = a_object then + Result := tup.views.linear_representation + found := true + end + views_list.forth + end + end + end + + linear_with_set (a_set: LINEAR [ANY]): LINEAR [VIEW] + -- List of views in which any of the objects in `a_set' + -- is displayed. + local + r: LINKED_SET [VIEW] + do + create r.make + from a_set.start + until a_set.after + loop + r.merge (linear (a_set.item)) + a_set.forth + end + Result := r.linear_representation + end + + linear_representation: LINEAR [VIEW] + -- Linear representation of all the views in the system + local + s: LINKED_SET [VIEW] + r: LINKED_SET [VIEW] + do + create r.make + -- Get views from the table + from views_table.start + until views_table.after + loop + s := views_table.item_for_iteration + r.merge (s) + views_table.forth + end + -- Get views from the set + from views_list.start + until views_list.after + loop + s := views_list.item.views + r.merge (s) + views_list.forth + end + Result := r.linear_representation + end + +feature -- Element change + + extend (a_view: VIEW) + -- Add `a_view' to the list of tracked view/object pairings, + -- associating `a_view' with its `target' for easy lookup + -- by `target'. + -- Note: the `target' may already be associated with some + -- other view, which is okay. + require + not_has_view: not has_view (a_view) + local + set: like views_table.definite_item + tup: like views_list.item + found: BOOLEAN + do + -- Put in table if {HASHABLE} + if attached {HASHABLE} a_view.target as h then + if views_table.has (h) then + -- add `a_view' to an existing list + set := views_table.definite_item (h) + set.extend (a_view) + else + -- make new list containing Current and add it to the table + create set.make + set.extend (a_view) + views_table.extend (set, h) + end + else + -- Not a {HASHABLE} so add to the sequential list + from views_list.start + until found or else views_list.after + loop + tup := views_list.item + if tup.object = a_view.target then + set := tup.views + found := true + end + views_list.forth + end + if found then + -- add to the existing list + check attached set as s then + s.extend (a_view) + end + else + -- add to a new list + create set.make + set.extend (a_view) + views_list.extend ([set, a_view.target]) + end + end + ensure + has_view: has_view (a_view) + has: has (a_view.target) + is_in_list: linear (a_view.target).has (a_view) + end + + prune (a_view: VIEW) + -- Ensure `a_view' is not associated with any target in Current + require + has_view: has_view (a_view) + local + set: like views_table.definite_item + tup: like views_list.item + found: BOOLEAN + do + if attached {HASHABLE} a_view.target as h then + set := views_table.definite_item (h) + set.prune (a_view) + if set.is_empty then + views_table.remove (h) + end + else + -- not {HASHABLE} so remove from `views_list' + from views_list.start + until found or else views_list.after + loop + tup := views_list.item + if tup.object = a_view.target then + found := true + set := tup.views + check + has_view: set.has (a_view) + -- because of precondition and `a_view' must be + -- in the set keyed to its target + end + set.prune (a_view) + end + views_list.forth + end + end + ensure + not_has_view: not has_view (a_view) + end + +feature -- Query + + has (a_object: ANY): BOOLEAN + -- Is there a list of views (one or more views) + -- associated with `a_object'? + local + tup: like views_list.item + do + -- Search `views_table' first + if attached {HASHABLE} a_object as h then + Result := views_table.has (h) + else + -- Must do sequential search of `views_list' + from views_list.start + until Result or else views_list.after + loop + tup := views_list.item + Result := tup.object = a_object + views_list.forth + end + end + end + + has_view (a_view: VIEW): BOOLEAN + -- Does Current contain `a_view'? + local + set: like views_table.item_for_iteration + tup: like views_list.item + v: VIEW + do + -- Must do a sequencial search of both structures. It may be + -- possible to have `a_view' previously associated with some + -- other `target' + from views_table.start + until Result or else views_table.after + loop + set := views_table.item_for_iteration + from set.start + until Result or else set.after + loop + v := set.item + Result := v = a_view + set.forth + end + views_table.forth + end + -- Now check the list + from views_list.start + until views_list.after + loop + tup := views_list.item + set := tup.views + from set.start + until Result or else set.after + loop + v := set.item + Result := v = a_view + set.forth + end + views_list.forth + end + end + +feature {NONE} -- Contract support + + has_bad_table_association: BOOLEAN + -- Is any {VIEW} in the `views_table' NOT associated with the correct + -- key? (I.e. is there a {VIEW} indexed by a key, where that key is + -- NOT the `target' of the associated {VIEW}?) + local + set: like views_table.item_for_iteration + v: VIEW + k: ANY + do + from views_table.start + until Result or else views_table.after + loop + k := views_table.key_for_iteration + set := views_table.item_for_iteration + from set.start + until Result or else set.after + loop + v := set.item + Result := v.target /= k + if Result then + do_nothing + end + set.forth + end + views_table.forth + end + end + + has_bad_list_association: BOOLEAN + -- Is any {VIEW} in the `views_list' NOT associated with the correct + -- key? (I.e. is there a {VIEW} indexed by a key, where that key is + -- NOT the `target' of the associated {VIEW}?) + local + set: like views_table.item_for_iteration + tup: like views_list.item + v: VIEW + do + from views_list.start + until Result or else views_list.after + loop + tup := views_list.item + set := tup.views + from set.start + until Result or else set.after + loop + v := set.item + Result := v.target /= tup.object + set.forth + end + views_list.forth + end + end + +feature {NONE} -- Implementation + + views_table: HASH_TABLE [LINKED_SET [VIEW], HASHABLE] + -- Lists of views indexed by an object where that object is a + -- {HASHABLE} + + views_list: LINKED_LIST [TUPLE [views: LINKED_SET [VIEW]; object: ANY]] + -- Lists of views indexed by an object. This list must be sequentially + -- serched for the list associated with a particular object + + +invariant + +-- not_has_bad_table_association: not has_bad_table_association +-- not_has_bad_list_association: not has_bad_list_association + +end diff --git a/jj_vision/tests/jj_vision_tester.e b/jj_vision/tests/jj_vision_tester.e new file mode 100644 index 0000000..d67c05d --- /dev/null +++ b/jj_vision/tests/jj_vision_tester.e @@ -0,0 +1,55 @@ +note + description: "Root class for testing jj_vision cluster." + author: "Jimmy J. Johnson" + date: "21 Apr 06" + +class + JJ_VISION_TESTER + +inherit + + JJ_APPLICATION + redefine + target, + window_anchor +-- target_anchor + end + +create + make_and_launch + + +feature -- Access + + target: TEST_RECORD + -- For testing + +feature {NONE} -- Implementation (anchors) + + target_anchor: TEST_RECORD + -- Not to be called; just used to anchor types. + -- Declared as a feature to avoid adding an attribute. + require else + not_callable: False + do + check + do_not_call: False then + -- Because give no info; simply used as anchor. + end + end + + window_anchor: TEST_MAIN_WINDOW + -- Anchor for the type of `first_window' + -- Not to be called; just used to anchor types. + -- Declared as a feature to avoid adding an attribute. + require else + not_callable: False + do + check + do_not_call: False then + -- Because give no info; simply used as anchor. + end + end + + +end diff --git a/jj_vision/tests/jj_vision_tester.ecf b/jj_vision/tests/jj_vision_tester.ecf new file mode 100644 index 0000000..afea908 --- /dev/null +++ b/jj_vision/tests/jj_vision_tester.ecf @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + /.git$ + /.svn$ + /CVS$ + /EIFGENs$ + + + + diff --git a/jj_vision/tests/test_main_window.e b/jj_vision/tests/test_main_window.e new file mode 100644 index 0000000..e945eec --- /dev/null +++ b/jj_vision/tests/test_main_window.e @@ -0,0 +1,100 @@ +note + description: "Objects that ..." + author: "" + date: "$Date: 2012-05-31 14:05:35 -0400 (Thu, 31 May 2012) $" + revision: "$Revision: 10 $" + +class + TEST_MAIN_WINDOW + +inherit + + JJ_MAIN_WINDOW + redefine + create_interface_objects, + initialize, + target_imp, + set_target + end + +create + default_create, + make + +feature {NONE} -- Initialization + + create_interface_objects + -- Create objects to be used by `Current' in `initialize' + -- Implemented by descendants to create attached objects + -- in order to adhere to void-safety due to the implementation bridge pattern. + do + Precursor {JJ_MAIN_WINDOW} + create first_tool + create second_tool + create edit_tool + create third_tool + create forth_tool + end + + initialize + -- Set up the window + do + Precursor {JJ_MAIN_WINDOW} +-- split_manager.enable_mode_changes + split_manager.set_vertical + split_manager.extend_siblings (first_tool, edit_tool) + check attached {VERTICAL_SPLIT_VIEW} split_manager.last_view as sa1 then + split_manager.extend_siblings (third_tool, forth_tool) + check attached {VERTICAL_SPLIT_VIEW} split_manager.last_view as sa2 then + split_manager.set_horizontal + split_manager.extend_siblings (sa1, sa2) + end + end +-- split_manager.add_horizontal (split_manager.last_split, create {INTERFACE_TABLE_TOOL}) + split_manager.enable_mode_changes + split_manager.select_view (first_tool) + end + +feature -- Access + + first_tool: TEXT_TOOL + -- To place a tool into the window for testing + + edit_tool: EDIT_TOOL + -- Tool which manages the views for editting a record. + + second_tool: TEST_TOOL + -- To place a second tool into the window for testing. + + third_tool: TEST_TOOL + + forth_tool: TEST_TOOL + +feature -- Element change + + set_target (a_target: like target) + -- Change the `target' and pass it to the `tree_tool'. + do + Precursor {JJ_MAIN_WINDOW} (a_target) + first_tool.set_target (a_target) + edit_tool.set_target (a_target) +-- edit_tool.set_schema (target.Default_schema) + edit_tool.draw + end + + +feature -- Status report + + is_editor_tester_main_window_interface_initialized: BOOLEAN_REF + -- Have the interface items for this class been added to the `interface_table'? + once + create Result +-- is this needed? + end + +feature {NONE} -- Implementation + + target_imp: detachable TEST_RECORD + -- The object being edited + +end diff --git a/jj_vision/tests/test_record.e b/jj_vision/tests/test_record.e new file mode 100644 index 0000000..4d99775 --- /dev/null +++ b/jj_vision/tests/test_record.e @@ -0,0 +1,73 @@ +note + description: "[ + Used to test EDITOR classes. + ]" + instructions: "[ + ]" + author: "Jimmy J. Johnson" + date: "7 Mar 03" + +class + TEST_RECORD + +inherit + +-- JJ_SYSTEM +-- undefine +-- is_equal +-- redefine +-- default_create +-- end + + EDITABLE + redefine + default_create, + Default_schema + end + +create + default_create + +feature {NONE} -- Initialization + + default_create + -- Create an instance for testing + local + s: STRING -- data for testing + d: YMD_TIME -- data for testing + i: INTEGER + do + Precursor {EDITABLE} + create s.make_from_string ("this is a string for testing") + create d.set_now + extend_value (s, "string:") + extend_value (d, "date:") + extend_value (i, "number:") + set_schema (Default_schema) + end + +feature -- Access + + Default_schema: SCHEMA + -- Create a schema for testing + local + sf: STRING_FIELD + df: YMD_TIME_FIELD + int_f: INTEGER_FIELD + once + create Result + create sf + create df + create int_f + sf.set_label ("string:") + df.set_label ("date:") + int_f.set_label ("number:") + sf.set_y (75) + df.set_y (150) + int_f.set_y (225) + Result.extend (sf) + Result.extend (df) + Result.extend (int_f) + end + +end diff --git a/jj_vision/tests/test_tool.e b/jj_vision/tests/test_tool.e new file mode 100644 index 0000000..ed35cae --- /dev/null +++ b/jj_vision/tests/test_tool.e @@ -0,0 +1,79 @@ +note + description: "Objects that ..." + author: "" + date: "$Date: 2013-04-25 18:11:22 -0400 (Thu, 25 Apr 2013) $" + revision: "$Revision: 14 $" + +class + TEST_TOOL + +inherit + + TOOL + redefine + create_interface_objects, + initialize, + build_tool_bars, + add_actions +-- view + end + +create + default_create + +feature {NONE} -- Initialization + + create_interface_objects + -- Create objects to be used by `Current' in `initialize' + -- Implemented by descendants to create attached objects + -- in order to adhere to void-safety due to the implementation bridge pattern. + do + Precursor {TOOL} + create go_previous_button + create go_next_button + go_previous_button.set_pixmap (create {EV_PIXMAP}.make_with_pixel_buffer (Icon_shell_color_buffer)) + go_previous_button.set_tooltip ("TEST_TOOL.go_previous_button") + go_next_button.set_pixmap (create {EV_PIXMAP}.make_with_pixel_buffer (Icon_shell_color_buffer)) + go_next_button.set_tooltip ("TEST_TOOL.go_next_button") + create view.make ("Test String") + end + + initialize + -- Build the interface for this window + do + Precursor {TOOL} + main_container.extend (view) + end + + build_tool_bars + -- Create the two toolbars. + do + Precursor {TOOL} + -- Place buttons in toolbar + tool_bar.extend (go_previous_button) + tool_bar.extend (go_next_button) + tool_bar.extend (create {EV_HORIZONTAL_SEPARATOR}) + end + + add_actions + -- Add functionality to the buttons + do + Precursor {TOOL} +-- go_previous_button.select_actions.extend (agent on_go_previous_button_pressed) +-- go_next_button.select_actions.extend (agent on_go_next_button_pressed) + end + +feature -- Access + + view: JJ_MODEL_WORLD_CELL_VIEW + -- The view controlled by this tool + +feature {NONE} -- Implementation + + go_previous_button: EV_BUTTON --EV_TOOL_BAR_BUTTON + -- Button to move to previous record + + go_next_button: EV_BUTTON --EV_TOOL_BAR_BUTTON + -- Button to move to next record + +end diff --git a/jj_vision/to-do.pages b/jj_vision/to-do.pages new file mode 100644 index 0000000..600b56c Binary files /dev/null and b/jj_vision/to-do.pages differ diff --git a/jj_vision/unfinished/check_box_control.e b/jj_vision/unfinished/check_box_control.e new file mode 100644 index 0000000..eb051ea --- /dev/null +++ b/jj_vision/unfinished/check_box_control.e @@ -0,0 +1,71 @@ +note + description: "Objects that ..." + author: "" + date: "$Date: 2012-03-16 14:05:07 -0400 (Fri, 16 Mar 2012) $" + revision: "$Revision: 7 $" + +class + CHECK_BOX_CONTROL + +inherit + + CONTROL + redefine + value, + field, + default_field, + refresh + end + +create + default_create, + make_from_field + +feature {NONE} -- Initialization + + initialize + -- Set up the control + do + Precursor {CONTROL} + prune (display) + create check_box + extend (check_box) + end + +feature -- Access + + field: CHECK_BOX_FIELD + + value: BOOLEAN + +feature -- Basic operations + + refresh + -- + do + if is_valid (data) then + b ?= data + check + go_assignment: d /= Void -- would not be valid otherwise + end + if b then + enable_select + else + disable_select + end + end + end + +feature {NONE} -- Implementation + + check_box: EV_CHECK_BUTTON + + default_field: CHECK_BOX_FIELD + -- Create a field to be used if Current was `default_create'd. + -- Assume it is a STRING. + do + create Result + end + + +end -- class CHECK_BOX_CONTROL diff --git a/jj_vision/unfinished/check_box_field.e b/jj_vision/unfinished/check_box_field.e new file mode 100644 index 0000000..07a9932 --- /dev/null +++ b/jj_vision/unfinished/check_box_field.e @@ -0,0 +1,45 @@ +note + description: "Objects that ..." + author: "" + date: "$Date: 2012-03-16 14:05:07 -0400 (Fri, 16 Mar 2012) $" + revision: "$Revision: 7 $" + +class + + CHECK_BOX_FIELD + +inherit + + FIELD + redefine + Type, + is_valid + end + +create + default_create + +feature -- Access + + Type: BOOLEAN_REF + -- Implementation (and anchor) of `value'. + -- Redefined to change type. + once + create Result + end + + as_type (a_string: STRING): BOOLEAN + -- Convert `a_string' to an object of `Type'. + do + Result := a_string.same_string (("True").to_upper) + end + +feature -- Transformation + + as_widget: CHECK_BOX_CONTROL + -- Create a control from this field + do + create Result.make_from_field (Current) + end + +end -- class CHECK_BOX_FIELD diff --git a/jj_vision/unfinished/jj_leaf_node_item.e b/jj_vision/unfinished/jj_leaf_node_item.e new file mode 100644 index 0000000..6a6cdc8 --- /dev/null +++ b/jj_vision/unfinished/jj_leaf_node_item.e @@ -0,0 +1,56 @@ +note + description: "[ + A JJ_NODE_ITEM which can hold only a VIEWABLE_LEAF_NODE and placeable + into a JJ_TREE_VIEW. + ]" + author: "Jimmy J. Johnson" + date: "$Date: 2012-03-16 14:05:07 -0400 (Fri, 16 Mar 2012) $" + revision: "$Revision: 7 $" + +class + JJ_LEAF_NODE_ITEM + +inherit + + JJ_NODE_ITEM + redefine + set_actions, + target, + on_drop_node + end + +create + default_create + +feature {NONE} -- Initialization + + set_actions + -- Add actions to the widget, but... + -- remove the actions which will accept a drop of a node, because + -- we cannot add a child node to the `target'. + -- This does not prevent adding other drop actions, even a drop of + -- a node as long as it doesn't add a child node to `target'. + do + Precursor {JJ_NODE_ITEM} + -- clear the drop actions. This is safe at this time because + -- JJ_NODE_ITEM only adds one drop action which is the one that + -- must be removed anyway. + drop_actions.wipe_out + end + +feature -- Access + + target: NODE + -- The node which is displayed by Current. + +feature -- Testing for now + + on_drop_node (a_node: NODE) + -- Can this be done? + do + check + do_not_call: False + end + end + +end diff --git a/jj_vision/unfinished/jj_node_item.e b/jj_vision/unfinished/jj_node_item.e new file mode 100644 index 0000000..828dd5e --- /dev/null +++ b/jj_vision/unfinished/jj_node_item.e @@ -0,0 +1,321 @@ +note + description: "[ + Objects placeable into an EV_TREE, more specifically into a + JJ_TREE_VIEW (a VIEW that holds VIEWABLE_NODEs). This is the + screen representatin of a VIEWABLE_NODE. + ]" + author: "Jimmy J. Johnson" + date: "21 Apr 06" + +class + JJ_NODE_ITEM + +inherit + +-- EV_STOCK_COLORS +-- rename +-- implementation as colors_implementation +-- export +-- {NONE} all +-- undefine +-- default_create, +-- copy, +-- is_equal +-- end + + EV_TREE_ITEM + redefine + initialize, + item, + parent_tree, -- to get correct type + wipe_out, + destroy, + is_destroyed + end + + VIEW + rename + parent as parent_from_view_not_to_be_used + undefine +-- default_create, + is_equal, + copy + redefine + initialize, + target, + set_target, + draw, + parent_tool, + destroy, + is_destroyed + end + +create + default_create + +feature {NONE} -- Initialization + + initialize + -- Create an instance. + do + Precursor {VIEW} + Precursor {EV_TREE_ITEM} +-- enable_pebble_positioning +-- set_pebble_position (0, 0) + set_actions + end + + set_actions + -- Add actions to the widget + do + pick_actions.force_extend (agent enable_select) + drop_actions.extend (agent on_drop_node) + pointer_double_press_actions.force_extend (agent on_double_click) + end + +feature -- Access + + target: NODE + -- The node which is displayed by Current. + + level: INTEGER + -- The indention level this node should occupy in the tree. + + item: JJ_NODE_ITEM + -- Current item. + -- Redefined to change the type + do + Result ?= Precursor {EV_TREE_ITEM} + end + + parent_tree: JJ_TREE_VIEW + -- Contains Current + -- Redefined to change type. + do + Result ?= Precursor {EV_TREE_ITEM} + end + + parent_tool: JJ_TREE_TOOL + -- The TOOL which contains this view. + -- Can not be Void. + do + Result := parent_tree.parent_tool + ensure then + result_exists: Result /= Void + end + +feature -- Element change + + wipe_out + -- Clean out the view + do + recursive_do_all (agent clear_viewables) +-- remove_all_viewables + Precursor {EV_TREE_ITEM} + end + + clear_viewables (a_node: EV_TREE_NODE) + -- + local + ti: JJ_NODE_ITEM + do + ti ?= a_node + if ti /= Void then + ti.remove_all_targets + end + end + + set_target (a_target: like target) + -- Change `target' + do + Precursor {VIEW} (a_target) + set_pebble (a_target) + set_data (a_target) + set_accept_cursor (yes_cursor (a_target)) + set_deny_cursor (no_cursor (a_target)) +-- if a_object.can_adopt then +-- drop_actions.append (a_object.adopt_actions) +-- end + draw + end + + set_level (a_level: INTEGER) + -- Change `level' + do + level := a_level + ensure + level_was_set: level = a_level + end + +feature -- Status + + is_viewing_ancestors: BOOLEAN + -- Are the nodes in the tree sorted by anscestors? + + is_destroyed: BOOLEAN + -- Is `Current' no longer usable? + do + Result := Precursor {VIEW} and Precursor {EV_TREE_ITEM} + end + +feature -- Status setting + + destroy + -- Destroy underlying native toolkit object. + -- Render `Current' unusable. + do + Precursor {VIEW} + Precursor {EV_TREE_ITEM} + end + + view_ancestors + -- Make the view display ancestor nodes + do + is_viewing_ancestors := True + end + + view_descendants + -- Make the view dispay descendant nodes + do + is_viewing_ancestors := False + end + +feature -- Querry + + has_object_item (a_target: NODE): BOOLEAN + -- Does Current contain an item with `target' equal to `a_target'? + require + target_exists: a_target /= Void + do + from start + until Result or else exhausted + loop + Result := item.target = a_target + forth + end + end + +feature -- Basic operations + + draw + -- Add children of `a_item.data' to the tree + local + n: NODE + n_list: LINEAR [NODE] + ti: JJ_NODE_ITEM + pix: EV_PIXMAP + p_view: JJ_TREE_VIEW + p_tool: TOOL + p_win: JJ_MAIN_WINDOW + do + if parent_tree /= Void then + p_view := parent_tree + p_tool := p_view.parent_tool + p_win ?= p_tool.parent_window +-- p_win ?= parent_window + if p_view /= Void and then p_win /= Void then --p_view.is_displayed and p_win /= Void then + -- This check seems to be needed to keep the view from being drawn + -- even when it is not shown. Evidently draw gets called even if + -- the TREE in which Current resides is not in any JJ_MAIN_WINDOW. + -- (`parent_window' relies on a recursive search for Current in + -- any descendents. If no main_window has the tree in which Current + -- resides then `parent_window' is Void + n ?= p_win.target + check + n_exists: n /= Void + -- because the parent must be a NODE_TREE_VIEW and the + -- `target' of it must be a NODE + end + if target /= Void then + if n.descendants.has (target) then + set_text (display_name (target)) + else + set_text (display_name (target) + " " + interface_table.short_name ("not in system text")) + end + pix := (interface_table.pixmap (display_name (target))).twin +-- FIX ME!! Changing the pixmap in order to put a not simble over it if +-- not in system seems to be causing problems. Specificly, it violates post- +-- condition of `set_pixmap'. Work on this later, or do my own tree. +-- pix.set_background_color (Red) +-- pix.set_size (100, 300) +---- pix.fill_rectangle (pix.x_position + 5, pix.y_position, 100, 20) +---- pix.fill_rectangle (5, 0, 100, 20) +-- pix.set_line_width (3) +-- pix.draw_segment (0,0, pix.width, pix.height) + remove_pixmap + set_pixmap (pix) +---- pixmap.set_background_color (Red) +---- pixmap.set_size (100, pixmap.height) +---- pixmap.set_size (100, 100) +---- pixmap.fill_rectangle (pixmap.x_position + 5, pixmap.y_position, 100, 20) +---- pixmap.fill_rectangle (5, 0, 100, 20) +---- wipe_out + if parent_tree.is_viewing_ancestors then + n_list := target.parents + else + n_list := target.children + end + -- clean out items which should no longer be here + end + from start + until exhausted + loop + if not n_list.has (item.target) then + item.wipe_out -- to remove all the views + remove + else + forth + end + end + -- Add new items + from n_list.start + until n_list.exhausted + loop + n := n_list.item +-- n_list.forth + if not has_object_item (n) then -- prevents duplicates + ti := parent_tree.new_tree_item (n) + extend (ti) + ti.set_target (n) + end + n_list.forth + end + end + end + end + +feature {NONE} -- Actions + + on_drop_node (a_node: NODE) + -- React to a drop of `a_node' by adding `a_node' as child to + -- the `target'? + local + c: ADD_NODE_COMMAND + do + create c + c.set_parent_node (target) + c.set_child_node (a_node) + command_manager.add_command (c) + end + + on_double_click + -- React to a mouse double click by opening a NAMER_VIEW. +-- local +-- nv: NAMER_VIEW + do +-- create nv +-- nv.set_target (target) +-- nv.set_position (50,50) + end + +feature {NONE} -- Inaplicable + + parent_from_view_not_to_be_used: EV_CONTAINER + -- Redefined to effect it (was deferred from VIEW); it + -- does no good in this class as the parent of a EV_TREE_ITEM + -- does not conform to the parent of most VIEWs which should + -- be EV_CONTAINERs. + do + end + +end diff --git a/jj_vision/unfinished/jj_tree_tool.e b/jj_vision/unfinished/jj_tree_tool.e new file mode 100644 index 0000000..2b9949c --- /dev/null +++ b/jj_vision/unfinished/jj_tree_tool.e @@ -0,0 +1,309 @@ +note + description: "[ + TOOL used to hold a JJ_TREE_VIEW for displaying a hierarchical + structure of VIEWABLE_NODEs. + ]" + author: "Jimmy J. Johnson" + date: "21 Apr 06" + +class + JJ_TREE_TOOL + +inherit + + TOOL + redefine + initialize, + initialize_interface, + set_actions, + target, + set_target, + set_button_states, + draw + end + +create + default_create + +feature {NONE} -- Initialization + + initialize + -- Set up the window + do + create tree_view + -- Create the new buttons before Precursor {TOOL} so `initialize' + -- can call `set_actions' without a Void reference. + create target_system_button + create new_node_button + create view_descendants_button + create view_ancestors_button + create cut_button + -- "Register" the widgets with the `interface_table' in use by the + -- current program (from SHARED in the "Standard Interface" cluster). + interface_table.register_widget (target_system_button, "{JJ_TREE_TOOL} - target_system") + interface_table.register_widget (new_node_button, "{JJ_TREE_TOOL} - new_node") + interface_table.register_widget (view_descendants_button, "{JJ_TREE_TOOL} - view_descendants") + interface_table.register_widget (view_ancestors_button, "{JJ_TREE_TOOL} - view_ancestors") + interface_table.register_widget (cut_button, "{JJ_TREE_TOOL} - cut") + interface_table.register_widget (Current, generating_type) + -- Create the tool and its views + Precursor {TOOL} + -- Add the buttons to the `tool_bar' (from TOOL) + tool_bar.extend (target_system_button) + tool_bar.extend (new_node_button) + tool_bar.extend (view_descendants_button) + tool_bar.extend (view_ancestors_button) + tool_bar.extend (cut_button) + -- Set up the views in this tool. +-- view_manager.enable_mode_changes + split_manager.extend (tree_view) + set_actions_for_views + end + + initialize_interface + -- Create INTERFACE_ITEMs which could be used by Current. + -- Called by `initialize'. + do + -- Only add an interface item for Current if its `interface_name' has + -- not already been added; the other items are specific for this tool + -- and most likely will not be redefine, so no need to check inclusion + -- of these in the `interface_table'. + -- In redefinitions of this feature call this at the end of the redefinition + -- so an item for the `interface_name' can be added to the `interface_table'. + if not interface_table.has_key (generating_type) then + interface_table.add_item_with_tuple (<< generating_type, "JJ_TREE_TOOL", "Node tree tool", "Used to view relationships between nodes.", "icon_format_feature_descendants_color.ico">>) + end + interface_table.add_item_with_tuple (<<"{JJ_TREE_TOOL} - target_system", "Target System", "Make System be the target", "Set the target of this tool to the applications system.", "icon_object_symbol.ico">>) + interface_table.add_item_with_tuple (<<"{JJ_TREE_TOOL} - new_node", "New Node", "Create a new node", "Create a new node.", "icon_cluster_symbol_color.ico">>) + interface_table.add_item_with_tuple (<<"{JJ_TREE_TOOL} - view_descendants", "Descendents", "View descendants", "Show the descendent relationships of targeted object.", "icon_format_descendants_color.ico">>) + interface_table.add_item_with_tuple (<<"{JJ_TREE_TOOL} - view_ancestors", "Ancestors", "View Ancestors", "Show the ancestor relationships of targeted object.", "icon_format_ancestors_color.ico">>) + interface_table.add_item_with_tuple (<<"{JJ_TREE_TOOL} - cut", "Cut relationship", "Cut the link to the selected node", "Cut this link to the selected node.", "icon_cut_color.ico">>) + -- Call Precursor after current is set up. Specifically after the interface + -- item for Current's `interface_name' is added. (see above) + Precursor {TOOL} + end + + set_actions + -- Add actions to the widgets + do + Precursor {TOOL} + target_system_button.select_actions.extend (agent on_target_system_button_pressed) + new_node_button.select_actions.extend (agent on_new_node_button_pressed (agent new_node)) + view_descendants_button.select_actions.extend (agent on_view_descendants_button_pressed) + view_ancestors_button.select_actions.extend (agent on_view_ancestors_button_pressed) + cut_button.select_actions.extend (agent on_cut_button_pressed) + end + + set_actions_for_views + -- Add actions to the views. This can only be done after the views are + -- created. Because `set_actions' is called in the precursor to `initialize' + -- this feature had to be added in order to access the "views" after they + -- are created in `initialize' with the calls to `register_view_function' + -- from `view_manager'. + do + tree_view.select_actions.extend (agent set_button_states) + end + +feature -- Access + + target: NODE + -- The object handled by this tool. + + tree_view: JJ_TREE_VIEW + -- The VIEW which actually does the displaying of + -- the nodes in a tree. + +feature -- Element change + + set_target (a_target: like target) + -- Change the `target' of the tool. + -- Redefined to propegate `a_target' to the `tree_view'. + do + Precursor {TOOL} (a_target) + tree_view.set_target (a_target) + draw + set_button_states + end + +feature -- Basic operations + + draw + -- Builds the string shown at top of the tool in `viewable_label' + -- using the id of the object. + local + s: STRING + n: NODE + pw_test: ANY + do + Precursor {TOOL} + -- Reminder: `target_label' is built in Precursor {TOOL}; it fills in + -- the `display_name' if the TOOL's target is an EDITALBE, else it uses + -- the generating type of the target. + -- So, this redefined version simply addes the "not in system text" + -- to the display name if necessary. + s := target_label.tooltip + pw_test := parent_window.target + n ?= parent_window.target + check + n /= Void + end + if n /= Void and then not n.descendants.has (target) then + s := s + " " + interface_table.short_name ("not in system text") + end + target_label.set_tooltip (s) + set_button_states + end + + set_button_states + -- Set the states of the buttons. + local + n: NODE + do + Precursor {TOOL} + check + tree_view_exists: tree_view /= Void + end + if tree_view.target = Void then + new_node_button.disable_sensitive + cut_button.disable_sensitive + view_descendants_button.disable_sensitive + view_ancestors_button.disable_sensitive + else + view_descendants_button.enable_sensitive + view_ancestors_button.enable_sensitive + n := tree_view.selected_target + if n.can_adopt then + new_node_button.enable_sensitive + else + new_node_button.disable_sensitive + end + if n /= target then + cut_button.enable_sensitive + else + cut_button.disable_sensitive + end + end + end + +feature {NONE} -- Implementation (actions) + + on_target_system_button_pressed + -- React to a press of the `target_system_button' by retargetting + -- the view to the application's `target' and view descendents mode. + local + app: JJ_APPLICATION + vn: NODE + do + app ?= (create {EV_ENVIRONMENT}).application + check + app_exists: app /= Void + -- Because this class is only used by JJJ_APPLICATIONs + end + vn ?= app.target + if vn /= Void then + set_target (vn) + end + if tree_view.selected_item /= Void then + tree_view.selected_item.disable_select + end + set_button_states + end + + on_new_node_button_pressed (a_function: FUNCTION [NODE]) + -- React to a press of the `new_node_button' by creating a + -- new node using `a_function' and make the new node a child + -- under the currently selected node. + local + c: ADD_NODE_COMMAND + ti: EV_TREE_NODE + new_n, n: NODE + do + new_n := a_function.item ([]) + create c + n := tree_view.selected_target + c.set_parent_node (n) + c.set_child_node (new_n) + command_manager.add_command (c) + -- restore the selected object after a draw + ti := tree_view.retrieve_item_recursively_by_data (n, False) + if ti /= Void then + ti.enable_select + end + end + + new_node: EDITABLE_NODE + -- Creation feature for a new node, used in `on_new_node_button_pressed'. + do + create Result + ensure + result_exists: Result /= Void + end + + on_view_ancestors_button_pressed + -- React to a press of the `view_ancestors_button' by changing + -- the `view' to ancestors mode. + do + tree_view.set_view_ancestors + end + + on_view_descendants_button_pressed + -- React to a press of the `view_descendants_button' by changing + -- the `view' to descendants mode. + do + tree_view.set_view_descendants + end + + on_cut_button_pressed + -- React to a press of the `cut_button' by removing the current node + -- from its parent. (Does not necessarily delete from the system, but + -- the node could be deleted if this is its only location in the tree.) + require + not_viewing_ancestors: not tree_view.is_viewing_ancestors + cannot_cut_target_from_its_parent: tree_view.selected_target /= target + local + nti: JJ_NODE_ITEM + nti_parent: JJ_NODE_ITEM + parent_n: NODE + n: NODE + c: CUT_NODE_COMMAND + do + n := tree_view.selected_target + nti := tree_view.selected_item + nti_parent ?= nti.parent + if nti_parent = Void then + parent_n := target + check + parent_n.children.has (n) + -- because otherwise we have the wrong parent + end + else + parent_n := nti_parent.target + end + create c + c.set_parent_node (parent_n) + c.set_child_node (n) + command_manager.add_command (c) + -- Set the selected item to the `target' because we just deleted + -- the selected item. + draw_views (target) + end + +feature {NONE} -- Implementation (Buttons) + + target_system_button: EV_TOOL_BAR_BUTTON + -- To restore the application's `system' as the target of the view. + + new_node_button: EV_TOOL_BAR_BUTTON + -- To create a new DATABASE_RECORD. + + view_descendants_button: EV_TOOL_BAR_BUTTON + -- To make the tree show descendants (recursively) of the `target'. + + view_ancestors_button: EV_TOOL_BAR_BUTTON + -- To make the tree show descendants (recursively) of the `target'. + + cut_button: EV_TOOL_BAR_BUTTON + -- To cut the link between a parent node and the currently selected node + +end + diff --git a/jj_vision/unfinished/jj_tree_view.e b/jj_vision/unfinished/jj_tree_view.e new file mode 100644 index 0000000..b1815ed --- /dev/null +++ b/jj_vision/unfinished/jj_tree_view.e @@ -0,0 +1,236 @@ +note + description: "[ + Hierachical screen representation of VIEWABLE_NODEs. + ]" + author: "Jimmy J. Johnson" + date: "21 Apr 06" + +class + JJ_TREE_VIEW + +inherit + + EV_TREE + redefine + initialize, + item, + selected_item, + destroy, + is_destroyed + end + + VIEW + undefine +-- default_create, + copy, + is_equal + redefine + initialize, + target, + set_target, + draw, + parent_tool, + destroy, + is_destroyed + end + +create + default_create + +feature {NONE} -- Initialization + + initialize + -- Set up the object + do + create item_list.make + Precursor {VIEW} + Precursor {EV_TREE} + -- The tree is really just a root node, therefore there is only + -- one `target' in this VIEW, and the sub-nodes are themselves VIEWs + -- containing its own object. + set_actions + end + + set_actions + -- Add actions to the widgets. + do + drop_actions.extend (agent on_drop_target) + end + +feature -- Access + + target: NODE + -- The object this view will display. + + selected_item: JJ_NODE_ITEM + -- Currently selected item at any level within tree hierarchy. + do + Result ?= Precursor {EV_TREE} + end + + selected_target: like target + -- The object (data) in the `selected_item' + require + target_exists: target /= Void + do + if selected_item /= Void then + Result := selected_item.target + else + Result := target + end + ensure + result_exists: Result /= Void + no_item_selected_result: selected_item = Void implies Result = target + end + + item: JJ_NODE_ITEM + -- Current item (node) in the tree. + do + Result ?= Precursor {EV_TREE} + end + + parent_tool: JJ_TREE_TOOL + -- The JJ_TREE_TOOL which contains this view. + -- Can not be Void. + do + Result ?= Precursor {VIEW} + ensure then + result_exists: Result /= Void + end + +feature -- Element change + + set_target (a_target: like target) + -- Change the value of `target'. + do + Precursor {VIEW} (a_target) + draw + end + +feature -- Status report + + is_viewing_ancestors: BOOLEAN + -- Are the clusters in the tree sorted by anscestors? + + is_destroyed: BOOLEAN + -- Is `Current' no longer usable? + do + Result := Precursor {VIEW} and Precursor {EV_TREE} + end + +feature -- Status setting + + set_view_descendants + -- Change to an descendants view + do + is_viewing_ancestors := False + if not is_draw_disabled then + draw + end + end + + set_view_ancestors + -- Change to an anscestors view + do + is_viewing_ancestors := True + if not is_draw_disabled then + draw + end + end + +feature -- Basic operations + + destroy + -- Destroy underlying native toolkit object. + -- Render `Current' unusable. + do + Precursor {VIEW} + Precursor {EV_TREE} + end + + draw + -- Build the view + local + t: like target + tn: EV_TREE_NODE + n_list: BILINEAR [NODE] + do + -- Get the selected object + t := selected_target + -- Clean out the tree + from start + until exhausted + loop + remove + end + -- Rebuild the tree recursively + if target /= Void then + if is_viewing_ancestors then + n_list := target.parents + else + n_list := target.children + end + from n_list.start + until n_list.exhausted + loop + -- Pass the type to `next_tree_item' to get the correct + -- type of tree_item. + root_item := new_tree_item (n_list.item) + extend (root_item) + -- But must also call `set_target' on that tree_item + -- to force a draw (recursively). + root_item.set_target (n_list.item) +-- expand_clusters + if root_item.is_expandable then + root_item.expand + end + n_list.forth + end + end + if t /= Void then + tn := retrieve_item_recursively_by_data (t, False) + if tn /= Void then + tn.enable_select + end + end + end + +feature {NONE} -- Implementation (actions) + + on_drop_target (a_target: like target) + -- React to a drop of `a_target'. + require + target_exists: a_target /= Void + do + parent_tool.set_target (a_target) + end + +feature {NONE} -- Implementation + + root_item: JJ_NODE_ITEM + -- Top-most item in the tree. + -- Reminder: this is a EV_WIDGET which holds the data; not the data. + + item_list: LINKED_LIST [JJ_NODE_ITEM] + -- List of items which are in the view + -- Reminder: these items are EV_WIDGETs which holds the data; not the data. + +feature {JJ_NODE_ITEM} -- Implementation + + new_tree_item (a_node: NODE): JJ_NODE_ITEM + -- Create a new JJ_NODE_ITEM. + -- `target' to `a_node'. + require + node_exists: a_node /= Void + do + if a_node.can_adopt then + Result := create {JJ_NODE_ITEM} + else + Result := create {JJ_LEAF_NODE_ITEM} + end + Result.set_target (a_node) + ensure + result_exists: Result /= Void + end + +end diff --git a/jj_vision/unfinished/label_control.e b/jj_vision/unfinished/label_control.e new file mode 100644 index 0000000..bfe3f0e --- /dev/null +++ b/jj_vision/unfinished/label_control.e @@ -0,0 +1,56 @@ +class LABEL_CONTROL + +inherit + + CONTROL + rename + make as control_make + redefine + set_height, set_width + end + +create + make + +feature -- Initialization + + make (a_parent: WEL_COMPOSITE_WINDOW) + do + control_make (a_parent) + create static.make (Current, "New_Text", 0, 0, width, height, -1) + end + + set_height (a_height: INTEGER) + do + resize (width, a_height) + static.set_height (height) + end + + set_width (a_width: INTEGER) + do + resize (a_width, height) + static.set_width (width) + end + +feature + + set_data (a_string: STRING) + do + static.set_text (a_string) + end + + data: STRING + do + Result := static.text + end + + is_data_valid: BOOLEAN + do + Result := True + end + +feature {NONE} -- Implementation + + static: WEL_STATIC + +end -- class LABEL_CONTROL diff --git a/jj_vision/unfinished/left_aligned_scrollable_area.e b/jj_vision/unfinished/left_aligned_scrollable_area.e new file mode 100644 index 0000000..c185601 --- /dev/null +++ b/jj_vision/unfinished/left_aligned_scrollable_area.e @@ -0,0 +1,269 @@ +note + description: "[ + Objects that represent a scrollable area in which the contents are always aligned with the top left while + smaller than client area. + + When using this control, you must be careful of the following things: + + An action sequence is connected to the idle_actions of the application from time to time. As it is removed, + it is the final agent contained, so if you must add to the idle actions, you should not add at the last position. + + An agent is connected to the `resize_actions' of the widget inserted. If you clear this action sequence, `Current' + will not update as the widget size changes. Removing the widget via `remove_item' removes the final agent from + `resize_actions'. + + None of the inherited features for addition and removal of widget does not work correctly. Use `add_item' + and `remove_item' only. + ]" + author: "Julian Rogers" + date: "$Date: 2012-03-16 14:05:07 -0400 (Fri, 16 Mar 2012) $" + revision: "$Revision: 7 $" + +class + LEFT_ALIGNED_SCROLLABLE_AREA + +inherit + EV_VERTICAL_BOX + redefine + initialize, + is_in_default_state + end + +feature {NONE} -- Creation + + initialize + -- Initialize `Current'. + local + h_box: EV_HORIZONTAL_BOX + do + create cell + create viewport + create vertical_scroll_bar + vertical_scroll_bar.change_actions.extend (agent scroll_vertically) + create horizontal_scroll_bar + horizontal_scroll_bar.change_actions.extend (agent scroll_horizontally) + horizontal_scroll_bar.hide + vertical_scroll_bar.hide + create horizontal_box + extend (horizontal_box) + create main_fixed + viewport.extend (main_fixed) + create h_box + extend (h_box) + h_box.extend (horizontal_scroll_bar) + cell.set_minimum_size (vertical_scroll_bar.minimum_width, horizontal_scroll_bar.minimum_height) + h_box.extend (cell) + h_box.disable_item_expand (cell) + cell.hide + + disable_item_expand (h_box) + horizontal_box.extend (viewport) + horizontal_box.extend (vertical_scroll_bar) + horizontal_box.disable_item_expand (vertical_scroll_bar) + + resize_actions.extend (agent resized) + + is_initialized := True + end + + +feature -- Access + + add_item (an_item: EV_WIDGET) + -- Add `an_item' to `Current'. + require + an_item_not_void: an_item /= Void + do + main_fixed.extend (an_item) + main_fixed.set_item_position (an_item, 0, 0) + the_item := an_item + the_item.resize_actions.extend (agent item_resized) + resized (0, 0, 0, 0) + ensure + item_set: the_item = an_item + end + +feature -- Status report + + the_item: EV_WIDGET + -- Item currently contained. + +feature -- Status setting + + remove_item + -- Remove item from `Current' + do + if the_item /= Void then + main_fixed.wipe_out + the_item := Void + the_item.resize_actions.go_i_th (the_item.resize_actions.count) + the_item.resize_actions.remove + end + ensure + no_item_contained: the_item = Void + end + + +feature {NONE} -- Implementation + + item_resized (an_x, a_y, a_width, a_height: INTEGER) + -- `the_item' has been resized, respond by updating `Current'. + do + resized (0, 0, width, height) + end + + resized (an_x, a_y, a_width, a_height: INTEGER) + -- `Current' has been resized. Determine if the scroll bars must be updated, and if necessary + -- connect an idle action that executes `update_scroll_bars' if their visible status has changed. + -- The visible status of the scroll bars must not be updated via `show' or `hide' during execution of + -- this feature as it is called from within the resize. Resizing a Vision2 interface during a resize + -- event is dangerous in this situation. Hence we must connect `update_scroll_bars' to perform the update + -- when the resizing is completed from the idle actions. + do + clear_visibility_flags + if the_item /= Void then + if viewport.width < the_item.width then + if not horizontal_scroll_bar.is_show_requested then + show_horizontal := True + end + horizontal_scroll_bar.value_range.adapt (create {INTEGER_INTERVAL}.make (0, the_item.width - viewport.width)) + horizontal_scroll_bar.set_leap (viewport.width.max (1)) + elseif horizontal_scroll_bar.is_show_requested then + hide_horizontal := True + end + if viewport.height < the_item.height then + if not vertical_scroll_bar.is_show_requested then + show_vertical := True + end + + vertical_scroll_bar.value_range.adapt (create {INTEGER_INTERVAL}.make (0, the_item.height - viewport.height)) + vertical_scroll_bar.set_leap (viewport.height.max (1)) + elseif vertical_scroll_bar.is_show_requested then + hide_vertical := True + end + + -- Ensure that as `Current' is enlarged, if the scroll positions are non zero, the + -- item tends towards the zero position. + if viewport.y_offset > 0 and the_item.height - viewport.y_offset < viewport.height then + viewport.set_y_offset ((the_item.height - viewport.height).max (0)) + end + if viewport.x_offset > 0 and the_item.width - viewport.x_offset < viewport.width then + viewport.set_x_offset ((the_item.width - viewport.width).max (0)) + end + if show_horizontal or hide_horizontal or show_vertical or hide_vertical and not idle_actions_connected then + idle_actions_connected := True + application.idle_actions.extend (agent update_scroll_bars) + end + end + end + + update_scroll_bars + -- Actually perform hiding and showing of scroll bars deferred from `resized'. + -- Note that we must recompute the scroll bar values, as the widgets may have been resized since we + -- originally flagged that there must be a change of visibility. + do + if show_vertical then + vertical_scroll_bar.show + end + if hide_vertical then + vertical_scroll_bar.hide + end + if show_horizontal then + horizontal_scroll_bar.show + end + if hide_horizontal then + horizontal_scroll_bar.hide + end + + if horizontal_scroll_bar.is_show_requested and vertical_scroll_bar.is_show_requested then + cell.show + else + cell.hide + end + + if show_vertical or show_horizontal or hide_horizontal or hide_vertical then + if vertical_scroll_bar.is_show_requested then + vertical_scroll_bar.value_range.adapt (create {INTEGER_INTERVAL}.make (0, the_item.height - viewport.height)) + vertical_scroll_bar.set_leap (viewport.height.max (1)) + end + + if horizontal_scroll_bar.is_show_requested then + horizontal_scroll_bar.value_range.adapt (create {INTEGER_INTERVAL}.make (0, the_item.width - viewport.width)) + horizontal_scroll_bar.set_leap (viewport.width.max (1)) + end + end + + + -- Ensure that as `Current' is enlarged, if the scroll positions are non zero, the + -- item tends towards the zero position. + if viewport.y_offset > 0 and the_item.height - viewport.y_offset < viewport.height then + viewport.set_y_offset ((the_item.height - viewport.height).max (0)) + end + if viewport.x_offset > 0 and the_item.width - viewport.x_offset < viewport.width then + viewport.set_x_offset ((the_item.width - viewport.width).max (0)) + end + + + -- Remove the idle action as leaving it hogs the CPU. + application.idle_actions.go_i_th (application.idle_actions.count) + application.idle_actions.remove + idle_actions_connected := False + end + + show_vertical, hide_vertical, show_horizontal, hide_horizontal, show_cell, hide_cell: BOOLEAN + -- Flags to determine if the visible state of widgets must be updated. + + clear_visibility_flags + -- Clear visibility flags to False. + do + show_vertical := False + show_horizontal := False + hide_horizontal := False + hide_vertical := False + end + + + scroll_vertically (new_value: INTEGER) + -- Respond to a scrolling of `vertical_scroll_bar'. + do + viewport.set_y_offset (new_value) + end + + scroll_horizontally (new_value: INTEGER) + -- Respond to a scrolling of `horizontal_scroll_bar'. + do + viewport.set_x_offset (new_value) + end + + is_in_default_state: BOOLEAN = True + -- Is `Current' in its default state. + + idle_actions_connected: BOOLEAN + -- Is the idle event for showing scroll bars already connected? + + vertical_scroll_bar: EV_VERTICAL_SCROLL_BAR + -- Vertical scroll bar comprising `Current'. + + horizontal_scroll_bar: EV_HORIZONTAL_SCROLL_BAR + -- Horizontal scroll bar comprising `Current'. + + horizontal_box: EV_HORIZONTAL_BOX + -- Horizontal box comprising `Current'. + + viewport: EV_VIEWPORT + -- Viewport comprising `Current'. + + main_fixed: EV_FIXED + -- The Fixed required in `Current'. + + cell: EV_CELL + -- A cell placed betwen the corners of the scroll bars. + + application: EV_APPLICATION + -- Once access to EV_APPLICATION. + once + --((create {EV_ENVIRONMENT}).application).idle_actions.extend (agent update_scroll_bars) + Result := ((create {EV_ENVIRONMENT}).application) + end + +end -- class LEFT_ALIGNED_SCROLLABLE_AREA diff --git a/jj_vision/unfinished/ymd_duration_control.e b/jj_vision/unfinished/ymd_duration_control.e new file mode 100644 index 0000000..b11cb50 --- /dev/null +++ b/jj_vision/unfinished/ymd_duration_control.e @@ -0,0 +1,144 @@ +class YMD_DURATION_CONTROL + +inherit + + WEL_SS_CONSTANTS + export + {NONE} all + end + + WEL_EN_CONSTANTS + export + {NONE} all + end + + YMD_DURATION_PARSER + rename + make as parser_make + export + {NONE} all + end + + CONTROL + redefine + make, + on_control_command, + set_height, + set_width + end + +create + make + +feature -- Initialization + + make (a_parent: WEL_COMPOSITE_WINDOW) + local + button_size: INTEGER + do + parser_make + Precursor (a_parent) + create static.make (Current, "", 0, 0, 50, 20, -1) + create up_button.make (Current, "+", 40, 0, 10, 10, -1) + create down_button.make (Current, "-", 40, 10, 10, 10, -1) + end + + set_height (a_height: INTEGER) + local + but_size: INTEGER + do + Precursor (a_height) + but_size := height // 2 + static.set_height (height) + static.set_width (width - but_size-1) + up_button.set_x (static.width+1) + down_button.set_y (static.width+1) + up_button.set_height (but_size) + up_button.set_width (but_size) + down_button.set_height (but_size) + down_button.set_width (but_size) + end + + set_width (a_width: INTEGER) + local + but_size: INTEGER + do + Precursor (a_width) + but_size := height // 2 + static.set_width (width - but_size-1) + up_button.set_x (static.width+1) + down_button.set_x (static.width+1) + end + + +feature {NONE} -- Messages + + on_control_command (control: WEL_CONTROL) + local + temp: WEL_CONTROL_WINDOW + do + temp ?= parent + if control = up_button then + increment + temp.notify (Current, En_change) + elseif control = down_button then + decrement + temp.notify (Current, En_change) + else + end + end + +feature -- Access + + data: YMD_DURATION +-- data: YMD_DURATION is +-- do +-- Result := date +-- end + +feature -- Element Change + + set_data (a_duration: YMD_DURATION) + do + data := a_duration + static.set_text (to_string (data)) + end + +feature -- Status report + + is_data_valid: BOOLEAN + do + Result := True + end + + +feature {NONE} -- Implementation + + static: WEL_STATIC + + up_button: WEL_PUSH_BUTTON + + down_button: WEL_PUSH_BUTTON + + increment + local + one_day: YMD_DURATION + do + create one_day.make + one_day.set (0,0,1) + data.add (one_day) + static.set_text (to_string (data)) + end + + decrement + local + one_day: YMD_DURATION + do + create one_day.make + one_day.set (0,0,1) + data.sub (one_day) + static.set_text (to_string(data)) + end + + +end diff --git a/jj_vision/unfinished/ymd_interval_control.e b/jj_vision/unfinished/ymd_interval_control.e new file mode 100644 index 0000000..70ce957 --- /dev/null +++ b/jj_vision/unfinished/ymd_interval_control.e @@ -0,0 +1,109 @@ +class YMD_INTERVAL_CONTROL + +inherit + + WEL_EN_CONSTANTS + export + {NONE} all + end + + JJJ_CONTROL + redefine + make, + notify, + set_height, + set_width + end + +create + make + +feature -- Initialization + + make (a_parent: WEL_COMPOSITE_WINDOW) + do + Precursor (a_parent) + create start_date_edit.make (Current) + create finish_date_edit.make (Current) + create duration_edit.make (Current) + create data.make + start_date_edit.set_x (5) + start_date_edit.set_y (5) + finish_date_edit.set_x (5) + finish_date_edit.set_y (start_date_edit.y + start_date_edit.height + 5) + duration_edit.set_x (5) + duration_edit.set_y (finish_date_edit.y + finish_date_edit.height + 5) + end + + set_height (a_height: INTEGER) + do + Precursor (a_height) + finish_date_edit.set_y (start_date_edit.y + start_date_edit.height + 5) + end + + set_width (a_width: INTEGER) + do + Precursor (a_width) + start_date_edit.set_width (width-10) + finish_date_edit.set_width (width-10) + duration_edit.set_width (width-10) + end + +feature -- Access + + data: YMD_INTERVAL + +feature -- Element Change + + set_data (a_interval: like data) + do + data := a_interval + start_date_edit.set_data (data.start) + finish_date_edit.set_data (data.finish) + duration_edit.set_data (data.duration) + end + +feature -- Status report + + is_data_valid: BOOLEAN + do +-- if is_valid_date_string (text) then +-- set_date_string (text) + Result := True +-- end + end + + +feature {NONE} -- Messages + + notify (a_control: WEL_CONTROL; a_notify_code: INTEGER) + local + p: WEL_COMPOSITE_WINDOW + do + if a_notify_code = En_change then + if a_control = start_date_edit or a_control = finish_date_edit then + data.set_start_finish (start_date_edit.data, finish_date_edit.data) + elseif a_control = duration_edit then + if not duration_edit.data.is_negative then + data.set_start_duration (start_date_edit.data, duration_edit.data) + end + else + end + set_data (data) + end + p ?= parent + if p /= Void then + p.notify (Current, En_change) + end + end + +feature {NONE} -- Implementation + + start_date_edit: JJJ_EDIT_DATE + + finish_date_edit: JJJ_EDIT_DATE + + duration_edit: JJJ_EDIT_YMD_DURATION + + +end -- class YMD_INTERVAL_CONTROL diff --git a/jj_vision/unfinished/ymd_interval_field.e b/jj_vision/unfinished/ymd_interval_field.e new file mode 100644 index 0000000..6879186 --- /dev/null +++ b/jj_vision/unfinished/ymd_interval_field.e @@ -0,0 +1,42 @@ +class YMD_INTERVAL_FIELD + -- creates an edit box. + +inherit + + FIELD + redefine + make + end + +create + make + + +feature -- Initialization + + make + do + Precursor + set_height (150) + end + +feature -- Access + + data: YMD_INTERVAL + once + create Result.make + end + +feature -- Transformation + + as_control (a_parent: WEL_COMPOSITE_WINDOW): JJJ_EDIT_YMD_INTERVAL + do + create Result.make (a_parent) + Result.set_x (x) + Result.set_y (y) + Result.set_width (width) + Result.set_height (height) + Result.set_data (data) + end + +end -- class DMY_INTERVAL_FIELD diff --git a/jj_vision/unfinished/ymdhms_duration_control.e b/jj_vision/unfinished/ymdhms_duration_control.e new file mode 100644 index 0000000..a726def --- /dev/null +++ b/jj_vision/unfinished/ymdhms_duration_control.e @@ -0,0 +1,205 @@ +note + description: "Objects that ..." + author: "" + date: "$Date: 2012-03-16 14:05:07 -0400 (Fri, 16 Mar 2012) $" + revision: "$Revision: 7 $" + +class + YMDHMS_DURATION_CONTROL + +inherit + + EV_KEY_CONSTANTS + export + {NONE} all + undefine + default_create, + copy, + is_equal + end + + YMDHMS_DURATION_CONSTANTS + export + {NONE} all + undefine + default_create, + copy, + is_equal + end + + CONTROL + redefine + initialize, + value_imp, + is_value_valid, + draw + end + +create + default_create + +feature -- Initialization + + initialize + do + Precursor {CONTROL} + create parser.make + create static + create up_button + create down_button + extend (static) + extend (up_button) + extend (down_button) + position_widgets + set_actions + end + + position_widgets + -- Set the size and location of each widget in `Current' + do + static.set_minimum_width (150) + up_button.set_text ("+") + down_button.set_text ("-") + up_button.set_minimum_size (static.height // 2, static.height // 2) + down_button.set_minimum_size (static.height // 2, static.height // 2) +-- set_item_size (up_button, up_button.width, static.height // 2) +-- set_item_size (down_button, down_button.width, static.height // 2) + set_item_position (up_button, static.width, 0) + set_item_position (down_button, static.width, static.height // 2) + end + + set_actions + -- Add actions to the widgets + do + up_button.select_actions.extend (agent increment_value) + down_button.select_actions.extend (agent decrement_value) + static.key_press_actions.extend (agent on_key_press) + end + +-- set_height (a_height: INTEGER) is +-- local +-- but_size: INTEGER +-- do +-- Precursor (a_height) +-- but_size := height // 2 +-- static.set_height (height) +-- static.set_width (width - but_size-1) +-- up_button.set_x (static.width+1) +-- down_button.set_y (static.width+1) +-- up_button.set_height (but_size) +-- up_button.set_width (but_size) +-- down_button.set_height (but_size) +-- down_button.set_width (but_size) +-- end +-- +-- set_width (a_width: INTEGER) is +-- local +-- but_size: INTEGER +-- do +-- Precursor (a_width) +-- but_size := height // 2 +-- static.set_width (width - but_size-1) +-- up_button.set_x (static.width+1) +-- down_button.set_x (static.width+1) +-- end + +feature -- Access + +feature -- Element Change + +feature -- Status report + + is_value_valid: BOOLEAN + do +-- FIX ME !!! + Result := True + end + +feature -- Basic operations + + draw + -- Update the screen representation (ie `static'). This feature + -- is not called directly from Current; it is called by + -- JJJ_CONTROL.`set_value'. + do + static.set_text (parser.to_string (value_imp)) + end + +feature {NONE} -- Implementation + + increment_value + -- Increase the value by one unit. Unit is based + -- on position of caret within the edit box. + do + change_value (1) + change_actions.call ([]) + end + + decrement_value + -- Decrease the value by one unit. Unit is based + -- on position of caret within the edit box. + do + change_value (-1) + change_actions.call ([]) + end + + change_value (sign: INTEGER) + -- Change the value by + or - one unit based on `sign' + require + valid_sign: sign = 1 or sign = -1 + local + pos: INTEGER + do + pos := static.caret_position + if parser.is_index_in_year_string (value_imp, pos) then + value_imp.add (One_year * sign) + elseif parser.is_index_in_month_string (value_imp, pos) then + value_imp.add (One_month * sign) + elseif parser.is_index_in_day_string (value_imp, pos) then + value_imp.add (One_day * sign) + elseif parser.is_index_in_hour_string (value_imp, pos) then + value_imp.add (One_hour * sign) + elseif parser.is_index_in_minute_string (value_imp, pos) then + value_imp.add (One_minute * sign) + elseif parser.is_index_in_second_string (value_imp, pos) then + value_imp.add (One_second * sign) + else + end + draw + static.set_caret_position (pos) + end + + on_key_press (a_key: EV_KEY) + -- Process a key pressed in static + do + if a_key.code = Key_up then + increment_value + static.set_caret_position ((static.caret_position - 1).max (0)) + -- to move the caret back after the key press + -- otherwise it move forward one position. + elseif a_key.code = Key_down then + decrement_value + static.set_caret_position ((static.caret_position + 1).max (0)) + -- to move the caret back after the key press + -- otherwise it move forward one position. + else + end + end + +feature {NONE} -- Implementation + + value_imp: YMDHMS_DURATION + -- Implementation (and anchor) of `value'. + -- Redefined to change type. + + static: EV_TEXT_FIELD + + up_button: EV_BUTTON + + down_button: EV_BUTTON + + parser: YMD_TIME_PARSER +-- parser: YMDHMS_DURATION_PARSER + -- For converting `value' to and from strings + +end -- class YMDHMS_DURATION_CONTROL diff --git a/jj_vision/unfinished/ymdhms_interval_control.e b/jj_vision/unfinished/ymdhms_interval_control.e new file mode 100644 index 0000000..c8b0574 --- /dev/null +++ b/jj_vision/unfinished/ymdhms_interval_control.e @@ -0,0 +1,164 @@ +note + description: "Objects that ..." + author: "" + date: "$Date: 2012-03-16 14:05:07 -0400 (Fri, 16 Mar 2012) $" + revision: "$Revision: 7 $" + +class + YMDHMS_INTERVAL_CONTROL + +inherit + + CONTROL + redefine + initialize, + value_imp, + is_value_valid, + draw + end + +create + default_create + +feature {NONE} -- Initialization + + initialize + local + lab: EV_LABEL + do + Precursor {JJJ_CONTROL} + create start_date_edit + create finish_date_edit + create duration_edit + + extend (start_date_edit) + extend (finish_date_edit) + extend (duration_edit) + + create lab.make_with_text ("Start") + extend (lab) + set_item_position (lab, 0, 0) +-- set_item_width (lab, 20) + create lab.make_with_text ("Finish") + extend (lab) + set_item_position (lab, 0, 30) + create lab.make_with_text ("Duration") + extend (lab) + set_item_position (lab, 0, 60) +-- set_item_width (lab, 20) + set_item_position (start_date_edit, lab.width + 5, 0) + set_item_position (finish_date_edit, lab.width +5, 30) + set_item_position (duration_edit, lab.width + 5, 60) +-- set_item_width (start_date_edit, 150) +-- set_item_width (finish_date_edit, 150) +-- set_item_width (duration_edit, 150) + +-- !! duration_edit.make (Current) +-- !! value.make + +-- start_date_edit.set_x (5) +-- start_date_edit.set_y (5) +-- finish_date_edit.set_x (5) +-- finish_date_edit.set_y (start_date_edit.y + start_date_edit.height + 5) +-- duration_edit.set_x (5) +-- duration_edit.set_y (finish_date_edit.y + finish_date_edit.height + 5) + + set_actions + end + + set_actions + -- Add actions to the widgets in `Current' + do + start_date_edit.change_actions.extend (agent on_start_changed) + finish_date_edit.change_actions.extend (agent on_finish_changed) + duration_edit.change_actions.extend (agent on_duration_changed) + end + +feature -- Access + +feature -- Element Change + +feature -- Status report + + is_value_valid: BOOLEAN + do +-- if is_valid_date_string (text) then +-- set_date_string (text) + Result := True +-- end + end + +feature -- Basic operations + + draw + -- Update the screen representation of Current by simply loading + -- the various pieces of `value_imp' into the proper controls. + -- This feature is called from JJJ_CONTROL.`set_value'. + do + start_date_edit.set_value (value_imp.start) + finish_date_edit.set_value (value_imp.finish) + duration_edit.set_value (value_imp.duration) + end + +feature {NONE} -- Implementation + + on_start_changed + -- Start has changed so update `Current' + local + s, f: YMDHMS_TIME + do + s := start_date_edit.value + f := finish_date_edit.value + if f < s then + f := s + end + value_imp.set_start_finish (s, f) + draw + change_actions.call ([]) + end + + on_finish_changed + -- Finished has changed so update `Current' + local + s, f: YMDHMS_TIME + do + s := start_date_edit.value + f := finish_date_edit.value + if f < s then + s := f + end + value_imp.set_start_finish (s, f) + draw + change_actions.call ([]) + end + + on_duration_changed + -- `Duration_edit' has changed so update `Current' + local + s: YMDHMS_TIME + d: YMDHMS_DURATION + do + s := start_date_edit.value + d := duration_edit.value + if d.is_negative then + value_imp.set_start_finish (s, s) + else + value_imp.set_start_duration (s, d) + end + draw + change_actions.call ([]) + end + +feature {NONE} -- Implementation + + value_imp: YMDHMS_INTERVAL + -- Implementation (and anchor) of `value'. + -- Redefined to change type. + + start_date_edit: YMDHMS_TIME_CONTROL + + finish_date_edit: YMDHMS_TIME_CONTROL + + duration_edit: YMDHMS_DURATION_CONTROL + +end diff --git a/jj_vision/unfinished/ymdhms_interval_field.e b/jj_vision/unfinished/ymdhms_interval_field.e new file mode 100644 index 0000000..380dc12 --- /dev/null +++ b/jj_vision/unfinished/ymdhms_interval_field.e @@ -0,0 +1,44 @@ +note + description: "Objects that ..." + author: "" + date: "$Date: 2012-03-16 14:05:07 -0400 (Fri, 16 Mar 2012) $" + revision: "$Revision: 7 $" + +class + YMDHMS_INTERVAL_FIELD + +inherit + + FIELD + redefine + default_create + end + +create + default_create + +feature -- Initialization + + default_create + do + Precursor {FIELD} + end + +feature -- Access + + data: YMDHMS_INTERVAL + once + create Result.make + end + +feature -- Transformation + + as_widget: YMDHMS_INTERVAL_CONTROL + do + create Result +-- Result.set_data (data) + end + + + +end diff --git a/jj_vision/unfinished/ymdhms_time_control.e b/jj_vision/unfinished/ymdhms_time_control.e new file mode 100644 index 0000000..601d809 --- /dev/null +++ b/jj_vision/unfinished/ymdhms_time_control.e @@ -0,0 +1,237 @@ +note + description: "Objects that ..." + author: "" + date: "$Date: 2012-03-16 14:05:07 -0400 (Fri, 16 Mar 2012) $" + revision: "$Revision: 7 $" + +class + YMDHMS_TIME_CONTROL + +inherit + + EV_KEY_CONSTANTS + export + {NONE} all + undefine + default_create, + copy, + is_equal + end + + YMDHMS_DURATION_CONSTANTS + export + {NONE} all + undefine + default_create, + copy, + is_equal + end + + CONTROL + redefine + initialize, + value_imp, + is_value_valid, + draw + end + +create + default_create + +feature -- Initialization + + initialize + do + Precursor {CONTROL} + create parser.make + create static + create up_button + create down_button + create calendar_button + extend (static) + extend (up_button) + extend (down_button) + extend (calendar_button) + position_widgets + set_actions + end + + position_widgets + -- Set the size and location of each widget in `Current' + do + static.set_minimum_width (150) + up_button.set_text ("+") + down_button.set_text ("-") + up_button.set_minimum_size (static.height // 2, static.height // 2) + down_button.set_minimum_size (static.height // 2, static.height // 2) + calendar_button.set_minimum_size (static.height, static.height) +-- set_item_size (up_button, up_button.width, static.height // 2) +-- set_item_size (down_button, down_button.width, static.height // 2) + set_item_position (up_button, static.width, 0) + set_item_position (down_button, static.width, static.height // 2) + set_item_position (calendar_button, static.width + up_button.width, 0) + end + + set_actions + -- Add actions to the widgets + do + up_button.select_actions.extend (agent increment_data) + down_button.select_actions.extend (agent decrement_data) + calendar_button.select_actions.extend (agent open_calendar_dialog) + static.key_press_actions.extend (agent on_key_press) + end + + +-- set_minimum_height (a_height: INTEGER) is +-- local +-- but_size: INTEGER +-- do +-- Precursor {JJJ_CONTROL} (a_height) +-- but_size := minimum_height // 2 +-- set_item_height (static, minimum_height) +-- set_item_height (up_button, but_size) +-- set_item_height (down_button, but_size) +-- set_item_y_position (up_button, 0) +-- set_item_y_position (down_button, but_size) +-- end + +-- set_minimum_width (a_width: INTEGER) is +-- local +-- but_size: INTEGER +-- do +-- Precursor {JJJ_CONTROL} (a_width) +-- but_size := up_button.width +-- set_item_width (static, minimum_width - but_size - 1) +-- set_item_x_position (up_button, minimum_width - but_size) +-- set_item_x_position (down_button, minimum_width - but_size) +-- end + +feature -- Access + +feature -- Element Change + +feature -- Status report + + is_value_valid: BOOLEAN + do +-- FIX ME !!! + Result := True + end + +feature -- Basic operations + + draw + -- Update the screen representation (ie `static'). This feature + -- is not called directly from Current; it is called by + -- JJJ_CONTROL.`set_value'. + do + static.set_text (parser.to_string (value_imp)) + end + +feature {NONE} -- Implementation + + increment_data + -- Increase the data by one unit. Unit is based + -- on position of caret within the edit box. + do + change_data (1) + change_actions.call ([]) + end + + decrement_data + -- Decrease the data by one unit. Unit is based + -- on position of caret within the edit box. + do + change_data (-1) + change_actions.call ([]) + end + + change_data (sign: INTEGER) + -- Change the data by + or - one unit based on `sign' + -- Update `value_imp'. + require + valid_sign: sign = 1 or sign = -1 + local + pos: INTEGER + h: INTEGER + do + pos := static.caret_position + if parser.is_index_in_year_string (value_imp, pos) then + value_imp.add_duration (One_year * sign) + elseif parser.is_index_in_month_string (value_imp, pos) then + value_imp.add_duration (One_month * sign) + elseif parser.is_index_in_day_string (value_imp, pos) then + value_imp.add_duration (One_day * sign) + elseif parser.is_index_in_hour_string (value_imp, pos) then + value_imp.add_duration (One_hour * sign) + elseif parser.is_index_in_minute_string (value_imp, pos) then + value_imp.add_duration (One_minute * sign) + elseif parser.is_index_in_second_string (value_imp, pos) then + value_imp.add_duration (One_second * sign) + elseif parser.is_index_in_am_pm_string (value_imp, pos) then + h := value_imp.hour + h := h + 12 + if h >= 24 then + h := h - 24 + end + value_imp.set_hour (h) + else + end + draw + static.set_caret_position (pos) + end + + on_key_press (a_key: EV_KEY) + -- Process a key pressed in static + do + if a_key.code = Key_up then + increment_data + static.set_caret_position ((static.caret_position - 1).max (0)) + -- to move the caret back after the key press + -- otherwise it move forward one position. + elseif a_key.code = Key_down then + decrement_data + static.set_caret_position ((static.caret_position + 1).max (0)) + -- to move the caret back after the key press + -- otherwise it move forward one position. + else + end + end + + open_calendar_dialog + -- Open a caladar for selecting a date. + do + calendar_tool.set_date (value) + calendar_tool.show + calendar_tool.raise +-- calendar_tool.enable_capture + end + +feature {NONE} -- Implementation + + value_imp: YMDHMS_TIME + -- Implementation (and anchor) of `value'. + -- Redefined to change type. + + static: EV_TEXT_FIELD + + up_button: EV_BUTTON + + down_button: EV_BUTTON + + calendar_button: EV_BUTTON + -- Opens a calendar for selecting a date. + + calendar_tool: EV_COLOR_DIALOG +-- temp fix just to do something; empliment a calendar dialog + -- Used to select a date + once + create Result + Result.disable_user_resize + end + + parser: YMD_TIME_PARSER +-- parser: YMDHMS_PARSER + -- For converting dates to and from strings + +end diff --git a/jj_vision/unfinished/ymdhms_time_field.e b/jj_vision/unfinished/ymdhms_time_field.e new file mode 100644 index 0000000..83f7117 --- /dev/null +++ b/jj_vision/unfinished/ymdhms_time_field.e @@ -0,0 +1,44 @@ +note + description: "Objects that ..." + author: "" + date: "$Date: 2012-03-16 14:05:07 -0400 (Fri, 16 Mar 2012) $" + revision: "$Revision: 7 $" + +class + YMDHMS_TIME_FIELD + +inherit + + FIELD + redefine + default_create + end + +create + default_create + +feature -- Initialization + + default_create + do + Precursor {FIELD} + end + +feature -- Access + + data: YMDHMS_INTERVAL + once + create Result.make + end + +feature -- Transformation + + as_widget: YMDHMS_TIME_CONTROL + do + create Result +-- Result.set_data (data) + end + + + +end diff --git a/jj_vitp/Implementation/classes/attributes/attack_unit_attributes.e b/jj_vitp/Implementation/classes/attributes/attack_unit_attributes.e new file mode 100644 index 0000000..b764938 --- /dev/null +++ b/jj_vitp/Implementation/classes/attributes/attack_unit_attributes.e @@ -0,0 +1,1234 @@ +note + description: "[ + Class incapsulating each {ATTACK_UNIT} in VITP and responsible for + the creation of those attributes. Decomposed into this class + so that {VITP_GAME} would not be such a large file. + + These attributes are used as pseudo-constants. I elected + not to use once features because the order of calls to + once featues may not work for persistence. + ]" + author: "Jimmy J. Johnson" + +deferred class + ATTACK_UNIT_ATTRIBUTES + +feature -- Access + + game: VITP_GAME + -- The game in which this item belongs. + deferred + end + +feature -- Constants + + initial_ship_size: INTEGER = 200 + -- The size in millimeters of a {SHIP} or {SUBMARINE}. + + initial_air_size: INTEGER = 160 + -- The size in millimeters of a {AIR_UNIT} or {AMPHIBIOUS_UNIT}. + +-- default_ship: DEFAULT_SHIP attribute create Result.make (game) end + -- A {SHIP} for use where no other applies. + +feature -- Access (allied groups) + + allied_attack_units: VITP_TABLE [ATTACK_UNIT] + -- All the US units + attribute + create Result.make (allied_ships.count + + allied_air_units.count + + allied_amphibious_units.count + + allied_submarines.count) + Result.merge (allied_ships) + Result.merge (allied_air_units) + Result.merge (allied_amphibious_units) + Result.merge (allied_submarines) + end + + position_uncertain_ships: VITP_TABLE [ATTACK_UNIT] + -- All the "position uncertain" ships + attribute + create Result.make (4) + Result.merge (Group_w) + Result.merge (Group_x) + Result.merge (Group_y) + Result.merge (Group_z) + end + +-- allied_returning_units: ARRAY [VITP_TABLE [ATTACK_UNIT]] +-- -- Tables, indexed by turn, containing units that are to return +-- -- to the game on that turn (i.e. amphibious or air units lost +-- -- during turn 1 to turn 7 that are to return two turns latter). +-- attribute +-- local +-- i: INTEGER +-- do +-- create Result.make_filled (create {VITP_TABLE [ATTACK_UNIT]}.make (10), 2,9) +-- from i := 3 +-- until i = 9 +-- loop +-- Result.put (create {VITP_TABLE [ATTACK_UNIT]}.make (10), i) +-- i := i + 1 +-- end +-- end + + allied_turn_1_units: VITP_TABLE [ATTACK_UNIT] + -- The Allied units entering the game on turn one, excluding + -- the X, Y, Z, and W groups + attribute + create Result.make (25) + Result.merge (turn_x_units (1, allied_ships)) + Result.merge (turn_x_units (1, allied_air_units)) + Result.merge (turn_x_units (1, allied_amphibious_units)) + end + + allied_turn_2_units: VITP_TABLE [ATTACK_UNIT] + -- The Allied units entering the game on this turn + attribute + create Result.make (25) + Result.merge (turn_x_units (2, allied_ships)) + Result.merge (turn_x_units (2, allied_air_units)) + Result.merge (turn_x_units (2, allied_amphibious_units)) + end + + allied_turn_3_units: VITP_TABLE [ATTACK_UNIT] + -- The Allied units entering the game on this turn + attribute + create Result.make (25) + Result.merge (turn_x_units (3, allied_ships)) + Result.merge (turn_x_units (3, allied_air_units)) + Result.merge (turn_x_units (3, allied_amphibious_units)) + end + + allied_turn_4_units: VITP_TABLE [ATTACK_UNIT] + -- The Allied units entering the game on this turn + attribute + create Result.make (25) + Result.merge (turn_x_units (4, allied_ships)) + Result.merge (turn_x_units (4, allied_air_units)) + Result.merge (turn_x_units (4, allied_amphibious_units)) + end + + allied_turn_5_units: VITP_TABLE [ATTACK_UNIT] + -- The Allied units entering the game this turn + attribute + create Result.make (25) + Result.merge (turn_x_units (5, allied_ships)) + Result.merge (turn_x_units (5, allied_air_units)) + Result.merge (turn_x_units (5, allied_amphibious_units)) + end + + allied_turn_6_units: VITP_TABLE [ATTACK_UNIT] + -- The Allied units entering the game on this turn + attribute + create Result.make (12) + Result.merge (turn_x_units (6, allied_ships)) + Result.merge (turn_x_units (6, allied_air_units)) + Result.merge (turn_x_units (6, allied_amphibious_units)) + end + + allied_turn_7_units: VITP_TABLE [ATTACK_UNIT] + -- The Allied units entering the game on this turn + attribute + create Result.make (12) + Result.merge (turn_x_units (7, allied_ships)) + Result.merge (turn_x_units (7, allied_air_units)) + Result.merge (turn_x_units (7, allied_amphibious_units)) + Result.extend (f_boat, f_boat.name) + end + + allied_turn_8_units: VITP_TABLE [ATTACK_UNIT] + -- The Allied units entering the game on this turn + attribute + create Result.make (5) + Result.merge (turn_x_units (8, allied_ships)) + Result.merge (turn_x_units (8, allied_air_units)) + Result.merge (turn_x_units (8, allied_amphibious_units)) + end + + allied_turn_9_units: VITP_TABLE [ATTACK_UNIT] + -- The Allied units entering the game on this turn + attribute + create Result.make (5) + Result.merge (turn_x_units (9, allied_ships)) + Result.merge (turn_x_units (9, allied_air_units)) + Result.merge (turn_x_units (9, allied_amphibious_units)) + end + + group_w: VITP_TABLE [SHIP] + -- Group W location uncertain ships + attribute + create Result.make (4) + Result.extend (enterprise, enterprise.name) + Result.extend (salt_lake_city, salt_lake_city.name) + Result.extend (northampton, northampton.name) + Result.extend (chester, chester.name) + end + + group_x: VITP_TABLE [SHIP] + -- Group X location uncertain ships + attribute + create Result.make (4) + Result.extend (lexington, lexington.name) + Result.extend (chicago, chicago.name) + Result.extend (portland, portland.name) + Result.extend (astoria, astoria.name) + end + + group_y: VITP_TABLE [SHIP] + -- Group Y location uncertain ships + attribute + create Result.make (1) + Result.extend (saratoga, saratoga.name) + end + + group_z: VITP_TABLE [SHIP] + -- Group Z location uncertain ships + attribute + create Result.make (4) + Result.extend (hornet, hornet.name) + Result.extend (yorktown, yorktown.name) + Result.extend (vincennes, vincennes.name) + Result.extend (quincy, quincy.name) + end + + allied_ships: VITP_TABLE [SHIP] + -- All the allied ships + -- Turn one + attribute + print (generating_type.out + ".allied_ships: finish me %N") + create Result.make (50) + Result.extend (nevada, nevada.name) + Result.extend (arizona, arizona.name) + Result.extend (west_virginia, west_virginia.name) + Result.extend (tennessee, tennessee.name) + Result.extend (oklahoma, oklahoma.name) + Result.extend (maryland, maryland.name) + Result.extend (california, california.name) + Result.extend (pennsylvania, pennsylvania.name) + Result.extend (new_orleans, new_orleans.name) + Result.extend (san_francisco, san_francisco.name) + Result.extend (hermes, hermes.name) + Result.extend (revenge, revenge.name) + Result.extend (prince_of_wales, prince_of_wales.name) + Result.extend (repulse, repulse.name) + Result.extend (louisville, louisville.name) + Result.extend (pensacola, pensacola.name) + Result.extend (indianapolis, indianapolis.name) + Result.extend (minneapolis, minneapolis.name) + Result.extend (houston, houston.name) + Result.extend (exeter, exeter.name) + Result.extend (de_ruyter, de_ruyter.name) + Result.extend (australia_ship, australia_ship.name) + Result.extend (canberra, canberra.name) + + -- Turn two + Result.extend (royal_sovereign, royal_sovereign.name) + Result.extend (ramilies, ramilies.name) + Result.extend (resolution, resolution.name) + Result.extend (warspite, warspite.name) + Result.extend (indomitable, indomitable.name) + Result.extend (formidable, formidable.name) + Result.extend (cornwall, cornwall.name) + Result.extend (dorestshire, dorestshire.name) + Result.extend (new_mexico, new_mexico.name) + Result.extend (idaho, idaho.name) +-- Result.extend (tenth_af, tenth_af.name) +-- Result.extend (eleventh_af, eleventh_af.name) + -- Turn three + Result.extend (north_carolina, north_carolina.name) + Result.extend (mississippi, mississippi.name) + Result.extend (colorado, colorado.name) +-- Result.extend (marines_1, marines_1.name) +-- Result.extend (marines_2, marines_2.name) +-- Result.extend (raaf, raaf.name) +-- Result.extend (rnzaf, rnzaf.name) + Result.extend (valiant, valiant.name) + Result.extend (illustrious, illustrious.name) + -- Turn four + Result.extend (south_dakota, south_dakota.name) + Result.extend (indiana, indiana.name) + Result.extend (washington, washington.name) + Result.extend (wasp, wasp.name) +-- Result.extend (marine, marine.name) +-- Result.extend (thirteenth_af, thirteeth_af.name) + Result.extend (devonshire, devonshire.name) + Result.extend (shropshire, shropshire.name) + -- Turn five + Result.extend (massachusetts, massachusetts.name) + Result.extend (wichita, wichita.name) + Result.extend (victorious, victorious.name) +-- Result.extend (marines_3, marines_3.name) +-- Result.extend (fourteenth_af, fourteenth_af.name) +-- Result.extend (naval, naval.name) + -- Turn six + Result.extend (alabama, alabama.name) + Result.extend (essex, essex.name) + Result.extend (cv_10, cv_10.name) + Result.extend (cv_16, cv_16.name) + Result.extend (independence, independence.name) + Result.extend (princeton, princeton.name) + Result.extend (belleau_wood, belleau_wood.name) + Result.extend (cowpens, cowpens.name) + Result.extend (monterey, monterey.name) + Result.extend (baltimore, baltimore.name) + Result.extend (boston, boston.name) +-- Result.extend (marines_4, marines_4.name) + -- Turn seven + Result.extend (iowa, iowa.name) + Result.extend (new_jersey, new_jersey.name) + Result.extend (intrepid, intrepid.name) + Result.extend (cv_12, cv_12.name) + Result.extend (bunker_hill, bunker_hill.name) + Result.extend (cv_18, cv_18.name) + Result.extend (bataan, bataan.name) + Result.extend (cabot, cabot.name) + Result.extend (langley_ii, langley_ii.name) + Result.extend (canberra_ii, canberra_ii.name) + Result.extend (quincy_ii, quincy_ii.name) +-- Result.extend (f_boat, f_boat.name) + -- Turn eight + Result.extend (wisconsin, wisconsin.name) + Result.extend (missouri, missouri.name) + Result.extend (ticonderoga, ticonderoga.name) + Result.extend (san_jacinto, san_jacinto.name) +-- Result.extend (marines_5, marines_5.name) + -- Turn nine + Result.extend (new_york, new_york.name) + Result.extend (texas, texas.name) + Result.extend (alaska, alaska.name) + Result.extend (franklin, franklin.name) + Result.extend (shangri_la, shangri_la.name) + end + + allied_air_units: VITP_TABLE [AIR_UNIT] + -- List of allied air units + attribute + create Result.make (10) + Result.extend (Seventh_af, Seventh_af.name) + Result.extend (Fifth_af, Fifth_af.name) + Result.extend (Tenth_af, Tenth_af.name) + Result.extend (Eleventh_af, Eleventh_af.name) + Result.extend (raaf, raaf.name) + Result.extend (rnzaf, rnzaf.name) + Result.extend (Marine, Marine.name) + Result.extend (Thirteenth_af, Thirteenth_af.name) + Result.extend (Fourteenth_af, Fourteenth_af.name) + Result.extend (Naval, Naval.name) + end + + allied_amphibious_units: VITP_TABLE [AMPHIBIOUS_UNIT] + -- All the allied_amphibious units + attribute + create Result.make (5) + Result.extend (Marines_1, Marines_1.name) + Result.extend (Marines_2, Marines_2.name) + Result.extend (Marines_3, Marines_3.name) + Result.extend (Marines_4, Marines_4.name) + Result.extend (Marines_5, Marines_5.name) + end + + allied_submarines: VITP_TABLE [SUBMARINE] + -- The one us sub + attribute + create Result.make (1) + Result.extend (f_boat, f_boat.name) + end + +feature -- Access (Japaneae groups) + + japanese_attack_units: VITP_TABLE [ATTACK_UNIT] + -- List of all Japanese units + attribute + create Result.make (japanese_ships.count + + japanese_air_units.count + + japanese_amphibious_units.count + + japanese_submarines.count) + Result.merge (japanese_ships) + Result.merge (japanese_air_units) + Result.merge (japanese_amphibious_units) + Result.merge (japanese_submarines) + end + +-- japanese_returning_units: ARRAY [VITP_TABLE [ATTACK_UNIT]] +-- -- Tables, indexed by turn, containing units that are to return +-- -- to the game on that turn (i.e. amphibious or air units lost +-- -- during turn 1 to turn 7 that are to return two turns latter). +-- attribute +-- local +-- i: INTEGER +-- do +-- create Result.make_filled (create {VITP_TABLE [ATTACK_UNIT]}.make (10), 3,9) +-- from i := 3 +-- until i = 9 +-- loop +-- Result.put (create {VITP_TABLE [ATTACK_UNIT]}.make (10), i) +-- i := i + 1 +-- end +-- end + + japanese_turn_1_units: VITP_TABLE [ATTACK_UNIT] + -- List of Japanese units that enter the game on turn one + attribute + create Result.make (39) + Result.merge (turn_x_units (1, japanese_ships)) + Result.merge (japanese_air_units) + Result.merge (turn_x_units (1, japanese_amphibious_units)) + Result.merge (japanese_submarines) + end + + japanese_turn_2_units: VITP_TABLE [ATTACK_UNIT] + -- Turn 2 + attribute + create Result.make (2) + Result.extend (Shoho, Shoho.name) + Result.extend (Junyo, Junyo.name) + Result.extend (Sasebo, Sasebo.name) + end + + japanese_turn_3_units: VITP_TABLE [ATTACK_UNIT] + -- Turn 3 + attribute + create Result.make (2) + Result.extend (Hiyo, Hiyo.name) + Result.extend (Yamato, Yamato.name) + Result.extend (Kure, Kure.name) + end + + japanese_turn_4_units: VITP_TABLE [ATTACK_UNIT] + -- Turn 4 + attribute + create Result.make (0) + end + + japanese_turn_5_units: VITP_TABLE [ATTACK_UNIT] + -- Turn 5 + attribute + create Result.make (1) + Result.extend (Musashi, Musashi.name) + end + + japanese_turn_6_units: VITP_TABLE [ATTACK_UNIT] + -- Turn 6 + attribute + create Result.make (0) + end + + japanese_turn_7_units: VITP_TABLE [ATTACK_UNIT] + -- Turn 7 + attribute + create Result.make (4) + Result.extend (Chiyoda, Chiyoda.name) + Result.extend (Chitose, Chitose.name) + Result.extend (Ryuho, Ryuho.name) + Result.extend (Taiho, Taiho.name) + end + + japanese_turn_8_units: VITP_TABLE [ATTACK_UNIT] + -- Turn 8 + attribute + create Result.make (2) + Result.extend (Unryu, Unryu.name) + Result.extend (Amagi, Amagi.name) + end + + japanese_turn_9_units: VITP_TABLE [ATTACK_UNIT] + -- Turn 9 + attribute + create Result.make (2) + Result.extend (Katsuragi, Katsuragi.name) + Result.extend (Shinano, Shinano.name) + end + + japanese_ships: VITP_TABLE [SHIP] + -- All the Japanese ships + attribute + -- Turn 1 + create Result.make (50) + Result.extend (shokaku, shokaku.name) + Result.extend (zuikaku, zuikaku.name) + Result.extend (akagi, akagi.name) + Result.extend (kaga, kaga.name) + Result.extend (soryu, soryu.name) + Result.extend (hiryu, hiryu.name) + Result.extend (ryujo, ryujo.name) + Result.extend (hosho, hosho.name) + Result.extend (zuiho, zuiho.name) + Result.extend (mutsu, mutsu.name) + Result.extend (nagato, nagato.name) + Result.extend (fuso, fuso.name) + Result.extend (hyuga, hyuga.name) + Result.extend (ise, ise.name) + Result.extend (yamashiro, yamashiro.name) + Result.extend (haruna, haruna.name) + Result.extend (hiei, hiei.name) + Result.extend (kirishima, kirishima.name) + Result.extend (kongo, kongo.name) + Result.extend (ashigara, ashigara.name) + Result.extend (atago, atago.name) + Result.extend (chokai, chokai.name) + Result.extend (haguro, haguro.name) + Result.extend (maya, maya.name) + Result.extend (myoko, myoko.name) + Result.extend (nachi, nachi.name) + Result.extend (Takao, Takao.name) + Result.extend (Chikuma, Chikuma.name) + Result.extend (Kumano, Kumano.name) + Result.extend (Mikuma, Mikuma.name) + Result.extend (Mogami, Mogami.name) + Result.extend (Suzuya, Suzuya.name) + Result.extend (Tone, Tone.name) + Result.extend (Aoba, Aoba.name) + Result.extend (Furutaka, Furutaka.name) + Result.extend (Kako, Kako.name) + Result.extend (Kinugasa, Kinugasa.name) + Result.extend (Kitakami, Kitakami.name) + Result.extend (Oi, Oi.name) + -- Turn 2 + Result.extend (Shoho, Shoho.name) + Result.extend (Junyo, Junyo.name) + -- Turn 3 + Result.extend (Hiyo, Hiyo.name) + Result.extend (Yamato, Yamato.name) + -- Turn 4 + -- no ships + -- Turn 5 + Result.extend (Musashi, Musashi.name) + -- Turn 6 + -- no ships + -- Turn 7 + Result.extend (Chiyoda, Chiyoda.name) + Result.extend (Chitose, Chitose.name) + Result.extend (Ryuho, Ryuho.name) + Result.extend (Taiho, Taiho.name) + -- Turn 8 + Result.extend (Unryu, Unryu.name) + Result.extend (Amagi, Amagi.name) + -- Turn 9 + Result.extend (Katsuragi, Katsuragi.name) + Result.extend (Shinano, Shinano.name) + end + + japanese_air_units: VITP_TABLE [AIR_UNIT] + -- List of allied air units + attribute + create Result.make (10) + Result.extend (Airflot_21, Airflot_21.name) + Result.extend (Airflot_22, Airflot_22.name) + Result.extend (Airflot_23, Airflot_23.name) + Result.extend (Airflot_24, Airflot_24.name) + Result.extend (Airflot_25, Airflot_25.name) + Result.extend (Airflot_26, Airflot_26.name) + end + + japanese_amphibious_units: VITP_TABLE [AMPHIBIOUS_UNIT] + -- All the allied_amphibious units + attribute + create Result.make (3) + Result.extend (Yokosuka, Yokosuka.name) + Result.extend (Sasebo, Sasebo.name) + Result.extend (Kure, Kure.name) + end + + japanese_submarines: VITP_TABLE [SUBMARINE] + -- The one us sub + attribute + create Result.make (1) + Result.extend (i_boat, i_boat.name) + end + +feature -- Access (combined groups) + + all_ships: VITP_TABLE [SHIP] + -- List of *all* ships + attribute + create Result.make (100) + Result.merge (japanese_ships) + Result.merge (allied_ships) + end + + all_air_units: VITP_TABLE [AIR_UNIT] + -- List of *all* LBA units + attribute + create Result.make (20) + Result.merge (japanese_air_units) + Result.merge (allied_air_units) + end + + all_amphibious_units: VITP_TABLE [AMPHIBIOUS_UNIT] + -- List of *all* amphibious units + attribute + create Result.make (20) + Result.merge (japanese_amphibious_units) + Result.merge (allied_amphibious_units) + end + + all_attack_units: VITP_TABLE [ATTACK_UNIT] + -- List of *all* units + attribute + create Result.make (japanese_attack_units.count + allied_attack_units.count) + Result.merge (japanese_attack_units) + Result.merge (allied_attack_units) + end + +feature -- Query + +-- turn_x_task_forces (a_turn: INTEGER): LINKED_SET [VITP_MOVEABLE] +-- -- Units for `a_turn' grouped together by nationality at a location +-- local +-- visited: LINKED_SET [VITP_MOVEABLE] +-- u: ATTACK_UNIT +-- fnd: BOOLEAN +-- do +-- create Result.make +-- create visited.make +-- -- Get allied units +-- from Allied_ships.start +-- until Allied_ships.after +-- loop +-- u := Allied_ships.item_for_iteration +-- if u.arrival_turn = a_turn or u.returning_turn = a_turn then +-- fnd := False +-- from Result.start +-- until Result.exhausted or fnd +-- loop +-- if u.arrival_location = Result.item.arrival_location then +-- u.join_forces (Result.item) +-- fnd := True +-- end +-- Result.forth +-- end +-- if not fnd then +-- Result.extend (u) +-- end +-- end +-- Allied_ships.forth +-- end +-- end + + turn_x_units (a_turn: INTEGER; a_table: VITP_TABLE [ATTACK_UNIT]): VITP_TABLE [ATTACK_UNIT] + -- The units entering the game at the beginning of `a_turn' + local + u: ATTACK_UNIT + do + create result.make (30) + from a_table.start + until a_table.after + loop + u := a_table.item_for_iteration + if u.arrival_turn = a_turn or u.returning_turn = a_turn then + Result.extend (u, u.name) + end + a_table.forth + end + end + + arriving_japanese_ships (a_turn: INTEGER): VITP_TABLE [SHIP] + -- The Japanese ships entering the game on this turn that + -- have not already been placed on the board. + local + tab: VITP_TABLE [SHIP] + u: SHIP + do + tab := Japanese_ships + create Result.make (30) + from tab.start + until tab.after + loop + u := tab.item_for_iteration + if u.arrival_turn = a_turn and then not u.is_in_game then + Result.extend (u, u.name) + end + tab.forth + end + end + + arriving_allied_ships (a_turn: INTEGER): VITP_TABLE [SHIP] + -- The Allied units entering the game on this turn that + -- have not already been placed on the board. + local + tab: VITP_TABLE [SHIP] + u: SHIP + do + tab := Allied_ships + create Result.make (30) + from tab.start + until tab.after + loop + u := tab.item_for_iteration + if u.arrival_turn = a_turn and then not u.is_in_game then + Result.extend (u, u.name) + end + tab.forth + end + end + + arriving_japanese_air_units (a_turn: INTEGER): VITP_TABLE [AIR_UNIT] + -- The Japanese air units entering the game on this turn that + -- have not already been placed on the board. + local + tab: VITP_TABLE [AIR_UNIT] + u: AIR_UNIT + do + tab := Japanese_air_units + create Result.make (30) + from tab.start + until tab.after + loop + u := tab.item_for_iteration + if u.arrival_turn = a_turn and then not u.is_in_game then + Result.extend (u, u.name) + end + tab.forth + end + end + + arriving_allied_air_units (a_turn: INTEGER): VITP_TABLE [AIR_UNIT] + -- The Allied units entering the game on this turn that + -- have not already been placed on the board. + local + tab: VITP_TABLE [AIR_UNIT] + u: AIR_UNIT + do + tab := Allied_air_units + create Result.make (30) + from tab.start + until tab.after + loop + u := tab.item_for_iteration + if u.arrival_turn = a_turn and then not u.is_in_game then + Result.extend (u, u.name) + end + tab.forth + end + end + + arriving_japanese_amphibious_units (a_turn: INTEGER): VITP_TABLE [AMPHIBIOUS_UNIT] + -- The Japanese ships entering the game on this turn that + -- have not already been placed on the board. + local + tab: VITP_TABLE [AMPHIBIOUS_UNIT] + u: AMPHIBIOUS_UNIT + do + tab := Japanese_amphibious_units + create Result.make (30) + from tab.start + until tab.after + loop + u := tab.item_for_iteration + if u.arrival_turn = a_turn and then not u.is_in_game then + Result.extend (u, u.name) + end + tab.forth + end + end + + arriving_allied_amphibious_units (a_turn: INTEGER): VITP_TABLE [AMPHIBIOUS_UNIT] + -- The Allied amphibious units entering the game on this turn that + -- have not already been placed on the board. + local + tab: VITP_TABLE [AMPHIBIOUS_UNIT] + u: AMPHIBIOUS_UNIT + do + tab := Allied_amphibious_units + create Result.make (30) + from tab.start + until tab.after + loop + u := tab.item_for_iteration + if u.arrival_turn = a_turn and then not u.is_in_game then + Result.extend (u, u.name) + end + tab.forth + end + end + + arriving_japanese_submarines (a_turn: INTEGER): VITP_TABLE [SUBMARINE] + -- The Japanese submarines entering the game on this turn that + -- have not already been placed on the board. + do + create Result.make (30) + if i_boat.arrival_turn = a_turn and then not i_boat.is_in_game then + Result.extend (i_boat, i_boat.name) + end + end + + arriving_allied_submarines (a_turn: INTEGER): VITP_TABLE [SUBMARINE] + -- The Allied submarines entering the game on this turn that + -- have not already been placed on the board. + do + create Result.make (30) + if f_boat.arrival_turn = a_turn and then not f_boat.is_in_game then + Result.extend (f_boat, f_boat.name) + end + end + + returning_allied_air_units (a_turn: INTEGER): VITP_TABLE [AIR_UNIT] + -- The Allied air units that are returning to the game on `a_turn' + require + turn_big_enough: a_turn >= 3 + turn_small_enough: a_turn <= 9 + local + tab: VITP_TABLE [AIR_UNIT] + u: AIR_UNIT + do + tab := allied_air_units + create Result.make (10) + from tab.start + until tab.after + loop + u := tab.item_for_iteration + if u.returning_turn = a_turn then + Result.extend (u, u.name) + end + tab.forth + end + end + + returning_japanese_air_units (a_turn: INTEGER): VITP_TABLE [AIR_UNIT] + -- The Allied air units that are returning to the game on `a_turn' + require + turn_big_enough: a_turn >= 3 + turn_small_enough: a_turn <= 9 + local + tab: VITP_TABLE [AIR_UNIT] + u: AIR_UNIT + do + tab := japanese_air_units + create Result.make (10) + from tab.start + until tab.after + loop + u := tab.item_for_iteration + if u.returning_turn = a_turn then + Result.extend (u, u.name) + end + tab.forth + end + end + + returning_allied_amphibious_units (a_turn: INTEGER): VITP_TABLE [AMPHIBIOUS_UNIT] + -- The Allied amphibious units that are returning to the game on `a_turn' + require + turn_big_enough: a_turn >= 3 + turn_small_enough: a_turn <= 9 + local + tab: VITP_TABLE [AMPHIBIOUS_UNIT] + u: AMPHIBIOUS_UNIT + do + tab := allied_amphibious_units + create Result.make (10) + from tab.start + until tab.after + loop + u := tab.item_for_iteration + if u.returning_turn = a_turn then + Result.extend (u, u.name) + end + tab.forth + end + end + + returning_japanese_amphibious_units (a_turn: INTEGER): VITP_TABLE [AMPHIBIOUS_UNIT] + -- The Allied amphibious units that are returning to the game on `a_turn' + require + turn_big_enough: a_turn >= 3 + turn_small_enough: a_turn <= 9 + local + tab: VITP_TABLE [AMPHIBIOUS_UNIT] + u: AMPHIBIOUS_UNIT + do + tab := japanese_amphibious_units + create Result.make (10) + from tab.start + until tab.after + loop + u := tab.item_for_iteration + if u.returning_turn = a_turn then + Result.extend (u, u.name) + end + tab.forth + end + end + + + + returning_turn_x_units (a_turn: INTEGER; a_table: VITP_TABLE [ATTACK_UNIT]): VITP_TABLE [ATTACK_UNIT] + -- The units returning to the game at the beginning of `a_turn' + local + u: ATTACK_UNIT + do + create result.make (30) + from a_table.start + until a_table.after + loop + u := a_table.item_for_iteration + if u.returning_turn = a_turn then + Result.extend (u, u.name) + end + a_table.forth + end + end + + returning_turn_3_units: VITP_TABLE [ATTACK_UNIT] + -- Air or amphibious units returning on turn 3 + do + create Result.make (10) + Result.merge (returning_turn_x_units (3, Japanese_air_units)) + Result.merge (returning_turn_x_units (3, Japanese_amphibious_units)) + Result.merge (returning_turn_x_units (3, Allied_air_units)) + Result.merge (returning_turn_x_units (3, Allied_amphibious_units)) + end + + returning_turn_4_units: VITP_TABLE [ATTACK_UNIT] + -- Air or amphibious units returning on turn 3 + do + create Result.make (10) + Result.merge (returning_turn_x_units (4, Japanese_air_units)) + Result.merge (returning_turn_x_units (4, Japanese_amphibious_units)) + Result.merge (returning_turn_x_units (4, Allied_air_units)) + Result.merge (returning_turn_x_units (4, Allied_amphibious_units)) + end + + returning_turn_5_units: VITP_TABLE [ATTACK_UNIT] + -- Air or amphibious units returning on turn 3 + do + create Result.make (10) + Result.merge (returning_turn_x_units (5, Japanese_air_units)) + Result.merge (returning_turn_x_units (5, Japanese_amphibious_units)) + Result.merge (returning_turn_x_units (5, Allied_air_units)) + Result.merge (returning_turn_x_units (5, Allied_amphibious_units)) + end + + returning_turn_6_units: VITP_TABLE [ATTACK_UNIT] + -- Air or amphibious units returning on turn 3 + do + create Result.make (10) + Result.merge (returning_turn_x_units (6, Japanese_air_units)) + Result.merge (returning_turn_x_units (6, Japanese_amphibious_units)) + Result.merge (returning_turn_x_units (6, Allied_air_units)) + Result.merge (returning_turn_x_units (6, Allied_amphibious_units)) + end + + returning_turn_7_units: VITP_TABLE [ATTACK_UNIT] + -- Air or amphibious units returning on turn 3 + do + create Result.make (10) + Result.merge (returning_turn_x_units (7, Japanese_air_units)) + Result.merge (returning_turn_x_units (7, Japanese_amphibious_units)) + Result.merge (returning_turn_x_units (7, Allied_air_units)) + Result.merge (returning_turn_x_units (7, Allied_amphibious_units)) + end + + returning_turn_8_units: VITP_TABLE [ATTACK_UNIT] + -- Air or amphibious units returning on turn 3 + do + create Result.make (10) + Result.merge (returning_turn_x_units (8, Japanese_air_units)) + Result.merge (returning_turn_x_units (8, Japanese_amphibious_units)) + Result.merge (returning_turn_x_units (8, Allied_air_units)) + Result.merge (returning_turn_x_units (8, Allied_amphibious_units)) + end + + returning_turn_9_units: VITP_TABLE [ATTACK_UNIT] + -- Air or amphibious units returning on turn 3 + do + create Result.make (10) + Result.merge (returning_turn_x_units (9, Japanese_air_units)) + Result.merge (returning_turn_x_units (9, Japanese_amphibious_units)) + Result.merge (returning_turn_x_units (9, Allied_air_units)) + Result.merge (returning_turn_x_units (9, Allied_amphibious_units)) + end + + Turn_1_reinforcements: VITP_TABLE [ATTACK_UNIT] + -- All the units coming into the game on this turn + do + create Result.make (50) + Result.merge (Allied_turn_1_units) + Result.merge (Japanese_turn_1_units) + end + + Turn_2_reinforcements: VITP_TABLE [ATTACK_UNIT] + -- All the units coming into the game on this turn + do + create Result.make (50) + Result.merge (Allied_turn_2_units) + Result.merge (Japanese_turn_2_units) + end + + turn_3_reinforcements: VITP_TABLE [ATTACK_UNIT] + -- All the units coming into the game on this turn + do + create Result.make (30) + Result.merge (Allied_turn_3_units) + Result.merge (Japanese_turn_3_units) + Result.merge (returning_turn_3_units) + end + + turn_4_reinforcements: VITP_TABLE [ATTACK_UNIT] + -- All the units coming into the game on this turn + do + create Result.make (30) + Result.merge (Allied_turn_4_units) + Result.merge (Japanese_turn_4_units) + Result.merge (returning_turn_4_units) + end + + turn_5_reinforcements: VITP_TABLE [ATTACK_UNIT] + -- All the units coming into the game on this turn + do + create Result.make (30) + Result.merge (Allied_turn_5_units) + Result.merge (Japanese_turn_5_units) + Result.merge (returning_turn_5_units) + end + + turn_6_reinforcements: VITP_TABLE [ATTACK_UNIT] + -- All the units coming into the game on this turn + do + create Result.make (30) + Result.merge (Allied_turn_6_units) + Result.merge (Japanese_turn_6_units) + Result.merge (returning_turn_6_units) + end + + turn_7_reinforcements: VITP_TABLE [ATTACK_UNIT] + -- All the units coming into the game on this turn + do + create Result.make (30) + Result.merge (Allied_turn_7_units) + Result.merge (Japanese_turn_7_units) + Result.merge (returning_turn_7_units) + end + + turn_8_reinforcements: VITP_TABLE [ATTACK_UNIT] + -- All the units coming into the game on this turn + do + create Result.make (30) + Result.merge (Allied_turn_8_units) + Result.merge (Japanese_turn_8_units) + Result.merge (returning_turn_8_units) + end + + turn_9_reinforcements: VITP_TABLE [ATTACK_UNIT] + -- All the units coming into the game on this turn + do + create Result.make (30) + Result.merge (Allied_turn_9_units) + Result.merge (Japanese_turn_9_units) + Result.merge (returning_turn_9_units) + end + +feature -- Access (Japanese units) + -- Turn 1, row 1 + shokaku: SHOKAKU attribute create Result.make (game) end + zuikaku: ZUIKAKU attribute create Result.make (game) end + akagi: AKAGI attribute create Result.make (game) end + kaga: KAGA attribute create Result.make (game) end + soryu: SORYU attribute create Result.make (game) end + hiryu: HIRYU attribute create Result.make (game) end + ryujo: RYUJO attribute create Result.make (game) end + hosho: HOSHO attribute create Result.make (game) end + zuiho: ZUIHO attribute create Result.make (game) end + mutsu: MUTSU attribute create Result.make (game) end + nagato: NAGATO attribute create Result.make (game) end + fuso: FUSO attribute create Result.make (game) end + -- Turn 1, row 2 + hyuga: HYUGA attribute create Result.make (game) end + ise: ISE attribute create Result.make (game) end + yamashiro: YAMASHIRO attribute create Result.make (game) end + haruna: HARUNA attribute create Result.make (game) end + hiei: HIEI attribute create Result.make (game) end + kirishima: KIRISHIMA attribute create Result.make (game) end + kongo: KONGO attribute create Result.make (game) end + ashigara: ASHIGARA attribute create Result.make (game) end + atago: ATAGO attribute create Result.make (game) end + chokai: CHOKAI attribute create Result.make (game) end + haguro: HAGURO attribute create Result.make (game) end + maya: MAYA attribute create Result.make (game) end + -- Turn 1, row 3 + myoko: MYOKO attribute create Result.make (game) end + nachi: NACHI attribute create Result.make (game) end + takao: TAKAO attribute create Result.make (game) end + chikuma: CHIKUMA attribute create Result.make (game) end + kumano: KUMANO attribute create Result.make (game) end + mikuma: MIKUMA attribute create Result.make (game) end + mogami: MOGAMI attribute create Result.make (game) end + suzuya: SUZUYA attribute create Result.make (game) end + tone: TONE attribute create Result.make (game) end + aoba: AOBA attribute create Result.make (game) end + furutaka: FURUTAKA attribute create Result.make (game) end + kako: KAKO attribute create Result.make (game) end + -- Turn 1, row 4 + kinugasa: KINUGASA attribute create Result.make (game) end + kitakami: KITAKAMI attribute create Result.make (game) end + oi: OI attribute create Result.make (game) end + yokosuka: YOKOSUKA attribute create Result.make (game) end + -- Turn 1, also available + airflot_21: AIRFLOT_21 attribute create Result.make (game) end + airflot_22: AIRFLOT_22 attribute create Result.make (game) end + airflot_23: AIRFLOT_23 attribute create Result.make (game) end + airflot_24: AIRFLOT_24 attribute create Result.make (game) end + airflot_25: AIRFLOT_25 attribute create Result.make (game) end + airflot_26: AIRFLOT_26 attribute create Result.make (game) end + i_boat: I_BOAT attribute create Result.make (game) end + -- Turn 2 + shoho: SHOHO attribute create Result.make (game) end + junyo: JUNYO attribute create Result.make (game) end + sasebo: SASEBO attribute create Result.make (game) end + -- Turn 3 + hiyo: HIYO attribute create Result.make (game) end + yamato: YAMATO attribute create Result.make (game) end + kure: KURE attribute create Result.make (game) end + -- Turn 5 + musashi: MUSASHI attribute create Result.make (game) end + -- Turn 7 + chiyoda: CHIYODA attribute create Result.make (game) end + chitose: CHITOSE attribute create Result.make (game) end + ryuho: RYUHO attribute create Result.make (game) end + taiho: TAIHO attribute create Result.make (game) end + -- Turn 7 removal + i_boat_removal: I_BOAT_REMOVAL attribute create Result.make (game) end + -- Turn 8 + unryu: UNRYU attribute create Result.make (game) end + amagi: AMAGI attribute create Result.make (game) end + -- Turn 9 + katsuragi: KATSURAGI attribute create Result.make (game) end + shinano: SHINANO attribute create Result.make (game) end + +feature -- Allied units + + -- On Battleship Row (Pearl Harbor) + nevada: NEVADA attribute create Result.make (game) end + arizona: ARIZONA attribute create Result.make (game) end + west_virginia: WEST_VIRGINIA attribute create Result.make (game) end + tennessee: TENNESSEE attribute create Result.make (game) end + oklahoma: OKLAHOMA attribute create Result.make (game) end + maryland: MARYLAND attribute create Result.make (game) end + california: CALIFORNIA attribute create Result.make (game) end + pennsylvania: PENNSYLVANIA attribute create Result.make (game) end + new_orleans: NEW_ORLEANS attribute create Result.make (game) end + san_francisco: SAN_FRANCISCO attribute create Result.make (game) end + seventh_af: SEVENTH_AF attribute create Result.make (game) end + -- At sea (cannot move) + hermes: HERMES attribute create Result.make (game) end + revenge: REVENGE attribute create Result.make (game) end + prince_of_wales: PRINCE_OF_WALES attribute create Result.make (game) end + repulse: REPULSE attribute create Result.make (game) end + fifth_af: FIFTH_AF attribute create Result.make (game) end + louisville: LOUISVILLE attribute create Result.make (game) end + pensacola: PENSACOLA attribute create Result.make (game) end + indianapolis: INDIANAPOLIS attribute create Result.make (game) end + minneapolis: MINNEAPOLIS attribute create Result.make (game) end + -- In port (may move) + houston: HOUSTON attribute create Result.make (game) end + exeter:EXETER attribute create Result.make (game) end + de_ruyter: DE_RUYTER attribute create Result.make (game) end + australia_ship: AUSTRALIA_SHIP attribute create Result.make (game) end + canberra: CANBERRA attribute create Result.make (game) end + -- Location Uncertain, group W + enterprise: ENTERPRISE attribute create Result.make (game) end + salt_lake_city: SALT_LAKE_CITY attribute create Result.make (game) end + northampton: NORTHAMPTON attribute create Result.make (game) end + chester: CHESTER attribute create Result.make (game) end + -- Location Uncertain, group X + lexington: LEXINGTON attribute create Result.make (game) end + chicago: CHICAGO attribute create Result.make (game) end + portland: PORTLAND attribute create Result.make (game) end + astoria: ASTORIA attribute create Result.make (game) end + -- Location Uncertain, group Y + saratoga: SARATOGA attribute create Result.make (game) end + -- Location Uncertain, group Z + hornet: HORNET attribute create Result.make (game) end + yorktown: YORKTOWN attribute create Result.make (game) end + vincennes: VINCENNES attribute create Result.make (game) end + quincy: QUINCY attribute create Result.make (game) end + -- Turn 2 + royal_sovereign: ROYAL_SOVEREIGN attribute create Result.make (game) end + ramilies: RAMILIES attribute create Result.make (game) end + resolution: RESOLUTION attribute create Result.make (game) end + warspite: WARSPITE attribute create Result.make (game) end + indomitable: INDOMITABLE attribute create Result.make (game) end + formidable: FORMIDABLE attribute create Result.make (game) end + cornwall: CORNWALL attribute create Result.make (game) end + dorestshire: DORESTSHIRE attribute create Result.make (game) end + new_mexico: NEW_MEXICO attribute create Result.make (game) end + idaho: IDAHO attribute create Result.make (game) end + tenth_af: TENTH_AF attribute create Result.make (game) end + eleventh_af: ELEVENTH_AF attribute create Result.make (game) end + -- Turn 3 + north_carolina: NORTH_CAROLINA attribute create Result.make (game) end + mississippi: MISSISSIPPI attribute create Result.make (game) end + colorado: COLORADO attribute create Result.make (game) end + marines_1: MARINES_1 attribute create Result.make (game) end + marines_2: MARINES_2 attribute create Result.make (game) end + raaf: RAAF attribute create Result.make (game) end + rnzaf: RNZAF attribute create Result.make (game) end + valiant: VALIANT attribute create Result.make (game) end + illustrious: ILLUSTRIOUS attribute create Result.make (game) end + -- Turn 4 + south_dakota: SOUTH_DAKOTA attribute create Result.make (game) end + indiana: INDIANA attribute create Result.make (game) end + washington: WASHINGTON attribute create Result.make (game) end + wasp: WASP attribute create Result.make (game) end + marine: MARINE attribute create Result.make (game) end + thirteenth_af: THIRTEENTH_AF attribute create Result.make (game) end + devonshire: DEVONSHIRE attribute create Result.make (game) end + shropshire: SHROPSHIRE attribute create Result.make (game) end + first_027_removal: CV_027_REMOVAL attribute create Result.make (game) end + second_027_removal: CV_027_REMOVAL attribute create Result.make (game) end + -- Turn 5 + massachusetts: MASSACHUSETTS attribute create Result.make (game) end + wichita: WICHITA attribute create Result.make (game) end + victorious: VICTORIOUS attribute create Result.make (game) end + marines_3: MARINES_3 attribute create Result.make (game) end + fourteenth_af: FOURTEENTH_AF attribute create Result.make (game) end + naval: NAVAL attribute create Result.make (game) end + resolution_removal: RESOLUTION_REMOVAL attribute create Result.make (game) end + revenge_removal: REVENGE_REMOVAL attribute create Result.make (game) end + valiant_removal: VALIANT_REMOVAL attribute create Result.make (game) end + warspite_removal: WARSPITE_REMOVAL attribute create Result.make (game) end + -- Turn 6 + alabama: ALABAMA attribute create Result.make (game) end + essex: ESSEX attribute create Result.make (game) end + cv_10: CV_10 attribute create Result.make (game) end + cv_16: CV_16 attribute create Result.make (game) end + independence: INDEPENDENCE attribute create Result.make (game) end + princeton: PRINCETON attribute create Result.make (game) end + belleau_wood: BELLEAU_WOOD attribute create Result.make (game) end + cowpens: COWPENS attribute create Result.make (game) end + monterey: MONTEREY attribute create Result.make (game) end + baltimore: BALTIMORE attribute create Result.make (game) end + boston: BOSTON attribute create Result.make (game) end + marines_4: MARINES_4 attribute create Result.make (game) end + victorious_removal: VICTORIOUS_REMOVAL attribute create Result.make (game) end + -- Turn 7 + iowa: IOWA attribute create Result.make (game) end + new_jersey: NEW_JERSEY attribute create Result.make (game) end + intrepid: INTREPID attribute create Result.make (game) end + cv_12: CV_12 attribute create Result.make (game) end + bunker_hill: BUNKER_HILL attribute create Result.make (game) end + cv_18: CV_18 attribute create Result.make (game) end + bataan: BATAAN attribute create Result.make (game) end + cabot: CABOT attribute create Result.make (game) end + langley_ii: LANGLEY_II attribute create Result.make (game) end + canberra_ii: CANBERA_II attribute create Result.make (game) end + quincy_ii: QUINCY_II attribute create Result.make (game) end + f_boat: F_BOAT attribute create Result.make (game) end + third_027_removal: CV_027_REMOVAL attribute create Result.make (game) end + first_443_removal: CV_443_REMOVAL attribute create Result.make (game) end + -- Turn 8 + wisconsin: WISCONSIN attribute create Result.make (game) end + missouri: MISSOURI attribute create Result.make (game) end + ticonderoga: TICONDEROGA attribute create Result.make (game) end + san_jacinto: SAN_JACINTO attribute create Result.make (game) end + marines_5: MARINES_5 attribute create Result.make (game) end + -- Turn 9 + new_york: NEW_YORK attribute create Result.make (game) end + texas: TEXAS attribute create Result.make (game) end + alaska: ALASKA attribute create Result.make (game) end + franklin: FRANKLIN attribute create Result.make (game) end + shangri_la: SHANGRI_LA attribute create Result.make (game) end + +end diff --git a/jj_vitp/Implementation/classes/attributes/nationality_constants.e b/jj_vitp/Implementation/classes/attributes/nationality_constants.e new file mode 100644 index 0000000..1bb81eb --- /dev/null +++ b/jj_vitp/Implementation/classes/attributes/nationality_constants.e @@ -0,0 +1,50 @@ +note + description: "[ + Class incapsulating the nationalities in VITP and responsible + for the creation of those attributes. + These attributes are used as pseudo-constants. I elected + not to use once features becasue the order of calls to + once featues may not work for persistence. + ]" + author: "Jimmy J. Johnson" + date: "$Date$" + revision: "$Revision$" + +class + NATIONALITY_CONSTANTS + +feature -- Access + + nobody: INTEGER_32 = -2 + -- Not sure if this is useful ? + + either: INTEGER_32 = -1 + -- Used in SOP when either player can make a choice + + japanese: INTEGER_32 = 0 + -- Default, because Japanese always moves first + + us: INTEGER_32 = 1 + -- United States + + british: INTEGER_32 = 2 + -- An allied nationality + + dutch: INTEGER_32 = 3 + -- An allied nationality + + australian: INTEGER_32 = 4 + -- An allied nationality + + allied: INTEGER_32 = 5 + -- Catch-all for `us', `british', `dutch', and `australian' + +feature -- Query + + is_allied_nationality (a_nationality: like japanese): BOOLEAN + -- Is `a_nationality' one of the allies? + do + Result := a_nationality >= us + end + +end diff --git a/jj_vitp/Implementation/classes/attributes/other_attributes.e b/jj_vitp/Implementation/classes/attributes/other_attributes.e new file mode 100644 index 0000000..8aa51b0 --- /dev/null +++ b/jj_vitp/Implementation/classes/attributes/other_attributes.e @@ -0,0 +1,69 @@ +note + description: "[ + Class incapsulating each {LOCATION} in VITP that is not a + {SEA_AREA} or {PORT} but needed by the game and responsible for + the creation of those attributes. Decomposed into this class + so that {VITP_GAME} would not be such a large file. + + These attributes are used as pseudo-constants. I elected + not to use once features becasue the order of calls to + once featues may not work for persistence. + ]" + author: "Jimmy J. Johnson" + date: "$Date$" + revision: "$Revision$" + +deferred class + OTHER_ATTRIBUTES + +inherit + + ANY + redefine + default_create + end + +feature {NONE} -- Initialization + + default_create + -- Initialize all port attributes + do +-- create still_in_box.make (game) +-- create Allied_starting_chart.make (game) +-- create Allied_oa_chart.make (game) +-- create Japanese_oa_chart.make (game) +-- create Uncertain.make (game) +-- create Uncommitted_japanese_location.make (game) +-- create Uncommitted_allied_location.make (game) +-- create Asia.make (game) +-- create Kamchatka.make (game) +-- create Aleutians.make (game) +-- create Solomans.make (game) +-- create Marshalls_north.make (game) +-- create Marshalls_south.make (game) + end + +feature -- Access + + game: VITP_GAME + -- The game in which this item belongs. + deferred + end + +feature -- Access + + still_in_box: STILL_IN_BOX attribute create Result.make (game) end + allied_starting_forces_chart: ALLIED_STARTING_FORCES_CHART attribute create Result.make (game) end + allied_oa_chart: ALLIED_ORDER_OF_APPEARANCE_CHART attribute create Result.make (game) end + japanese_oa_chart: JAPANESE_ORDER_OF_APPEARANCE_CHART attribute create Result.make (game) end + uncertain: LOCATION_UNCERTAIN attribute create Result.make (game) end + uncommitted_japanese_location: JAPANESE_UNCOMMITTED_LOCATION attribute create Result.make (game) end + uncommitted_allied_location: ALLIED_UNCOMMITTED_LOCATION attribute create Result.make (game) end +-- Asia: ASIA attribute create Result.make (game) end +-- Kamchatka: KAMCHATKA attribute create Result.make (game) end +-- Aleutians: ALEUTIANS attribute create Result.make (game) end +-- Solomans: SOLOMANS attribute create Result.make (game) end +-- Marshalls_north: MARSHALLS_NORTH attribute create Result.make (game) end +-- Marshalls_south: MARSHALLS_SOUTH attribute create Result.make (game) end + +end diff --git a/jj_vitp/Implementation/classes/attributes/port_attributes.e b/jj_vitp/Implementation/classes/attributes/port_attributes.e new file mode 100644 index 0000000..3ab17a6 --- /dev/null +++ b/jj_vitp/Implementation/classes/attributes/port_attributes.e @@ -0,0 +1,146 @@ +note + description: "[ + Class incapsulating each {PORT} in VITP and responsible for + the creation of those attributes. Decomposed into this class + so that {VITP_GAME} would not be such a large file. + + These attributes are used as pseudo-constants. I elected + not to use once features becasue the order of calls to + once featues may not work for persistence. + ]" + author: "Jimmy J. Johnson" + date: "$Date$" + revision: "$Revision$" + +deferred class + PORT_ATTRIBUTES + +feature -- Access + + game: VITP_GAME + -- The game in which this item belongs. + deferred + end + + default_port: DEFAULT_PORT attribute create Result.make (game) end + -- A {PORT} for use where no other applies. + +feature -- Access (major ports) + + australia: AUSTRALIA attribute create Result.make (game) end + ceylon: CEYLON attribute create Result.make (game) end + pearl_harbor: PEARL_HARBOR attribute create Result.make (game) end + saigon: SAIGON attribute create Result.make (game) end + samoa: SAMOA attribute create Result.make (game) end + singapore: SINGAPORE attribute create Result.make (game) end + truk: TRUK attribute create Result.make (game) end + yokosuka_navy_yard: YOKOSUKA_NAVY_YARD attribute create Result.make (game) end + +feature -- Access (minor ports) + + andaman_islands: ANDAMAN_ISLANDS attribute create Result.make (game) end + attu: ATTU attribute create Result.make (game) end + dutch_harbor: DUTCH_HARBOR attribute create Result.make (game) end + johnston_island: JOHNSTON_ISLAND attribute create Result.make (game) end + guadalcanal: GUADALCANAL attribute create Result.make (game) end + kwajalein: KWAJALEIN attribute create Result.make (game) end + lae: LAE attribute create Result.make (game) end + maloelap: MALOELAP attribute create Result.make (game) end + midway: MIDWAY attribute create Result.make (game) end + new_hebrides: NEW_HEBRIDES attribute create Result.make (game) end + okinawa: OKINAWA attribute create Result.make (game) end + philippines: PHILIPPINES attribute create Result.make (game) end + port_moresby: PORT_MORESBY attribute create Result.make (game) end + saipan: SAIPAN attribute create Result.make (game) end + +feature -- Access (port groups) + + ports: VITP_TABLE [PORT] + -- Convenience feature containing all the major (red) pots on the board + attribute + create Result.make (major_ports.count + minor_ports.count) + Result.merge (major_ports) + Result.merge (minor_ports) + end + + major_ports: VITP_TABLE [RED_PORT] + -- Convenience feature containing all the major (red) pots on the board + attribute + create Result.make (8) + Result.extend (Australia, Australia.name) + Result.extend (Ceylon, Ceylon.name) + Result.extend (Pearl_harbor, Pearl_harbor.name) + Result.extend (Saigon, Saigon.name) + Result.extend (Samoa, Samoa.name) + Result.extend (Singapore, Singapore.name) + Result.extend (Truk, Truk.name) + Result.extend (Yokosuka_navy_yard, Yokosuka_navy_yard.name) + end + + minor_ports: VITP_TABLE [GREEN_PORT] + -- Convenience feature containing all the minor (green) ports on the board + attribute + create Result.make (14) + Result.extend (Andaman_islands, Andaman_islands.name) + Result.extend (Attu, Attu.name) + Result.extend (Dutch_harbor, Dutch_harbor.name) + Result.extend (Johnston_island, Johnston_island.name) + Result.extend (Guadalcanal, Guadalcanal.name) + Result.extend (Kwajalein, Kwajalein.name) + Result.extend (Lae, Lae.name) + Result.extend (Maloelap, Maloelap.name) + Result.extend (Midway, Midway.name) + Result.extend (New_hebrides, New_hebrides.name) + Result.extend (Okinawa, Okinawa.name) + Result.extend (Philippines, Philippines.name) + Result.extend (Port_moresby, Port_moresby.name) + Result.extend (Saipan, Saipan.name) + end + + island_ports: VITP_TABLE [PORT] + -- Convenience feature containig all the island ports + attribute + create Result.make (15) + Result.extend (Andaman_islands, Andaman_islands.name) + Result.extend (Attu, Attu.name) + Result.extend (Ceylon, Ceylon.name) + Result.extend (Dutch_harbor, Dutch_harbor.name) + Result.extend (Johnston_island, Johnston_island.name) + Result.extend (Guadalcanal, Guadalcanal.name) + Result.extend (Kwajalein, Kwajalein.name) + Result.extend (Maloelap, Maloelap.name) + Result.extend (Midway, Midway.name) + Result.extend (New_hebrides, New_hebrides.name) + Result.extend (Okinawa, Okinawa.name) + Result.extend (Pearl_harbor, Pearl_harbor.name) + Result.extend (Saipan, Saipan.name) + Result.extend (Samoa, Samoa.name) + Result.extend (Truk, Truk.name) + end +feature -- Query + + friendly_ports (a_nationality: like {NATIONALITY_CONSTANTS}.japanese): VITP_TABLE [PORT] + -- All ports and island bases controlled by `a_nationality' + local + p: PORT + do + create Result.make (ports.count) + from ports.start + until ports.after + loop + p := ports.item_for_iteration + if p.nationality = a_nationality then + Result.extend (p, p.name) + end + ports.forth + end + end + +invariant + + port_count_correct: ports.count = 22 + major_port_count_correct: major_ports.count = 8 + minor_port_count_correct: minor_ports.count = 14 + island_port_count_correct: island_ports.count = 15 + +end diff --git a/jj_vitp/Implementation/classes/attributes/sea_area_attributes.e b/jj_vitp/Implementation/classes/attributes/sea_area_attributes.e new file mode 100644 index 0000000..5fe0374 --- /dev/null +++ b/jj_vitp/Implementation/classes/attributes/sea_area_attributes.e @@ -0,0 +1,79 @@ +note + description: "[ + Class incapsulating each {SEA_AREA} in VITP and responsible for + the creation of those attributes. Decomposed into this class + so that {VITP_GAME} would not be such a large file. + + These attributes are used as pseudo-constants. I elected + not to use once features becasue the order of calls to + once featues may not work for persistence. + ]" + author: "Jimmy J. Johnson" + date: "$Date$" + revision: "$Revision$" + +deferred class + SEA_AREA_ATTRIBUTES + +feature -- Access + + game: VITP_GAME + -- The game in which this item belongs. + deferred + end + +feature -- Access (sea areas) + + Aleutian_islands: ALEUTIAN_ISLANDS attribute create Result.make (game) end + Bay_of_bengal: BAY_OF_BENGAL attribute create Result.make (game) end + Central_pacific_ocean: CENTRAL_PACIFIC_OCEAN attribute create Result.make (game) end + Coral_Sea: CORAL_SEA attribute create Result.make (game) end + Hawaiian_islands: HAWAIIAN_ISLANDS attribute create Result.make (game) end + Indian_ocean: INDIAN_OCEAN attribute create Result.make (game) end + Indonesia: INDONESIA attribute create Result.make (game) end + Japanese_islands: JAPANESE_ISLANDS attribute create Result.make (game) end + Marianas_islands: MARIANAS_ISLANDS attribute create Result.make (game) end + Marshall_islands: MARSHALL_ISLANDS attribute create Result.make (game) end + North_pacific_ocean: NORTH_PACIFIC_OCEAN attribute create Result.make (game) end + South_pacific_ocean: SOUTH_PACIFIC_OCEAN attribute create Result.make (game) end + US_mandate: US_MANDATE attribute create Result.make (game) end + +feature -- Access (groups) + + sea_areas: VITP_TABLE [SEA_AREA] + -- Convenience feature containing all the sea areas on the board + attribute + create Result.make (13) + Result.extend (Aleutian_islands, Aleutian_islands.name) + Result.extend (Bay_of_bengal, Bay_of_bengal.name) + Result.extend (Central_pacific_ocean, Central_pacific_ocean.name) + Result.extend (Coral_sea, Coral_sea.name) + Result.extend (Hawaiian_islands, Hawaiian_islands.name) + Result.extend (Indian_ocean, Indian_ocean.name) + Result.extend (Indonesia, Indonesia.name) + Result.extend (Japanese_islands, Japanese_islands.name) + Result.extend (Marianas_islands, Marianas_islands.name) + Result.extend (Marshall_islands, Marshall_islands.name) + Result.extend (North_pacific_ocean, North_pacific_ocean.name) + Result.extend (South_pacific_ocean, South_pacific_ocean.name) + Result.extend (US_mandate, US_mandate.name) + end + + contested_areas: LINKED_SET [SEA_AREA] + -- Sea areas that contain both Japanese and Allied units + local + s: SEA_AREA + do + create Result.make + from Sea_areas.start + until Sea_areas.after + loop + s := Sea_areas.item_for_iteration + if s.is_contested then + Result.extend (s) + end + Sea_areas.forth + end + end + +end diff --git a/jj_vitp/Implementation/classes/land.e b/jj_vitp/Implementation/classes/land.e new file mode 100644 index 0000000..1bcc9a6 --- /dev/null +++ b/jj_vitp/Implementation/classes/land.e @@ -0,0 +1,27 @@ +note + description: "[ + Abstraction for the brown land in VITP + ]" + author: "Jimmy J. Johnson" + +deferred class + LAND + +inherit + + LOCATION + +feature {NONE} -- Inapplicable + + adjacent_sea_areas: LINEAR [SEA_AREA] + -- A list of all sea areas that touch this location + do + -- satisfy void safety + Result := (create {LINKED_SET [SEA_AREA]}.make).linear_representation + check + do_not_call: False + -- Because not applicable + end + end + +end diff --git a/jj_vitp/Implementation/classes/location.e b/jj_vitp/Implementation/classes/location.e new file mode 100644 index 0000000..ebf8565 --- /dev/null +++ b/jj_vitp/Implementation/classes/location.e @@ -0,0 +1,337 @@ +note + description: "[ + Root class for all the locations (ports, sea-areas, bases) in VITP. + ]" + author: "Jimmy J. Johnson" + +deferred class + LOCATION + +inherit + + VITP_ITEM + redefine + make + end + +feature {NONE} -- Initialization + + make (a_game: like game) + -- Initialize Current + do + Precursor (a_game) +-- create defining_position + create units_imp.make + is_stable := True +-- defining_cell := game. + end + +feature -- Access + + defining_position: TUPLE [x, y: INTEGER_32] + -- The x- and y-coordinate (in millimeters) of Current's + -- position relative to the top-left corner of the board. + deferred + end + + defining_cell: VITP_CELL + -- The "central" cell for Current, around which its + -- positioning `grid' is built. + local + x, y: INTEGER_32 + once + x := ((defining_position.x + game.board_left) / game.cell_size).truncated_to_integer + 1 + y := ((defining_position.y + game.board_top) / game.cell_size).truncated_to_integer + 1 + Result := game.cell (x, y) + end + + units: LINKED_SET [like unit_anchor] + -- Copy of the list of units in current. + -- Why do I have this feature? + do + print ("LOCATION.units: why have this feature? %N"); + Result := units_imp.twin + end + + japanese_units: LINKED_SET [like unit_anchor] + -- All the japanese units in Current + do + create Result.make + from units_imp.start + until units_imp.exhausted + loop + if units_imp.item.nationality = game.Japanese then + Result.extend (units_imp.item) + end + units_imp.forth + end + end + + allied_units: LINKED_SET [like unit_anchor] + -- All the allied units in Current + do + create Result.make + from units_imp.start + until units_imp.exhausted + loop + if units_imp.item.nationality /= game.Japanese then + Result.extend (units_imp.item) + end + units_imp.forth + end + end + + adjacent_sea_areas: LINEAR [SEA_AREA] + -- A list of all sea areas that touch this location + deferred + end + +feature -- Status report + + is_port: BOOLEAN + -- Is the location a {PORT}? + do + Result := Current.conforms_to ({PORT}) + end + + is_sea_area: BOOLEAN + -- Is the location a {SEA_AREA}? + do + Result := Current.conforms_to ({SEA_AREA}) + end + +feature -- Basic operations + + put (a_unit: like unit_anchor) + -- Ensure `a_unit' is in Current + require + unit_exists: a_unit /= Void +-- valid_move: a_unit.is_valid_move (Current) + do + is_stable := False + units_imp.put (a_unit) + if a_unit.location /= Current then + a_unit.set_location (Current) + end + is_stable := True + ensure + has_unit: has (a_unit) + location_integrity: a_unit.location = Current + end + + prune (a_unit: like unit_anchor) + -- Ensure `a_unit' is NOT in Current + require + unit_exists: a_unit /= Void + do + is_stable := False + if has (a_unit) then + units_imp.prune (a_unit) + end + is_stable := True + ensure + not_has_unit: not has (a_unit) + end + +feature -- Query + +-- friendly_ports (a_nationality: NATIONALITY): LINKED_SET [PORT] +-- -- Of the `adjoining_ports' the ones that are friendly to `a_nationality' +-- local +-- p: like adjoining_ports +-- do +-- create Result.make +-- from ports.start +-- until ports.exhausted +-- loop +-- if not ports.item.is_enemy_controlled (a_nationality) then +-- Result.extend (ports.item) +-- end +-- ports.forth +-- end +-- end + + distance_to (other: LOCATION): INTEGER + -- The distance between Current and `other' + do + io.put_string ("LOCATION.distance_to: Fix me - move functionality to VITP_GAME? %N") + Result := {INTEGER_32}.max_value + end + + is_enemy_controlled (a_nationality: like game.japanese): BOOLEAN + -- Is the location controlled by the other side? + do + Result := (game.is_allied_nationality (a_nationality) and not game.is_allied_nationality (nationality)) or + (not game.is_allied_nationality (a_nationality) and game.is_allied_nationality (nationality)) + end + + has (a_unit: like unit_anchor): BOOLEAN + -- Does Current contain `a_unit'? + require + unit_exists: a_unit /= Void + do + Result := units_imp.has (a_unit) + end + + has_allied: BOOLEAN + -- Does this location have any allied game piece here? + local + u: like unit_anchor + do + from units_imp.start + until Result or else units_imp.after + loop + u := units_imp.item + Result := game.is_allied_nationality (u.nationality) + units_imp.forth + end + end + + has_japanese: BOOLEAN + -- Does this location have any japanese game piece here? + local + u: like unit_anchor + do + from units_imp.start + until Result or else units_imp.after + loop + u := units_imp.item + Result := not game.is_allied_nationality (u.nationality) + units_imp.forth + end + end + + has_japanese_patroller: BOOLEAN + -- Does this location contain at least one Japanese patroller? + local + u: like unit_anchor + do + from units_imp.start + until Result or else units_imp.after + loop + u := units_imp.item + Result := u.is_patrolling and then + not game.is_allied_nationality (u.nationality) + units_imp.forth + end + end + + has_allied_patroller: BOOLEAN + -- Does this location contain at least one Japanese patroller? + local + u: like unit_anchor + do + from units_imp.start + until Result or else units_imp.after + loop + u := units_imp.item + Result := u.is_patrolling and then + game.is_allied_nationality (u.nationality) + units_imp.forth + end + end + + has_japanese_air_raiders: BOOLEAN + -- Does Current contain any Japanese carriers? + -- (Carriers are the only units that can air raid.) + local + set: like japanese_units + do + set := japanese_units + from set.start + until set.exhausted or Result + loop + Result := attached {SHIP} set.item as s and then s.airstrike_factor > 0 + set.forth + end + end + + has_allied_air_raiders: BOOLEAN + -- Does Current contain any Japanese carriers? + -- (Carriers are the only units that can air raid.) + local + set: like allied_units + do + set := allied_units + from set.start + until set.exhausted or Result + loop + Result := attached {SHIP} set.item as s and then s.airstrike_factor > 0 + set.forth + end + end + + has_allied_amphibious: BOOLEAN + -- Does Current contain any Allied amphibious units? + local + set: like allied_units + do + set := allied_units + from set.start + until set.exhausted or Result + loop + Result := attached {AMPHIBIOUS_UNIT} set.item + set.forth + end + end + + has_japanese_amphibious: BOOLEAN + -- Does Current contain any Japanese amphibious units? + local + set: like japanese_units + do + set := japanese_units + from set.start + until set.exhausted or Result + loop + Result := attached {AMPHIBIOUS_UNIT} set.item + set.forth + end + end + +feature {NONE} -- Implementation + + units_imp: LINKED_SET [like unit_anchor] + -- The units that are in this location + + has_invalid_unit: BOOLEAN + -- Does Current contain a unit that does not refer back to Current? + -- For invariant checking + -- Should always be false + require + call_only_when_stable: is_stable + do + from units_imp.start + until Result or units_imp.exhausted + loop + Result := units_imp.item.location /= Current + units_imp.forth + end + end + + is_stable: BOOLEAN + -- Set to false when pruning and adding units for invariant checking + -- of referential integrity between units and locations + +feature {NONE} -- Anchors (for covariant redefinitions) + + unit_anchor: ATTACK_UNIT + -- Anchor for features using units. + -- Not to be called; just used to anchor types. + -- Declared as a feature to avoid adding an attribute. + require + not_callable: False + do + check + do_not_call: False then + -- Because give no info; simply used as anchor. + end + end + +invariant + + valid_controller: nationality = game.japanese or nationality = game.us or nationality = game.nobody + + all_units_imp_refer_to_current: is_stable implies not has_invalid_unit + +end diff --git a/jj_vitp/Implementation/classes/other_locations/aleutians.e b/jj_vitp/Implementation/classes/other_locations/aleutians.e new file mode 100644 index 0000000..580a9b3 --- /dev/null +++ b/jj_vitp/Implementation/classes/other_locations/aleutians.e @@ -0,0 +1,22 @@ +note + description: "[ + Describes this particular {LAND} area. + ]" + author: "Jimmy J. Johnson" + +class + ALEUTIANS + +inherit + + LAND + +create + make + +feature -- Access + + name: STRING_8 = "Aleutians" + -- This name of this item. + +end diff --git a/jj_vitp/Implementation/classes/other_locations/allied_order_of_appearance_chart.e b/jj_vitp/Implementation/classes/other_locations/allied_order_of_appearance_chart.e new file mode 100644 index 0000000..29e0625 --- /dev/null +++ b/jj_vitp/Implementation/classes/other_locations/allied_order_of_appearance_chart.e @@ -0,0 +1,52 @@ +note + description: "[ + Describes this chart as a location, so units can be moved to it. + ]" + author: "Jimmy J. Johnson" + +class + ALLIED_ORDER_OF_APPEARANCE_CHART + +inherit + + LOCATION + redefine + make + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: like game) + -- Set up Current + do + Precursor (a_game) + nationality := {NATIONALITY_CONSTANTS}.us + defining_position := [0, 0] + end + +feature -- Access + + name: STRING_8 = "Allied Order of Appearance Chart" + -- This name of this item. + + defining_position: TUPLE [x, y: INTEGER_32] + -- The x- and y-coordinate (in millimeters) of Current's + -- position relative to the top-left corner of the board. + +feature {NONE} -- Inapplicable + + adjacent_sea_areas: LINEAR [SEA_AREA] + -- A list of all sea areas that touch this location + do + -- satisfy void safety + Result := (create {LINKED_SET [SEA_AREA]}.make).linear_representation + check + do_not_call: False + -- Because not applicable + end + end + +end diff --git a/jj_vitp/Implementation/classes/other_locations/allied_starting_forces_chart.e b/jj_vitp/Implementation/classes/other_locations/allied_starting_forces_chart.e new file mode 100644 index 0000000..a377431 --- /dev/null +++ b/jj_vitp/Implementation/classes/other_locations/allied_starting_forces_chart.e @@ -0,0 +1,52 @@ +note + description: "[ + Describes this chart as a location, so units can be moved to it. + ]" + author: "Jimmy J. Johnson" + +class + ALLIED_STARTING_FORCES_CHART + +inherit + + LOCATION + redefine + make + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: like game) + -- Set up Current + do + Precursor (a_game) + nationality := {NATIONALITY_CONSTANTS}.us + defining_position := [0, 0] + end + +feature -- Access + + name: STRING_8 = "Allied Starting Forces Chart" + -- This name of this item. + + defining_position: TUPLE [x, y: INTEGER_32] + -- The x- and y-coordinate (in millimeters) of Current's + -- position relative to the top-left corner of the board. + +feature {NONE} -- Inapplicable + + adjacent_sea_areas: LINEAR [SEA_AREA] + -- A list of all sea areas that touch this location + do + -- satisfy void safety + Result := (create {LINKED_SET [SEA_AREA]}.make).linear_representation + check + do_not_call: False + -- Because not applicable + end + end + +end diff --git a/jj_vitp/Implementation/classes/other_locations/allied_uncommitted_location.e b/jj_vitp/Implementation/classes/other_locations/allied_uncommitted_location.e new file mode 100644 index 0000000..dc9bdeb --- /dev/null +++ b/jj_vitp/Implementation/classes/other_locations/allied_uncommitted_location.e @@ -0,0 +1,39 @@ +note + description: "[ + Describes this particular {LAND} area. + ]" + author: "Jimmy J. Johnson" + +class + ALLIED_UNCOMMITTED_LOCATION + +inherit + + LOCATION_UNCOMMITTED + redefine + make + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: like game) + -- Set up Current + do + Precursor (a_game) + nationality := {NATIONALITY_CONSTANTS}.us + defining_position := [0, 0] + end + +feature -- Access + + name: STRING_8 = "Allied uncommited location" + -- The name of this unit. + + defining_position: TUPLE [x, y: INTEGER_32] + -- The x- and y-coordinate (in millimeters) of Current's + -- position relative to the top-left corner of the board. + +end diff --git a/jj_vitp/Implementation/classes/other_locations/asia.e b/jj_vitp/Implementation/classes/other_locations/asia.e new file mode 100644 index 0000000..32e05d6 --- /dev/null +++ b/jj_vitp/Implementation/classes/other_locations/asia.e @@ -0,0 +1,22 @@ +note + description: "[ + Describes this particular {LAND} area. + ]" + author: "Jimmy J. Johnson" + +class + ASIA + +inherit + + LAND + +create + make + +feature -- Access + + name: STRING_8 = "Asia" + -- This name of this item. + +end diff --git a/jj_vitp/Implementation/classes/other_locations/japanese_order_of_appearance_chart.e b/jj_vitp/Implementation/classes/other_locations/japanese_order_of_appearance_chart.e new file mode 100644 index 0000000..bf62c0e --- /dev/null +++ b/jj_vitp/Implementation/classes/other_locations/japanese_order_of_appearance_chart.e @@ -0,0 +1,53 @@ +note + description: "[ + Represents the Order of Appearance chart for VITP. + The attack units begin the game here and enter during play. + ]" + author: "Jimmy J. Johnson" + +class + JAPANESE_ORDER_OF_APPEARANCE_CHART + +inherit + + LOCATION + redefine + make + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: like game) + -- Set up Current + do + Precursor (a_game) + nationality := {NATIONALITY_CONSTANTS}.japanese + defining_position := [0, 0] + end + +feature -- Access + + name: STRING_8 = "Japanese Order of Appearance Chart" + -- This name of this item. + + defining_position: TUPLE [x, y: INTEGER_32] + -- The x- and y-coordinate (in millimeters) of Current's + -- position relative to the top-left corner of the board. + +feature {NONE} -- Inapplicable + + adjacent_sea_areas: LINEAR [SEA_AREA] + -- A list of all sea areas that touch this location + do + -- satisfy void safety + Result := (create {LINKED_SET [SEA_AREA]}.make).linear_representation + check + do_not_call: False + -- Because not applicable + end + end + +end diff --git a/jj_vitp/Implementation/classes/other_locations/japanese_uncommitted_location.e b/jj_vitp/Implementation/classes/other_locations/japanese_uncommitted_location.e new file mode 100644 index 0000000..18503c3 --- /dev/null +++ b/jj_vitp/Implementation/classes/other_locations/japanese_uncommitted_location.e @@ -0,0 +1,39 @@ +note + description: "Summary description for {JAPANESE_UNCOMMITED_POSITION}." + author: "" + date: "$Date$" + revision: "$Revision$" + +class + JAPANESE_UNCOMMITTED_LOCATION + +inherit + + LOCATION_UNCOMMITTED + redefine + make + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: like game) + -- Initialize attributes of Current + do + PRECURSOR {LOCATION_UNCOMMITTED} (a_game) + nationality := {NATIONALITY_CONSTANTS}.japanese + defining_position := [0, 0] + end + +feature -- Access + + name: STRING_8 = "Akagi" + -- The name of this unit. + + defining_position: TUPLE [x, y: INTEGER_32] + -- The x- and y-coordinate (in millimeters) of Current's + -- position relative to the top-left corner of the board. + +end diff --git a/jj_vitp/Implementation/classes/other_locations/kamchatka.e b/jj_vitp/Implementation/classes/other_locations/kamchatka.e new file mode 100644 index 0000000..c6bd57c --- /dev/null +++ b/jj_vitp/Implementation/classes/other_locations/kamchatka.e @@ -0,0 +1,22 @@ +note + description: "[ + Describes this particular {LAND} area. + ]" + author: "Jimmy J. Johnson" + +class + KAMCHATKA + +inherit + + LAND + +create + make + +feature -- Access + + name: STRING_8 = "Kamchatka" + -- This name of this item. + +end diff --git a/jj_vitp/Implementation/classes/other_locations/location_uncertain.e b/jj_vitp/Implementation/classes/other_locations/location_uncertain.e new file mode 100644 index 0000000..b9da2a2 --- /dev/null +++ b/jj_vitp/Implementation/classes/other_locations/location_uncertain.e @@ -0,0 +1,52 @@ +note + description: "[ + Describes this chart as a location, so units can be moved to it. + ]" + author: "Jimmy J. Johnson" + +class + LOCATION_UNCERTAIN + +inherit + + LOCATION + redefine + make + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: like game) + -- Set up Current + do + Precursor (a_game) + nationality := game.nobody + defining_position := [0, 0] + end + +feature -- Access + + name: STRING_8 = "Location Uncertain" + -- This name of this item. + + defining_position: TUPLE [x, y: INTEGER_32] + -- The x- and y-coordinate (in millimeters) of Current's + -- position relative to the top-left corner of the board. + +feature {NONE} -- Inapplicable + + adjacent_sea_areas: LINEAR [SEA_AREA] + -- A list of all sea areas that touch this location + do + -- satisfy void safety + Result := (create {LINKED_SET [SEA_AREA]}.make).linear_representation + check + do_not_call: False + -- Because not applicable + end + end + +end diff --git a/jj_vitp/Implementation/classes/other_locations/location_uncommitted.e b/jj_vitp/Implementation/classes/other_locations/location_uncommitted.e new file mode 100644 index 0000000..f6a3411 --- /dev/null +++ b/jj_vitp/Implementation/classes/other_locations/location_uncommitted.e @@ -0,0 +1,39 @@ +note + description: "[ + Describes this location, so units can be moved to it. + ]" + author: "Jimmy J. Johnson" + +deferred class + LOCATION_UNCOMMITTED + +inherit + + LOCATION + redefine + make + end + +feature {NONE} -- Initialization + + make (a_game: like game) + -- Set up Current + do + Precursor (a_game) + nationality := {NATIONALITY_CONSTANTS}.nobody + end + +feature {NONE} -- Inapplicable + + adjacent_sea_areas: LINEAR [SEA_AREA] + -- A list of all sea areas that touch this location + do + -- satisfy void safety + Result := (create {LINKED_SET [SEA_AREA]}.make).linear_representation + check + do_not_call: False + -- Because not applicable + end + end + +end diff --git a/jj_vitp/Implementation/classes/other_locations/marshalls_north.e b/jj_vitp/Implementation/classes/other_locations/marshalls_north.e new file mode 100644 index 0000000..db1d70a --- /dev/null +++ b/jj_vitp/Implementation/classes/other_locations/marshalls_north.e @@ -0,0 +1,22 @@ +note + description: "[ + Describes this particular {LAND} area. + ]" + author: "Jimmy J. Johnson" + +class + MARSHALLS_NORTH + +inherit + + LAND + +create + make + +feature -- Access + + name: STRING_8 = "Marshalls North" + -- This name of this item. + +end diff --git a/jj_vitp/Implementation/classes/other_locations/marshalls_south.e b/jj_vitp/Implementation/classes/other_locations/marshalls_south.e new file mode 100644 index 0000000..86a3d23 --- /dev/null +++ b/jj_vitp/Implementation/classes/other_locations/marshalls_south.e @@ -0,0 +1,22 @@ +note + description: "[ + Describes this particular {LAND} area. + ]" + author: "Jimmy J. Johnson" + +class + MARSHALLS_SOUTH + +inherit + + LAND + +create + make + +feature -- Access + + name: STRING_8 = "Marshalls South" + -- This name of this item. + +end diff --git a/jj_vitp/Implementation/classes/other_locations/solomans.e b/jj_vitp/Implementation/classes/other_locations/solomans.e new file mode 100644 index 0000000..374d6e8 --- /dev/null +++ b/jj_vitp/Implementation/classes/other_locations/solomans.e @@ -0,0 +1,22 @@ +note + description: "[ + Describes this particular {LAND} area. + ]" + author: "Jimmy J. Johnson" + +class + SOLOMANS + +inherit + + LAND + +create + make + +feature -- Access + + name: STRING_8 = "Solomans" + -- This name of this item. + +end diff --git a/jj_vitp/Implementation/classes/other_locations/still_in_box.e b/jj_vitp/Implementation/classes/other_locations/still_in_box.e new file mode 100644 index 0000000..5356236 --- /dev/null +++ b/jj_vitp/Implementation/classes/other_locations/still_in_box.e @@ -0,0 +1,54 @@ +note + description: "[ + Describes this chart as a location, so units can be moved to it. + ]" + author: "Jimmy J. Johnson" + date: "$Date: 2012-07-01 01:25:45 -0400 (Sun, 01 Jul 2012) $" + revision: "$Revision: 31 $" + +class + STILL_IN_BOX + +inherit + + LOCATION + redefine + make + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: like game) + -- Set up Current + do + Precursor (a_game) + nationality := {NATIONALITY_CONSTANTS}.nobody + defining_position := [0, 0] + end + +feature -- Access + + name: STRING_8 = "Still in Box" + -- This name of this item. + + defining_position: TUPLE [x, y: INTEGER_32] + -- The x- and y-coordinate (in millimeters) of Current's + -- position relative to the top-left corner of the board. + +feature {NONE} -- Inapplicable + + adjacent_sea_areas: LINEAR [SEA_AREA] + -- A list of all sea areas that touch this location + do + -- satisfy void safety + Result := (create {LINKED_SET [SEA_AREA]}.make).linear_representation + check + do_not_call: False + -- Because not applicable + end + end + +end diff --git a/jj_vitp/Implementation/classes/ports/Andaman_islands.e b/jj_vitp/Implementation/classes/ports/Andaman_islands.e new file mode 100644 index 0000000..a414e72 --- /dev/null +++ b/jj_vitp/Implementation/classes/ports/Andaman_islands.e @@ -0,0 +1,49 @@ +note + description: "[ + Describes this particular port + ]" + author: "Jimmy J. Johnson" + +class + ANDAMAN_ISLANDS + +inherit + + GREEN_PORT + redefine + make + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: like game) + -- Set up Current + do + Precursor (a_game) + nationality := {NATIONALITY_CONSTANTS}.us + defining_position := [20, 220] + end + +feature -- Access + + name: STRING_8 = "Andaman Islands" + -- This name of this item. + + defining_position: TUPLE [x, y: INTEGER_32] + -- The x- and y-coordinate (in millimeters) of Current's + -- position relative to the top-left corner of the board. + + adjacent_sea_areas: LINEAR [SEA_AREA] + -- A list of all sea areas that touch this location + local + s: LINKED_SET [SEA_AREA] + once + create s.make + s.extend (game.bay_of_bengal) + Result := s.linear_representation + end + +end diff --git a/jj_vitp/Implementation/classes/ports/Attu.e b/jj_vitp/Implementation/classes/ports/Attu.e new file mode 100644 index 0000000..733b44d --- /dev/null +++ b/jj_vitp/Implementation/classes/ports/Attu.e @@ -0,0 +1,49 @@ +note + description: "[ + Describes this particular port + ]" + author: "Jimmy J. Johnson" + +class + ATTU + +inherit + + GREEN_PORT + redefine + make + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: like game) + -- Set up Current + do + Precursor (a_game) + nationality := {NATIONALITY_CONSTANTS}.us + defining_position := [540, 30] + end + +feature -- Access + + name: STRING_8 = "Attu" + -- This name of this item. + + defining_position: TUPLE [x, y: INTEGER_32] + -- The x- and y-coordinate (in millimeters) of Current's + -- position relative to the top-left corner of the board. + + adjacent_sea_areas: LINEAR [SEA_AREA] + -- A list of all sea areas that touch this location + local + s: LINKED_SET [SEA_AREA] + once + create s.make + s.extend (game.aleutian_islands) + Result := s.linear_representation + end + +end diff --git a/jj_vitp/Implementation/classes/ports/Lae.e b/jj_vitp/Implementation/classes/ports/Lae.e new file mode 100644 index 0000000..d92831d --- /dev/null +++ b/jj_vitp/Implementation/classes/ports/Lae.e @@ -0,0 +1,50 @@ +note + description: "[ + Describes this particular port + ]" + author: "Jimmy J. Johnson" + +class + LAE + +inherit + + GREEN_PORT + redefine + make + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: like game) + -- Set up Current + do + Precursor (a_game) + nationality := {NATIONALITY_CONSTANTS}.us + defining_position := [310, 380] + end + +feature -- Access + + name: STRING_8 = "Lae" + -- This name of this item. + + defining_position: TUPLE [x, y: INTEGER_32] + -- The x- and y-coordinate (in millimeters) of Current's + -- position relative to the top-left corner of the board. + + adjacent_sea_areas: LINEAR [SEA_AREA] + -- A list of all sea areas that touch this location + local + s: LINKED_SET [SEA_AREA] + once + create s.make + s.extend (game.indonesia) + s.extend (game.south_pacific_ocean) + Result := s.linear_representation + end + +end diff --git a/jj_vitp/Implementation/classes/ports/Pearl_harbor.e b/jj_vitp/Implementation/classes/ports/Pearl_harbor.e new file mode 100644 index 0000000..761b988 --- /dev/null +++ b/jj_vitp/Implementation/classes/ports/Pearl_harbor.e @@ -0,0 +1,63 @@ +note + description: "[ + Describes this particular port + ]" + author: "Jimmy J. Johnson" + +class + PEARL_HARBOR + +inherit + + REPAIR_PORT + undefine + distance_to + redefine + make + end + + RED_PORT + redefine + make + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: like game) + -- Set up Current + do + Precursor {REPAIR_PORT} (a_game) + Precursor {RED_PORT} (a_game) + nationality := {NATIONALITY_CONSTANTS}.us + defining_position := [670, 320] + end + +feature -- Access + + name: STRING_8 = "Pearl Harbor" + -- This name of this item. + + defining_position: TUPLE [x, y: INTEGER_32] + -- The x- and y-coordinate (in millimeters) of Current's + -- position relative to the top-left corner of the board. + + repair_points: INTEGER + -- Number of repair points for the player + do + Result := ((game.sequence_of_play.turn - 1) * 3).min (15) + end + + adjacent_sea_areas: LINEAR [SEA_AREA] + -- A list of all sea areas that touch this location + local + s: LINKED_SET [SEA_AREA] + once + create s.make + s.extend (game.hawaiian_islands) + Result := s.linear_representation + end + +end diff --git a/jj_vitp/Implementation/classes/ports/Saigon.e b/jj_vitp/Implementation/classes/ports/Saigon.e new file mode 100644 index 0000000..41057ab --- /dev/null +++ b/jj_vitp/Implementation/classes/ports/Saigon.e @@ -0,0 +1,52 @@ +note + description: "[ + Describes this particular port + ]" + author: "Jimmy J. Johnson" + +class + SAIGON + +inherit + + RED_PORT + redefine + make + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: like game) + -- Set up Current + do + Precursor (a_game) + nationality := {NATIONALITY_CONSTANTS}.japanese + defining_position := [130, 230] + end + +feature -- Access + + name: STRING_8 = "Saigon" + -- This name of this item. + + defining_position: TUPLE [x, y: INTEGER_32] + -- The x- and y-coordinate (in millimeters) of Current's + -- position relative to the top-left corner of the board. + + repair_points: INTEGER = 0 + -- Number of repair points for the player + + adjacent_sea_areas: LINEAR [SEA_AREA] + -- A list of all sea areas that touch this location + local + s: LINKED_SET [SEA_AREA] + once + create s.make + s.extend (game.indonesia) + Result := s.linear_representation + end + +end diff --git a/jj_vitp/Implementation/classes/ports/Samoa.e b/jj_vitp/Implementation/classes/ports/Samoa.e new file mode 100644 index 0000000..dee4281 --- /dev/null +++ b/jj_vitp/Implementation/classes/ports/Samoa.e @@ -0,0 +1,65 @@ +note + description: "[ + Describes this particular port + ]" + author: "Jimmy J. Johnson" + +class + SAMOA + +inherit + + REPAIR_PORT + undefine + distance_to + redefine + make + end + + RED_PORT + redefine + make + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: like game) + -- Set up Current + do + Precursor {REPAIR_PORT} (a_game) + Precursor {RED_PORT} (a_game) + nationality := {NATIONALITY_CONSTANTS}.us + defining_position := [590, 510] + end + +feature -- Access + + name: STRING_8 = "Samoa" + -- This name of this item. + + defining_position: TUPLE [x, y: INTEGER_32] + -- The x- and y-coordinate (in millimeters) of Current's + -- position relative to the top-left corner of the board. + + repair_points: INTEGER + -- Number of repair points for the player + do + if is_allied and game.pearl_harbor.is_japanese then + Result := ((game.sequence_of_play.turn - 1) * 3).min (15) + end + end + + adjacent_sea_areas: LINEAR [SEA_AREA] + -- A list of all sea areas that touch this location + local + s: LINKED_SET [SEA_AREA] + once + create s.make + s.extend (game.us_mandate) + Result := s.linear_representation + end + +end diff --git a/jj_vitp/Implementation/classes/ports/Singapore.e b/jj_vitp/Implementation/classes/ports/Singapore.e new file mode 100644 index 0000000..96c8220 --- /dev/null +++ b/jj_vitp/Implementation/classes/ports/Singapore.e @@ -0,0 +1,52 @@ +note + description: "[ + Describes this particular port + ]" + author: "Jimmy J. Johnson" + +class + SINGAPORE + +inherit + + RED_PORT + redefine + make + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: like game) + -- Set up Current + do + Precursor (a_game) + nationality := {NATIONALITY_CONSTANTS}.us + defining_position := [90, 280] + end + +feature -- Access + + name: STRING_8 = "Singapore" + -- This name of this item. + + defining_position: TUPLE [x, y: INTEGER_32] + -- The x- and y-coordinate (in millimeters) of Current's + -- position relative to the top-left corner of the board. + + repair_points: INTEGER = 0 + -- Number of repair points for the player + + adjacent_sea_areas: LINEAR [SEA_AREA] + -- A list of all sea areas that touch this location + local + s: LINKED_SET [SEA_AREA] + once + create s.make + s.extend (game.indonesia) + Result := s.linear_representation + end + +end diff --git a/jj_vitp/Implementation/classes/ports/Truk.e b/jj_vitp/Implementation/classes/ports/Truk.e new file mode 100644 index 0000000..4e5dbcf --- /dev/null +++ b/jj_vitp/Implementation/classes/ports/Truk.e @@ -0,0 +1,54 @@ +note + description: "[ + Describes this particular port + ]" + author: "Jimmy J. Johnson" + +class + TRUK + +inherit + + RED_PORT + redefine + make + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: like game) + -- Set up Current + do + Precursor (a_game) + nationality := {NATIONALITY_CONSTANTS}.japanese + defining_position := [390, 310] + end + +feature -- Access + + name: STRING_8 = "Truk" + -- This name of this item. + + defining_position: TUPLE [x, y: INTEGER_32] + -- The x- and y-coordinate (in millimeters) of Current's + -- position relative to the top-left corner of the board. + + repair_points: INTEGER = 0 + -- Number of repair points for the player + + adjacent_sea_areas: LINEAR [SEA_AREA] + -- A list of all sea areas that touch this location + local + s: LINKED_SET [SEA_AREA] + once + create s.make + s.extend (game.marianas_islands) + s.extend (game.marshall_islands) + s.extend (game.south_pacific_ocean) + Result := s.linear_representation + end + +end diff --git a/jj_vitp/Implementation/classes/ports/australia.e b/jj_vitp/Implementation/classes/ports/australia.e new file mode 100644 index 0000000..8b71a7b --- /dev/null +++ b/jj_vitp/Implementation/classes/ports/australia.e @@ -0,0 +1,80 @@ +note + description: "[ + Describes this particular port + ]" + author: "Jimmy J. Johnson" + +class + AUSTRALIA + +inherit + + REPAIR_PORT + undefine + distance_to + redefine + make + end + + RED_PORT + redefine + make, + distance_to + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: like game) + -- Set up Current + do + Precursor {REPAIR_PORT} (a_game) + Precursor {RED_PORT} (a_game) + nationality := {NATIONALITY_CONSTANTS}.us + defining_position := [300, 470] + end + +feature -- Access + + name: STRING_8 = "Australia" + -- This name of this item. + + defining_position: TUPLE [x, y: INTEGER_32] + -- The x- and y-coordinate (in millimeters) of Current's + -- position relative to the top-left corner of the board. + + repair_points: INTEGER + -- Number of repair points + do + if is_allied then + Result := 1 + end + end + + adjacent_sea_areas: LINEAR [SEA_AREA] + -- A list of all sea areas that touch this location + local + s: LINKED_SET [SEA_AREA] + once + create s.make + s.extend (game.coral_sea) + s.extend (game.indian_ocean) + Result := s.linear_representation + end + + distance_to (other: LOCATION): INTEGER + -- The distance between Current and `other' + do + io.put_string (generating_type.name + ".distance_to: fix me %N") +-- if game.phase = game.movement_phase then +-- if other = game.indian_ocean or other = game.coral_sea then +-- Result := 1 +-- end +-- else +-- Result := Precursor {RED_PORT} (other) +-- end + end + +end diff --git a/jj_vitp/Implementation/classes/ports/ceylon.e b/jj_vitp/Implementation/classes/ports/ceylon.e new file mode 100644 index 0000000..48820ca --- /dev/null +++ b/jj_vitp/Implementation/classes/ports/ceylon.e @@ -0,0 +1,65 @@ +note + description: "[ + Describes this particular port + ]" + author: "Jimmy J. Johnson" + +class + CEYLON + +inherit + + REPAIR_PORT + undefine + distance_to + redefine + make + end + + RED_PORT + redefine + make + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: like game) + -- Set up Current + do + Precursor {REPAIR_PORT} (a_game) + Precursor {RED_PORT} (a_game) + nationality := {NATIONALITY_CONSTANTS}.us + defining_position := [20, 180] + end + +feature -- Access + + name: STRING_8 = "Ceylon" + -- This name of this item. + + defining_position: TUPLE [x, y: INTEGER_32] + -- The x- and y-coordinate (in millimeters) of Current's + -- position relative to the top-left corner of the board. + + repair_points: INTEGER + -- Number of repair points + do + if is_allied then + Result := 1 + end + end + + adjacent_sea_areas: LINEAR [SEA_AREA] + -- A list of all sea areas that touch this location + local + s: LINKED_SET [SEA_AREA] + once + create s.make + s.extend (game.bay_of_bengal) + Result := s.linear_representation + end + +end diff --git a/jj_vitp/Implementation/classes/ports/default_port.e b/jj_vitp/Implementation/classes/ports/default_port.e new file mode 100644 index 0000000..e15b617 --- /dev/null +++ b/jj_vitp/Implementation/classes/ports/default_port.e @@ -0,0 +1,50 @@ +note + description: "[ + {PORT} to be used as place holder when a unit is not in the game. + ]" + author: "Jimmy J. Johnson" + +class + DEFAULT_PORT + +inherit + + PORT + redefine + make + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: like game) + -- Set up Current + do + Precursor (a_game) + nationality := {NATIONALITY_CONSTANTS}.nobody + defining_position := [0, 0] + end + +feature -- Access + + name: STRING_8 = "Default Port" + -- This name of this item. + + defining_position: TUPLE [x, y: INTEGER_32] + -- The x- and y-coordinate (in millimeters) of Current's + -- position relative to the top-left corner of the board. + +feature -- Access + + adjacent_sea_areas: LINEAR [SEA_AREA] + -- A list of all sea areas that touch this location + local + s: LINKED_SET [SEA_AREA] + once + create s.make + Result := s.linear_representation + end + +end diff --git a/jj_vitp/Implementation/classes/ports/dutch_harbor.e b/jj_vitp/Implementation/classes/ports/dutch_harbor.e new file mode 100644 index 0000000..a05ae42 --- /dev/null +++ b/jj_vitp/Implementation/classes/ports/dutch_harbor.e @@ -0,0 +1,49 @@ +note + description: "[ + Describes this particular port + ]" + author: "Jimmy J. Johnson" + +class + DUTCH_HARBOR + +inherit + + GREEN_PORT + redefine + make + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: like game) + -- Set up Current + do + Precursor (a_game) + nationality := {NATIONALITY_CONSTANTS}.us + defining_position := [670, 70] + end + +feature -- Access + + name: STRING_8 = "Dutch Harbor" + -- This name of this item. + + defining_position: TUPLE [x, y: INTEGER_32] + -- The x- and y-coordinate (in millimeters) of Current's + -- position relative to the top-left corner of the board. + + adjacent_sea_areas: LINEAR [SEA_AREA] + -- A list of all sea areas that touch this location + local + s: LINKED_SET [SEA_AREA] + once + create s.make + s.extend (game.aleutian_islands) + Result := s.linear_representation + end + +end diff --git a/jj_vitp/Implementation/classes/ports/green_port.e b/jj_vitp/Implementation/classes/ports/green_port.e new file mode 100644 index 0000000..81f2628 --- /dev/null +++ b/jj_vitp/Implementation/classes/ports/green_port.e @@ -0,0 +1,14 @@ +note + description: "[ + A {PORT} in VITP that does not have repair capabilities. + ]" + author: "Jimmy J. Johnson" + +deferred class + GREEN_PORT + +inherit + + PORT + +end diff --git a/jj_vitp/Implementation/classes/ports/guadalcanal.e b/jj_vitp/Implementation/classes/ports/guadalcanal.e new file mode 100644 index 0000000..5613904 --- /dev/null +++ b/jj_vitp/Implementation/classes/ports/guadalcanal.e @@ -0,0 +1,50 @@ +note + description: "[ + Describes this particular port + ]" + author: "Jimmy J. Johnson" + +class + GUADALCANAL + +inherit + + GREEN_PORT + redefine + make + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: like game) + -- Set up Current + do + Precursor (a_game) + nationality := {NATIONALITY_CONSTANTS}.us + defining_position := [400, 450] + end + +feature -- Access + + name: STRING_8 = "Guadalcanal" + -- This name of this item. + + defining_position: TUPLE [x, y: INTEGER_32] + -- The x- and y-coordinate (in millimeters) of Current's + -- position relative to the top-left corner of the board. + + adjacent_sea_areas: LINEAR [SEA_AREA] + -- A list of all sea areas that touch this location + local + s: LINKED_SET [SEA_AREA] + once + create s.make + s.extend (game.coral_sea) + s.extend (game.south_pacific_ocean) + Result := s.linear_representation + end + +end diff --git a/jj_vitp/Implementation/classes/ports/johnston_island.e b/jj_vitp/Implementation/classes/ports/johnston_island.e new file mode 100644 index 0000000..5aee0e4 --- /dev/null +++ b/jj_vitp/Implementation/classes/ports/johnston_island.e @@ -0,0 +1,49 @@ +note + description: "[ + Describes this particular port + ]" + author: "Jimmy J. Johnson" + +class + JOHNSTON_ISLAND + +inherit + + GREEN_PORT + redefine + make + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: like game) + -- Set up Current + do + Precursor (a_game) + nationality := {NATIONALITY_CONSTANTS}.us + defining_position := [640, 370] + end + +feature -- Access + + name: STRING_8 = "Johnston Island" + -- This name of this item. + + defining_position: TUPLE [x, y: INTEGER_32] + -- The x- and y-coordinate (in millimeters) of Current's + -- position relative to the top-left corner of the board. + + adjacent_sea_areas: LINEAR [SEA_AREA] + -- A list of all sea areas that touch this location + local + s: LINKED_SET [SEA_AREA] + once + create s.make + s.extend (game.hawaiian_islands) + Result := s.linear_representation + end + +end diff --git a/jj_vitp/Implementation/classes/ports/kwajalein.e b/jj_vitp/Implementation/classes/ports/kwajalein.e new file mode 100644 index 0000000..5df5ea2 --- /dev/null +++ b/jj_vitp/Implementation/classes/ports/kwajalein.e @@ -0,0 +1,49 @@ +note + description: "[ + Describes this particular port + ]" + author: "Jimmy J. Johnson" + +class + KWAJALEIN + +inherit + + GREEN_PORT + redefine + make + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: like game) + -- Set up Current + do + Precursor (a_game) + nationality := {NATIONALITY_CONSTANTS}.us + defining_position := [470, 350] + end + +feature -- Access + + name: STRING_8 = "Kwajalein" + -- This name of this item. + + defining_position: TUPLE [x, y: INTEGER_32] + -- The x- and y-coordinate (in millimeters) of Current's + -- position relative to the top-left corner of the board. + + adjacent_sea_areas: LINEAR [SEA_AREA] + -- A list of all sea areas that touch this location + local + s: LINKED_SET [SEA_AREA] + once + create s.make + s.extend (game.marshall_islands) + Result := s.linear_representation + end + +end diff --git a/jj_vitp/Implementation/classes/ports/maloelap.e b/jj_vitp/Implementation/classes/ports/maloelap.e new file mode 100644 index 0000000..4cf9ff4 --- /dev/null +++ b/jj_vitp/Implementation/classes/ports/maloelap.e @@ -0,0 +1,49 @@ +note + description: "[ + Describes this particular port + ]" + author: "Jimmy J. Johnson" + +class + MALOELAP + +inherit + + GREEN_PORT + redefine + make + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: like game) + -- Set up Current + do + Precursor (a_game) + nationality := {NATIONALITY_CONSTANTS}.us + defining_position := [530, 350] + end + +feature -- Access + + name: STRING_8 = "Maloelap" + -- This name of this item. + + defining_position: TUPLE [x, y: INTEGER_32] + -- The x- and y-coordinate (in millimeters) of Current's + -- position relative to the top-left corner of the board. + + adjacent_sea_areas: LINEAR [SEA_AREA] + -- A list of all sea areas that touch this location + local + s: LINKED_SET [SEA_AREA] + once + create s.make + s.extend (game.marshall_islands) + Result := s.linear_representation + end + +end diff --git a/jj_vitp/Implementation/classes/ports/midway.e b/jj_vitp/Implementation/classes/ports/midway.e new file mode 100644 index 0000000..684fde3 --- /dev/null +++ b/jj_vitp/Implementation/classes/ports/midway.e @@ -0,0 +1,49 @@ +note + description: "[ + Describes this particular port + ]" + author: "Jimmy J. Johnson" + +class + MIDWAY + +inherit + + GREEN_PORT + redefine + make + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: like game) + -- Set up Current + do + Precursor (a_game) + nationality := {NATIONALITY_CONSTANTS}.us + defining_position := [560, 220] + end + +feature -- Access + + name: STRING_8 = "Midway" + -- This name of this item. + + defining_position: TUPLE [x, y: INTEGER_32] + -- The x- and y-coordinate (in millimeters) of Current's + -- position relative to the top-left corner of the board. + + adjacent_sea_areas: LINEAR [SEA_AREA] + -- A list of all sea areas that touch this location + local + s: LINKED_SET [SEA_AREA] + once + create s.make + s.extend (game.central_pacific_ocean) + Result := s.linear_representation + end + +end diff --git a/jj_vitp/Implementation/classes/ports/new_hebrides.e b/jj_vitp/Implementation/classes/ports/new_hebrides.e new file mode 100644 index 0000000..1eccc3d --- /dev/null +++ b/jj_vitp/Implementation/classes/ports/new_hebrides.e @@ -0,0 +1,50 @@ +note + description: "[ + Describes this particular port + ]" + author: "Jimmy J. Johnson" + +class + NEW_HEBRIDES + +inherit + + GREEN_PORT + redefine + make + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: like game) + -- Set up Current + do + Precursor (a_game) + nationality := {NATIONALITY_CONSTANTS}.us + defining_position := [450, 510] + end + +feature -- Access + + name: STRING_8 = "New Hebrides" + -- This name of this item. + + defining_position: TUPLE [x, y: INTEGER_32] + -- The x- and y-coordinate (in millimeters) of Current's + -- position relative to the top-left corner of the board. + + adjacent_sea_areas: LINEAR [SEA_AREA] + -- A list of all sea areas that touch this location + local + s: LINKED_SET [SEA_AREA] + once + create s.make + s.extend (game.coral_sea) + s.extend (game.us_mandate) + Result := s.linear_representation + end + +end diff --git a/jj_vitp/Implementation/classes/ports/okinawa.e b/jj_vitp/Implementation/classes/ports/okinawa.e new file mode 100644 index 0000000..95ea99b --- /dev/null +++ b/jj_vitp/Implementation/classes/ports/okinawa.e @@ -0,0 +1,49 @@ +note + description: "[ + Describes this particular port + ]" + author: "Jimmy J. Johnson" + +class + OKINAWA + +inherit + + GREEN_PORT + redefine + make + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: like game) + -- Set up Current + do + Precursor (a_game) + nationality := {NATIONALITY_CONSTANTS}.japanese + defining_position := [290, 180] + end + +feature -- Access + + name: STRING_8 = "Okinawa" + -- This name of this item. + + defining_position: TUPLE [x, y: INTEGER_32] + -- The x- and y-coordinate (in millimeters) of Current's + -- position relative to the top-left corner of the board. + + adjacent_sea_areas: LINEAR [SEA_AREA] + -- A list of all sea areas that touch this location + local + s: LINKED_SET [SEA_AREA] + once + create s.make + s.extend (game.japanese_islands) + Result := s.linear_representation + end + +end diff --git a/jj_vitp/Implementation/classes/ports/philippines.e b/jj_vitp/Implementation/classes/ports/philippines.e new file mode 100644 index 0000000..cfc6145 --- /dev/null +++ b/jj_vitp/Implementation/classes/ports/philippines.e @@ -0,0 +1,50 @@ +note + description: "[ + Describes this particular port + ]" + author: "Jimmy J. Johnson" + +class + PHILIPPINES + +inherit + + GREEN_PORT + redefine + make + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: like game) + -- Set up Current + do + Precursor (a_game) + nationality := {NATIONALITY_CONSTANTS}.us + defining_position := [220, 260] + end + +feature -- Access + + name: STRING_8 = "Philippines" + -- This name of this item. + + defining_position: TUPLE [x, y: INTEGER_32] + -- The x- and y-coordinate (in millimeters) of Current's + -- position relative to the top-left corner of the board. + + adjacent_sea_areas: LINEAR [SEA_AREA] + -- A list of all sea areas that touch this location + local + s: LINKED_SET [SEA_AREA] + once + create s.make + s.extend (game.indonesia) + s.extend (game.marianas_islands) + Result := s.linear_representation + end + +end diff --git a/jj_vitp/Implementation/classes/ports/port.e b/jj_vitp/Implementation/classes/ports/port.e new file mode 100644 index 0000000..5bcacf3 --- /dev/null +++ b/jj_vitp/Implementation/classes/ports/port.e @@ -0,0 +1,17 @@ +note + description: "Any port in VITP." + author: "Jimmy J. Johnson" + +deferred class + PORT + +inherit + + LOCATION + +feature -- Access + +feature -- Status report + + +end diff --git a/jj_vitp/Implementation/classes/ports/port_moresby.e b/jj_vitp/Implementation/classes/ports/port_moresby.e new file mode 100644 index 0000000..86ed4a8 --- /dev/null +++ b/jj_vitp/Implementation/classes/ports/port_moresby.e @@ -0,0 +1,50 @@ +note + description: "[ + Describes this particular port + ]" + author: "Jimmy J. Johnson" + +class + PORT_MORESBY + +inherit + + GREEN_PORT + redefine + make + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: like game) + -- Set up Current + do + Precursor (a_game) + nationality := {NATIONALITY_CONSTANTS}.us + defining_position := [300, 400] + end + +feature -- Access + + name: STRING_8 = "Port Moresby" + -- This name of this item. + + defining_position: TUPLE [x, y: INTEGER_32] + -- The x- and y-coordinate (in millimeters) of Current's + -- position relative to the top-left corner of the board. + + adjacent_sea_areas: LINEAR [SEA_AREA] + -- A list of all sea areas that touch this location + local + s: LINKED_SET [SEA_AREA] + once + create s.make + s.extend (game.coral_sea) + s.extend (game.indian_ocean) + Result := s.linear_representation + end + +end diff --git a/jj_vitp/Implementation/classes/ports/red_port.e b/jj_vitp/Implementation/classes/ports/red_port.e new file mode 100644 index 0000000..d892082 --- /dev/null +++ b/jj_vitp/Implementation/classes/ports/red_port.e @@ -0,0 +1,31 @@ +note + description: "[ + A "major" port {VITP_GAME}. + ]" + author: "Jimmy J. Johnson" + +deferred class + RED_PORT + +inherit + + PORT + redefine + distance_to + end + +feature -- Access + + distance_to (other: LOCATION): INTEGER + -- The distance between Current and `other' + do +-- if vitp.phase = {GAME_SEQUENCE}.returning_to_base and then +-- vitp.major_ports.has (other.name) and +-- not other.is_enemy_controlled (nationality) then +-- Result := 0 +-- else +-- Result := Precursor (other) +-- end + end + +end diff --git a/jj_vitp/Implementation/classes/ports/repair_port.e b/jj_vitp/Implementation/classes/ports/repair_port.e new file mode 100644 index 0000000..1221836 --- /dev/null +++ b/jj_vitp/Implementation/classes/ports/repair_port.e @@ -0,0 +1,58 @@ +note + description: "[ + A {PORT} in {VITP_GAME} which [possibly] has repair capability. + ]" + author: "Jimmy J. Johnson" + date: "11/11/23" + copyright: "Copyright (c) 2021, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +deferred class + REPAIR_PORT + +inherit + + PORT + redefine + make + end + +feature {NONE} -- Initialization + + make (a_game: like game) + -- Initialize Current + do + Precursor (a_game) + create dry_dock.make (0) + end + +feature -- Access + + repair_points: INTEGER + -- Number of repair points available at this port + deferred + end + + repair_points_used: INTEGER + -- Total repair points assigned to ships + do + from dry_dock.start + until dry_dock.after + loop + Result := Result + dry_dock.item.points + dry_dock.forth + end + end + +feature {NONE} -- Implementation + + dry_dock: ARRAYED_LIST [TUPLE [ship: SHIP; points: INTEGER]] + -- Contains the ships to be repaired along with the repair + -- points assigned to that ship on this turn. + + +invariant + + repair_points_not_exceeded: repair_points_used <= repair_points + +end diff --git a/jj_vitp/Implementation/classes/ports/saipan.e b/jj_vitp/Implementation/classes/ports/saipan.e new file mode 100644 index 0000000..d55d295 --- /dev/null +++ b/jj_vitp/Implementation/classes/ports/saipan.e @@ -0,0 +1,49 @@ +note + description: "[ + Describes this particular port + ]" + author: "Jimmy J. Johnson" + +class + SAIPAN + +inherit + + GREEN_PORT + redefine + make + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: like game) + -- Set up Current + do + Precursor (a_game) + nationality := {NATIONALITY_CONSTANTS}.us + defining_position := [380, 260] + end + +feature -- Access + + name: STRING_8 = "Saipan" + -- This name of this item. + + defining_position: TUPLE [x, y: INTEGER_32] + -- The x- and y-coordinate (in millimeters) of Current's + -- position relative to the top-left corner of the board. + + adjacent_sea_areas: LINEAR [SEA_AREA] + -- A list of all sea areas that touch this location + local + s: LINKED_SET [SEA_AREA] + once + create s.make + s.extend (game.marianas_islands) + Result := s.linear_representation + end + +end diff --git a/jj_vitp/Implementation/classes/ports/yokosuka_navy_yard.e b/jj_vitp/Implementation/classes/ports/yokosuka_navy_yard.e new file mode 100644 index 0000000..9aadb46 --- /dev/null +++ b/jj_vitp/Implementation/classes/ports/yokosuka_navy_yard.e @@ -0,0 +1,65 @@ +note + description: "[ + Describes this particular port + ]" + author: "Jimmy J. Johnson" + +class + YOKOSUKA_NAVY_YARD + +inherit + + REPAIR_PORT + undefine + distance_to + redefine + make + end + + RED_PORT + redefine + make + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: like game) + -- Set up Current + do + Precursor {REPAIR_PORT} (a_game) + Precursor {RED_PORT} (a_game) + nationality := {NATIONALITY_CONSTANTS}.Japanese + defining_position := [300, 130] + end + +feature -- Access + + name: STRING_8 = "Yokosuka Navy Yard" + -- This name of this item. + + defining_position: TUPLE [x, y: INTEGER_32] + -- The x- and y-coordinate (in millimeters) of Current's + -- position relative to the top-left corner of the board. + + repair_points: INTEGER + -- Number of repair points for the player + do + if is_japanese then + Result := 6 + end + end + + adjacent_sea_areas: LINEAR [SEA_AREA] + -- A list of all sea areas that touch this location + local + s: LINKED_SET [SEA_AREA] + once + create s.make + s.extend (game.japanese_islands) + Result := s.linear_representation + end + +end diff --git a/jj_vitp/Implementation/classes/sea_areas/aleutian_islands.e b/jj_vitp/Implementation/classes/sea_areas/aleutian_islands.e new file mode 100644 index 0000000..eba3e66 --- /dev/null +++ b/jj_vitp/Implementation/classes/sea_areas/aleutian_islands.e @@ -0,0 +1,70 @@ +note + description: "[ + Describes this particular location in VITP + ]" + author: "Jimmy J. Johnson" + +class + ALEUTIAN_ISLANDS + +inherit + + SEA_AREA + redefine + make + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: like game) + -- Initialize Current + do + Precursor (a_game) + nationality := {NATIONALITY_CONSTANTS}.nobody + defining_position := [570, 80] + end + +feature -- Access + + name: STRING_8 = "Aleutian Islands" + -- The displayed name for this widget + + defining_position: TUPLE [x, y: INTEGER_32] + -- The x- and y-coordinate (in millimeters) of Current's + -- position relative to the top-left corner of the board. + + allied_poc: INTEGER = 0 + -- The number of points gained by the Allied player if he + -- controls this area at the end of a turn + + japanese_poc: INTEGER = 1 + -- The number of points gained by the Japanese player if he + -- controls this area at the end of a turn + + adjoining_ports: LINEAR [PORT] + -- All the ports that adjoin this sea area + local + p: LINKED_SET [PORT] + once + create p.make + p.extend (game.attu) + p.extend (game.dutch_harbor) + Result := p.linear_representation + end + + adjacent_sea_areas: LINEAR [SEA_AREA] + -- All the sea areas which touch this one + local + s: LINKED_SET [SEA_AREA] + once + create s.make + s.extend (game.japanese_islands) + s.extend (game.central_pacific_ocean) + s.extend (game.north_pacific_ocean) + Result := s.linear_representation + end + +end diff --git a/jj_vitp/Implementation/classes/sea_areas/bay_of_bengal.e b/jj_vitp/Implementation/classes/sea_areas/bay_of_bengal.e new file mode 100644 index 0000000..166811b --- /dev/null +++ b/jj_vitp/Implementation/classes/sea_areas/bay_of_bengal.e @@ -0,0 +1,69 @@ +note + description: "[ + Describes this particular location in VITP + ]" + author: "Jimmy J. Johnson" + +class + BAY_OF_BENGAL + +inherit + + SEA_AREA + redefine + make + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: like game) + -- Initialize Current + do + Precursor (a_game) + nationality := {NATIONALITY_CONSTANTS}.us + defining_position := [30, 330] + end + +feature -- Access + + name: STRING_8 = "Bay of Bengal" + -- The displayed name for this widget + + defining_position: TUPLE [x, y: INTEGER_32] + -- The x- and y-coordinate (in millimeters) of Current's + -- position relative to the top-left corner of the board. + + allied_poc: INTEGER = 1 + -- The number of points gained by the Allied player if he + -- controls this area at the end of a turn + + japanese_poc: INTEGER = 2 + -- The number of points gained by the Japanese player if he + -- controls this area at the end of a turn + + adjoining_ports: LINEAR [PORT] + -- All the ports that adjoin this sea area + local + p: LINKED_SET [PORT] + once + create p.make + p.extend (game.ceylon) + p.extend (game.andaman_islands) + Result := p.linear_representation + end + + adjacent_sea_areas: LINEAR [SEA_AREA] + -- All the sea areas which touch this one + local + s: LINKED_SET [SEA_AREA] + once + create s.make + s.extend (game.indonesia) + s.extend (game.indian_ocean) + Result := s.linear_representation + end + +end diff --git a/jj_vitp/Implementation/classes/sea_areas/central_pacific_ocean.e b/jj_vitp/Implementation/classes/sea_areas/central_pacific_ocean.e new file mode 100644 index 0000000..d4e9220 --- /dev/null +++ b/jj_vitp/Implementation/classes/sea_areas/central_pacific_ocean.e @@ -0,0 +1,72 @@ +note + description: "[ + Describes this particular location in VITP + ]" + author: "Jimmy J. Johnson" + +class + CENTRAL_PACIFIC_OCEAN + +inherit + + SEA_AREA + redefine + make + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: like game) + -- Initialize Current + do + Precursor (a_game) + nationality := {NATIONALITY_CONSTANTS}.us + defining_position := [540, 180] + end + +feature -- Access + + name: STRING_8 = "Central Pacific Ocean" + -- The displayed name for this widget + + defining_position: TUPLE [x, y: INTEGER_32] + -- The x- and y-coordinate (in millimeters) of Current's + -- position relative to the top-left corner of the board. + + allied_poc: INTEGER = 0 + -- The number of points gained by the Allied player if he + -- controls this area at the end of a turn + + japanese_poc: INTEGER = 1 + -- The number of points gained by the Japanese player if he + -- controls this area at the end of a turn + + adjoining_ports: LINEAR [PORT] + -- All the ports that adjoin this sea area + local + p: LINKED_SET [PORT] + once + create p.make + p.extend (game.midway) + Result := p.linear_representation + end + + adjacent_sea_areas: LINEAR [SEA_AREA] + -- All the sea areas which touch this one + local + s: LINKED_SET [SEA_AREA] + once + create s.make + s.extend (game.aleutian_islands) + s.extend (game.hawaiian_islands) + s.extend (game.japanese_islands) + s.extend (game.marianas_islands) + s.extend (game.marshall_islands) + s.extend (game.north_pacific_ocean) + Result := s.linear_representation + end + +end diff --git a/jj_vitp/Implementation/classes/sea_areas/coral_sea.e b/jj_vitp/Implementation/classes/sea_areas/coral_sea.e new file mode 100644 index 0000000..b0b18d2 --- /dev/null +++ b/jj_vitp/Implementation/classes/sea_areas/coral_sea.e @@ -0,0 +1,72 @@ +note + description: "[ + Describes this particular location in VITP + ]" + author: "Jimmy J. Johnson" + +class + CORAL_SEA + +inherit + + SEA_AREA + redefine + make + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: like game) + -- Initialize Current + do + Precursor (a_game) + nationality := {NATIONALITY_CONSTANTS}.us + defining_position := [380, 510] + end + +feature -- Access + + name: STRING_8 = "Coral Sea" + -- The displayed name for this widget + + defining_position: TUPLE [x, y: INTEGER_32] + -- The x- and y-coordinate (in millimeters) of Current's + -- position relative to the top-left corner of the board. + + allied_poc: INTEGER = 2 + -- The number of points gained by the Allied player if he + -- controls this area at the end of a turn + + japanese_poc: INTEGER = 2 + -- The number of points gained by the Japanese player if he + -- controls this area at the end of a turn + + adjoining_ports: LINEAR [PORT] + -- All the ports that adjoin this sea area + local + p: LINKED_SET [PORT] + once + create p.make + p.extend (game.australia) + p.extend (game.port_moresby) + p.extend (game.guadalcanal) + p.extend (game.new_hebrides) + Result := p.linear_representation + end + + adjacent_sea_areas: LINEAR [SEA_AREA] + -- All the sea areas which touch this one + local + s: LINKED_SET [SEA_AREA] + once + create s.make + s.extend (game.indian_ocean) + s.extend (game.south_pacific_ocean) + s.extend (game.us_mandate) + Result := s.linear_representation + end + +end diff --git a/jj_vitp/Implementation/classes/sea_areas/hawaiian_islands.e b/jj_vitp/Implementation/classes/sea_areas/hawaiian_islands.e new file mode 100644 index 0000000..f09efdf --- /dev/null +++ b/jj_vitp/Implementation/classes/sea_areas/hawaiian_islands.e @@ -0,0 +1,71 @@ +note + description: "[ + Describes this particular location in VITP + ]" + author: "Jimmy J. Johnson" + +class + HAWAIIAN_ISLANDS + +inherit + + SEA_AREA + redefine + make + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: like game) + -- Initialize Current + do + Precursor (a_game) + nationality := {NATIONALITY_CONSTANTS}.us + defining_position := [660, 400] + end + +feature -- Access + + name: STRING_8 = "Hawaiian Islands" + -- The displayed name for this widget + + defining_position: TUPLE [x, y: INTEGER_32] + -- The x- and y-coordinate (in millimeters) of Current's + -- position relative to the top-left corner of the board. + + allied_poc: INTEGER = 3 + -- The number of points gained by the Allied player if he + -- controls this area at the end of a turn + + japanese_poc: INTEGER = 2 + -- The number of points gained by the Japanese player if he + -- controls this area at the end of a turn + + adjoining_ports: LINEAR [PORT] + -- All the ports that adjoin this sea area + local + p: LINKED_SET [PORT] + once + create p.make + p.extend (game.johnston_island) + p.extend (game.pearl_harbor) + Result := p.linear_representation + end + + adjacent_sea_areas: LINEAR [SEA_AREA] + -- All the sea areas which touch this one + local + s: LINKED_SET [SEA_AREA] + once + create s.make + s.extend (game.central_pacific_ocean) + s.extend (game.marshall_islands) + s.extend (game.north_pacific_ocean) + s.extend (game.us_mandate) + Result := s.linear_representation + end + +end diff --git a/jj_vitp/Implementation/classes/sea_areas/indian_ocean.e b/jj_vitp/Implementation/classes/sea_areas/indian_ocean.e new file mode 100644 index 0000000..d0bff3c --- /dev/null +++ b/jj_vitp/Implementation/classes/sea_areas/indian_ocean.e @@ -0,0 +1,70 @@ +note + description: "[ + Describes this particular location in VITP + ]" + author: "Jimmy J. Johnson" + +class + INDIAN_OCEAN + +inherit + + SEA_AREA + redefine + make + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: like game) + -- Initialize Current + do + Precursor (a_game) + nationality := {NATIONALITY_CONSTANTS}.us + defining_position := [70, 440] + end + +feature -- Access + + name: STRING_8 = "Indian Ocean" + -- The displayed name for this widget + + defining_position: TUPLE [x, y: INTEGER_32] + -- The x- and y-coordinate (in millimeters) of Current's + -- position relative to the top-left corner of the board. + + allied_poc: INTEGER = 0 + -- The number of points gained by the Allied player if he + -- controls this area at the end of a turn + + japanese_poc: INTEGER = 2 + -- The number of points gained by the Japanese player if he + -- controls this area at the end of a turn + + adjoining_ports: LINEAR [PORT] + -- All the ports that adjoin this sea area + local + p: LINKED_SET [PORT] + once + create p.make + p.extend (game.australia) + p.extend (game.port_moresby) + Result := p.linear_representation + end + + adjacent_sea_areas: LINEAR [SEA_AREA] + -- All the sea areas which touch this one + local + s: LINKED_SET [SEA_AREA] + once + create s.make + s.extend (game.bay_of_bengal) + s.extend (game.indonesia) + s.extend (game.coral_sea) + Result := s.linear_representation + end + +end diff --git a/jj_vitp/Implementation/classes/sea_areas/indonesia.e b/jj_vitp/Implementation/classes/sea_areas/indonesia.e new file mode 100644 index 0000000..ff26665 --- /dev/null +++ b/jj_vitp/Implementation/classes/sea_areas/indonesia.e @@ -0,0 +1,74 @@ +note + description: "[ + Describes this particular location in VITP + ]" + author: "Jimmy J. Johnson" + +class + INDONESIA + +inherit + + SEA_AREA + redefine + make + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: like game) + -- Initialize Current + do + Precursor (a_game) + nationality := {NATIONALITY_CONSTANTS}.us + defining_position := [150, 300] + end + +feature -- Access + + name: STRING_8 = "Indonesia" + -- The displayed name for this widget + + defining_position: TUPLE [x, y: INTEGER_32] + -- The x- and y-coordinate (in millimeters) of Current's + -- position relative to the top-left corner of the board. + + allied_poc: INTEGER = 1 + -- The number of points gained by the Allied player if he + -- controls this area at the end of a turn + + japanese_poc: INTEGER = 3 + -- The number of points gained by the Japanese player if he + -- controls this area at the end of a turn + + adjoining_ports: LINEAR [PORT] + -- All the ports that adjoin this sea area + local + p: LINKED_SET [PORT] + once + create p.make + p.extend (game.saigon) + p.extend (game.singapore) + p.extend (game.philippines) + p.extend (game.lae) + Result := p.linear_representation + end + + adjacent_sea_areas: LINEAR [SEA_AREA] + -- All the sea areas which touch this one + local + s: LINKED_SET [SEA_AREA] + once + create s.make + s.extend (game.bay_of_bengal) + s.extend (game.indonesia) + s.extend (game.japanese_islands) + s.extend (game.marshall_islands) + s.extend (game.south_pacific_ocean) + Result := s.linear_representation + end + +end diff --git a/jj_vitp/Implementation/classes/sea_areas/japanese_islands.e b/jj_vitp/Implementation/classes/sea_areas/japanese_islands.e new file mode 100644 index 0000000..49bf9fd --- /dev/null +++ b/jj_vitp/Implementation/classes/sea_areas/japanese_islands.e @@ -0,0 +1,71 @@ +note + description: "[ + Describes this particular location in VITP + ]" + author: "Jimmy J. Johnson" + +class + JAPANESE_ISLANDS + +inherit + + SEA_AREA + redefine + make + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: like game) + -- Initialize Current + do + Precursor (a_game) + nationality := {NATIONALITY_CONSTANTS}.japanese + defining_position := [420, 110] + end + +feature -- Access + + name: STRING_8 = "Japanese Islands" + -- The displayed name for this widget + + defining_position: TUPLE [x, y: INTEGER_32] + -- The x- and y-coordinate (in millimeters) of Current's + -- position relative to the top-left corner of the board. + + allied_poc: INTEGER = 3 + -- The number of points gained by the Allied player if he + -- controls this area at the end of a turn + + japanese_poc: INTEGER = 3 + -- The number of points gained by the Japanese player if he + -- controls this area at the end of a turn + + adjoining_ports: LINEAR [PORT] + -- All the ports that adjoin this sea area + local + p: LINKED_SET [PORT] + once + create p.make + p.extend (game.yokosuka_navy_yard) + p.extend (game.okinawa) + Result := p.linear_representation + end + + adjacent_sea_areas: LINEAR [SEA_AREA] + -- All the sea areas which touch this one + local + s: LINKED_SET [SEA_AREA] + once + create s.make + s.extend (game.aleutian_islands) + s.extend (game.central_pacific_ocean) + s.extend (game.marianas_islands) + s.extend (game.indonesia) + Result := s.linear_representation + end + +end diff --git a/jj_vitp/Implementation/classes/sea_areas/marianas_islands.e b/jj_vitp/Implementation/classes/sea_areas/marianas_islands.e new file mode 100644 index 0000000..8060fde --- /dev/null +++ b/jj_vitp/Implementation/classes/sea_areas/marianas_islands.e @@ -0,0 +1,73 @@ +note + description: "[ + Describes this particular location in VITP + ]" + author: "Jimmy J. Johnson" + +class + MARIANAS_ISLANDS + +inherit + + SEA_AREA + redefine + make + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: like game) + -- Initialize Current + do + Precursor (a_game) + nationality := {NATIONALITY_CONSTANTS}.japanese + defining_position := [310, 250] + end + +feature -- Access + + name: STRING_8 = "Marianas Islands" + -- The displayed name for this widget + + defining_position: TUPLE [x, y: INTEGER_32] + -- The x- and y-coordinate (in millimeters) of Current's + -- position relative to the top-left corner of the board. + + allied_poc: INTEGER = 1 + -- The number of points gained by the Allied player if he + -- controls this area at the end of a turn + + japanese_poc: INTEGER = 2 + -- The number of points gained by the Japanese player if he + -- controls this area at the end of a turn + + adjoining_ports: LINEAR [PORT] + -- All the ports that adjoin this sea area + local + p: LINKED_SET [PORT] + once + create p.make + p.extend (game.philippines) + p.extend (game.saipan) + p.extend (game.truk) + Result := p.linear_representation + end + + adjacent_sea_areas: LINEAR [SEA_AREA] + -- All the sea areas which touch this one + local + s: LINKED_SET [SEA_AREA] + once + create s.make + s.extend (game.central_pacific_ocean) + s.extend (game.indonesia) + s.extend (game.japanese_islands) + s.extend (game.marshall_islands) + s.extend (game.south_pacific_ocean) + Result := s.linear_representation + end + +end diff --git a/jj_vitp/Implementation/classes/sea_areas/marshall_islands.e b/jj_vitp/Implementation/classes/sea_areas/marshall_islands.e new file mode 100644 index 0000000..8f75857 --- /dev/null +++ b/jj_vitp/Implementation/classes/sea_areas/marshall_islands.e @@ -0,0 +1,73 @@ +note + description: "[ + Describes this particular location in VITP + ]" + author: "Jimmy J. Johnson" + +class + MARSHALL_ISLANDS + +inherit + + SEA_AREA + redefine + make + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: like game) + -- Initialize Current + do + Precursor (a_game) + nationality := {NATIONALITY_CONSTANTS}.japanese + defining_position := [490, 320] + end + +feature -- Access + + name: STRING_8 = "Marshall Islands" + -- The displayed name for this widget + + defining_position: TUPLE [x, y: INTEGER_32] + -- The x- and y-coordinate (in millimeters) of Current's + -- position relative to the top-left corner of the board. + + allied_poc: INTEGER = 1 + -- The number of points gained by the Allied player if he + -- controls this area at the end of a turn + + japanese_poc: INTEGER = 1 + -- The number of points gained by the Japanese player if he + -- controls this area at the end of a turn + + adjoining_ports: LINEAR [PORT] + -- All the ports that adjoin this sea area + local + p: LINKED_SET [PORT] + once + create p.make + p.extend (game.kwajalein) + p.extend (game.maloelap) + p.extend (game.truk) + Result := p.linear_representation + end + + adjacent_sea_areas: LINEAR [SEA_AREA] + -- All the sea areas which touch this one + local + s: LINKED_SET [SEA_AREA] + once + create s.make + s.extend (game.central_pacific_ocean) + s.extend (game.hawaiian_islands) + s.extend (game.marianas_islands) + s.extend (game.south_pacific_ocean) + s.extend (game.us_mandate) + Result := s.linear_representation + end + +end diff --git a/jj_vitp/Implementation/classes/sea_areas/north_pacific_ocean.e b/jj_vitp/Implementation/classes/sea_areas/north_pacific_ocean.e new file mode 100644 index 0000000..5c9797c --- /dev/null +++ b/jj_vitp/Implementation/classes/sea_areas/north_pacific_ocean.e @@ -0,0 +1,69 @@ +note + description: "[ + Describes this particular location in VITP + ]" + author: "Jimmy J. Johnson" + +class + NORTH_PACIFIC_OCEAN + +inherit + + SEA_AREA + redefine + make + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: like game) + -- Initialize Current + do + Precursor (a_game) + nationality := {NATIONALITY_CONSTANTS}.nobody + defining_position := [670, 150] + end + +feature -- Access + + name: STRING_8 = "North Pacific Ocean" + -- The displayed name for this widget + + defining_position: TUPLE [x, y: INTEGER_32] + -- The x- and y-coordinate (in millimeters) of Current's + -- position relative to the top-left corner of the board. + + allied_poc: INTEGER = 1 + -- The number of points gained by the Allied player if he + -- controls this area at the end of a turn + + japanese_poc: INTEGER = 1 + -- The number of points gained by the Japanese player if he + -- controls this area at the end of a turn + + adjoining_ports: LINEAR [PORT] + -- All the ports that adjoin this sea area + local + p: LINKED_SET [PORT] + once + create p.make + p.extend (game.dutch_harbor) + Result := p.linear_representation + end + + adjacent_sea_areas: LINEAR [SEA_AREA] + -- All the sea areas which touch this one + local + s: LINKED_SET [SEA_AREA] + once + create s.make + s.extend (game.aleutian_islands) + s.extend (game.central_pacific_ocean) + s.extend (game.hawaiian_islands) + Result := s.linear_representation + end + +end diff --git a/jj_vitp/Implementation/classes/sea_areas/sea_area.e b/jj_vitp/Implementation/classes/sea_areas/sea_area.e new file mode 100644 index 0000000..be0469e --- /dev/null +++ b/jj_vitp/Implementation/classes/sea_areas/sea_area.e @@ -0,0 +1,52 @@ +note + description: "[ + Represents a sea area for the VITP game. + ]" + author: "Jimmy J. Johnson" + +deferred class + SEA_AREA + +inherit + + LOCATION + +feature -- Access + + POC: INTEGER + -- The number of points awarded at end of turn to player + -- that controls this area. + do + if is_japanese then + Result := japanese_poc + else + Result := allied_poc + end + end + + japanese_poc: INTEGER + -- The number of points gained by the Japanese player if he + -- controls this area at the end of a turn + deferred + end + + allied_poc: INTEGER + -- The number of points gained by the Allied player if he + -- controls this area at the end of a turn + deferred + end + + adjoining_ports: LINEAR [PORT] + -- All the ports that adjoin this sea area + deferred + end + +feature -- Status report + + is_contested: BOOLEAN + -- Does Current contain Japanese and Allied units? + do + Result := japanese_units.count > 0 and allied_units.count > 0 + end + +end diff --git a/jj_vitp/Implementation/classes/sea_areas/south_pacific_ocean.e b/jj_vitp/Implementation/classes/sea_areas/south_pacific_ocean.e new file mode 100644 index 0000000..c9498a9 --- /dev/null +++ b/jj_vitp/Implementation/classes/sea_areas/south_pacific_ocean.e @@ -0,0 +1,73 @@ +note + description: "[ + Describes this particular location in VITP + ]" + author: "Jimmy J. Johnson" + +class + SOUTH_PACIFIC_OCEAN + +inherit + + SEA_AREA + redefine + make + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: like game) + -- Initialize Current + do + Precursor (a_game) + nationality := {NATIONALITY_CONSTANTS}.us + defining_position := [390, 390] + end + +feature -- Access + + name: STRING_8 = "South Pacific Ocean" + -- The displayed name for this widget + + defining_position: TUPLE [x, y: INTEGER_32] + -- The x- and y-coordinate (in millimeters) of Current's + -- position relative to the top-left corner of the board. + + allied_poc: INTEGER = 1 + -- The number of points gained by the Allied player if he + -- controls this area at the end of a turn + + japanese_poc: INTEGER = 2 + -- The number of points gained by the Japanese player if he + -- controls this area at the end of a turn + + adjoining_ports: LINEAR [PORT] + -- All the ports that adjoin this sea area + local + p: LINKED_SET [PORT] + once + create p.make + p.extend (game.guadalcanal) + p.extend (game.lae) + p.extend (game.truk) + Result := p.linear_representation + end + + adjacent_sea_areas: LINEAR [SEA_AREA] + -- All the sea areas which touch this one + local + s: LINKED_SET [SEA_AREA] + once + create s.make + s.extend (game.coral_sea) + s.extend (game.indonesia) + s.extend (game.marianas_islands) + s.extend (game.marshall_islands) + s.extend (game.us_mandate) + Result := s.linear_representation + end + +end diff --git a/jj_vitp/Implementation/classes/sea_areas/us_mandate.e b/jj_vitp/Implementation/classes/sea_areas/us_mandate.e new file mode 100644 index 0000000..b3a13e0 --- /dev/null +++ b/jj_vitp/Implementation/classes/sea_areas/us_mandate.e @@ -0,0 +1,71 @@ +note + description: "[ + Describes this particular location in VITP + ]" + author: "Jimmy J. Johnson" + +class + US_MANDATE + +inherit + + SEA_AREA + redefine + make + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: like game) + -- Initialize Current + do + Precursor (a_game) + nationality := {NATIONALITY_CONSTANTS}.us + defining_position := [570, 460] + end + +feature -- Access + + name: STRING_8 = "US Mandate" + -- The displayed name for this widget + + defining_position: TUPLE [x, y: INTEGER_32] + -- The x- and y-coordinate (in millimeters) of Current's + -- position relative to the top-left corner of the board. + + allied_poc: INTEGER = 2 + -- The number of points gained by the Allied player if he + -- controls this area at the end of a turn + + japanese_poc: INTEGER = 2 + -- The number of points gained by the Japanese player if he + -- controls this area at the end of a turn + + adjoining_ports: LINEAR [PORT] + -- All the ports that adjoin this sea area + local + p: LINKED_SET [PORT] + once + create p.make + p.extend (game.new_hebrides) + p.extend (game.samoa) + Result := p.linear_representation + end + + adjacent_sea_areas: LINEAR [SEA_AREA] + -- All the sea areas which touch this one + local + s: LINKED_SET [SEA_AREA] + once + create s.make + s.extend (game.coral_sea) + s.extend (game.hawaiian_islands) + s.extend (game.marshall_islands) + s.extend (game.south_pacific_ocean) + Result := s.linear_representation + end + +end diff --git a/jj_vitp/Implementation/classes/units/air_unit.e b/jj_vitp/Implementation/classes/units/air_unit.e new file mode 100644 index 0000000..22c8625 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/air_unit.e @@ -0,0 +1,151 @@ +note + description: "[ + Represents one of the air force attack units in VITP. + ]" + author: "Jimmy J. Johnson" + +deferred class + AIR_UNIT + +inherit + + ATTACK_UNIT + redefine + patrol_distance, + raid_distance, + arrival_location +-- arrival_position + end + +feature -- Access + + patrol_distance: INTEGER = 1000 + -- How may sea areas can Current move through as patroller? + -- Just set to a very large number. + + raid_distance: INTEGER = 1000 + -- How may sea areas can Current move through as raider? + -- Just set to a very large number. + + arrival_location: LOCATION + -- The port or sea area at which this unit may enter the game + do + if is_returning_unit then + if nationality = game.japanese then + Result := game.uncommitted_japanese_location + else + Result := game.uncommitted_allied_location + end + else + Result := Precursor + end + end + +-- arrival_position: like position +-- -- The location (latitude/longitude-like coordinates) where Current +-- -- will enter the game +-- local +-- sop: VITP_SEQUENCE_OF_PLAY +-- do +-- sop := game.sequence_of_play +-- if nationality = game.japanese then +-- Result := [250, 50] +-- else +-- if sop.turn = 1 and Current = game.eleventh_af then +-- Result := [700, 300] +-- elseif sop.turn = 1 and Current = game.fifth_af then +-- Result := [130, 320] +-- else +-- Result := [700, 560] +-- end +-- end +-- end + +feature -- Status report + + is_sunk: BOOLEAN + -- Has the unit been sunk this turn? + do + Result := damage >= defense_factor + end + + is_patrollable: BOOLEAN = True + -- Can this unit be a patroller for area control purposes? + + is_raidable: BOOLEAN = False + -- Can this unit be a raider? + + is_patrolling: BOOLEAN = False + -- Is this unit a patroller (as opposed to a raider)? + -- Air units a `is_patrollable' but don't move as patrollers. + + is_raiding: BOOLEAN = False + -- Is this unit a raider? + +feature -- Basic operations + + return_to_port (a_port: PORT) + require +-- is_return_allowed: is_at_sea and then a_port.controller = nationality and then +-- (location.adjoins (a_port) or else a_port.is_major) + do + location := a_port + end + + repair + -- Do repairs on the ship + require +-- is_in_port: location.is_port + port_has_repair_capability: + do + + end + +-- join_force (a_other: ATTACK_UNIT) +-- -- Join forces with `a_other' as a single `task_force' +-- do +-- check +-- do_not_call: false then +-- -- Because inapplicable to {AIR_UNIT} +-- end +-- end + +-- leave_force +-- -- Remove Current from the `task_force' to which it belongs, but only +-- -- if there are other ships in the force, and put it in its own. +-- do +-- check +-- do_not_call: false then +-- -- Because inapplicable to {AIR_UNIT} +-- end +-- end + +feature -- Query + + is_incompatible_position (a_position: VITP_POSITION): BOOLEAN + -- Is `a_position' located on a unit with which Current is NOT + -- allowed to `join_force' (e.g. on a submarine or an enemy)? + local + u_list: VITP_TABLE [ATTACK_UNIT] + au: ATTACK_UNIT + do + if not is_in_game then + Result := false + else + u_list := game.all_attack_units + from u_list.start + until u_list.after or else Result + loop + au := u_list.item_for_iteration + Result := au.contains_position (a_position) + u_list.forth + end + end + -- Temp for testing + Result := false + end + +feature {NONE} -- Implementaion + + +end diff --git a/jj_vitp/Implementation/classes/units/allied_air_unit.e b/jj_vitp/Implementation/classes/units/allied_air_unit.e new file mode 100644 index 0000000..2277328 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_air_unit.e @@ -0,0 +1,27 @@ +note + description: "[ + An {AIR_UNIT} belonging to the Allied player in VITP + ]" + author: "Jimmy J. Johnson" + date: "3/15/24" + copyright: "Copyright (c) 2021, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +deferred class + ALLIED_AIR_UNIT + +inherit + + ALLIED_UNIT + undefine + patrol_distance, + raid_distance, + arrival_location + end + + AIR_UNIT + undefine + make + end + +end diff --git a/jj_vitp/Implementation/classes/units/allied_ship.e b/jj_vitp/Implementation/classes/units/allied_ship.e new file mode 100644 index 0000000..96615dd --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_ship.e @@ -0,0 +1,35 @@ +note + description: "[ + An {SHIP} that belongs to the Allies. + ]" + author: "Jimmy J. Johnson" + date: "5/12/24" + copyright: "Copyright (c) 2024, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +deferred class + ALLIED_SHIP + +inherit + + ALLIED_UNIT + undefine + reinforceable_ports, + internal_is_movable, + is_bottomed + end + + SHIP + undefine + make -- make from {ALLIED_UNIT} calls {SHIP}.make +-- reinforceable_ports + end + +invariant + + is_allied: nationality = {NATIONALITY_CONSTANTS}.us or + nationality = {NATIONALITY_CONSTANTS}.british or + nationality = {NATIONALITY_CONSTANTS}.australian or + nationality = {NATIONALITY_CONSTANTS}.dutch + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_air_units/eleventh_af.e b/jj_vitp/Implementation/classes/units/allied_units/allied_air_units/eleventh_af.e new file mode 100644 index 0000000..996190d --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_air_units/eleventh_af.e @@ -0,0 +1,57 @@ +note + description: "[ + Represents the corresponding air unit in VITP. + ]" + author: "Jimmy J. Johnson" + +class + ELEVENTH_AF + +inherit + + ALLIED_AIR_UNIT + redefine + make + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: like game) + -- Initialize attributes of Current + do + PRECURSOR {ALLIED_AIR_UNIT} (a_game) + nationality := game.us + home_port := arrival_port + end + +feature -- Access + + name: STRING_8 = "11th A.F." + -- The name of this unit. + + arrival_turn: INTEGER = 2 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 2 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 0 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 4 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 9 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_air_units/fifth_af.e b/jj_vitp/Implementation/classes/units/allied_units/allied_air_units/fifth_af.e new file mode 100644 index 0000000..ca57ebd --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_air_units/fifth_af.e @@ -0,0 +1,68 @@ +note + description: "[ + Represents the corresponding air unit in game. + ]" + author: "Jimmy J. Johnson" + +class + FIFTH_AF + +inherit + + ALLIED_AIR_UNIT + redefine + make, + arrival_location, + arrival_port + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: like game) + -- Initialize attributes of Current + do + arrival_location := a_game.indonesia + arrival_port := a_game.singapore + PRECURSOR {ALLIED_AIR_UNIT} (a_game) + nationality := game.us + home_port := arrival_port + end + +feature -- Access + + name: STRING_8 = "5th A.F." + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 2 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 0 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 4 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 9 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + + arrival_location: LOCATION + -- The port or sea area at which this unit may enter the game + + arrival_port: like home_port + -- The port to which Current is assigned when it comes into + -- the game during a reinforcement action. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_air_units/fourteenth_af.e b/jj_vitp/Implementation/classes/units/allied_units/allied_air_units/fourteenth_af.e new file mode 100644 index 0000000..219b936 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_air_units/fourteenth_af.e @@ -0,0 +1,57 @@ +note + description: "[ + Represents the corresponding air unit in VITP. + ]" + author: "Jimmy J. Johnson" + +class + FOURTEENTH_AF + +inherit + + ALLIED_AIR_UNIT + redefine + make + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: like game) + -- Initialize attributes of Current + do + PRECURSOR {ALLIED_AIR_UNIT} (a_game) + nationality := game.us + home_port := arrival_port + end + +feature -- Access + + name: STRING_8 = "14th A.F." + -- The name of this unit. + + arrival_turn: INTEGER = 5 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 2 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 0 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 4 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 9 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_air_units/marine.e b/jj_vitp/Implementation/classes/units/allied_units/allied_air_units/marine.e new file mode 100644 index 0000000..07dd09c --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_air_units/marine.e @@ -0,0 +1,57 @@ +note + description: "[ + Represents the corresponding air unit in VITP. + ]" + author: "Jimmy J. Johnson" + +class + MARINE + +inherit + + ALLIED_AIR_UNIT + redefine + make + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: like game) + -- Initialize attributes of Current + do + PRECURSOR {ALLIED_AIR_UNIT} (a_game) + nationality := game.us + home_port := arrival_port + end + +feature -- Access + + name: STRING_8 = "Marine" + -- The name of this unit. + + arrival_turn: INTEGER = 4 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 2 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 0 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 4 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 9 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_air_units/naval.e b/jj_vitp/Implementation/classes/units/allied_units/allied_air_units/naval.e new file mode 100644 index 0000000..a493e5d --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_air_units/naval.e @@ -0,0 +1,57 @@ +note + description: "[ + Represents the corresponding air unit in VITP. + ]" + author: "Jimmy J. Johnson" + +class + NAVAL + +inherit + + ALLIED_AIR_UNIT + redefine + make + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: like game) + -- Initialize attributes of Current + do + PRECURSOR {ALLIED_AIR_UNIT} (a_game) + nationality := game.us + home_port := arrival_port + end + +feature -- Access + + name: STRING_8 = "Naval" + -- The name of this unit. + + arrival_turn: INTEGER = 5 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 2 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 0 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 4 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 9 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_air_units/raaf.e b/jj_vitp/Implementation/classes/units/allied_units/allied_air_units/raaf.e new file mode 100644 index 0000000..3bd5265 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_air_units/raaf.e @@ -0,0 +1,57 @@ +note + description: "[ + Represents the corresponding air unit in VITP. + ]" + author: "Jimmy J. Johnson" + +class + RAAF + +inherit + + ALLIED_AIR_UNIT + redefine + make + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: like game) + -- Initialize attributes of Current + do + PRECURSOR {ALLIED_AIR_UNIT} (a_game) + nationality := game.us + home_port := arrival_port + end + +feature -- Access + + name: STRING_8 = "RAAF" + -- The name of this unit. + + arrival_turn: INTEGER = 3 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 2 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 0 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 4 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 9 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_air_units/rnzaf.e b/jj_vitp/Implementation/classes/units/allied_units/allied_air_units/rnzaf.e new file mode 100644 index 0000000..0889138 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_air_units/rnzaf.e @@ -0,0 +1,57 @@ +note + description: "[ + Represents the corresponding air unit in VITP. + ]" + author: "Jimmy J. Johnson" + +class + RNZAF + +inherit + + ALLIED_AIR_UNIT + redefine + make + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: like game) + -- Initialize attributes of Current + do + PRECURSOR {ALLIED_AIR_UNIT} (a_game) + nationality := game.us + home_port := arrival_port + end + +feature -- Access + + name: STRING_8 = "RNZAF." + -- The name of this unit. + + arrival_turn: INTEGER = 3 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 2 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 0 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 4 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 9 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_air_units/seventh_af.e b/jj_vitp/Implementation/classes/units/allied_units/allied_air_units/seventh_af.e new file mode 100644 index 0000000..cf91b9a --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_air_units/seventh_af.e @@ -0,0 +1,68 @@ +note + description: "[ + Represents the corresponding air unit in game. + ]" + author: "Jimmy J. Johnson" + +class + SEVENTH_AF + +inherit + + ALLIED_AIR_UNIT + redefine + make, + arrival_location, + arrival_port + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: like game) + -- Initialize attributes of Current + do + arrival_location := a_game.pearl_harbor + arrival_port := a_game.pearl_harbor + PRECURSOR {ALLIED_AIR_UNIT} (a_game) + nationality := game.us + home_port := arrival_port + end + +feature -- Access + + name: STRING_8 = "7th A.F." + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 2 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 0 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 4 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 9 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + + arrival_location: LOCATION + -- The port or sea area at which this unit may enter the game + + arrival_port: like home_port + -- The port to which Current is assigned when it comes into + -- the game during a reinforcement action. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_air_units/tenth_af.e b/jj_vitp/Implementation/classes/units/allied_units/allied_air_units/tenth_af.e new file mode 100644 index 0000000..ae3c218 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_air_units/tenth_af.e @@ -0,0 +1,57 @@ +note + description: "[ + Represents the corresponding air unit in VITP. + ]" + author: "Jimmy J. Johnson" + +class + TENTH_AF + +inherit + + ALLIED_AIR_UNIT + redefine + make + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: like game) + -- Initialize attributes of Current + do + PRECURSOR {ALLIED_AIR_UNIT} (a_game) + nationality := game.us + home_port := arrival_port + end + +feature -- Access + + name: STRING_8 = "10th A.F." + -- The name of this unit. + + arrival_turn: INTEGER = 2 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 2 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 0 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 4 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 9 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_air_units/thirteenth_af.e b/jj_vitp/Implementation/classes/units/allied_units/allied_air_units/thirteenth_af.e new file mode 100644 index 0000000..07f57ec --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_air_units/thirteenth_af.e @@ -0,0 +1,57 @@ +note + description: "[ + Represents the corresponding air unit in VITP. + ]" + author: "Jimmy J. Johnson" + +class + THIRTEENTH_AF + +inherit + + ALLIED_AIR_UNIT + redefine + make + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: like game) + -- Initialize attributes of Current + do + PRECURSOR {ALLIED_AIR_UNIT} (a_game) + nationality := game.us + home_port := arrival_port + end + +feature -- Access + + name: STRING_8 = "13th A.F." + -- The name of this unit. + + arrival_turn: INTEGER = 4 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 2 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 0 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 4 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 9 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_amphibious_units/marines_1.e b/jj_vitp/Implementation/classes/units/allied_units/allied_amphibious_units/marines_1.e new file mode 100644 index 0000000..30299dc --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_amphibious_units/marines_1.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding amphibious unit in VITP. + ]" + author: "Jimmy J. Johnson" + +class + MARINES_1 + +inherit + + ALLIED_AMPHIBIOUS_UNIT + +create + make + +feature -- Access + + name: STRING_8 = "1 Marines" + -- The name of this unit. + + arrival_turn: INTEGER = 3 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 0 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 4 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 3 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_amphibious_units/marines_2.e b/jj_vitp/Implementation/classes/units/allied_units/allied_amphibious_units/marines_2.e new file mode 100644 index 0000000..be147e3 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_amphibious_units/marines_2.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding amphibious unit in VITP. + ]" + author: "Jimmy J. Johnson" + +class + MARINES_2 + +inherit + + ALLIED_AMPHIBIOUS_UNIT + +create + make + +feature -- Access + + name: STRING_8 = "2 Marines" + -- The name of this unit. + + arrival_turn: INTEGER = 3 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 0 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 4 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 3 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_amphibious_units/marines_3.e b/jj_vitp/Implementation/classes/units/allied_units/allied_amphibious_units/marines_3.e new file mode 100644 index 0000000..aed4c94 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_amphibious_units/marines_3.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding amphibious unit in VITP. + ]" + author: "Jimmy J. Johnson" + +class + MARINES_3 + +inherit + + ALLIED_AMPHIBIOUS_UNIT + +create + make + +feature -- Access + + name: STRING_8 = "3 Marines" + -- The name of this unit. + + arrival_turn: INTEGER = 5 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 0 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 4 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 3 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_amphibious_units/marines_4.e b/jj_vitp/Implementation/classes/units/allied_units/allied_amphibious_units/marines_4.e new file mode 100644 index 0000000..42347ff --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_amphibious_units/marines_4.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding amphibious unit in VITP. + ]" + author: "Jimmy J. Johnson" + +class + MARINES_4 + +inherit + + ALLIED_AMPHIBIOUS_UNIT + +create + make + +feature -- Access + + name: STRING_8 = "4 Marines" + -- The name of this unit. + + arrival_turn: INTEGER = 6 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 0 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 4 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 3 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_amphibious_units/marines_5.e b/jj_vitp/Implementation/classes/units/allied_units/allied_amphibious_units/marines_5.e new file mode 100644 index 0000000..bb65643 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_amphibious_units/marines_5.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding amphibious unit in VITP. + ]" + author: "Jimmy J. Johnson" + +class + MARINES_5 + +inherit + + ALLIED_AMPHIBIOUS_UNIT + +create + make + +feature -- Access + + name: STRING_8 = "5 Marines" + -- The name of this unit. + + arrival_turn: INTEGER = 8 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 0 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 4 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 3 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/arizona.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/arizona.e new file mode 100644 index 0000000..2c09004 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/arizona.e @@ -0,0 +1,45 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + ARIZONA + +inherit + + US_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Arizona" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 4 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 4 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 3 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end + diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/astoria.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/astoria.e new file mode 100644 index 0000000..a115372 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/astoria.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + ASTORIA + +inherit + + US_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Astoria" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 1 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/australia_ship.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/australia_ship.e new file mode 100644 index 0000000..ccb8f81 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/australia_ship.e @@ -0,0 +1,45 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + AUSTRALIA_SHIP + +inherit + + AUSTRALIAN_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Australia" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 1 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end + diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/california.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/california.e new file mode 100644 index 0000000..ba0f5ec --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/california.e @@ -0,0 +1,45 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + CALIFORNIA + +inherit + + US_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "California" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 4 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 5 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 3 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end + diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/canberra.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/canberra.e new file mode 100644 index 0000000..b83dd68 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/canberra.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + CANBERRA + +inherit + + US_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Canberra" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 1 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/chester.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/chester.e new file mode 100644 index 0000000..c6e48a8 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/chester.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + CHESTER + +inherit + + US_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Chester" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 1 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/chicago.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/chicago.e new file mode 100644 index 0000000..6b6612a --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/chicago.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + CHICAGO + +inherit + + US_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Chicago" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 1 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/de_ruyter.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/de_ruyter.e new file mode 100644 index 0000000..7c23d14 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/de_ruyter.e @@ -0,0 +1,62 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + DE_RUYTER + +inherit + + DUTCH_SHIP + redefine + arrival_location, + arrival_port + end + +create + make + +feature -- Access + + name: STRING_8 = "De Ruyter" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 1 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + + arrival_location: LOCATION + -- The port or sea area at which this unit may enter the game + do + Result := game.singapore + end + + arrival_port: like home_port + -- The port to which Current is assigned when it comes into + -- the game during a reinforcement action. + do + Result := game.singapore + end + +end + diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/enterprise.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/enterprise.e new file mode 100644 index 0000000..351079b --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/enterprise.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + ENTERPRISE + +inherit + + US_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Enterprise" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 4 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 0 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 2 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = True + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/exeter.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/exeter.e new file mode 100644 index 0000000..903efe5 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/exeter.e @@ -0,0 +1,62 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + EXETER + +inherit + + BRITISH_SHIP + redefine + arrival_location, + arrival_port + end + +create + make + +feature -- Access + + name: STRING_8 = "Exeter" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 1 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + + arrival_location: LOCATION + -- The port or sea area at which this unit may enter the game + do + Result := game.singapore + end + + arrival_port: like home_port + -- The port to which Current is assigned when it comes into + -- the game during a reinforcement action. + do + Result := game.singapore + end + +end + diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/hermes.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/hermes.e new file mode 100644 index 0000000..ac706f5 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/hermes.e @@ -0,0 +1,53 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + HERMES + +inherit + + BRITISH_SHIP + redefine + arrival_location + end + +create + make + +feature -- Access + + name: STRING_8 = "Hermes" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 1 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 2 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 4 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + + arrival_location: LOCATION + -- The port or sea area at which this unit may enter the game + do + Result := game.bay_of_bengal + end +end + diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/hornet.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/hornet.e new file mode 100644 index 0000000..0877538 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/hornet.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + HORNET + +inherit + + US_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Hornet" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 4 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 0 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 2 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = True + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/houston.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/houston.e new file mode 100644 index 0000000..d394727 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/houston.e @@ -0,0 +1,61 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + HOUSTON + +inherit + + US_SHIP + redefine + arrival_location, + arrival_port + end + +create + make + +feature -- Access + + name: STRING_8 = "Houston" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 1 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + + arrival_location: LOCATION + -- The port or sea area at which this unit may enter the game + do + Result := game.philippines + end + + arrival_port: like home_port + -- The port to which Current is assigned when it comes into + -- the game during a reinforcement action. + do + Result := game.philippines + end + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/indianapolis.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/indianapolis.e new file mode 100644 index 0000000..46b5aab --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/indianapolis.e @@ -0,0 +1,53 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + INDIANAPOLIS + +inherit + + US_SHIP + redefine + arrival_location + end + +create + make + +feature -- Access + + name: STRING_8 = "Indianapolis" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 1 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + + arrival_location: LOCATION + -- The port or sea area at which this unit may enter the game + do + Result := game.hawaiian_islands + end + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/lexington.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/lexington.e new file mode 100644 index 0000000..8311fca --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/lexington.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + LEXINGTON + +inherit + + US_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Lexington" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 4 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 3 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = True + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/louisville.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/louisville.e new file mode 100644 index 0000000..258d667 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/louisville.e @@ -0,0 +1,62 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + LOUISVILLE + +inherit + + US_SHIP + redefine + arrival_location, + arrival_port + end + +create + make + +feature -- Access + + name: STRING_8 = "Louisville" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 1 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + + arrival_location: LOCATION + -- The port or sea area at which this unit may enter the game + do + Result := game.coral_sea + end + + arrival_port: like home_port + -- The port to which Current is assigned when it comes into + -- the game during a reinforcement action. + do + Result := game.australia + end + +end + diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/maryland.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/maryland.e new file mode 100644 index 0000000..83298b8 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/maryland.e @@ -0,0 +1,45 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + MARYLAND + +inherit + + US_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Maryland" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 5 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 5 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 3 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end + diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/minneapolis.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/minneapolis.e new file mode 100644 index 0000000..c927743 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/minneapolis.e @@ -0,0 +1,53 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + MINNEAPOLIS + +inherit + + US_SHIP + redefine + arrival_location + end + +create + make + +feature -- Access + + name: STRING_8 = "Minneapolis" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 1 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + + arrival_location: LOCATION + -- The port or sea area at which this unit may enter the game + do + Result := game.hawaiian_islands + end + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/nevada.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/nevada.e new file mode 100644 index 0000000..ecb8a69 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/nevada.e @@ -0,0 +1,45 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + NEVADA + +inherit + + US_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Nevada" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 4 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 4 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 3 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end + diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/new_orleans.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/new_orleans.e new file mode 100644 index 0000000..93e16c2 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/new_orleans.e @@ -0,0 +1,45 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + NEW_ORLEANS + +inherit + + US_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "New Orleans" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 1 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end + diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/northampton.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/northampton.e new file mode 100644 index 0000000..97a21c3 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/northampton.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + NORTHAMPTON + +inherit + + US_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Northampton" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 1 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/oklahoma.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/oklahoma.e new file mode 100644 index 0000000..882dad1 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/oklahoma.e @@ -0,0 +1,45 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + OKLAHOMA + +inherit + + US_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Oklahoma" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 4 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 4 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 3 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end + diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/pennsylvania.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/pennsylvania.e new file mode 100644 index 0000000..e177f2f --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/pennsylvania.e @@ -0,0 +1,45 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + PENNSYLVANIA + +inherit + + US_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Pennsylvania" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 4 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 4 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 3 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end + diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/pensacola.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/pensacola.e new file mode 100644 index 0000000..5effede --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/pensacola.e @@ -0,0 +1,61 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + PENSACOLA + +inherit + + US_SHIP + redefine + arrival_location, + arrival_port + end + +create + make + +feature -- Access + + name: STRING_8 = "Pensacola" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 1 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + + arrival_location: LOCATION + -- The port or sea area at which this unit may enter the game + do + Result := game.us_mandate + end + + arrival_port: like home_port + -- The port to which Current is assigned when it comes into + -- the game during a reinforcement action. + do + Result := game.samoa + end + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/portland.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/portland.e new file mode 100644 index 0000000..7fa0036 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/portland.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + PORTLAND + +inherit + + US_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Portland" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 1 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/prince_of_wales.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/prince_of_wales.e new file mode 100644 index 0000000..bd3dee1 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/prince_of_wales.e @@ -0,0 +1,62 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + PRINCE_OF_WALES + +inherit + + BRITISH_SHIP + redefine + arrival_location, + arrival_port + end + +create + make + +feature -- Access + + name: STRING_8 = "Prince of Wales" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 4 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 5 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 6 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + + arrival_location: LOCATION + -- The port or sea area at which this unit may enter the game + do + Result := game.indonesia + end + + arrival_port: like home_port + -- The port to which Current is assigned when it comes into + -- the game during a reinforcement action. + do + Result := game.singapore + end + +end + diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/quincy.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/quincy.e new file mode 100644 index 0000000..289c427 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/quincy.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + QUINCY + +inherit + + US_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Quincy" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 1 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/repulse.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/repulse.e new file mode 100644 index 0000000..b5a4dd3 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/repulse.e @@ -0,0 +1,62 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + REPULSE + +inherit + + BRITISH_SHIP + redefine + arrival_location, + arrival_port + end + +create + make + +feature -- Access + + name: STRING_8 = "Repulse" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 3 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 3 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 6 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + + arrival_location: LOCATION + -- The port or sea area at which this unit may enter the game + do + Result := game.indonesia + end + + arrival_port: like home_port + -- The port to which Current is assigned when it comes into + -- the game during a reinforcement action. + do + Result := game.singapore + end + +end + diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/revenge.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/revenge.e new file mode 100644 index 0000000..045852e --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/revenge.e @@ -0,0 +1,54 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + REVENGE + +inherit + + BRITISH_SHIP + redefine + arrival_location + end + +create + make + +feature -- Access + + name: STRING_8 = "Revenge" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 1 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 2 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 4 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + + arrival_location: LOCATION + -- The port or sea area at which this unit may enter the game + do + Result := game.bay_of_bengal + end + +end + diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/salt_lake_city.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/salt_lake_city.e new file mode 100644 index 0000000..2fa1f1b --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/salt_lake_city.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + SALT_LAKE_CITY + +inherit + + US_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Salt Lake City" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 1 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/san_francisco.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/san_francisco.e new file mode 100644 index 0000000..e6830a1 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/san_francisco.e @@ -0,0 +1,45 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + SAN_FRANCISCO + +inherit + + US_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "San Francisco" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 1 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end + diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/saratoga.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/saratoga.e new file mode 100644 index 0000000..8459f48 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/saratoga.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + SARATOGA + +inherit + + US_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Saratoga" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 4 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 3 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = True + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/tennessee.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/tennessee.e new file mode 100644 index 0000000..17854b3 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/tennessee.e @@ -0,0 +1,45 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + TENNESSEE + +inherit + + US_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Tennessee" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 4 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 5 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 3 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end + diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/vincennes.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/vincennes.e new file mode 100644 index 0000000..65a3bc4 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/vincennes.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + VINCENNES + +inherit + + US_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Vincennes" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 1 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/west_virginia.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/west_virginia.e new file mode 100644 index 0000000..1914f5e --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/west_virginia.e @@ -0,0 +1,45 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + WEST_VIRGINIA + +inherit + + US_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "West Virginia" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 5 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 5 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 3 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end + diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/yorktown.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/yorktown.e new file mode 100644 index 0000000..08e2424 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_1/yorktown.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + YORKTOWN + +inherit + + US_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Yorktown" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 4 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 0 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 2 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = True + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_2/cornwall.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_2/cornwall.e new file mode 100644 index 0000000..07485ac --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_2/cornwall.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + CORNWALL + +inherit + + BRITISH_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Cornwall" + -- The name of this unit. + + arrival_turn: INTEGER = 2 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 1 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_2/dorestshire.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_2/dorestshire.e new file mode 100644 index 0000000..8ace39c --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_2/dorestshire.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + DORESTSHIRE + +inherit + + US_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Dorestshire" + -- The name of this unit. + + arrival_turn: INTEGER = 2 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 1 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_2/formidable.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_2/formidable.e new file mode 100644 index 0000000..69df881 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_2/formidable.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + FORMIDABLE + +inherit + + BRITISH_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Formidable" + -- The name of this unit. + + arrival_turn: INTEGER = 2 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 2 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 0 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 2 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_2/idaho.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_2/idaho.e new file mode 100644 index 0000000..c20990a --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_2/idaho.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + IDAHO + +inherit + + US_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Idaho" + -- The name of this unit. + + arrival_turn: INTEGER = 2 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 4 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 5 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 3 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_2/indomitable.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_2/indomitable.e new file mode 100644 index 0000000..5d5b437 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_2/indomitable.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + INDOMITABLE + +inherit + + BRITISH_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Indomitable" + -- The name of this unit. + + arrival_turn: INTEGER = 2 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 2 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 0 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 2 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_2/new_mexico.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_2/new_mexico.e new file mode 100644 index 0000000..5a6f711 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_2/new_mexico.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + NEW_MEXICO + +inherit + + US_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "New Mexico" + -- The name of this unit. + + arrival_turn: INTEGER = 2 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 4 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 5 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 3 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_2/ramilies.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_2/ramilies.e new file mode 100644 index 0000000..f486c82 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_2/ramilies.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + RAMILIES + +inherit + + BRITISH_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Ramilies" + -- The name of this unit. + + arrival_turn: INTEGER = 2 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 4 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 4 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 3 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_2/resolution.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_2/resolution.e new file mode 100644 index 0000000..13067b1 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_2/resolution.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + RESOLUTION + +inherit + + BRITISH_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Resolution" + -- The name of this unit. + + arrival_turn: INTEGER = 2 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 4 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 4 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 3 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_2/royal_sovereign.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_2/royal_sovereign.e new file mode 100644 index 0000000..f70f16c --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_2/royal_sovereign.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + ROYAL_SOVEREIGN + +inherit + + BRITISH_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Royal Sovereign" + -- The name of this unit. + + arrival_turn: INTEGER = 2 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 4 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 4 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 3 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_2/warspite.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_2/warspite.e new file mode 100644 index 0000000..a316617 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_2/warspite.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + WARSPITE + +inherit + + BRITISH_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Warspite" + -- The name of this unit. + + arrival_turn: INTEGER = 2 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 4 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 4 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 4 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_3/colorado.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_3/colorado.e new file mode 100644 index 0000000..b125291 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_3/colorado.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + COLORADO + +inherit + + US_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Colorado" + -- The name of this unit. + + arrival_turn: INTEGER = 3 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 5 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 5 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 3 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_3/illustrious.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_3/illustrious.e new file mode 100644 index 0000000..2573cbb --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_3/illustrious.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + ILLUSTRIOUS + +inherit + + BRITISH_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Illustrious" + -- The name of this unit. + + arrival_turn: INTEGER = 3 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 2 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 0 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 2 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_3/mississippi.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_3/mississippi.e new file mode 100644 index 0000000..eb9b9dd --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_3/mississippi.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + MISSISSIPPI + +inherit + + US_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Mississippi" + -- The name of this unit. + + arrival_turn: INTEGER = 3 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 4 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 5 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 3 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_3/north_carolina.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_3/north_carolina.e new file mode 100644 index 0000000..caeb5c1 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_3/north_carolina.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + NORTH_CAROLINA + +inherit + + US_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "North Carolina" + -- The name of this unit. + + arrival_turn: INTEGER = 3 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 5 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 6 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 5 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_3/valiant.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_3/valiant.e new file mode 100644 index 0000000..eba411e --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_3/valiant.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + VALIANT + +inherit + + US_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Valiant" + -- The name of this unit. + + arrival_turn: INTEGER = 3 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 4 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 4 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 4 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_4/cv_027_removal.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_4/cv_027_removal.e new file mode 100644 index 0000000..92c2373 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_4/cv_027_removal.e @@ -0,0 +1,66 @@ +note + description: "[ + Dummy {SHIP} used to draw widgets for the removal of + the two 027 Bristish ships on turn 5 on the Allied Order + of Appearance Chart. + ]" + author: "Jimmy J. Johnson" + date: "11/11/23" + copyright: "Copyright (c) 2023, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +class + CV_027_REMOVAL + +inherit + + US_SHIP + redefine + make + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: like game) + -- Initialize attributes of Current + do + PRECURSOR {US_SHIP} (a_game) + location := game.still_in_box + end + +feature -- Access + + name: STRING_8 = "(any Br.)" + -- The name of this unit. + + arrival_turn: INTEGER = 2 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 2 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 0 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 2 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +invariant + + never_used: location = game.still_in_box + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_4/devonshire.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_4/devonshire.e new file mode 100644 index 0000000..0f1d5f8 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_4/devonshire.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + DEVONSHIRE + +inherit + + BRITISH_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Devonshire" + -- The name of this unit. + + arrival_turn: INTEGER = 4 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 1 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_4/indiana.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_4/indiana.e new file mode 100644 index 0000000..2fe06b9 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_4/indiana.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + INDIANA + +inherit + + US_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Indiana" + -- The name of this unit. + + arrival_turn: INTEGER = 4 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 4 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 5 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 3 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_4/shropshire.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_4/shropshire.e new file mode 100644 index 0000000..121b87c --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_4/shropshire.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + SHROPSHIRE + +inherit + + BRITISH_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Shropshire" + -- The name of this unit. + + arrival_turn: INTEGER = 4 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 1 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_4/south_dakota.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_4/south_dakota.e new file mode 100644 index 0000000..75bbfd2 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_4/south_dakota.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + SOUTH_DAKOTA + +inherit + + US_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "South Dakota" + -- The name of this unit. + + arrival_turn: INTEGER = 4 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 5 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 6 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 5 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_4/washington.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_4/washington.e new file mode 100644 index 0000000..ab5cc18 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_4/washington.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + WASHINGTON + +inherit + + US_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Washington" + -- The name of this unit. + + arrival_turn: INTEGER = 4 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 5 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 5 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 3 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_4/wasp.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_4/wasp.e new file mode 100644 index 0000000..c6da42a --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_4/wasp.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + WASP + +inherit + + US_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Wasp" + -- The name of this unit. + + arrival_turn: INTEGER = 4 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 4 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 0 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 2 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 6 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_5/massachusetts.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_5/massachusetts.e new file mode 100644 index 0000000..6149302 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_5/massachusetts.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + MASSACHUSETTS + +inherit + + US_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Massachusetts" + -- The name of this unit. + + arrival_turn: INTEGER = 5 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 5 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 6 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 5 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_5/resolution_removal.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_5/resolution_removal.e new file mode 100644 index 0000000..ea04fb3 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_5/resolution_removal.e @@ -0,0 +1,66 @@ +note + description: "[ + Dummy {SHIP} used to draw a widget for the removal of + the Resolution on turn 5 on the Allied Order of Appearance + Chart. + ]" + author: "Jimmy J. Johnson" + date: "11/11/23" + copyright: "Copyright (c) 2023, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +class + RESOLUTION_REMOVAL + +inherit + + BRITISH_SHIP + redefine + make + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: like game) + -- Initialize attributes of Current + do + PRECURSOR {BRITISH_SHIP} (a_game) + location := game.still_in_box + end + +feature -- Access + + name: STRING_8 = "Resolution" + -- The name of this unit. + + arrival_turn: INTEGER = 2 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 4 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 4 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 3 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +invariant + + never_used: location = game.still_in_box + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_5/revenge_removal.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_5/revenge_removal.e new file mode 100644 index 0000000..8942a1d --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_5/revenge_removal.e @@ -0,0 +1,66 @@ +note + description: "[ + Dummy {SHIP} used to draw a widget for the removal of + the Revenge on turn 5 on the Allied Order of Appearance + Chart. + ]" + author: "Jimmy J. Johnson" + date: "11/11/23" + copyright: "Copyright (c) 2023, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +class + REVENGE_REMOVAL + +inherit + + BRITISH_SHIP + redefine + make + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: like game) + -- Initialize attributes of Current + do + PRECURSOR {BRITISH_SHIP} (a_game) + location := game.still_in_box + end + +feature -- Access + + name: STRING_8 = "Revenge" + -- The name of this unit. + + arrival_turn: INTEGER = 2 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 4 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 4 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 3 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +invariant + + never_used: location = game.still_in_box + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_5/valiant_removal.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_5/valiant_removal.e new file mode 100644 index 0000000..7268a74 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_5/valiant_removal.e @@ -0,0 +1,66 @@ +note + description: "[ + Dummy {SHIP} used to draw a widget for the removal of + the Valiant on turn 5 on the Allied Order of Appearance + Chart. + ]" + author: "Jimmy J. Johnson" + date: "11/11/23" + copyright: "Copyright (c) 2023, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +class + VALIANT_REMOVAL + +inherit + + BRITISH_SHIP + redefine + make + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: like game) + -- Initialize attributes of Current + do + PRECURSOR {BRITISH_SHIP} (a_game) + location := game.still_in_box + end + +feature -- Access + + name: STRING_8 = "Valiant" + -- The name of this unit. + + arrival_turn: INTEGER = 2 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 4 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 4 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 4 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +invariant + + never_used: location = game.still_in_box + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_5/victorious.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_5/victorious.e new file mode 100644 index 0000000..31af7be --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_5/victorious.e @@ -0,0 +1,80 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + VICTORIOUS + +inherit + + BRITISH_SHIP + redefine + reinforceable_ports, + arrival_location, + arrival_port + end + +create + make + +feature -- Access + + name: STRING_8 = "Victorious" + -- The name of this unit. + + arrival_turn: INTEGER = 5 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 2 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 0 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 2 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + + reinforceable_ports: LINKED_SET [PORT] + -- A list containing each {PORT} to which Current + -- can be moved during the reinforcement step. + do + create Result.make + if game.sequence_of_play.is_allied_player then + if game.hawaiian_islands.is_allied then + Result.extend (game.pearl_harbor) + end + end + end + + arrival_location: LOCATION + -- The port or sea area at which this unit may enter the game + do + Result := arrival_port + end + + arrival_port: like home_port + -- The port to which Current is assigned when it comes into + -- the game during a reinforcement action. + do + if game.pearl_harbor.nationality = game.us then + Result := game.pearl_harbor + elseif game.samoa.nationality = game.us then + Result := game.samoa + else + Result := game.default_port + end + end + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_5/warspite_removal.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_5/warspite_removal.e new file mode 100644 index 0000000..bf3ba34 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_5/warspite_removal.e @@ -0,0 +1,66 @@ +note + description: "[ + Dummy {SHIP} used to draw a widget for the removal of + the Warspite on Turn 4 on the Allied Order of Appearance + Chart. + ]" + author: "Jimmy J. Johnson" + date: "11/11/23" + copyright: "Copyright (c) 2023, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +class + WARSPITE_REMOVAL + +inherit + + BRITISH_SHIP + redefine + make + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: like game) + -- Initialize attributes of Current + do + PRECURSOR {BRITISH_SHIP} (a_game) + location := game.still_in_box + end + +feature -- Access + + name: STRING_8 = "Warspite" + -- The name of this unit. + + arrival_turn: INTEGER = 2 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 4 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 4 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 4 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +invariant + + never_used: location = game.still_in_box + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_5/wichita.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_5/wichita.e new file mode 100644 index 0000000..228c24f --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_5/wichita.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + WICHITA + +inherit + + US_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Wichita" + -- The name of this unit. + + arrival_turn: INTEGER = 5 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 1 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_6/alabama.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_6/alabama.e new file mode 100644 index 0000000..396c877 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_6/alabama.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + ALABAMA + +inherit + + US_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Alabama" + -- The name of this unit. + + arrival_turn: INTEGER = 6 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 5 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 6 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 5 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_6/baltimore.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_6/baltimore.e new file mode 100644 index 0000000..bb3c61b --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_6/baltimore.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + BALTIMORE + +inherit + + US_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Baltimore" + -- The name of this unit. + + arrival_turn: INTEGER = 6 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 2 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = True + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_6/belleau_wood.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_6/belleau_wood.e new file mode 100644 index 0000000..dcf6714 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_6/belleau_wood.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + BELLEAU_WOOD + +inherit + + US_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Belleau Wood" + -- The name of this unit. + + arrival_turn: INTEGER = 6 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 2 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 0 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 2 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = True + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_6/boston.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_6/boston.e new file mode 100644 index 0000000..c10658a --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_6/boston.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + BOSTON + +inherit + + US_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Boston" + -- The name of this unit. + + arrival_turn: INTEGER = 6 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 2 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = True + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_6/cowpens.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_6/cowpens.e new file mode 100644 index 0000000..af31517 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_6/cowpens.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + COWPENS + +inherit + + US_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Cowpens" + -- The name of this unit. + + arrival_turn: INTEGER = 6 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 2 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 0 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 2 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = True + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_6/cv_10.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_6/cv_10.e new file mode 100644 index 0000000..489c821 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_6/cv_10.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + CV_10 + +inherit + + US_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "CV 10" + -- The name of this unit. + + arrival_turn: INTEGER = 6 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 4 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 3 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = True + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_6/cv_16.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_6/cv_16.e new file mode 100644 index 0000000..fbf2f12 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_6/cv_16.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + CV_16 + +inherit + + US_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "CV_16" + -- The name of this unit. + + arrival_turn: INTEGER = 6 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 4 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 3 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = True + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_6/essex.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_6/essex.e new file mode 100644 index 0000000..6526ed2 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_6/essex.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + ESSEX + +inherit + + US_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Essex" + -- The name of this unit. + + arrival_turn: INTEGER = 6 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 4 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 3 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = True + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_6/independence.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_6/independence.e new file mode 100644 index 0000000..5cf8453 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_6/independence.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + INDEPENDENCE + +inherit + + US_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Independence" + -- The name of this unit. + + arrival_turn: INTEGER = 6 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 2 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 0 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 2 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = True + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_6/monterey.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_6/monterey.e new file mode 100644 index 0000000..5848591 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_6/monterey.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + MONTEREY + +inherit + + US_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Monterey" + -- The name of this unit. + + arrival_turn: INTEGER = 6 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 2 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 0 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 2 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = True + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_6/princeton.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_6/princeton.e new file mode 100644 index 0000000..6c56600 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_6/princeton.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + PRINCETON + +inherit + + US_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Princeton" + -- The name of this unit. + + arrival_turn: INTEGER = 6 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 2 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 0 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 2 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = True + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_6/victorious_removal.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_6/victorious_removal.e new file mode 100644 index 0000000..ca01e73 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_6/victorious_removal.e @@ -0,0 +1,66 @@ +note + description: "[ + Dummy {SHIP} used to draw a widget for the removal of + the Victorious on turn 6 on the Allied Order of Appearance + Chart. + ]" + author: "Jimmy J. Johnson" + date: "11/11/23" + copyright: "Copyright (c) 2023, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +class + VICTORIOUS_REMOVAL + +inherit + + BRITISH_SHIP + + redefine + make + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: like game) + -- Initialize attributes of Current + do + PRECURSOR {BRITISH_SHIP} (a_game) + location := game.still_in_box + end + +feature -- Access + + name: STRING_8 = "Victorious" + -- The name of this unit. + + arrival_turn: INTEGER = 6 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 2 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 0 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 2 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +invariant + + never_used: location = game.still_in_box + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_7/bataan.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_7/bataan.e new file mode 100644 index 0000000..95209eb --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_7/bataan.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + BATAAN + +inherit + + US_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Bataan" + -- The name of this unit. + + arrival_turn: INTEGER = 7 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 2 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 0 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 2 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = True + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_7/bunker_hill.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_7/bunker_hill.e new file mode 100644 index 0000000..762d240 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_7/bunker_hill.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in VITP. + ]" + author: "Jimmy J. Johnson" + +class + BUNKER_HILL + +inherit + + US_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Bunker Hill" + -- The name of this unit. + + arrival_turn: INTEGER = 7 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 4 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 3 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = True + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_7/cabot.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_7/cabot.e new file mode 100644 index 0000000..1dc3461 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_7/cabot.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + CABOT + +inherit + + US_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Cabot" + -- The name of this unit. + + arrival_turn: INTEGER = 7 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 2 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 0 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 2 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = True + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_7/canbera_ii.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_7/canbera_ii.e new file mode 100644 index 0000000..18a25d7 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_7/canbera_ii.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + CANBERA_II + +inherit + + US_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Canbera II" + -- The name of this unit. + + arrival_turn: INTEGER = 7 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 2 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = True + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_7/cv_12.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_7/cv_12.e new file mode 100644 index 0000000..465d5a4 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_7/cv_12.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + CV_12 + +inherit + + US_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "CV 12" + -- The name of this unit. + + arrival_turn: INTEGER = 7 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 4 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 3 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = True + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_7/cv_18.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_7/cv_18.e new file mode 100644 index 0000000..f01315a --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_7/cv_18.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + CV_18 + +inherit + + US_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "CV 18" + -- The name of this unit. + + arrival_turn: INTEGER = 7 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 4 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 3 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = True + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_7/cv_443_removal.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_7/cv_443_removal.e new file mode 100644 index 0000000..c70f829 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_7/cv_443_removal.e @@ -0,0 +1,66 @@ +note + description: "[ + Dummy {SHIP} used to draw widgets for the removal of + the one 443 Bristish ships on turn 7 on the Allied Order + of Appearance Chart. + ]" + author: "Jimmy J. Johnson" + date: "11/11/23" + copyright: "Copyright (c) 2023, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +class + CV_443_REMOVAL + +inherit + + BRITISH_SHIP + redefine + make + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: like game) + -- Initialize attributes of Current + do + PRECURSOR {BRITISH_SHIP} (a_game) + location := game.still_in_box + end + +feature -- Access + + name: STRING_8 = "(any Br.)" + -- The name of this unit. + + arrival_turn: INTEGER = 2 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 4 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 4 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 3 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +invariant + + never_used: location = game.still_in_box + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_7/intrepid.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_7/intrepid.e new file mode 100644 index 0000000..7ad0198 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_7/intrepid.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + INTREPID + +inherit + + US_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Intrepid" + -- The name of this unit. + + arrival_turn: INTEGER = 7 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 4 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 3 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = True + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_7/iowa.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_7/iowa.e new file mode 100644 index 0000000..0a2e638 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_7/iowa.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + IOWA + +inherit + + US_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Iowa" + -- The name of this unit. + + arrival_turn: INTEGER = 7 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 5 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 9 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = True + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_7/langley_ii.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_7/langley_ii.e new file mode 100644 index 0000000..d7ac03d --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_7/langley_ii.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + LANGLEY_II + +inherit + + US_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Langley II" + -- The name of this unit. + + arrival_turn: INTEGER = 7 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 2 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 0 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 2 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = True + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_7/new_jersey.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_7/new_jersey.e new file mode 100644 index 0000000..7d57d8a --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_7/new_jersey.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + NEW_JERSEY + +inherit + + US_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "New Jersey" + -- The name of this unit. + + arrival_turn: INTEGER = 7 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 5 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 9 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = True + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_7/quincy_ii.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_7/quincy_ii.e new file mode 100644 index 0000000..da9fe24 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_7/quincy_ii.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + QUINCY_II + +inherit + + US_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Quincy II" + -- The name of this unit. + + arrival_turn: INTEGER = 7 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 2 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = True + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_8/missouri.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_8/missouri.e new file mode 100644 index 0000000..7be8aca --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_8/missouri.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + MISSOURI + +inherit + + US_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Missouri" + -- The name of this unit. + + arrival_turn: INTEGER = 8 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 5 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 9 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = True + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_8/san_jacinto.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_8/san_jacinto.e new file mode 100644 index 0000000..a813a9f --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_8/san_jacinto.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + SAN_JACINTO + +inherit + + US_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "San Jacinto" + -- The name of this unit. + + arrival_turn: INTEGER = 8 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 2 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 0 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 2 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = True + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_8/ticonderoga.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_8/ticonderoga.e new file mode 100644 index 0000000..965501f --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_8/ticonderoga.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + TICONDEROGA + +inherit + + US_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Ticonderoga" + -- The name of this unit. + + arrival_turn: INTEGER = 8 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 4 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 3 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = True + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_8/wisconsin.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_8/wisconsin.e new file mode 100644 index 0000000..552da92 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_8/wisconsin.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + WISCONSIN + +inherit + + US_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Wisconsin" + -- The name of this unit. + + arrival_turn: INTEGER = 8 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 5 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 9 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = True + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_9/alaska.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_9/alaska.e new file mode 100644 index 0000000..6e6c9c9 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_9/alaska.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + ALASKA + +inherit + + US_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Alaska" + -- The name of this unit. + + arrival_turn: INTEGER = 9 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 3 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 4 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_9/franklin.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_9/franklin.e new file mode 100644 index 0000000..8e0ad35 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_9/franklin.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + FRANKLIN + +inherit + + US_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Franklin" + -- The name of this unit. + + arrival_turn: INTEGER = 9 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 4 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 3 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = True + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_9/new_york.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_9/new_york.e new file mode 100644 index 0000000..7542207 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_9/new_york.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + NEW_YORK + +inherit + + US_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "New York" + -- The name of this unit. + + arrival_turn: INTEGER = 9 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 4 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 4 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 3 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_9/shangri_la.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_9/shangri_la.e new file mode 100644 index 0000000..7ece552 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_9/shangri_la.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + SHANGRI_LA + +inherit + + US_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Shangri-La" + -- The name of this unit. + + arrival_turn: INTEGER = 9 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 4 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 3 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = True + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_9/texas.e b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_9/texas.e new file mode 100644 index 0000000..20774a1 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_ships/turn_9/texas.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + TEXAS + +inherit + + US_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Texas" + -- The name of this unit. + + arrival_turn: INTEGER = 9 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 4 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 4 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 3 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/allied_units/allied_submarines/f_boat.e b/jj_vitp/Implementation/classes/units/allied_units/allied_submarines/f_boat.e new file mode 100644 index 0000000..012aa40 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/allied_units/allied_submarines/f_boat.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding submarine in VITP. + ]" + author: "Jimmy J. Johnson" + +class + F_BOAT + +inherit + + ALLIED_SUBMARINE + +create + make + +feature -- Access + + name: STRING_8 = "F Boat" + -- The name of this unit. + + arrival_turn: INTEGER = 7 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 0 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 9 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = True + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/amphibious_unit.e b/jj_vitp/Implementation/classes/units/amphibious_unit.e new file mode 100644 index 0000000..80500b5 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/amphibious_unit.e @@ -0,0 +1,189 @@ +note + description: "[ + Represents one of the air force attack units in VITP. + ]" + author: "Jimmy J. Johnson" + +deferred class + AMPHIBIOUS_UNIT + +inherit + + ATTACK_UNIT + redefine + landable_ports, + arrival_location, +-- arrival_position, + internal_is_movable + end + +feature -- Access + + arrival_location: LOCATION + -- The port at which this unit may enter the game + do + if is_returning_unit then + if nationality = game.japanese then + Result := game.uncommitted_japanese_location + else + Result := game.uncommitted_allied_location + end + else + Result := Precursor + end + end + +-- arrival_position: like position +-- -- The location (latitude/longitude-like coordinates) where Current +-- -- will enter the game +-- do +-- if nationality = game.japanese then +-- Result := [300, 70] +-- else +-- Result := [680, 300] +-- end +-- end + + patrollable_sea_areas: LINKED_SET [SEA_AREA] + -- A list containing each {SEA_AREA} which Current can patrol + -- from its `home_port' at this point in the game + local + s: LINEAR [SEA_AREA] + s2: LINEAR [SEA_AREA] + a: SEA_AREA + do + create Result.make + if attached {MOVE_AMPHIBIOUS_STEP} game.sequence_of_play then + -- Current can go to any sea area adjacent to its `home_port' + check attached home_port as p then + s := p.adjacent_sea_areas + from s.start + until s.after + loop + a := s.item + Result.extend (a) + -- It can also go to a second sea area if first is not enemy's + if not a.is_enemy_controlled (nationality) then + s2 := a.adjacent_sea_areas + from s2.start + until s2.exhausted + loop + Result.extend (s2.item) + s2.forth + end + end + s.forth + end + end + end + end + + raidable_sea_areas: LINKED_SET [SEA_AREA] + -- A list containing each {SEA_AREA} which Current can raid + -- from its `home_port' at this point in the game + local + s: like patrollable_sea_areas + do + create Result.make + end + + landable_ports: LINKED_SET [PORT] + -- A list containing each {PORT} at which Current can + -- make a landing at this point in the game + local + lin: LINEAR [PORT] + do +io.put_string ("AMPHIBIOUS_UNIT.landable_ports: fix to account for retreats--rule 13.4 %N") + create Result.make +-- if game.stage = {GAME_SEQUENCE}.Landing_amphibious or +-- game.stage = {GAME_SEQUENCE}.Post_combat_amphibious_landing or +-- game.stage = {GAME_SEQUENCE}.End_of_turn_amphibious_landing then +-- if attached {SEA_AREA} location as s then +-- lin := s.adjoining_ports +-- from lin.start +-- until lin.exhausted +-- loop +-- Result.extend (lin.item) +-- lin.forth +-- end +-- end +-- end + end + +feature -- Status report + + is_sunk: BOOLEAN + -- Is this unit sunk? + do + Result := (is_at_sea or is_in_port) and damage > defense_factor + end + + is_patrollable: BOOLEAN = False + -- Can this unit be a patroller for area control purposes? + + is_raidable: BOOLEAN = False + -- Can this unit be a raider? + + is_patrolling: BOOLEAN = False + -- Is this unit a patroller (as opposed to a raider)? + + is_raiding: BOOLEAN = False + -- Is this unit a raider? + +feature -- Query + + is_incompatible_position (a_position: VITP_POSITION): BOOLEAN + -- Is `a_position' located on a unit with which Current is NOT + -- allowed to `join_force' (e.g. on a submarine or an enemy)? + local + tf: TASK_FORCE + u_list: VITP_TABLE [ATTACK_UNIT] + au: ATTACK_UNIT + do + if not is_in_game then + Result := false + elseif game.i_boat.contains_position (a_position) or game.f_boat.contains_position (a_position) then + Result := true + else + if nationality = game.japanese then + u_list := game.allied_attack_units + else + u_list := game.japanese_attack_units + end + from u_list.start + until u_list.after or else Result + loop + au := u_list.item_for_iteration + Result := au.contains_position (a_position) + u_list.forth + end + end + -- Temp for testing + Result := false + end + +feature {NONE} -- Implementation + + internal_can_patrol: BOOLEAN = False + -- Can this game piece be a patroller? + + internal_is_movable: BOOLEAN + -- Can Current (not the `task_force') move at this time? + local + sop: VITP_SEQUENCE_OF_PLAY + do + sop := game.sequence_of_play + Result := is_in_game and not (is_sunk or is_bottomed) and then + ((sop.is_allied_player and is_allied) or + (sop.is_japanese_player and is_japanese)) and then + ((sop.is_moving_amphibious_step)) + if Result and sop.turn = 1 and sop.is_allied_player then + -- Only some allied ships can move on turn 1 + Result := (Current = game.de_ruyter or Current = game.exeter or + Current = game.houston or Current = game.australia or + Current = game.canberra) + end + end + + +end diff --git a/jj_vitp/Implementation/classes/units/attack_unit.e b/jj_vitp/Implementation/classes/units/attack_unit.e new file mode 100644 index 0000000..8f29ae4 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/attack_unit.e @@ -0,0 +1,1104 @@ +note + description: "[ + Root class for all the game pieces in VITP. + ]" + author: "Jimmy J. Johnson" + +deferred class + ATTACK_UNIT + +inherit + + VITP_ITEM + redefine + make + end + + COMPARABLE + undefine + copy, + is_equal + end + +feature -- Initialization + + make (a_game: like game) + -- Initialize with the values; these are initial values and cannot be changed + -- `a_name' = name of the ship or unit + -- `a_nationality' = country to which it belongs + -- `a_arrival_turn' = turn 1 to 9 in which the unit enters the game + -- `a_airstrike' = the unit's "airstrike factor" + -- `a_guns' = the unit's "gunnery factor" + -- `a_armor' = the unit's "armor factor" + -- `a_speed' = the unit's "speed factor" + -- `a_bonus' = true if the unit has an initial attack bonus + local + lin: LINEAR [PORT] + do + Precursor {VITP_ITEM} (a_game) + create task_force.make (a_game) + task_force.set_ordered +-- arrival_location := game.still_in_box + position := [0, 0] + -- Initialize to never return (changed for air and amphibious units) + returning_turn := 0 + task_force.extend (Current) + end + +feature -- Access + + arrival_turn: INTEGER + -- Turn on which this unit enters the game. + deferred + end + + airstrike_factor: INTEGER + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + deferred + end + + gunnery_factor: INTEGER + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + deferred + end + + defense_factor: INTEGER + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + deferred + end + + speed_factor: INTEGER + -- The initial "speed" of the unit. + deferred + end + + attack_bonus: BOOLEAN + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + deferred + end + + returning_turn: INTEGER + -- The turn on which this unit can reenter the game. + + home_port: PORT + -- The {PORT} from which Current is basing this turn. + attribute + Result := game.default_port + end + + location: LOCATION + -- The sea, base, or port at which Current is located. + attribute +-- Result := game.still_in_box + if Current.is_japanese then + Result := game.japanese_oa_chart + else + if Current.arrival_turn = 1 then + Result := game.allied_starting_forces_chart + else + Result := game.allied_oa_chart + end + end + end + + damage: INTEGER + -- The amount of total damage Current has taken + + gunnery_count: INTEGER + -- Number of dice the unit rolls when attacking during a "night action". + -- It is the `Gunnery_factor' reduced by the amount of `damage'. + do + Result := (gunnery_factor - damage).max (1) + end + + defense_count: INTEGER + -- The amount of armor remaining, used to determine if a unit is "sunk". + do + Result := defense_factor - damage + end + + speed_count: INTEGER + -- The actual speed of Current calculated from other factors + do + Result := (speed_factor - damage).max (1) + end + + airstrike_count: INTEGER + -- Number of dice the unit rolls when attacking during a "day actions". + do + Result := airstrike_factor + end + + task_force: TASK_FORCE + -- The whole force including Current if others + + target: ATTACK_UNIT + -- The target (if `is_targetting') + do + check attached target_imp as t then + Result := t + end + end + + relative_value: INTEGER + -- Relative value of current to other units, calculated from the + -- current values of the gunnery, defense, and speed counts. + local + b_fac: INTEGER + do + if attack_bonus then + if airstrike_factor > 0 then + -- Apply bonus to airstrike only + b_fac := Bonus_weight * airstrike_weight +-- Result := (airstrike_count + Bonus_weight) * Airstrike_weight +-- Result := Result + gunnery_count * Gunnery_weight + else + -- apply bonus to guns unless too much damage + if defense_count > 0 then + b_fac := Bonus_weight * Gunnery_weight +-- Result := (gunnery_count + Bonus_weight) * Gunnery_weight +-- Result := Result + airstrike_count * Airstrike_weight + end + end + end + Result := b_fac + airstrike_count + gunnery_count + Result := Result + defense_count * Defense_weight + speed_factor * Speed_weight +-- if Current = Tone then +-- do_nothing +-- end +-- if Current = Mutsu then +-- do_nothing +-- end + end + + patrol_distance: INTEGER + -- How may sea areas can Current move through as patroller? + -- Determined by the unit type and nationality + do + Result := 2 + end + + raid_distance: INTEGER + -- How many sea areas can Current move through as raider? + -- Determined by the unit type and nationality + local + has_non_major: BOOLEAN + do + if is_task_force then + from task_force.start + until task_force.exhausted or has_non_major + loop + if not task_force.item.is_major_power then + has_non_major := true + end + task_force.forth + end + end + if not has_non_major then + Result := patrol_distance + 1 + end + end + +feature -- Access + + sailing_distance: INTEGER + -- The distance Current can patrol or raid (depending on `is_raiding'). + -- This is the minimum of all contained units. + local + f: INTEGER + u: ATTACK_UNIT + do + Result := {INTEGER}.Max_value + from task_force.start + until task_force.is_after + loop + u := task_force.item + if u.sailing_distance < Result then + Result := f + end + task_force.forth + end + end + + reinforceable_ports: LINKED_SET [PORT] + -- A list containing each {PORT} to which Current + -- can be moved during the reinforcement step. + require + is_reinforcing: game.sequence_of_play.is_reinforcement_step + deferred + end + + patrolable_sea_areas: LINKED_SET [SEA_AREA] + -- A list containing each {SEA_AREA} to which Current + -- can be moved during the moving patrollers step. + local + sop: VITP_SEQUENCE_OF_PLAY + sd: INTEGER + s: SEA_AREA + dist: INTEGER + do +-- io.put_string ("ATTCK_UNIT.patrolable_sea_areas: fix using GRAPH_ITERATOR.shortest_paths %N") + create Result.make + sop := game.sequence_of_play + if sop.is_patrolling_step and + ((not game.is_allied_nationality (nationality) and then sop.is_japanese_player) or else + (game.is_allied_nationality (nationality) and then sop.is_allied_player)) then + if home_port = game.yokosuka_navy_yard or home_port = game.okinawa then + Result.extend (game.japanese_islands) + if not is_opposed (game.japanese_islands) then + Result.extend (game.indonesia) + Result.extend (game.marianas_islands) + Result.extend (game.central_pacific_ocean) + Result.extend (game.aleutian_islands) + end + elseif home_port = game.saigon or home_port = game.singapore then + Result.extend (game.indonesia) + if not is_opposed (game.indonesia) then + Result.extend (game.bay_of_bengal) + Result.extend (game.indian_ocean) + Result.extend (game.south_pacific_ocean) + Result.extend (game.marianas_islands) + Result.extend (game.japanese_islands) + end + elseif home_port = game.ceylon or home_port = game.andaman_islands then + Result.extend (game.bay_of_Bengal) + if not is_opposed (game.bay_of_bengal) then + Result.extend (game.indonesia) + Result.extend (game.indian_ocean) + end + elseif home_port = game.philippines then + Result.extend (game.indonesia) + Result.extend (game.marianas_Islands) + if not is_opposed (game.indonesia) then + Result.extend (game.bay_of_bengal) + Result.extend (game.indian_ocean) + Result.extend (game.south_pacific_ocean) + Result.extend (game.marianas_islands) + Result.extend (game.japanese_islands) + end + if not is_opposed (game.marianas_islands) then + Result.extend (game.south_pacific_ocean) + Result.extend (game.marshall_islands) + Result.extend (game.central_pacific_ocean) + Result.extend (game.japanese_islands) + end + elseif home_port = game.lae then + Result.extend (game.south_pacific_ocean) + Result.extend (game.indonesia) + if not is_opposed (game.indonesia) then + Result.extend (game.japanese_islands) + Result.extend (game.marianas_islands) + end + if not is_opposed (game.south_pacific_ocean) then + Result.extend (game.marianas_islands) + Result.extend (game.coral_sea) + Result.extend (game.us_mandate) + Result.extend (game.marshall_islands) + end + elseif home_port = game.australia or home_port = game.port_moresby then + Result.extend (game.indian_ocean) + Result.extend (game.coral_sea) + if not is_opposed (game.indian_ocean) then + Result.extend (game.bay_of_bengal) + Result.extend (game.indonesia) + end + if not is_opposed (game.coral_sea) then + Result.extend (game.south_pacific_ocean) + Result.extend (game.us_mandate) + end + elseif home_port = game.guadalcanal then + Result.extend (game.coral_sea) + Result.extend (game.south_pacific_ocean) + if not is_opposed (game.coral_sea) then + Result.extend (game.indian_ocean) + Result.extend (game.us_mandate) + end + if not is_opposed (game.south_pacific_ocean) then + Result.extend (game.indonesia) + Result.extend (game.marianas_islands) + Result.extend (game.marshall_islands) + Result.extend (game.us_mandate) + end + elseif home_port = game.new_hebrides then + Result.extend (game.coral_sea) + Result.extend (game.us_mandate) + if not is_opposed (game.coral_sea) then + Result.extend (game.indian_ocean) + Result.extend (game.south_pacific_ocean) + end + if not is_opposed (game.us_mandate) then + Result.extend (game.south_pacific_ocean) + Result.extend (game.marshall_islands) + Result.extend (game.hawaiian_islands) + end + elseif home_port = game.samoa then + Result.extend (game.us_mandate) + if not is_opposed (game.us_mandate) then + Result.extend (game.coral_sea) + Result.extend (game.south_pacific_ocean) + Result.extend (game.marshall_islands) + Result.extend (game.hawaiian_islands) + end + elseif home_port = game.johnston_island or home_port = game.pearl_harbor then + Result.extend (game.hawaiian_islands) + if not not is_opposed (game.hawaiian_Islands) then + Result.extend (game.us_mandate) + Result.extend (game.marshall_islands) + Result.extend (game.central_pacific_ocean) + Result.extend (game.north_pacific_ocean) + end + elseif home_port = game.kwajalein or home_port = game.maloelap then + Result.extend (game.marshall_islands) + if not is_opposed (game.marshall_islands) then + Result.extend (game.south_pacific_ocean) + Result.extend (game.us_mandate) + Result.extend (game.hawaiian_islands) + Result.extend (game.central_pacific_ocean) + Result.extend (game.marianas_islands) + end + elseif home_port = game.truk then + Result.extend (game.south_pacific_ocean) + Result.extend (game.marshall_islands) + Result.extend (game.marianas_islands) + if not is_opposed (game.south_pacific_ocean) then + Result.extend (game.indonesia) + Result.extend (game.coral_sea) + Result.extend (game.us_mandate) + end + if not is_opposed (game.marshall_islands) then + Result.extend (game.us_mandate) + Result.extend (game.hawaiian_islands) + Result.extend (game.central_pacific_ocean) + end + if not is_opposed (game.marianas_islands) then + Result.extend (game.indonesia) + Result.extend (game.japanese_islands) + Result.extend (game.central_pacific_ocean) + end + elseif home_port = game.saipan then + Result.extend (game.marianas_islands) + if not is_opposed (game.marianas_islands) then + Result.extend (game.japanese_Islands) + Result.extend (game.indonesia) + Result.extend (game.south_pacific_ocean) + Result.extend (game.marshall_islands) + Result.extend (game.central_pacific_ocean) + end + elseif home_port = game.midway then + Result.extend (game.central_pacific_ocean) + if not is_opposed (game.central_pacific_ocean) then + Result.extend (game.japanese_islands) + Result.extend (game.marianas_islands) + Result.extend (game.marshall_islands) + Result.extend (game.hawaiian_islands) + Result.extend (game.north_pacific_ocean) + Result.extend (game.aleutian_islands) + end + elseif home_port = game.dutch_harbor then + Result.extend (game.north_pacific_ocean) + Result.extend (game.aleutian_islands) + if not is_opposed (game.north_pacific_ocean) then + Result.extend (game.central_pacific_ocean) + Result.extend (game.hawaiian_islands) + end + if not is_opposed (game.aleutian_islands) then + Result.extend (game.japanese_islands) + Result.extend (game.central_pacific_ocean) + end + elseif home_port = game.attu then + Result.extend (game.aleutian_islands) + if not is_opposed (game.aleutian_islands) then + Result.extend (game.japanese_islands) + Result.extend (game.central_pacific_ocean) + Result.extend (game.north_pacific_ocean) + end + else + end + end + end + + landable_ports: LINKED_SET [PORT] + -- A list containing each {PORT} at which Current can make + -- a landing if at the appropriate point in the game + local + lin: LINEAR [PORT] + do + create Result.make + if attached {SEA_AREA} location as s then + lin := s.adjoining_ports + from lin.start + until lin.exhausted + loop + if not lin.item.is_enemy_controlled (nationality) then + Result.extend (lin.item) + end + lin.forth + end + end + -- Add all major ports to the set + from game.major_ports.start + until game.major_ports.after + loop + if not game.major_ports.item_for_iteration.is_enemy_controlled (nationality) then + Result.extend (game.major_ports.item_for_iteration) + end + game.major_ports.forth + end + end + + arrivable_locations: LINKED_LIST [LOCATION] + -- The possible locations to which Current can move when + -- coming into [or back into] the game + local + sop: VITP_SEQUENCE_OF_PLAY + do + create Result.make + sop := game.sequence_of_play + if arrival_turn = sop.turn or returning_turn = sop.turn then + if nationality = sop.nationality then + if nationality = game.japanese then + + end + end + end + end + + arrival_location: LOCATION + -- The port or sea area at which this unit may enter the game + do + if nationality = game.japanese and game.yokosuka_navy_yard.nationality = game.japanese then + Result := game.yokosuka_navy_yard + elseif nationality = game.us then + if game.pearl_harbor.nationality = game.us then + Result := game.pearl_harbor + elseif game.samoa.nationality = game.us then + Result := game.samoa + else + io.put_string ("ATTACK_UNIT.arrival_location -- put it on US_chart. %N") + Result := game.still_in_box + end + elseif nationality = game.british and game.ceylon.nationality = game.us then + Result := game.ceylon + elseif nationality = game.australian then + Result := game.australia + else + Result := game.still_in_box + check + should_not_happpen: False + -- because all nationalities have been checked + end + end + end + + arrival_port: like home_port + -- The port to which Current is assigned when it comes into + -- the game during a reinforcement action. + do + Result := game.default_port + if nationality = game.japanese and game.yokosuka_navy_yard.nationality = game.japanese then + Result := game.yokosuka_navy_yard + elseif nationality = game.us then + if game.pearl_harbor.nationality = game.us then + Result := game.pearl_harbor + else + Result := game.samoa + end + elseif nationality = game.british then + if Current = game.victorious and game.pearl_harbor.nationality = game.us then + Result := game.pearl_harbor + elseif game.ceylon.nationality = game.us then + Result := game.ceylon + end + elseif nationality = game.australian then + Result := game.australia + else + check + should_not_happpen: False + -- because all nationalities have been checked + end + end + end + + arrival_position: like position + -- The location (latitude/longitude-like coordinates) where Current will enter the game + do + -- The following measurements in millimeters were taken from the game board + if arrival_location = game.Yokosuka_navy_yard then + Result := [300, 140] + elseif arrival_location = game.Pearl_Harbor then + Result := [700, 330] + elseif arrival_location = game.Samoa then + Result := [570, 480] + elseif arrival_location = game.Ceylon then + Result := [185, 15] + elseif arrival_location = game.Bay_of_Bengal then + Result := [10, 370] + elseif arrival_location = game.Indonesia then + Result := [130, 350] + elseif arrival_location = game.Philippines then + Result := [210, 270] + elseif arrival_location = game.Australia then + Result := [240, 470] + elseif arrival_location = game.Singapore then + Result := [90, 280] + elseif arrival_location = game.Coral_sea then + Result := [370, 520] + elseif arrival_location = game.US_mandate then + Result := [500, 500] + elseif arrival_location = game.Hawaiian_islands then + Result := [570, 380] + else + -- Return its Current position + Result := [position.longitude, position.latitude] + end + end + +feature -- Element change + + set_location (a_location: LOCATION) + -- Move all ships in `task_force' to `a_location' + require + is_valid_move: is_valid_move (a_location) + local + u: ATTACK_UNIT + do + io.put_string ("ATTACK_UNIT.set_location: " + name.out + " to " + a_location.name + "%N") + from task_force.start + until task_force.is_after + loop + u := task_force.item + u.set_location_internal (a_location) + task_force.forth + end + ensure + location_set: location = a_location + location_set_for_all: + end + + set_home_port (a_port: PORT) + -- Change the unit's `home_port' + require + is_valid_base: is_valid_unit_move (a_port) + do + home_port := a_port + end + + set_returning_turn (a_turn: INTEGER) + -- Set the turn on which Current can reenter the game + require + valid_turn: a_turn >= 3 and a_turn <= 9 + do + returning_turn := a_turn + end + + set_location_internal (a_location: LOCATION) + -- Used internally to bypass referential invariant checking + do + if location /= a_location then + is_stable := False + location.prune (Current) + location := a_location + if not a_location.has (Current) then + a_location.put (Current) + end + is_stable := True + end + end + + set_target (a_target: ATTACK_UNIT) + -- Get ready to attack `a_target' + require + same_locations: location = a_target.location + do + target_imp := a_target + end + + remove_target + -- Remove any target from Current sights + do + target_imp := Void + end + +feature -- Query + + is_valid_move (a_location: LOCATION): BOOLEAN + -- Can this {TASK_FORCE} (all units) move to `a_location'? + do + Result := True + from task_force.start + until task_force.is_after or not Result + loop + Result := task_force.item.is_valid_unit_move (a_location) + task_force.forth + end + end + + is_valid_unit_move (a_location: LOCATION): BOOLEAN + -- Can Current (regardless of any other units that + -- may be in the `task_force') move to `a_location'? + do + io.put_string ("{ATTACK_UNIT}.is_valid_unit_move: fix to for restricted port %N") + Result := True + end + +feature -- Access + + position: VITP_POSITION + -- The position in millimeters (east/west and up/down) from the + -- top-left of the [logical] VITP world. That is, the position + -- of an attack unit is relative to the top-left corner of the + -- game board which is at point (0, 0). + + unit_size: INTEGER + -- The size of Current (square). + -- Assume it is `Ship_size' and redefine for {AIR_UNIT} and + -- for {AMPHIBIOUS_UNIT}. + once + Result := game.initial_ship_size + end + + corners: ARRAY [VITP_POSITION] + -- The four corner points of Current (square ships) calculated + -- from Current's location and `unit_size', starting at the top/ + -- left and going clockwise. + local + p: VITP_POSITION + h: INTEGER + do + h := unit_size // 2 + create Result.make_filled (create {VITP_POSITION}, 1, 4) + create p.set_xy (position.longitude - h, position.latitude - h) + Result.put (p, 1) + create p.set_xy (position.longitude + h, position.latitude - h) + Result.put (p, 2) + create p.set_xy (position.longitude + unit_size, position.latitude + h) + Result.put (p, 3) + create p.set_xy (position.longitude - unit_size, position.latitude + unit_size) + Result.put (p, 4) + end + +feature -- Element change + + set_position (a_position: like position) + -- Change the `position' of Current [and all units in `task_force'] + require + position_exists: a_position /= Void + is_valid_position: not is_incompatible_position (a_position) + local + u: ATTACK_UNIT + do + from task_force.start + until task_force.is_after + loop + u := task_force.item + u.internal_set_position (a_position) + task_force.forth + end + ensure + position_set: position ~ a_position + end + +feature -- Query + +-- is_valid_position (a_position: VITP_POSITION): BOOLEAN +-- -- Is `a_position' valid? Yes if the position is on the board/table, +-- -- (garanteed by invariant of {VITP_POSITION}), not on an enemy unit, +-- -- and not on a unit of the wrong type (i.e. a submarine cannot join +-- -- a task force.) +-- do +-- Result := not is_on_incompatible_unit (a_position) +-- end + + is_incompatible_position (a_position: VITP_POSITION): BOOLEAN + -- Yes if repositioning Current to `a_position' would cause Current + -- to overlap a unit that is incompatible for a `join_force' (e.g. + -- on a submarine or on an enemy)? + deferred + end + + contains_position (a_position: VITP_POSITION): BOOLEAN + -- Is `a_position' on or in Current? + -- This feature uses a ray-casting algorithm which determines if the + -- number of edge crossings made by a ray to the right is odd (inside) + -- or even (outside). + local + pts: like corners + i, j: INTEGER + do + pts := corners + from + i := 1 + j := 4 + until i > 4 + loop + -- Get integer values so algorithm can work. +-- if ( ((pts[i] >= a_position) /= (pts[j] >= a_position)) and +-- (a_position <= (pts[j] - pts[i]) * +-- (a_position - pts[i]) // +-- (pts[j] - pts[i]) + pts[i]) ) then +-- -- Invert Result every time an edge is crossed. +-- Result := not Result +-- end + j := i + i := i + 1 + end + end + + overlaps (a_other: ATTACK_UNIT): BOOLEAN + -- Does Current occupy any space occupied by a_other + local + pts: like corners + i: INTEGER + do + if Current /= a_other then + pts := corners + from i := 1 + until i > pts.count or Result + loop + Result := a_other.contains_position (pts[i]) + i := i + 1 + end + -- Check the other way around + if not Result then + pts := a_other.corners + from i := 1 + until i > pts.count or Result + loop + Result := contains_position (pts[i]) + i := i + 1 + end + end + end + end + +-- is_same_power (a_nationality: NATIONALITY): BOOLEAN +-- -- Is Current the same power (Axis or Allied) as `a_natinality'? +-- do +-- Result := (nationality.is_allied and a_nationality.is_allied) or else +-- (not nationality.is_allied and not a_nationality.is_allied) +-- end + +feature -- Basic operations + + join_force (a_other: ATTACK_UNIT) + -- Join forces with `a_other' as a single `task_force' + require + not_submarine: not attached {SUBMARINE} a_other and not attached {SUBMARINE} Current + lba_implication: attached {AIR_UNIT} task_force.first implies attached {AIR_UNIT} a_other + other_lba_implication: attached {AIR_UNIT} a_other implies attached {AIR_UNIT} task_force.first + not_lba_implication: not attached {AIR_UNIT} task_force.first implies not attached {AIR_UNIT} a_other + not_other_lba_implication: not attached {AIR_UNIT} a_other implies not attached {AIR_UNIT} task_force.first + not_same_units: not (a_other = Current) + not_same_task_forces: (is_task_force and a_other.is_task_force) implies + not (task_force = a_other.task_force) + not_opposing_sides: not is_opposed (a_other) + same_location: location = a_other.location + local + u: ATTACK_UNIT + pos: VITP_POSITION + do + is_stable := False + -- Put all units into `a_other's `task_force' + pos := a_other.position + from task_force.start + until task_force.is_after + loop + u := task_force.item +-- u.position.set_xy (pos.longitude, pos.latitude) + a_other.task_force.extend (u) + task_force.forth + end + -- Remove all the units from Current's `task_force' + task_force.wipe_out + -- Make to two tasks forces the same one + set_task_force (a_other.task_force) + is_stable := True + ensure + same_task_forces: task_force = a_other.task_force + has_multiple_units: task_force.count >= 2 + end + + leave_force + -- Remove Current from the `task_force' to which it belongs, but only + -- if there are other ships in the force, and put it in its own. + require + is_in_task_force: is_task_force + local + u: ATTACK_UNIT + do + task_force.prune (Current) + create task_force.make (game) + task_force.extend (Current) + ensure + not_in_force: not is_task_force + end + +feature -- Status report + + is_task_force: BOOLEAN + -- Is this unit part of a task force? + do + Result := task_force.count > 1 + ensure + result_implies_in_force: task_force.has (Current) + result_implies_others: Result implies task_force.count >= 2 + end + + is_in_game: BOOLEAN + -- Is this unit in the game? (I.e. not sunk, not still to enter) + do + Result := is_at_sea or is_in_port or + location = game.uncommitted_japanese_location or + location = game.uncommitted_allied_location + end + + is_at_sea: BOOLEAN + -- Is this unit at sea? + do + Result := attached {SEA_AREA} location + end + + is_in_port: BOOLEAN + -- Is this unit in port? + do + Result := attached {PORT} location + end + + is_movable: BOOLEAN + -- Can Current move (to sea or back to port) at + -- this time in the game? + local + u: ATTACK_UNIT + do + Result := true + from task_force.start + until task_force.is_after or not Result + loop + u := task_force.item + Result := u.internal_is_movable + task_force.forth + end + end + + internal_is_movable: BOOLEAN + -- Can Current move (not the whole `task_force') move at this time? + local + sop: VITP_SEQUENCE_OF_PLAY + do + sop := game.sequence_of_play + print ("ATTACK_UNIT.internal_is_movable: %N") + print (" sop.is_allied_player = " + sop.is_allied_player.out + "%N") + print (" " + name + ".is_allied = " + is_allied.out + "%N") + print (" sop.is_japaneses_player = " + sop.is_japanese_player.out + "%N") + print (" " + name + ".is_japanese = " + is_japanese.out + "%N") + print (" sop.is_patrolling_step = " + sop.is_patrolling_step.out + "%N") + print (" " + name + ".is_patrolling = " + is_patrolling.out + "%N") + Result := ( (sop.is_allied_player and is_allied) or + (sop.is_japanese_player and is_japanese)) and then + ( (sop.is_reinforcement_step and is_returning_unit) or + -- (sop.is_removing_sunk_units_phase and is_sunk) or + -- (sop.is_returning_disabled_units_stage and is_disabled) or + -- (sop.is_removing_sunk_units_phase and is_sunk) or + -- (sop.is_returning_to_port_stage and is_at_sea and not is_sunk) or + (sop.is_patrolling_step and is_patrolling) or + (sop.is_raiding_step and is_raiding)) + print (" Result = " + Result.out + "%N") + end + + is_stable: BOOLEAN + -- Set to false when pruning and adding for invariant checking + -- of referential integrity between units and locations + + is_major_power: BOOLEAN + -- Is Current's `nationality' one of Japanese or US? + do + Result := nationality = game.japanese or nationality = game.us + end + + is_sunk: BOOLEAN + -- Has this unit been sunk? + deferred + end + + is_bottomed: BOOLEAN + -- Is unit in port with too much damage to sail? + -- Default is Fasle, so redefine for {SHIP} + do + Result := False + ensure + implication: Result implies is_in_port + end + + is_disabled: BOOLEAN + -- Is the unit disabled? + + is_returning_unit: BOOLEAN + -- Is the unit returning on this turn? + do + Result := returning_turn = game.sequence_of_play.turn + end + + is_patrollable: BOOLEAN + -- Can this unit be a patroller for area control purposes? + deferred + end + + is_raidable: BOOLEAN + -- Can this unit be a raider? + deferred + end + + is_patrolling: BOOLEAN + -- Is this unit a patroller (as opposed to a raider)? + deferred + end + + is_raiding: BOOLEAN + -- Is this unit a raider? + deferred + end + +feature -- Status setting + + + set_disabled + -- Mark Current as `is_disabled' + do + is_disabled := True + end + + set_not_disabled + -- Mark Current as not `is_disabled' + do + is_disabled := False + end + +feature {ATTACK_UNIT} -- Implementation + + internal_set_position (a_position: VITP_POSITION) + -- Change the `position' of [only] Current + require + position_exists: a_position /= Void + do + position.set_xy (a_position.longitude, a_position.latitude) + end + +feature {ATTACK_UNIT} -- Implementation + +feature -- Comparison + + is_less alias "<" (other: like Current): BOOLEAN + -- Is current object less than `other'? + do + -- Weight the attack, defense, speed factors and compare result + Result := (relative_value > other.relative_value) or else + (relative_value = other.relative_value and then name < other.name) +-- Result := name < other.name + end + +feature {NONE} -- Implementation (weighting factors for `relative_value') + + gunnery_weight: INTEGER = 10 + defense_weight: INTEGER = 1 + speed_weight: INTEGER = 1 + airstrike_weight: INTEGER = 10 + bonus_weight: INTEGER = 2 + +feature {ATTACK_UNIT} -- Implementation + + set_task_force (a_force: like task_force) + -- Set `task_force' to `a_force' + require + has_current: a_force.has (Current) + do + task_force.prune (Current) + task_force := a_force + ensure + task_force_assigned: task_force = a_force + in_task_force: task_force.has (Current) + end + + remove_task_force + -- Remove Current from `task_force' and put it in its own `task_force' + do + task_force.prune (Current) + create task_force.make (game) + end + +feature {NONE} -- Implementation (invariant routines) + + same_location_for_all: BOOLEAN + -- Do all the unit have the same `location'? + local + c: CURSOR + do + c := task_force.cursor + Result := true + if is_task_force then + from task_force.start + until task_force.is_after + loop + Result := task_force.item.location = location + task_force.forth + end + end + task_force.go_to (c) + end + + same_position_for_all: BOOLEAN + -- Do all the units have the same `location'? + local + c: CURSOR + do + c := task_force.cursor + Result := true + if is_task_force then + from task_force.start + until task_force.is_after + loop + Result := task_force.item.position ~ position + task_force.forth + end + end + task_force.go_to (c) + end + +feature {NONE} -- Implementation + + target_imp: detachable ATTACK_UNIT + -- The unit if any that Current is set to attack + + + +invariant + + location_exists: location /= Void + task_force_exists: task_force /= Void + +-- longitude_big_enough: position.longitude >= {POSITION_CONSTANTS}.Minimum_longitude +-- longitude_small_enough: position.longitude <= {POSITION_CONSTANTS}.Maximum_longitude +-- latitude_big_enough: position.latitude >= {POSITION_CONSTANTS}.Minimum_latitude +-- latitude_small_enough: position.latitude <= {POSITION_CONSTANTS}.Maximum_latitude + + contains_itself: task_force.has (Current) + valid_arrival_turn: arrival_turn >= 1 and arrival_turn <= 9 + + valid_gunnery_factor: gunnery_factor >= 0 and gunnery_factor <= 9 + valid_defense_factor: defense_factor >= 0 and defense_factor <= 9 + valid_speed_factor: speed_factor >= 3 and speed_factor <= 9 + +-- contains_current: task_force.first = Current +-- contains_only_current: task_force.count = 1 + + location_integrity: is_stable implies location.has (Current) + task_force_integrity: (is_stable and then is_task_force and then task_force.is_stable) + implies task_force.has (Current) + +-- task_force_location_implication: is_stable implies (is_task_force implies same_location_for_all) +-- task_force_position_implication: is_stable implies (is_task_force implies same_position_for_all) + +end diff --git a/jj_vitp/Implementation/classes/units/attack_units/allied_amphibious_unit.e b/jj_vitp/Implementation/classes/units/attack_units/allied_amphibious_unit.e new file mode 100644 index 0000000..c349979 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/attack_units/allied_amphibious_unit.e @@ -0,0 +1,29 @@ +note + description: "[ + An {AMPHIBIOUS_UNIT} belonging to the Allied player in VITP + ]" + author: "Jimmy J. Johnson" + date: "5/12/24" + copyright: "Copyright (c) 2024, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +deferred class + ALLIED_AMPHIBIOUS_UNIT + +inherit + + ALLIED_UNIT + undefine + patrol_distance, + raid_distance, + arrival_location, + landable_ports, + internal_is_movable + end + + AMPHIBIOUS_UNIT + undefine + make + end + +end diff --git a/jj_vitp/Implementation/classes/units/attack_units/allied_submarine.e b/jj_vitp/Implementation/classes/units/attack_units/allied_submarine.e new file mode 100644 index 0000000..9747508 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/attack_units/allied_submarine.e @@ -0,0 +1,31 @@ +note + description: "[ + A {SUBMARINE} belonging to the Allied player + ]" + author: "Jimmy J. Johnson" + date: "5/12/24" + copyright: "Copyright (c) 2024, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +deferred class + ALLIED_SUBMARINE + +inherit + + ALLIED_UNIT + undefine + patrol_distance, + raid_distance, + arrival_location, + landable_ports, + internal_is_movable, + join_force, + leave_force + end + + SUBMARINE + undefine + make + end + +end diff --git a/jj_vitp/Implementation/classes/units/attack_units/allied_unit.e b/jj_vitp/Implementation/classes/units/attack_units/allied_unit.e new file mode 100644 index 0000000..c35197d --- /dev/null +++ b/jj_vitp/Implementation/classes/units/attack_units/allied_unit.e @@ -0,0 +1,61 @@ +note + description: "[ + An {ATTACK_UNIT} that belongs to the Allies. + ]" + author: "Jimmy J. Johnson" + date: "5/12/24" + copyright: "Copyright (c) 2024, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +deferred class + ALLIED_UNIT + +inherit + + ATTACK_UNIT + redefine + make + end + +feature {NONE} -- Initialization + + make (a_game: like game) + -- Initialize attributes of Current + do + PRECURSOR {ATTACK_UNIT} (a_game) + nationality := game.us + end + +feature -- Access + + reinforceable_ports: LINKED_SET [PORT] + -- A list containing each {PORT} to which Current + -- can be moved during the reinforcement step. + local + sop: VITP_SEQUENCE_OF_PLAY + mp: VITP_TABLE [RED_PORT] + do +-- io.put_string ("ALLIED_UNIT.reinforceable_ports: %N") + create Result.make + sop := game.sequence_of_play + mp := game.major_ports + if sop.is_reinforcement_step then + from mp.start + until mp.after + loop + if mp.item_for_iteration.is_allied then + Result.extend (mp.item_for_iteration) + end + mp.forth + end + end + end + +invariant + + is_allied: nationality = game.us or + nationality = game.british or + nationality = game.australian or + nationality = game.dutch + +end diff --git a/jj_vitp/Implementation/classes/units/attack_units/australian_ship.e b/jj_vitp/Implementation/classes/units/attack_units/australian_ship.e new file mode 100644 index 0000000..da1e9c4 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/attack_units/australian_ship.e @@ -0,0 +1,46 @@ +note + description: "[ + An {SHIP} whose `nationality' is Australian + ]" + author: "Jimmy J. Johnson" + date: "5/12/24" + copyright: "Copyright (c) 2021, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +deferred class + AUSTRALIAN_SHIP + +inherit + + ALLIED_SHIP + redefine + make + end + +feature {NONE} -- Initialization + + make (a_game: like game) + -- Initialize attributes of Current + do + PRECURSOR {ALLIED_SHIP} (a_game) + nationality := game.australian + end + +feature -- Access + + reinforceable_ports: LINKED_SET [PORT] + -- A list containing each {PORT} to which Current + -- can be moved during the reinforcement step. + do + create Result.make + if game.sequence_of_play.is_allied_player then + if game.australia.is_allied then + Result.extend (game.australia) + end + end + end +invariant + + is_australian: nationality = {NATIONALITY_CONSTANTS}.australian + +end diff --git a/jj_vitp/Implementation/classes/units/attack_units/british_ship.e b/jj_vitp/Implementation/classes/units/attack_units/british_ship.e new file mode 100644 index 0000000..2f27cc9 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/attack_units/british_ship.e @@ -0,0 +1,47 @@ +note + description: "[ + An {SHIP} whose `nationality' is British + ]" + author: "Jimmy J. Johnson" + date: "5/12/24" + copyright: "Copyright (c) 2021, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +deferred class + BRITISH_SHIP + +inherit + + ALLIED_SHIP + redefine + make + end + +feature {NONE} -- Initialization + + make (a_game: like game) + -- Initialize attributes of Current + do + PRECURSOR {ALLIED_SHIP} (a_game) + nationality := game.british + end + +feature -- Access + + reinforceable_ports: LINKED_SET [PORT] + -- A list containing each {PORT} to which Current + -- can be moved during the reinforcement step. + do + create Result.make + if game.sequence_of_play.is_allied_player then + if game.ceylon.is_allied then + Result.extend (game.ceylon) + end + end + end + +invariant + + is_british: nationality = {NATIONALITY_CONSTANTS}.british + +end diff --git a/jj_vitp/Implementation/classes/units/attack_units/dutch_ship.e b/jj_vitp/Implementation/classes/units/attack_units/dutch_ship.e new file mode 100644 index 0000000..2d3208c --- /dev/null +++ b/jj_vitp/Implementation/classes/units/attack_units/dutch_ship.e @@ -0,0 +1,48 @@ +note + description: "[ + Any {ALLIED_UNIT} belonging to the Dutch + ]" + author: "Jimmy J. Johnson" + date: "5/12/24" + copyright: "Copyright (c) 2023, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +deferred class + DUTCH_SHIP + +inherit + + ALLIED_SHIP + redefine + make + end + +feature {NONE} -- Initialization + + make (a_game: like game) + -- Initialize attributes of Current + do + PRECURSOR {ALLIED_SHIP} (a_game) + nationality := game.dutch + end + +feature -- Access + + reinforceable_ports: LINKED_SET [PORT] + -- A list containing each {PORT} to which Current + -- can be moved during the reinforcement step. + do + create Result.make + if game.sequence_of_play.is_allied_player then + if game.singapore.is_allied then + Result.extend (game.singapore) + end + end + end + +invariant + + is_allied: nationality = {NATIONALITY_CONSTANTS}.dutch + +end + diff --git a/jj_vitp/Implementation/classes/units/attack_units/japanese_ship.e b/jj_vitp/Implementation/classes/units/attack_units/japanese_ship.e new file mode 100644 index 0000000..4150758 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/attack_units/japanese_ship.e @@ -0,0 +1,54 @@ +note + description: "[ + An {SHIP} that belongs to the Japanese. + ]" + author: "Jimmy J. Johnson" + date: "5/12/24" + copyright: "Copyright (c) 2024, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +deferred class + JAPANESE_SHIP + +inherit + + JAPANESE_UNIT + undefine + reinforceable_ports, + internal_is_movable, + is_bottomed + redefine + make + end + + SHIP + undefine +-- reinforceable_ports + redefine + make + end + +feature {NONE} -- Initialization + + make (a_game: like game) + -- Initialize attributes of Current + do + PRECURSOR {SHIP} (a_game) + nationality := game.japanese + end + +feature -- Access + + reinforceable_ports: LINKED_SET [PORT] + -- A list containing each {PORT} to which Current + -- can be moved during the reinforcement step. + do + create Result.make + if game.sequence_of_play.is_japanese_player then + if game.yokosuka_navy_yard.is_japanese then + Result.extend (game.yokosuka_navy_yard) + end + end + end + +end diff --git a/jj_vitp/Implementation/classes/units/attack_units/japanese_submarine.e b/jj_vitp/Implementation/classes/units/attack_units/japanese_submarine.e new file mode 100644 index 0000000..15df38a --- /dev/null +++ b/jj_vitp/Implementation/classes/units/attack_units/japanese_submarine.e @@ -0,0 +1,31 @@ +note + description: "[ + A {SUBMARINE} belonging to the Allied player + ]" + author: "Jimmy J. Johnson" + date: "5/12/24" + copyright: "Copyright (c) 2024, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +deferred class + JAPANESE_SUBMARINE + +inherit + + JAPANESE_UNIT + undefine + patrol_distance, + raid_distance, + arrival_location, + landable_ports, + internal_is_movable, + join_force, + leave_force + end + + SUBMARINE + undefine + make + end + +end diff --git a/jj_vitp/Implementation/classes/units/attack_units/japanese_unit.e b/jj_vitp/Implementation/classes/units/attack_units/japanese_unit.e new file mode 100644 index 0000000..2b67ace --- /dev/null +++ b/jj_vitp/Implementation/classes/units/attack_units/japanese_unit.e @@ -0,0 +1,55 @@ +note + description: "[ + An {ATTACK_UNIT} that belongs to the Japanese. + ]" + author: "Jimmy J. Johnson" + date: "5/12/24" + copyright: "Copyright (c) 2024, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +deferred class + JAPANESE_UNIT + +inherit + + ATTACK_UNIT + redefine + make + end + +feature {NONE} -- Initialization + + make (a_game: like game) + -- Initialize attributes of Current + do + PRECURSOR {ATTACK_UNIT} (a_game) + nationality := game.japanese + end + +feature -- Access + + reinforceable_ports: LINKED_SET [PORT] + -- A list containing each {PORT} to which Current + -- can be moved during the reinforcement step. + local + sop: VITP_SEQUENCE_OF_PLAY + mp: VITP_TABLE [RED_PORT] + do +-- io.put_string ("ALLIED_UNIT.reinforceable_ports: %N") + create Result.make + mp := game.major_ports + from mp.start + until mp.after + loop + if mp.item_for_iteration.is_japanese then + Result.extend (mp.item_for_iteration) + end + mp.forth + end + end + +invariant + + is_japanese: nationality = game.japanese + +end diff --git a/jj_vitp/Implementation/classes/units/attack_units/us_ship.e b/jj_vitp/Implementation/classes/units/attack_units/us_ship.e new file mode 100644 index 0000000..87f4c53 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/attack_units/us_ship.e @@ -0,0 +1,37 @@ +note + description: "[ + An {SHIP} whose `nationality' is United States + ]" + author: "Jimmy J. Johnson" + date: "5/12/24" + copyright: "Copyright (c) 2021, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +deferred class + US_SHIP + +inherit + + ALLIED_SHIP + +feature -- Access + + reinforceable_ports: LINKED_SET [PORT] + -- A list containing each {PORT} to which Current + -- can be moved during the reinforcement step. + do + create Result.make + if game.sequence_of_play.is_allied_player then + if game.hawaiian_islands.is_allied then + Result.extend (game.pearl_harbor) + elseif game.samoa.is_allied then + Result.extend (game.samoa) + end + end + end + +invariant + + is_unitied_states: nationality = {NATIONALITY_CONSTANTS}.us + +end diff --git a/jj_vitp/Implementation/classes/units/japanese_air_unit.e b/jj_vitp/Implementation/classes/units/japanese_air_unit.e new file mode 100644 index 0000000..9fc8d4c --- /dev/null +++ b/jj_vitp/Implementation/classes/units/japanese_air_unit.e @@ -0,0 +1,27 @@ +note + description: "[ + An {AIR_UNIT} belonging to the Japanese player in VITP + ]" + author: "Jimmy J. Johnson" + date: "3/15/24" + copyright: "Copyright (c) 2024, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +deferred class + JAPANESE_AIR_UNIT + +inherit + + JAPANESE_UNIT + undefine + patrol_distance, + raid_distance, + arrival_location + end + + AIR_UNIT + undefine + make + end + +end diff --git a/jj_vitp/Implementation/classes/units/japanese_amphibious_unit.e b/jj_vitp/Implementation/classes/units/japanese_amphibious_unit.e new file mode 100644 index 0000000..85006da --- /dev/null +++ b/jj_vitp/Implementation/classes/units/japanese_amphibious_unit.e @@ -0,0 +1,29 @@ +note + description: "[ + An {AMPHIBIOUS_UNIT} belonging to the Japanese player in VITP + ]" + author: "Jimmy J. Johnson" + date: "5/12/24" + copyright: "Copyright (c) 2024, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +deferred class + JAPANESE_AMPHIBIOUS_UNIT + +inherit + + JAPANESE_UNIT + undefine + patrol_distance, + raid_distance, + arrival_location, + landable_ports, + internal_is_movable + end + + AMPHIBIOUS_UNIT + undefine + make + end + +end diff --git a/jj_vitp/Implementation/classes/units/japanese_units/japanese_air_units/airflot_21.e b/jj_vitp/Implementation/classes/units/japanese_units/japanese_air_units/airflot_21.e new file mode 100644 index 0000000..0731893 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/japanese_units/japanese_air_units/airflot_21.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding air unit in game. + ]" + author: "Jimmy J. Johnson" + +class + AIRFLOT_21 + +inherit + + JAPANESE_AIR_UNIT + +create + make + +feature -- Access + + name: STRING_8 = "21 AirFlot" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 3 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 0 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 4 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 9 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/japanese_units/japanese_air_units/airflot_22.e b/jj_vitp/Implementation/classes/units/japanese_units/japanese_air_units/airflot_22.e new file mode 100644 index 0000000..c14866a --- /dev/null +++ b/jj_vitp/Implementation/classes/units/japanese_units/japanese_air_units/airflot_22.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding air unit in game. + ]" + author: "Jimmy J. Johnson" + +class + AIRFLOT_22 + +inherit + + JAPANESE_AIR_UNIT + +create + make + +feature -- Access + + name: STRING_8 = "22 AirFlot" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 3 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 0 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 4 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 9 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/japanese_units/japanese_air_units/airflot_23.e b/jj_vitp/Implementation/classes/units/japanese_units/japanese_air_units/airflot_23.e new file mode 100644 index 0000000..8c173d1 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/japanese_units/japanese_air_units/airflot_23.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding air unit in VITP. + ]" + author: "Jimmy J. Johnson" + +class + AIRFLOT_23 + +inherit + + JAPANESE_AIR_UNIT + +create + make + +feature -- Access + + name: STRING_8 = "23 AirFlot" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 3 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 0 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 4 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 9 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/japanese_units/japanese_air_units/airflot_24.e b/jj_vitp/Implementation/classes/units/japanese_units/japanese_air_units/airflot_24.e new file mode 100644 index 0000000..231a74b --- /dev/null +++ b/jj_vitp/Implementation/classes/units/japanese_units/japanese_air_units/airflot_24.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding air unit in VITP. + ]" + author: "Jimmy J. Johnson" + +class + AIRFLOT_24 + +inherit + + JAPANESE_AIR_UNIT + +create + make + +feature -- Access + + name: STRING_8 = "24 AirFlot" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 3 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 0 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 4 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 9 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/japanese_units/japanese_air_units/airflot_25.e b/jj_vitp/Implementation/classes/units/japanese_units/japanese_air_units/airflot_25.e new file mode 100644 index 0000000..a3384f6 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/japanese_units/japanese_air_units/airflot_25.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding air unit in VITP. + ]" + author: "Jimmy J. Johnson" + +class + AIRFLOT_25 + +inherit + + JAPANESE_AIR_UNIT + +create + make + +feature -- Access + + name: STRING_8 = "25 AirFlot" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 3 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 0 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 4 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 9 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/japanese_units/japanese_air_units/airflot_26.e b/jj_vitp/Implementation/classes/units/japanese_units/japanese_air_units/airflot_26.e new file mode 100644 index 0000000..517a3ac --- /dev/null +++ b/jj_vitp/Implementation/classes/units/japanese_units/japanese_air_units/airflot_26.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding air unit in VITP. + ]" + author: "Jimmy J. Johnson" + +class + AIRFLOT_26 + +inherit + + JAPANESE_AIR_UNIT + +create + make + +feature -- Access + + name: STRING_8 = "26 AirFlot" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 3 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 0 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 4 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 9 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/japanese_units/japanese_amphibious_units/kure.e b/jj_vitp/Implementation/classes/units/japanese_units/japanese_amphibious_units/kure.e new file mode 100644 index 0000000..277695d --- /dev/null +++ b/jj_vitp/Implementation/classes/units/japanese_units/japanese_amphibious_units/kure.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding amphibious unit in VITP. + ]" + author: "Jimmy J. Johnson" + +class + KURE + +inherit + + JAPANESE_AMPHIBIOUS_UNIT + +create + make + +feature -- Access + + name: STRING_8 = "Kure" + -- The name of this unit. + + arrival_turn: INTEGER = 3 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 0 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 3 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 3 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/japanese_units/japanese_amphibious_units/sasebo.e b/jj_vitp/Implementation/classes/units/japanese_units/japanese_amphibious_units/sasebo.e new file mode 100644 index 0000000..e8fcf60 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/japanese_units/japanese_amphibious_units/sasebo.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in VITP. + ]" + author: "Jimmy J. Johnson" + +class + SASEBO + +inherit + + JAPANESE_AMPHIBIOUS_UNIT + +create + make + +feature -- Access + + name: STRING_8 = "Sasebo" + -- The name of this unit. + + arrival_turn: INTEGER = 2 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 0 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 3 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 3 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/japanese_units/japanese_amphibious_units/yokosuka.e b/jj_vitp/Implementation/classes/units/japanese_units/japanese_amphibious_units/yokosuka.e new file mode 100644 index 0000000..6fda4ce --- /dev/null +++ b/jj_vitp/Implementation/classes/units/japanese_units/japanese_amphibious_units/yokosuka.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding amphibious unit in VITP. + ]" + author: "Jimmy J. Johnson" + +class + YOKOSUKA + +inherit + + JAPANESE_AMPHIBIOUS_UNIT + +create + make + +feature -- Access + + name: STRING_8 = "Yokosuka" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 0 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 3 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 3 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/akagi.e b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/akagi.e new file mode 100644 index 0000000..e6de91b --- /dev/null +++ b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/akagi.e @@ -0,0 +1,45 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + AKAGI + +inherit + + JAPANESE_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Akagi" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 4 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 4 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 5 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = True + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end + diff --git a/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/amagi.e b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/amagi.e new file mode 100644 index 0000000..6bbecec --- /dev/null +++ b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/amagi.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + AMAGI + +inherit + + JAPANESE_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Amagi" + -- The name of this unit. + + arrival_turn: INTEGER = 8 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 3 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 2 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/aoba.e b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/aoba.e new file mode 100644 index 0000000..30c31e7 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/aoba.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + AOBA + +inherit + + JAPANESE_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Aoba" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 1 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = True + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/ashigara.e b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/ashigara.e new file mode 100644 index 0000000..2cf08fd --- /dev/null +++ b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/ashigara.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + ASHIGARA + +inherit + + JAPANESE_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Ashigara" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 2 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = True + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/atago.e b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/atago.e new file mode 100644 index 0000000..b72d32a --- /dev/null +++ b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/atago.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + ATAGO + +inherit + + JAPANESE_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Atago" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 2 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = True + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/chikuma.e b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/chikuma.e new file mode 100644 index 0000000..7df9166 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/chikuma.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + CHIKUMA + +inherit + + JAPANESE_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Chikuma" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 1 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 8 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = True + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/chitose.e b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/chitose.e new file mode 100644 index 0000000..3dce2a6 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/chitose.e @@ -0,0 +1,45 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + CHITOSE + +inherit + + JAPANESE_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Chitose" + -- The name of this unit. + + arrival_turn: INTEGER = 7 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 1 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 0 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 1 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 6 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end + diff --git a/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/chiyoda.e b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/chiyoda.e new file mode 100644 index 0000000..addb098 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/chiyoda.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + CHIYODA + +inherit + + JAPANESE_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Chiyoda" + -- The name of this unit. + + arrival_turn: INTEGER = 7 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 1 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 0 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 1 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 6 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/chokai.e b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/chokai.e new file mode 100644 index 0000000..4b41513 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/chokai.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + CHOKAI + +inherit + + JAPANESE_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Chokai" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 2 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = True + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/furutaka.e b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/furutaka.e new file mode 100644 index 0000000..f8a96ab --- /dev/null +++ b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/furutaka.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + FURUTAKA + +inherit + + JAPANESE_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Furutaka" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 1 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = True + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/fuso.e b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/fuso.e new file mode 100644 index 0000000..c45ecc0 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/fuso.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + FUSO + +inherit + + JAPANESE_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Fuso" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 4 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 4 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 4 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/haguro.e b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/haguro.e new file mode 100644 index 0000000..d5f77d5 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/haguro.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + HAGURO + +inherit + + JAPANESE_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Haguro" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 2 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = True + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/haruna.e b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/haruna.e new file mode 100644 index 0000000..63ff27b --- /dev/null +++ b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/haruna.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + HARUNA + +inherit + + JAPANESE_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Haruna" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 4 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 3 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 6 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/hiei.e b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/hiei.e new file mode 100644 index 0000000..4aa1f62 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/hiei.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + HIEI + +inherit + + JAPANESE_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Hiei" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 4 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 3 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 6 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/hiryu.e b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/hiryu.e new file mode 100644 index 0000000..d7ff23e --- /dev/null +++ b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/hiryu.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + HIRYU + +inherit + + JAPANESE_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Hiryu" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 3 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 1 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 8 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = True + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/hiyo.e b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/hiyo.e new file mode 100644 index 0000000..c211a98 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/hiyo.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + HIYO + +inherit + + JAPANESE_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Hiyo" + -- The name of this unit. + + arrival_turn: INTEGER = 3 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 3 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 2 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 4 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = True + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/hosho.e b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/hosho.e new file mode 100644 index 0000000..6a9ae4d --- /dev/null +++ b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/hosho.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + HOSHO + +inherit + + JAPANESE_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Hosho" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 1 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 0 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 1 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 4 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = True + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/hyuga.e b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/hyuga.e new file mode 100644 index 0000000..2b81798 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/hyuga.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + HYUGA + +inherit + + JAPANESE_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Hyuga" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 4 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 4 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 4 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/ise.e b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/ise.e new file mode 100644 index 0000000..3913c3a --- /dev/null +++ b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/ise.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + ISE + +inherit + + JAPANESE_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Ise" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 4 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 4 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 4 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/junyo.e b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/junyo.e new file mode 100644 index 0000000..b05af64 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/junyo.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + Junyo + +inherit + + JAPANESE_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Junyo" + -- The name of this unit. + + arrival_turn: INTEGER = 2 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 3 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 2 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 4 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = True + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/kaga.e b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/kaga.e new file mode 100644 index 0000000..cec6374 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/kaga.e @@ -0,0 +1,45 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + KAGA + +inherit + + JAPANESE_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Kaga" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 4 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 4 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 5 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = True + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end + diff --git a/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/kako.e b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/kako.e new file mode 100644 index 0000000..ef81253 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/kako.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + KAKO + +inherit + + JAPANESE_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Kako" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 1 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = True + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/katsuragi.e b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/katsuragi.e new file mode 100644 index 0000000..c35f868 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/katsuragi.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + KATSURAGI + +inherit + + JAPANESE_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Katsuragi" + -- The name of this unit. + + arrival_turn: INTEGER = 9 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 3 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 2 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/kinugasa.e b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/kinugasa.e new file mode 100644 index 0000000..ab9c615 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/kinugasa.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + KINUGASA + +inherit + + JAPANESE_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Kinugasa" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 1 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = True + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/kirishima.e b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/kirishima.e new file mode 100644 index 0000000..3ee48c0 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/kirishima.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + KIRISHIMA + +inherit + + JAPANESE_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Kirishima" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 4 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 3 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 6 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/kitakami.e b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/kitakami.e new file mode 100644 index 0000000..185296a --- /dev/null +++ b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/kitakami.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + KITAKAMI + +inherit + + JAPANESE_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Kitakami" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 1 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = True + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/kongo.e b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/kongo.e new file mode 100644 index 0000000..481cc13 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/kongo.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + KONGO + +inherit + + JAPANESE_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Kongo" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 4 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 3 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 6 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/kumano.e b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/kumano.e new file mode 100644 index 0000000..2b916a4 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/kumano.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + KUMANO + +inherit + + JAPANESE_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Kumano" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 1 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 8 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = True + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/maya.e b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/maya.e new file mode 100644 index 0000000..cba8cb4 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/maya.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + MAYA + +inherit + + JAPANESE_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Maya" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 2 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = True + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/mikuma.e b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/mikuma.e new file mode 100644 index 0000000..90d121f --- /dev/null +++ b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/mikuma.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + MIKUMA + +inherit + + JAPANESE_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Mikuma" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 1 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 8 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = True + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/mogami.e b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/mogami.e new file mode 100644 index 0000000..6289f89 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/mogami.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + MOGAMI + +inherit + + JAPANESE_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Mogami" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 1 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 8 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = True + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/musashi.e b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/musashi.e new file mode 100644 index 0000000..1e713f0 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/musashi.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + MUSASHI + +inherit + + JAPANESE_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Musashi" + -- The name of this unit. + + arrival_turn: INTEGER = 5 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 6 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 9 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 5 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/mutsu.e b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/mutsu.e new file mode 100644 index 0000000..11bf097 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/mutsu.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + MUTSU + +inherit + + JAPANESE_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Mutsu" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 5 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 5 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 4 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/myoko.e b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/myoko.e new file mode 100644 index 0000000..62fd62c --- /dev/null +++ b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/myoko.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + MYOKO + +inherit + + JAPANESE_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Myoko" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 2 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = True + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/nachi.e b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/nachi.e new file mode 100644 index 0000000..8ca9e23 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/nachi.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + NACHI + +inherit + + JAPANESE_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Nachi" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 2 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = True + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/nagato.e b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/nagato.e new file mode 100644 index 0000000..b15941a --- /dev/null +++ b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/nagato.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + Nagato + +inherit + + JAPANESE_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Nagato" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 5 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 5 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 4 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/oi.e b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/oi.e new file mode 100644 index 0000000..56a33fd --- /dev/null +++ b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/oi.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + OI + +inherit + + JAPANESE_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Oi" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 0 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = True + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/ryuho.e b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/ryuho.e new file mode 100644 index 0000000..bbfcea4 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/ryuho.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + RYUHO + +inherit + + JAPANESE_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Ryuho" + -- The name of this unit. + + arrival_turn: INTEGER = 7 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 1 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 0 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 0 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 4 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/ryujo.e b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/ryujo.e new file mode 100644 index 0000000..907cb3d --- /dev/null +++ b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/ryujo.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + RYUJO + +inherit + + JAPANESE_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Ryujo" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 2 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 0 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 1 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 5 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = True + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/shinano.e b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/shinano.e new file mode 100644 index 0000000..4eda68d --- /dev/null +++ b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/shinano.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + SHINANO + +inherit + + JAPANESE_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Shinano" + -- The name of this unit. + + arrival_turn: INTEGER = 9 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 3 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 9 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 5 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/shoho.e b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/shoho.e new file mode 100644 index 0000000..9350d99 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/shoho.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + SHOHO + +inherit + + JAPANESE_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Shoho" + -- The name of this unit. + + arrival_turn: INTEGER = 2 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 2 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 0 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 0 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 5 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = True + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/shokaku.e b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/shokaku.e new file mode 100644 index 0000000..ce7435f --- /dev/null +++ b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/shokaku.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + SHOKAKU + +inherit + + JAPANESE_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Shokaku" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 4 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 3 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 8 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = True + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/soryu.e b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/soryu.e new file mode 100644 index 0000000..8a9e52c --- /dev/null +++ b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/soryu.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + SORYU + +inherit + + JAPANESE_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Soryu" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 3 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 2 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 8 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = True + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/suzuya.e b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/suzuya.e new file mode 100644 index 0000000..488b814 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/suzuya.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + SUZUYA + +inherit + + JAPANESE_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Suzuya" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 1 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 8 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = True + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/taiho.e b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/taiho.e new file mode 100644 index 0000000..b596748 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/taiho.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + TAIHO + +inherit + + JAPANESE_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Taiho" + -- The name of this unit. + + arrival_turn: INTEGER = 7 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 3 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 0 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 3 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/takao.e b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/takao.e new file mode 100644 index 0000000..a606e6a --- /dev/null +++ b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/takao.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + TAKAO + +inherit + + JAPANESE_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Takao" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 2 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = True + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/tone.e b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/tone.e new file mode 100644 index 0000000..94c1888 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/tone.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + TONE + +inherit + + JAPANESE_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Tone" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 1 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 8 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = True + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/unryu.e b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/unryu.e new file mode 100644 index 0000000..d007509 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/unryu.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + UNRYU + +inherit + + JAPANESE_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Unryu" + -- The name of this unit. + + arrival_turn: INTEGER = 8 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 3 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 2 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 7 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/yamashiro.e b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/yamashiro.e new file mode 100644 index 0000000..da102f5 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/yamashiro.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + YAMASHIRO + +inherit + + JAPANESE_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Yamashiro" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 4 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 4 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 4 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/yamato.e b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/yamato.e new file mode 100644 index 0000000..16ed350 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/yamato.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + YAMATO + +inherit + + JAPANESE_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Yamato" + -- The name of this unit. + + arrival_turn: INTEGER = 3 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 6 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 9 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 5 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = False + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/zuiho.e b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/zuiho.e new file mode 100644 index 0000000..4f38d59 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/zuiho.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + ZUIHO + +inherit + + JAPANESE_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Zuiho" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 2 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 0 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 0 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 5 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = True + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/zuikaku.e b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/zuikaku.e new file mode 100644 index 0000000..ab2a1fe --- /dev/null +++ b/jj_vitp/Implementation/classes/units/japanese_units/japanese_ships/zuikaku.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding ship in game. + ]" + author: "Jimmy J. Johnson" + +class + ZUIKAKU + +inherit + + JAPANESE_SHIP + +create + make + +feature -- Access + + name: STRING_8 = "Zuikaku" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 4 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 3 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 8 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = True + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/japanese_units/japanese_submarines/i_boat.e b/jj_vitp/Implementation/classes/units/japanese_units/japanese_submarines/i_boat.e new file mode 100644 index 0000000..21ca9e3 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/japanese_units/japanese_submarines/i_boat.e @@ -0,0 +1,44 @@ +note + description: "[ + Represents the corresponding submarine in VITP. + ]" + author: "Jimmy J. Johnson" + +class + I_BOAT + +inherit + + JAPANESE_SUBMARINE + +create + make + +feature -- Access + + name: STRING_8 = "I Boat" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 0 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 9 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = True + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +end diff --git a/jj_vitp/Implementation/classes/units/japanese_units/japanese_submarines/i_boat_removal.e b/jj_vitp/Implementation/classes/units/japanese_units/japanese_submarines/i_boat_removal.e new file mode 100644 index 0000000..9183d46 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/japanese_units/japanese_submarines/i_boat_removal.e @@ -0,0 +1,66 @@ +note + description: "[ + Dummy {SUBMARINE} used to draw widgets for the removal of + the Japanese I-Boat on turn 7 on the Japanese Order + of Appearance Chart. + ]" + author: "Jimmy J. Johnson" + date: "11/11/23" + copyright: "Copyright (c) 2023, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +class + I_BOAT_REMOVAL + +inherit + + JAPANESE_SUBMARINE + redefine + make + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: like game) + -- Initialize attributes of Current + do + PRECURSOR {JAPANESE_SUBMARINE} (a_game) + location := game.still_in_box + end + +feature -- Access + + name: STRING_8 = "I Boat" + -- The name of this unit. + + arrival_turn: INTEGER = 1 + -- Turn on which this unit enters the game. + + airstrike_factor: INTEGER = 0 + -- The initial number of dice the unit rolls when attacking + -- during a "day action". + + gunnery_factor: INTEGER = 1 + -- The initial value for the number of dice the unit rolls + -- when attacking during a "night action". + + defense_factor: INTEGER = 0 + -- The number of damage points a unit can have without sinking. + -- (This is doubled when the unit is in port.) + + speed_factor: INTEGER = 9 + -- The initial "speed" of the unit. + + attack_bonus: BOOLEAN = True + -- The initial setting saying if a unit can add one to each die roll. + -- If the unit is a carrier this applies only to the airstrike factor. + +invariant + + never_used: location = game.still_in_box + +end diff --git a/jj_vitp/Implementation/classes/units/ship.e b/jj_vitp/Implementation/classes/units/ship.e new file mode 100644 index 0000000..e977299 --- /dev/null +++ b/jj_vitp/Implementation/classes/units/ship.e @@ -0,0 +1,164 @@ +note + description: "[ + Representation of a ship in VITP. + ]" + author: "Jimmy J. Johnson" + +deferred class + SHIP + +inherit + + ATTACK_UNIT + redefine + is_bottomed, + internal_is_movable + end + +feature -- Status report + + is_sunk: BOOLEAN + -- Has this ship been sunk? + do + Result := (is_at_sea and damage > defense_factor) or + (not is_at_sea and damage > 2 * defense_factor) + end + + is_bottomed: BOOLEAN + -- Is this ship in port with too much damage to sail? + do + Result := is_in_port and damage <= 2 * defense_factor + end + +feature -- Basic operations + + return_to_port (a_port: PORT) + require +-- is_return_allowed: is_at_sea and then a_port.controller = nationality and then +-- (location.adjoins (a_port) or else a_port.is_major) + do + location := a_port + end + + repair + -- Do repairs on the ship + require +-- is_in_port: location.is_port + port_has_repair_capability: + do + + end + + set_patrolling + -- Make Current [and other `task_force' units] a patrol force + require + can_patrol: is_patrollable + do + from task_force.start + until task_force.is_after + loop + if attached {SHIP} task_force.item as s and then s.is_patrollable then + s.internal_set_raiding (false) + end + task_force.forth + end + is_raiding := False + ensure + is_patrolling: is_patrolling + end + + set_raiding + -- Make Current [and other `task_force' units] a raid force + require + can_raid: is_raidable + do + from task_force.start + until task_force.is_after + loop + if attached {SHIP} task_force.item as s and then s.is_raidable then + s.internal_set_raiding (true) + end + task_force.forth + end + is_raiding := true + ensure + is_raiding: is_raiding + end + +feature -- Status report + + is_patrolling: BOOLEAN + -- Is this unit a patroller (as opposed to a raider)? + do + Result := not is_raiding + end + + is_raiding: BOOLEAN + -- Is this unit a raider? + + is_patrollable: BOOLEAN = True + -- Can this unit be a patroller for area control purposes? + + is_raidable: BOOLEAN + -- Can this unit be a raider? + +feature -- Query + + is_incompatible_position (a_position: VITP_POSITION): BOOLEAN + -- Is `a_position' located on a unit with which Current is NOT + -- allowed to `join_force' (e.g. on a submarine or an enemy)? + local + tf: TASK_FORCE + u_list: VITP_TABLE [ATTACK_UNIT] + au: ATTACK_UNIT + do + if not is_in_game then + Result := false +-- elseif i_boat.contains_position (a_position) or f_boat.contains_position (a_position) then +-- Result := true + else + if nationality = game.japanese then + u_list := game.allied_attack_units + else + u_list := game.japanese_attack_units + end + from u_list.start + until u_list.after or else Result + loop + au := u_list.item_for_iteration + Result := au.is_in_game and then au.contains_position (a_position) + u_list.forth + end + end + -- Temp for testing + Result := false + end + +feature {SHIP} -- Implementation + + internal_set_raiding (a_value: BOOLEAN) + -- Used by `set_patrolling' and `set_raiding' to change + -- status of a single unit in Current's `task_force' + do + is_raiding := a_value + end + +feature {NONE} -- Implmentation + + internal_is_movable: BOOLEAN + -- Can Current (not the `task_force') move at this time? + local + sop: VITP_SEQUENCE_OF_PLAY + do + sop :=game.sequence_of_play + Result := Precursor {ATTACK_UNIT} + -- Account for turn-1 ships that can't move. + if Result and then sop.turn = 1 and sop.is_allied_player then + -- Only some allied ships can move on turn 1 + Result := (Current = game.de_ruyter or Current = game.exeter or + Current = game.houston or Current = game.australia or + Current = game.canberra) + end + end + +end diff --git a/jj_vitp/Implementation/classes/units/submarine.e b/jj_vitp/Implementation/classes/units/submarine.e new file mode 100644 index 0000000..20e8b4d --- /dev/null +++ b/jj_vitp/Implementation/classes/units/submarine.e @@ -0,0 +1,157 @@ +note + description: "[ + Representation of a submarine in VITP. + ]" + author: "Jimmy J. Johnson" + +deferred class + SUBMARINE + +inherit + + ATTACK_UNIT + redefine + patrol_distance, + raid_distance, +-- arrival_position, + join_force, -- inapplicable + leave_force, -- inapplicable + internal_is_movable + end + +feature -- Access + + patrol_distance: INTEGER = 1000 + -- How may sea areas can Current move through as patroller? + -- Just set to a very large number. + + raid_distance: INTEGER = 1000 + -- How may sea areas can Current move through as raider? + -- Just set to a very large number. + +-- arrival_position: like position +-- -- The location (latitude/longitude-like coordinates) where Current +-- -- will enter the game. Redefine to make it enter at its own position. +-- do +-- if nationality = game.japanese then +-- Result := [200, 50] +-- else +-- Result := [750, 600] +-- end +-- end + + patrollable_sea_areas: LINKED_SET [SEA_AREA] + -- A list containing each {SEA_AREA} which Current can patrol + -- from its `home_port' at this point in the game + do + create Result.make + end + + raidable_sea_areas: LINKED_SET [SEA_AREA] + -- A list containing each {SEA_AREA} which Current can raid + -- from its `home_port' at this point in the game + do + create Result.make + from game.sea_areas.start + until game.sea_areas.after + loop + Result.extend (game.sea_areas.item_for_iteration) + game.sea_areas.forth + end + end + +feature -- Status report + + is_sunk: BOOLEAN = False + -- Submarines do not take fire + + is_patrollable: BOOLEAN = False + -- Can this unit be a patroller for area control purposes? + + is_raidable: BOOLEAN = False + -- Can this unit be a raider? + + is_patrolling: BOOLEAN = False + -- Is this unit a patroller (as opposed to a raider)? + -- Air units a `is_patrollable' but don't move as patrollers. + + is_raiding: BOOLEAN = False + -- Is this unit a raider? + +feature -- Basic operations + + return_to_port (a_port: PORT) + require +-- is_return_allowed: is_at_sea and then a_port.controller = nationality and then +-- (location.adjoins (a_port) or else a_port.is_major) + do + location := a_port + end + + repair + -- Do repairs on the ship + require +-- is_in_port: location.is_port + port_has_repair_capability: + do + + end + + join_force (a_other: ATTACK_UNIT) + -- Join forces with `a_other' as a single `task_force' + do + check + do_not_call: false then + -- Because inapplicable to {AIR_UNIT} + end + end + + leave_force + -- Remove Current from the `task_force' to which it belongs, but only + -- if there are other ships in the force, and put it in its own. + do + check + do_not_call: false then + -- Because inapplicable to {AIR_UNIT} + end + end + +feature -- Query + + is_incompatible_position (a_position: VITP_POSITION): BOOLEAN + -- Is `a_position' located on a unit with which Current is NOT + -- allowed to `join_force' (e.g. on a submarine or an enemy)? + local + u_list: VITP_TABLE [ATTACK_UNIT] + au: ATTACK_UNIT + do + if not is_in_game then + Result := false + else + u_list := game.all_attack_units + from u_list.start + until u_list.after or else Result + loop + au := u_list.item_for_iteration + Result := au.contains_position (a_position) + u_list.forth + end + end + -- Temp for testing + Result := false + end + +feature {NONE} -- Implementation + + internal_is_movable: BOOLEAN + -- Can Current (not the `task_force') move at this time? + local + sop: VITP_SEQUENCE_OF_PLAY + do + sop := game.sequence_of_play + Result := not is_sunk and + (sop.is_moving_submarine_step) -- or else +-- sop.is_returning_submarine_to_port_step) + end + +end diff --git a/jj_vitp/Implementation/classes/units/task_force.e b/jj_vitp/Implementation/classes/units/task_force.e new file mode 100644 index 0000000..10783bb --- /dev/null +++ b/jj_vitp/Implementation/classes/units/task_force.e @@ -0,0 +1,183 @@ +note + description: "[ + A list of ships that move as a unit. + ]" + author: "Jimmy J. Johnson" + +class + TASK_FORCE + +inherit + + VITP_ITEM + undefine + copy, + is_equal + redefine + make + end + + JJ_SORTABLE_SET [ATTACK_UNIT] + rename + make as list_make, + extend as list_extend -- to strengthen the precondition + export +-- {TASK_FORCE} +-- all +-- {ATTACK_UNIT} + + {ANY} + item, +-- count, +-- i_th, +-- first, + start, + is_after, + forth +-- has, +-- prunable, +-- is_empty + redefine +-- default_create, +-- make, +-- make_filled, +-- prune, + new_filled_list + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: like game) + -- Initialize Current + do + list_make (10) + Precursor {VITP_ITEM} (a_game) +-- column_count := 1 +-- name := "No name" + end + +-- make (a_count: INTEGER) +-- -- Initialize Current to initial capacity of `a_count' +-- do +-- item_make ("No name", Nobody) +-- Precursor {JJ_SORTABLE_SET} (a_count) +-- column_count := 1 +-- end + +-- make_filled (a_count: INTEGER) +-- -- Initialize Current to initial capacity of `a_count' +-- do +-- item_make ("No name", Nobody) +-- Precursor (a_count) +-- column_count := 1 +-- end + + new_filled_list (n: INTEGER): like Current + -- Redefined to get past void-safety issues, but `duplicate' + -- from {ARRAYED_LIST} will not work + do + check + do_not_call: False then + -- because redefined to appease void safety + end + end + +feature -- Access + + name: STRING_8 + -- The displayed name for this widget + do + Result := "{" + generating_type + "} " + if count >= 1 then + Result := Result + i_th (1).name + else + Result := Result + " not named" + end + end + +feature {ATTACK_UNIT} -- Basic operations + + extend (a_unit: like item) + -- Ensure `a_unit' is included in the force + require + unit_exists: a_unit /= Void + correct_nationality: not is_empty implies not a_unit.is_opposed (first) + same_location: not is_empty implies a_unit.location = first.location + local + old_f: detachable like item + do + is_stable := false + if not is_empty and then not (a_unit.location = first.location) then + a_unit.set_location (first.location) + end + list_extend (a_unit) +-- name := " Task Force " + id.out + " " + first.name + nationality := first.nationality + is_stable := true + end + + assemble + -- Bring all units close together. + -- Graphical elements will be stacked + do + is_dispersed := false + + end + + disperse + -- Spread units out. + -- Graphical elements will be tiled + do + is_dispersed := true + end + +feature -- Status report + + is_dispersed: BOOLEAN + -- Are the units spread apart? + -- Changed with `disperse' and `assemble'. + + is_stable: BOOLEAN + -- Used by invariant for referential integrity checking + +feature {NONE} -- Implementation + +-- column_count: INTEGER +-- -- The number of columns in which to arrange the force + +-- counter: INTEGER_32_REF +-- -- Used to create a unique name when a group is created +-- once +-- create Result +-- end + +-- has_invalid_unit: BOOLEAN +-- -- Does Current contain a unit that does not refer back to Current +-- -- For invariant checking +-- -- Should be False +-- require +-- call_only_when_stable: is_stable +-- local +-- u: ATTACK_UNIT +-- c: CURSOR +-- do +-- c := cursor +-- from start +-- until after or Result +-- loop +-- u := item +-- Result := u.is_stable implies u.task_force /= Current +-- forth +-- end +-- go_to (c) +-- end + +invariant + +-- column_count_big_enough: column_count >= 1 +-- column_count_small_enough: column_count <= count + +end diff --git a/jj_vitp/Implementation/classes/vitp_game.e b/jj_vitp/Implementation/classes/vitp_game.e new file mode 100644 index 0000000..217cd46 --- /dev/null +++ b/jj_vitp/Implementation/classes/vitp_game.e @@ -0,0 +1,169 @@ +note + description: "[ + A Victory in the Pacific game. + This class provides access to the game constants and game + logic (i.e. is a particular action allowed for a unit?) + ]" + author: "Jimmy J. Johnson" + +class + VITP_GAME + +inherit + + POSITION_CONSTANTS + undefine + copy, + is_equal + redefine + default_create + end + + NATIONALITY_CONSTANTS + undefine + copy, + is_equal + redefine + default_create + end + + ATTACK_UNIT_ATTRIBUTES + undefine + copy, + is_equal + redefine + default_create + end + + PORT_ATTRIBUTES + undefine + copy, + is_equal + redefine + default_create + end + + SEA_AREA_ATTRIBUTES + undefine + copy, + is_equal + redefine + default_create + end + + OTHER_ATTRIBUTES + undefine + copy, + is_equal + redefine + default_create + end + + VITP_ITEM + redefine + default_create + end + +create + default_create + +feature {NONE} -- Initialization + + default_create + -- Initialize Current + local + i, j: INTEGER + c: VITP_CELL + do + create command_manager + uuid := (create {UUID_GENERATOR}).generate_uuid + name := uuid.out + create c.make (0,0) + create grid.make_filled (c, cell_row_count, cell_column_count) + from i := 1 + until i >= cell_row_count + loop + from j := 1 + until j > cell_column_count + loop + create c.make ([i, j]) + grid.put (c, i, j) + j := j + 1 + end + i := i + 1 + end + game := Current + end + +feature -- Access + + command_manager: COMMAND_MANAGER + -- Keeps track of actions for undo/redo functionality + + name: STRING_8 + -- The displayed name for this widget + + uuid: UUID + -- Identifier for Current + + sequence_of_play: VITP_SEQUENCE_OF_PLAY + -- Sequence of play for this game defining the order + -- of actions. + attribute + create Result.make (Current) + end + + locations: VITP_TABLE [LOCATION] + -- Convenience feature containing all the board locations. + -- Defined as attibute so all locations can be persisted. + attribute + create Result.make (100) + Result.merge (sea_areas) + Result.merge (major_ports) + Result.merge (minor_ports) + end + +feature -- Basic operations + + +feature -- Query + + can_patrol (a_unit: ATTACK_UNIT): BOOLEAN + -- Can `a_unit' be moved as a patroller? + -- ... or can `a_unit' become a raider? + do +io.put_string (generating_type.name + ".can_patrol: fix me! %N") +-- Result := phase = Movement_phase and +-- stage = Patrolling and +-- ((player = Japanese_player and then a_unit.nationality = Japanese) or else +-- (player = Allied_player and then is_allied_nationality (a_unit.nationality))) +-- if Result and turn = 1 and player = Allied_player then +-- Result := a_unit = De_ruyter or +-- a_unit = Exeter or +-- a_unit = Houston or +-- a_unit = Australia or +-- a_unit = Canberra +-- end + end + +feature -- Query + + cell (a_x, a_y: INTEGER_32): VITP_CELL + -- The cell indexed by `a_x' and `a_y' into which a + -- unit may be placed + require + x_big_enough: a_x >= 1 + x_small_enough: a_x <= cell_row_count + y_big_enough: a_y >= 1 + y_small_enough: a_y <= cell_column_count + do + Result := grid.item (a_x, a_y) + end + +feature {NONE} -- Implementation + + grid: ARRAY2 [VITP_CELL] + -- A two-dimensional array of coordinate-position cells + -- which can possibly hold one {ATTACK_UNIT} + +end diff --git a/jj_vitp/Implementation/classes/vitp_item.e b/jj_vitp/Implementation/classes/vitp_item.e new file mode 100644 index 0000000..c80cee0 --- /dev/null +++ b/jj_vitp/Implementation/classes/vitp_item.e @@ -0,0 +1,95 @@ +note + description: "[ + Root class for all entities in the VITP game. + ]" + author: "Jimmy J. Johnson" + +deferred class + VITP_ITEM + +inherit + + IDENTIFIED + + HASHABLE + undefine + copy, + is_equal + end + +feature {NONE} -- Initialization + + make (a_game: like game) + -- Initialize Current + do + game := a_game + nationality := {NATIONALITY_CONSTANTS}.nobody + end + +feature -- Access + + game: VITP_GAME + -- The game in which this item belongs. + + name: STRING_8 + -- The displayed name for this widget + deferred + end + + nationality: like game.japanese + -- Nation to which this game piece belongs + + hash_code: INTEGER + -- Code based on `name' and the `uuid' of the `vitp' game. + -- See `make'. + do +-- Result := (vitp.uuid.out + name).hash_code + Result := object_id + end + +feature -- Element change + + set_nationality (a_nationality: like nationality) + -- Change the `nationality' of Current. + do + nationality := a_nationality + end + +feature -- Status report + + is_japanese: BOOLEAN + -- Is the location controled by the japanese? + do + Result := nationality = game.japanese + end + + is_allied: BOOLEAN + -- Is the entity controled by the allies? + do + Result := game.is_allied_nationality (nationality) + end + + is_uncontrolled: BOOLEAN + -- Is the entity uncontroled? + do + Result := not (is_allied or is_japanese) + end + +feature -- Query + +-- is_equal (other: like Current): BOOLEAN +-- -- Is `other' attached to an object considered +-- -- equal to current object? +-- -- There should only be one widget for each named VITP_ITEM, so +-- -- this and descendant can use the `name' to determine equality. +-- do +-- Result := vitp = other.vitp and name ~ other.name +-- end + + is_opposed (other: VITP_ITEM): BOOLEAN + -- Is Current and other on different sides (e.g. Allies or Japanese)? + do + Result := (is_allied and not other.is_allied) or (not is_allied and other.is_allied) + end + +end diff --git a/jj_vitp/Implementation/classes/vitp_sequence_of_play.e b/jj_vitp/Implementation/classes/vitp_sequence_of_play.e new file mode 100644 index 0000000..008120e --- /dev/null +++ b/jj_vitp/Implementation/classes/vitp_sequence_of_play.e @@ -0,0 +1,373 @@ +note + description: "[ + The Sequence of Play (SOP) in s {VITP_GAME}, + which describes the order of steps in the game and tracks + which `player' is currently performing actions. + ]" + author: "Jimmy J. Johnson" + date: "11/11/23" + copyright: "Copyright (c) 2023, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +class + VITP_SEQUENCE_OF_PLAY + +inherit + + VITP_ITEM +-- GAME_STEP +-- rename +-- start as step_start, +-- forth as step_forth, +-- is_before as step_is_before, +-- is_after as step_is_after, +-- is_off as step_is_off, +-- index as step_index + redefine + make +-- player + end + +create + make, + make_nine_turn + +feature {NONE} -- Initialization + + make (a_game: VITP_GAME) + -- Create an instance of an eight-turn game. + -- (2nd edition rules) + do + Precursor {VITP_ITEM} (a_game) + create turns.make (0) + create path.make (0) + turns.extend (create {TURN_1}.make (game)) + turns.extend (create {TURN_2}.make (game)) +-- extend (create {VITP_TURN}.make (game)) +-- extend (create {VITP_TURN}.make (game)) +-- extend (create {VITP_TURN}.make (game)) +-- extend (create {VITP_TURN}.make (game)) +-- extend (create {VITP_TURN}.make (game)) +-- extend (create {VITP_TURN}.make (game)) + ensure then + correct_turn_count: turns.count = 2 + end + + make_nine_turn (a_game: VITP_GAME) + -- Create an instance of a nine-turn game. + do + make (a_game) + turns.extend (create {TURN_9}.make (game)) + end + +feature -- Access + + name: STRING = "Sequence of Play" + -- The displayable name of Current + + turn: INTEGER + -- The number of the current turn in the sequence of play + do + -- Search through the `path' for a {TURN_STEP} + from path.start + until Result > 0 or else path.after + loop + if attached {VITP_TURN} path.item.node as t then + Result := t.turn + end + path.forth + end + Result := Result.max (1) + end + + player: like {NATIONALITY_CONSTANTS}.Japanese + -- The player to which this step applies + do + Result := step.player + end + + full_name: STRING + -- The string representation of this step. + require + not_off: not is_off + do + Result := "" + from path.start + until path.exhausted + loop + Result := Result + path.item.node.name + if not path.islast then + Result := Result + ", " + end + path.forth + end + end + +feature -- Status report + + is_japanese_player: BOOLEAN + -- Convenience feature + do + Result := step.player = {NATIONALITY_CONSTANTS}.Japanese + end + + is_allied_player: BOOLEAN + -- Convenience feature + do + Result := step.player = {NATIONALITY_CONSTANTS}.Allied + end + + is_step_executable: BOOLEAN + -- Does the current step have a command that can be + -- automatically executed? + do + Result := step.is_executable + end + + is_step_completed: BOOLEAN + -- Is the current step in a state that allow the player + -- to advance to the next step? + do + Result := step.is_completed + end + + is_reinforcement_step: BOOLEAN + -- Is the current step on placing reinforcements? + do + Result := attached {JAPANESE_REINFORCEMENT_STEP} step or + attached {ALLIED_REINFORCEMENT_STEP} step + end + + is_patrolling_step: BOOLEAN + -- Is the game at the patrolling step + do + Result := attached {JAPANESE_MOVE_PATROLLERS_STEP} step or + attached {ALLIED_MOVE_PATROLLERS_STEP} step + end + + is_raiding_step: BOOLEAN + -- Is the game at the raiding step + do + io.put_string (generating_type.name + ".is_raiding_step: fix me %N") + end + + is_moving_amphibious_step: BOOLEAN + -- Is the game at a place where amphibious units can move? + do +io.put_string (generating_type.name + ".is_moving_amphibious_step: fix me! %N") + + end + + is_moving_submarine_step: BOOLEAN + -- Is the game at a step where the submarine can move? + do +io.put_string (generating_type.name + ".is_moving_submarine_step: fix me! %N") + + end + +feature -- Basic operations + + execute_step_actions + -- Perform the actions associated with the current step + require + is_step_executable: is_step_executable + do + step.execute + end + +feature -- Status report + + is_before: BOOLEAN + -- Is the cursor before Current? + do + Result := path.is_empty + end + + is_after: BOOLEAN + -- Is the cursor after Current? + do + Result := step = turns.last and then step.index > step.count + end + + is_off: BOOLEAN + -- Is the cursor before of after? + do + Result := is_before or is_after + end + +feature -- Basic operations + + show_path + -- Display the current path for testing + do + from path.start + until path.exhausted + loop + print (path.item.node.name + ":" + path.item.index.out) + if not path.after then + print (", ") + end + path.forth + end + print ("%N") + end + + start + -- Move to the first sub-`step' or `is_after' + local + tab: VITP_TABLE [ATTACK_UNIT] + u: ATTACK_UNIT + do + from turns.start + until turns.after + loop + turns.item.start + turns.forth + end + turns.start + path.wipe_out + path.extend (turns.first, 1) + if can_go_down then + go_down + end + -- Put the game in correct starting state + tab := game.all_attack_units + from tab.start + until tab.after + loop + u := tab.item_for_iteration + if u.nationality = {NATIONALITY_CONSTANTS}.Japanese then + u.set_location (game.Japanese_oa_chart) + else + if u.arrival_turn = 1 then + u.set_location (game.Allied_starting_forces_chart) + else + u.set_location (game.Allied_oa_chart) + end + end + tab.forth + end + end + + forth + -- Move to the next step + require + not_after: not is_after + local + i: INTEGER + n: like step + do + i := index + 1 + n := step + + n.forth + if n.is_after then + if can_go_up then + go_up + end + elseif can_go_down then + go_down + elseif can_go_right then + go_right + else + check + is_after: is_after + -- Because no other direction to go + end + end + end + + +feature {NONE} -- Implementation + + turns: ARRAYED_LIST [VITP_TURN] + -- The turns in Current + + path: ARRAYED_LIST [TUPLE [node: like step; index: like index]] + -- The node-and-index TUPLES through which this `iterator' has taken + -- to reach a leaf. + + step: GAME_STEP + -- The node at the end of the current `path' + do + Result := path.last.node + end + + index: INTEGER + -- The index into the array in `node' to get the next node + -- (i.e. the index of the edge out of `node') + do + Result := path.last.index + end + + go_up + -- + require + not_after: not is_after + can_go_up: can_go_up + local + n: like step + i: INTEGER + do + path.remove_i_th (path.count) + path.go_i_th (path.count) +-- path.replace ([step, index + 1]) + -- Next line keeps the `step's internal `index' correct + step.forth + path.replace ([step, step.index]) + if can_go_down then + go_down + else + go_up + end + end + + go_down + -- + require + not_after: not is_after + can_go_down: can_go_down + local + n: like step + do + -- Keep going down to leaf + from + until step.is_empty + loop + n := step.i_th (index) + path.extend ([n, 1]) + if can_go_down then + go_down + end + end + end + + go_right + -- + require + not_after: not is_after + can_go_right: can_go_right + do +print ("go_right ") + end + + can_go_up: BOOLEAN + -- Is there a parent node to move up to? + do + Result := step.has_parent + end + + can_go_down: BOOLEAN + -- Is there a child node at the `index' of current `node' + local + s: GAME_STEP + do +-- Result := index <= step.count +-- s := path.last.node +-- Result := not (s.is_off or s.item.is_completed) + Result := not step.is_off + end + + can_go_right: BOOLEAN + -- Is there a sibling branch to the right of this index? +end diff --git a/jj_vitp/Implementation/support/allied_move_patrollers_step.e b/jj_vitp/Implementation/support/allied_move_patrollers_step.e new file mode 100644 index 0000000..6c9b7bd --- /dev/null +++ b/jj_vitp/Implementation/support/allied_move_patrollers_step.e @@ -0,0 +1,65 @@ +note + description: "[ + The Sequence of Play step in VITP in which the Allied + player moves patrollers, flips raiders, and repairs ships. + ]" + author: "Jimmy J. Johnson" + date: "11/11/23" + copyright: "Copyright (c) 2023, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +class + ALLIED_MOVE_PATROLLERS_STEP + +inherit + + GAME_STEP + redefine + player, + is_completed, + execute + end + +create + make + +feature -- Access + + name: STRING + -- Displayable name of Current step + do + Result := "Move Patrollers, Flip Raiders, Repair Ships" + end + + player: like {NATIONALITY_CONSTANTS}.Japanese + -- The player to which this step applies + do + Result := {NATIONALITY_CONSTANTS}.Allied + end + +feature -- Status report + + is_completed: BOOLEAN + -- Are all actions to be accomplished in this + -- state finished, allowing `advance' to the + -- next state? + local + sop: VITP_SEQUENCE_OF_PLAY + p: like {NATIONALITY_CONSTANTS}.japanese + i: INTEGER + tab: VITP_TABLE [ATTACK_UNIT] + u: ATTACK_UNIT + do + print (generating_type.out + ".is_completed: fix m!! %N") + + end + +feature -- Basic operations + + execute + -- Perform automatic actions such as moving reinforments + -- from the SOP Chart to the game board. + do + end + +end diff --git a/jj_vitp/Implementation/support/allied_reinforcement_step.e b/jj_vitp/Implementation/support/allied_reinforcement_step.e new file mode 100644 index 0000000..262697a --- /dev/null +++ b/jj_vitp/Implementation/support/allied_reinforcement_step.e @@ -0,0 +1,96 @@ +note + description: "[ + The Sequence of Play step in VITP in which the Allied + player can place his arriving and returning + units. + ]" + author: "Jimmy J. Johnson" + date: "11/11/23" + copyright: "Copyright (c) 2023, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +class + ALLIED_REINFORCEMENT_STEP + +inherit + + CONCURRENT_STEP + redefine + player, + is_completed, + is_executable, + execute + end + +create + make + +feature -- Access + + name: STRING + -- Displayable name of Current step + do + Result := "Allied Placing Arriving and Returning Units" + end + + player: like {NATIONALITY_CONSTANTS}.Japanese + -- The player to which this step applies + do + Result := {NATIONALITY_CONSTANTS}.allied + end + +feature -- Status report + + is_completed: BOOLEAN + -- Are all actions to be accomplished in this + -- state finished, allowing `advance' to the + -- next state? + local + sop: VITP_SEQUENCE_OF_PLAY + p: like {NATIONALITY_CONSTANTS}.japanese + i: INTEGER + tab: VITP_TABLE [ATTACK_UNIT] + u: ATTACK_UNIT + do + print (generating_type.out + ".is_completed: fix m!! %N") + + sop := game.sequence_of_play + tab := game.turn_x_units (sop.turn, game.allied_attack_units) + Result := true + from tab.start + until not Result or else tab.after + loop + u := tab.item_for_iteration + Result := u.is_in_game + tab.forth + end + end + + is_executable: BOOLEAN + -- Does this step have actions that can be + -- automatically executed? + local + t: INTEGER + do + t := game.sequence_of_play.turn + Result := not game.arriving_allied_submarines (t).is_empty or else + not game.arriving_allied_amphibious_units (t).is_empty or else + not game.arriving_allied_air_units (t).is_empty or else + not game.arriving_allied_ships (t).is_empty + + + io.put_string (generating_type.name + ".is_executable: " + Result.out + "%N") + end + +feature -- Basic_operations + + execute + -- Move remaining Allied reinforcements to the board + local + com: REINFORCE_COMMAND + do + create com.make (game) + game.command_manager.add_command (com) + end + +end diff --git a/jj_vitp/Implementation/support/alternating_step.e b/jj_vitp/Implementation/support/alternating_step.e new file mode 100644 index 0000000..1b91cc2 --- /dev/null +++ b/jj_vitp/Implementation/support/alternating_step.e @@ -0,0 +1,35 @@ +note + description: "[ + A step in the {SEQUENCE_OF_PLAY} in {VITP_GAME} + in which the active player is placing his arriving units. + ]" + author: "Jimmy J. Johnson" + date: "11/11/23" + copyright: "Copyright (c) 2023, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +deferred class + ALTERNATING_STEP + +inherit + + TRAVERSABLE_STEP + rename + forth as step_forth + end + +feature -- Basic operations + + forth + -- Change players until `is_completed' + do + if game.sequence_of_play.is_japanese_player then +-- game.sequence_of_play.set_player ({NATIONALITY_CONSTANTS}.Allied) + steps.start + else +-- game.sequence_of_play.set_player ({NATIONALITY_CONSTANTS}.Japanese) + steps.start + end + end + +end diff --git a/jj_vitp/Implementation/support/atomic_step.e b/jj_vitp/Implementation/support/atomic_step.e new file mode 100644 index 0000000..d56bd2c --- /dev/null +++ b/jj_vitp/Implementation/support/atomic_step.e @@ -0,0 +1,65 @@ +note + description: "[ + The Sequence of Play step in VITP which can not. + have any sub-steps + ]" + author: "Jimmy J. Johnson" + date: "11/11/23" + copyright: "Copyright (c) 2023, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +deferred class + ATOMIC_STEP + +inherit + + GAME_STEP + redefine + leaf_step, + is_empty, + has, + extend + end + +feature -- Access + + leaf_step: GAME_STEP + -- The uncompleted state of the bottom (i.e. a leaf) of + -- the tree, or Current if all sub_states `is_complete'. + do + Result := Current + ensure then + definition: Result = Current + end + +feature -- Status report + + is_empty: BOOLEAN = True + -- Does Current not contain any sub-states? + -- Always true + +feature -- Query + + has (a_state: GAME_STEP): BOOLEAN + -- Does Current contain `a_state' as a sub-state? + -- Always false. + do + Result := False + end + +feature {NONE} -- Basic operations + + extend (a_state: GAME_STEP) + -- Make `a_state' a child state of Current + do + check + do_not_call: false then + -- because Current must remain empty + end + end + +invariant + + is_empty: is_empty + +end diff --git a/jj_vitp/Implementation/support/cell_distance_tuple.e b/jj_vitp/Implementation/support/cell_distance_tuple.e new file mode 100644 index 0000000..4cbb28f --- /dev/null +++ b/jj_vitp/Implementation/support/cell_distance_tuple.e @@ -0,0 +1,49 @@ +note + description: "[ + A {VITP_CELL} paired with a hammond distance, used by + {VITP_GRID} to order cells based on their distances from + a particulation location. + ]" + author: "Jimmy J. Johnson" + date: "4/11/24" + copyright: "Copyright (c) 2024, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +class + CELL_DISTANCE_TUPLE + +inherit + + COMPARABLE + +create + make + +feature {NONE} -- Initialization + + make (a_cell: VITP_CELL; a_distance: INTEGER) + -- Create an instance + do + cell := a_cell + distance := a_distance + end + +feature -- Access + + cell: VITP_CELL + -- The cell + + distance: INTEGER + -- The hammond distance (computed elsewhere) to which + -- a `cell' is paired. + +feature -- Comparison + + is_less alias "<" (other: like Current): BOOLEAN + -- Is current object less than `other'? + do + Result := (distance < other.distance) or else + (distance = other.distance and cell.position < other.cell.position) + end + +end diff --git a/jj_vitp/Implementation/support/combat_step.e b/jj_vitp/Implementation/support/combat_step.e new file mode 100644 index 0000000..70ef9f9 --- /dev/null +++ b/jj_vitp/Implementation/support/combat_step.e @@ -0,0 +1,45 @@ +note + description: "[ + A {SEQUENTIAL_GAME_STEP} representing the combat + phase of {VITP_GAME}. + ]" + author: "Jimmy J. Johnson" + date: "11/11/23" + copyright: "Copyright (c) 2023, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +class + COMBAT_STEP + +inherit + + SEQUENTIAL_GAME_STEP + redefine + make + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: VITP_GAME) + -- Create an instance + do + Precursor {SEQUENTIAL_GAME_STEP} (a_game) +-- extend (create {SELECT_ACTION_TYPE_STEP}.make (a_game)) +-- extend (create {FIRING_STEP}.make (a_game)) +-- extend (create {SUBMARINE_FIRING_STEP}.make (a_game)) +-- extend (create {RETREAT_PURSUIT_STEP}.make (a_game)) +-- extend (create {LAND_AMPHIBIOUS_STEP}.make (a_game)) + end + +feature -- Access + + name: STRING + -- Displayable name of Current step + do + Result := "Combat" + end + +end diff --git a/jj_vitp/Implementation/support/concurrent_step.e b/jj_vitp/Implementation/support/concurrent_step.e new file mode 100644 index 0000000..46aa333 --- /dev/null +++ b/jj_vitp/Implementation/support/concurrent_step.e @@ -0,0 +1,38 @@ +note + description: "[ + + ]" + author: "Jimmy J. Johnson" + date: "11/11/21" + copyright: "Copyright (c) 2021, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +deferred class + CONCURRENT_STEP + +inherit + + GAME_STEP + redefine + is_completed + end + +feature {NONE} -- Initalization + +feature -- Status report + + is_completed: BOOLEAN + -- Are all actions to be accomplished in this + -- state finished, allowing `advance' to the + -- next state? + do + from steps.start + until steps.after + loop + Result := steps.item.is_completed + steps.forth + end + ensure then + end + +end diff --git a/jj_vitp/Implementation/support/constants/game_constants.e b/jj_vitp/Implementation/support/constants/game_constants.e new file mode 100644 index 0000000..3683795 --- /dev/null +++ b/jj_vitp/Implementation/support/constants/game_constants.e @@ -0,0 +1,31 @@ +note + description: "[ + The items belonging to a {VITP_GAME} + ]" + author: "Jimmy J. Johnson" + +class + GAME_CONSTANTS + +feature -- Game + +-- Vitp_game: VITP_GAME +-- -- The one game in the system +-- once +-- create Result +-- end + +-- Sop: GAME_SEQUENCE +-- -- The one sequence of play counter +-- once +-- create Result +-- end + + Random: RANDOM + -- Random number generator + once + create Result.make + end + +end + diff --git a/jj_vitp/Implementation/support/constants/position_constants.e b/jj_vitp/Implementation/support/constants/position_constants.e new file mode 100644 index 0000000..ad6a962 --- /dev/null +++ b/jj_vitp/Implementation/support/constants/position_constants.e @@ -0,0 +1,118 @@ +note + description: "[ + Constants related to {VITP_POSITION}, such as the positionn of the + corner of the board, the distance beyond the board that is usable, + etc. These numbers were taken by direct mesurement of the VITP + board, measuring in millimeters from the top left corner. + + Some constants are also used to build the grid/cells used for + positioning of widgets on the {BOARD_VIEW}. + + _____________ + | + | **** + | * + | * + |____________ + + + ]" + author: "Jimmy J. Johnson" + +class + POSITION_CONSTANTS + +create + default_create + +feature -- Constants + + playing_area_left: INTEGER = 0 + -- The left-most longitude at which a unit may be placed + + playing_area_top: INTEGER = 0 + -- The top-most latitude at which a unit may be placed + + margin_size: INTEGER = 100 + -- The size in millimeters of the area around the game board in + -- which attack units can be repositioned. (As with the real + -- game, some areas are too small to hold all the tiles that + -- a player may wish to place in that area, so a boarder allows + -- units to be placed beside/off the board.) + + board_left: INTEGER + -- The longitude of the left edge of the board + once + Result := playing_area_left + margin_size + end + + board_top: INTEGER + -- The latitude of the top edge of the board + once + Result := playing_area_top + margin_size + end + + board_width: INTEGER = 702 + -- The width of the board in millimeters + + board_height: INTEGER = 554 + -- The height of the board in mellimeters + + board_right: INTEGER + -- The longitude of the right edge of the board. + once + Result := board_left + board_width + end + + board_bottom: INTEGER + -- The latitude of the bottom edge of the board. + once + Result := board_top + board_height + end + + playing_area_right: INTEGER + -- The right-most longitude at which a unit may be placed + once + Result := board_right + margin_size + end + + playing_area_bottom: INTEGER + -- The bottom-most latitude at which a unit may be placed + + playing_area_width: INTEGER + -- The total width of the playing surface + once + Result := playing_area_right - playing_area_left + end + + playing_area_height: INTEGER + -- The total height of the playing surface + once + Result := playing_area_bottom - playing_area_top + end + +feature + + cell_size: INTEGER = 20 + -- The logical size of a cell in which to position a unit + + cell_row_count: INTEGER + -- Number of cells from the playing area's top to bottom + once + Result := playing_area_height // cell_size + end + + cell_column_count: INTEGER_32 + -- Number of cells from the playing area's left to right + once + Result := playing_area_width // cell_size + end + + playing_area_ratio: REAL_64 + -- Ratio of the `playing_area_width' to the [possibly] + -- scaled size of the `playing_area_width'. Default = one + do + Result := 1.0 + end + +end diff --git a/jj_vitp/Implementation/support/constants/text_constants.e b/jj_vitp/Implementation/support/constants/text_constants.e new file mode 100644 index 0000000..32b5182 --- /dev/null +++ b/jj_vitp/Implementation/support/constants/text_constants.e @@ -0,0 +1,54 @@ +note + description: "[ + Definitions of all the text-only widgets (such as the text in + each of the sea areas) for VITP. + ]" + author: "Jimmy J. Johnson" + date: "$Date: 2013-04-25 18:08:32 -0400 (Thu, 25 Apr 2013) $" + revision: "$Revision: 33 $" + +class + TEXT_CONSTANTS + +inherit + + BOARD_CONSTANTS + +feature -- Access + + Sea_area_texts: VITP_TABLE [SEA_AREA_TEXT] + -- All the text in the game indexed by the name of the + -- {VITP_ITEM} to which it is associated + once + create Result.make (13) + Result.extend (Aleutian_islands_text, Aleutian_islands_text.name) + Result.extend (Bay_of_bengal_text, Bay_of_bengal_text.name) + Result.extend (Central_pacific_ocean_text, Central_pacific_ocean_text.name) + Result.extend (Coral_sea_text, Coral_sea_text.name) + Result.extend (Hawaiian_islands_text, Hawaiian_islands_text.name) + Result.extend (Indian_ocean_text, Indian_ocean_text.name) + Result.extend (Indonesia_text, Indonesia_text.name) + Result.extend (Japanese_islands_text, Japanese_islands_text.name) + Result.extend (Marianas_islands_text, Marianas_islands_text.name) + Result.extend (North_pacific_ocean_text, North_pacific_ocean_text.name) + Result.extend (South_pacific_ocean_text, South_pacific_ocean_text.name) + Result.extend (US_mandate_text, US_mandate_text.name) + end + +feature -- Sea area text + + Aleutian_islands_text: SEA_AREA_TEXT once create Result.make (Aleutian_islands) end + Bay_of_bengal_text: SEA_AREA_TEXT once create Result.make (Bay_of_bengal) end + Central_pacific_ocean_text: SEA_AREA_TEXT once create Result.make (Central_pacific_ocean) end + Coral_sea_text: SEA_AREA_TEXT once create Result.make (Coral_sea) end + Hawaiian_islands_text: SEA_AREA_TEXT once create Result.make (Hawaiian_islands) end + Indian_ocean_text: SEA_AREA_TEXT once create Result.make (Indian_ocean) end + Indonesia_text: SEA_AREA_TEXT once create Result.make (Indonesia) end + Japanese_islands_text: SEA_AREA_TEXT once create Result.make (Japanese_islands) end + Marianas_islands_text: SEA_AREA_TEXT once create Result.make (Marianas_islands) end + Marshall_islands_text: SEA_AREA_TEXT once create Result.make (Marshall_islands) end + North_pacific_ocean_text: SEA_AREA_TEXT once create Result.make (North_pacific_ocean) end + South_pacific_ocean_text: SEA_AREA_TEXT once create Result.make (South_pacific_ocean) end + US_mandate_text: SEA_AREA_TEXT once create Result.make (US_mandate) end + +end diff --git a/jj_vitp/Implementation/support/end_of_turn_step.e b/jj_vitp/Implementation/support/end_of_turn_step.e new file mode 100644 index 0000000..8f8e02e --- /dev/null +++ b/jj_vitp/Implementation/support/end_of_turn_step.e @@ -0,0 +1,56 @@ +note + description: "[ + A step in the {SEQUENCE_OF_PLAY} in {VITP_GAME} + in which base and sea-area conrol is figured, score is + tallied, any remaining amphibous units land, and all + units return to base. + ]" + author: "Jimmy J. Johnson" + date: "11/11/23" + copyright: "Copyright (c) 2023, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +class + END_OF_TURN_STEP + +inherit + + GAME_STEP + redefine + make, + is_completed + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: VITP_GAME) + -- Create an instance + do + create steps.make (0) + game := a_game + -- add end-of-turn steps + end + +feature -- Access + + name: STRING + -- Displayable name of Current step + do + Result := "End of Turn" + end + +feature -- Status report + + is_completed: BOOLEAN + -- Are all actions to be accomplished in this + -- state finished, allowing `advance' to the + -- next state? + do + print (generating_type.out + " fix m!! %N") + Result := True + end + +end diff --git a/jj_vitp/Implementation/support/game_graph.e b/jj_vitp/Implementation/support/game_graph.e new file mode 100644 index 0000000..0f6afa0 --- /dev/null +++ b/jj_vitp/Implementation/support/game_graph.e @@ -0,0 +1,15 @@ +note + description: "[ + An adjacency graph describing the connections between + the locations in VITP + ]" + author: "Jimmy J. Johnson" + +class + GAME_GRAPH + +feature {NONE} -- Implementation + + array: ARRAY2 [INTEGER] + +end diff --git a/jj_vitp/Implementation/support/game_step.e b/jj_vitp/Implementation/support/game_step.e new file mode 100644 index 0000000..40e568b --- /dev/null +++ b/jj_vitp/Implementation/support/game_step.e @@ -0,0 +1,328 @@ +note + description: "[ + Top abstraction describing a point in the sequence of + play (SOP) in {VITP_GAME}, possibly containing sub-steps to be + to be visited in order by {VITP_SEQUENCE_OF_PLAY}. This class + describes a tree [and tree nodes] and the `iterator', of + type {VITP_SEQEUENCE_OF_PLAY} iterates over that tree. + ]" + author: "Jimmy J. Johnson" + + +deferred class + GAME_STEP + +feature {NONE} -- Initialization + + make (a_game: VITP_GAME) + -- Create an instance + do + create steps.make (0) + game := a_game + is_sequential := true + ensure + game_assigned: game = a_game + end + +feature -- Access + + name: STRING + -- The name of this state + deferred + end + + game: VITP_GAME + -- The game in which this state applies. + + player: like {NATIONALITY_CONSTANTS}.Japanese + -- The player to which this step applies + do + Result := {NATIONALITY_CONSTANTS}.either + end + + iterator: VITP_SEQUENCE_OF_PLAY + -- A new iterator for traversing Current and + -- any sub-steps. + -- Note: `start' and `forth' from this class traverse + -- the sub-steps of Current only; the tree of steps is + -- traversed by the `iterator'. + do + Create Result.make (game) + end + + parent: GAME_STEP + -- The parent step that holds this step + -- Only one parent allowed. (See `extend' and `set_parent'.) +-- require +-- has_parent: has_parent + do + if attached parent_imp as p then + Result := p + else + Result := Current + end + ensure + no_parent_implication: not has_parent implies Result = Current + has_parent_implication: has_parent implies Result /= Current + end + + leaf_step: GAME_STEP + -- The uncompleted step of the bottom (i.e. a leaf) of + -- the tree, or Current if all sub-states `is_complete'. + do + if steps.before or steps.after then + Result := Current + else + Result := steps.item.leaf_step + end + ensure + is_before_implication: steps.before implies Result = Current + is_after_implication: steps.after implies Result = Current + implication: not (steps.after or steps.before) implies Result = steps.item.leaf_step + end + +feature -- Status report + + is_empty: BOOLEAN + -- Does Current not contain any sub-states? + do + Result := steps.is_empty + end + + is_sequential: BOOLEAN + -- Should the `iterator' visit sub-steps in order? + + is_concurrent: BOOLEAN + -- Should the `iterator' visit sub-steps at the same time? + + is_alternating: BOOLEAN + -- Should the `iterator' visit sub-steps by alternating + -- between the Japanese `player' and the Allied `player'? + + is_choice: BOOLEAN + -- Should the `iterator' visit at least one sub-step + +-- is_optional: BOOLEAN +-- -- Should the `iterator' visit + +feature -- Query + + has_parent: BOOLEAN + -- Does Current have a parent step? + do + Result := attached parent_imp + end + + has (a_step: GAME_STEP): BOOLEAN + -- Does Current contain `a_step' as a sub-`steps'? + do + Result := steps.has (a_step) + end + +feature -- Basic operations + + show + -- Display Current for testing + do + recursive_show (0) + end + + recursive_show (a_depth: INTEGER) + -- Used by show to indent base on level in tree + local + i: INTEGER + c: ARRAYED_LIST_CURSOR + do + from i := 1 + until i > a_depth + loop + print (" ") + i := i + 1 + end + print ("{" + generating_type.name + "} " + name + "%N") + if not steps.is_empty then + c := steps.cursor + from steps.start + until steps.after + loop + steps.item.recursive_show (a_depth + 1) + steps.forth + end + steps.go_to (c) + end + end + + extend (a_step: GAME_STEP) + -- Make `a_step' a sub-`step' of Current + require + not_current: a_step /= Current + only_current_as_parent: not a_step.has_parent or else + a_step.parent = Current + not_already_in_Current: not has (a_step) + do + steps.extend (a_step) + if not a_step.has_parent then + a_step.set_parent (Current) + else + check + correct_parent: a_step.parent = Current + -- because of precondition + end + end + ensure + has_step: has (a_step) + correct_parent: a_step.parent = Current + end + +feature -- Cursor movement + + start + -- Move to the first sub-step or `is_after' for Current + -- and all sub-steps recursively. + + do + -- Recursively call start on all sub-steps + from steps.start + until steps.after + loop + steps.item.start + steps.forth + end + -- Set the cursor for Current's `steps' array + if is_empty then + steps.finish + check + is_before: is_before + -- because {ARRAYED_LIST}.finish implies "before_if_empty" + end + else + steps.start + check + at_start: index = 1 + -- because {ARRAYED_LIST}.start implies "at_first" + end + end + ensure + is_empty_implication: is_empty implies is_before + not_empty_implication: not is_empty implies index = 1 + end + + forth + -- Move to the next sub-step of Current + -- Note: `start' and `forth' from this class traverse + -- the sub-steps of Current only; the tree of steps is + -- traversed by the `iterator'. + require + not_after: not is_after +-- is_traversable: is_traversable + do + steps.forth + end + + index: INTEGER + -- The index of the pointer to the current sub-step + do + Result := steps.index + end + + is_after: BOOLEAN + -- Is the cursor past this step's last sub-step? + do + Result := steps.after + end + + is_before: BOOLEAN + -- Is the cursor before this step's first sub-step? + do + Result := steps.before + end + + is_off: BOOLEAN + -- Is the cursor `is_after' or `is_before'? + do + Result := steps.off + end + + is_completed: BOOLEAN + -- Are all actions to be accomplished in this + -- step finished? + do +-- if is_empty then +-- Result := true +-- else + Result := not is_empty and then steps.last.is_completed +-- end + ensure then +-- definition: Result = is_empty or else +-- (not is_empty and then steps.last.is_completed) + end + + is_executable: BOOLEAN + -- Does this step have actions that can be + -- automatically executed? + do + end + + execute + -- Perform automatic actions such as moving reinforcements + -- from the SOP Chart to the game board. + require + is_executable: is_executable + do + end + +-- is_traversable: BOOLEAN +-- -- Can the cursor move to the next step in Curren? +-- do +-- Result := is_completed +-- end + +feature {GAME_STEP} -- Implementation + + set_parent (a_step: GAME_STEP) + -- Set `parent' + require + not_current: a_step /= Current + not_has_parent: not has_parent + do + parent_imp := a_step + ensure + has_parent: has_parent + correct_parent: parent = a_step + end + +feature {VITP_SEQUENCE_OF_PLAY} + + count: INTEGER + -- The number of `steps' in Current + do + Result := steps.count + end + + i_th (a_index: INTEGER): GAME_STEP + -- The `i_th' step in Current + require + valid_index: steps.valid_cursor_index (a_index) + do + Result := steps.i_th (a_index) + end + + go_i_th (a_index: INTEGER) + -- Go to `a_index'th step + require + valid_index: steps.valid_cursor_index (a_index) + do + steps.go_i_th (a_index) + end + + steps: ARRAYED_LIST [GAME_STEP] + -- Sub-steps of Current + +feature {NONE} -- Implementation + + parent_imp: detachable GAME_STEP + -- The parent step, if any, containing Current + +invariant + +end diff --git a/jj_vitp/Implementation/support/japanese_move_patrollers_step.e b/jj_vitp/Implementation/support/japanese_move_patrollers_step.e new file mode 100644 index 0000000..2807f60 --- /dev/null +++ b/jj_vitp/Implementation/support/japanese_move_patrollers_step.e @@ -0,0 +1,56 @@ +note + description: "[ + The Sequence of Play step in VITP in which the Japanese + player moves patrollers, flips raiders, and repairs ships. + ]" + author: "Jimmy J. Johnson" + date: "11/11/23" + copyright: "Copyright (c) 2023, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +class + JAPANESE_MOVE_PATROLLERS_STEP + +inherit + + GAME_STEP + redefine + player, + is_completed + end + +create + make + +feature -- Access + + name: STRING + -- Displayable name of Current step + do + Result := "Move Patrollers, Flip Raiders, Repair Ships" + end + + player: like {NATIONALITY_CONSTANTS}.Japanese + -- The player to which this step applies + do + Result := {NATIONALITY_CONSTANTS}.japanese + end + +feature -- Status report + + is_completed: BOOLEAN + -- Are all actions to be accomplished in this + -- state finished, allowing `advance' to the + -- next state? + local + sop: VITP_SEQUENCE_OF_PLAY + p: like {NATIONALITY_CONSTANTS}.japanese + i: INTEGER + tab: VITP_TABLE [ATTACK_UNIT] + u: ATTACK_UNIT + do + print (generating_type.out + ".is_completed: fix m!! %N") + + end + +end diff --git a/jj_vitp/Implementation/support/japanese_reinforcement_step.e b/jj_vitp/Implementation/support/japanese_reinforcement_step.e new file mode 100644 index 0000000..1006576 --- /dev/null +++ b/jj_vitp/Implementation/support/japanese_reinforcement_step.e @@ -0,0 +1,92 @@ +note + description: "[ + The Sequence of Play step in VITP in which the Japanese + player moves his arriving and returning units to the + game board. + ]" + author: "Jimmy J. Johnson" + date: "11/11/23" + copyright: "Copyright (c) 2023, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +class + JAPANESE_REINFORCEMENT_STEP + +inherit + + GAME_STEP + redefine + player, + is_completed, + is_executable, + execute + end + +create + make + +feature -- Access + + name: STRING + -- Displayable name of Current step + do + Result := "Japanese Placing Arriving and Returning Units" + end + + player: like {NATIONALITY_CONSTANTS}.Japanese + -- The player to which this step applies + do + Result := {NATIONALITY_CONSTANTS}.japanese + end + +feature -- Status report + + is_completed: BOOLEAN + -- Are all actions to be accomplished in this + -- state finished, allowing `advance' to the + -- next state? + local + sop: VITP_SEQUENCE_OF_PLAY + p: like {NATIONALITY_CONSTANTS}.japanese + i: INTEGER + tab: VITP_TABLE [ATTACK_UNIT] + u: ATTACK_UNIT + do + sop := game.sequence_of_play + tab := game.turn_x_units (sop.turn, game.japanese_attack_units) + Result := true + from tab.start + until not Result or else tab.after + loop + u := tab.item_for_iteration + Result := u.is_in_game + tab.forth + end + io.put_string (generating_type.name + ".is_completed: " + Result.out + "%N") + end + + is_executable: BOOLEAN + -- Does this step have actions that can be + -- automatically executed? + local + t: INTEGER + do + t := game.sequence_of_play.turn + Result := not game.arriving_japanese_submarines (t).is_empty or else + not game.arriving_japanese_amphibious_units (t).is_empty or else + not game.arriving_japanese_air_units (t).is_empty or else + not game.arriving_japanese_ships (t).is_empty + end + +feature -- Basic_operations + + execute + -- Move remaining Japanese reinforcements to the board + local + com: REINFORCE_COMMAND + do + create com.make (game) + game.command_manager.add_command (com) + end + +end diff --git a/jj_vitp/Implementation/support/move_amphibious_step.e b/jj_vitp/Implementation/support/move_amphibious_step.e new file mode 100644 index 0000000..f98900d --- /dev/null +++ b/jj_vitp/Implementation/support/move_amphibious_step.e @@ -0,0 +1,56 @@ +note + description: "[ + A step in the {SEQUENCE_OF_PLAY} in {VITP_GAME} + in which the active player is placing his arriving units. + ]" + author: "Jimmy J. Johnson" + date: "11/11/23" + copyright: "Copyright (c) 2023, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +class + MOVE_AMPHIBIOUS_STEP + +inherit + + GAME_STEP + redefine + make, + is_completed + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: VITP_GAME) + -- Create an instance + do + create steps.make (0) + game := a_game + -- Just represents a single action at a time + is_sequential := false + is_alternating := true + end + +feature -- Access + + name: STRING + -- Displayable name of Current step + do + Result := "Move Amphibious" + end + +feature -- Status report + + is_completed: BOOLEAN + -- Are all actions to be accomplished in this + -- state finished, allowing `advance' to the + -- next state? + do + print (generating_type.out + " fix m!! %N") + Result := True + end + +end diff --git a/jj_vitp/Implementation/support/move_patrollers_step.e b/jj_vitp/Implementation/support/move_patrollers_step.e new file mode 100644 index 0000000..8d0211c --- /dev/null +++ b/jj_vitp/Implementation/support/move_patrollers_step.e @@ -0,0 +1,66 @@ +note + description: "[ + A step in the {SEQUENCE_OF_PLAY} in {VITP_GAME} + in which the active player is moving his patrolles. + ]" + author: "Jimmy J. Johnson" + date: "11/11/23" + copyright: "Copyright (c) 2023, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +class + MOVE_PATROLLERS_STEP + +inherit + + GAME_STEP + redefine + make, + is_completed + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: VITP_GAME) + -- Create an instance + do + Precursor {GAME_STEP} (a_game) + create japanese_patrolling_step.make (a_game) + create allied_reinforcement_step.make (a_game) + extend (japanese_patrolling_step) + extend (allied_reinforcement_step) + end + +feature -- Access + + name: STRING + -- Displayable name of Current step + do + Result := "Move Patrollers" + end + +feature -- Status report + + is_completed: BOOLEAN + -- Are all actions to be accomplished in this + -- state finished, allowing `advance' to the + -- next state? + do + Result := japanese_patrolling_step.is_completed and + allied_reinforcement_step.is_completed + end + +feature {NONE} -- Implementation + + japanese_patrolling_step: JAPANESE_MOVE_PATROLLERS_STEP + -- Step where the Japanese player moves patrollers, flips + -- raiders, and repairs ships. + + allied_reinforcement_step: ALLIED_MOVE_PATROLLERS_STEP + -- Step where the Allied player moves patrollers, flips + -- raiders, and repairs ships. + +end diff --git a/jj_vitp/Implementation/support/move_raiders_step.e b/jj_vitp/Implementation/support/move_raiders_step.e new file mode 100644 index 0000000..2b3943e --- /dev/null +++ b/jj_vitp/Implementation/support/move_raiders_step.e @@ -0,0 +1,56 @@ +note + description: "[ + A step in the {SEQUENCE_OF_PLAY} in {VITP_GAME} + in which the active player is placing his arriving units. + ]" + author: "Jimmy J. Johnson" + date: "11/11/23" + copyright: "Copyright (c) 2023, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +class + MOVE_RAIDERS_STEP + +inherit + + GAME_STEP + redefine + make, + is_completed + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: VITP_GAME) + -- Create an instance + do + create steps.make (0) + game := a_game + -- Just represents a single action at a time + is_sequential := false + is_alternating := true + end + +feature -- Access + + name: STRING + -- Displayable name of Current step + do + Result := "Move Raiders" + end + +feature -- Status report + + is_completed: BOOLEAN + -- Are all actions to be accomplished in this + -- state finished, allowing `advance' to the + -- next state? + do + print (generating_type.out + " fix m!! %N") + Result := True + end + +end diff --git a/jj_vitp/Implementation/support/movement_step.e b/jj_vitp/Implementation/support/movement_step.e new file mode 100644 index 0000000..4e7c373 --- /dev/null +++ b/jj_vitp/Implementation/support/movement_step.e @@ -0,0 +1,46 @@ +note + description: "[ + The Sequence of Play step in VITP in which the players + move attack units to sea. + ]" + author: "Jimmy J. Johnson" + date: "11/11/23" + copyright: "Copyright (c) 2023, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +class + MOVEMENT_STEP + +inherit + + SEQUENTIAL_GAME_STEP + redefine + make + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: VITP_GAME) + -- Create an instance + do + Precursor {SEQUENTIAL_GAME_STEP} (a_game) + extend (create {MOVE_PATROLLERS_STEP}.make (a_game)) + extend (create {PLACE_LAND_BASED_AIR_STEP}.make (a_game)) + extend (create {MOVE_AMPHIBIOUS_STEP}.make (a_game)) + extend (create {MOVE_RAIDERS_STEP}.make (a_game)) + extend (create {PLACE_SUBMARINE_STEP}.make (a_game)) + end + +feature -- Access + + name: STRING + -- Displayable name of Current step + do + Result := "Moving Units to Sea" + end + + +end diff --git a/jj_vitp/Implementation/support/place_arriving_units_step.e b/jj_vitp/Implementation/support/place_arriving_units_step.e new file mode 100644 index 0000000..a974ba5 --- /dev/null +++ b/jj_vitp/Implementation/support/place_arriving_units_step.e @@ -0,0 +1,77 @@ +note + description: "[ + A step in the {SEQUENCE_OF_PLAY} in {VITP_GAME} + in which the active player is placing his arriving units. + ]" + author: "Jimmy J. Johnson" + date: "11/11/23" + copyright: "Copyright (c) 2023, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +class + PLACE_ARRIVING_UNITS_STEP + +inherit + + GAME_STEP + redefine + make, + is_completed + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: VITP_GAME) + -- Create an instance + do + create steps.make (0) + game := a_game + -- Just represents a single action at a time + is_sequential := false + is_alternating := true + end + +feature -- Access + + name: STRING + -- Displayable name of Current step + do + Result := "Place Arriving Units" + end + +feature -- Status report + + is_completed: BOOLEAN + -- Are all actions to be accomplished in this + -- state finished, allowing `advance' to the + -- next state? + local + sop: VITP_SEQUENCE_OF_PLAY + p: like {NATIONALITY_CONSTANTS}.japanese + i: INTEGER + tab: VITP_TABLE [ATTACK_UNIT] + u: ATTACK_UNIT + do + print (generating_type.out + ".is_completed: fix m!! %N") + Result := True + + sop := game.sequence_of_play + p := sop.player + i := sop.turn + if p = {NATIONALITY_CONSTANTS}.japanese then + tab := game.turn_x_units (i, game.japanese_ships) + else + tab := game.turn_x_units (i, game.allied_ships) + end + from tab.start + until tab.after + loop + u := tab.item_for_iteration + tab.forth + end + end + +end diff --git a/jj_vitp/Implementation/support/place_land_based_air_step.e b/jj_vitp/Implementation/support/place_land_based_air_step.e new file mode 100644 index 0000000..9b8995e --- /dev/null +++ b/jj_vitp/Implementation/support/place_land_based_air_step.e @@ -0,0 +1,57 @@ +note + description: "[ + The step in the {VITP_SEQUENCE_OF_PLAY} in {VITP_GAME} + in which the players alternate placing LBA units. + ]" + author: "Jimmy J. Johnson" + date: "11/11/23" + copyright: "Copyright (c) 2023, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + + +class + PLACE_LAND_BASED_AIR_STEP + +inherit + + GAME_STEP + redefine + make, + is_completed + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: VITP_GAME) + -- Create an instance + do + create steps.make (0) + game := a_game + -- Just represents a single action at a time + is_sequential := false + is_alternating := true + end + +feature -- Access + + name: STRING + -- Displayable name of Current step + do + Result := "Place LBA" + end + +feature -- Status report + + is_completed: BOOLEAN + -- Are all actions to be accomplished in this + -- state finished, allowing `advance' to the + -- next state? + do + print (generating_type.out + " fix m!! %N") + Result := True + end + +end diff --git a/jj_vitp/Implementation/support/place_returning_units_step.e b/jj_vitp/Implementation/support/place_returning_units_step.e new file mode 100644 index 0000000..374743b --- /dev/null +++ b/jj_vitp/Implementation/support/place_returning_units_step.e @@ -0,0 +1,56 @@ +note + description: "[ + A step in the {SEQUENCE_OF_PLAY} in {VITP_GAME} + in which the active player is placing his returning units. + ]" + author: "Jimmy J. Johnson" + date: "11/11/23" + copyright: "Copyright (c) 2023, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +class + PLACE_RETURNING_UNITS_STEP + +inherit + + GAME_STEP + redefine + make, + is_completed + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: VITP_GAME) + -- Create an instance + do + create steps.make (0) + game := a_game + -- Just represents a single action at a time + is_sequential := false + is_alternating := true + end + +feature -- Access + + name: STRING + -- Displayable name of Current step + do + Result := "Place Returning Units" + end + +feature -- Status report + + is_completed: BOOLEAN + -- Are all actions to be accomplished in this + -- state finished, allowing `advance' to the + -- next state? + do + print (generating_type.out + " fix m!! %N") + Result := True + end + +end diff --git a/jj_vitp/Implementation/support/place_submarine_step.e b/jj_vitp/Implementation/support/place_submarine_step.e new file mode 100644 index 0000000..599a140 --- /dev/null +++ b/jj_vitp/Implementation/support/place_submarine_step.e @@ -0,0 +1,56 @@ +note + description: "[ + A step in the {SEQUENCE_OF_PLAY} in {VITP_GAME} + in which the active player is placing his arriving units. + ]" + author: "Jimmy J. Johnson" + date: "11/11/23" + copyright: "Copyright (c) 2023, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +class + PLACE_SUBMARINE_STEP + +inherit + + GAME_STEP + redefine + make, + is_completed + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: VITP_GAME) + -- Create an instance + do + create steps.make (0) + game := a_game + -- Just represents a single action at a time + is_sequential := false + is_alternating := true + end + +feature -- Access + + name: STRING + -- Displayable name of Current step + do + Result := "Place Submarine" + end + +feature -- Status report + + is_completed: BOOLEAN + -- Are all actions to be accomplished in this + -- state finished, allowing `advance' to the + -- next state? + do + print (generating_type.out + " fix m!! %N") + Result := True + end + +end diff --git a/jj_vitp/Implementation/support/reinforcement_step.e b/jj_vitp/Implementation/support/reinforcement_step.e new file mode 100644 index 0000000..bcf5a4c --- /dev/null +++ b/jj_vitp/Implementation/support/reinforcement_step.e @@ -0,0 +1,73 @@ +note + description: "[ + The step in the {VITP_SEQUENCE_OF_PLAY} in {VITP_GAME} + in which the players place {ATTACK_UNITS} on the board. + ]" + author: "Jimmy J. Johnson" + date: "11/11/23" + copyright: "Copyright (c) 2023, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +class + REINFORCEMENT_STEP + +inherit + + GAME_STEP + redefine + make, + is_completed + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: VITP_GAME) + -- Create an instance + do + Precursor {GAME_STEP} (a_game) + create japanese_reinforcement_step.make (a_game) + create allied_reinforcement_step.make (a_game) + extend (japanese_reinforcement_step) + extend (allied_reinforcement_step) +-- create place_arriving_units_step.make (a_game) +-- create place_returning_units_step.make (a_game) +-- extend (place_arriving_units_step) +-- extend (place_returning_units_step) +-- is_sequential := true +-- is_concurrent := true +-- is_alternating := true + end + +feature -- Access + + name: STRING + -- Displayable name of Current step + do + Result := "Placing Reinforcements" + end + +feature -- Status report + + is_completed: BOOLEAN + -- Is this step completed for both players? + do + Result := japanese_reinforcement_step.is_completed and + allied_reinforcement_step.is_completed + end + +feature -- Basic operations + +feature {NONE} -- Implementation + + japanese_reinforcement_step: JAPANESE_REINFORCEMENT_STEP + -- Step where the Japanese player moves new and returning + -- units from the Sequence-of-Play Chart to the board. + + allied_reinforcement_step: ALLIED_REINFORCEMENT_STEP + -- Step where the Japanese player moves new and returning + -- units from the Sequence-of-Play Chart to the board. + +end diff --git a/jj_vitp/Implementation/support/sequence_of_play_cursor.e b/jj_vitp/Implementation/support/sequence_of_play_cursor.e new file mode 100644 index 0000000..a36e986 --- /dev/null +++ b/jj_vitp/Implementation/support/sequence_of_play_cursor.e @@ -0,0 +1,34 @@ +note + description: "[ + A {CURSOR} to remember the iteration position in the + {VITP_SEQUENCE_OF_PLAY}. + Simply a data structure to hold on to values + ]" + author: "Jimmy J. Johnson" + date: "11/11/23" + copyright: "Copyright (c) 2023, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +class + SEQUENCE_OF_PLAY_CURSOR + +create + make + +feature {NONE} -- Initialization + + make (a_path: like path; a_visited_nodes: like visited_nodes) + -- Create an instance + do + path := a_path + visited_nodes := a_visited_nodes + end + +feature -- Access + + path: LINKED_SET [GAME_STEP] + -- The saved `path' through + + visited_nodes: LINKED_SET [GAME_STEP] + +end diff --git a/jj_vitp/Implementation/support/sequential_game_step.e b/jj_vitp/Implementation/support/sequential_game_step.e new file mode 100644 index 0000000..581c026 --- /dev/null +++ b/jj_vitp/Implementation/support/sequential_game_step.e @@ -0,0 +1,22 @@ +note + description: "[ + A {GAME_STEP} possibly containing sub-steps to be + visited in order. This step `is_complete' when the + last sub-step `is_complete'. + ]" + author: "Jimmy J. Johnson" + date: "11/11/23" + copyright: "Copyright (c) 2021, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +deferred class + SEQUENTIAL_GAME_STEP + +inherit + + TRAVERSABLE_STEP + +feature -- Status report + + +end diff --git a/jj_vitp/Implementation/support/traversable_step.e b/jj_vitp/Implementation/support/traversable_step.e new file mode 100644 index 0000000..9b747a4 --- /dev/null +++ b/jj_vitp/Implementation/support/traversable_step.e @@ -0,0 +1,38 @@ +note + description: "[ + A {GAME_STEP} + ]" + author: "Jimmy J. Johnson" + date: "11/11/23" + copyright: "Copyright (c) 2021, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +deferred class + TRAVERSABLE_STEP + +inherit + + GAME_STEP + redefine + make + end + +feature {NONE} -- Initalization + + make (a_game: VITP_GAME) + -- Create an instance + do + Precursor {GAME_STEP} (a_game) + steps.start + check + is_after: steps.after + -- because of `start' on empty list + end + steps.back + check + is_before: steps.before + -- because of empty list + end + end + +end diff --git a/jj_vitp/Implementation/support/turn_1.e b/jj_vitp/Implementation/support/turn_1.e new file mode 100644 index 0000000..f6621b9 --- /dev/null +++ b/jj_vitp/Implementation/support/turn_1.e @@ -0,0 +1,42 @@ +note + description: "[ + Represents the first turn in VITP. This turn is + different from the subsequent turns. + ]" + author: "Jimmy J. Johnson" + date: "11/11/23" + copyright: "Copyright (c) 2023, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +class + TURN_1 + +inherit + + VITP_TURN + redefine + make + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: VITP_GAME) + -- Create an instance + do + Precursor {VITP_TURN} (a_game) + turn := 1 + extend (create {REINFORCEMENT_STEP}.make (a_game)) + end + +feature -- Access + + name: STRING + -- The displayable name of this step. + do + Result := "Turn 1" + end + +end diff --git a/jj_vitp/Implementation/support/turn_2.e b/jj_vitp/Implementation/support/turn_2.e new file mode 100644 index 0000000..6d94bb1 --- /dev/null +++ b/jj_vitp/Implementation/support/turn_2.e @@ -0,0 +1,40 @@ +note + description: "[ + The sequence of steps for turn 2 in VITP + ]" + author: "Jimmy J. Johnson" + date: "11/11/23" + copyright: "Copyright (c) 2023, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +class + TURN_2 + +inherit + + VITP_TURN + redefine + make + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: VITP_GAME) + -- Create an instance + do + Precursor {VITP_TURN} (a_game) + turn := 2 + end + +feature -- Access + + name: STRING + -- The displayable name of this step. + do + Result := "Turn 2" + end + +end diff --git a/jj_vitp/Implementation/support/turn_9.e b/jj_vitp/Implementation/support/turn_9.e new file mode 100644 index 0000000..e4a5dd5 --- /dev/null +++ b/jj_vitp/Implementation/support/turn_9.e @@ -0,0 +1,25 @@ +note + description: "[ + The sequence of steps for turn 9 in VITP + ]" + author: "Jimmy J. Johnson" + date: "11/11/23" + copyright: "Copyright (c) 2023, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +class + TURN_9 + +inherit + + VITP_TURN + +create + make + +feature -- Access + + name: STRING = "Turn 9" + -- The displayable name of this step. + +end diff --git a/jj_vitp/Implementation/support/vitp_cell.e b/jj_vitp/Implementation/support/vitp_cell.e new file mode 100644 index 0000000..adf8431 --- /dev/null +++ b/jj_vitp/Implementation/support/vitp_cell.e @@ -0,0 +1,79 @@ +note + description: "[ + A single cell contained in a {VITP_GRID}. + The cell is one location at which an {ATTACK_UNIT} may be + positioned. + ]" + author: "Jimmy J. Johnson" + date: "4/11/24" + copyright: "Copyright (c) 2024, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +class + VITP_CELL + +create + make + +feature {NONE} -- Initialization + + make (a_index: like index) + -- Create a cell at x/y coordinates in `a_index' + do + index := a_index + ensure + position_assigned: index = a_index + end + +feature -- Access + + index: TUPLE [x, y: INTEGER] + -- The location/row-column of this cell + + occupant: ATTACK_UNIT + -- The unit that is at the location represented by Current + require + is_occupied: is_occupied + do + check attached occupant_imp as u then + Result := u + end + end + +feature -- Element change + + occupy (a_unit: like occupant) + -- Place `a_unit' into Current + require + not_occupied: not is_occupied + do + occupant_imp := a_unit + ensure + is_occupied: is_occupied + correct_occupier: occupant = a_unit + end + + vacate + -- Remove any `occupier' from Current + do + occupant_imp := Void + ensure + not_occupied: not is_occupied + end + +feature -- Status report + + is_occupied: BOOLEAN + -- Is there a unit positioned in this cell? + do + Result := attached occupant_imp + ensure + definition: Result implies attached occupant_imp + end + +feature {NONE} -- Implementation + + occupant_imp: detachable like occupant + -- Implementation for `occupant' + +end diff --git a/jj_vitp/Implementation/support/vitp_grid.e b/jj_vitp/Implementation/support/vitp_grid.e new file mode 100644 index 0000000..6fb696c --- /dev/null +++ b/jj_vitp/Implementation/support/vitp_grid.e @@ -0,0 +1,92 @@ +note + description: "[ + This class represents a coordinate grid placed over the playing + area around a particular `location'. The grid contains cells + that an attack unit may occupy. A cell may belong to one or more + locations. Only one unit may occupy a cell at any given time. + + This class is used to place an {ATTACK_UNIT_WIDGET} in at a given + `location' without covering or overlapping some other widget at + that same location. + ]" + author: "Jimmy J. Johnson" + date: "4/11/24" + copyright: "Copyright (c) 2024, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + + +class + VITP_GRID + +feature {NONE} -- Initialization + + make (a_location: like location) + -- Set up a grid of cells around Current + do + create sorted_cells.make (0) + location := a_location + end + +feature -- Access + + location: LOCATION + -- The location to which Current is attached. + +feature -- Element change + + extend (a_cell: VITP_CELL) + -- Add `a_cell' to this grid + require + not_has_cell: not has (a_cell) + local + d: INTEGER + set: LINKED_SET [VITP_CELL] + do + d := manhattan_distance (a_cell) + if attached cell_table.item (d) as s then + set := s + else + create set + cell_table.extend (set, d) + end + check + not_in_set: not set.has (a_cell) + -- because of precondition + end + set.extend (a_cell) + ensure + has_cell: has (a_cell) + end + +feature -- Query + + has (a_cell: VITP_CELL): BOOLEAN + -- Does Current contain `a_cell' (i.e. is `a_cell', and + -- its position, associated with this grid's `location')? + local + d: INTEGER + do + d := manhattan_distance (a_cell) + Result := cell_table.has (d) and then + cell_table.definite_item (d).has (a_cell) + end + +feature {NONE} -- Implementation + + manhattan_distance (a_cell: VITP_CELL): INTEGER + -- The manhattan distance of `a_cell' from the position + -- of the `location' + local + lat, long: INTEGER + do + lat := location.position.latitude + long := location.position.longitude + Result := (lat - a_cell.latitude).abs + (long - a_cell.longitude).abs + end + + cell_table: HASH_TABLE [LINKED_SET [VITP_CELL], INTEGER] + -- Table of cells where each cell is in a list that is indexed + -- by the Manhattan_distance of that cell's `position' from the + -- from the `position' of `location' + +end diff --git a/jj_vitp/Implementation/support/vitp_none.e b/jj_vitp/Implementation/support/vitp_none.e new file mode 100644 index 0000000..68ec5af --- /dev/null +++ b/jj_vitp/Implementation/support/vitp_none.e @@ -0,0 +1,34 @@ +note + description: "[ + A desendent of {VITP_ITEM} that is used when a widget really does + not need to be associated with a game piece. + In other words, any {VITP_ITEM_WIDGET} created to associate with a VITP_NONE + will hash to the same list. This should be okay as the values from which + these widgets are built should never change. An example is the text in each + of the sea areas. + ]" + author: "Jimmy J. Johnson" + +class + VITP_NONE + +inherit + + VITP_ITEM + rename + make as vitp_item_make + redefine + default_create + end + +create + +feature {NONE} -- Initialization + + default_create + -- Create an instance whose name is "None" + do + vitp_item_make ("None") + end + +end diff --git a/jj_vitp/Implementation/support/vitp_position.e b/jj_vitp/Implementation/support/vitp_position.e new file mode 100644 index 0000000..58c67e9 --- /dev/null +++ b/jj_vitp/Implementation/support/vitp_position.e @@ -0,0 +1,72 @@ +note + description: "[ + Used by each {ATTACK_UNIT} to place it at some position on the board. + This is used for interfacing with a GUI. The position is stored as + a percentage of the size of the space in which a unit can move (i.e. + the size of a board). + ]" + author: "Jimmy J. Johnson" + +class + VITP_POSITION + +inherit + + POSITION_CONSTANTS + redefine + out + end + +create + default_create, + set_xy, + from_tuple + +convert + from_tuple ({TUPLE [lat: INTEGER_32; long: INTEGER_32]}) + +feature {NONE} -- Initialization + + from_tuple (a_position: TUPLE [long: INTEGER_32; lat: INTEGER_32]) + -- Set Current to `a_position' + do + longitude := a_position.long + latitude := a_position.lat + end + +feature -- Access + + longitude: INTEGER_32 + -- The position east or west of the logical center (0, 0) of the board. + + latitude: INTEGER_32 + -- The position north or south of the logical center (0,0) of the board. + + out: STRING + -- String representation of Current + do + Result := "(" + longitude.out + ", " + latitude.out + ")" + end + +feature -- Element change + + set_xy (a_x, a_y: INTEGER_32) + -- Set the value of x and y + require +-- x_big_enough: a_x >= Minimum_longitude +-- x_small_enough: a_x <= Maximum_longitude +-- y_big_enough: a_y >= Minimum_latitude +-- y_small_enough: a_y <= Maximum_latitude + do + longitude := a_x + latitude := a_y + end + +invariant + +-- longitude_big_enough: longitude >= Minimum_longitude +-- longitude_small_enough: longitude <= Maximum_longitude +-- latitude_big_enough: latitude >= Minimum_latitude +-- latitude_small_enough: latitude <= Maximum_latitude + +end diff --git a/jj_vitp/Implementation/support/vitp_table.e b/jj_vitp/Implementation/support/vitp_table.e new file mode 100644 index 0000000..46c3199 --- /dev/null +++ b/jj_vitp/Implementation/support/vitp_table.e @@ -0,0 +1,31 @@ +note + description: "[ + A HASH_TABLE holding items of type {VITP_ITEM} indexed by STRING. + ]" + author: "Jimmy J. Johnson" + +class + VITP_TABLE [G -> VITP_ITEM] + +inherit + + HASH_TABLE [G, STRING] + +create + make, + make_equal + +feature -- Access + + vitp_item (key: STRING): G + -- Item associated with `key'. + -- Should be present + require + has_key: has (key) + do + check attached item (key) as v then + Result := v + end + end + +end diff --git a/jj_vitp/Implementation/support/vitp_text.e b/jj_vitp/Implementation/support/vitp_text.e new file mode 100644 index 0000000..504a516 --- /dev/null +++ b/jj_vitp/Implementation/support/vitp_text.e @@ -0,0 +1,67 @@ +note + description: "[ + All(?) text in VITP is represented by this class. + This can then be associated with a widget. + ]" + author: "Jimmy J. Johnson" + +class + VITP_TEXT + +inherit + + VITP_ITEM + rename + make as vitp_item_make + redefine + hash_code + end + +create + make + +feature {NONE} -- Initialization + + make (a_item: like item) + -- Create text that is associated with `a_item' + require + item_exists: a_item /= Void + do + vitp_item_make (a_item.name) + item := a_item + end + +feature -- Access + + item: VITP_ITEM + -- The game item to which the Current text is associated + + name_text: STRING + -- The name of the `item' + do + Result := item.name + end + + suffix: STRING + -- This is added to the name of a VITP string so it can be created + -- with the object in which the string should be placed, using the + -- name of the object as the key (on creation). + -- When searching a hash table for the text you must add `suffix' to + -- the name. + do + Result := " text" + end + + hash_code: INTEGER + -- Code based on `name' with the string `suffix' added on + -- This prevents a collision with the text that is named the same as + -- the game object on which the text resides. + do + Result := (name + suffix).hash_code + end + +invariant + + item_exists: item /= Void + +end diff --git a/jj_vitp/Implementation/support/vitp_turn.e b/jj_vitp/Implementation/support/vitp_turn.e new file mode 100644 index 0000000..e6f0cbe --- /dev/null +++ b/jj_vitp/Implementation/support/vitp_turn.e @@ -0,0 +1,43 @@ +note + description: "[ + A {SEQUENTIAL_GAME_STEP} representing one of the + eight (or nine) turns in the {SEQUENCE_OF_PLAY} for + in the {VITP_GAME}. + ]" + author: "Jimmy J. Johnson" + +deferred class + VITP_TURN + +inherit + + GAME_STEP + redefine + make + end + +feature {NONE} -- Initialization + + make (a_game: VITP_GAME) + -- Create an instance + do + Precursor {GAME_STEP} (a_game) + extend (create {REINFORCEMENT_STEP}.make (a_game)) + extend (create {MOVEMENT_STEP}.make (a_game)) + extend (create {COMBAT_STEP}.make (a_game)) + extend (create {END_OF_TURN_STEP}.make (a_game)) + end + +feature -- Access + + turn: INTEGER + -- The number of this turn + +feature -- Status report + +feature -- Basic operations + +feature {NONE} -- Implementation + + +end diff --git a/jj_vitp/Implementation/vitp_implementation_tester.e b/jj_vitp/Implementation/vitp_implementation_tester.e new file mode 100644 index 0000000..3837c32 --- /dev/null +++ b/jj_vitp/Implementation/vitp_implementation_tester.e @@ -0,0 +1,26 @@ +note + description: "[ + Class to force/test complation of {VITP_GAME}. + ]" + author: "Jimmy J. Johnson" + +class + VITP_IMPLEMENTATION_TESTER + +create + make + +feature {NONE} -- Initialization + + make + -- Start the test program + do + create vitp + end + +feature {NONE} -- Implementation + + vitp: VITP_GAME + -- The root object for which this test was made + +end diff --git a/jj_vitp/Implementation/vitp_implementation_tester.ecf b/jj_vitp/Implementation/vitp_implementation_tester.ecf new file mode 100644 index 0000000..3d3b292 --- /dev/null +++ b/jj_vitp/Implementation/vitp_implementation_tester.ecf @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + /.git$ + /.svn$ + /CVS$ + /EIFGENs$ + /documents$ + /jj_override$ + /jj_tracer$ + + + + diff --git a/jj_vitp/Interface/commands/join_task_force_command.e b/jj_vitp/Interface/commands/join_task_force_command.e new file mode 100644 index 0000000..627384b --- /dev/null +++ b/jj_vitp/Interface/commands/join_task_force_command.e @@ -0,0 +1,204 @@ +note + description: "[ + A command to cause a {ATTACK_UNIT} to join another as a task force, + If Current `is_task_force' already and make is called with `a_transfer' + set to true it will first leave its current task force before joining + the other; if `a_transfer' is false, all the units in Current's force + will join the other. + ]" + author: "Jimmy J. Johnson" + +class + JOIN_TASK_FORCE_COMMAND + +inherit + + VITP_COMMAND + redefine +-- default_create, + text, + execute, + undo + end + +-- LOCATION_CONSTANTS +-- undefine +-- default_create +-- end + +-- ATTACK_UNIT_CONSTANTS -- needed for `Default_ship' in `default_create' +-- undefine +-- default_create +-- end + +create +-- default_create, + make + +feature {NONE} -- Initialization + +-- default_create +-- -- Create an instance +-- do +-- Precursor {VITP_COMMAND} +-- create saved_units.make +-- unit := Default_ship +-- other_unit := Default_ship +-- end + + make (a_unit: like unit; a_other_unit: like unit; a_transfer: BOOLEAN) + -- Initialize a command that causes `a_unit' to join `a_other_unit' as a task_force + -- If `a_transfer' then `a_unit' leaves its task force before joining `a_other_unit'. + require + unit_exists: a_unit /= Void + other_exists: a_other_unit /= Void + unit_not_submarine: not attached {SUBMARINE} a_unit + other_not_submarine: not attached {SUBMARINE} a_other_unit + not_same_task_force: (a_unit.is_task_force and a_other_unit.is_task_force) implies + a_unit.task_force /= a_other_unit.task_force + local + tf: TASK_FORCE + i: INTEGER + do + default_create + create saved_units.make + is_transferring := a_transfer + unit := a_unit + other_unit := a_other_unit + -- If both units comprise a task force, then must mark so the units + -- comprising the task force of `unit' are saved for undo purposes. + if a_other_unit.is_task_force then + if a_unit.is_task_force then + if is_transferring then + saved_other_unit_imp := some_other_unit_in_task_force + else + is_two_task_forces := true + tf := a_unit.task_force + from i := 1 + until i > tf.count + loop + -- Save units to be removed from `other_unit' on `undo' + saved_units.extend (tf.i_th (i)) + i := i + 1 + end + end + end + end + affected_objects.extend (unit.game) + end + +feature -- Access + + text: STRING + -- Description of the command + do + Result := "COMMAND: Join Task Force -- "+ unit.name + " joins " + if other_unit.is_task_force then + Result := Result + other_unit.task_force.first.name + else + Result := Result + other_unit.name + end + end + + unit: ATTACK_UNIT + -- The unit to be moved + + other_unit: ATTACK_UNIT + -- The other unit to which `unit' is to be joined as a task force + +feature -- Basic operations + + execute + -- Perform the action + do + Precursor {VITP_COMMAND} + if is_transferring then + unit.leave_force + end + unit.join_force (other_unit) + end + + undo + -- Reverse the effects of executing the command + local + m1, m2: detachable ATTACK_UNIT + do + Precursor {VITP_COMMAND} + -- Removed the saved_units from the task force + from saved_units.start + until saved_units.exhausted + loop + saved_units.item.leave_force + saved_units.forth + end + unit.leave_force + -- Restore the saved units to their own task force + if is_transferring then + unit.join_force (saved_other_unit) + else + -- Must restore all the units to their own task force + check + multiple_units: saved_units.count >= 2 + -- because it would not have been a task force during creation, + -- leading to creation and saving of the list of units + end + from + saved_units.start + m1 := saved_units.first + saved_units.forth + until saved_units.exhausted + loop + m2 := saved_units.item + m2.join_force (m1) + saved_units.forth + end + check + unit.task_force /= other_unit.task_force + -- because original task force was restored + end + end + end + +feature -- Status report + + is_transferring: BOOLEAN + -- Is `unit' being transferred out of its task force? + + is_two_task_forces: BOOLEAN + -- Will the command, at creation, join two task forces? + +feature {NONE} -- Implementation + + some_other_unit_in_task_force: ATTACK_UNIT + -- A unit other than `unit' that is in the `task_force' of `unit' + require + is_task_force: unit.is_task_force + local + tf: TASK_FORCE + i: INTEGER + do + tf := unit.task_force + Result := tf.i_th (1) + from i := 1 + until Result /= unit + loop + Result := tf.i_th (i) + i := i + 1 + end + end + + saved_other_unit: ATTACK_UNIT + -- In case we need to restore during an undo + do + check attached saved_other_unit_imp as ou then + Result := ou + end + end + + saved_other_unit_imp: detachable ATTACK_UNIT + -- In case we need to restore during an undo + + saved_units: LINKED_LIST [ATTACK_UNIT] + -- Used during undo when `unit' was a task force + +end diff --git a/jj_vitp/Interface/commands/leave_task_force_and_move_command.e b/jj_vitp/Interface/commands/leave_task_force_and_move_command.e new file mode 100644 index 0000000..fd02413 --- /dev/null +++ b/jj_vitp/Interface/commands/leave_task_force_and_move_command.e @@ -0,0 +1,120 @@ +note + description: "[ + A {VITP_COMMAND} that removes a unit from its current task + force and changes the unit's position and location. + ]" + author: "Jimmy J. Johnson" + +class + LEAVE_TASK_FORCE_AND_MOVE_COMMAND + +inherit + + VITP_COMMAND + redefine +-- default_create, + text, + execute, + undo + end + +create +-- default_create, + make + +feature {NONE} -- Initialization + +-- default_create +-- -- Create an instance +-- do +-- Precursor {VITP_COMMAND} +-- create leave_command +-- create reposition_command +-- create move_command +-- end + + make (a_unit: like unit; a_position: like position; a_location: LOCATION) + -- Initialize a command that can reposition `a_unit' to `a_position' + -- and move it to `a_location'. + require + unit_exists: a_unit /= Void + position_exists: a_position /= Void + location_exists: a_location /= Void + do + default_create + create leave_command.make (a_unit) + create reposition_command.make (a_unit, a_position) + create move_command.make (a_unit, a_location) + end + +feature -- Access + + text: STRING + -- Description of the command + do + Result := "COMMAND: Leave Task Force & Move -- "+ unit.name + " from " + old_location.name + Result := Result + " to " + location.name + end + + unit: ATTACK_UNIT + -- The unit that this command operates on + do + Result := leave_command.unit + end + + position: VITP_POSITION + -- The position to which `unit' is to be moved + do + Result := reposition_command.position + end + + location: LOCATION + -- The location to which `unit' is to be moved + do + Result := move_command.location + end + + old_position: VITP_POSITION + -- The position from which `unit' was moved + do + Result := reposition_command.old_position + end + + old_location: LOCATION + -- The locatiopn from which `unit' was moved + do + Result := move_command.old_location + end + +feature -- Basic operations + + execute + -- Perform the action + do + Precursor {VITP_COMMAND} + leave_command.execute + move_command.execute + reposition_command.execute + end + + undo + -- Reverse the effects of executing the command + do + Precursor {VITP_COMMAND} + reposition_command.undo + move_command.undo + leave_command.undo + end + +feature {NONE} -- Implementation + + leave_command: LEAVE_TASK_FORCE_COMMAND + -- Command whose execution removes the unit from its task force + + reposition_command: REPOSITION_COMMAND + -- Command whose execution changes the unit's `position' + + move_command: MOVE_COMMAND + -- Command whose execution changes the unit's `location'. + +end diff --git a/jj_vitp/Interface/commands/leave_task_force_and_reposition_command.e b/jj_vitp/Interface/commands/leave_task_force_and_reposition_command.e new file mode 100644 index 0000000..9a4a4d1 --- /dev/null +++ b/jj_vitp/Interface/commands/leave_task_force_and_reposition_command.e @@ -0,0 +1,99 @@ +note + description: "[ + A {VITP_COMMAND} that removes a unit from its current task force + and changes the unit's `position'. + ]" + author: "Jimmy J. Johnson" + +class + LEAVE_TASK_FORCE_AND_REPOSITION_COMMAND + +inherit + + VITP_COMMAND + redefine +-- default_create, + text, + execute, + undo + end + +create +-- default_create, + make + +feature {NONE} -- Initialization + +-- default_create +-- -- Create an instance +-- do +-- Precursor {VITP_COMMAND} +-- create leave_command +-- create reposition_command +-- end + + make (a_unit: like unit; a_position: like position) + -- Initialize a command that can reposition `a_unit' to `a_position' + require + unit_exists: a_unit /= Void + location_exists: a_position /= Void + do + default_create + create leave_command.make (a_unit) + create reposition_command.make (a_unit, a_position) + end + +feature -- Access + + text: STRING + -- Description of the command + do + Result := "COMMAND: Leave Task Force & Reposition -- "+ unit.name + " from " + old_position.out + Result := Result + " to " + position.out + end + + unit: ATTACK_UNIT + -- The unit that this command operates on + do + Result := leave_command.unit + end + + position: VITP_POSITION + -- The position to which `unit' is to be moved + do + Result := reposition_command.position + end + + old_position: VITP_POSITION + -- The position from which `unit' was moved + do + Result := reposition_command.old_position + end + +feature -- Basic operations + + execute + -- Perform the action + do + Precursor {VITP_COMMAND} + leave_command.execute + reposition_command.execute + end + + undo + -- Reverse the effects of executing the command + do + Precursor {VITP_COMMAND} + reposition_command.undo + leave_command.undo + end + +feature {NONE} -- Implementation + + leave_command: LEAVE_TASK_FORCE_COMMAND + -- Command whose execution removes the unit from its task force + + reposition_command: REPOSITION_COMMAND + -- Command whose execution changes the units `position' + +end diff --git a/jj_vitp/Interface/commands/leave_task_force_command.e b/jj_vitp/Interface/commands/leave_task_force_command.e new file mode 100644 index 0000000..356ef9a --- /dev/null +++ b/jj_vitp/Interface/commands/leave_task_force_command.e @@ -0,0 +1,101 @@ +note + description: "[ + A command to cause a {ATTACK_UNIT} to join another as a task force, + If Current `is_task_force' already and make is called with `a_transfer' + set to true it will first leave its current task force before joining + the other; if `a_transfer' is false, all the units in Current's force + will join the other. + ]" + author: "Jimmy J. Johnson" + +class + LEAVE_TASK_FORCE_COMMAND + +inherit + + VITP_COMMAND + redefine +-- default_create, + text, + execute, + undo + end + +-- LOCATION_CONSTANTS +-- undefine +-- default_create +-- end + +-- ATTACK_UNIT_CONSTANTS -- needed for `Default_ship' in `default_create' +-- undefine +-- default_create +-- end + +create +-- default_create, + make + +feature {NONE} -- Initialization + +-- default_create +-- -- Create an instance +-- do +-- Precursor {VITP_COMMAND} +-- unit := Default_ship +-- saved_unit := Default_ship +-- task_force_name := "No name: (from {LEAVE_TASK_FORCE_COMMAND}.default_create" +-- end + + make (a_unit: like unit) + -- Initialize a command that causes `a_unit' to leave its current task force. + require + unit_exists: a_unit /= Void + unit_not_submarine: not attached {SUBMARINE} a_unit + is_task_force: a_unit.is_task_force + do + default_create + unit := a_unit + task_force_name := unit.task_force.name + saved_unit := unit.task_force.i_th(1) + if saved_unit = unit then + saved_unit := unit.task_force.i_th (2) + end + affected_objects.extend (unit.game) + end + +feature -- Access + + text: STRING + -- Description of the command + do + Result := "COMMAND: Leave Task Force -- "+ unit.name + " leaves " + task_force_name + end + + unit: ATTACK_UNIT + -- The unit to be moved + + task_force_name: STRING + -- The name of the task force that `unit' leaves + +feature -- Basic operations + + execute + -- Perform the action + do + Precursor {VITP_COMMAND} + unit.leave_force + end + + undo + -- Reverse the effects of executing the command + do + Precursor {VITP_COMMAND} + unit.join_force (saved_unit) + end + +feature {NONE} -- Implementation + + saved_unit: ATTACK_UNIT + -- Must save a unit from the Current task force in case of `undo' + +end diff --git a/jj_vitp/Interface/commands/move_command.e b/jj_vitp/Interface/commands/move_command.e new file mode 100644 index 0000000..bc78df9 --- /dev/null +++ b/jj_vitp/Interface/commands/move_command.e @@ -0,0 +1,94 @@ +note + description: "[ + Command used to move widgets in VITP + ]" + author: "Jimmy J. Johnson" + +class + MOVE_COMMAND + +inherit + + VITP_COMMAND + redefine +-- default_create, + text, + execute, + undo + end + +-- LOCATION_CONSTANTS +-- undefine +-- default_create +-- end + +-- ATTACK_UNIT_CONSTANTS +-- undefine +-- default_create +-- end + +create +-- default_create, + make + +feature {NONE} -- Initialization + +-- default_create +-- -- Create an instance +-- do +-- Precursor {VITP_COMMAND} +-- unit := Default_ship +-- location := Still_in_box +-- old_location := Still_in_box +-- end + + make (a_unit: like unit; a_location: like location) + -- Initialize a command that can move `a_unit' to `a_to_location' + require + unit_exists: a_unit /= Void + location_exists: a_location /= Void + do + default_create + unit := a_unit + location := a_location + old_location := a_unit.game.still_in_box + affected_objects.extend (unit) + end + +feature -- Access + + text: STRING + -- Description of the command + do + Result := "COMMAND: Move -- "+ unit.name + " from " + old_location.name + " to " + location.name + end + + unit: ATTACK_UNIT + -- The unit to be moved + + location: LOCATION + -- The location to which `unit' is to be moved + + old_location: LOCATION + -- The location from which `unit' was moved + +feature -- Basic operations + + execute + -- Perform the action + do + Precursor {VITP_COMMAND} + old_location := unit.location + unit.set_location (location) + end + + undo + -- Reverse the effects of executing the command + do + Precursor {VITP_COMMAND} + unit.set_location (old_location) + end + +feature -- Status report + +end diff --git a/jj_vitp/Interface/commands/rebase_command.e b/jj_vitp/Interface/commands/rebase_command.e new file mode 100644 index 0000000..9c1e4eb --- /dev/null +++ b/jj_vitp/Interface/commands/rebase_command.e @@ -0,0 +1,95 @@ +note + description: "[ + Command for changing the `home_base' of units. + ]" + author: "Jimmy J. Johnson" + +class + REBASE_COMMAND + +inherit + + VITP_COMMAND + redefine +-- default_create, + text, + execute, + undo + end + +-- LOCATION_CONSTANTS +-- undefine +-- default_create +-- end + +-- ATTACK_UNIT_CONSTANTS +-- undefine +-- default_create +-- end + +create +-- default_create, + make + +feature {NONE} -- Initialization + +-- default_create +-- -- Create an instance +-- do +-- Precursor {VITP_COMMAND} +-- unit := Default_ship +-- -- Just pick a port +-- port := Attu +-- old_port := Attu +-- end + + make (a_unit: like unit; a_port: like port) + -- Initialize a command that can change the `home_port of `a_unit' + -- to `a_port' + require + unit_exists: a_unit /= Void + port_exists: a_port /= Void + do + default_create + unit := a_unit + port := a_port + old_port := a_port + affected_objects.extend (unit) + end + +feature -- Access + + text: STRING + -- Description of the command + do + Result := "COMMAND: Rebase -- "+ unit.name + " from " + old_port.name + " to " + port.name + end + + unit: ATTACK_UNIT + -- The unit to be moved + + port: PORT + -- The port to which `unit' is to be rebased + + old_port: PORT + -- The port from which `unit' was rebased + +feature -- Basic operations + + execute + -- Perform the action + do + Precursor {VITP_COMMAND} + old_port := unit.home_port + unit.set_home_port (port) + end + + undo + -- Reverse the effects of executing the command + do + Precursor {VITP_COMMAND} + unit.set_home_port (old_port) + end + + +end diff --git a/jj_vitp/Interface/commands/reinforce_command.e b/jj_vitp/Interface/commands/reinforce_command.e new file mode 100644 index 0000000..479a8f8 --- /dev/null +++ b/jj_vitp/Interface/commands/reinforce_command.e @@ -0,0 +1,171 @@ +note + description: "[ + Command for moving groups of ships from the turn card to the board. + ]" + author: "Jimmy J. Johnson" + +class + REINFORCE_COMMAND + +inherit + + VITP_COMMAND + redefine + text, + execute, + undo, + is_executable + end + +create + make + +feature {NONE} -- Initialization + + make (a_game: VITP_GAME) + -- Create an instance + do + default_create + create moves.make + create repositions.make + create joins.make + create rebasings.make + vitp_game := a_game + affected_objects.extend (a_game) + end + +feature -- Access + + vitp_game: VITP_GAME + -- The game in which this command executes. + + text: STRING + -- Description of the command + do + Result := "Reinforce" + end + +feature -- Basic operations + + execute + -- Perform the action + -- Multiple ships come on as a task force, multiple LBA come + -- on together, as do multiple amphibious units. + local + sop: VITP_SEQUENCE_OF_PLAY + do + Precursor {VITP_COMMAND} + -- Get the ships + sop := vitp_game.sequence_of_play + if sop.player = {NATIONALITY_CONSTANTS}.japanese then + place_units (vitp_game.arriving_japanese_ships (sop.turn)) + place_units (vitp_game.arriving_japanese_air_units (sop.turn)) + place_units (vitp_game.arriving_japanese_amphibious_units (sop.turn)) + place_units (vitp_game.arriving_japanese_submarines (sop.turn)) + else + place_units (vitp_game.arriving_allied_ships (sop.turn)) + place_units (vitp_game.arriving_allied_air_units (sop.turn)) + place_units (vitp_game.arriving_allied_amphibious_units (sop.turn)) + place_units (vitp_game.arriving_allied_submarines (sop.turn)) + end + end + + undo + -- Reverse the effects of executing the command + do + Precursor {VITP_COMMAND} + from joins.start + until joins.after + loop + joins.item.undo + joins.forth + end + from repositions.start + until repositions.after + loop + repositions.item.undo + repositions.forth + end + from moves.start + until moves.after + loop + moves.item.undo + moves.forth + end + end + +feature -- Status report + + is_executable: BOOLEAN + -- Can the command be executed? + local + sop: VITP_SEQUENCE_OF_PLAY + do + sop := vitp_game.sequence_of_play + Result := Precursor {VITP_COMMAND} and + sop.is_reinforcement_step + end + + moves: LINKED_LIST [MOVE_COMMAND] + -- List of commands that move all the reinforcements + + repositions: LINKED_LIST [REPOSITION_COMMAND] + -- List of commands that change the position of the reinforcements + + rebasings: LINKED_LIST [REBASE_COMMAND] + -- List of commands that change the `home_port' of the reinforcement + + joins: LINKED_LIST [JOIN_TASK_FORCE_COMMAND] + -- List of commands that cause units to form a task force + +feature {NONE} -- Implementation + + + place_units (a_group: VITP_TABLE [ATTACK_UNIT]) + -- Get `a_group' [i.e. a unit type] and place in game + require + group_exists: a_group /= Void + local + sop: VITP_SEQUENCE_OF_PLAY + u, u2: ATTACK_UNIT + tab: VITP_TABLE [ATTACK_UNIT] + move_com: MOVE_COMMAND + pos_com: REPOSITION_COMMAND + rebase_com: REBASE_COMMAND + join_com: JOIN_TASK_FORCE_COMMAND + ht: HASH_TABLE [LINKED_LIST [ATTACK_UNIT], LOCATION] -- units entering given location + u_list: LINKED_LIST [ATTACK_UNIT] + do + sop := vitp_game.sequence_of_play + create ht.make (100) + tab := vitp_game.turn_x_units (sop.turn, a_group) + from tab.start + until tab.after + loop + u := tab.item_for_iteration + create move_com.make (u, u.arrival_location) + create pos_com.make (u, u.arrival_position) + create rebase_com.make (u, u.arrival_port) + moves.extend (move_com) + repositions.extend (pos_com) + rebasings.extend (rebase_com) + move_com.execute + pos_com.execute + rebase_com.execute + if ht.has (u.arrival_location) then + check attached {LINKED_LIST [ATTACK_UNIT]} ht.item (u.arrival_location) as otl_list then + u2 := otl_list.first + create join_com.make (u, u2, false) + joins.extend (join_com) + join_com.execute + end + else + create u_list.make + u_list.extend (u) + ht.extend (u_list, u.arrival_location) + end + tab.forth + end + end + +end diff --git a/jj_vitp/Interface/commands/reposition_command.e b/jj_vitp/Interface/commands/reposition_command.e new file mode 100644 index 0000000..4d51489 --- /dev/null +++ b/jj_vitp/Interface/commands/reposition_command.e @@ -0,0 +1,96 @@ +note + description: "[ + A {VITP_COMMAND} that changes the `position' of a unit. + ]" + author: "Jimmy J. Johnson" + +class + REPOSITION_COMMAND + +inherit + + VITP_COMMAND + redefine +-- default_create, + text, + execute, + undo + end + +create +-- default_create, + make + +feature {NONE} -- Initialization + +-- default_create +-- -- Create an instance +-- do +-- Precursor {VITP_COMMAND} +-- unit := Default_ship +-- create old_position.set_xy (0, 0) +-- create position.set_xy (0, 0) +-- end + + make (a_unit: like unit; a_position: like position) + -- Initialize a command that can reposition `a_unit' to `a_position' + require + unit_exists: a_unit /= Void + location_exists: a_position /= Void + do + default_create + unit := a_unit +-- unit.set_position (a_position) + create old_position.set_xy (0, 0) + create position.set_xy (a_position.longitude, a_position.latitude) + end + +feature -- Access + + text: STRING + -- Description of the command + do + Result := "COMMAND: Reposition -- "+ unit.name + " from " + old_position.out + Result := Result + " to " + position.out + end + + unit: ATTACK_UNIT + -- The unit to be moved + + position: VITP_POSITION + -- The position to which `unit' is to be moved + + old_position: VITP_POSITION + -- The position from which `unit' was moved + +feature -- Basic operations + + execute + -- Perform the action + local + i: INTEGER + do + Precursor {VITP_COMMAND} + old_position := unit.position + if unit.is_task_force then + from i := 1 + until i > unit.task_force.count + loop + unit.task_force.i_th (i).set_position (position) + i := i + 1 + end + else + unit.set_position (position) + end + end + + undo + -- Reverse the effects of executing the command + do + Precursor {VITP_COMMAND} + unit.set_position (old_position) + end + +feature -- Status report + +end diff --git a/jj_vitp/Interface/commands/vitp_command.e b/jj_vitp/Interface/commands/vitp_command.e new file mode 100644 index 0000000..b90ed41 --- /dev/null +++ b/jj_vitp/Interface/commands/vitp_command.e @@ -0,0 +1,59 @@ +note + description: "[ + A {JJ_COMMAND} applicable to the VITP game + See {GAME_SEQUENCE} for explanation of "phase" and "stage". + ]" + author: "Jimmy J. Johnson" + +deferred class + VITP_COMMAND + +inherit + + JJ_COMMAND + redefine + is_executable, + execute, + undo + end + +feature -- Access + +feature -- Status report + + is_executable: BOOLEAN + -- Can the command be executed? + do + Result := Precursor {JJ_COMMAND} and is_allowed_by_sop + end + + is_allowed_by_sop: BOOLEAN + -- Can the command of this type be executed at this phase + -- in the game play? The command may not be completely + -- ready for execution, but if it were, execution would + -- not be vetoed by the sequence of play. + do + Result := True + end + +feature -- Basic operations + + execute + -- Perform the actions + do + Precursor {JJ_COMMAND} + io.put_string ("{VITP_COMMAND}.execute: ") + io.put_string (text) + io.new_line + end + + undo + -- Perform the actions + do + Precursor {JJ_COMMAND} + io.put_string ("{VITP_COMMAND}.undo: ") + io.put_string (text) + io.new_line + end + +end diff --git a/jj_vitp/Interface/constants/font_and_color_constants.e b/jj_vitp/Interface/constants/font_and_color_constants.e new file mode 100644 index 0000000..fde5349 --- /dev/null +++ b/jj_vitp/Interface/constants/font_and_color_constants.e @@ -0,0 +1,189 @@ +note + description: "[ + Shared widget constants for the VITP game. + Values are in millimeters as measured on the actual game board. + ]" + author: "Jimmy J. Johnson" + +class + FONT_AND_COLOR_CONSTANTS + +feature -- Access + +-- Default_line_width: INTEGER = 1 + Land_boundary_width: INTEGER = 1 + Port_boundary_width: INTEGER = 2 + Sea_boundary_width: INTEGER = 4 + + -- Set this big for creation and then scale down + unit_widget_size: INTEGER = 200 + air_unit_widget_size: INTEGER = 160 + + unit_name_font_size: INTEGER = 40 + unit_speed_font_size: INTEGER = 60 + unit_air_font_size: INTEGER = 50 + air_unit_font_size: INTEGER = 50 + +feature -- fonts + + Big_test_font: EV_FONT + once + create Result + Result.set_height (150) + end + + Default_font: EV_FONT + once + create Result + Result.set_height (12) + end + + Port_font: EV_FONT + -- The font to use for port names + once + create Result + Result.set_height (4) + end + + Major_port_font: EV_FONT + -- The font to use for the name of major ports + once + create Result + Result.set_height (6) + Result.set_weight ({EV_FONT_CONSTANTS}.Weight_bold) + end + + Sea_area_font: EV_FONT + -- The base font to use for text in sea areas + once + create Result + Result.set_family ({EV_FONT_CONSTANTS}.family_sans) + Result.set_height (7) + Result.set_weight ({EV_FONT_CONSTANTS}.Weight_bold) + Result.set_shape ({EV_FONT_CONSTANTS}.Shape_italic) + end + + Subtext_font: EV_FONT + -- Text to use for line of text under the sea area names + once + create Result + Result.set_height (3) + end + + POC_font: EV_FONT + -- Font for the POC numbers in the sea areas + once + create Result + Result.set_height (3) + Result.set_weight ({EV_FONT_CONSTANTS}.Weight_bold) + end + + unit_name_font: EV_FONT + -- Font for the ship name that is on the tiles + once + create Result + Result.set_height (unit_name_font_size) + end + + unit_speed_font: EV_FONT + -- Font for the ship's gunnery, armor, and speed factors + -- when placed on a ship widget + once + create Result + Result.set_height (unit_speed_font_size) + end + + unit_air_font: EV_FONT + -- Font for the ship's air attack factor + once + create Result + Result.set_height (unit_air_font_size) + Result.set_weight ({EV_FONT_CONSTANTS}.Weight_bold) + end + + air_unit_font: EV_FONT + -- Font for the air unit's attack factors + once + create Result + Result.set_height (air_unit_font_size) +-- Result.set_weight ({EV_FONT_CONSTANTS}.Weight_bold) + end + +feature -- Colors + + lightened (a_color: EV_COLOR; a_value: REAL): EV_COLOR + -- A new color produced by multiplying by `a_value', that "redestributes + -- excess [rbg] values to keep the hue intact." + -- See https://stackoverflow.com/questions/141855/programmatically-lighten-a-color + local + r, g, b: REAL + m: REAL + thres: REAL + tot, x, gray: REAL + do + create Result + thres := 1.0 + r := a_color.red * a_value + g := a_color.green * a_value + b := a_color.blue * a_value + m := r.max (g.max (b)) + if m <= thres then + Result.set_rgb (r, g, b) + else + tot := r + g + b + if tot >= 3 * thres then + Result.set_rgb (thres, thres, thres) + else + x := (3 * thres - tot) / (3 * m - tot) + gray := thres - x * m + Result.set_rgb (gray + x * r, gray + x * g, gray + x * b) + end + end + end + + White: EV_COLOR once create Result.make_with_rgb (1.0, 1.0, 1.0) end + Black: EV_COLOR once create Result.make_with_rgb (0.0, 0.0, 0.0) end + Dark_grey: EV_COLOR once create Result.make_with_rgb (0.3, 0.3, 0.3) end + Medium_grey: EV_COLOR once create Result.make_with_rgb (0.4, 0.4, 0.4) end + Light_grey: EV_COLOR once create Result.make_with_rgb (0.95, 0.95, 0.95) end + + Silver: EV_COLOR once create Result.make_with_rgb (0.620 , 0.627 , 0.631) end + Yellow: EV_COLOR once create Result.make_with_rgb (0.93 , 0.93, 0.0) end + Steel: EV_COLOR once create Result.make_with_rgb (0.137 , 0.418 , 0.555) end + Cyan: EV_COLOR once create Result.make_with_rgb (0.0 , 0.9 , 0.9) end + Chrome: EV_COLOR once create Result.make_with_rgb (0.890, 0.871, 0.859) end + Bronze: EV_COLOR once create Result.make_with_rgb (0.588, 0.455, 0.267) end + + Green: EV_COLOR once create Result.make_with_rgb (0.0, 1.0, 0.0) end + Default_color: EV_COLOR once create Result.make_with_rgb (1.0, 1.0, 1.0) end + Japanese_unit_boarder_color: EV_COLOR once create Result.make_with_rgb (1.0, 0.0, 0.0) end + Japanese_unit_color: EV_COLOR once create Result.make_with_rgb (1.0, 0.3, 0.3) end + Japanese_unit_color_dim: EV_COLOR once create Result.make_with_rgb (1.0, 0.8, 0.8) end + Allied_unit_boarder_color: EV_COLOR once create Result.make_with_rgb (0.0, 0.0, 1.0) end + + US_unit_color: EV_COLOR once create Result.make_with_rgb (0.1, 0.4, 0.8) end + + US_unit_color_dim: EV_COLOR once create Result.make_with_rgb (0.8, 0.8, 1.0) end + British_unit_color: EV_COLOR once create Result.make_with_rgb (0.4, 0.7, 0.8) end + Dutch_unit_color: EV_COLOR once create Result.make_with_rgb (0.4, 0.9, 0.5) end + Japanese_air_unit_color: EV_COLOR once create Result.make_with_rgb (1.0, 1.0, 0.0) end + US_air_unit_color: EV_COLOR once create Result.make_with_rgb (0.5, 0.8, 0.8) end + Japanese_submarine_color: EV_COLOR once create Result.make_with_rgb (0.95, 0.95, 0.95) end + US_submarine_color: EV_COLOR once create Result.make_with_rgb (0.9, 0.9, 0.9) end + Land_boundary_color: EV_COLOR once create Result.make_with_rgb (0.418, 0.258, 0.148) end + Default_land_color: EV_COLOR once create Result.make_with_rgb (0.9, 0.7, 0.5) end + + Sea_area_color: EV_COLOR once create Result.make_with_rgb (0.0, 0.5, 0.7) end + + Red_port_color: EV_COLOR once create Result.make_with_rgb (1.0, 0.1, 0.35) end + Green_port_color: EV_COLOR once create Result.make_with_rgb (0.6, 0.9, 0.2) end + + US_flag_red_color: EV_COLOR once create Result.make_with_rgb (1.0, 0.0, 0.0) end + US_flag_white_color: EV_COLOR once create Result.make_with_rgb (1.0, 1.0, 1.0) end + US_flag_blue_color: EV_COLOR once create Result.make_with_rgb (0.0, 0.0, 1.0) end + + arrow_color: EV_COLOR once create Result.make_with_rgb (0.4, 0.8, 0.3) end + US_retical_color: EV_COLOR once create Result.make_with_rgb (0.0, 0.0, 0.7) end + Japanese_retical_color: EV_COLOR once create Result.make_with_rgb (0.7, 0.2, 0.2) end + +end diff --git a/jj_vitp/Interface/constants/silhouette_constants.e b/jj_vitp/Interface/constants/silhouette_constants.e new file mode 100644 index 0000000..06df8be --- /dev/null +++ b/jj_vitp/Interface/constants/silhouette_constants.e @@ -0,0 +1,965 @@ +note + description: "[ + Provided access to all the silhouettes to be placed on the + VITP widgets referenced by the {ATTACK_UNIT}. + ]" + author: "Jimmy J. Johnson" + +deferred class + SILHOUETTE_CONSTANTS + +feature -- Access + + game: VITP_GAME + -- The game in which this object resides. + -- Deferred here but defined in {VITP_WIDGET} to which this + -- class will untimately be combined through inheritance. + deferred + end + +-- silhouette (a_unit: ATTACK_UNIT): SILHOUETTE +-- -- The silhouette for `a_unit' +-- -- This returns a copy of the picture as produced below, because a picture +-- -- will be placed into many widgets (there is a "Shokaku" widget for each +-- -- view in which the `Shokaku' is to be displayed. +-- do +-- if attached silhouette_table.item (a_unit) as func then +-- Result := func.item +-- else +-- check attached silhouette_table.item (game.Mutsu) as func_2 then +-- -- Run the function obtained from the table +-- Result := func_2.item +-- end +-- end +-- end + + silhouette_coordinates (a_unit: ATTACK_UNIT): ARRAYED_LIST [EV_COORDINATE] + -- The points that outline the picture of `a_unit' to be + -- placed on an {ATTACK_UNIT_WIDGET} + local + list: ARRAYED_LIST [EV_COORDINATE] + do + if attached silhouette_table.item (a_unit) as func then + list := func.item + elseif a_unit = game.nagato then + list := Mutsu_sil + elseif a_unit = game.fuso then + list := Mutsu_sil + elseif a_unit = game.akagi then + list := Mutsu_sil + else + list := default_sil + end + Result := list --.to_array + end + +feature {NONE} -- Implementation + + silhouette_table: HASH_TABLE [FUNCTION [TUPLE, ARRAYED_LIST [EV_COORDINATE]], ATTACK_UNIT] + -- Holds silhouettes for each attack unit, index by + -- the name of that unit. + once + create Result.make (100) + Result.extend (agent Shokaku_sil, game.shokaku) + Result.extend (agent Zuikaku_sil, game.zuikaku) + + Result.extend (agent Mutsu_sil, game.mutsu) + + Result.extend (agent Amphibious_symbol_sil, game.yokosuka) + Result.extend (agent Amphibious_symbol_sil, game.sasebo) + Result.extend (agent Amphibious_symbol_sil, game.kure) + + Result.extend (agent Mitsubishi_a6m_zero_sil, game.airflot_21) + Result.extend (agent Mitsubishi_a6m_zero_sil, game.airflot_22) + Result.extend (agent Mitsubishi_a6m_zero_sil, game.airflot_23) + Result.extend (agent Mitsubishi_a6m_zero_sil, game.airflot_24) + Result.extend (agent Mitsubishi_a6m_zero_sil, game.airflot_25) + Result.extend (agent Mitsubishi_a6m_zero_sil, game.airflot_26) + + Result.extend (agent Amphibious_symbol_sil, game.marines_1) + Result.extend (agent Amphibious_symbol_sil, game.marines_2) + Result.extend (agent Amphibious_symbol_sil, game.marines_3) + Result.extend (agent Amphibious_symbol_sil, game.marines_4) + Result.extend (agent Amphibious_symbol_sil, game.marines_5) + + + Result.extend (agent Grummen_f4f_wildcat_sil, game.seventh_af) + Result.extend (agent Grummen_f4f_wildcat_sil, game.fifth_af) + Result.extend (agent Grummen_f4f_wildcat_sil, game.tenth_af) + Result.extend (agent Grummen_f4f_wildcat_sil, game.eleventh_af) + Result.extend (agent Grummen_f4f_wildcat_sil, game.raaf) + Result.extend (agent Grummen_f4f_wildcat_sil, game.rnzaf) + Result.extend (agent Grummen_f4f_wildcat_sil, game.marine) + Result.extend (agent Grummen_f4f_wildcat_sil, game.thirteenth_af) + Result.extend (agent Grummen_f4f_wildcat_sil, game.fourteenth_af) + Result.extend (agent Grummen_f4f_wildcat_sil, game.naval) + end + +feature -- Japanese units (turn 1, row 1) + + default_sil: ARRAYED_LIST [EV_COORDINATE] + -- Points decribing a default (i.e. rectangle) silhouette + once + -- Can use "once", because the points are copied in + -- {EV_MODEL_POLYGON}.`make_from_coordintes' + create Result.make (0) + -- Points generated by Grabber application + Result.extend (create {EV_COORDINATE}.make_precise (0, 0)) + Result.extend (create {EV_COORDINATE}.make_precise (1000, 0)) + Result.extend (create {EV_COORDINATE}.make_precise (1000, 400)) + Result.extend (create {EV_COORDINATE}.make_precise (0, 400)) + end + + shokaku_sil: ARRAYED_LIST [EV_COORDINATE] + -- Points decribing the Shokaku silhouette + once + -- Can use "once", because the points are copied in + -- {EV_MODEL_POLYGON}.`make_from_coordintes' + create Result.make (0) + -- Points generated by Grabber application + Result.extend (create {EV_COORDINATE}.make_precise (0, 0)) + Result.extend (create {EV_COORDINATE}.make_precise (15, 18)) + Result.extend (create {EV_COORDINATE}.make_precise (21, 57)) + Result.extend (create {EV_COORDINATE}.make_precise (1663, 85)) + Result.extend (create {EV_COORDINATE}.make_precise (1665, 65)) + Result.extend (create {EV_COORDINATE}.make_precise (1675, 58)) + Result.extend (create {EV_COORDINATE}.make_precise (1662, 52)) + Result.extend (create {EV_COORDINATE}.make_precise (1647, 48)) + Result.extend (create {EV_COORDINATE}.make_precise (1647, 29)) + Result.extend (create {EV_COORDINATE}.make_precise (1582, 29)) + Result.extend (create {EV_COORDINATE}.make_precise (1582, 20)) + Result.extend (create {EV_COORDINATE}.make_precise (1512, 18)) + Result.extend (create {EV_COORDINATE}.make_precise (1512, 27)) + Result.extend (create {EV_COORDINATE}.make_precise (1493, 27)) + Result.extend (create {EV_COORDINATE}.make_precise (1493, 17)) + Result.extend (create {EV_COORDINATE}.make_precise (1507, 7)) + Result.extend (create {EV_COORDINATE}.make_precise (1515, 5)) + Result.extend (create {EV_COORDINATE}.make_precise (1521, 6)) + Result.extend (create {EV_COORDINATE}.make_precise (1527, 12)) + Result.extend (create {EV_COORDINATE}.make_precise (1528, 18)) + Result.extend (create {EV_COORDINATE}.make_precise (1553, 19)) + Result.extend (create {EV_COORDINATE}.make_precise (1556, 11)) + Result.extend (create {EV_COORDINATE}.make_precise (1568, 5)) + Result.extend (create {EV_COORDINATE}.make_precise (1578, 5)) + Result.extend (create {EV_COORDINATE}.make_precise (1595, 13)) + Result.extend (create {EV_COORDINATE}.make_precise (1598, 27)) + Result.extend (create {EV_COORDINATE}.make_precise (1608, 29)) + Result.extend (create {EV_COORDINATE}.make_precise (1610, 14)) + Result.extend (create {EV_COORDINATE}.make_precise (1627, 3)) + Result.extend (create {EV_COORDINATE}.make_precise (1455, 0)) + Result.extend (create {EV_COORDINATE}.make_precise (1455, -18)) + Result.extend (create {EV_COORDINATE}.make_precise (1437, -18)) + Result.extend (create {EV_COORDINATE}.make_precise (1437, -26)) + Result.extend (create {EV_COORDINATE}.make_precise (1431, -26)) + Result.extend (create {EV_COORDINATE}.make_precise (1430, -19)) + Result.extend (create {EV_COORDINATE}.make_precise (1368, -20)) + Result.extend (create {EV_COORDINATE}.make_precise (1369, -32)) + Result.extend (create {EV_COORDINATE}.make_precise (1348, -33)) + Result.extend (create {EV_COORDINATE}.make_precise (1349, 1)) + Result.extend (create {EV_COORDINATE}.make_precise (1285, 0)) + Result.extend (create {EV_COORDINATE}.make_precise (1280, -14)) + Result.extend (create {EV_COORDINATE}.make_precise (1277, -18)) + Result.extend (create {EV_COORDINATE}.make_precise (1269, -19)) + Result.extend (create {EV_COORDINATE}.make_precise (1270, -31)) + Result.extend (create {EV_COORDINATE}.make_precise (1262, -35)) + Result.extend (create {EV_COORDINATE}.make_precise (1256, -32)) + Result.extend (create {EV_COORDINATE}.make_precise (1257, -4)) + Result.extend (create {EV_COORDINATE}.make_precise (1207, -1)) + Result.extend (create {EV_COORDINATE}.make_precise (1200, 2)) + Result.extend (create {EV_COORDINATE}.make_precise (1183, 0)) + Result.extend (create {EV_COORDINATE}.make_precise (1181, -13)) + Result.extend (create {EV_COORDINATE}.make_precise (1172, -13)) + Result.extend (create {EV_COORDINATE}.make_precise (1166, -3)) + Result.extend (create {EV_COORDINATE}.make_precise (1148, -5)) + Result.extend (create {EV_COORDINATE}.make_precise (1148, -16)) + Result.extend (create {EV_COORDINATE}.make_precise (1137, -17)) + Result.extend (create {EV_COORDINATE}.make_precise (1128, -4)) + Result.extend (create {EV_COORDINATE}.make_precise (1088, -4)) + Result.extend (create {EV_COORDINATE}.make_precise (1064, -12)) + Result.extend (create {EV_COORDINATE}.make_precise (1060, -18)) + Result.extend (create {EV_COORDINATE}.make_precise (1060, -31)) + Result.extend (create {EV_COORDINATE}.make_precise (1061, -36)) + Result.extend (create {EV_COORDINATE}.make_precise (1054, -36)) + Result.extend (create {EV_COORDINATE}.make_precise (1053, -17)) + Result.extend (create {EV_COORDINATE}.make_precise (641, -20)) + Result.extend (create {EV_COORDINATE}.make_precise (639, -35)) + Result.extend (create {EV_COORDINATE}.make_precise (636, -40)) + Result.extend (create {EV_COORDINATE}.make_precise (636, -60)) + Result.extend (create {EV_COORDINATE}.make_precise (632, -62)) + Result.extend (create {EV_COORDINATE}.make_precise (626, -64)) + Result.extend (create {EV_COORDINATE}.make_precise (625, -29)) + Result.extend (create {EV_COORDINATE}.make_precise (618, -29)) + Result.extend (create {EV_COORDINATE}.make_precise (617, -34)) + Result.extend (create {EV_COORDINATE}.make_precise (612, -35)) + Result.extend (create {EV_COORDINATE}.make_precise (612, -57)) + Result.extend (create {EV_COORDINATE}.make_precise (606, -65)) + Result.extend (create {EV_COORDINATE}.make_precise (601, -71)) + Result.extend (create {EV_COORDINATE}.make_precise (601, -83)) + Result.extend (create {EV_COORDINATE}.make_precise (596, -87)) + Result.extend (create {EV_COORDINATE}.make_precise (590, -93)) + Result.extend (create {EV_COORDINATE}.make_precise (584, -93)) + Result.extend (create {EV_COORDINATE}.make_precise (584, -81)) + Result.extend (create {EV_COORDINATE}.make_precise (576, -82)) + Result.extend (create {EV_COORDINATE}.make_precise (578, -67)) + Result.extend (create {EV_COORDINATE}.make_precise (541, -66)) + Result.extend (create {EV_COORDINATE}.make_precise (542, -52)) + Result.extend (create {EV_COORDINATE}.make_precise (531, -52)) + Result.extend (create {EV_COORDINATE}.make_precise (531, -36)) + Result.extend (create {EV_COORDINATE}.make_precise (512, -35)) + Result.extend (create {EV_COORDINATE}.make_precise (512, -17)) + Result.extend (create {EV_COORDINATE}.make_precise (428, -21)) + Result.extend (create {EV_COORDINATE}.make_precise (428, -28)) + Result.extend (create {EV_COORDINATE}.make_precise (421, -33)) + Result.extend (create {EV_COORDINATE}.make_precise (418, -28)) + Result.extend (create {EV_COORDINATE}.make_precise (418, -20)) + Result.extend (create {EV_COORDINATE}.make_precise (318, -20)) + Result.extend (create {EV_COORDINATE}.make_precise (315, -32)) + Result.extend (create {EV_COORDINATE}.make_precise (306, -33)) + Result.extend (create {EV_COORDINATE}.make_precise (302, -22)) + Result.extend (create {EV_COORDINATE}.make_precise (270, -18)) + Result.extend (create {EV_COORDINATE}.make_precise (267, -24)) + Result.extend (create {EV_COORDINATE}.make_precise (183, -27)) + Result.extend (create {EV_COORDINATE}.make_precise (179, -32)) + Result.extend (create {EV_COORDINATE}.make_precise (68, -32)) + Result.extend (create {EV_COORDINATE}.make_precise (66, -23)) + Result.extend (create {EV_COORDINATE}.make_precise (162, -18)) + Result.extend (create {EV_COORDINATE}.make_precise (171, -12)) + Result.extend (create {EV_COORDINATE}.make_precise (168, 0)) + Result.extend (create {EV_COORDINATE}.make_precise (131, -3)) + Result.extend (create {EV_COORDINATE}.make_precise (131, -17)) + Result.extend (create {EV_COORDINATE}.make_precise (112, -19)) + Result.extend (create {EV_COORDINATE}.make_precise (112, 0)) + Result.extend (create {EV_COORDINATE}.make_precise (82, -2)) + Result.extend (create {EV_COORDINATE}.make_precise (82, -18)) + Result.extend (create {EV_COORDINATE}.make_precise (70, -19)) + Result.extend (create {EV_COORDINATE}.make_precise (69, 0)) + Result.extend (create {EV_COORDINATE}.make_precise (17, 3)) + end + + Zuikaku_sil: ARRAYED_LIST [EV_COORDINATE] + -- Points decribing the Zuikaku silhouette + once + create Result.make (0) + -- Points generated by Grabber application + Result.extend (create {EV_COORDINATE}.make_precise (0, 0)) + Result.extend (create {EV_COORDINATE}.make_precise (12, 10)) + Result.extend (create {EV_COORDINATE}.make_precise (17, 48)) + Result.extend (create {EV_COORDINATE}.make_precise (1443, 110)) + Result.extend (create {EV_COORDINATE}.make_precise (1458, 82)) + Result.extend (create {EV_COORDINATE}.make_precise (1444, 82)) + Result.extend (create {EV_COORDINATE}.make_precise (1437, 74)) + Result.extend (create {EV_COORDINATE}.make_precise (1437, 61)) + Result.extend (create {EV_COORDINATE}.make_precise (1440, 57)) + Result.extend (create {EV_COORDINATE}.make_precise (1436, 53)) + Result.extend (create {EV_COORDINATE}.make_precise (1432, 61)) + Result.extend (create {EV_COORDINATE}.make_precise (1403, 63)) + Result.extend (create {EV_COORDINATE}.make_precise (1395, 59)) + Result.extend (create {EV_COORDINATE}.make_precise (1383, 59)) + Result.extend (create {EV_COORDINATE}.make_precise (1381, 53)) + Result.extend (create {EV_COORDINATE}.make_precise (1370, 46)) + Result.extend (create {EV_COORDINATE}.make_precise (1328, 45)) + Result.extend (create {EV_COORDINATE}.make_precise (1317, 58)) + Result.extend (create {EV_COORDINATE}.make_precise (1304, 57)) + Result.extend (create {EV_COORDINATE}.make_precise (1306, 42)) + Result.extend (create {EV_COORDINATE}.make_precise (1312, 35)) + Result.extend (create {EV_COORDINATE}.make_precise (1327, 35)) + Result.extend (create {EV_COORDINATE}.make_precise (1337, 42)) + Result.extend (create {EV_COORDINATE}.make_precise (1337, 51)) + Result.extend (create {EV_COORDINATE}.make_precise (1350, 50)) + Result.extend (create {EV_COORDINATE}.make_precise (1352, 40)) + Result.extend (create {EV_COORDINATE}.make_precise (1385, 40)) + Result.extend (create {EV_COORDINATE}.make_precise (1395, 47)) + Result.extend (create {EV_COORDINATE}.make_precise (1396, 67)) + Result.extend (create {EV_COORDINATE}.make_precise (1403, 70)) + Result.extend (create {EV_COORDINATE}.make_precise (1404, 46)) + Result.extend (create {EV_COORDINATE}.make_precise (1408, 42)) + Result.extend (create {EV_COORDINATE}.make_precise (1423, 41)) + Result.extend (create {EV_COORDINATE}.make_precise (1424, 36)) + Result.extend (create {EV_COORDINATE}.make_precise (1272, 31)) + Result.extend (create {EV_COORDINATE}.make_precise (1264, 22)) + Result.extend (create {EV_COORDINATE}.make_precise (1265, 15)) + Result.extend (create {EV_COORDINATE}.make_precise (1254, 15)) + Result.extend (create {EV_COORDINATE}.make_precise (1255, 7)) + Result.extend (create {EV_COORDINATE}.make_precise (1250, 2)) + Result.extend (create {EV_COORDINATE}.make_precise (1242, -2)) + Result.extend (create {EV_COORDINATE}.make_precise (1237, -2)) + Result.extend (create {EV_COORDINATE}.make_precise (1233, 1)) + Result.extend (create {EV_COORDINATE}.make_precise (1240, 4)) + Result.extend (create {EV_COORDINATE}.make_precise (1249, 15)) + Result.extend (create {EV_COORDINATE}.make_precise (1194, 16)) + Result.extend (create {EV_COORDINATE}.make_precise (1193, 4)) + Result.extend (create {EV_COORDINATE}.make_precise (1183, 5)) + Result.extend (create {EV_COORDINATE}.make_precise (1183, -1)) + Result.extend (create {EV_COORDINATE}.make_precise (1174, -1)) + Result.extend (create {EV_COORDINATE}.make_precise (1178, 23)) + Result.extend (create {EV_COORDINATE}.make_precise (1170, 32)) + Result.extend (create {EV_COORDINATE}.make_precise (1140, 33)) + Result.extend (create {EV_COORDINATE}.make_precise (1139, 26)) + Result.extend (create {EV_COORDINATE}.make_precise (1115, 25)) + Result.extend (create {EV_COORDINATE}.make_precise (1114, 14)) + Result.extend (create {EV_COORDINATE}.make_precise (1107, 14)) + Result.extend (create {EV_COORDINATE}.make_precise (1109, 4)) + Result.extend (create {EV_COORDINATE}.make_precise (1106, -1)) + Result.extend (create {EV_COORDINATE}.make_precise (1090, -1)) + Result.extend (create {EV_COORDINATE}.make_precise (1098, 2)) + Result.extend (create {EV_COORDINATE}.make_precise (1102, 11)) + Result.extend (create {EV_COORDINATE}.make_precise (1096, 18)) + Result.extend (create {EV_COORDINATE}.make_precise (1087, 25)) + Result.extend (create {EV_COORDINATE}.make_precise (1032, 24)) + Result.extend (create {EV_COORDINATE}.make_precise (1032, 16)) + Result.extend (create {EV_COORDINATE}.make_precise (932, 14)) + Result.extend (create {EV_COORDINATE}.make_precise (930, -11)) + Result.extend (create {EV_COORDINATE}.make_precise (921, -12)) + Result.extend (create {EV_COORDINATE}.make_precise (917, -10)) + Result.extend (create {EV_COORDINATE}.make_precise (916, -5)) + Result.extend (create {EV_COORDINATE}.make_precise (921, 0)) + Result.extend (create {EV_COORDINATE}.make_precise (922, 14)) + Result.extend (create {EV_COORDINATE}.make_precise (863, 17)) + Result.extend (create {EV_COORDINATE}.make_precise (861, 9)) + Result.extend (create {EV_COORDINATE}.make_precise (562, 2)) + Result.extend (create {EV_COORDINATE}.make_precise (560, -16)) + Result.extend (create {EV_COORDINATE}.make_precise (555, -17)) + Result.extend (create {EV_COORDINATE}.make_precise (555, -22)) + Result.extend (create {EV_COORDINATE}.make_precise (561, -22)) + Result.extend (create {EV_COORDINATE}.make_precise (560, -30)) + Result.extend (create {EV_COORDINATE}.make_precise (554, -30)) + Result.extend (create {EV_COORDINATE}.make_precise (553, -36)) + Result.extend (create {EV_COORDINATE}.make_precise (548, -30)) + Result.extend (create {EV_COORDINATE}.make_precise (549, -13)) + Result.extend (create {EV_COORDINATE}.make_precise (540, -13)) + Result.extend (create {EV_COORDINATE}.make_precise (539, -19)) + Result.extend (create {EV_COORDINATE}.make_precise (532, -19)) + Result.extend (create {EV_COORDINATE}.make_precise (534, -39)) + Result.extend (create {EV_COORDINATE}.make_precise (525, -41)) + Result.extend (create {EV_COORDINATE}.make_precise (526, -53)) + Result.extend (create {EV_COORDINATE}.make_precise (531, -49)) + Result.extend (create {EV_COORDINATE}.make_precise (526, -65)) + Result.extend (create {EV_COORDINATE}.make_precise (511, -66)) + Result.extend (create {EV_COORDINATE}.make_precise (511, -51)) + Result.extend (create {EV_COORDINATE}.make_precise (471, -51)) + Result.extend (create {EV_COORDINATE}.make_precise (471, -31)) + Result.extend (create {EV_COORDINATE}.make_precise (466, -30)) + Result.extend (create {EV_COORDINATE}.make_precise (466, -23)) + Result.extend (create {EV_COORDINATE}.make_precise (459, -24)) + Result.extend (create {EV_COORDINATE}.make_precise (454, -19)) + Result.extend (create {EV_COORDINATE}.make_precise (451, -14)) + Result.extend (create {EV_COORDINATE}.make_precise (450, -3)) + Result.extend (create {EV_COORDINATE}.make_precise (388, -5)) + Result.extend (create {EV_COORDINATE}.make_precise (381, -10)) + Result.extend (create {EV_COORDINATE}.make_precise (380, -15)) + Result.extend (create {EV_COORDINATE}.make_precise (361, -15)) + Result.extend (create {EV_COORDINATE}.make_precise (358, -9)) + Result.extend (create {EV_COORDINATE}.make_precise (309, -10)) + Result.extend (create {EV_COORDINATE}.make_precise (304, -14)) + Result.extend (create {EV_COORDINATE}.make_precise (278, -16)) + Result.extend (create {EV_COORDINATE}.make_precise (275, -20)) + Result.extend (create {EV_COORDINATE}.make_precise (272, -13)) + Result.extend (create {EV_COORDINATE}.make_precise (173, -14)) + Result.extend (create {EV_COORDINATE}.make_precise (155, -20)) + Result.extend (create {EV_COORDINATE}.make_precise (153, -24)) + Result.extend (create {EV_COORDINATE}.make_precise (60, -25)) + Result.extend (create {EV_COORDINATE}.make_precise (59, -19)) + Result.extend (create {EV_COORDINATE}.make_precise (81, -16)) + Result.extend (create {EV_COORDINATE}.make_precise (87, -21)) + Result.extend (create {EV_COORDINATE}.make_precise (104, -15)) + Result.extend (create {EV_COORDINATE}.make_precise (115, -14)) + Result.extend (create {EV_COORDINATE}.make_precise (128, -19)) + Result.extend (create {EV_COORDINATE}.make_precise (148, -16)) + Result.extend (create {EV_COORDINATE}.make_precise (149, 0)) + Result.extend (create {EV_COORDINATE}.make_precise (116, -1)) + Result.extend (create {EV_COORDINATE}.make_precise (116, -20)) + Result.extend (create {EV_COORDINATE}.make_precise (107, -19)) + Result.extend (create {EV_COORDINATE}.make_precise (107, 0)) + Result.extend (create {EV_COORDINATE}.make_precise (101, 4)) + Result.extend (create {EV_COORDINATE}.make_precise (85, 4)) + Result.extend (create {EV_COORDINATE}.make_precise (82, 0)) + Result.extend (create {EV_COORDINATE}.make_precise (74, 0)) + Result.extend (create {EV_COORDINATE}.make_precise (76, -19)) + Result.extend (create {EV_COORDINATE}.make_precise (66, -19)) + Result.extend (create {EV_COORDINATE}.make_precise (66, 1)) + end + + + Mutsu_sil: ARRAYED_LIST [EV_COORDINATE] + -- Points decribing the Mutsu silhouette + once + create Result.make (0) + -- Points generated by Grabber application + Result.extend (create {EV_COORDINATE}.make_precise (0, 0)) + Result.extend (create {EV_COORDINATE}.make_precise (22, 39)) + Result.extend (create {EV_COORDINATE}.make_precise (36, 64)) + Result.extend (create {EV_COORDINATE}.make_precise (46, 79)) + Result.extend (create {EV_COORDINATE}.make_precise (1951, 77)) + Result.extend (create {EV_COORDINATE}.make_precise (1950, 64)) + Result.extend (create {EV_COORDINATE}.make_precise (1946, 28)) + Result.extend (create {EV_COORDINATE}.make_precise (1943, 24)) + Result.extend (create {EV_COORDINATE}.make_precise (1943, 18)) + Result.extend (create {EV_COORDINATE}.make_precise (1930, 18)) + Result.extend (create {EV_COORDINATE}.make_precise (1935, -28)) + Result.extend (create {EV_COORDINATE}.make_precise (1978, -26)) + Result.extend (create {EV_COORDINATE}.make_precise (1981, -52)) + Result.extend (create {EV_COORDINATE}.make_precise (1938, -59)) + Result.extend (create {EV_COORDINATE}.make_precise (1924, 15)) + Result.extend (create {EV_COORDINATE}.make_precise (1593, 25)) + Result.extend (create {EV_COORDINATE}.make_precise (1594, 10)) + Result.extend (create {EV_COORDINATE}.make_precise (1689, -2)) + Result.extend (create {EV_COORDINATE}.make_precise (1689, -8)) + Result.extend (create {EV_COORDINATE}.make_precise (1587, -1)) + Result.extend (create {EV_COORDINATE}.make_precise (1581, -6)) + Result.extend (create {EV_COORDINATE}.make_precise (1570, -9)) + Result.extend (create {EV_COORDINATE}.make_precise (1556, -10)) + Result.extend (create {EV_COORDINATE}.make_precise (1501, -12)) + Result.extend (create {EV_COORDINATE}.make_precise (1502, -17)) + Result.extend (create {EV_COORDINATE}.make_precise (1487, -16)) + Result.extend (create {EV_COORDINATE}.make_precise (1485, -10)) + Result.extend (create {EV_COORDINATE}.make_precise (1477, -10)) + Result.extend (create {EV_COORDINATE}.make_precise (1476, 15)) + Result.extend (create {EV_COORDINATE}.make_precise (1498, 15)) + Result.extend (create {EV_COORDINATE}.make_precise (1495, 26)) + Result.extend (create {EV_COORDINATE}.make_precise (1463, 22)) + Result.extend (create {EV_COORDINATE}.make_precise (1465, -18)) + Result.extend (create {EV_COORDINATE}.make_precise (1559, -31)) + Result.extend (create {EV_COORDINATE}.make_precise (1558, -39)) + Result.extend (create {EV_COORDINATE}.make_precise (1465, -32)) + Result.extend (create {EV_COORDINATE}.make_precise (1466, -53)) + Result.extend (create {EV_COORDINATE}.make_precise (1462, -87)) + Result.extend (create {EV_COORDINATE}.make_precise (1458, -55)) + Result.extend (create {EV_COORDINATE}.make_precise (1354, -107)) + Result.extend (create {EV_COORDINATE}.make_precise (1456, -49)) + Result.extend (create {EV_COORDINATE}.make_precise (1455, -31)) + Result.extend (create {EV_COORDINATE}.make_precise (1448, -35)) + Result.extend (create {EV_COORDINATE}.make_precise (1428, -40)) + Result.extend (create {EV_COORDINATE}.make_precise (1391, -37)) + Result.extend (create {EV_COORDINATE}.make_precise (1391, -51)) + Result.extend (create {EV_COORDINATE}.make_precise (1381, -51)) + Result.extend (create {EV_COORDINATE}.make_precise (1381, -43)) + Result.extend (create {EV_COORDINATE}.make_precise (1358, -42)) + Result.extend (create {EV_COORDINATE}.make_precise (1359, -36)) + Result.extend (create {EV_COORDINATE}.make_precise (1349, -42)) + Result.extend (create {EV_COORDINATE}.make_precise (1345, -16)) + Result.extend (create {EV_COORDINATE}.make_precise (1366, -13)) + Result.extend (create {EV_COORDINATE}.make_precise (1366, -7)) + Result.extend (create {EV_COORDINATE}.make_precise (1343, -8)) + Result.extend (create {EV_COORDINATE}.make_precise (1340, -2)) + Result.extend (create {EV_COORDINATE}.make_precise (1216, 2)) + Result.extend (create {EV_COORDINATE}.make_precise (1216, -7)) + Result.extend (create {EV_COORDINATE}.make_precise (1198, -7)) + Result.extend (create {EV_COORDINATE}.make_precise (1190, 1)) + Result.extend (create {EV_COORDINATE}.make_precise (1189, -68)) + Result.extend (create {EV_COORDINATE}.make_precise (1184, -72)) + Result.extend (create {EV_COORDINATE}.make_precise (1188, -83)) + Result.extend (create {EV_COORDINATE}.make_precise (1201, -83)) + Result.extend (create {EV_COORDINATE}.make_precise (1202, -92)) + Result.extend (create {EV_COORDINATE}.make_precise (1208, -104)) + Result.extend (create {EV_COORDINATE}.make_precise (1212, -113)) + Result.extend (create {EV_COORDINATE}.make_precise (1200, -113)) + Result.extend (create {EV_COORDINATE}.make_precise (1204, -139)) + Result.extend (create {EV_COORDINATE}.make_precise (1180, -140)) + Result.extend (create {EV_COORDINATE}.make_precise (1179, -117)) + Result.extend (create {EV_COORDINATE}.make_precise (1172, -116)) + Result.extend (create {EV_COORDINATE}.make_precise (1163, -120)) + Result.extend (create {EV_COORDINATE}.make_precise (1152, -157)) + Result.extend (create {EV_COORDINATE}.make_precise (1151, -191)) + Result.extend (create {EV_COORDINATE}.make_precise (1189, -191)) + Result.extend (create {EV_COORDINATE}.make_precise (1190, -197)) + Result.extend (create {EV_COORDINATE}.make_precise (1152, -200)) + Result.extend (create {EV_COORDINATE}.make_precise (1152, -284)) + Result.extend (create {EV_COORDINATE}.make_precise (1152, -346)) + Result.extend (create {EV_COORDINATE}.make_precise (1145, -346)) + Result.extend (create {EV_COORDINATE}.make_precise (1142, -218)) + Result.extend (create {EV_COORDINATE}.make_precise (1126, -219)) + Result.extend (create {EV_COORDINATE}.make_precise (1126, -211)) + Result.extend (create {EV_COORDINATE}.make_precise (1131, -208)) + Result.extend (create {EV_COORDINATE}.make_precise (1132, -197)) + Result.extend (create {EV_COORDINATE}.make_precise (1125, -197)) + Result.extend (create {EV_COORDINATE}.make_precise (1124, -191)) + Result.extend (create {EV_COORDINATE}.make_precise (1130, -187)) + Result.extend (create {EV_COORDINATE}.make_precise (1129, -47)) + Result.extend (create {EV_COORDINATE}.make_precise (1110, -48)) + Result.extend (create {EV_COORDINATE}.make_precise (1110, -57)) + Result.extend (create {EV_COORDINATE}.make_precise (1070, -59)) + Result.extend (create {EV_COORDINATE}.make_precise (1071, -50)) + Result.extend (create {EV_COORDINATE}.make_precise (1065, -50)) + Result.extend (create {EV_COORDINATE}.make_precise (1062, -54)) + Result.extend (create {EV_COORDINATE}.make_precise (1056, -54)) + Result.extend (create {EV_COORDINATE}.make_precise (1054, -50)) + Result.extend (create {EV_COORDINATE}.make_precise (1028, -51)) + Result.extend (create {EV_COORDINATE}.make_precise (1036, -36)) + Result.extend (create {EV_COORDINATE}.make_precise (1020, -37)) + Result.extend (create {EV_COORDINATE}.make_precise (1020, -83)) + Result.extend (create {EV_COORDINATE}.make_precise (1027, -85)) + Result.extend (create {EV_COORDINATE}.make_precise (1029, -99)) + Result.extend (create {EV_COORDINATE}.make_precise (1022, -99)) + Result.extend (create {EV_COORDINATE}.make_precise (1021, -94)) + Result.extend (create {EV_COORDINATE}.make_precise (1016, -94)) + Result.extend (create {EV_COORDINATE}.make_precise (1019, -103)) + Result.extend (create {EV_COORDINATE}.make_precise (1003, -103)) + Result.extend (create {EV_COORDINATE}.make_precise (1003, -150)) + Result.extend (create {EV_COORDINATE}.make_precise (994, -157)) + Result.extend (create {EV_COORDINATE}.make_precise (961, -158)) + Result.extend (create {EV_COORDINATE}.make_precise (944, -148)) + Result.extend (create {EV_COORDINATE}.make_precise (948, -136)) + Result.extend (create {EV_COORDINATE}.make_precise (942, -131)) + Result.extend (create {EV_COORDINATE}.make_precise (942, -109)) + Result.extend (create {EV_COORDINATE}.make_precise (935, -114)) + Result.extend (create {EV_COORDINATE}.make_precise (927, -108)) + Result.extend (create {EV_COORDINATE}.make_precise (929, -100)) + Result.extend (create {EV_COORDINATE}.make_precise (919, -98)) + Result.extend (create {EV_COORDINATE}.make_precise (925, -88)) + Result.extend (create {EV_COORDINATE}.make_precise (924, -81)) + Result.extend (create {EV_COORDINATE}.make_precise (912, -82)) + Result.extend (create {EV_COORDINATE}.make_precise (913, -90)) + Result.extend (create {EV_COORDINATE}.make_precise (904, -97)) + Result.extend (create {EV_COORDINATE}.make_precise (895, -91)) + Result.extend (create {EV_COORDINATE}.make_precise (899, -82)) + Result.extend (create {EV_COORDINATE}.make_precise (895, -73)) + Result.extend (create {EV_COORDINATE}.make_precise (905, -68)) + Result.extend (create {EV_COORDINATE}.make_precise (904, -43)) + Result.extend (create {EV_COORDINATE}.make_precise (893, -42)) + Result.extend (create {EV_COORDINATE}.make_precise (892, -35)) + Result.extend (create {EV_COORDINATE}.make_precise (867, -34)) + Result.extend (create {EV_COORDINATE}.make_precise (858, -45)) + Result.extend (create {EV_COORDINATE}.make_precise (856, -64)) + Result.extend (create {EV_COORDINATE}.make_precise (839, -64)) + Result.extend (create {EV_COORDINATE}.make_precise (839, -54)) + Result.extend (create {EV_COORDINATE}.make_precise (808, -54)) + Result.extend (create {EV_COORDINATE}.make_precise (809, -69)) + Result.extend (create {EV_COORDINATE}.make_precise (803, -68)) + Result.extend (create {EV_COORDINATE}.make_precise (805, -86)) + Result.extend (create {EV_COORDINATE}.make_precise (810, -88)) + Result.extend (create {EV_COORDINATE}.make_precise (805, -95)) + Result.extend (create {EV_COORDINATE}.make_precise (789, -95)) + Result.extend (create {EV_COORDINATE}.make_precise (785, -93)) + Result.extend (create {EV_COORDINATE}.make_precise (780, -94)) + Result.extend (create {EV_COORDINATE}.make_precise (782, -100)) + Result.extend (create {EV_COORDINATE}.make_precise (771, -101)) + Result.extend (create {EV_COORDINATE}.make_precise (772, -107)) + Result.extend (create {EV_COORDINATE}.make_precise (754, -107)) + Result.extend (create {EV_COORDINATE}.make_precise (748, -126)) + Result.extend (create {EV_COORDINATE}.make_precise (761, -126)) + Result.extend (create {EV_COORDINATE}.make_precise (758, -134)) + Result.extend (create {EV_COORDINATE}.make_precise (758, -183)) + Result.extend (create {EV_COORDINATE}.make_precise (752, -191)) + Result.extend (create {EV_COORDINATE}.make_precise (745, -192)) + Result.extend (create {EV_COORDINATE}.make_precise (744, -198)) + Result.extend (create {EV_COORDINATE}.make_precise (757, -200)) + Result.extend (create {EV_COORDINATE}.make_precise (788, -203)) + Result.extend (create {EV_COORDINATE}.make_precise (799, -206)) + Result.extend (create {EV_COORDINATE}.make_precise (801, -212)) + Result.extend (create {EV_COORDINATE}.make_precise (758, -214)) + Result.extend (create {EV_COORDINATE}.make_precise (753, -219)) + Result.extend (create {EV_COORDINATE}.make_precise (736, -219)) + Result.extend (create {EV_COORDINATE}.make_precise (735, -228)) + Result.extend (create {EV_COORDINATE}.make_precise (757, -236)) + Result.extend (create {EV_COORDINATE}.make_precise (758, -247)) + Result.extend (create {EV_COORDINATE}.make_precise (751, -247)) + Result.extend (create {EV_COORDINATE}.make_precise (753, -253)) + Result.extend (create {EV_COORDINATE}.make_precise (754, -267)) + Result.extend (create {EV_COORDINATE}.make_precise (742, -268)) + Result.extend (create {EV_COORDINATE}.make_precise (740, -261)) + Result.extend (create {EV_COORDINATE}.make_precise (733, -261)) + Result.extend (create {EV_COORDINATE}.make_precise (735, -281)) + Result.extend (create {EV_COORDINATE}.make_precise (705, -282)) + Result.extend (create {EV_COORDINATE}.make_precise (705, -271)) + Result.extend (create {EV_COORDINATE}.make_precise (688, -270)) + Result.extend (create {EV_COORDINATE}.make_precise (688, -260)) + Result.extend (create {EV_COORDINATE}.make_precise (676, -260)) + Result.extend (create {EV_COORDINATE}.make_precise (676, -255)) + Result.extend (create {EV_COORDINATE}.make_precise (684, -253)) + Result.extend (create {EV_COORDINATE}.make_precise (682, -249)) + Result.extend (create {EV_COORDINATE}.make_precise (674, -251)) + Result.extend (create {EV_COORDINATE}.make_precise (672, -245)) + Result.extend (create {EV_COORDINATE}.make_precise (680, -235)) + Result.extend (create {EV_COORDINATE}.make_precise (683, -222)) + Result.extend (create {EV_COORDINATE}.make_precise (656, -220)) + Result.extend (create {EV_COORDINATE}.make_precise (655, -211)) + Result.extend (create {EV_COORDINATE}.make_precise (660, -192)) + Result.extend (create {EV_COORDINATE}.make_precise (659, -149)) + Result.extend (create {EV_COORDINATE}.make_precise (653, -142)) + Result.extend (create {EV_COORDINATE}.make_precise (646, -138)) + Result.extend (create {EV_COORDINATE}.make_precise (647, -118)) + Result.extend (create {EV_COORDINATE}.make_precise (632, -119)) + Result.extend (create {EV_COORDINATE}.make_precise (630, -75)) + Result.extend (create {EV_COORDINATE}.make_precise (645, -71)) + Result.extend (create {EV_COORDINATE}.make_precise (645, -52)) + Result.extend (create {EV_COORDINATE}.make_precise (643, -20)) + Result.extend (create {EV_COORDINATE}.make_precise (614, -20)) + Result.extend (create {EV_COORDINATE}.make_precise (617, -34)) + Result.extend (create {EV_COORDINATE}.make_precise (636, -36)) + Result.extend (create {EV_COORDINATE}.make_precise (635, -59)) + Result.extend (create {EV_COORDINATE}.make_precise (624, -58)) + Result.extend (create {EV_COORDINATE}.make_precise (624, -68)) + Result.extend (create {EV_COORDINATE}.make_precise (622, -75)) + Result.extend (create {EV_COORDINATE}.make_precise (615, -76)) + Result.extend (create {EV_COORDINATE}.make_precise (615, -70)) + Result.extend (create {EV_COORDINATE}.make_precise (602, -72)) + Result.extend (create {EV_COORDINATE}.make_precise (593, -75)) + Result.extend (create {EV_COORDINATE}.make_precise (593, -63)) + Result.extend (create {EV_COORDINATE}.make_precise (568, -60)) + Result.extend (create {EV_COORDINATE}.make_precise (552, -63)) + Result.extend (create {EV_COORDINATE}.make_precise (536, -55)) + Result.extend (create {EV_COORDINATE}.make_precise (503, -56)) + Result.extend (create {EV_COORDINATE}.make_precise (501, -53)) + Result.extend (create {EV_COORDINATE}.make_precise (424, -61)) + Result.extend (create {EV_COORDINATE}.make_precise (424, -55)) + Result.extend (create {EV_COORDINATE}.make_precise (499, -43)) + Result.extend (create {EV_COORDINATE}.make_precise (508, -42)) + Result.extend (create {EV_COORDINATE}.make_precise (516, -40)) + Result.extend (create {EV_COORDINATE}.make_precise (520, -31)) + Result.extend (create {EV_COORDINATE}.make_precise (519, 4)) + Result.extend (create {EV_COORDINATE}.make_precise (490, 3)) + Result.extend (create {EV_COORDINATE}.make_precise (490, -3)) + Result.extend (create {EV_COORDINATE}.make_precise (507, -5)) + Result.extend (create {EV_COORDINATE}.make_precise (509, -27)) + Result.extend (create {EV_COORDINATE}.make_precise (499, -28)) + Result.extend (create {EV_COORDINATE}.make_precise (499, -35)) + Result.extend (create {EV_COORDINATE}.make_precise (495, -40)) + Result.extend (create {EV_COORDINATE}.make_precise (486, -40)) + Result.extend (create {EV_COORDINATE}.make_precise (484, -28)) + Result.extend (create {EV_COORDINATE}.make_precise (419, -28)) + Result.extend (create {EV_COORDINATE}.make_precise (404, -21)) + Result.extend (create {EV_COORDINATE}.make_precise (297, -35)) + Result.extend (create {EV_COORDINATE}.make_precise (297, -27)) + Result.extend (create {EV_COORDINATE}.make_precise (391, -8)) + Result.extend (create {EV_COORDINATE}.make_precise (391, 3)) + Result.extend (create {EV_COORDINATE}.make_precise (331, 1)) + Result.extend (create {EV_COORDINATE}.make_precise (327, -7)) + Result.extend (create {EV_COORDINATE}.make_precise (317, -8)) + Result.extend (create {EV_COORDINATE}.make_precise (310, 0)) + Result.extend (create {EV_COORDINATE}.make_precise (273, 0)) + Result.extend (create {EV_COORDINATE}.make_precise (272, -12)) + Result.extend (create {EV_COORDINATE}.make_precise (257, -13)) + Result.extend (create {EV_COORDINATE}.make_precise (254, -9)) + Result.extend (create {EV_COORDINATE}.make_precise (244, -11)) + Result.extend (create {EV_COORDINATE}.make_precise (243, -3)) + Result.extend (create {EV_COORDINATE}.make_precise (105, -5)) + Result.extend (create {EV_COORDINATE}.make_precise (99, -8)) + Result.extend (create {EV_COORDINATE}.make_precise (56, -8)) + Result.extend (create {EV_COORDINATE}.make_precise (49, -13)) + Result.extend (create {EV_COORDINATE}.make_precise (40, -14)) + Result.extend (create {EV_COORDINATE}.make_precise (36, -10)) + Result.extend (create {EV_COORDINATE}.make_precise (12, -8)) + Result.extend (create {EV_COORDINATE}.make_precise (10, -73)) + Result.extend (create {EV_COORDINATE}.make_precise (3, -75)) + Result.extend (create {EV_COORDINATE}.make_precise (5, -13)) + Result.extend (create {EV_COORDINATE}.make_precise (1, -12)) + end + + Mitsubishi_a6m_zero_sil: ARRAYED_LIST [EV_COORDINATE] + -- Points decribing one of the three plane silhouettes + -- on the Japanese {AIR_UNIT_WIDGETS} + once + create Result.make (0) + -- Points generated by Grabber application + Result.extend (create {EV_COORDINATE}.make_precise (0, 0)) + Result.extend (create {EV_COORDINATE}.make_precise (-17, 0)) + Result.extend (create {EV_COORDINATE}.make_precise (-27, -3)) + Result.extend (create {EV_COORDINATE}.make_precise (-39, -11)) + Result.extend (create {EV_COORDINATE}.make_precise (-41, -22)) + Result.extend (create {EV_COORDINATE}.make_precise (-37, -31)) + Result.extend (create {EV_COORDINATE}.make_precise (-27, -36)) + Result.extend (create {EV_COORDINATE}.make_precise (-19, -39)) + Result.extend (create {EV_COORDINATE}.make_precise (-1, -41)) + Result.extend (create {EV_COORDINATE}.make_precise (1, -57)) + Result.extend (create {EV_COORDINATE}.make_precise (4, -64)) + Result.extend (create {EV_COORDINATE}.make_precise (10, -67)) + Result.extend (create {EV_COORDINATE}.make_precise (18, -68)) + Result.extend (create {EV_COORDINATE}.make_precise (30, -69)) + Result.extend (create {EV_COORDINATE}.make_precise (43, -69)) + Result.extend (create {EV_COORDINATE}.make_precise (58, -67)) + Result.extend (create {EV_COORDINATE}.make_precise (76, -66)) + Result.extend (create {EV_COORDINATE}.make_precise (99, -66)) + Result.extend (create {EV_COORDINATE}.make_precise (129, -453)) + Result.extend (create {EV_COORDINATE}.make_precise (132, -465)) + Result.extend (create {EV_COORDINATE}.make_precise (137, -480)) + Result.extend (create {EV_COORDINATE}.make_precise (144, -492)) + Result.extend (create {EV_COORDINATE}.make_precise (152, -503)) + Result.extend (create {EV_COORDINATE}.make_precise (163, -510)) + Result.extend (create {EV_COORDINATE}.make_precise (175, -514)) + Result.extend (create {EV_COORDINATE}.make_precise (187, -514)) + Result.extend (create {EV_COORDINATE}.make_precise (199, -512)) + Result.extend (create {EV_COORDINATE}.make_precise (211, -505)) + Result.extend (create {EV_COORDINATE}.make_precise (221, -494)) + Result.extend (create {EV_COORDINATE}.make_precise (229, -482)) + Result.extend (create {EV_COORDINATE}.make_precise (237, -467)) + Result.extend (create {EV_COORDINATE}.make_precise (243, -450)) + Result.extend (create {EV_COORDINATE}.make_precise (309, -76)) + Result.extend (create {EV_COORDINATE}.make_precise (315, -69)) + Result.extend (create {EV_COORDINATE}.make_precise (323, -66)) + Result.extend (create {EV_COORDINATE}.make_precise (332, -63)) + Result.extend (create {EV_COORDINATE}.make_precise (363, -61)) + Result.extend (create {EV_COORDINATE}.make_precise (390, -58)) + Result.extend (create {EV_COORDINATE}.make_precise (411, -57)) + Result.extend (create {EV_COORDINATE}.make_precise (437, -55)) + Result.extend (create {EV_COORDINATE}.make_precise (463, -54)) + Result.extend (create {EV_COORDINATE}.make_precise (483, -51)) + Result.extend (create {EV_COORDINATE}.make_precise (513, -48)) + Result.extend (create {EV_COORDINATE}.make_precise (564, -189)) + Result.extend (create {EV_COORDINATE}.make_precise (567, -197)) + Result.extend (create {EV_COORDINATE}.make_precise (575, -205)) + Result.extend (create {EV_COORDINATE}.make_precise (581, -209)) + Result.extend (create {EV_COORDINATE}.make_precise (587, -212)) + Result.extend (create {EV_COORDINATE}.make_precise (596, -212)) + Result.extend (create {EV_COORDINATE}.make_precise (604, -207)) + Result.extend (create {EV_COORDINATE}.make_precise (613, -199)) + Result.extend (create {EV_COORDINATE}.make_precise (616, -188)) + Result.extend (create {EV_COORDINATE}.make_precise (619, -173)) + Result.extend (create {EV_COORDINATE}.make_precise (634, -47)) + Result.extend (create {EV_COORDINATE}.make_precise (637, -39)) + Result.extend (create {EV_COORDINATE}.make_precise (643, -33)) + Result.extend (create {EV_COORDINATE}.make_precise (655, -30)) + Result.extend (create {EV_COORDINATE}.make_precise (708, -23)) + Result.extend (create {EV_COORDINATE}.make_precise (706, -17)) + Result.extend (create {EV_COORDINATE}.make_precise (645, -9)) + Result.extend (create {EV_COORDINATE}.make_precise (639, -4)) + Result.extend (create {EV_COORDINATE}.make_precise (634, 4)) + Result.extend (create {EV_COORDINATE}.make_precise (618, 144)) + Result.extend (create {EV_COORDINATE}.make_precise (615, 153)) + Result.extend (create {EV_COORDINATE}.make_precise (608, 161)) + Result.extend (create {EV_COORDINATE}.make_precise (599, 169)) + Result.extend (create {EV_COORDINATE}.make_precise (587, 174)) + Result.extend (create {EV_COORDINATE}.make_precise (576, 168)) + Result.extend (create {EV_COORDINATE}.make_precise (566, 157)) + Result.extend (create {EV_COORDINATE}.make_precise (518, 14)) + Result.extend (create {EV_COORDINATE}.make_precise (515, 9)) + Result.extend (create {EV_COORDINATE}.make_precise (506, 9)) + Result.extend (create {EV_COORDINATE}.make_precise (478, 11)) + Result.extend (create {EV_COORDINATE}.make_precise (448, 12)) + Result.extend (create {EV_COORDINATE}.make_precise (408, 16)) + Result.extend (create {EV_COORDINATE}.make_precise (380, 17)) + Result.extend (create {EV_COORDINATE}.make_precise (351, 20)) + Result.extend (create {EV_COORDINATE}.make_precise (333, 21)) + Result.extend (create {EV_COORDINATE}.make_precise (322, 26)) + Result.extend (create {EV_COORDINATE}.make_precise (313, 32)) + Result.extend (create {EV_COORDINATE}.make_precise (309, 38)) + Result.extend (create {EV_COORDINATE}.make_precise (246, 402)) + Result.extend (create {EV_COORDINATE}.make_precise (240, 418)) + Result.extend (create {EV_COORDINATE}.make_precise (235, 431)) + Result.extend (create {EV_COORDINATE}.make_precise (228, 443)) + Result.extend (create {EV_COORDINATE}.make_precise (218, 456)) + Result.extend (create {EV_COORDINATE}.make_precise (205, 468)) + Result.extend (create {EV_COORDINATE}.make_precise (188, 472)) + Result.extend (create {EV_COORDINATE}.make_precise (174, 472)) + Result.extend (create {EV_COORDINATE}.make_precise (161, 467)) + Result.extend (create {EV_COORDINATE}.make_precise (147, 457)) + Result.extend (create {EV_COORDINATE}.make_precise (140, 446)) + Result.extend (create {EV_COORDINATE}.make_precise (133, 433)) + Result.extend (create {EV_COORDINATE}.make_precise (129, 417)) + Result.extend (create {EV_COORDINATE}.make_precise (126, 402)) + Result.extend (create {EV_COORDINATE}.make_precise (123, 381)) + Result.extend (create {EV_COORDINATE}.make_precise (104, 381)) + Result.extend (create {EV_COORDINATE}.make_precise (77, 379)) + Result.extend (create {EV_COORDINATE}.make_precise (103, 377)) + Result.extend (create {EV_COORDINATE}.make_precise (125, 377)) + Result.extend (create {EV_COORDINATE}.make_precise (101, 27)) + Result.extend (create {EV_COORDINATE}.make_precise (78, 25)) + Result.extend (create {EV_COORDINATE}.make_precise (61, 27)) + Result.extend (create {EV_COORDINATE}.make_precise (44, 29)) + Result.extend (create {EV_COORDINATE}.make_precise (30, 29)) + Result.extend (create {EV_COORDINATE}.make_precise (19, 28)) + Result.extend (create {EV_COORDINATE}.make_precise (6, 24)) + Result.extend (create {EV_COORDINATE}.make_precise (1, 14)) + end + + Grummen_f4f_wildcat_sil: ARRAYED_LIST [EV_COORDINATE] + -- Points decribing one of the two plane silhouettes + -- on the Allied {AIR_UNIT_WIDGETS} + once + create Result.make (0) + -- Points generated by Grabber application + Result.extend (create {EV_COORDINATE}.make_precise (0, 0)) + Result.extend (create {EV_COORDINATE}.make_precise (4, -5)) + Result.extend (create {EV_COORDINATE}.make_precise (13, -5)) + Result.extend (create {EV_COORDINATE}.make_precise (23, -7)) + Result.extend (create {EV_COORDINATE}.make_precise (26, -35)) + Result.extend (create {EV_COORDINATE}.make_precise (27, -57)) + Result.extend (create {EV_COORDINATE}.make_precise (28, -76)) + Result.extend (create {EV_COORDINATE}.make_precise (30, -92)) + Result.extend (create {EV_COORDINATE}.make_precise (33, -100)) + Result.extend (create {EV_COORDINATE}.make_precise (35, -88)) + Result.extend (create {EV_COORDINATE}.make_precise (35, -79)) + Result.extend (create {EV_COORDINATE}.make_precise (38, -58)) + Result.extend (create {EV_COORDINATE}.make_precise (39, -37)) + Result.extend (create {EV_COORDINATE}.make_precise (39, -25)) + Result.extend (create {EV_COORDINATE}.make_precise (41, -16)) + Result.extend (create {EV_COORDINATE}.make_precise (41, -7)) + Result.extend (create {EV_COORDINATE}.make_precise (46, -5)) + Result.extend (create {EV_COORDINATE}.make_precise (46, -13)) + Result.extend (create {EV_COORDINATE}.make_precise (51, -19)) + Result.extend (create {EV_COORDINATE}.make_precise (49, -37)) + Result.extend (create {EV_COORDINATE}.make_precise (53, -43)) + Result.extend (create {EV_COORDINATE}.make_precise (60, -47)) + Result.extend (create {EV_COORDINATE}.make_precise (72, -49)) + Result.extend (create {EV_COORDINATE}.make_precise (88, -54)) + Result.extend (create {EV_COORDINATE}.make_precise (104, -55)) + Result.extend (create {EV_COORDINATE}.make_precise (120, -57)) + Result.extend (create {EV_COORDINATE}.make_precise (128, -58)) + Result.extend (create {EV_COORDINATE}.make_precise (130, -62)) + Result.extend (create {EV_COORDINATE}.make_precise (151, -62)) + Result.extend (create {EV_COORDINATE}.make_precise (154, -65)) + Result.extend (create {EV_COORDINATE}.make_precise (173, -449)) + Result.extend (create {EV_COORDINATE}.make_precise (176, -455)) + Result.extend (create {EV_COORDINATE}.make_precise (182, -457)) + Result.extend (create {EV_COORDINATE}.make_precise (191, -459)) + Result.extend (create {EV_COORDINATE}.make_precise (201, -461)) + Result.extend (create {EV_COORDINATE}.make_precise (214, -461)) + Result.extend (create {EV_COORDINATE}.make_precise (225, -461)) + Result.extend (create {EV_COORDINATE}.make_precise (236, -460)) + Result.extend (create {EV_COORDINATE}.make_precise (255, -459)) + Result.extend (create {EV_COORDINATE}.make_precise (274, -455)) + Result.extend (create {EV_COORDINATE}.make_precise (297, -449)) + Result.extend (create {EV_COORDINATE}.make_precise (349, -64)) + Result.extend (create {EV_COORDINATE}.make_precise (352, -59)) + Result.extend (create {EV_COORDINATE}.make_precise (357, -56)) + Result.extend (create {EV_COORDINATE}.make_precise (378, -53)) + Result.extend (create {EV_COORDINATE}.make_precise (393, -52)) + Result.extend (create {EV_COORDINATE}.make_precise (408, -50)) + Result.extend (create {EV_COORDINATE}.make_precise (427, -48)) + Result.extend (create {EV_COORDINATE}.make_precise (442, -46)) + Result.extend (create {EV_COORDINATE}.make_precise (458, -44)) + Result.extend (create {EV_COORDINATE}.make_precise (479, -41)) + Result.extend (create {EV_COORDINATE}.make_precise (493, -39)) + Result.extend (create {EV_COORDINATE}.make_precise (512, -37)) + Result.extend (create {EV_COORDINATE}.make_precise (527, -32)) + Result.extend (create {EV_COORDINATE}.make_precise (542, -31)) + Result.extend (create {EV_COORDINATE}.make_precise (560, -26)) + Result.extend (create {EV_COORDINATE}.make_precise (574, -24)) + Result.extend (create {EV_COORDINATE}.make_precise (616, -160)) + Result.extend (create {EV_COORDINATE}.make_precise (619, -163)) + Result.extend (create {EV_COORDINATE}.make_precise (625, -165)) + Result.extend (create {EV_COORDINATE}.make_precise (631, -166)) + Result.extend (create {EV_COORDINATE}.make_precise (638, -166)) + Result.extend (create {EV_COORDINATE}.make_precise (646, -166)) + Result.extend (create {EV_COORDINATE}.make_precise (657, -166)) + Result.extend (create {EV_COORDINATE}.make_precise (665, -164)) + Result.extend (create {EV_COORDINATE}.make_precise (676, -160)) + Result.extend (create {EV_COORDINATE}.make_precise (690, -26)) + Result.extend (create {EV_COORDINATE}.make_precise (650, -11)) + Result.extend (create {EV_COORDINATE}.make_precise (659, -9)) + Result.extend (create {EV_COORDINATE}.make_precise (666, -7)) + Result.extend (create {EV_COORDINATE}.make_precise (669, -4)) + Result.extend (create {EV_COORDINATE}.make_precise (681, -3)) + Result.extend (create {EV_COORDINATE}.make_precise (693, 0)) + Result.extend (create {EV_COORDINATE}.make_precise (684, 3)) + Result.extend (create {EV_COORDINATE}.make_precise (674, 4)) + Result.extend (create {EV_COORDINATE}.make_precise (666, 8)) + Result.extend (create {EV_COORDINATE}.make_precise (651, 10)) + Result.extend (create {EV_COORDINATE}.make_precise (690, 29)) + Result.extend (create {EV_COORDINATE}.make_precise (677, 160)) + Result.extend (create {EV_COORDINATE}.make_precise (666, 164)) + Result.extend (create {EV_COORDINATE}.make_precise (655, 166)) + Result.extend (create {EV_COORDINATE}.make_precise (644, 167)) + Result.extend (create {EV_COORDINATE}.make_precise (629, 166)) + Result.extend (create {EV_COORDINATE}.make_precise (614, 164)) + Result.extend (create {EV_COORDINATE}.make_precise (574, 26)) + Result.extend (create {EV_COORDINATE}.make_precise (560, 29)) + Result.extend (create {EV_COORDINATE}.make_precise (543, 31)) + Result.extend (create {EV_COORDINATE}.make_precise (526, 35)) + Result.extend (create {EV_COORDINATE}.make_precise (508, 37)) + Result.extend (create {EV_COORDINATE}.make_precise (493, 39)) + Result.extend (create {EV_COORDINATE}.make_precise (475, 42)) + Result.extend (create {EV_COORDINATE}.make_precise (459, 44)) + Result.extend (create {EV_COORDINATE}.make_precise (441, 47)) + Result.extend (create {EV_COORDINATE}.make_precise (427, 49)) + Result.extend (create {EV_COORDINATE}.make_precise (409, 51)) + Result.extend (create {EV_COORDINATE}.make_precise (394, 53)) + Result.extend (create {EV_COORDINATE}.make_precise (377, 54)) + Result.extend (create {EV_COORDINATE}.make_precise (359, 55)) + Result.extend (create {EV_COORDINATE}.make_precise (355, 58)) + Result.extend (create {EV_COORDINATE}.make_precise (352, 63)) + Result.extend (create {EV_COORDINATE}.make_precise (297, 450)) + Result.extend (create {EV_COORDINATE}.make_precise (287, 454)) + Result.extend (create {EV_COORDINATE}.make_precise (274, 455)) + Result.extend (create {EV_COORDINATE}.make_precise (259, 457)) + Result.extend (create {EV_COORDINATE}.make_precise (245, 459)) + Result.extend (create {EV_COORDINATE}.make_precise (234, 460)) + Result.extend (create {EV_COORDINATE}.make_precise (222, 460)) + Result.extend (create {EV_COORDINATE}.make_precise (212, 461)) + Result.extend (create {EV_COORDINATE}.make_precise (197, 460)) + Result.extend (create {EV_COORDINATE}.make_precise (183, 457)) + Result.extend (create {EV_COORDINATE}.make_precise (176, 456)) + Result.extend (create {EV_COORDINATE}.make_precise (171, 450)) + Result.extend (create {EV_COORDINATE}.make_precise (157, 70)) + Result.extend (create {EV_COORDINATE}.make_precise (155, 65)) + Result.extend (create {EV_COORDINATE}.make_precise (151, 61)) + Result.extend (create {EV_COORDINATE}.make_precise (127, 61)) + Result.extend (create {EV_COORDINATE}.make_precise (122, 58)) + Result.extend (create {EV_COORDINATE}.make_precise (107, 58)) + Result.extend (create {EV_COORDINATE}.make_precise (90, 56)) + Result.extend (create {EV_COORDINATE}.make_precise (75, 52)) + Result.extend (create {EV_COORDINATE}.make_precise (62, 49)) + Result.extend (create {EV_COORDINATE}.make_precise (55, 46)) + Result.extend (create {EV_COORDINATE}.make_precise (49, 39)) + Result.extend (create {EV_COORDINATE}.make_precise (49, 31)) + Result.extend (create {EV_COORDINATE}.make_precise (48, 18)) + Result.extend (create {EV_COORDINATE}.make_precise (46, 14)) + Result.extend (create {EV_COORDINATE}.make_precise (45, 5)) + Result.extend (create {EV_COORDINATE}.make_precise (40, 6)) + Result.extend (create {EV_COORDINATE}.make_precise (41, 33)) + Result.extend (create {EV_COORDINATE}.make_precise (40, 46)) + Result.extend (create {EV_COORDINATE}.make_precise (39, 62)) + Result.extend (create {EV_COORDINATE}.make_precise (38, 76)) + Result.extend (create {EV_COORDINATE}.make_precise (36, 90)) + Result.extend (create {EV_COORDINATE}.make_precise (33, 103)) + Result.extend (create {EV_COORDINATE}.make_precise (29, 95)) + Result.extend (create {EV_COORDINATE}.make_precise (28, 83)) + Result.extend (create {EV_COORDINATE}.make_precise (28, 73)) + Result.extend (create {EV_COORDINATE}.make_precise (27, 55)) + Result.extend (create {EV_COORDINATE}.make_precise (28, 40)) + Result.extend (create {EV_COORDINATE}.make_precise (26, 35)) + Result.extend (create {EV_COORDINATE}.make_precise (25, 11)) + Result.extend (create {EV_COORDINATE}.make_precise (23, 8)) + Result.extend (create {EV_COORDINATE}.make_precise (15, 9)) + Result.extend (create {EV_COORDINATE}.make_precise (3, 5)) + Result.extend (create {EV_COORDINATE}.make_precise (-2, 4)) + end + + amphibious_symbol_sil: ARRAYED_LIST [EV_COORDINATE] + -- Points decribing the silhouette on + -- the {AMPHIBIOUS_UNIT_WIDGETS} + once + create Result.make (0) + -- Points generated by Grabber application + Result.extend (create {EV_COORDINATE}.make_precise (0, 0)) + Result.extend (create {EV_COORDINATE}.make_precise (657, -6)) + Result.extend (create {EV_COORDINATE}.make_precise (672, 0)) + Result.extend (create {EV_COORDINATE}.make_precise (685, 12)) + Result.extend (create {EV_COORDINATE}.make_precise (696, 30)) + Result.extend (create {EV_COORDINATE}.make_precise (696, 53)) + Result.extend (create {EV_COORDINATE}.make_precise (706, 457)) + Result.extend (create {EV_COORDINATE}.make_precise (703, 467)) + Result.extend (create {EV_COORDINATE}.make_precise (691, 479)) + Result.extend (create {EV_COORDINATE}.make_precise (677, 485)) + Result.extend (create {EV_COORDINATE}.make_precise (662, 487)) + Result.extend (create {EV_COORDINATE}.make_precise (24, 489)) + Result.extend (create {EV_COORDINATE}.make_precise (134, 413)) + Result.extend (create {EV_COORDINATE}.make_precise (625, 88)) + Result.extend (create {EV_COORDINATE}.make_precise (637, 95)) + Result.extend (create {EV_COORDINATE}.make_precise (647, 154)) + Result.extend (create {EV_COORDINATE}.make_precise (652, 367)) + Result.extend (create {EV_COORDINATE}.make_precise (630, 375)) + Result.extend (create {EV_COORDINATE}.make_precise (614, 374)) + Result.extend (create {EV_COORDINATE}.make_precise (134, 77)) + Result.extend (create {EV_COORDINATE}.make_precise (129, 66)) + Result.extend (create {EV_COORDINATE}.make_precise (140, 57)) + Result.extend (create {EV_COORDINATE}.make_precise (555, 55)) + Result.extend (create {EV_COORDINATE}.make_precise (556, 63)) + Result.extend (create {EV_COORDINATE}.make_precise (51, 389)) + Result.extend (create {EV_COORDINATE}.make_precise (37, 392)) + Result.extend (create {EV_COORDINATE}.make_precise (29, 385)) + Result.extend (create {EV_COORDINATE}.make_precise (27, 92)) + Result.extend (create {EV_COORDINATE}.make_precise (36, 88)) + Result.extend (create {EV_COORDINATE}.make_precise (46, 90)) + Result.extend (create {EV_COORDINATE}.make_precise (569, 422)) + Result.extend (create {EV_COORDINATE}.make_precise (103, 429)) + Result.extend (create {EV_COORDINATE}.make_precise (21, 486)) + Result.extend (create {EV_COORDINATE}.make_precise (-12, 480)) + Result.extend (create {EV_COORDINATE}.make_precise (-26, 469)) + Result.extend (create {EV_COORDINATE}.make_precise (-32, 453)) + Result.extend (create {EV_COORDINATE}.make_precise (-35, 27)) + Result.extend (create {EV_COORDINATE}.make_precise (-27, 15)) + Result.extend (create {EV_COORDINATE}.make_precise (-17, 5)) + end + + +end diff --git a/jj_vitp/Interface/views/VITP_application.e b/jj_vitp/Interface/views/VITP_application.e new file mode 100644 index 0000000..e8a5f4f --- /dev/null +++ b/jj_vitp/Interface/views/VITP_application.e @@ -0,0 +1,62 @@ +note + description: "Root class for testing the VITP game." + author: "Jimmy J. Johnson" + +class + VITP_APPLICATION + +inherit + + JJ_APPLICATION + redefine + create_interface_objects, + target, + window_anchor + end + +create + make_and_launch + +feature {NONE} -- Initialization + + create_interface_objects + -- Set up the attribute + do + print ("VITP_APPLICATION.create_interface_objects %N") + Precursor + target.sequence_of_play.start + print ("%T end VITP_APPLICATION.create_interface_objects %N") + end + +feature {NONE} -- Implementation (anchors) + + target: VITP_GAME + -- The object this application will handle + + target_anchor: VITP_GAME + -- Anchor for features using nodes. + -- Not to be called; just used to anchor types. + -- Declared as a feature to avoid adding an attribute. + require else + not_callable: False + do + check + do_not_call: False then + -- Because give no info; simply used as anchor. + end + end + + window_anchor: VITP_MAIN_WINDOW + -- Anchor for the type of `first_window' + -- Not to be called; just used to anchor types. + -- Declared as a feature to avoid adding an attribute. + require else + not_callable: False + do + check + do_not_call: False then + -- Because give no info; simply used as anchor. + end + end + +end diff --git a/jj_vitp/Interface/views/VITP_main_window.e b/jj_vitp/Interface/views/VITP_main_window.e new file mode 100644 index 0000000..bddf576 --- /dev/null +++ b/jj_vitp/Interface/views/VITP_main_window.e @@ -0,0 +1,115 @@ +note + description: "[ + Main window for VITP + ]" + author: "Jimmy J. Johnson" + +class + VITP_MAIN_WINDOW + +inherit + + JJ_MAIN_WINDOW + redefine + create_interface_objects, + initialize, +-- initialize_interface, + target_imp, + set_target +-- draw + end + + FONT_AND_COLOR_CONSTANTS + export + {NONE} + all + undefine + default_create, + copy + end + + GAME_CONSTANTS + export + {NONE} + all + undefine + default_create, + copy + end + +create + make + +feature {NONE} -- Initialization + + create_interface_objects + -- Create objects to be used by `Current' in `initialize' + -- Implemented by descendants to create attached objects + -- in order to adhere to void-safety due to the implementation bridge pattern. + do + print ("VITP_MAIN_WINDOW.create_interface_objects %N") + Precursor {JJ_MAIN_WINDOW} + -- Call to force creation of VITP_GAME + print ("%T VITP_MAIN_WINDOW.create_interface_objects just before creating board_tool %N") + create board_tool.make (target) + print ("%T VITP_MAIN_WINDOW.create_interface_objects just before creating chart_tool %N") + create chart_tool.make (target) + create sequence_tool.make (target) +-- create board_tool +-- create chart_tool +-- create sequence_tool + print ("%T end VITP_MAIN_WINDOW.create_interface_objects %N") + end + + initialize + -- Set up the window + local + g: VITP_GAME + do + print ("VITP_MAIN_WINDOW.initialize %N") + Precursor {JJ_MAIN_WINDOW} + split_manager.enable_mode_changes + split_manager.set_vertical +-- split_manager.extend (sequence_tool) + split_manager.extend (board_tool) + split_manager.set_horizontal + split_manager.extend (chart_tool) +-- -- Must `start' the `sequence_of_play' here, not in +-- -- {VITP_GAME} because of Void safety +-- create g +-- g.sequence_of_play.start +-- set_target (g) + -- Set window size, etc. + set_size (1600, 1200) + set_position (600, 100) + print ("%T end VITP_MAIN_WINDOW.initialize %N") + end + +feature -- Element change + + set_target (a_game: like target) + -- Change the target + do + Precursor {JJ_MAIN_WINDOW} (a_game) + board_tool.set_target (a_game) + chart_tool.set_target (a_game) + end + +feature -- Basic operations + +feature {NONE} -- Implementation + + board_tool: BOARD_TOOL + -- Drawing will be done here. + + chart_tool: CHART_TOOL + -- Draw the order of appearance charts here + + sequence_tool: GAME_SEQUENCE_TOOL + -- Tool containing the view that displays the sequence of play + + target_imp: detachable VITP_GAME + -- Implementation of the `target' + + +end diff --git a/jj_vitp/Interface/views/all_widgets_factory.e b/jj_vitp/Interface/views/all_widgets_factory.e new file mode 100644 index 0000000..4693e59 --- /dev/null +++ b/jj_vitp/Interface/views/all_widgets_factory.e @@ -0,0 +1,80 @@ +note + description: "[ + Class combining the various widget factories into one. + ]" + author: "Jimmy J. Johnson" + date: "5/15/24" + copyright: "Copyright (c) 2024, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +class + ALL_WIDGETS_FACTORY + +inherit + + ATTACK_WIDGETS_FACTORY + redefine + make_widgets, + extend_widgets, + pair_widgets, + fill_widgets + end + + LOCATION_WIDGITS_FACTORY + redefine + make_widgets, + extend_widgets, + pair_widgets, + fill_widgets + end + +create + make + +feature {NONE} -- Initialization + + make_widgets + -- Create widgets for the corresponding game item + -- for each of the ancestors + do +-- create all_widgets.make (100) + print ("ALL_WIDGETS_FACTORY.make_widgets %N") + Precursor {ATTACK_WIDGETS_FACTORY} + Precursor {LOCATION_WIDGITS_FACTORY} + print ("%T end ALL_WIDGETS_FACTORY.make_widgets %N") + end + +--feature -- Access + +-- all_widgets: VITP_WIDGET_TABLE [VITP_WIDGET, VITP_ITEM] +-- -- Keeps track of all widgets + +feature {NONE} -- Implementation + + extend_widgets + -- Put each widget into `world' + -- for each of the ancetors + do + Precursor {ATTACK_WIDGETS_FACTORY} + Precursor {LOCATION_WIDGITS_FACTORY} +-- widgets.merge (attack_widgets) +-- widgets.merge (location_widgets) + end + + pair_widgets + -- Associate each widget with a unit + -- for each of the ancestors + do + Precursor {ATTACK_WIDGETS_FACTORY} + Precursor {LOCATION_WIDGITS_FACTORY} + end + + fill_widgets + -- Call `set_target' to give each widget a target + -- for each of the ancestors + do + Precursor {ATTACK_WIDGETS_FACTORY} + Precursor {LOCATION_WIDGITS_FACTORY} + end + +end diff --git a/jj_vitp/Interface/views/allied_forces_widget_factory.e b/jj_vitp/Interface/views/allied_forces_widget_factory.e new file mode 100644 index 0000000..3f2bca5 --- /dev/null +++ b/jj_vitp/Interface/views/allied_forces_widget_factory.e @@ -0,0 +1,714 @@ +note + description: "[ + One of the classes that decompose the numourous VITP widgets + into more managable groups. This class models the widgets + that contain all the Allied units for turns one through nine. + ]" + author: "Jimmy J. Johnson" + date: "5/15/24" + copyright: "Copyright (c) 2024, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +class + ALLIED_FORCES_WIDGET_FACTORY + +inherit + + WIDGET_FACTORY + redefine + make_widgets, + extend_widgets, + pair_widgets, + fill_widgets + end + +create + make + +feature {NONE} -- Initialization + + make_widgets + -- Create widgets for the corresponding game item + do + create allied_forces_widgets.make (100) + Precursor {WIDGET_FACTORY} + -- Turn 1, on battleship row (Pearl Harbor) + create nevada_widget.make (game.nevada) + create arizona_widget.make (game.arizona) + create west_virginia_widget.make (game.west_virginia) + create tennessee_widget.make (game.tennessee) + create oklahoma_widget.make (game.oklahoma) + create maryland_widget.make (game.maryland) + create california_widget.make (game.california) + create pennsylvania_widget.make (game.pennsylvania) + create new_orleans_widget.make (game.new_orleans) + create san_francisco_widget.make (game.san_francisco) + create seventh_af_widget.make (game.seventh_af) + -- Turn 1, at sea (cannot move) + create hermes_widget.make (game.hermes) + create revenge_widget.make (game.revenge) + create prince_of_wales_widget.make (game.prince_of_wales) + create repulse_widget.make (game.repulse) + create fifth_af_widget.make (game.fifth_af) + create louisville_widget.make (game.louisville) + create pensacola_widget.make (game.pensacola) + create indianapolis_widget.make (game.indianapolis) + create minneapolis_widget.make (game.minneapolis) + -- Turn 1, in port (may move) + create houston_widget.make (game.houston) + create exeter_widget.make (game.exeter) + create de_ruyter_widget.make (game.de_ruyter) + create australia_ship_widget.make (game.australia_ship) + create canberra_widget.make (game.canberra) + -- Turn 1, Location uncertain (group W) + create enterprise_widget.make (game.enterprise) + create salt_lake_city_widget.make (game.salt_lake_city) + create northampton_widget.make (game.northampton) + create chester_widget.make (game.chester) + -- Turn 1, Location uncertain (group X) + create lexington_widget.make (game.lexington) + create chicago_widget.make (game.chicago) + create portland_widget.make (game.portland) + create astoria_widget.make (game.astoria) + -- Turn 1, Location uncertain (group Y) + create saratoga_widget.make (game.saratoga) + -- Turn 1, Location uncertain (group Z) + create hornet_widget.make (game.hornet) + create yorktown_widget.make (game.yorktown) + create vincennes_widget.make (game.vincennes) + create quincy_widget.make (game.quincy) + -- Turn_2 + create royal_sovereign_widget.make (game.royal_sovereign) + create ramilies_widget.make (game.ramilies) + create resolution_widget.make (game.resolution) + create warspite_widget.make (game.warspite) + create indomitable_widget.make (game.indomitable) + create formidable_widget.make (game.formidable) + create cornwall_widget.make (game.cornwall) + create dorestshire_widget.make (game.dorestshire) + create new_mexico_widget.make (game.new_mexico) + create idaho_widget.make (game.idaho) + create tenth_af_widget.make (game.tenth_af) + create eleventh_af_widget.make (game.eleventh_af) + -- Turn 3 + create north_carolina_widget.make (game.north_carolina) + create mississippi_widget.make (game.mississippi) + create colorado_widget.make (game.colorado) + create marines_1_widget.make (game.marines_1) + create marines_2_widget.make (game.marines_2) + create raaf_widget.make (game.raaf) + create rnzaf_widget.make (game.rnzaf) + create valiant_widget.make (game.valiant) + create illustrious_widget.make (game.illustrious) + -- Turn 4 + create south_dakota_widget.make (game.south_dakota) + create indiana_widget.make (game.indiana) + create washington_widget.make (game.washington) + create wasp_widget.make (game.wasp) + create marine_widget.make (game.marine) + create thirteenth_af_widget.make (game.thirteenth_af) + create devonshire_widget.make (game.devonshire) + create shropshire_widget.make (game.shropshire) + create first_027_removal_widget.make (game.first_027_removal) + create second_027_removal_widget.make (game.second_027_removal) + -- Turn 5 + create massachusetts_widget.make (game.massachusetts) + create wichita_widget.make (game.wichita) + create victorious_widget.make (game.victorious) + create marines_3_widget.make (game.marines_3) + create fourteenth_af_widget.make (game.fourteenth_af) + create naval_widget.make (game.naval) + create resolution_removal_widget.make (game.resolution_removal) + create revenge_removal_widget.make (game.revenge_removal) + create valiant_removal_widget.make (game.valiant_removal) + create warspite_removal_widget.make (game.warspite_removal) + -- Turn 6 + create alabama_widget.make (game.alabama) + create essex_widget.make (game.essex) + create cv_10_widget.make (game.cv_10) + create cv_16_widget.make (game.cv_16) + create independence_widget.make (game.independence) + create princeton_widget.make (game.princeton) + create belleau_wood_widget.make (game.belleau_wood) + create cowpens_widget.make (game.cowpens) + create monterey_widget.make (game.monterey) + create baltimore_widget.make (game.baltimore) + create boston_widget.make (game.boston) + create marines_4_widget.make (game.marines_4) + create victorious_removal_widget.make (game.victorious_removal) + -- Turn 7 + create iowa_widget.make (game.iowa) + create new_jersey_widget.make (game.new_jersey) + create intrepid_widget.make (game.intrepid) + create cv_12_widget.make (game.cv_12) + create bunker_hill_widget.make (game.bunker_hill) + create cv_18_widget.make (game.cv_18) + create bataan_widget.make (game.bataan) + create cabot_widget.make (game.cabot) + create langley_ii_widget.make (game.langley_ii) + create canberra_ii_widget.make (game.canberra_ii) + create quincy_ii_widget.make (game.quincy_ii) + create f_boat_widget.make (game.f_boat) + create third_027_removal_widget.make (game.third_027_removal) + create first_443_removal_widget.make (game.first_443_removal) + -- Turn 8 + create wisconsin_widget.make (game.wisconsin) + create missouri_widget.make (game.missouri) + create ticonderoga_widget.make (game.ticonderoga) + create san_jacinto_widget.make (game.san_jacinto) + create marines_5_widget.make (game.marines_5) + -- Turn 9 + create new_york_widget.make (game.new_york) + create texas_widget.make (game.texas) + create alaska_widget.make (game.alaska) + create franklin_widget.make (game.franklin) + create shangri_la_widget.make (game.shangri_la) + end + +feature -- Access + + allied_forces_widgets: VITP_WIDGET_TABLE [ATTACK_UNIT_WIDGET, ATTACK_UNIT] + -- Keeps track of Allied attack units turns 2 to 9 + +feature -- Access (Allied unit widgets turn 2 to 9) + + -- On Battleship Row (Pearl Harbor) + nevada_widget: SHIP_WIDGET + arizona_widget: SHIP_WIDGET + west_virginia_widget: SHIP_WIDGET + tennessee_widget: SHIP_WIDGET + oklahoma_widget: SHIP_WIDGET + maryland_widget: SHIP_WIDGET + california_widget: SHIP_WIDGET + pennsylvania_widget: SHIP_WIDGET + new_orleans_widget: SHIP_WIDGET + san_francisco_widget: SHIP_WIDGET + seventh_af_widget: ALLIED_AIR_UNIT_WIDGET + -- At sea (cannot move) + hermes_widget: SHIP_WIDGET + revenge_widget: SHIP_WIDGET + prince_of_wales_widget: SHIP_WIDGET + repulse_widget: SHIP_WIDGET + fifth_af_widget: ALLIED_AIR_UNIT_WIDGET + louisville_widget: SHIP_WIDGET + pensacola_widget: SHIP_WIDGET + indianapolis_widget: SHIP_WIDGET + minneapolis_widget: SHIP_WIDGET + -- In port (may move) + houston_widget: SHIP_WIDGET + exeter_widget: SHIP_WIDGET + de_ruyter_widget: SHIP_WIDGET + australia_ship_widget: SHIP_WIDGET + canberra_widget: SHIP_WIDGET + -- Location Uncertain, group W + enterprise_widget: SHIP_WIDGET + salt_lake_city_widget: SHIP_WIDGET + northampton_widget: SHIP_WIDGET + chester_widget: SHIP_WIDGET + -- Location Uncertain, group X + lexington_widget: SHIP_WIDGET + chicago_widget: SHIP_WIDGET + portland_widget: SHIP_WIDGET + astoria_widget: SHIP_WIDGET + -- Location Uncertain, group Y + saratoga_widget: SHIP_WIDGET + -- Location Uncertain, group W + hornet_widget: SHIP_WIDGET + yorktown_widget: SHIP_WIDGET + vincennes_widget: SHIP_WIDGET + quincy_widget: SHIP_WIDGET + -- Turn 2 + royal_sovereign_widget: SHIP_WIDGET + ramilies_widget: SHIP_WIDGET + resolution_widget: SHIP_WIDGET + warspite_widget: SHIP_WIDGET + indomitable_widget: SHIP_WIDGET + formidable_widget: SHIP_WIDGET + cornwall_widget: SHIP_WIDGET + dorestshire_widget: SHIP_WIDGET + new_mexico_widget: SHIP_WIDGET + idaho_widget: SHIP_WIDGET + tenth_af_widget: ALLIED_AIR_UNIT_WIDGET + eleventh_af_widget: ALLIED_AIR_UNIT_WIDGET + -- Turn 3 + north_carolina_widget: SHIP_WIDGET + mississippi_widget: SHIP_WIDGET + colorado_widget: SHIP_WIDGET + marines_1_widget: AMPHIBIOUS_UNIT_wIDGET + marines_2_widget: AMPHIBIOUS_UNIT_WIDGET + raaf_widget: ALLIED_AIR_UNIT_WIDGET + rnzaf_widget: ALLIED_AIR_UNIT_WIDGET + valiant_widget: SHIP_WIDGET + illustrious_widget: SHIP_WIDGET + -- Turn 4 + south_dakota_widget: SHIP_WIDGET + indiana_widget: SHIP_WIDGET + washington_widget: SHIP_WIDGET + wasp_widget: SHIP_WIDGET + marine_widget: ALLIED_AIR_UNIT_WIDGET + thirteenth_af_widget: ALLIED_AIR_UNIT_WIDGET + devonshire_widget: SHIP_WIDGET + shropshire_widget: SHIP_WIDGET + first_027_removal_widget: SHIP_WIDGET + second_027_removal_widget: SHIP_WIDGET + -- Turn 5 + massachusetts_widget: SHIP_WIDGET + wichita_widget: SHIP_WIDGET + victorious_widget: SHIP_WIDGET + marines_3_widget: AMPHIBIOUS_UNIT_WIDGET + fourteenth_af_widget: ALLIED_AIR_UNIT_WIDGET + naval_widget: ALLIED_AIR_UNIT_WIDGET + resolution_removal_widget: SHIP_WIDGET + revenge_removal_widget: SHIP_WIDGET + valiant_removal_widget: SHIP_WIDGET + warspite_removal_widget: SHIP_WIDGET + -- Turn 6 + alabama_widget: SHIP_WIDGET + essex_widget: SHIP_WIDGET + cv_10_widget: SHIP_WIDGET + cv_16_widget: SHIP_WIDGET + independence_widget: SHIP_WIDGET + princeton_widget: SHIP_WIDGET + belleau_wood_widget: SHIP_WIDGET + cowpens_widget: SHIP_WIDGET + monterey_widget: SHIP_WIDGET + baltimore_widget: SHIP_WIDGET + boston_widget: SHIP_WIDGET + marines_4_widget: AMPHIBIOUS_UNIT_WIDGET + victorious_removal_widget: SHIP_WIDGET + -- Turn 7 + iowa_widget: SHIP_WIDGET + new_jersey_widget: SHIP_WIDGET + intrepid_widget: SHIP_WIDGET + cv_12_widget: SHIP_WIDGET + bunker_hill_widget: SHIP_WIDGET + cv_18_widget: SHIP_WIDGET + bataan_widget: SHIP_WIDGET + cabot_widget: SHIP_WIDGET + langley_ii_widget: SHIP_WIDGET + canberra_ii_widget: SHIP_WIDGET + quincy_ii_widget: SHIP_WIDGET + f_boat_widget: SUBMARINE_WIDGET + third_027_removal_widget: SHIP_WIDGET + first_443_removal_widget: SHIP_WIDGET + -- Turn 8 + wisconsin_widget: SHIP_WIDGET + missouri_widget: SHIP_WIDGET + ticonderoga_widget: SHIP_WIDGET + san_jacinto_widget: SHIP_WIDGET + marines_5_widget: AMPHIBIOUS_UNIT_WIDGET + -- Turn 9 + new_york_widget: SHIP_WIDGET + texas_widget: SHIP_WIDGET + alaska_widget: SHIP_WIDGET + franklin_widget: SHIP_WIDGET + shangri_la_widget: SHIP_WIDGET + +feature {NONE} -- Implementation + + extend_widgets + -- Put turn-two to turn-nine allied {ATTACK_UNIT_WIDGET} into `world'. + do + create allied_forces_widgets.make (100) + -- On Battleship Row (Pearl Harbor) + allied_forces_widgets.extend (nevada_widget, game.nevada) + allied_forces_widgets.extend (arizona_widget, game.arizona) + allied_forces_widgets.extend (west_virginia_widget, game.west_virginia) + allied_forces_widgets.extend (tennessee_widget, game.tennessee) + allied_forces_widgets.extend (oklahoma_widget, game.oklahoma) + allied_forces_widgets.extend (maryland_widget, game.maryland) + allied_forces_widgets.extend (california_widget, game.california) + allied_forces_widgets.extend (pennsylvania_widget, game.pennsylvania) + allied_forces_widgets.extend (new_orleans_widget, game.new_orleans) + allied_forces_widgets.extend (san_francisco_widget, game.san_francisco) + allied_forces_widgets.extend (seventh_af_widget, game.seventh_af) + -- At sea (cannot move) + allied_forces_widgets.extend (hermes_widget, game.hermes) + allied_forces_widgets.extend (revenge_widget, game.revenge) + allied_forces_widgets.extend (prince_of_wales_widget, game.prince_of_wales) + allied_forces_widgets.extend (repulse_widget, game.repulse) + allied_forces_widgets.extend (fifth_af_widget, game.fifth_af) + allied_forces_widgets.extend (louisville_widget, game.louisville) + allied_forces_widgets.extend (pensacola_widget, game.pensacola) + allied_forces_widgets.extend (indianapolis_widget, game.indianapolis) + allied_forces_widgets.extend (minneapolis_widget, game.minneapolis) + -- In port (may move) + allied_forces_widgets.extend (houston_widget, game.houston) + allied_forces_widgets.extend (exeter_widget, game.exeter) + allied_forces_widgets.extend (de_ruyter_widget, game.de_ruyter) + allied_forces_widgets.extend (australia_ship_widget, game.australia_ship) + allied_forces_widgets.extend (canberra_widget, game.canberra) + -- Location Uncertain, group W + allied_forces_widgets.extend (enterprise_widget, game.enterprise) + allied_forces_widgets.extend (salt_lake_city_widget, game.salt_lake_city) + allied_forces_widgets.extend (northampton_widget, game.northampton) + allied_forces_widgets.extend (chester_widget, game.chester) + -- Location Uncertain, group X + allied_forces_widgets.extend (lexington_widget, game.lexington) + allied_forces_widgets.extend (chicago_widget, game.chicago) + allied_forces_widgets.extend (portland_widget, game.portland) + allied_forces_widgets.extend (astoria_widget, game.astoria) + -- Location Uncertain, group Y + allied_forces_widgets.extend (saratoga_widget, game.saratoga) + -- Location Uncertain (group Z + allied_forces_widgets.extend (hornet_widget, game.hornet) + allied_forces_widgets.extend (yorktown_widget, game.yorktown) + allied_forces_widgets.extend (vincennes_widget, game.vincennes) + allied_forces_widgets.extend (quincy_widget, game.quincy) + -- Turn 2 + allied_forces_widgets.extend (royal_sovereign_widget, game.royal_sovereign) + allied_forces_widgets.extend (ramilies_widget, game.ramilies) + allied_forces_widgets.extend (resolution_widget, game.resolution) + allied_forces_widgets.extend (warspite_widget, game.warspite) + allied_forces_widgets.extend (indomitable_widget, game.indomitable) + allied_forces_widgets.extend (formidable_widget, game.formidable) + allied_forces_widgets.extend (cornwall_widget, game.cornwall) + allied_forces_widgets.extend (dorestshire_widget, game.dorestshire) + allied_forces_widgets.extend (new_mexico_widget, game.new_mexico) + allied_forces_widgets.extend (idaho_widget, game.idaho) + allied_forces_widgets.extend (eleventh_af_widget, game.eleventh_af) + -- Turn 3 + allied_forces_widgets.extend (north_carolina_widget, game.north_carolina) + allied_forces_widgets.extend (mississippi_widget, game.mississippi) + allied_forces_widgets.extend (colorado_widget, game.colorado) + allied_forces_widgets.extend (marines_1_widget, game.marines_1) + allied_forces_widgets.extend (marines_2_widget, game.marines_2) + allied_forces_widgets.extend (raaf_widget, game.raaf) + allied_forces_widgets.extend (rnzaf_widget, game.rnzaf) + allied_forces_widgets.extend (valiant_widget, game.valiant) + allied_forces_widgets.extend (illustrious_widget, game.illustrious) + -- Turn 4 + allied_forces_widgets.extend (south_dakota_widget, game.south_dakota) + allied_forces_widgets.extend (indiana_widget, game.indiana) + allied_forces_widgets.extend (washington_widget, game.washington) + allied_forces_widgets.extend (wasp_widget, game.wasp) + allied_forces_widgets.extend (marine_widget, game.marine) + allied_forces_widgets.extend (thirteenth_af_widget, game.thirteenth_af) + allied_forces_widgets.extend (devonshire_widget, game.devonshire) + allied_forces_widgets.extend (shropshire_widget, game.shropshire) +-- allied_forces_widgets.extend (first_027_removal_widget, game.first_027_removal) +-- allied_forces_widgets.extend (second_027_removal_widget, game.second_027_removal) + -- Turn 5 + allied_forces_widgets.extend (massachusetts_widget, game.massachusetts) + allied_forces_widgets.extend (wichita_widget, game.wichita) + allied_forces_widgets.extend (victorious_widget, game.victorious) + allied_forces_widgets.extend (marines_3_widget, game.marines_3) + allied_forces_widgets.extend (fourteenth_af_widget, game.fourteenth_af) + allied_forces_widgets.extend (naval_widget, game.naval) +-- allied_forces_widgets.extend (resolution_removal_widget, game.resolution_removal) +-- allied_forces_widgets.extend (revenge_removal_widget, game.revenge_removal) +-- allied_forces_widgets.extend (valiant_removal_widget, game.valiant_removal) +-- allied_forces_widgets.extend (warspite_removal_widget, game.warspite_removal) + -- Turn 6 + allied_forces_widgets.extend (alabama_widget, game.alabama) + allied_forces_widgets.extend (essex_widget, game.essex) + allied_forces_widgets.extend (cv_10_widget, game.cv_10) + allied_forces_widgets.extend (cv_16_widget, game.cv_16) + allied_forces_widgets.extend (independence_widget, game.independence) + allied_forces_widgets.extend (princeton_widget, game.princeton) + allied_forces_widgets.extend (belleau_wood_widget, game.belleau_wood) + allied_forces_widgets.extend (cowpens_widget, game.cowpens) + allied_forces_widgets.extend (monterey_widget, game.monterey) + allied_forces_widgets.extend (baltimore_widget, game.baltimore) + allied_forces_widgets.extend (boston_widget, game.boston) + allied_forces_widgets.extend (marines_4_widget, game.marines_4) +-- allied_forces_widgets.extend (victorious_removal_widget, game.victorious_removal) + -- Turn 7 + allied_forces_widgets.extend (iowa_widget, game.iowa) + allied_forces_widgets.extend (new_jersey_widget, game.new_jersey) + allied_forces_widgets.extend (intrepid_widget, game.intrepid) + allied_forces_widgets.extend (cv_12_widget, game.cv_12) + allied_forces_widgets.extend (bunker_hill_widget, game.bunker_hill) + allied_forces_widgets.extend (cv_18_widget, game.cv_18) + allied_forces_widgets.extend (bataan_widget, game.bataan) + allied_forces_widgets.extend (cabot_widget, game.cabot) + allied_forces_widgets.extend (langley_ii_widget, game.langley_ii) + allied_forces_widgets.extend (canberra_ii_widget, game.canberra_ii) + allied_forces_widgets.extend (quincy_ii_widget, game.quincy_ii) + allied_forces_widgets.extend (f_boat_widget, game.f_boat) + -- Turn 8 + allied_forces_widgets.extend (wisconsin_widget, game.wisconsin) + allied_forces_widgets.extend (missouri_widget, game.missouri) + allied_forces_widgets.extend (ticonderoga_widget, game.ticonderoga) + allied_forces_widgets.extend (san_jacinto_widget, game.san_jacinto) + allied_forces_widgets.extend (marines_5_widget, game.marines_5) + -- Turn 9 + allied_forces_widgets.extend (new_york_widget, game.new_york) + allied_forces_widgets.extend (texas_widget, game.texas) + allied_forces_widgets.extend (alaska_widget, game.alaska) + allied_forces_widgets.extend (franklin_widget, game.franklin) + allied_forces_widgets.extend (shangri_la_widget, game.shangri_la) + widgets.merge (allied_forces_widgets) + end + + pair_widgets + -- Associate turn-two to turn-nine widgets with a unit + do + -- On Battleship Row (Pearl Harbor) + allied_forces_widgets.force (nevada_widget, game.nevada) + allied_forces_widgets.force (arizona_widget, game.arizona) + allied_forces_widgets.force (west_virginia_widget, game.west_virginia) + allied_forces_widgets.force (tennessee_widget, game.tennessee) + allied_forces_widgets.force (oklahoma_widget, game.oklahoma) + allied_forces_widgets.force (maryland_widget, game.maryland) + allied_forces_widgets.force (california_widget, game.california) + allied_forces_widgets.force (pennsylvania_widget, game.pennsylvania) + allied_forces_widgets.force (new_orleans_widget, game.new_orleans) + allied_forces_widgets.force (san_francisco_widget, game.san_francisco) + allied_forces_widgets.force (seventh_af_widget, game.seventh_af) + -- At sea (cannot move) + allied_forces_widgets.force (hermes_widget, game.hermes) + allied_forces_widgets.force (revenge_widget, game.revenge) + allied_forces_widgets.force (prince_of_wales_widget, game.prince_of_wales) + allied_forces_widgets.force (repulse_widget, game.repulse) + allied_forces_widgets.force (fifth_af_widget, game.fifth_af) + allied_forces_widgets.force (louisville_widget, game.louisville) + allied_forces_widgets.force (pensacola_widget, game.pensacola) + allied_forces_widgets.force (indianapolis_widget, game.indianapolis) + allied_forces_widgets.force (minneapolis_widget, game.minneapolis) + -- In port (may move) + allied_forces_widgets.force (houston_widget, game.houston) + allied_forces_widgets.force (exeter_widget, game.exeter) + allied_forces_widgets.force (de_ruyter_widget, game.de_ruyter) + allied_forces_widgets.force (australia_ship_widget, game.australia_ship) + allied_forces_widgets.force (canberra_widget, game.canberra) + -- Location Uncertain, group W + allied_forces_widgets.force (enterprise_widget, game.enterprise) + allied_forces_widgets.force (salt_lake_city_widget, game.salt_lake_city) + allied_forces_widgets.force (northampton_widget, game.northampton) + allied_forces_widgets.force (chester_widget, game.chester) + -- Location Uncertain, group X + allied_forces_widgets.force (lexington_widget, game.lexington) + allied_forces_widgets.force (chicago_widget, game.chicago) + allied_forces_widgets.force (portland_widget, game.portland) + allied_forces_widgets.force (astoria_widget, game.astoria) + -- Location Uncertain, group Y + allied_forces_widgets.force (saratoga_widget, game.saratoga) + -- Location Uncertain (group Z + allied_forces_widgets.force (hornet_widget, game.hornet) + allied_forces_widgets.force (yorktown_widget, game.yorktown) + allied_forces_widgets.force (vincennes_widget, game.vincennes) + allied_forces_widgets.force (quincy_widget, game.quincy) + -- Turn 2 + allied_forces_widgets.force (royal_sovereign_widget, game.royal_sovereign) + allied_forces_widgets.force (ramilies_widget, game.ramilies) + allied_forces_widgets.force (resolution_widget, game.resolution) + allied_forces_widgets.force (warspite_widget, game.warspite) + allied_forces_widgets.force (indomitable_widget, game.indomitable) + allied_forces_widgets.force (formidable_widget, game.formidable) + allied_forces_widgets.force (cornwall_widget, game.cornwall) + allied_forces_widgets.force (dorestshire_widget, game.dorestshire) + allied_forces_widgets.force (new_mexico_widget, game.new_mexico) + allied_forces_widgets.force (idaho_widget, game.idaho) + allied_forces_widgets.force (tenth_af_widget, game.tenth_af) + allied_forces_widgets.force (eleventh_af_widget, game.eleventh_af) + -- Turn 3 + allied_forces_widgets.force (north_carolina_widget, game.north_carolina) + allied_forces_widgets.force (mississippi_widget, game.mississippi) + allied_forces_widgets.force (colorado_widget, game.colorado) + allied_forces_widgets.force (marines_1_widget, game.marines_1) + allied_forces_widgets.force (marines_2_widget, game.marines_2) + allied_forces_widgets.force (raaf_widget, game.raaf) + allied_forces_widgets.force (rnzaf_widget, game.rnzaf) + allied_forces_widgets.force (valiant_widget, game.valiant) + allied_forces_widgets.force (illustrious_widget, game.illustrious) + -- Turn 4 + allied_forces_widgets.force (south_dakota_widget, game.south_dakota) + allied_forces_widgets.force (indiana_widget, game.indiana) + allied_forces_widgets.force (washington_widget, game.washington) + allied_forces_widgets.force (wasp_widget, game.wasp) + allied_forces_widgets.force (marine_widget, game.marine) + allied_forces_widgets.force (thirteenth_af_widget, game.thirteenth_af) + allied_forces_widgets.force (devonshire_widget, game.devonshire) + allied_forces_widgets.force (shropshire_widget, game.shropshire) +-- allied_forces_widgets.force (first_027_removal_widget, game.first_027_removal) +-- allied_forces_widgets.force (second_027_removal_widget, game.second_027_removal) + -- Turn 5 + allied_forces_widgets.force (massachusetts_widget, game.massachusetts) + allied_forces_widgets.force (wichita_widget, game.wichita) + allied_forces_widgets.force (victorious_widget, game.victorious) + allied_forces_widgets.force (marines_3_widget, game.marines_3) + allied_forces_widgets.force (fourteenth_af_widget, game.fourteenth_af) + allied_forces_widgets.force (naval_widget, game.naval) +-- allied_forces_widgets.force (resolution_removal_widget, game.resolution_removal) +-- allied_forces_widgets.force (revenge_removal_widget, game.revenge_removal) +-- allied_forces_widgets.force (valiant_removal_widget, game.valiant_removal) +-- allied_forces_widgets.force (warspite_removal_widget, game.warspite_removal) + -- Turn 6 + allied_forces_widgets.force (alabama_widget, game.alabama) + allied_forces_widgets.force (essex_widget, game.essex) + allied_forces_widgets.force (cv_10_widget, game.cv_10) + allied_forces_widgets.force (cv_16_widget, game.cv_16) + allied_forces_widgets.force (independence_widget, game.independence) + allied_forces_widgets.force (princeton_widget, game.princeton) + allied_forces_widgets.force (belleau_wood_widget, game.belleau_wood) + allied_forces_widgets.force (cowpens_widget, game.cowpens) + allied_forces_widgets.force (monterey_widget, game.monterey) + allied_forces_widgets.force (baltimore_widget, game.baltimore) + allied_forces_widgets.force (boston_widget, game.boston) + allied_forces_widgets.force (marines_4_widget, game.marines_4) +-- allied_forces_widgets.force (victorious_removal_widget, game.victorious_removal) + -- Turn 7 + allied_forces_widgets.force (iowa_widget, game.iowa) + allied_forces_widgets.force (new_jersey_widget, game.new_jersey) + allied_forces_widgets.force (intrepid_widget, game.intrepid) + allied_forces_widgets.force (cv_12_widget, game.cv_12) + allied_forces_widgets.force (bunker_hill_widget, game.bunker_hill) + allied_forces_widgets.force (cv_18_widget, game.cv_18) + allied_forces_widgets.force (bataan_widget, game.bataan) + allied_forces_widgets.force (cabot_widget, game.cabot) + allied_forces_widgets.force (langley_ii_widget, game.langley_ii) + allied_forces_widgets.force (canberra_ii_widget, game.canberra_ii) + allied_forces_widgets.force (quincy_ii_widget, game.quincy_ii) + allied_forces_widgets.force (f_boat_widget, game.f_boat) + -- Turn 8 + allied_forces_widgets.force (wisconsin_widget, game.wisconsin) + allied_forces_widgets.force (missouri_widget, game.missouri) + allied_forces_widgets.force (ticonderoga_widget, game.ticonderoga) + allied_forces_widgets.force (san_jacinto_widget, game.san_jacinto) + allied_forces_widgets.force (marines_5_widget, game.marines_5) + -- Turn 9 + allied_forces_widgets.force (new_york_widget, game.new_york) + allied_forces_widgets.force (texas_widget, game.texas) + allied_forces_widgets.force (alaska_widget, game.alaska) + allied_forces_widgets.force (franklin_widget, game.franklin) + allied_forces_widgets.force (shangri_la_widget, game.shangri_la) + end + + fill_widgets + -- Call `set_target' to give each widget a target. + do + -- On Battleship Row (Pearl Harbor) + nevada_widget.set_target (game.nevada) + arizona_widget.set_target (game.arizona) + west_virginia_widget.set_target (game.west_virginia) + tennessee_widget.set_target (game.tennessee) + oklahoma_widget.set_target (game.oklahoma) + maryland_widget.set_target (game.maryland) + california_widget.set_target (game.california) + pennsylvania_widget.set_target (game.pennsylvania) + new_orleans_widget.set_target (game.new_orleans) + san_francisco_widget.set_target (game.san_francisco) + seventh_af_widget.set_target (game.seventh_af) + -- At sea (cannot move) + hermes_widget.set_target (game.hermes) + revenge_widget.set_target (game.revenge) + prince_of_wales_widget.set_target (game.prince_of_wales) + repulse_widget.set_target (game.repulse) + fifth_af_widget.set_target (game.fifth_af) + louisville_widget.set_target (game.louisville) + pensacola_widget.set_target (game.pensacola) + indianapolis_widget.set_target (game.indianapolis) + minneapolis_widget.set_target (game.minneapolis) + -- In port (may move) + houston_widget.set_target (game.houston) + exeter_widget.set_target (game.exeter) + de_ruyter_widget.set_target (game.de_ruyter) + australia_ship_widget.set_target (game.australia_ship) + canberra_widget.set_target (game.canberra) + -- Location Uncertain, group W + enterprise_widget.set_target (game.enterprise) + salt_lake_city_widget.set_target (game.salt_lake_city) + northampton_widget.set_target (game.northampton) + chester_widget.set_target (game.chester) + -- Location Uncertain, group X + lexington_widget.set_target (game.lexington) + chicago_widget.set_target (game.chicago) + portland_widget.set_target (game.portland) + astoria_widget.set_target (game.astoria) + -- Location Uncertain, group Y + saratoga_widget.set_target (game.saratoga) + -- Location Uncertain, group W + hornet_widget.set_target (game.hornet) + yorktown_widget.set_target (game.yorktown) + vincennes_widget.set_target (game.vincennes) + quincy_widget.set_target (game.quincy) + -- Turn 2 + royal_sovereign_widget.set_target (game.royal_sovereign) + ramilies_widget.set_target (game.ramilies) + resolution_widget.set_target (game.resolution) + warspite_widget.set_target (game.warspite) + indomitable_widget.set_target (game.indomitable) + formidable_widget.set_target (game.formidable) + cornwall_widget.set_target (game.cornwall) + dorestshire_widget.set_target (game.dorestshire) + new_mexico_widget.set_target (game.new_mexico) + idaho_widget.set_target (game.idaho) + tenth_af_widget.set_target (game.tenth_af) + eleventh_af_widget.set_target (game.eleventh_af) + -- Turn 3 + north_carolina_widget.set_target (game.north_carolina) + mississippi_widget.set_target (game.mississippi) + colorado_widget.set_target (game.colorado) + marines_1_widget.set_target (game.marines_1) + marines_2_widget.set_target (game.marines_2) + raaf_widget.set_target (game.raaf) + rnzaf_widget.set_target (game.rnzaf) + valiant_widget.set_target (game.valiant) + illustrious_widget.set_target (game.illustrious) + -- Turn 4 + south_dakota_widget.set_target (game.south_dakota) + indiana_widget.set_target (game.indiana) + washington_widget.set_target (game.washington) + wasp_widget.set_target (game.wasp) + marine_widget.set_target (game.marine) + thirteenth_af_widget.set_target (game.thirteenth_af) + devonshire_widget.set_target (game.devonshire) + shropshire_widget.set_target (game.shropshire) + first_027_removal_widget.set_target (game.first_027_removal) + second_027_removal_widget.set_target (game.second_027_removal) + -- Turn 5 + massachusetts_widget.set_target (game.massachusetts) + wichita_widget.set_target (game.wichita) + victorious_widget.set_target (game.victorious) + marines_3_widget.set_target (game.marines_3) + fourteenth_af_widget.set_target (game.fourteenth_af) + naval_widget.set_target (game.naval) + resolution_removal_widget.set_target (game.resolution) + revenge_removal_widget.set_target (game.revenge) + valiant_removal_widget.set_target (game.valiant_removal) + warspite_removal_widget.set_target (game.warspite) + -- Turn 6 + alabama_widget.set_target (game.alabama) + essex_widget.set_target (game.essex) + cv_10_widget.set_target (game.cv_10) + cv_16_widget.set_target (game.cv_16) + independence_widget.set_target (game.independence) + princeton_widget.set_target (game.princeton) + belleau_wood_widget.set_target (game.belleau_wood) + cowpens_widget.set_target (game.cowpens) + monterey_widget.set_target (game.monterey) + baltimore_widget.set_target (game.baltimore) + boston_widget.set_target (game.boston) + marines_4_widget.set_target (game.marines_4) + victorious_removal_widget.set_target (game.victorious_removal) + -- Turn 7 + iowa_widget.set_target (game.iowa) + new_jersey_widget.set_target (game.new_jersey) + intrepid_widget.set_target (game.intrepid) + cv_12_widget.set_target (game.cv_12) + bunker_hill_widget.set_target (game.bunker_hill) + cv_18_widget.set_target (game.cv_18) + bataan_widget.set_target (game.bataan) + cabot_widget.set_target (game.cabot) + langley_ii_widget.set_target (game.langley_ii) + canberra_ii_widget.set_target (game.canberra_ii) + quincy_ii_widget.set_target (game.quincy_ii) + f_boat_widget.set_target (game.f_boat) + third_027_removal_widget.set_target (game.third_027_removal) + first_443_removal_widget.set_target (game.first_443_removal) + -- Turn 8 + wisconsin_widget.set_target (game.wisconsin) + missouri_widget.set_target (game.missouri) + ticonderoga_widget.set_target (game.ticonderoga) + san_jacinto_widget.set_target (game.san_jacinto) + marines_5_widget.set_target (game.marines_5) + -- Turn 9 + new_york_widget.set_target (game.new_york) + texas_widget.set_target (game.texas) + alaska_widget.set_target (game.alaska) + franklin_widget.set_target (game.franklin) + shangri_la_widget.set_target (game.shangri_la) + end + +end diff --git a/jj_vitp/Interface/views/allied_order_of_appearance_chart_view.e b/jj_vitp/Interface/views/allied_order_of_appearance_chart_view.e new file mode 100644 index 0000000..f22c56a --- /dev/null +++ b/jj_vitp/Interface/views/allied_order_of_appearance_chart_view.e @@ -0,0 +1,590 @@ +note + description: "[ + + ]" + author: "Jimmy J. Johnson" + date: "11/11/23" + copyright: "Copyright (c) 2023, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +class + ALLIED_ORDER_OF_APPEARANCE_CHART_VIEW + +inherit + + ORDER_OF_APPEARANCE_VIEW + redefine + create_interface_objects, + initialize, + add_widgets, + add_units, + add_miscellaneous_text, + add_copyright_text, + set_target, + widget_factory, + draw + end + +create + make + +feature {NONE} -- Initialization + + create_interface_objects + -- Set up Current + do + Precursor {ORDER_OF_APPEARANCE_VIEW} + create group_widgets.make + end + + initialize + -- Set up attributes + do + nationality := {NATIONALITY_CONSTANTS}.allied + Precursor + flag.hide + big_marker.hide + little_marker.hide + end + + add_widgets + -- Create the widgets for the chart + do + Precursor + add_removals + add_uncommitted_box + end + + add_turns + -- Add the "TURN X" and "TO date" texts + local + i: INTEGER + do + from i := 2 + until i > 9 + loop + add_turn_text (i) + i := i + 1 + end + end + + add_units + -- Add {ATTACK_UNIT_WIDGETS} to Current + do + -- Turn 1 widgets or on a different chart + -- Turn 2 + add_model (positioned_widget (widget_factory.royal_sovereign_widget, Royal_sovereign_cp)) + add_model (positioned_widget (widget_factory.ramilies_widget, ramilies_cp)) + add_model (positioned_widget (widget_factory.resolution_widget, resolution_cp)) + add_model (positioned_widget (widget_factory.warspite_widget, warspite_cp)) + add_model (positioned_widget (widget_factory.indomitable_widget, indomitable_cp)) + add_model (positioned_widget (widget_factory.formidable_widget, formidable_cp)) + add_model (positioned_widget (widget_factory.cornwall_widget, cornwall_cp)) + add_model (positioned_widget (widget_factory.dorestshire_widget, dorestshire_cp)) + add_model (positioned_widget (widget_factory.new_mexico_widget, new_mexico_cp)) + add_model (positioned_widget (widget_factory.idaho_widget, idaho_cp)) + add_model (positioned_widget (widget_factory.tenth_af_widget, tenth_af_cp)) + add_model (positioned_widget (widget_factory.eleventh_af_widget, eleventh_af_cp)) + -- Turn 3 + add_model (positioned_widget (widget_factory.north_carolina_widget, north_carolina_cp)) + add_model (positioned_widget (widget_factory.mississippi_widget, mississippi_cp)) + add_model (positioned_widget (widget_factory.colorado_widget,colorado_cp)) + add_model (positioned_widget (widget_factory.marines_1_widget, marines_1_cp)) + add_model (positioned_widget (widget_factory.marines_2_widget, marines_2_cp)) + add_model (positioned_widget (widget_factory.raaf_widget, raaf_cp)) + add_model (positioned_widget (widget_factory.rnzaf_widget, rnzaf_cp)) + add_model (positioned_widget (widget_factory.valiant_widget, valiant_cp)) + add_model (positioned_widget (widget_factory.illustrious_widget, illustrious_cp)) + -- Turn 4 + add_model (positioned_widget (widget_factory.south_dakota_widget, south_dakota_cp)) + add_model (positioned_widget (widget_factory.indiana_widget, indiana_cp)) + add_model (positioned_widget (widget_factory.washington_widget, washington_cp)) + add_model (positioned_widget (widget_factory.wasp_widget, wasp_cp)) + add_model (positioned_widget (widget_factory.marine_widget, marine_cp)) + add_model (positioned_widget (widget_factory.thirteenth_af_widget, thirteenth_af_cp)) + add_model (positioned_widget (widget_factory.devonshire_widget, devonshire_cp)) + add_model (positioned_widget (widget_factory.shropshire_widget, shropshire_cp)) + -- Turn 5 + add_model (positioned_widget (widget_factory.massachusetts_widget, massachusetts_cp)) + add_model (positioned_widget (widget_factory.wichita_widget, wichita_cp)) + add_model (positioned_widget (widget_factory.victorious_widget, victorious_cp)) + add_model (positioned_widget (widget_factory.marines_3_widget, marines_3_cp)) + add_model (positioned_widget (widget_factory.fourteenth_af_widget, fourteenth_af_cp)) + add_model (positioned_widget (widget_factory.naval_widget, naval_cp)) + -- Turn 6 + add_model (positioned_widget (widget_factory.alabama_widget, alabama_cp)) + add_model (positioned_widget (widget_factory.essex_widget, essex_cp)) + add_model (positioned_widget (widget_factory.cv_10_widget, cv_10_cp)) + add_model (positioned_widget (widget_factory.cv_16_widget, cv_16_cp)) + add_model (positioned_widget (widget_factory.independence_widget, independence_cp)) + add_model (positioned_widget (widget_factory.princeton_widget, princeton_cp)) + add_model (positioned_widget (widget_factory.belleau_wood_widget, belleau_wood_cp)) + add_model (positioned_widget (widget_factory.cowpens_widget, cowpens_cp)) + add_model (positioned_widget (widget_factory.monterey_widget, monterey_cp)) + add_model (positioned_widget (widget_factory.baltimore_widget, baltimore_cp)) + add_model (positioned_widget (widget_factory.boston_widget, boston_cp)) + add_model (positioned_widget (widget_factory.marines_4_widget, marines_4_cp)) + -- Turn 7 + add_model (positioned_widget (widget_factory.iowa_widget, iowa_cp)) + add_model (positioned_widget (widget_factory.new_jersey_widget, new_jersey_cp)) + add_model (positioned_widget (widget_factory.intrepid_widget, intrepid_cp)) + add_model (positioned_widget (widget_factory.cv_12_widget, cv_12_cp)) + add_model (positioned_widget (widget_factory.bunker_hill_widget, bunker_hill_cp)) + add_model (positioned_widget (widget_factory.cv_18_widget, cv_18_cp)) + add_model (positioned_widget (widget_factory.bataan_widget, bataan_cp)) + add_model (positioned_widget (widget_factory.cabot_widget, cabot_cp)) + add_model (positioned_widget (widget_factory.langley_ii_widget, langley_ii_cp)) + add_model (positioned_widget (widget_factory.canberra_ii_widget, canberra_ii_cp)) + add_model (positioned_widget (widget_factory.quincy_ii_widget, quincy_ii_cp)) + add_model (positioned_widget (widget_factory.f_boat_widget, f_boat_cp)) + -- Turn 8 + add_model (positioned_widget (widget_factory.wisconsin_widget, wisconsin_cp)) + add_model (positioned_widget (widget_factory.missouri_widget, missouri_cp)) + add_model (positioned_widget (widget_factory.ticonderoga_widget, ticonderoga_cp)) + add_model (positioned_widget (widget_factory.san_jacinto_widget, san_jacinto_cp)) + add_model (positioned_widget (widget_factory.marines_5_widget, marines_5_cp)) + -- Turn 9 + add_model (positioned_widget (widget_factory.new_york_widget, new_york_cp)) + add_model (positioned_widget (widget_factory.texas_widget, texas_cp)) + add_model (positioned_widget (widget_factory.alaska_widget, alaska_cp)) + add_model (positioned_widget (widget_factory.franklin_widget, franklin_cp)) + add_model (positioned_widget (widget_factory.shangri_la_widget, shangri_la_cp)) + end + + add_removals + -- All removal widgets and "REMOVALS" texts + local + wf: like widget_factory + do + wf := widget_factory + world.extend (positioned_widget (wf.first_027_removal_widget, first_027_removal_cp)) + world.extend (positioned_widget (wf.second_027_removal_widget, second_027_removal_cp)) + world.extend (positioned_widget (wf.resolution_removal_widget, resolution_removal_cp)) + world.extend (positioned_widget (wf.revenge_removal_widget, revenge_removal_cp)) + world.extend (positioned_widget (wf.valiant_removal_widget, valiant_removal_cp)) + world.extend (positioned_widget (wf.warspite_removal_widget, warspite_removal_cp)) + world.extend (positioned_widget (wf.victorious_removal_widget, victorious_removal_cp)) + world.extend (positioned_widget (wf.third_027_removal_widget, third_027_removal_cp)) + world.extend (positioned_widget (wf.first_443_removal_widget, first_443_removal_cp)) + -- Set flipped + wf.first_027_removal_widget.set_flipped + wf.second_027_removal_widget.set_flipped + wf.resolution_removal_widget.set_flipped + wf.revenge_removal_widget.set_flipped + wf.valiant_removal_widget.set_flipped + wf.warspite_removal_widget.set_flipped + wf.victorious_removal_widget.set_flipped + wf.third_027_removal_widget.set_flipped + wf.first_443_removal_widget.set_flipped + -- Set flat + wf.first_027_removal_widget.set_flat + wf.second_027_removal_widget.set_flat + wf.resolution_removal_widget.set_flat + wf.revenge_removal_widget.set_flat + wf.valiant_removal_widget.set_flat + wf.warspite_removal_widget.set_flat + wf.victorious_removal_widget.set_flat + wf.third_027_removal_widget.set_flat + wf.first_443_removal_widget.set_flat + end + + add_uncommitted_box + -- Add the uncommitted box, making spots for possible widgets + local + rec: EV_MODEL_RECTANGLE + bot_rt: EV_COORDINATE + t: EV_MODEL_TEXT + cp: EV_COORDINATE + wf: like widget_factory + do + create bot_rt.make (uncommitted_box_cp.x + (1.5 * ship_size).floor, uncommitted_box_cp.y + 2 * ship_size) + create rec.make_with_points (uncommitted_box_cp, bot_rt) + world.extend (rec) + rec.set_foreground_color (color) + rec.set_background_color (lightened (color, 2.8)) + t := new_text ("Groups W, X, Y, Z%N uncommitted %N on Turn 1", turn_x_losses_font) + t.set_x_y (rec.x, rec.y) + world.extend (t) + -- Add widgets to the box using offset's from the `uncommitted_box_cp' + create cp + wf := widget_factory + -- Group W - Enterprise + cp.set_position (uncommitted_box_cp.x + gap_size, uncommitted_box_cp.y - 3 * gap_size) + world.extend (positioned_widget (wf.chester_widget, cp)) + cp.set_position (cp.x - 1, cp.y - 2) + world.extend (positioned_widget (wf.northampton_widget, cp)) + cp.set_position (cp.x - 1, cp.y - 2) + world.extend (positioned_widget (wf.salt_lake_city_widget, cp)) + cp.set_position (cp.x - 1, cp.y - 2) + world.extend (positioned_widget (wf.enterprise_widget, cp)) + -- Group X - Lexington + cp.set_position (uncommitted_box_cp.x + 3 * gap_size, uncommitted_box_cp.y) + world.extend (positioned_widget (wf.astoria_widget, cp)) + cp.set_position (cp.x + 1, cp.y - 2) + world.extend (positioned_widget (wf.portland_widget, cp)) + cp.set_position (cp.x + 1, cp.y - 2) + world.extend (positioned_widget (wf.chicago_widget, cp)) + cp.set_position (cp.x + 1, cp.y - 2) + world.extend (positioned_widget (wf.lexington_widget, cp)) + -- Group Y -Saratoga + cp.set_position (uncommitted_box_cp.x + 4 * gap_size, uncommitted_box_cp.y + ship_size + 2 * gap_size) + world.extend (positioned_widget (wf.saratoga_widget, cp)) + -- Group Z - Hornet + cp.set_position (uncommitted_box_cp.x - gap_size, uncommitted_box_cp.y + ship_size + gap_size) + world.extend (positioned_widget (wf.quincy_widget, cp)) + cp.set_position (cp.x - 1, cp.y - 2) + world.extend (positioned_widget (wf.vincennes_widget, cp)) + cp.set_position (cp.x - 1, cp.y - 2) + world.extend (positioned_widget (wf.yorktown_widget, cp)) + cp.set_position (cp.x - 1, cp.y - 2) + world.extend (positioned_widget (wf.hornet_widget, cp)) + -- Hide Group W + wf.chester_widget.hide + wf.northampton_widget.hide + wf.salt_lake_city_widget.hide + wf.enterprise_widget.hide + -- Hide Group X + wf.astoria_widget.hide + wf.portland_widget.hide + wf.chicago_widget.hide + wf.lexington_widget.hide + -- Hide Group Y + wf.saratoga_widget.hide + -- Hide group Z + wf.quincy_widget.hide + wf.vincennes_widget.hide + wf.yorktown_widget.hide + wf.hornet_widget.hide + end + + add_miscellaneous_text + -- Add the remaining text fields + local + cp: EV_COORDINATE + t: EV_MODEL_TEXT + s: STRING + do + create cp + s := " AUSTRALIA 1 Repair Point Each Turn %N" + s := s + "AT CEYLON 1 Repair Point Each Turn" + t := new_text (s, at_port_font) + cp.set (resolution_cp.x, turn_2_cp.y) + t.set_point_position (cp.x, cp.y) + world.extend (t) + t := new_text (" 3 Repair Points %N PEARL HARBOR", at_port_font) + cp.set (new_mexico_cp.x - gap_size, turn_2_cp.y) + t.set_point_position (cp.x, cp.y) + world.extend (t) + t := new_text (" 6 Repair Points %N AT PEARL HARBOR", at_port_font) + cp.set (colorado_cp.x, turn_3_cp.y) + t.set_point_position (cp.x, cp.y) + world.extend (t) + t := new_text (" 9 Repair Points %N AT PEARL HARBOR", at_port_font) + cp.set (colorado_cp.x, turn_4_cp.y) + t.set_point_position (cp.x, cp.y) + world.extend (t) + t := new_text (" 12 Repair Points %N AT PEARL HARBOR", at_port_font) + cp.set (colorado_cp.x, turn_5_cp.y) + t.set_point_position (cp.x, cp.y) + world.extend (t) + t := new_text (" 15 Repair Points %N AT PEARL HARBOR", at_port_font) + cp.set (colorado_cp.x, turn_6_cp.y) + t.set_point_position (cp.x, cp.y) + world.extend (t) + t := new_text (" 15 Repair Points %N AT PEARL HARBOR", at_port_font) + cp.set (colorado_cp.x, turn_7_cp.y) + t.set_point_position (cp.x, cp.y) + world.extend (t) + t := new_text (" 15 Repair Points %N AT PEARL HARBOR", at_port_font) + cp.set (colorado_cp.x, turn_8_cp.y) + t.set_point_position (cp.x, cp.y) + world.extend (t) + t := new_text ("AT PEARL HARBOR 15 Repair Points", at_port_font) + cp.set (colorado_cp.x, new_york_cp.y - 2 * gap_size) + t.set_point_position (cp.x, cp.y) + world.extend (t) + -- some more text + t := new_text ("AT CEYLON", at_port_font) + cp.set (valiant_cp.x + 2 * gap_size, valiant_cp.y - 3 * gap_size) + t.set_point_position (cp.x, cp.y) + world.extend (t) + t := new_text ("AT CEYLON", at_port_font) + cp.set (devonshire_cp.x + 2 * gap_size, devonshire_cp.y - 3 * gap_size) + t.set_point_position (cp.x, cp.y) + world.extend (t) + -- also available + t := new_text (" Also %NAvailable", turn_x_losses_font) + cp.set (tenth_af_cp.x, tenth_af_cp.y - 3 * gap_size) + t.set_point_position (cp.x, cp.y) + world.extend (t) + s := "Also Available" + t := new_text (s, turn_x_losses_font) + cp.set (raaf_cp.x + 2 * gap_size, raaf_cp.y - 2 * gap_size) + t.set_point_position (cp.x, cp.y) + world.extend (t) + t := new_text (s, turn_x_losses_font) + cp.set (marine_cp.x + 2 * gap_size, marine_cp.y - 2 * gap_size) + t.set_point_position (cp.x, cp.y) + world.extend (t) + t := new_text (s, turn_x_losses_font) + cp.set (fourteenth_af_cp.x + 2 * gap_size, fourteenth_af_cp.y - 2 * gap_size) + t.set_point_position (cp.x, cp.y) + world.extend (t) + -- Also Available for F-boat + t := new_text ("Also Available", turn_x_losses_font) + cp.set (f_boat_cp.x, f_boat_cp.y - 2 * gap_size) + t.set_point_position (cp.x, cp.y) + world.extend (t) + -- Replace with texts + s := "(replace with other British if sunk)" + t := new_text (s, small_font) + cp.set (first_027_removal_cp.x, first_027_removal_cp.y + ship_size + gap_size) + t.set_point_position (cp.x, cp.y) + world.extend (t) + t := new_text (s, small_font) + cp.set (revenge_removal_cp.x, revenge_removal_cp.y + ship_size + gap_size) + t.set_point_position (cp.x, cp.y) + world.extend (t) + s := "(replace with other %NBritish if sunk)" + t := new_text (s, small_font) + cp.set (victorious_removal_cp.x + ship_size + gap_size, victorious_removal_cp.y + gap_size) + t.set_point_position (cp.x, cp.y) + world.extend (t) + -- REMOVAL texts + s := "REMOVALS" + t := new_text (s, turn_x_losses_font) + cp.set (first_027_removal_cp.x + 5 * gap_size, first_027_removal_cp.y - 2 * gap_size) + t.set_point_position (cp.x, cp.y) + world.extend (t) + t := new_text (s, turn_x_losses_font) + cp.set (revenge_removal_cp.x + 5 * gap_size, revenge_removal_cp.y - 2 * gap_size) + t.set_point_position (cp.x, cp.y) + world.extend (t) + t := new_text (s, turn_x_losses_font) + cp.set (third_027_removal_cp.x + 5 * gap_size, third_027_removal_cp.y - 2 * gap_size) + t.set_point_position (cp.x, cp.y) + world.extend (t) + s := "REMOVAL" + t := new_text (s, turn_x_losses_font) + cp.set (victorious_removal_cp.x + gap_size, victorious_removal_cp.y - 2 * gap_size) + t.set_point_position (cp.x, cp.y) + world.extend (t) + end + + add_copyright_text + -- Add the copy-right notices to each chart + local + cp: EV_COORDINATE + t: EV_MODEL_TEXT + s: STRING + f: EV_FONT + do + create cp + -- Copyright + s := "Copyright 1977, The Avalon Hill Game Co. Balto, MD Printed in U.S.A." + f := small_font + t := new_text (s, f) + cp.set (bottom_right_cp.x - t.width - gap_size, bottom_right_cp.y - 2 * gap_size) + t.set_point_position (cp.x, cp.y) + world.extend (t) + end + +feature -- Access + + location: LOCATION + -- A {LOCATION} from the {VITP_GAME} used in `draw' to determine + -- if a unit is on this chart or somewhere else (i.e. in the game.) + do + Result := game.allied_oa_chart + end + + title: STRING = "Allied Order of Appearance Chart" + -- The text at the top of this chart + +feature -- Element change + + set_target (a_item: like game) + -- Associate `a_item' with Current. + local + afw: like widget_factory.allied_forces_widgets + do + Precursor (a_item) + afw := widget_factory.allied_forces_widgets + -- Make the widgets white +-- afw.first_027_removal_widget.set_flipped +-- afw.second_027_removal_widget.set_flipped +-- afw.resolution_removal_widget.set_flipped +-- afw.revenge_removal_widget.set_flipped +-- afw.valiant_removal_widget.set_flipped +-- afw.warspite_removal_widget.set_flipped +-- afw.victorious_removal_widget.set_flipped +-- afw.third_027_removal_widget.set_flipped +-- afw.first_443_removal_widget.set_flipped +-- -- Make it look like print +-- afw.first_027_removal_widget.set_flat +-- afw.second_027_removal_widget.set_flat +-- afw.resolution_removal_widget.set_flat +-- afw.revenge_removal_widget.set_flat +-- afw.valiant_removal_widget.set_flat +-- afw.warspite_removal_widget.set_flat +-- afw.victorious_removal_widget.set_flat +-- afw.third_027_removal_widget.set_flat +-- afw.first_443_removal_widget.set_flat + end + +feature -- Basic operations + + draw + -- Redraw the view. + -- Redefined to account for "Location Uncertain" widgets from turn 1. + local + t: VITP_WIDGET_TABLE [ATTACK_UNIT_WIDGET, ATTACK_UNIT] + w: ATTACK_UNIT_WIDGET +-- s: STRING + u: ATTACK_UNIT + do + Precursor + from group_widgets.start + until group_widgets.after + loop + w := group_widgets.item + if not w.is_view_empty and then w.unit.location = location then + w.show + else + w.hide + end + group_widgets.forth + end + end + +feature {NONE} -- Implementation + + widget_factory: ALLIED_FORCES_WIDGET_FACTORY + -- Container for all the widget (e.g. attack widget, + -- location widget, etc) + + group_widgets: LINKED_LIST [SHIP_WIDGET] + -- To keep track of the "Location Uncertain" widgets, so they + -- can be shown in `draw' only if they are on this chart. + +feature {NONE} -- Control point constants + + bottom_right_cp: EV_COORDINATE once create Result.make (260, 355) end + -- Change the Turn-x control points + turn_1_cp: EV_COORDINATE do create Result end + turn_2_cp: EV_COORDINATE do create Result.make (7, 14) end + turn_3_cp: EV_COORDINATE do create Result.make (turn_2_cp.x, 50) end + turn_4_cp: EV_COORDINATE do create Result.make (turn_2_cp.x, 85) end + turn_5_cp: EV_COORDINATE do create Result.make (turn_2_cp.x, 120) end + turn_6_cp: EV_COORDINATE do create Result.make (turn_2_cp.x, 155) end + turn_7_cp: EV_COORDINATE do create Result.make (turn_2_cp.x, 215) end + turn_8_cp: EV_COORDINATE do create Result.make (turn_2_cp.x, 275) end + turn_9_cp: EV_COORDINATE do create Result.make (turn_2_cp.x, 310) end + -- To some date text + to_dec_41_cp: EV_COORDINATE do create Result.make (turn_1_cp.x + 2, turn_1_cp.y + 8) end + to_may_42_cp: EV_COORDINATE do create Result.make (turn_2_cp.x + 2, turn_2_cp.y + 8) end + to_sep_42_cp: EV_COORDINATE do create Result.make (turn_3_cp.x + 2, turn_3_cp.y + 8) end + to_jan_43_cp: EV_COORDINATE do create Result.make (turn_4_cp.x + 2, turn_4_cp.y + 8) end + to_jun_43_cp: EV_COORDINATE do create Result.make (turn_5_cp.x + 2, turn_5_cp.y + 8) end + to_jan_44_cp: EV_COORDINATE do create Result.make (turn_6_cp.x + 2, turn_6_cp.y + 8) end + to_may_44_cp: EV_COORDINATE do create Result.make (turn_7_cp.x + 2, turn_7_cp.y + 8) end + to_oct_44_cp: EV_COORDINATE do create Result.make (turn_8_cp.x + 2, turn_8_cp.y + 8) end + to_jan_45_cp: EV_COORDINATE do create Result.make (turn_9_cp.x + 2, turn_9_cp.y + 8) end + -- Change the Turn-x-losses control points + turn_1_losses_cp: EV_COORDINATE do create Result.make (194, 64) end + turn_2_losses_cp: EV_COORDINATE do create Result.make (204, 98) end + turn_3_losses_cp: EV_COORDINATE do create Result.make (200, 132) end + turn_4_losses_cp: EV_COORDINATE do create Result.make (194, 192) end + turn_5_losses_cp: EV_COORDINATE do create Result.make (194, 254) end + turn_6_losses_cp: EV_COORDINATE do create Result.make (194, 288) end + turn_7_losses_cp: EV_COORDINATE do create Result.make (194, 324) end + + -- Turn 2 + Royal_sovereign_cp: EV_COORDINATE do create Result.make (turn_2_cp.x, Turn_2_cp.y + 12) end + ramilies_cp: EV_COORDINATE do create Result.make (royal_sovereign_cp.x + ship_size, royal_sovereign_cp.y) end + resolution_cp: EV_COORDINATE do create Result.make (ramilies_cp.x + ship_size, royal_sovereign_cp.y) end + warspite_cp: EV_COORDINATE do create Result.make (resolution_cp.x + ship_size, royal_sovereign_cp.y) end + indomitable_cp: EV_COORDINATE do create Result.make (warspite_cp.x + ship_size, royal_sovereign_cp.y) end + formidable_cp: EV_COORDINATE do create Result.make (indomitable_cp.x + ship_size, royal_sovereign_cp.y) end + cornwall_cp: EV_COORDINATE do create Result.make (formidable_cp.x + ship_size, royal_sovereign_cp.y) end + dorestshire_cp: EV_COORDINATE do create Result.make (cornwall_cp.x + ship_size, royal_sovereign_cp.y) end + new_mexico_cp: EV_COORDINATE do create Result.make (dorestshire_cp.x + ship_size + gap_size, royal_sovereign_cp.y) end + idaho_cp: EV_COORDINATE do create Result.make (new_mexico_cp.x + ship_size, royal_sovereign_cp.y) end + uncommitted_box_cp: EV_COORDINATE do create Result.make (idaho_cp.x + ship_size, Turn_2_cp.y + gap_size) end + tenth_af_cp: EV_COORDINATE do create Result.make (240, 22) end + eleventh_af_cp: EV_COORDINATE do create Result.make (tenth_af_cp.x, tenth_af_cp.y + air_size) end + -- Turn 3 + north_carolina_cp: EV_COORDINATE do create Result.make (turn_2_cp.x, Turn_3_cp.y + 12) end + mississippi_cp: EV_COORDINATE do create Result.make (north_carolina_cp.x + ship_size, north_carolina_cp.y) end + colorado_cp: EV_COORDINATE do create Result.make (mississippi_cp.x + ship_size, north_carolina_cp.y) end + marines_1_cp: EV_COORDINATE do create Result.make (colorado_cp.x + ship_size, north_carolina_cp.y + ship_size - air_size) end + marines_2_cp: EV_COORDINATE do create Result.make (marines_1_cp.x + air_size, marines_1_cp.y) end + raaf_cp: EV_COORDINATE do create Result.make (marines_2_cp.x + air_size + 2 * gap_size, marines_1_cp.y) end + rnzaf_cp: EV_COORDINATE do create Result.make (raaf_cp.x + air_size, marines_1_cp.y) end + valiant_cp: EV_COORDINATE do create Result.make (rnzaf_cp.x + air_size + 4 * gap_size, north_carolina_cp.y) end + illustrious_cp: EV_COORDINATE do create Result.make (valiant_cp.x + ship_size, north_carolina_cp.y) end + -- Turn 4 + south_dakota_cp: EV_COORDINATE do create Result.make (turn_2_cp.x, turn_4_cp.y + 12) end + indiana_cp: EV_COORDINATE do create Result.make (south_dakota_cp.x + ship_size, south_dakota_cp.y) end + washington_cp: EV_COORDINATE do create Result.make (indiana_cp.x + ship_size, south_dakota_cp.y) end + wasp_cp: EV_COORDINATE do create Result.make (washington_cp.x + ship_size, south_dakota_cp.y) end + marine_cp: EV_COORDINATE do create Result.make (wasp_cp.x + ship_size + gap_size, south_dakota_cp.y + ship_size - air_size) end + thirteenth_af_cp: EV_COORDINATE do create Result.make (marine_cp.x + air_size, marine_cp.y) end + devonshire_cp: EV_COORDINATE do create Result.make (thirteenth_af_cp.x + air_size + gap_size, south_dakota_cp.y) end + shropshire_cp: EV_COORDINATE do create Result.make (devonshire_cp.x + ship_size, south_dakota_cp.y) end + first_027_removal_cp: EV_COORDINATE do create Result.make (shropshire_cp.x + ship_size + gap_size, south_dakota_cp.y) end + second_027_removal_cp: EV_COORDINATE do create Result.make (first_027_removal_cp.x + ship_size, south_dakota_cp.y) end + -- Turn 5 + massachusetts_cp: EV_COORDINATE do create Result.make (turn_2_cp.x, turn_5_cp.y + 12) end + wichita_cp: EV_COORDINATE do create Result.make (massachusetts_cp.x + ship_size, massachusetts_cp.y) end + victorious_cp: EV_COORDINATE do create Result.make (wichita_cp.x + ship_size, massachusetts_cp.y) end + marines_3_cp: EV_COORDINATE do create Result.make (victorious_cp.x + ship_size, massachusetts_cp.y + ship_size - air_size) end + fourteenth_af_cp: EV_COORDINATE do create Result.make (marines_3_cp.x + air_size + gap_size, marines_3_cp.y) end + naval_cp: EV_COORDINATE do create Result.make (fourteenth_af_cp.x + air_size, fourteenth_af_cp.y) end + resolution_removal_cp: EV_COORDINATE do create Result.make (naval_cp.x + air_size + 2 * gap_size, massachusetts_cp.y) end + revenge_removal_cp: EV_COORDINATE do create Result.make (resolution_removal_cp.x + ship_size, massachusetts_cp.y) end + valiant_removal_cp: EV_COORDINATE do create Result.make (revenge_removal_cp.x + ship_size, massachusetts_cp.y) end + warspite_removal_cp: EV_COORDINATE do create Result.make (valiant_removal_cp.x + ship_size, massachusetts_cp.y) end + -- Turn 6 + alabama_cp: EV_COORDINATE do create Result.make (turn_2_cp.x, turn_6_cp.y + 12) end + essex_cp: EV_COORDINATE do create Result.make (alabama_cp.x + ship_size, alabama_cp.y) end + cv_10_cp: EV_COORDINATE do create Result.make (essex_cp.x + ship_size, alabama_cp.y) end + cv_16_cp: EV_COORDINATE do create Result.make (cv_10_cp.x + ship_size, alabama_cp.y) end + independence_cp: EV_COORDINATE do create Result.make (cv_16_cp.x + ship_size, alabama_cp.y) end + princeton_cp: EV_COORDINATE do create Result.make (independence_cp.x + ship_size, alabama_cp.y) end + belleau_wood_cp: EV_COORDINATE do create Result.make (princeton_cp.x + ship_size, alabama_cp.y) end + cowpens_cp: EV_COORDINATE do create Result.make (belleau_wood_cp.x + ship_size, alabama_cp.y) end + monterey_cp: EV_COORDINATE do create Result.make (cowpens_cp.x + ship_size, alabama_cp.y) end + baltimore_cp: EV_COORDINATE do create Result.make (monterey_cp.x + ship_size, alabama_cp.y) end + boston_cp: EV_COORDINATE do create Result.make (baltimore_cp.x + ship_size, alabama_cp.y) end + marines_4_cp: EV_COORDINATE do create Result.make (boston_cp.x + ship_size, alabama_cp.y + ship_size - air_size) end + victorious_removal_cp: EV_COORDINATE do create Result.make (alabama_cp.x, turn_6_cp.y + 39) end + -- Turn 7 + iowa_cp: EV_COORDINATE do create Result.make (turn_2_cp.x, turn_7_cp.y + 12) end + new_jersey_cp: EV_COORDINATE do create Result.make (iowa_cp.x + ship_size, iowa_cp.y) end + intrepid_cp: EV_COORDINATE do create Result.make (new_jersey_cp.x + ship_size, iowa_cp.y) end + cv_12_cp: EV_COORDINATE do create Result.make (intrepid_cp.x + ship_size, iowa_cp.y) end + bunker_hill_cp: EV_COORDINATE do create Result.make (cv_12_cp.x + ship_size, iowa_cp.y) end + cv_18_cp: EV_COORDINATE do create Result.make (bunker_hill_cp.x + ship_size, iowa_cp.y) end + bataan_cp: EV_COORDINATE do create Result.make (cv_18_cp.x + ship_size, iowa_cp.y) end + cabot_cp: EV_COORDINATE do create Result.make (bataan_cp.x + ship_size, iowa_cp.y) end + langley_ii_cp: EV_COORDINATE do create Result.make (cabot_cp.x + ship_size, iowa_cp.y) end + canberra_ii_cp: EV_COORDINATE do create Result.make (langley_ii_cp.x + ship_size, iowa_cp.y) end + quincy_ii_cp: EV_COORDINATE do create Result.make (canberra_ii_cp.x + ship_size, iowa_cp.y) end + f_boat_cp: EV_COORDINATE do create Result.make (quincy_ii_cp.x + ship_size + 4 * gap_size, iowa_cp.y) end + third_027_removal_cp: EV_COORDINATE do create Result.make (iowa_cp.x, iowa_cp.y + ship_size + 3 * gap_size) end + first_443_removal_cp: EV_COORDINATE do create Result.make (third_027_removal_cp.x + ship_size, third_027_removal_cp.y) end + -- Turn 8 + wisconsin_cp: EV_COORDINATE do create Result.make (turn_2_cp.x, turn_8_cp.y + 12) end + missouri_cp: EV_COORDINATE do create Result.make (wisconsin_cp.x + ship_size, wisconsin_cp.y) end + ticonderoga_cp: EV_COORDINATE do create Result.make (missouri_cp.x + ship_size, wisconsin_cp.y) end + san_jacinto_cp: EV_COORDINATE do create Result.make (ticonderoga_cp.x + ship_size, wisconsin_cp.y) end + marines_5_cp: EV_COORDINATE do create Result.make (san_jacinto_cp.x + ship_size, wisconsin_cp.y + ship_size - air_size) end + -- Turn_9 + new_york_cp: EV_COORDINATE do create Result.make (turn_2_cp.x, turn_9_cp.y + 12) end + texas_cp: EV_COORDINATE do create Result.make (new_york_cp.x + ship_size, new_york_cp.y) end + alaska_cp: EV_COORDINATE do create Result.make (texas_cp.x + ship_size, new_york_cp.y) end + franklin_cp: EV_COORDINATE do create Result.make (alaska_cp.x + ship_size, new_york_cp.y) end + shangri_la_cp: EV_COORDINATE do create Result.make (franklin_cp.x + ship_size, new_york_cp.y) end + +end diff --git a/jj_vitp/Interface/views/allied_starting_forces_view.e b/jj_vitp/Interface/views/allied_starting_forces_view.e new file mode 100644 index 0000000..cb23455 --- /dev/null +++ b/jj_vitp/Interface/views/allied_starting_forces_view.e @@ -0,0 +1,473 @@ +note + description: "[ + A {VIEW} that displays the Allied units that enter + the {VITP_GAME} on turn 1. + ]" + author: "Jimmy J. Johnson" + date: "11/11/23" + copyright: "Copyright (c) 2023, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +class + ALLIED_STARTING_FORCES_VIEW + +inherit + + ORDER_OF_APPEARANCE_VIEW + redefine + initialize, + widget_factory, + add_return_boxes, + add_widgets, + add_units, + add_starting_control_widgets, + add_miscellaneous_text, + add_copyright_text + end + +create + make + +feature {NONE} -- Initialization + + initialize + -- Set up attributes + do + nationality := {NATIONALITY_CONSTANTS}.allied + Precursor + end + + add_turns + -- Add the "TURN X" and "TO date" texts + local + i: INTEGER + do + from i := 1 + until i > 1 + loop + add_turn_text (i) + i := i + 1 + end + end + + add_return_boxes + -- Add the "Returning Air/Land Units" boxes + -- Redefined to do nothing + do + end + + add_widgets + -- Create the EV_TEXT objects for the chart + do + Precursor + end + + add_units + -- Add {ATTACK_UNIT_WIDGETS} to Current + local + f: like widget_factory + do + Precursor + f := widget_factory + -- On Battleship Row (Pearl Harbor) + add_model (positioned_widget (f.nevada_widget, nevada_cp)) + add_model (positioned_widget (f.arizona_widget, arizona_cp)) + add_model (positioned_widget (f.west_virginia_widget, west_virginia_cp)) + add_model (positioned_widget (f.tennessee_widget, tennessee_cp)) + add_model (positioned_widget (f.oklahoma_widget, oklahoma_cp)) + add_model (positioned_widget (f.maryland_widget, maryland_cp)) + add_model (positioned_widget (f.california_widget, california_cp)) + add_model (positioned_widget (f.pennsylvania_widget, pennsylvania_cp)) + add_model (positioned_widget (f.new_orleans_widget, new_orleans_cp)) + add_model (positioned_widget (f.san_francisco_widget, san_francisco_cp)) + add_model (positioned_widget (f.seventh_af_widget, seventh_af_cp)) + -- At Sea (cannot move) + add_model (positioned_widget (f.hermes_widget, hermes_cp)) + add_model (positioned_widget (f.revenge_widget, revenge_cp)) + add_model (positioned_widget (f.prince_of_wales_widget, prince_of_wales_cp)) + add_model (positioned_widget (f.repulse_widget, repulse_cp)) + add_model (positioned_widget (f.fifth_af_widget, fifth_af_cp)) + add_model (positioned_widget (f.louisville_widget, louisville_cp)) + add_model (positioned_widget (f.pensacola_widget, pensacola_cp)) + add_model (positioned_widget (f.indianapolis_widget, indianapolis_cp)) + add_model (positioned_widget (f.minneapolis_widget, minneapolis_cp)) + -- In Port (may move) + add_model (positioned_widget (f.houston_widget, houston_cp)) + add_model (positioned_widget (f.exeter_widget, exeter_cp)) + add_model (positioned_widget (f.de_ruyter_widget, de_ruyter_cp)) + add_model (positioned_widget (f.australia_ship_widget, australia_cp)) + add_model (positioned_widget (f.canberra_widget, canberra_cp)) + -- Group W + add_model (positioned_widget (f.enterprise_widget, enterprise_cp)) + add_model (positioned_widget (f.salt_lake_city_widget, salt_lake_city_cp)) + add_model (positioned_widget (f.northampton_widget, northampton_cp)) + add_model (positioned_widget (f.chester_widget, chester_cp)) + -- Group X + add_model (positioned_widget (f.lexington_widget, lexington_cp)) + add_model (positioned_widget (f.chicago_widget, chicago_cp)) + add_model (positioned_widget (f.portland_widget, portland_cp)) + add_model (positioned_widget (f.astoria_widget, astoria_cp)) + -- Group Y + add_model (positioned_widget (f.saratoga_widget, saratoga_cp)) + -- Group Z + add_model (positioned_widget (f.hornet_widget, hornet_cp)) + add_model (positioned_widget (f.yorktown_widget, yorktown_cp)) + add_model (positioned_widget (f.vincennes_widget, vincennes_cp)) + add_model (positioned_widget (f.quincy_widget, quincy_cp)) + end + + add_starting_control_widgets + -- Add the "Starting Control" text and markers if required + local + cp:EV_COORDINATE + t: EV_MODEL_TEXT + s: STRING + b: EV_MODEL_GROUP + do + Precursor + create cp + -- Add "Starting Control" widgets + s := "STARTING %N CONTROL" + t := new_text (s, turn_x_losses_font) + cp.set (seventh_af_cp.x + 3 * air_size + air_size // 2, san_francisco_cp.y - ship_size // 3) + t.set_x_y (cp.x, cp.y) + world.extend (t) + -- Position the `flag' marker + cp.set (t.x, san_francisco_cp.y + air_size // 3) + flag.set_x_y (cp.x, cp.y) + -- Add boxes around the port names + s := "Hawaian Islands %N% + %U.S. Mandate %N% + %Coral Sea %N% + %South Pacific %N% + %Central Pacific %N% + %Indian Ocian %N% + %Bay of Bengal %N% + %Indonesia" + b := new_jagged_box (s, 9, 9, 9, {MATH_CONST}.pi_2) + b.set_x_y (flag.x, flag.y + air_size + 5 * gap_size) + world.extend (b) + -- Position `big_marker' and `little_marker' relative to `flag' + big_marker.set_x_y (flag.x, chester_cp.y - ship_size // 4) + little_marker.set_x_y (flag.x - air_size - air_size // 2, quincy_cp.y + air_size + air_size // 4) + -- Add boxes around the port names + s := "Pearl Harbor %N% + %Samoa %N% + %Australia %N% + %Ceylon %N% + %Singapore" + b := new_jagged_box (s, 6, 9, 6, {MATH_CONST}.pi_2) + b.set_x_y (flag.x, big_marker.y + ship_size - air_size // 3 ) + world.extend (b) + -- Add boxes around the port names + s := "%N% + %Johnston Island %N% + %Dutch Harbor %N% + %Attu %N% + %New Hebrides %N% + %Guadalcanal %N% + %Port Moreby %N% + %Lae %N% + %Midway %N% + %Andaman Islands %N% + %Phillipines" + b := new_jagged_box (s, 9, 11, 9, 0) + b.set_x_y (flag.x, little_marker.y) + world.extend (b) + end + + add_miscellaneous_text + -- Create the remaining EV_TEXT objects for the chart + local + cp: EV_COORDINATE + t: EV_MODEL_TEXT + s: STRING + do + create cp + -- On Battleship Row (Pearl Harbor) + s := "ON BATTLESHIP ROW (PEARL HARBOR)" + t := new_text (s, at_port_font) + cp.set (west_virginia_cp.x, west_virginia_cp.y - air_size // 2) + t.set_point_position (cp.x, cp.y) + world.extend (t) + -- At Sea (cannot move) + s := "AT SEA (CANNOT MOVE)" + t := new_text (s, at_port_font) + cp.set (hermes_cp.x, hermes_cp.y - air_size // 2) + t.set_point_position (cp.x, cp.y) + world.extend (t) + -- Bay of Bengal + s := "BAY OF BENGAL" + t := new_text (s, to_date_font) + cp.set (hermes_cp.x, hermes_cp.y - air_size // 4) + t.set_point_position (cp.x, cp.y) + world.extend (t) + -- Indonesia + s := "INDONESIA" + t := new_text (s, to_date_font) + cp.set (prince_of_wales_cp.x, hermes_cp.y - air_size // 4) + t.set_point_position (cp.x, cp.y) + world.extend (t) + -- Coral Sea + s := "CORAL SEA" + t := new_text (s, to_date_font) + cp.set (louisville_cp.x, hermes_cp.y - air_size // 4) + t.set_point_position (cp.x, cp.y) + world.extend (t) + -- US Mandate + s := "US MANDATE" + t := new_text (s, to_date_font) + cp.set (pensacola_cp.x, hermes_cp.y - air_size // 4) + t.set_point_position (cp.x, cp.y) + world.extend (t) + -- Hawaiian Islands + s := "HAWAIIAN ISLANDS" + t := new_text (s, to_date_font) + cp.set (indianapolis_cp.x, hermes_cp.y - air_size // 4) + t.set_point_position (cp.x, cp.y) + world.extend (t) + -- In Port (may move) + s := "IN PORT (MAY MOVE)" + t := new_text (s, at_port_font) + cp.set (houston_cp.x, houston_cp.y - air_size // 2) + t.set_point_position (cp.x, cp.y) + world.extend (t) + -- Philippines + s := "PHILIPPINES" + t := new_text (s, to_date_font) + cp.set (houston_cp.x, houston_cp.y - air_size // 4) + t.set_point_position (cp.x, cp.y) + world.extend (t) + -- Singapore + s := "SINGAPORE" + t := new_text (s, to_date_font) + cp.set (exeter_cp.x, houston_cp.y - air_size // 4) + t.set_point_position (cp.x, cp.y) + world.extend (t) + -- Australia + s := "AUSTRALIA" + t := new_text (s, to_date_font) + cp.set (australia_cp.x, houston_cp.y - air_size // 4) + t.set_point_position (cp.x, cp.y) + world.extend (t) + -- Location Uncertain + s := "LOCATION UNCERTAIN" + t := new_text (s, at_port_font) + cp.set (enterprise_cp.x, houston_cp.y - air_size // 2) + t.set_point_position (cp.x, cp.y) + world.extend (t) + -- Group W + s := "GROUP W" + t := new_text (s, to_date_font) + cp.set (enterprise_cp.x, houston_cp.y - air_size // 4) + t.set_point_position (cp.x, cp.y) + world.extend (t) + -- Location Uncertain + s := "LOCATION UNCERTAIN" + t := new_text (s, at_port_font) + cp.set (lexington_cp.x, lexington_cp.y - air_size // 2) + t.set_point_position (cp.x, cp.y) + world.extend (t) + -- Group X + s := "GROUP X" + t := new_text (s, to_date_font) + cp.set (lexington_cp.x, lexington_cp.y - air_size // 4) + t.set_point_position (cp.x, cp.y) + world.extend (t) + -- Group Y + s := "GROUP Y" + t := new_text (s, to_date_font) + cp.set (saratoga_cp.x, lexington_cp.y - air_size // 4) + t.set_point_position (cp.x, cp.y) + world.extend (t) + -- Group Z + s := "GROUP Z" + t := new_text (s, to_date_font) + cp.set (hornet_cp.x, lexington_cp.y - air_size // 4) + t.set_point_position (cp.x, cp.y) + world.extend (t) + -- 1 = Central Pacific... + s := "1 = Central Pcific; 2,3 = Hawaiian Islands; 4-6 = U.S.A. -- arrival Turn 2" + t := new_text (s, small_font) + cp.set (astoria_cp.x + ship_size // 4, astoria_cp.y - air_size // 2) + t.set_point_position (cp.x, cp.y) + world.extend (t) + end + + add_copyright_text + -- Add the copy-right notices to each chart + local + rec: EV_MODEL_RECTANGLE + w, h: INTEGER + m: INTEGER -- text margin in box + cp: EV_COORDINATE + t1, t2: EV_MODEL_TEXT + s: STRING + f: EV_FONT + do + create cp + w := 5 * ship_size + air_size + h := 2 * air_size + m := gap_size + -- Make the box + cp.set (bottom_right_cp.x - w, bottom_right_cp.y + ship_size) + create rec.make_rectangle (cp.x, cp.y, w, h) + rec.set_foreground_color (color) +-- rec.set_background_color (lightened (color, 2.8)) + world.extend (rec) + -- Design Department + s := "DESIGN DEPARTMENT" + f := small_font + f.set_weight ({EV_FONT_CONSTANTS}.weight_bold) + t1 := new_text (s, f) + cp.set (rec.x , rec.point_a.y + 3 * m) + t1.set_x_y (cp.x, cp.y) + world.extend (t1) + + -- The left half of the text + f.set_family ({EV_FONT_CONSTANTS}.family_modern) + f.set_weight ({EV_FONT_CONSTANTS}.weight_thin) + s := "%T We will answer questions about the play of this %N% + %game at no charge but only if you enclose a %N% + %stamped, self-addressed envelope with your query. %N% + %Before writing to us however, we suggest %N% + %thoughtful reference to the rules which should" + t1 := new_text (s, f) + cp.set (rec.point_a.x + m, rec.point_a.y + 5 * m) + t1.set_point_position (cp.x, cp.y) + world.extend (t1) + -- The right half of the text + s := "answer any question and save you time and %N% + %postage. For a current replacment parts price %N% + %list send a stamped, self-addressed envelope to %N% + %The Avalon Hill Co., 4517 Harford Rd. Balti- %N% + %more MD 21214" + t2 := new_text (s, f) + cp.set (rec.point_b.x - m - t2.width, t1.point_y) + t2.set_point_position (cp.x, cp.y) + world.extend (t2) + -- The company name + s := " The %N% + %AVALON HILL %N% + %Game Company" + t2 := new_text (s, company_name_font) + cp.set (0, bottom_right_cp.y + ship_size // 2) + t2.set_point_position (cp.x, cp.y) + world.extend (t2) + -- The company address + s := "4517 Harford Road, Baltimore, MD 21214" + f.set_family ({EV_FONT_CONSTANTS}.family_modern) + f.set_weight ({EV_FONT_CONSTANTS}.weight_bold) + f.set_height (4) + t2 := new_text (s, f) + cp.set (top_left_cp.x + gap_size, bottom_right_cp.y + 3 * air_size) + t2.set_point_position (cp.x, cp.y) + world.extend (t2) + end + +feature -- Access + + location: LOCATION + -- A {LOCATION} from the {VITP_GAME} used in `draw' to determine + -- if a unit is on this chart or somewhere else (i.e. in the game.) + do + Result := game.allied_starting_forces_chart + end + + title: STRING = "Allied Starting Forces" + -- The text at the top of this chart + +feature {NONE} -- Implementation + + widget_factory: ALLIED_FORCES_WIDGET_FACTORY + -- Hold all the widgets + + company_name_font: EV_FONT + -- Large, bold, and italic + once + create Result + Result.set_height (11) + Result.set_shape ({EV_FONT_CONSTANTS}.shape_italic) + Result.set_weight ({EV_FONT_CONSTANTS}.weight_bold) + Result.set_family ({EV_FONT_CONSTANTS}.family_roman) + end + +feature {NONE} -- Control point constants + + bottom_right_cp: EV_COORDINATE once create Result.make (254, 150) end + -- Turn X text (not used) + turn_1_cp: EV_COORDINATE do create Result.make (7, 14) end + turn_2_cp: EV_COORDINATE do create Result end + turn_3_cp: EV_COORDINATE do create Result end + turn_4_cp: EV_COORDINATE do create Result end + turn_5_cp: EV_COORDINATE do create Result end + turn_6_cp: EV_COORDINATE do create Result end + turn_7_cp: EV_COORDINATE do create Result end + turn_8_cp: EV_COORDINATE do create Result end + turn_9_cp: EV_COORDINATE do create Result end + -- To some date text (not used) + to_dec_41_cp: EV_COORDINATE do create Result end + to_may_42_cp: EV_COORDINATE do create Result end + to_sep_42_cp: EV_COORDINATE do create Result end + to_jan_43_cp: EV_COORDINATE do create Result end + to_jun_43_cp: EV_COORDINATE do create Result end + to_jan_44_cp: EV_COORDINATE do create Result end + to_may_44_cp: EV_COORDINATE do create Result end + to_oct_44_cp: EV_COORDINATE do create Result end + to_jan_45_cp: EV_COORDINATE do create Result end + -- Turn x losses (not used) + turn_1_losses_cp: EV_COORDINATE do create Result end + turn_2_losses_cp: EV_COORDINATE do create Result end + turn_3_losses_cp: EV_COORDINATE do create Result end + turn_4_losses_cp: EV_COORDINATE do create Result end + turn_5_losses_cp: EV_COORDINATE do create Result end + turn_6_losses_cp: EV_COORDINATE do create Result end + turn_7_losses_cp: EV_COORDINATE do create Result end + + -- On Battleship Row + nevada_cp: EV_COORDINATE do create Result.make (Turn_1_cp.x, Turn_1_cp.y + 12) end + arizona_cp: EV_COORDINATE do create Result.make (nevada_cp.x + 1 * ship_size, nevada_cp.y) end + west_virginia_cp: EV_COORDINATE do create Result.make (nevada_cp.x + 2 * ship_size, nevada_cp.y) end + tennessee_cp: EV_COORDINATE do create Result.make (nevada_cp.x + 3 * ship_size, nevada_cp.y) end + oklahoma_cp: EV_COORDINATE do create Result.make (nevada_cp.x + 4 * ship_size, nevada_cp.y) end + maryland_cp: EV_COORDINATE do create Result.make (nevada_cp.x + 5 * ship_size, nevada_cp.y) end + california_cp: EV_COORDINATE do create Result.make (nevada_cp.x + 6 * ship_size, nevada_cp.y) end + pennsylvania_cp: EV_COORDINATE do create Result.make (nevada_cp.x + 7 * ship_size, nevada_cp.y) end + new_orleans_cp: EV_COORDINATE do create Result.make (nevada_cp.x + 8 * ship_size, nevada_cp.y) end + san_francisco_cp: EV_COORDINATE do create Result.make (nevada_cp.x + 8 * ship_size, nevada_cp.y) end + seventh_af_cp: EV_COORDINATE do create Result.make (nevada_cp.x + 9 * ship_size, nevada_cp.y + ship_size - air_size) end + -- At Sea (cannot move) + hermes_cp: EV_COORDINATE do create Result.make (turn_1_cp.x, nevada_cp.y + ship_size + 5 * gap_size) end + revenge_cp: EV_COORDINATE do create Result.make (nevada_cp.x + ship_size, hermes_cp.y) end + prince_of_wales_cp: EV_COORDINATE do create Result.make (revenge_cp.x + ship_size + 4 * gap_size, hermes_cp.y) end + repulse_cp: EV_COORDINATE do create Result.make (prince_of_wales_cp.x + ship_size, hermes_cp.y) end + fifth_af_cp: EV_COORDINATE do create Result.make (repulse_cp.x + ship_size, hermes_cp.y + ship_size - air_size) end + louisville_cp: EV_COORDINATE do create Result.make (fifth_af_cp.x + air_size + 4 * gap_size, hermes_cp.y) end + pensacola_cp: EV_COORDINATE do create Result.make (louisville_cp.x + ship_size + 4 * gap_size, hermes_cp.y) end + indianapolis_cp: EV_COORDINATE do create Result.make (pensacola_cp.x + ship_size + 4 * gap_size, hermes_cp.y) end + minneapolis_cp: EV_COORDINATE do create Result.make (indianapolis_cp.x + ship_size, hermes_cp.y) end + -- In Port (may move) + houston_cp: EV_COORDINATE do create Result.make (turn_1_cp.x, hermes_cp.y + ship_size + 5 * gap_size) end + exeter_cp: EV_COORDINATE do create Result.make (houston_cp.x + ship_size + 4 * gap_size, houston_cp.y) end + de_ruyter_cp: EV_COORDINATE do create Result.make (exeter_cp.x + ship_size, houston_cp.y) end + australia_cp: EV_COORDINATE do create Result.make (de_ruyter_cp.x + ship_size + 4 * gap_size, houston_cp.y) end + canberra_cp: EV_COORDINATE do create Result.make (australia_cp.x + ship_size, houston_cp.y) end + -- Group W + enterprise_cp: EV_COORDINATE do create Result.make (louisville_cp.x + ship_size, houston_cp.y) end + salt_lake_city_cp: EV_COORDINATE do create Result.make (enterprise_cp.x + ship_size, houston_cp.y) end + northampton_cp: EV_COORDINATE do create Result.make (salt_lake_city_cp.x + ship_size, houston_cp.y) end + chester_cp: EV_COORDINATE do create Result.make (northampton_cp.x + ship_size, houston_cp.y) end + -- Group X + lexington_cp: EV_COORDINATE do create Result.make (turn_1_cp.x, houston_cp.y + ship_size + 5 * gap_size) end + chicago_cp: EV_COORDINATE do create Result.make (lexington_cp.x + ship_size, lexington_cp.y) end + portland_cp: EV_COORDINATE do create Result.make (chicago_cp.x + ship_size, lexington_cp.y) end + astoria_cp: EV_COORDINATE do create Result.make (portland_cp.x + ship_size, lexington_cp.y) end + -- Group Y + saratoga_cp: EV_COORDINATE do create Result.make (astoria_cp.x + ship_size + 4 * gap_size, lexington_cp.y) end + -- Group Z + hornet_cp: EV_COORDINATE do create Result.make (saratoga_cp.x + ship_size + 4 * gap_size, lexington_cp.y) end + yorktown_cp: EV_COORDINATE do create Result.make (hornet_cp.x + ship_size, lexington_cp.y) end + vincennes_cp: EV_COORDINATE do create Result.make (yorktown_cp.x + ship_size, lexington_cp.y) end + quincy_cp: EV_COORDINATE do create Result.make (vincennes_cp.x + ship_size, lexington_cp.y) end + +end diff --git a/jj_vitp/Interface/views/allied_starting_forces_world.e b/jj_vitp/Interface/views/allied_starting_forces_world.e new file mode 100644 index 0000000..1fc2560 --- /dev/null +++ b/jj_vitp/Interface/views/allied_starting_forces_world.e @@ -0,0 +1,290 @@ +note + description: "[ + One of the classes that decomposes the numourous VITP widgets + into more managable groups. This class models the widgets + that contain the Allied starting-forces units (i.e. the + Allied units that appear on turn 1). + ]" + author: "Jimmy J. Johnson" + date: "5/15/24" + copyright: "Copyright (c) 2024, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +class + ALLIED_STARTING_FORCES_WORLD + +inherit + + WIDGET_FACTORY + redefine + make_widgets, + widgets, + extend_widgets, + pair_widgets, + fill_widgets + end + +create + make + +create {ALLIED_STARTING_FORCES_WORLD} + list_make + +feature {NONE} -- Initialization + + make_widgets + -- Create widgets for the corresponding game item + do + -- Turn 1, on battleship row (Pearl Harbor) + create nevada_widget.make (game.nevada) + create arizona_widget.make (game.arizona) + create west_virginia_widget.make (game.west_virginia) + create tennessee_widget.make (game.tennessee) + create oklahoma_widget.make (game.oklahoma) + create maryland_widget.make (game.maryland) + create california_widget.make (game.california) + create pennsylvania_widget.make (game.pennsylvania) + create new_orleans_widget.make (game.new_orleans) + create san_francisco_widget.make (game.san_francisco) + create seventh_af_widget.make (game.seventh_af) + -- Turn 1, at sea (cannot move) + create hermes_widget.make (game.hermes) + create revenge_widget.make (game.revenge) + create prince_of_wales_widget.make (game.prince_of_wales) + create repulse_widget.make (game.repulse) + create fifth_af_widget.make (game.fifth_af) + create louisville_widget.make (game.louisville) + create pensacola_widget.make (game.pensacola) + create indianapolis_widget.make (game.indianapolis) + create minneapolis_widget.make (game.minneapolis) + -- Turn 1, in port (may move) + create houston_widget.make (game.houston) + create exeter_widget.make (game.exeter) + create de_ruyter_widget.make (game.de_ruyter) + create australia_ship_widget.make (game.australia_ship) + create canberra_widget.make (game.canberra) + -- Turn 1, Location uncertain (group W) + create enterprise_widget.make (game.enterprise) + create salt_lake_city_widget.make (game.salt_lake_city) + create northampton_widget.make (game.northampton) + create chester_widget.make (game.chester) + -- Turn 1, Location uncertain (group X) + create lexington_widget.make (game.lexington) + create chicago_widget.make (game.chicago) + create portland_widget.make (game.portland) + create astoria_widget.make (game.astoria) + -- Turn 1, Location uncertain (group Y) + create saratoga_widget.make (game.saratoga) + -- Turn 1, Location uncertain (group Z) + create hornet_widget.make (game.hornet) + create yorktown_widget.make (game.yorktown) + create vincennes_widget.make (game.vincennes) + create quincy_widget.make (game.quincy) + end + +feature -- Access (tables) + + widgets: VITP_WIDGET_TABLE [ATTACK_UNIT_WIDGET, ATTACK_UNIT] + -- Keeps track of widgets + +feature -- Access (allied starting forces widgets) + + -- On Battleship Row (Pearl Harbor) + nevada_widget: SHIP_WIDGET + arizona_widget: SHIP_WIDGET + west_virginia_widget: SHIP_WIDGET + tennessee_widget: SHIP_WIDGET + oklahoma_widget: SHIP_WIDGET + maryland_widget: SHIP_WIDGET + california_widget: SHIP_WIDGET + pennsylvania_widget: SHIP_WIDGET + new_orleans_widget: SHIP_WIDGET + san_francisco_widget: SHIP_WIDGET + seventh_af_widget: ALLIED_AIR_UNIT_WIDGET + -- At sea (cannot move) + hermes_widget: SHIP_WIDGET + revenge_widget: SHIP_WIDGET + prince_of_wales_widget: SHIP_WIDGET + repulse_widget: SHIP_WIDGET + fifth_af_widget: ALLIED_AIR_UNIT_WIDGET + louisville_widget: SHIP_WIDGET + pensacola_widget: SHIP_WIDGET + indianapolis_widget: SHIP_WIDGET + minneapolis_widget: SHIP_WIDGET + -- In port (may move) + houston_widget: SHIP_WIDGET + exeter_widget: SHIP_WIDGET + de_ruyter_widget: SHIP_WIDGET + australia_ship_widget: SHIP_WIDGET + canberra_widget: SHIP_WIDGET + -- Location Uncertain, group W + enterprise_widget: SHIP_WIDGET + salt_lake_city_widget: SHIP_WIDGET + northampton_widget: SHIP_WIDGET + chester_widget: SHIP_WIDGET + -- Location Uncertain, group X + lexington_widget: SHIP_WIDGET + chicago_widget: SHIP_WIDGET + portland_widget: SHIP_WIDGET + astoria_widget: SHIP_WIDGET + -- Location Uncertain, group Y + saratoga_widget: SHIP_WIDGET + -- Location Uncertain, group W + hornet_widget: SHIP_WIDGET + yorktown_widget: SHIP_WIDGET + vincennes_widget: SHIP_WIDGET + quincy_widget: SHIP_WIDGET + +feature {NONE} -- Implementation + + extend_widgets + -- Put each widget {ATTACK_UNIT_WIDGET} into `world'. + do + -- On Battleship Row (Pearl Harbor) + extend (nevada_widget) + extend (arizona_widget) + extend (west_virginia_widget) + extend (tennessee_widget) + extend (oklahoma_widget) + extend (maryland_widget) + extend (california_widget) + extend (pennsylvania_widget) + extend (new_orleans_widget) + extend (san_francisco_widget) + extend (seventh_af_widget) + -- At sea (cannot move) + extend (hermes_widget) + extend (revenge_widget) + extend (prince_of_wales_widget) + extend (repulse_widget) + extend (fifth_af_widget) + extend (louisville_widget) + extend (pensacola_widget) + extend (indianapolis_widget) + extend (minneapolis_widget) + -- In port (may move) + extend (houston_widget) + extend (exeter_widget) + extend (de_ruyter_widget) + extend (australia_ship_widget) + extend (canberra_widget) + -- Location Uncertain, group W + extend (enterprise_widget) + extend (salt_lake_city_widget) + extend (northampton_widget) + extend (chester_widget) + -- Location Uncertain, group X + extend (lexington_widget) + extend (chicago_widget) + extend (portland_widget) + extend (astoria_widget) + -- Location Uncertain, group Y + extend (saratoga_widget) + -- Location Uncertain, group W + extend (hornet_widget) + extend (yorktown_widget) + extend (vincennes_widget) + extend (quincy_widget) + end + + pair_widgets + -- Associate each widget with a unit + do + -- On Battleship Row (Pearl Harbor) + widgets.force (nevada_widget, game.nevada) + widgets.force (arizona_widget, game.arizona) + widgets.force (west_virginia_widget, game.west_virginia) + widgets.force (tennessee_widget, game.tennessee) + widgets.force (oklahoma_widget, game.oklahoma) + widgets.force (maryland_widget, game.maryland) + widgets.force (california_widget, game.california) + widgets.force (pennsylvania_widget, game.pennsylvania) + widgets.force (new_orleans_widget, game.new_orleans) + widgets.force (san_francisco_widget, game.san_francisco) + widgets.force (seventh_af_widget, game.seventh_af) + -- At sea (cannot move) + widgets.force (hermes_widget, game.hermes) + widgets.force (revenge_widget, game.revenge) + widgets.force (prince_of_wales_widget, game.prince_of_wales) + widgets.force (repulse_widget, game.repulse) + widgets.force (fifth_af_widget, game.fifth_af) + widgets.force (louisville_widget, game.louisville) + widgets.force (pensacola_widget, game.pensacola) + widgets.force (indianapolis_widget, game.indianapolis) + widgets.force (minneapolis_widget, game.minneapolis) + -- In port (may move) + widgets.force (houston_widget, game.houston) + widgets.force (exeter_widget, game.exeter) + widgets.force (de_ruyter_widget, game.de_ruyter) + widgets.force (australia_ship_widget, game.australia_ship) + widgets.force (canberra_widget, game.canberra) + -- Location Uncertain, group W + widgets.force (enterprise_widget, game.enterprise) + widgets.force (salt_lake_city_widget, game.salt_lake_city) + widgets.force (northampton_widget, game.northampton) + widgets.force (chester_widget, game.chester) + -- Location Uncertain, group X + widgets.force (lexington_widget, game.lexington) + widgets.force (chicago_widget, game.chicago) + widgets.force (portland_widget, game.portland) + widgets.force (astoria_widget, game.astoria) + -- Location Uncertain, group Y + widgets.force (saratoga_widget, game.saratoga) + -- Location Uncertain (group Z + widgets.force (hornet_widget, game.hornet) + widgets.force (yorktown_widget, game.yorktown) + widgets.force (vincennes_widget, game.vincennes) + widgets.force (quincy_widget, game.quincy) + end + + fill_widgets + -- Call `set_target' to give each widget a target. + do + -- On Battleship Row (Pearl Harbor) + nevada_widget.set_target (game.nevada) + arizona_widget.set_target (game.arizona) + west_virginia_widget.set_target (game.west_virginia) + tennessee_widget.set_target (game.tennessee) + oklahoma_widget.set_target (game.oklahoma) + maryland_widget.set_target (game.maryland) + california_widget.set_target (game.california) + pennsylvania_widget.set_target (game.pennsylvania) + new_orleans_widget.set_target (game.new_orleans) + san_francisco_widget.set_target (game.san_francisco) + seventh_af_widget.set_target (game.seventh_af) + -- At sea (cannot move) + hermes_widget.set_target (game.hermes) + revenge_widget.set_target (game.revenge) + prince_of_wales_widget.set_target (game.prince_of_wales) + repulse_widget.set_target (game.repulse) + fifth_af_widget.set_target (game.fifth_af) + louisville_widget.set_target (game.louisville) + pensacola_widget.set_target (game.pensacola) + indianapolis_widget.set_target (game.indianapolis) + minneapolis_widget.set_target (game.minneapolis) + -- In port (may move) + houston_widget.set_target (game.houston) + exeter_widget.set_target (game.exeter) + de_ruyter_widget.set_target (game.de_ruyter) + australia_ship_widget.set_target (game.australia_ship) + canberra_widget.set_target (game.canberra) + -- Location Uncertain, group W + enterprise_widget.set_target (game.enterprise) + salt_lake_city_widget.set_target (game.salt_lake_city) + northampton_widget.set_target (game.northampton) + chester_widget.set_target (game.chester) + -- Location Uncertain, group X + lexington_widget.set_target (game.lexington) + chicago_widget.set_target (game.chicago) + portland_widget.set_target (game.portland) + astoria_widget.set_target (game.astoria) + -- Location Uncertain, group Y + saratoga_widget.set_target (game.saratoga) + -- Location Uncertain, group W + hornet_widget.set_target (game.hornet) + yorktown_widget.set_target (game.yorktown) + vincennes_widget.set_target (game.vincennes) + quincy_widget.set_target (game.quincy) + end + +end diff --git a/jj_vitp/Interface/views/attack_widgets_factory.e b/jj_vitp/Interface/views/attack_widgets_factory.e new file mode 100644 index 0000000..a79c3e2 --- /dev/null +++ b/jj_vitp/Interface/views/attack_widgets_factory.e @@ -0,0 +1,81 @@ +note + description: "[ + One of the classes that decompose the numourous VITP widgets + into more managable groups. This class models the widgets + that contain the attack units. + ]" + author: "Jimmy J. Johnson" + date: "5/15/24" + copyright: "Copyright (c) 2024, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +class + ATTACK_WIDGETS_FACTORY + +inherit + + JAPANESE_FORCES_FACTORY + redefine + make_widgets, + extend_widgets, + pair_widgets, + fill_widgets + end + + ALLIED_FORCES_WIDGET_FACTORY + redefine + make_widgets, + extend_widgets, + pair_widgets, + fill_widgets + end + +create + make + +feature -- Initialization + + make_widgets + -- Create the widgets in Current + do + print ("ATTACK_WIDGET_FACTORY.make_widgets %N") + create attack_widgets.make (100) + Precursor {JAPANESE_FORCES_FACTORY} + print ("ATTACK_WIDGET_FACTORY.make_widgets after first Precuror call%N") + Precursor {ALLIED_FORCES_WIDGET_FACTORY} + print ("%T end ATTACK_WIDGET_FACTORY.make_widgets %N") + end + +feature -- Access + + attack_widgets: VITP_WIDGET_TABLE [ATTACK_UNIT_WIDGET, ATTACK_UNIT] + -- Keeps track of widgets + +feature {NONE} -- Implementation + + extend_widgets + -- Put each widget into `world'. + do + -- The first two line `merge' into `widgets' + Precursor {JAPANESE_FORCES_FACTORY} + Precursor {ALLIED_FORCES_WIDGET_FACTORY} + -- But also need to merge into `attack_widges' + attack_widgets.merge (japanese_forces_widgets) + attack_widgets.merge (allied_forces_widgets) + end + + pair_widgets + -- Associate each widget with a unit + do + Precursor {JAPANESE_FORCES_FACTORY} + Precursor {ALLIED_FORCES_WIDGET_FACTORY} + end + + fill_widgets + -- Call `set_target' to give each widget a target. + do + Precursor {JAPANESE_FORCES_FACTORY} + Precursor {ALLIED_FORCES_WIDGET_FACTORY} + end + +end diff --git a/jj_vitp/Interface/views/board_tool.e b/jj_vitp/Interface/views/board_tool.e new file mode 100644 index 0000000..5bd53fb --- /dev/null +++ b/jj_vitp/Interface/views/board_tool.e @@ -0,0 +1,228 @@ +note + description: "[ + Used to hold a BOARD_VIEW in the VITP vitp.program. + ]" + author: "Jimmy J. Johnson" + +class + BOARD_TOOL + +inherit + + VITP_TOOL + redefine + create_interface_objects, + initialize, + build_tool_bar, + add_actions, +-- initialize_interface, +-- set_actions, + set_target, + draw, + set_button_states + end + + GAME_CONSTANTS + undefine + default_create, + copy + end + +create + make + +feature {NONE} -- Initialization + + create_interface_objects + -- Create objects to be used by `Current' in `initialize' + -- Implemented by descendants to create attached objects + -- in order to adhere to void-safety due to the implementation + -- bridge pattern. + do + print ("BOARD_TOOL.create_interface_objects %N") + Precursor {VITP_TOOL} + print ("BOARD_TOOL.create_interface_objects before creating board_view %N") + create board_view.make (vitp) + print ("BOARD_TOOL.create_interface_objects after creating board_view %N") + create repair_button + create flip_raiders_button + create commit_button + create sop_button + repair_button.set_pixmap (create {EV_PIXMAP}.make_with_pixel_buffer (Icon_tool_color_buffer)) + repair_button.set_tooltip ("Repair Units") + flip_raiders_button.set_pixmap (create {EV_PIXMAP}.make_with_pixel_buffer (Icon_reset_diagram_color_buffer)) + flip_raiders_button.set_tooltip ("Flip Raiders") + commit_button.set_pixmap (create {EV_PIXMAP}.make_with_pixel_buffer (Icon_client_link_buffer)) + commit_button.set_tooltip ("Commit and Advance") + sop_button.set_text ("SOP Button fix me") + print ("%T end BOARD_TOOL.create_interface_objects %N") + end + + initialize + -- Build the interface for this window + do + Precursor {VITP_TOOL} + split_manager.extend (board_view) + set_minimum_width (1000) + end + + build_tool_bar + -- Set up the user tool bar for this tool + local + vs: EV_VERTICAL_SEPARATOR + do + Precursor +-- tool_bar.extend (create {EV_VERTICAL_SEPARATOR}) +-- tool_bar.extend (repair_button) +-- tool_bar.extend (flip_raiders_button) + tool_bar.extend (sop_button) + -- Separator between two buttons + create vs + tool_bar.extend (vs) + tool_bar.disable_item_expand (vs) + vs.set_minimum_width (20) + -- Add button + tool_bar.extend (commit_button) + tool_bar.disable_item_expand (commit_button) + create vs + tool_bar.extend (vs) + tool_bar.disable_item_expand (vs) + vs.set_minimum_width (20) + end + + add_actions + -- Associate actions with the buttons + do + Precursor {VITP_TOOL} + commit_button.select_actions.extend (agent on_commit) + sop_button.select_actions.extend (agent on_execute) + end + +feature -- Access + + board_view: BOARD_VIEW + -- Handle to the view corresponding to the first view created by the + -- `view_manager' in `initialize'. + -- Convinience feature. + + focused_view: VITP_CELL_VIEW + -- The view that currently has the focus + do + Result := board_view +-- if japanese_chart_view.has_focus then +-- Result := japanese_chart_view +-- else +-- Result := board_view +-- end + end + +feature -- Element change + + set_target (a_game: like vitp) + -- Change the value of `target' and add it to the `target_set' (the set + -- of objects contained in this view. The old target is removed from + -- the set. + -- This feature can be used as a pattern if a descendant wants to give + -- special treatment to a single target. + do + Precursor {VITP_TOOL} (a_game) + board_view.set_target (a_game) + end + +feature -- Basic operations + + draw + -- Redraw the tool + do + Precursor {VITP_TOOL} +-- board_view.draw + set_button_states + end + + on_commit + -- Action to be performed when the `commit_button' is pressed + do +-- vitp.advance +-- board_view.on_advanced + vitp.sequence_of_play.forth + draw_views (vitp) + end + + on_execute + -- Perform the any action associated with the current step + -- in the sequence of play. + local + sop: VITP_SEQUENCE_OF_PLAY + do + sop := vitp.sequence_of_play + sop.execute_step_actions + draw_views (vitp) + end + +feature {NONE} -- implementation + + set_button_states + -- Enable or disable the buttons depending on the + -- state of the view + do + Precursor {VITP_TOOL} + set_added_buttons_states + end + + set_added_buttons_states + -- Enable or disable the buttons that this tool + -- added to the tool bar. + local + sop: VITP_SEQUENCE_OF_PLAY + s: GAME_STEP + c: FONT_AND_COLOR_CONSTANTS + do + if is_view_empty then + repair_button.disable_sensitive + flip_raiders_button.disable_sensitive + commit_button.disable_sensitive + else + sop := vitp.sequence_of_play + if not sop.is_off then + sop_button.set_text (sop.full_name) + create c + if sop.is_japanese_player then + sop_button.set_background_color (c.Japanese_unit_color) + sop_button.set_foreground_color (c.black) + elseif sop.is_allied_player then + sop_button.set_background_color (c.us_unit_color) + sop_button.set_foreground_color (c.white) + end + if sop.is_step_executable then + sop_button.enable_sensitive + else + sop_button.disable_sensitive + end + if sop.is_step_completed then + commit_button.enable_sensitive + else + commit_button.disable_sensitive + end + end + end + end + +feature {NONE} -- Implementation + + sop_button: EV_BUTTON + -- Button showing the current game step in the Sequence + -- of play. The background color corresponds to the active + -- player (red for Japanese and blue for Allied). This + -- button is active when the `vitp'.`sequence_of_play' + -- indicates that automatic actions are executable. + + repair_button: EV_TOOL_BAR_BUTTON + -- Button to mark units for repair + + flip_raiders_button: EV_TOOL_BAR_BUTTON + -- Button to flip from patroller to raider or back + + commit_button: EV_BUTTON --EV_TOOL_BAR_BUTTON + -- Button for player to indicate he is finished with the step + +end diff --git a/jj_vitp/Interface/views/board_view.e b/jj_vitp/Interface/views/board_view.e new file mode 100644 index 0000000..b5ddebb --- /dev/null +++ b/jj_vitp/Interface/views/board_view.e @@ -0,0 +1,652 @@ +note + description: "[ + A {VIEW} that corresponds to the game board in Victory + In the Pacific (VITP). This view has widgets that hold + and allow control of game actions (e.g. movement, attacks, + repositions, etc) of game elements (e.g. ships, control + markers, ports, etc.) + ]" + author: "Jimmy J. Johnson" + +class + BOARD_VIEW + +inherit + + VITP_CELL_VIEW + redefine + create_interface_objects, + initialize, + add_actions, + set_target, + draw, + pick_notified_operations, + pick_ended_operations + end + + FONT_AND_COLOR_CONSTANTS + export + {NONE} + all + undefine + default_create, + copy + end + + POSITION_CONSTANTS + export + {NONE} + all + undefine + default_create, + copy + redefine + playing_area_ratio + end + +create + make + +feature {NONE} -- Initialization + + create_interface_objects + -- Create objects to be used by `Current' in `initialize' + -- Implemented by descendants to create attached objects + -- in order to adhere to void-safety due to the implementation bridge pattern. + do + print ("BOARD_VIEW.create_interface_objects %N") + Precursor {VITP_CELL_VIEW} + print ("%T BOARD_VIEW.create_interface_objects before creating widget_factory %N") + create widget_factory.make (game) + print ("%T BOARD_VIEW.create_interface_objects after creatingh widget_factory %N") +-- create dot +-- create bounding_figure + -- Create for Void safety +-- create mouse_offset + create last_mouse_position + -- create containers + create task_force_widgets.make (100) + create highlighted_widgets.make + -- create the corner points used to determine the scale factor + create top_left_dot + create bottom_right_dot + -- create container for the grid cells (rows, columns) +-- create cell_array.make (playing_area_height // cell_size, + + end + + initialize + -- Called after `Default_create' + do + Precursor {VITP_CELL_VIEW} +-- world.extend (dragging_arrow) +-- dragging_arrow.hide +-- -- create the `handle' +-- create handle +-- world.extend (handle) + build_border + -- Attack widgets go on top of all other widgets except the dots +-- build_corner_dots + -- Place the dots from {POSITION_CONSTANTS} into Current + -- The dots move based on scaling of the view, allowing + -- cell positions to be determined regardless of the + -- actual size of the view. + add_widgets + world.extend (top_left_dot) + world.extend (bottom_right_dot) + end + + add_widgets + -- Add the sea areas, ports, and unit widgets to the `world', + -- hiding the unit widgets until needed + local + wf: like widget_factory + t: like widget_factory.widgets + w: VITP_WIDGET + do + wf := widget_factory + -- Add sea areas first + t := wf.sea_area_widgets + from t.start + until t.after + loop +-- world.extend (t.item_for_iteration) + add_model (t.item_for_iteration) + t.forth + end + -- Add ports + t := wf.port_widgets + from t.start + until t.after + loop +-- world.extend (t.item_for_iteration) + add_model (t.item_for_iteration) + t.forth + end + -- Add unit widgets + t := wf.attack_widgets + from t.start + until t.after + loop + w := t.item_for_iteration + print ("{BOARD_VIEW}.add_widgets: Adding " + w.target.name + " at (" + w.x.out + ", " + w.y.out + ") %N") +-- world.extend (w) + add_model (w) +-- w.hide + t.forth + end + end + + build_corner_dots + -- Create the two dots that will mark the top-left and bottom-right corners of + -- the board. These aid calculation of the current scaling factor and scolling + do + top_left_dot.set_x_y (playing_area_left, playing_area_top) + bottom_right_dot.set_x_y (playing_area_right, playing_area_bottom) + top_left_dot.set_line_width (10) + bottom_right_dot.set_line_width (10) + world.extend (top_left_dot) + world.extend (bottom_right_dot) + end + + add_actions + -- Add actions to the widgets + local + w: ATTACK_UNIT_WIDGET + do + -- Do not call precursor +-- asia_widget.pointer_button_press_actions.force_extend (agent toggle_land) +-- pointer_motion_actions.extend (agent on_pointer_moved) +-- pointer_button_release_actions.extend (agent on_button_released) + end + + build_border + -- Put a border around the game board to hide some of the land overhangs + local + poly: EV_MODEL_POLYGON + s: INTEGER + bw, bh: INTEGER_32 + c: EV_COLOR + do + s := 5 + c := Medium_grey + bw := board_width + bh := board_height + -- top + create poly.default_create + poly.set_line_width (0) + poly.extend_point (create {EV_COORDINATE}.make (-s, -s)) + poly.extend_point (create {EV_COORDINATE}.make (bw + s, -s)) + poly.extend_point (create {EV_COORDINATE}.make (bw + s, 0)) + poly.extend_point (create {EV_COORDINATE}.make (-s, 0)) + poly.set_background_color (c) + poly.set_foreground_color (c) + world.extend (poly) + -- botton + create poly.default_create + poly.set_line_width (0) + poly.extend_point (create {EV_COORDINATE}.make (-s, bh)) + poly.extend_point (create {EV_COORDINATE}.make (bw + s, bh)) + poly.extend_point (create {EV_COORDINATE}.make (bw + s, bh + s)) + poly.extend_point (create {EV_COORDINATE}.make (-s, bh + s)) + poly.set_background_color (c) + poly.set_foreground_color (c) + world.extend (poly) + -- left + create poly.default_create + poly.set_line_width (0) + poly.extend_point (create {EV_COORDINATE}.make (-s, -s)) + poly.extend_point (create {EV_COORDINATE}.make (0, -s)) + poly.extend_point (create {EV_COORDINATE}.make (0, bh + s)) + poly.extend_point (create {EV_COORDINATE}.make (-s, bh + s)) + poly.set_background_color (c) + poly.set_foreground_color (c) + world.extend (poly) + -- right + create poly.default_create + poly.set_line_width (0) + poly.extend_point (create {EV_COORDINATE}.make (bw, -s)) + poly.extend_point (create {EV_COORDINATE}.make (bw + s, -s)) + poly.extend_point (create {EV_COORDINATE}.make (bw + s, bh + s)) + poly.extend_point (create {EV_COORDINATE}.make (bw, bh + s)) + poly.set_background_color (c) + poly.set_foreground_color (c) + world.extend (poly) + end + +feature -- Basic operations + + set_target (a_item: like game) + -- Associate `a_item' with Current. + do + Precursor (a_item) + -- Build a polygon that defines the boundary of current for which we + -- find the centerpoint, the `dot'. Other widgets can then be built + -- and if desired placed in Current relative to `dot' + widget_factory.set_game (game) +-- paint +-- set_pebble (a_item) +-- set_accept_cursor (sub_pixmap (bounding_box)) + end + + draw + -- Redraw the view + -- This means the game has changed in some way + -- (e.g. a ship was added). + do + if not is_view_empty then +-- update_attack_widgets + -- should be no need to draw the whole view unless the game + -- was changed. + end + end + +feature -- Access + + widget_factory: ALL_WIDGETS_FACTORY + -- Holds all the widgets on the board + + playing_area_ratio: REAL_64 + -- Ratio of the playing_area_width' to the [possibly] + -- scaled size of the `playing_area_width'. Default = one, + -- but redefined here to use the distance between the + -- two corner dots. + do + Result := playing_area_width / (bottom_right_dot.x - top_left_dot.x) + end + +feature -- Query + + cell_at (a_x, a_y: INTEGER_32): VITP_CELL + -- The cell at the screen coordinates `a_x', `a_y' + local + x, y: INTEGER_32 + do + x := ((a_x * playing_area_ratio) / cell_size).truncated_to_integer + 1 + y := ((a_y * playing_area_ratio) / cell_size).truncated_to_integer + 1 + Result := game.cell (x, y) + end + + screen_coordinates (a_cell: VITP_CELL): TUPLE [x, y: INTEGER_32] + -- The screen coordinates corresponding to `a_cell' + local + x, y: INTEGER_32 + do + x := ((a_cell.index.x * cell_size) / playing_area_ratio).truncated_to_integer + y := ((a_cell.index.y * cell_size) / playing_area_ratio).truncated_to_integer + Result := [x, y] + end + +feature -- Status report + + is_forwarding: BOOLEAN + -- Has a widget been brought to the top? + + is_dragging: BOOLEAN + -- Are we in the process of sliding a widget or a group of widgets? + +-- is_picking: BOOLEAN +-- -- Are we in the process of a pick-and-put operation? + + is_repositioning: BOOLEAN + -- Is a widget being repositioned? + + is_moving: BOOLEAN + -- Is a unit being moved to a new location? + + is_highlighting: BOOLEAN + -- Is a widget or group of widgets being emphasized? + + is_highlighting_location: BOOLEAN + -- Is one or more port widgets being emphasized? + + is_highlighting_units: BOOLEAN + -- Is one or more unit widgets being emphasized? + + is_highlighting_task_force: BOOLEAN + -- Is one or more {TASK_FORCE_WIDGET}s being emphasized? + + is_processing_task_force: BOOLEAN + -- A {TASK_FORCE_WIDGET} is being clicked/move/released + +feature -- Actions + + pick_notified_operations (a_target: ANY) + -- React to the pick of `a_target' from some view + local + sop: like game.sequence_of_play + set: LINKED_SET [PORT] + p: PORT + pw: PORT_WIDGET + do + Precursor (a_target) + print ("{BOARD_VIEW}.pick_notified_operations on {" + generating_type.name + "}%N") + sop := game.sequence_of_play + if sop.is_reinforcement_step and then attached {ATTACK_UNIT} a_target as t then + set := t.reinforceable_ports + print ("%T undimming " + set.count.out + " areas %N") + from set.start + until set.after + loop + p := set.item + print ("%T%T making " + p.name + " brighter %N") + pw := widget_factory.port_widgets.definite_item (p) + pw.set_dimming_level ({DIMABLE}.bright) + pw.activate_drop_action + highlighted_widgets.extend (pw) + set.forth + end + -- application.process_graphical_events + end + end + + pick_ended_operations + -- React to the end of a pick and drop operation + do + Precursor + print ("{BOARD_VIEW}.pick_ended_operations on {" + generating_type.name + "} %N") + from highlighted_widgets.start + until highlighted_widgets.after + loop + highlighted_widgets.item.deactivate_drop_action + highlighted_widgets.item.restore_dimming_level + highlighted_widgets.forth + end + highlighted_widgets.wipe_out + end + + on_pointer_enter (a_widget: VITP_WIDGET) + -- React to a pointer entering `a_widget' + local + tfw: TASK_FORCE_WIDGET + do + io.put_string ("BOARD_WORLD.on_pointer_enter: on " + a_widget.target.name + " %N") +-- if attached {ATTACK_UNIT_WIDGET} a_widget as w then +-- if w.unit.is_task_force then +-- tfw := task_force_widgets.widget (w.unit.task_force) +-- forward_widget_to_top (w, tfw) +-- end +-- end + end + + on_pointer_leave (a_widget: VITP_WIDGET) + -- React to a pointer leaving a `a_widget' + do + io.put_string ("BOARD_WORLD.on_pointer_leave: on " + a_widget.target.name + " %N") +-- if is_forwarding then +-- restore_forwarded_widget +-- end + end + + on_button_pressed (a_widget: VITP_WIDGET; ax: INTEGER; ay: INTEGER; a_button: INTEGER) + -- React to a pointer button pressed notification from `a_widget' + do + io.put_string ("BOARD_WORLD.on_button_pressed: button " + a_button.out + + " pressed at (" + ax.out + ", " + ay.out + ") on " + a_widget.target.name + " %N") +-- last_mouse_position.set_precise (ax, ay) +-- if is_forwarding then +-- restore_forwarded_widget +-- end +-- if a_button = 1 then +-- if attached {ATTACK_UNIT_WIDGET} a_widget as w then +-- highlight_unit (w.unit) +-- begin_widget_reposition (w, ax, ay) +-- elseif attached {LOCATION_WIDGET} a_widget as w then +-- highlight_location (w.location) +-- highlight_location_occupants (w.location) +-- end +-- end + end + + on_button_double_pressed (a_widget: VITP_WIDGET; ax: INTEGER; ay: INTEGER; a_button: INTEGER) + -- React to a pointer button released notification from `a_widget' + do + io.put_string ("BOARD_WORLD.on_button_double_pressed: button " + a_button.out + + " double-pressed at (" + ax.out + ", " + ay.out + ") on " + a_widget.target.name + "%N") + if a_button = 1 then + if attached {TASK_FORCE_WIDGET} a_widget as w and then + not w.point_on_bounding_figure (ax, ay) then + if w.is_stacked then + w.tile + else + w.stack + end + -- Next lines to prevent undesired movement + is_repositioning := false + end + end + end + + on_button_released (a_widget: VITP_WIDGET; ax: INTEGER; ay: INTEGER; a_button: INTEGER) + -- React to a pointer button released notification from `a_widget' + do + io.put_string ("BOARD_WORLD.on_button_released: button " + a_button.out + " pressed at (" + ax.out + ", " + ay.out + ") %N") + if is_highlighting_location then + normalize_locations + end + if is_highlighting_units then + normalize_units + end + if is_repositioning then +-- finish_widget_reposition + end + end + + on_pointer_motion (a_widget: VITP_WIDGET; ax, ay: INTEGER) + -- React to a pointer move notification from `a_widget' + do + io.put_string ("BOARD_WORLD.on_notify_pointer_motion: at (" + ax.out + ", " + ay.out + ") %N") +-- if is_repositioning then +---- last_mouse_position.set_position (ax, ay) +-- -- Adjust for difference in the location of `active_widget' and `last_mouse_position' +---- if can_reposition (ax, ay) then +---- set_pointer_style (create {EV_POINTER_STYLE}.make_predefined ({EV_POINTER_STYLE_CONSTANTS}.Standard_cursor)) +---- reposition_active_widget (ax, ay) +---- else +---- set_pointer_style (create {EV_POINTER_STYLE}.make_predefined ({EV_POINTER_STYLE_CONSTANTS}.No_cursor)) +---- end +-- end + end + +feature -- Basic operations + + position_task_force_widget (a_widget: TASK_FORCE_WIDGET) + -- Place `a_widget' on the board so it does not overlap other + -- widgets, possibly moving other widgets. + do + + end + + position_widget (a_widget: ATTACK_UNIT_WIDGET) + -- Ensure each widget is postioned according to its position, + -- perhaps repositioning it to accomodate other widgets. + do + + end + +feature --{WIDGET_FACTORY} -- Basic operations + + on_flip_widget (a_widget: SHIP_WIDGET) + -- Toggle the raiding status of `a_widget' + do + io.put_string ("on_flip_raider /n") + a_widget.flip + ensure + ship_status_toggled: a_widget.ship.is_raiding = not (old a_widget.ship.is_raiding) + end + + board_coordinate_to_model_position (a_position: EV_COORDINATE): VITP_POSITION + -- `a_position' converted to the model's coordinate system + require + position_exists: a_position /= Void + local + brp, tlp: EV_COORDINATE + p: EV_COORDINATE + x_size, y_size: REAL_64 + long, lat: REAL_64 + do + p := a_position + brp := bottom_right_dot.point + tlp := top_left_dot.point + x_size := brp.x_precise - tlp.x_precise + y_size := brp.y_precise - tlp.y_precise + long := (p.x_precise - tlp.x_precise) * (board_right / x_size) + lat := (p.y_precise - tlp.y_precise) * (board_bottom / y_size) + create Result.set_xy (long.truncated_to_integer, lat.truncated_to_integer) + end + + highlight_location (a_location: LOCATION) + -- Brighten the widget corresponding to `a_location' + require + location_exists: a_location /= Void + local + w: VITP_WIDGET + do + w := widget_factory.widgets.definite_item (a_location) + if world.has (w) then + w.set_dimming_level ({DIMABLE}.Bright) + w.paint + highlighted_widgets.extend (w) + is_highlighting_location := true + end + end + + highlight_location_occupants (a_location: LOCATION) + -- Brighten the widgets corresponding to the occupants of `a_location' + require + location_exists: a_location /= Void + local + u_list: LINKED_SET [ATTACK_UNIT] + w: VITP_WIDGET + do + u_list := a_location.units + from u_list.start + until u_list.after + loop + w := widget_factory.widgets.definite_item (u_list.item) + w.set_dimming_level ({DIMABLE}.Bright) + w.paint + highlighted_widgets.extend (w) + u_list.forth + end + is_highlighting_units := true + end + + highlight_unit (a_unit: ATTACK_UNIT) + -- Brighten the widget corresponding to `a_unit' + require + unit_exists: a_unit /= Void + local + tfw: TASK_FORCE_WIDGET + w: VITP_WIDGET + do +-- if a_unit.is_task_force then +-- tfw := task_force_widgets.widget (a_unit.task_force) +-- if tfw.is_stacked then +-- w := tfw +-- else +-- w := world.attack_widgets.widget (a_unit) +-- end +-- else +-- w := world.attack_widgets.widget (a_unit) +-- end + w := widget_factory.widgets.definite_item (a_unit) + w.set_dimming_level ({DIMABLE}.Bright) + w.paint + highlighted_widgets.extend (w) + is_highlighting_units := true + end + + normalize_locations + -- Restor all location widgets to a normal brightness level + local + w: LOCATION_WIDGET + do +-- from world.location_widgets.start +-- until world.location_widgets.after +-- loop +-- w := world.location_widgets.item_for_iteration +-- w.set_dimming_level ({DIMABLE}.Normal) +-- w.paint +-- world.location_widgets.forth +-- end +-- is_highlighting_location := false + end + + normalize_units + -- Restore all attack widgets to a normal brightness level + local + w: ATTACK_UNIT_WIDGET + do +-- from world.attack_widgets.start +-- until world.attack_widgets.after +-- loop +-- w := world.attack_widgets.item_for_iteration +-- w.set_dimming_level ({DIMABLE}.Normal) +-- w.paint +-- world.attack_widgets.forth +-- end +-- is_highlighting_units := false + end + +feature --{VITP_WIDGET} -- Implementation + + task_force_widgets: VITP_WIDGET_TABLE [TASK_FORCE_WIDGET, TASK_FORCE] + + last_mouse_position: EV_COORDINATE + -- For possible restoration to the location where the reposition began + + forwarded_widget: detachable ATTACK_UNIT_WIDGET + -- A widget that has been brought to the top of its owner + + forwarded_widget_owner: detachable VITP_WIDGET + -- The widget in which `forwarded_widget' resides + + highlighted_widgets: LINKED_SET [VITP_WIDGET] + -- The widgets with the focus + + top_left_dot: EV_MODEL_DOT + -- A dot at top left of the board, that will scale and scroll with the view, + -- whose position when compared with `bottom_right_dot' provides a scale + -- factor used to position widgets + + bottom_right_dot: EV_MODEL_DOT + -- See `top_left_dot' + +feature {NONE} -- Implementation + +-- X_stacking_increment: INTEGER +-- -- The distance in pixels to offset a stacked widget in the x direction +-- local +-- w: ATTACK_UNIT_WIDGET +-- do +-- -- Since we base this distance on the current size of a ship widget, +-- -- we must ensure we have a widget from which to calculate the value. +-- check not world.attack_widgets.is_empty then +-- w := world.attack_widgets.iteration_item (1) +---- Result := (w.tile_size / 10).rounded +-- Result := (w.tile_size / 10).rounded +-- end +-- end + +-- Y_stacking_increment: INTEGER +-- -- The distance in pixels to offset a stacked widget in the x direction +-- local +-- w: ATTACK_UNIT_WIDGET +-- do +-- -- Since we base this distance on the current size of a ship widget, +-- -- we must ensure we have a widget from which to calculate the value. +-- check not world.attack_widgets.is_empty then +-- w := world.attack_widgets.iteration_item (1) +---- Result := (w.tile_size / 10).rounded +-- Result := (w.tile_size / 10).rounded +-- end +-- end + + +--feature {NONE} -- Implemetation + +-- target_imp: detachable VITP_GAME +-- -- Detachable implementation of `target' for void safety + +end diff --git a/jj_vitp/Interface/views/chart_tool.e b/jj_vitp/Interface/views/chart_tool.e new file mode 100644 index 0000000..f3d49db --- /dev/null +++ b/jj_vitp/Interface/views/chart_tool.e @@ -0,0 +1,152 @@ +note + description: "[ + Used to hold a CHART_VIEW in the VITP game program. + ]" + author: "Jimmy J. Johnson" + +class + CHART_TOOL + +inherit + + VITP_TOOL + redefine + create_interface_objects, + initialize, +-- add_actions, + set_target, + draw + end + +create + default_create, + make + +feature {NONE} -- Initialization + + create_interface_objects + -- Create objects to be used by `Current' in `initialize' + -- Implemented by descendants to create attached objects + -- in order to adhere to void-safety due to the implementation bridge pattern. + do + Precursor {VITP_TOOL} + create japanese_oa_chart_view.make (vitp) + create allied_oa_chart_view.make (vitp) + create allied_starting_forces_view.make (vitp) + end + + initialize + -- Build the interface for this window + do + Precursor {VITP_TOOL} + disable_history + split_manager.extend (japanese_oa_chart_view) + split_manager.extend (allied_starting_forces_view) + split_manager.set_vertical + split_manager.extend (allied_oa_chart_view) + end + +-- add_actions +-- -- Add actions to views +-- do +-- Precursor +---- japanese_oa_chart_view.pointer_button_press_actions.extend (agent on_pressed (japanese_oa_chart_view, ?,?,?,?,?,?,?,?)) +---- allied_oa_chart_view.pointer_button_press_actions.extend (agent on_pressed (allied_oa_chart_view, ?,?,?,?,?,?,?,?)) +---- allied_starting_forces_view.pointer_button_press_actions.extend (agent on_pressed (allied_starting_forces_view, ?,?,?,?,?,?,?,?)) + +-- allied_starting_forces_view.pointer_enter_actions.extend (agent on_enter) +-- allied_starting_forces_view.pointer_button_release_actions.extend (agent on_pressed (allied_starting_forces_view, ?,?,?,?,?,?,?,?)) +-- end + +feature {NONE} -- Agent actions + + on_enter + -- Test actions + do + io.put_string (generating_type.name + ".on_enter: %N") + end + + on_pressed (a_view: ORDER_OF_APPEARANCE_VIEW; + ax, ay, button: INTEGER; + ax_tilt, ay_tilt, a_pressure: DOUBLE; + a_screen_x, a_screen_y: INTEGER) + -- I was going to use this feature for setting the `focused_view' + -- when the user clicks within one of the views, but it never gets + -- called (so I commented out `add_actions'). I bet the event + -- loop never checks for `pointer_press_actions'. ??? + do + io.put_string (generating_type.name + ".on_pressed: " + a_view.generating_type.name + "%N") + focused_view_imp := a_view + end + +feature -- Access + +-- target: VITP_GAME + + japanese_oa_chart_view: JAPANESE_ORDER_OF_APPEARANCE_CHART_VIEW + -- The view representing the Japanese order of appearance + + allied_oa_chart_view: ALLIED_ORDER_OF_APPEARANCE_CHART_VIEW + -- The view representing the Allied ordr of appearance + + allied_starting_forces_view: ALLIED_STARTING_FORCES_VIEW + -- The view reprsenting the Allied, turn 1, starting forces chart + + focused_view: VITP_CELL_VIEW + -- The view that currently has the focus + do + if attached focused_view_imp as v and then v.is_displayed then + Result := v + else + if japanese_oa_chart_view.is_displayed then + Result := japanese_oa_chart_view + elseif allied_oa_chart_view.is_displayed then + Result := allied_oa_chart_view + elseif allied_starting_forces_view.is_displayed then + Result := allied_starting_forces_view + else + -- Unlikely, but all view are hidden, so default + Result := japanese_oa_chart_view + end + end + end + +feature -- Element change + + set_target (a_game: like vitp) + -- Change the value of `target' and add it to the `target_set' (the set + -- of objects contained in this view. The old target is removed from + -- the set. + do + Precursor {VITP_TOOL} (a_game) + japanese_oa_chart_view.set_target (a_game) + allied_oa_chart_view.set_target (a_game) + allied_starting_forces_view.set_target (a_game) + end + + set_focused_view (a_view: ORDER_OF_APPEARANCE_VIEW) + -- Set `focused_view' to `a_view'. + -- Called by {ORDER_OF_APPEARANCE_VIEW} when `a_view' was clicked + require + valid_view: a_view = japanese_oa_chart_view or + a_view = allied_oa_chart_view or + a_view = allied_starting_forces_view + do + focused_view_imp := a_view + end + +feature -- Basic operations + + draw + -- Redraw the tool and the contained view + do + Precursor {VITP_TOOL} + japanese_oa_chart_view.draw + allied_oa_chart_view.draw + end + +feature {NONE} -- Implementation + + focused_view_imp: detachable like focused_view + -- Implementaion of `focused_view' +end diff --git a/jj_vitp/Interface/views/game_sequence_tool.e b/jj_vitp/Interface/views/game_sequence_tool.e new file mode 100644 index 0000000..f144b57 --- /dev/null +++ b/jj_vitp/Interface/views/game_sequence_tool.e @@ -0,0 +1,113 @@ +note + description: "[ + Tool to manipulate the sequence of the game play. + ]" + author: "Jimmy J. Johnson" + +class + GAME_SEQUENCE_TOOL + +inherit + + VITP_TOOL + redefine + create_interface_objects, + initialize, + build_tool_bar, + add_actions, + set_target, + draw + end + + GAME_CONSTANTS + export + {NONE} + all + undefine + default_create, + copy + end + +create + default_create, + make + +feature {NONE} -- Initialization + + create_interface_objects + -- Create objects to be used by `Current' in `initialize' + -- Implemented by descendants to create attached objects + -- in order to adhere to void-safety due to the implementation bridge pattern. + do + Precursor {VITP_TOOL} + create advance_button + advance_button.set_pixmap (create {EV_PIXMAP}.make_with_pixel_buffer (Icon_supplier_color_buffer)) + advance_button.set_tooltip ("Advance") + create view.make (vitp) + end + + initialize + -- Build the interface for this window + do + Precursor {VITP_TOOL} + split_manager.extend (view) +-- set_target (vitp) + end + + add_actions + -- Add functionality to the buttons + do + Precursor {VITP_TOOL} + advance_button.select_actions.extend (agent on_advance) + end + + build_tool_bar + -- Add buttons to `tool_bar' (from TOOL). + do + Precursor {VITP_TOOL} +-- tool_bar.extend (advance_button) + end + +feature -- Access + + view: GAME_SEQUENCE_VIEW + -- Handle to the view corresponding to the first view created by the + -- `view_manager' in `initialize'. + -- Convinience feature. + + focused_view: VITP_CELL_VIEW + -- The view that currently has the focus + do + Result := view + end + +feature -- Element change + + set_target (a_game: like vitp) + -- Change the `target' + do + Precursor {VITP_TOOL} (a_game) + view.set_target (a_game) + end + + draw + -- Redraw the view + do + view.draw + end + +feature {NONE} -- Actions + + on_advance + -- React to a press of the `advance_button' + do +-- sop.forth + draw_views (vitp) + end + +feature {NONE} -- Implementation + + advance_button: EV_TOOL_BAR_BUTTON + -- Button to advance to the next phase/step of the game + +end diff --git a/jj_vitp/Interface/views/game_sequence_view.e b/jj_vitp/Interface/views/game_sequence_view.e new file mode 100644 index 0000000..0d4b984 --- /dev/null +++ b/jj_vitp/Interface/views/game_sequence_view.e @@ -0,0 +1,93 @@ +note + description: "[ + View to display the sequence of the vitp.play. + ]" + author: "Jimmy J. Johnson" + +class + GAME_SEQUENCE_VIEW + +inherit + + VITP_CELL_VIEW + redefine + create_interface_objects, + initialize, + draw +-- target_imp + end + + GAME_CONSTANTS + export + {NONE} + all + undefine + default_create, + copy + end + +create + make + +feature {NONE} -- Initialization + + create_interface_objects + -- Create objects to be used by `Current' in `initialize' + -- Implemented by descendants to create attached objects + -- in order to adhere to void-safety due to the implementation bridge pattern. + do + Precursor {VITP_CELL_VIEW} + create turn_text + create phase_text + create step_text + create player_text + end + + initialize + -- Create the text widgets making up current + local + rp: EV_COORDINATE + do + Precursor {VITP_CELL_VIEW} + world.extend (turn_text) + world.extend (phase_text) + world.extend (step_text) + world.extend (player_text) + create rp.make (10, 10) + turn_text.set_point (rp) + create rp.make (10, 30) + phase_text.set_point (rp) + create rp.make (10, 50) + step_text.set_point (rp) + create rp.make (10, 70) + player_text.set_point (rp) + end + +feature -- Basic operations + + draw + -- Redraw the view + do + io.put_string (generating_type.name + ".draw: fix me %N") +-- turn_text.set_text ("Turn: %T" + vitp.turn.out) +-- phase_text.set_text ("Phase: %T" + vitp.phase_text) +-- step_text.set_text ("Set: %T" + vitp.stage_text) +-- player_text.set_text ("Player: %T" + vitp.player_text) + Precursor {VITP_CELL_VIEW} + end + +feature {NONE} -- Implementation + +-- target_imp: detachable VITP_SEQUENCE_OF_PLAY +-- -- The target of this view + + turn_text: EV_MODEL_TEXT + + phase_text: EV_MODEL_TEXT + + step_text: EV_MODEL_TEXT + + player_text: EV_MODEL_TEXT + + +end diff --git a/jj_vitp/Interface/views/japanese_forces_factory.e b/jj_vitp/Interface/views/japanese_forces_factory.e new file mode 100644 index 0000000..ecb01e3 --- /dev/null +++ b/jj_vitp/Interface/views/japanese_forces_factory.e @@ -0,0 +1,439 @@ +note + description: "[ + One of the classes that decompose the numourous VITP widgets + into more managable groups containing the Japanese-unit widgets. + ]" + author: "Jimmy J. Johnson" + date: "5/15/24" + copyright: "Copyright (c) 2024, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +class + JAPANESE_FORCES_FACTORY + +inherit + + WIDGET_FACTORY + redefine + make_widgets, + extend_widgets, + pair_widgets, + fill_widgets + end + +create + make + +feature {NONE} -- Initialization + + make_widgets + -- Create widgets for the corresponding game item + do + print ("JAPANESE_FORCES_WIDGET_FACTORY.make_widgets %N") + Precursor {WIDGET_FACTORY} + print ("%T JAPANESE_FORCES_WIDGET_FACTORY.make_widgets after Precursor call %N") + create japanese_forces_widgets.make (100) + print ("%T JAPANESE_FORCES_WIDGET_FACTORY.make_widgets after create japanese_forces_widgets %N") + -- Turn 1 + check attached game then + print ("%T JAPANESE_FORCES_WIDGET_FACTORY.make_widgets check statement %N") + print ("%T JAPANESE_FORCES_WIDGET_FACTORY.make_widgets " + game.shokaku.name + "%N") + + end + create shokaku_widget.make (game.shokaku) + print ("%T JAPANESE_FORCES_WIDGET_FACTORY.make_widgets after create shokaku_widget %N") + create zuikaku_widget.make (game.zuikaku) + create akagi_widget.make (game.akagi) + create kaga_widget.make (game.kaga) + create soryu_widget.make (game.soryu) + create hiryu_widget.make (game.hiryu) + create ryujo_widget.make (game.ryujo) + create hosho_widget.make (game.hosho) + create zuiho_widget.make (game.zuiho) + create mutsu_widget.make (game.mutsu) + create nagato_widget.make (game.nagato) + create fuso_widget.make (game.fuso) + create hyuga_widget.make (game.hyuga) + create ise_widget.make (game.ise) + create yamashiro_widget.make (game.yamashiro) + create haruna_widget.make (game.haruna) + create hiei_widget.make (game.hiei) + create kirishima_widget.make (game.kirishima) + create kongo_widget.make (game.kongo) + create ashigara_widget.make (game.ashigara) + create atago_widget.make (game.atago) + create chokai_widget.make (game.chokai) + create haguro_widget.make (game.haguro) + create maya_widget.make (game.maya) + create myoko_widget.make (game.myoko) + create nachi_widget.make (game.nachi) + create takao_widget.make (game.takao) + create chikuma_widget.make (game.chikuma) + create kumano_widget.make (game.kumano) + create mikuma_widget.make (game.mikuma) + create mogami_widget.make (game.mogami) + create suzuya_widget.make (game.suzuya) + create tone_widget.make (game.tone) + create aoba_widget.make (game.aoba) + create furutaka_widget.make (game.furutaka) + create kako_widget.make (game.kako) + create kinugasa_widget.make (game.kinugasa) + create kitakami_widget.make (game.kitakami) + create oi_widget.make (game.oi) + create yokosuka_widget.make (game.yokosuka) + create airflot_21_widget.make (game.airflot_21) + create airflot_22_widget.make (game.airflot_22) + create airflot_23_widget.make (game.airflot_23) + create airflot_24_widget.make (game.airflot_24) + create airflot_25_widget.make (game.airflot_25) + create airflot_26_widget.make (game.airflot_26) + create i_boat_widget.make (game.i_boat) + -- Turn 2 + create shoho_widget.make (game.shoho) + create junyo_widget.make (game.junyo) + create sasebo_widget.make (game.sasebo) + -- Turn 3 + create hiyo_widget.make (game.hiyo) + create yamato_widget.make (game.yamato) + create kure_widget.make (game.kure) + -- Turn 4 + do_nothing + -- Turn 5 + create musashi_widget.make (game.musashi) + -- Turn 6 + do_nothing + -- Turn 7 + create chiyoda_widget.make (game.chiyoda) + create chitose_widget.make (game.chitose) + create ryuho_widget.make (game.ryuho) + create taiho_widget.make (game.taiho) + create i_boat_removal_widget.make (game.i_boat_removal) + -- Turn 8 + create unryu_widget.make (game.unryu) + create amagi_widget.make (game.amagi) + -- Turn 9 + create katsuragi_widget.make (game.katsuragi) + create shinano_widget.make (game.shinano) + end + +feature -- Access (tables) + + japanese_forces_widgets: VITP_WIDGET_TABLE [ATTACK_UNIT_WIDGET, ATTACK_UNIT] + -- Keeps track of widgets + +feature -- Access (Japanese unit widgets) + + -- Turn 1, row 1 + shokaku_widget: SHIP_WIDGET + zuikaku_widget: SHIP_WIDGET + akagi_widget: SHIP_WIDGET + kaga_widget: SHIP_WIDGET + soryu_widget: SHIP_WIDGET + hiryu_widget: SHIP_WIDGET + ryujo_widget: SHIP_WIDGET + hosho_widget: SHIP_WIDGET + zuiho_widget: SHIP_WIDGET + mutsu_widget: SHIP_WIDGET + nagato_widget: SHIP_WIDGET + fuso_widget: SHIP_WIDGET + -- Turn 1, row 2 + hyuga_widget: SHIP_WIDGET + ise_widget: SHIP_WIDGET + yamashiro_widget: SHIP_WIDGET + haruna_widget: SHIP_WIDGET + hiei_widget: SHIP_WIDGET + kirishima_widget: SHIP_WIDGET + kongo_widget: SHIP_WIDGET + ashigara_widget: SHIP_WIDGET + atago_widget: SHIP_WIDGET + chokai_widget: SHIP_WIDGET + haguro_widget: SHIP_WIDGET + maya_widget: SHIP_WIDGET + -- Turn 1, row 3 + myoko_widget: SHIP_WIDGET + nachi_widget: SHIP_WIDGET + takao_widget: SHIP_WIDGET + chikuma_widget: SHIP_WIDGET + kumano_widget: SHIP_WIDGET + mikuma_widget: SHIP_WIDGET + mogami_widget: SHIP_WIDGET + suzuya_widget: SHIP_WIDGET + tone_widget: SHIP_WIDGET + aoba_widget: SHIP_WIDGET + furutaka_widget: SHIP_WIDGET + kako_widget: SHIP_WIDGET + -- Turn 1, row 4 + kinugasa_widget: SHIP_WIDGET + kitakami_widget: SHIP_WIDGET + oi_widget: SHIP_WIDGET + yokosuka_widget: AMPHIBIOUS_UNIT_WIDGET + -- Turn 1, also available + airflot_21_widget: JAPANESE_AIR_UNIT_WIDGET + airflot_22_widget: JAPANESE_AIR_UNIT_WIDGET + airflot_23_widget: JAPANESE_AIR_UNIT_WIDGET + airflot_24_widget: JAPANESE_AIR_UNIT_WIDGET + airflot_25_widget: JAPANESE_AIR_UNIT_WIDGET + airflot_26_widget: JAPANESE_AIR_UNIT_WIDGET + i_boat_widget: SUBMARINE_WIDGET + -- Turn 2 + shoho_widget: SHIP_WIDGET + junyo_widget: SHIP_WIDGET + sasebo_widget: AMPHIBIOUS_UNIT_WIDGET + -- Turn 3 + hiyo_widget: SHIP_WIDGET + yamato_widget: SHIP_WIDGET + kure_widget: AMPHIBIOUS_UNIT_WIDGET + -- Turn 5 + musashi_widget: SHIP_WIDGET + -- Turn 7 + chiyoda_widget: SHIP_WIDGET + chitose_widget: SHIP_WIDGET + ryuho_widget: SHIP_WIDGET + taiho_widget: SHIP_WIDGET + i_boat_removal_widget: SUBMARINE_WIDGET + -- Turn 8 + unryu_widget: SHIP_WIDGET + amagi_widget: SHIP_WIDGET + -- Turn 9 + katsuragi_widget: SHIP_WIDGET + shinano_widget: SHIP_WIDGET + +feature {NONE} -- Implementation + + extend_widgets + -- Put each widget into `world'. + do + -- Turn 1, row 1 + japanese_forces_widgets.extend (shokaku_widget, game.shokaku) + japanese_forces_widgets.extend (zuikaku_widget, game.zuikaku) + japanese_forces_widgets.extend (akagi_widget, game.akagi) + japanese_forces_widgets.extend (kaga_widget, game.kaga) + japanese_forces_widgets.extend (soryu_widget, game.soryu) + japanese_forces_widgets.extend (hiryu_widget, game.hiryu) + japanese_forces_widgets.extend (ryujo_widget, game.ryujo) + japanese_forces_widgets.extend (hosho_widget, game.hosho) + japanese_forces_widgets.extend (zuiho_widget, game.zuiho) + japanese_forces_widgets.extend (mutsu_widget, game.mutsu) + japanese_forces_widgets.extend (nagato_widget, game.nagato) + japanese_forces_widgets.extend (fuso_widget, game.fuso) + -- Turn 1, row 2 + japanese_forces_widgets.extend (hyuga_widget, game.hyuga) + japanese_forces_widgets.extend (ise_widget, game.ise) + japanese_forces_widgets.extend (yamashiro_widget, game.yamashiro) + japanese_forces_widgets.extend (haruna_widget, game.haruna) + japanese_forces_widgets.extend (hiei_widget, game.hiei) + japanese_forces_widgets.extend (kirishima_widget, game.kirishima) + japanese_forces_widgets.extend (kongo_widget, game.kongo) + japanese_forces_widgets.extend (ashigara_widget, game.ashigara) + japanese_forces_widgets.extend (atago_widget, game.atago) + japanese_forces_widgets.extend (chokai_widget, game.chokai) + japanese_forces_widgets.extend (haguro_widget, game.haguro) + japanese_forces_widgets.extend (maya_widget, game.maya) + -- Turn 1, row 3 + japanese_forces_widgets.extend (myoko_widget, game.myoko) + japanese_forces_widgets.extend (nachi_widget, game.nachi) + japanese_forces_widgets.extend (takao_widget, game.takao) + japanese_forces_widgets.extend (chikuma_widget, game.chikuma) + japanese_forces_widgets.extend (kumano_widget, game.kumano) + japanese_forces_widgets.extend (mikuma_widget, game.mikuma) + japanese_forces_widgets.extend (mogami_widget, game.mogami) + japanese_forces_widgets.extend (suzuya_widget, game.suzuya) + japanese_forces_widgets.extend (tone_widget, game.tone) + japanese_forces_widgets.extend (aoba_widget, game.aoba) + japanese_forces_widgets.extend (furutaka_widget, game.furutaka) + japanese_forces_widgets.extend (kako_widget, game.kako) + -- Turn 1, row 4 + japanese_forces_widgets.extend (kinugasa_widget, game.kinugasa) + japanese_forces_widgets.extend (kitakami_widget, game.kitakami) + japanese_forces_widgets.extend (oi_widget, game.oi) + japanese_forces_widgets.extend (yokosuka_widget, game.yokosuka) + -- Turn 1, also available + japanese_forces_widgets.extend (airflot_21_widget, game.airflot_21) + japanese_forces_widgets.extend (airflot_22_widget, game.airflot_22) + japanese_forces_widgets.extend (airflot_23_widget, game.airflot_23) + japanese_forces_widgets.extend (airflot_24_widget, game.airflot_24) + japanese_forces_widgets.extend (airflot_25_widget, game.airflot_25) + japanese_forces_widgets.extend (airflot_26_widget, game.airflot_26) + japanese_forces_widgets.extend (i_boat_widget, game.i_boat) + -- Turn 2 + japanese_forces_widgets.extend (shoho_widget, game.shoho) + japanese_forces_widgets.extend (junyo_widget, game.junyo) + japanese_forces_widgets.extend (sasebo_widget, game.sasebo) + -- Turn 3 + japanese_forces_widgets.extend (hiyo_widget, game.hiyo) + japanese_forces_widgets.extend (yamato_widget, game.yamato) + japanese_forces_widgets.extend (kure_widget, game.kure) + -- Turn 5 + japanese_forces_widgets.extend (musashi_widget, game.musashi) + -- Turn 7 + japanese_forces_widgets.extend (chiyoda_widget, game.chiyoda) + japanese_forces_widgets.extend (chitose_widget, game.chitose) + japanese_forces_widgets.extend (ryuho_widget, game.ryuho) + japanese_forces_widgets.extend (taiho_widget, game.taiho) + -- Turn 8 + japanese_forces_widgets.extend (unryu_widget, game.unryu) + japanese_forces_widgets.extend (amagi_widget, game.amagi) + -- Turn 9 + japanese_forces_widgets.extend (katsuragi_widget, game.katsuragi) + japanese_forces_widgets.extend (shinano_widget, game.shinano) + widgets.merge (japanese_forces_widgets) + end + + pair_widgets + -- Associate each widget with a unit + do + -- Turn 1, row 1 + japanese_forces_widgets.force (shokaku_widget, game.shokaku) + japanese_forces_widgets.force (zuikaku_widget, game.zuikaku) + japanese_forces_widgets.force (akagi_widget, game.akagi) + japanese_forces_widgets.force (kaga_widget, game.kaga) + japanese_forces_widgets.force (soryu_widget, game.soryu) + japanese_forces_widgets.force (hiryu_widget, game.hiryu) + japanese_forces_widgets.force (ryujo_widget, game.ryujo) + japanese_forces_widgets.force (hosho_widget, game.hosho) + japanese_forces_widgets.force (zuiho_widget, game.zuiho) + japanese_forces_widgets.force (mutsu_widget, game.mutsu) + japanese_forces_widgets.force (nagato_widget, game.nagato) + japanese_forces_widgets.force (fuso_widget, game.fuso) + -- Turn 1, row 2 + japanese_forces_widgets.force (hyuga_widget, game.hyuga) + japanese_forces_widgets.force (ise_widget, game.ise) + japanese_forces_widgets.force (yamashiro_widget, game.yamashiro) + japanese_forces_widgets.force (haruna_widget, game.haruna) + japanese_forces_widgets.force (hiei_widget, game.hiei) + japanese_forces_widgets.force (kirishima_widget, game.kirishima) + japanese_forces_widgets.force (kongo_widget, game.kongo) + japanese_forces_widgets.force (ashigara_widget, game.ashigara) + japanese_forces_widgets.force (atago_widget, game.atago) + japanese_forces_widgets.force (chokai_widget, game.chokai) + japanese_forces_widgets.force (haguro_widget, game.haguro) + japanese_forces_widgets.force (maya_widget, game.maya) + -- Turn 1, row 3 + japanese_forces_widgets.force (myoko_widget, game.myoko) + japanese_forces_widgets.force (nachi_widget, game.nachi) + japanese_forces_widgets.force (takao_widget, game.takao) + japanese_forces_widgets.force (chikuma_widget, game.chikuma) + japanese_forces_widgets.force (kumano_widget, game.kumano) + japanese_forces_widgets.force (mikuma_widget, game.mikuma) + japanese_forces_widgets.force (mogami_widget, game.mogami) + japanese_forces_widgets.force (suzuya_widget, game.suzuya) + japanese_forces_widgets.force (tone_widget, game.tone) + japanese_forces_widgets.force (aoba_widget, game.aoba) + japanese_forces_widgets.force (furutaka_widget, game.furutaka) + japanese_forces_widgets.force (kako_widget, game.kako) + -- Turn 1, row 4 + japanese_forces_widgets.force (kinugasa_widget, game.kinugasa) + japanese_forces_widgets.force (kitakami_widget, game.kitakami) + japanese_forces_widgets.force (oi_widget, game.oi) + japanese_forces_widgets.force (yokosuka_widget, game.yokosuka) + -- Turn 1, also available + japanese_forces_widgets.force (airflot_21_widget, game.airflot_21) + japanese_forces_widgets.force (airflot_22_widget, game.airflot_22) + japanese_forces_widgets.force (airflot_23_widget, game.airflot_23) + japanese_forces_widgets.force (airflot_24_widget, game.airflot_24) + japanese_forces_widgets.force (airflot_25_widget, game.airflot_25) + japanese_forces_widgets.force (airflot_26_widget, game.airflot_26) + japanese_forces_widgets.force (i_boat_widget, game.i_boat) + -- Turn 2 + japanese_forces_widgets.force (shoho_widget, game.shoho) + japanese_forces_widgets.force (junyo_widget, game.junyo) + japanese_forces_widgets.force (sasebo_widget, game.sasebo) + -- Turn 3 + japanese_forces_widgets.force (hiyo_widget, game.hiyo) + japanese_forces_widgets.force (yamato_widget, game.yamato) + japanese_forces_widgets.force (kure_widget, game.kure) + -- Turn 5 + japanese_forces_widgets.force (musashi_widget, game.musashi) + -- Turn 7 + japanese_forces_widgets.force (chiyoda_widget, game.chiyoda) + japanese_forces_widgets.force (chitose_widget, game.chitose) + japanese_forces_widgets.force (ryuho_widget, game.ryuho) + japanese_forces_widgets.force (taiho_widget, game.taiho) + -- Turn 8 + japanese_forces_widgets.force (unryu_widget, game.unryu) + japanese_forces_widgets.force (amagi_widget, game.amagi) + -- Turn 9 + japanese_forces_widgets.force (katsuragi_widget, game.katsuragi) + japanese_forces_widgets.force (shinano_widget, game.shinano) + end + + fill_widgets + -- Call `set_target' to give each widget a target. + do + -- Turn 1, row 1 + shokaku_widget.set_target (game.shokaku) + zuikaku_widget.set_target (game.zuikaku) + akagi_widget.set_target (game.akagi) + kaga_widget.set_target (game.kaga) + soryu_widget.set_target (game.soryu) + hiryu_widget.set_target (game.hiryu) + ryujo_widget.set_target (game.ryujo) + hosho_widget.set_target (game.hosho) + zuiho_widget.set_target (game.zuiho) + mutsu_widget.set_target (game.mutsu) + nagato_widget.set_target (game.nagato) + fuso_widget.set_target (game.fuso) + -- Turn 1, row 2 + hyuga_widget.set_target (game.hyuga) + ise_widget.set_target (game.ise) + yamashiro_widget.set_target (game.yamashiro) + haruna_widget.set_target (game.haruna) + hiei_widget.set_target (game.hiei) + kirishima_widget.set_target (game.kirishima) + kongo_widget.set_target (game.kongo) + ashigara_widget.set_target (game.ashigara) + atago_widget.set_target (game.atago) + chokai_widget.set_target (game.chokai) + haguro_widget.set_target (game.haguro) + maya_widget.set_target (game.maya) + -- Turn 1, row 3 + myoko_widget.set_target (game.myoko) + nachi_widget.set_target (game.nachi) + takao_widget.set_target (game.takao) + chikuma_widget.set_target (game.chikuma) + kumano_widget.set_target (game.kumano) + mikuma_widget.set_target (game.mikuma) + mogami_widget.set_target (game.mogami) + suzuya_widget.set_target (game.suzuya) + tone_widget.set_target (game.tone) + aoba_widget.set_target (game.aoba) + furutaka_widget.set_target (game.furutaka) + kako_widget.set_target (game.kako) + -- Turn 1, row 4 + kinugasa_widget.set_target (game.kinugasa) + kitakami_widget.set_target (game.kitakami) + oi_widget.set_target (game.oi) + yokosuka_widget.set_target (game.yokosuka) + -- Turn 1, also available + airflot_21_widget.set_target (game.airflot_21) + airflot_22_widget.set_target (game.airflot_22) + airflot_23_widget.set_target (game.airflot_23) + airflot_24_widget.set_target (game.airflot_24) + airflot_25_widget.set_target (game.airflot_25) + airflot_26_widget.set_target (game.airflot_26) + i_boat_widget.set_target (game.i_boat) + -- Turn 2 + shoho_widget.set_target (game.shoho) + junyo_widget.set_target (game.junyo) + sasebo_widget.set_target (game.sasebo) + -- Turn 3 + hiyo_widget.set_target (game.hiyo) + yamato_widget.set_target (game.yamato) + kure_widget.set_target (game.kure) + -- Turn 5 + musashi_widget.set_target (game.musashi) + -- Turn 7 + chiyoda_widget.set_target (game.chiyoda) + chitose_widget.set_target (game.chitose) + ryuho_widget.set_target (game.ryuho) + taiho_widget.set_target (game.taiho) + i_boat_removal_widget.set_target (game.i_boat_removal) + -- Turn 8 + unryu_widget.set_target (game.unryu) + amagi_widget.set_target (game.amagi) + -- Turn 9 + katsuragi_widget.set_target (game.katsuragi) + shinano_widget.set_target (game.shinano) + end + +end diff --git a/jj_vitp/Interface/views/japanese_order_of_appearance_chart_view.e b/jj_vitp/Interface/views/japanese_order_of_appearance_chart_view.e new file mode 100644 index 0000000..af59461 --- /dev/null +++ b/jj_vitp/Interface/views/japanese_order_of_appearance_chart_view.e @@ -0,0 +1,374 @@ +note + description: "[ + A {VIEW} that displays the units and the turns on + which each unit enters the {VITP_GAME} + ]" + author: "Jimmy J. Johnson" + date: "11/11/23" + copyright: "Copyright (c) 2023, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +class + JAPANESE_ORDER_OF_APPEARANCE_CHART_VIEW + +inherit + + ORDER_OF_APPEARANCE_VIEW + redefine + add_widgets, + add_units, + add_miscellaneous_text, + add_starting_control_widgets, + add_copyright_text, + set_target, + widget_factory + end + +create + make + +feature {NONE} -- Initialization + + add_widgets + -- Create the widgets for the chart + do + Precursor + add_removals + end + + add_turns + -- Add the "TURN X" and "TO date" texts + local + i: INTEGER + do + from i := 1 + until i > 9 + loop + add_turn_text (i) + i := i + 1 + end + end + + add_miscellaneous_text + -- Create the remaining EV_TEXT objects for the chart + local + p, cp: EV_COORDINATE + i: INTEGER + t: EV_MODEL_TEXT + do + Precursor + -- "At Yokosuka Navy Yard" text (placed relative to the "TURN X" text) + create p + from i := 1 + until i > 8 + loop + p := turn_x_cp (i) + create cp.make (p.x + 42, p.y + 5) + world.extend (new_text_widget ("AT YOKOSUKA NAVY YARD", At_port_font, cp)) + i := i + 1 + end + create cp.make (Turn_9_cp.x + 80, Turn_9_cp.y + 1) + world.extend (new_text_widget ("AT YOKOSUKA %N NAVY YARD", At_port_font, cp)) + -- "Also Available" and other misc. text + world.extend (new_text_widget ("ALSO AVAILABLE", At_port_font, Also_available_cp)) + -- "REMOVAL" above I-boat + cp.set (i_boat_removal_cp.x, i_boat_removal_cp.y - 2 * gap_size) + t := new_text ("REMOVAL", turn_x_losses_font) + t.set_x_y (cp.x, cp.y) + world.extend (t) + end + + add_starting_control_widgets + -- Add the "Starting Control" text and markers if required + local + cp:EV_COORDINATE + t: EV_MODEL_TEXT + s: STRING + rec: EV_MODEL_RECTANGLE + b: EV_MODEL_GROUP + do + Precursor + create cp + -- Make the "Pearl Harbor Raid" box + cp.set (shokaku_cp.x + 4 * ship_size, yokosuka_cp.y + 3 * gap_size) + create rec.make_rectangle (cp.x, cp.y, 8 * ship_size, air_size) + rec.set_foreground_color (color) + world.extend (rec) + -- Make "Pearl Harbor Raid" text + cp.set (rec.x, rec.y - gap_size) + t := new_text ("PEARL HARBOR RAID", at_port_font) + t.set_x_y (cp.x, cp.y) + world.extend (t) + -- Make "As many ships as desired ..." text + cp.set (rec.x, rec.y + gap_size) + s := "As many ships as desired, but only ships with% + % a movement factor of 5 or better" + -- Add "Starting Control" widgets + t := new_text (s, turn_x_losses_font) + t.set_x_y (cp.x, cp.y) + world.extend (t) + -- Position the `flag' marker + cp.set (airflot_21_cp.x + 8 * air_size, airflot_21_cp.y) + flag.set_point_position (cp.x, cp.y) + flag.show + -- Position `big_marker' and `little_marker' relative to `flag' + big_marker.set_x_y (flag.x + 4 * air_size - gap_size, flag.y) + little_marker.set_x_y (flag.x + 7 * air_size, flag.y) + -- Starting control text + t := new_text ("STARTING CONTROL", at_port_font) + t.set_point_position (cp.x, cp.y - 3 * gap_size) + world.extend (t) + s := "%N%NJapanese %N Islands %NMarianas %NMarshalls" + -- Add boxes around the port names + b := new_jagged_box (s, 6, 6, 7, 0) + b.set_point_position (flag.point_x + 2 * air_size, flag.point_y) + world.extend (b) + s := "%N%NYokosuka %N Navy Yard %NTruk %NSaigon" + -- Add boxes around the port names + b := new_jagged_box (s, 6, 6, 7, 0) + b.set_point_position (flag.point_x + 5 * air_size + 2 * gap_size, flag.point_y) + world.extend (b) + s := "%N%NOkinawa %NSaipan %NMalaolap %NKwajalein" + -- Add boxes around the port names + b := new_jagged_box (s, 6, 6, 7, 0) + b.set_point_position (flag.point_x + 8 * air_size + gap_size, flag.point_y) + world.extend (b) + end + + add_removals + -- All removal widgets and "REMOVAL" texts + -- Just one for the I-Boat + do + add_model (positioned_widget (widget_factory.i_boat_removal_widget, i_boat_removal_cp)) + widget_factory.i_boat_removal_widget.set_flipped + widget_factory.i_boat_removal_widget.set_flat + end + + add_units + -- Add {ATTACK_UNIT_WIDGETS} to Current + do + Precursor + add_model (positioned_widget (widget_factory.shokaku_widget, Shokaku_cp)) + add_model (positioned_widget (widget_factory.zuikaku_widget, Zuikaku_cp)) + add_model (positioned_widget (widget_factory.akagi_widget, Akagi_cp)) + add_model (positioned_widget (widget_factory.kaga_widget, Kaga_cp)) + add_model (positioned_widget (widget_factory.soryu_widget, Soryu_cp)) + add_model (positioned_widget (widget_factory.hiryu_widget, Hiryu_cp)) + add_model (positioned_widget (widget_factory.ryujo_widget, Ryujo_cp)) + add_model (positioned_widget (widget_factory.hosho_widget, Hosho_cp)) + add_model (positioned_widget (widget_factory.zuiho_widget, Zuiho_cp)) + add_model (positioned_widget (widget_factory.mutsu_widget, Mutsu_cp)) + add_model (positioned_widget (widget_factory.nagato_widget, Nagato_cp)) + add_model (positioned_widget (widget_factory.fuso_widget, Fuso_cp)) + add_model (positioned_widget (widget_factory.hyuga_widget, Hyuga_cp)) + add_model (positioned_widget (widget_factory.ise_widget, Ise_cp)) + add_model (positioned_widget (widget_factory.yamashiro_widget, Yamashiro_cp)) + add_model (positioned_widget (widget_factory.haruna_widget, Haruna_cp)) + add_model (positioned_widget (widget_factory.hiei_widget, Hiei_cp)) + add_model (positioned_widget (widget_factory.kirishima_widget, Kirishima_cp)) + add_model (positioned_widget (widget_factory.kongo_widget, Kongo_cp)) + add_model (positioned_widget (widget_factory.ashigara_widget, Ashigara_cp)) + add_model (positioned_widget (widget_factory.atago_widget, Atago_cp)) + add_model (positioned_widget (widget_factory.chokai_widget, Chokai_cp)) + add_model (positioned_widget (widget_factory.haguro_widget, Haguro_cp)) + add_model (positioned_widget (widget_factory.maya_widget, Maya_cp)) + add_model (positioned_widget (widget_factory.myoko_widget, Myoko_cp)) + add_model (positioned_widget (widget_factory.nachi_widget, Nachi_cp)) + add_model (positioned_widget (widget_factory.takao_widget, Takao_cp)) + add_model (positioned_widget (widget_factory.chikuma_widget, Chikuma_cp)) + add_model (positioned_widget (widget_factory.kumano_widget, Kumano_cp)) + add_model (positioned_widget (widget_factory.mikuma_widget, Mikuma_cp)) + add_model (positioned_widget (widget_factory.mogami_widget, Mogami_cp)) + add_model (positioned_widget (widget_factory.suzuya_widget, Suzuya_cp)) + add_model (positioned_widget (widget_factory.tone_widget, Tone_cp)) + add_model (positioned_widget (widget_factory.aoba_widget, Aoba_cp)) + add_model (positioned_widget (widget_factory.furutaka_widget, Furutaka_cp)) + add_model (positioned_widget (widget_factory.kako_widget, Kako_cp)) + add_model (positioned_widget (widget_factory.kinugasa_widget, Kinugasa_cp)) + add_model (positioned_widget (widget_factory.kitakami_widget, Kitakami_cp)) + add_model (positioned_widget (widget_factory.oi_widget, Oi_cp)) + add_model (positioned_widget (widget_factory.yokosuka_widget, Yokosuka_cp)) + add_model (positioned_widget (widget_factory.airflot_21_widget, Airflot_21_cp)) + add_model (positioned_widget (widget_factory.airflot_22_widget, Airflot_22_cp)) + add_model (positioned_widget (widget_factory.airflot_23_widget, Airflot_23_cp)) + add_model (positioned_widget (widget_factory.airflot_24_widget, Airflot_24_cp)) + add_model (positioned_widget (widget_factory.airflot_25_widget, Airflot_25_cp)) + add_model (positioned_widget (widget_factory.airflot_26_widget, Airflot_26_cp)) + add_model (positioned_widget (widget_factory.i_boat_widget, I_boat_cp)) + add_model (positioned_widget (widget_factory.shoho_widget, Shoho_cp)) + add_model (positioned_widget (widget_factory.junyo_widget, Junyo_cp)) + add_model (positioned_widget (widget_factory.sasebo_widget, Sasebo_cp)) + add_model (positioned_widget (widget_factory.hiyo_widget, Hiyo_cp)) + add_model (positioned_widget (widget_factory.yamato_widget, Yamato_cp)) + add_model (positioned_widget (widget_factory.kure_widget, Kure_cp)) + add_model (positioned_widget (widget_factory.musashi_widget, Musashi_cp)) + add_model (positioned_widget (widget_factory.chiyoda_widget, Chiyoda_cp)) + add_model (positioned_widget (widget_factory.chitose_widget, Chitose_cp)) + add_model (positioned_widget (widget_factory.ryuho_widget, Ryuho_cp)) + add_model (positioned_widget (widget_factory.taiho_widget, Taiho_cp)) + add_model (positioned_widget (widget_factory.unryu_widget, Unryu_cp)) + add_model (positioned_widget (widget_factory.amagi_widget, Amagi_cp)) + add_model (positioned_widget (widget_factory.katsuragi_widget, Katsuragi_cp)) + add_model (positioned_widget (widget_factory.shinano_widget, Shinano_cp)) + end + + add_copyright_text + -- Add the copy-right notices to each chart + local + cp: EV_COORDINATE + t: EV_MODEL_TEXT + s: STRING + f: EV_FONT + do + create cp + -- Copyright + s := "Copyright 1977, The Avalon Hill Game Co. Balto, MD Printed in U.S.A." + f := small_font + t := new_text (s, f) + cp.set (top_left_cp.x + gap_size, bottom_right_cp.y - 2 * gap_size) + t.set_point_position (cp.x, cp.y) + world.extend (t) + end + +feature -- Access + + location: LOCATION + -- A {LOCATION} from the {VITP_GAME} used in `draw' to determine + -- if a unit is on this chart or somewhere else (i.e. in the game.) + do + Result := game.japanese_oa_chart + end + + title: STRING = "Japanese Order of Appearance Chart" + -- The text at the top of this chart + +feature -- Element change + + set_target (a_item: like game) + -- Associate `a_item' with Current. + do + Precursor (a_item) +-- -- Make the widgets white +-- world.i_boat_removal_widget.set_flipped +-- -- Make it look like print +-- world.i_boat_removal_widget.set_flat + end + +feature {NONE} -- Implementation + + widget_factory: JAPANESE_FORCES_FACTORY + -- Container for all the widget (e.g. attack widget, + -- location widget, etc) + +feature {NONE} -- Control point constants + + bottom_right_cp: EV_COORDINATE do create Result.make (260, 316) end + -- Turn X text + turn_1_cp: EV_COORDINATE do create Result.make (7, 14) end + turn_2_cp: EV_COORDINATE do create Result.make (turn_1_cp.x, 136) end + turn_3_cp: EV_COORDINATE do create Result.make (133, turn_2_cp.y) end + turn_4_cp: EV_COORDINATE do create Result.make (turn_1_cp.x, 170) end + turn_5_cp: EV_COORDINATE do create Result.make (turn_3_cp.x, turn_4_cp.y) end + turn_6_cp: EV_COORDINATE do create Result.make (turn_1_cp.x, 205) end + turn_7_cp: EV_COORDINATE do create Result.make (turn_1_cp.x, 240) end + turn_8_cp: EV_COORDINATE do create Result.make (turn_1_cp.x, 275) end + turn_9_cp: EV_COORDINATE do create Result.make (turn_3_cp.x, turn_8_cp.y) end + -- To some date text + to_dec_41_cp: EV_COORDINATE do create Result.make (turn_1_cp.x + 2, turn_1_cp.y + 8) end + to_may_42_cp: EV_COORDINATE do create Result.make (turn_2_cp.x + 2, turn_2_cp.y + 8) end + to_sep_42_cp: EV_COORDINATE do create Result.make (turn_3_cp.x + 2, turn_3_cp.y + 8) end + to_jan_43_cp: EV_COORDINATE do create Result.make (turn_4_cp.x + 2, turn_4_cp.y + 8) end + to_jun_43_cp: EV_COORDINATE do create Result.make (turn_5_cp.x + 2, turn_5_cp.y + 8) end + to_jan_44_cp: EV_COORDINATE do create Result.make (turn_6_cp.x + 2, turn_6_cp.y + 8) end + to_may_44_cp: EV_COORDINATE do create Result.make (turn_7_cp.x + 2, turn_7_cp.y + 8) end + to_oct_44_cp: EV_COORDINATE do create Result.make (turn_8_cp.x + 2, turn_8_cp.y + 8) end + to_jan_45_cp: EV_COORDINATE do create Result.make (turn_9_cp.x + 2, turn_9_cp.y + 8) end + -- Turn x losses + turn_1_losses_cp: EV_COORDINATE do create Result.make (Turn_3_cp.x + 60, turn_3_cp.y + 12) end + turn_2_losses_cp: EV_COORDINATE do create Result.make (57, turn_5_cp.y + 12) end + turn_3_losses_cp: EV_COORDINATE do create Result.make (turn_1_losses_cp.x, turn_2_losses_cp.y) end + turn_4_losses_cp: EV_COORDINATE do create Result.make (turn_2_losses_cp.x, turn_6_cp.y + 12) end + turn_5_losses_cp: EV_COORDINATE do create Result.make (96, Turn_7_cp.y + 12) end + turn_6_losses_cp: EV_COORDINATE do create Result.make (turn_2_losses_cp.x, Turn_8_cp.y + 12) end + turn_7_losses_cp: EV_COORDINATE do create Result.make (turn_1_losses_cp.x, Turn_6_losses_cp.y) end + -- Misc + also_available_cp: EV_COORDINATE do create Result.make (turn_1_cp.x, 109) end + starting_control_cp: EV_COORDINATE do create Result.make (133, also_available_cp.y - 1) end + -- Turn one, row one + shokaku_cp: EV_COORDINATE do create Result.make (Turn_1_cp.x + 6, Turn_1_cp.y + 12) end + Zuikaku_cp: EV_COORDINATE do create Result.make (Shokaku_cp.x + ship_size, Shokaku_cp.y) end + Akagi_cp: EV_COORDINATE do create Result.make (Zuikaku_cp.x + ship_size, Shokaku_cp.y) end + Kaga_cp: EV_COORDINATE do create Result.make (Akagi_cp.x + ship_size, Shokaku_cp.y) end + Soryu_cp: EV_COORDINATE do create Result.make (Kaga_cp.x + ship_size, Shokaku_cp.y) end + Hiryu_cp: EV_COORDINATE do create Result.make (Soryu_cp.x + ship_size, Shokaku_cp.y) end + Ryujo_cp: EV_COORDINATE do create Result.make (Hiryu_cp.x + ship_size, Shokaku_cp.y) end + Hosho_cp: EV_COORDINATE do create Result.make (Ryujo_cp.x + ship_size, Shokaku_cp.y) end + Zuiho_cp: EV_COORDINATE do create Result.make (Hosho_cp.x + ship_size, Shokaku_cp.y) end + Mutsu_cp: EV_COORDINATE do create Result.make (Zuiho_cp.x + ship_size, Shokaku_cp.y) end + Nagato_cp: EV_COORDINATE do create Result.make (Mutsu_cp.x + ship_size, Shokaku_cp.y) end + Fuso_cp: EV_COORDINATE do create Result.make (Nagato_cp.x + ship_size, Shokaku_cp.y) end + -- Turn one, row 2 + Hyuga_cp: EV_COORDINATE do create Result.make (Shokaku_cp.x, Shokaku_cp.y + ship_size) end + Ise_cp: EV_COORDINATE do create Result.make (Hyuga_cp.x + ship_size, Hyuga_cp.y) end + Yamashiro_cp: EV_COORDINATE do create Result.make (Ise_cp.x + ship_size, Hyuga_cp.y) end + Haruna_cp: EV_COORDINATE do create Result.make (Yamashiro_cp.x + ship_size, Hyuga_cp.y) end + Hiei_cp: EV_COORDINATE do create Result.make (Haruna_cp.x + ship_size, Hyuga_cp.y) end + Kirishima_cp: EV_COORDINATE do create Result.make (Hiei_cp.x + ship_size, Hyuga_cp.y) end + Kongo_cp: EV_COORDINATE do create Result.make (Kirishima_cp.x + ship_size, Hyuga_cp.y) end + Ashigara_cp: EV_COORDINATE do create Result.make (Kongo_cp.x + ship_size, Hyuga_cp.y) end + Atago_cp: EV_COORDINATE do create Result.make (Ashigara_cp.x + ship_size, Hyuga_cp.y) end + Chokai_cp: EV_COORDINATE do create Result.make (Atago_cp.x + ship_size, Hyuga_cp.y) end + Haguro_cp: EV_COORDINATE do create Result.make (Chokai_cp.x + ship_size, Hyuga_cp.y) end + Maya_cp: EV_COORDINATE do create Result.make (Haguro_cp.x + ship_size, Hyuga_cp.y) end + -- Turn one, row 3 + Myoko_cp: EV_COORDINATE do create Result.make (Shokaku_cp.x, Hyuga_cp.y + ship_size) end + Nachi_cp: EV_COORDINATE do create Result.make (Myoko_cp.x + ship_size, Myoko_cp.y) end + Takao_cp: EV_COORDINATE do create Result.make (Nachi_cp.x + ship_size, Myoko_cp.y) end + Chikuma_cp: EV_COORDINATE do create Result.make (Takao_cp.x + ship_size, Myoko_cp.y) end + Kumano_cp: EV_COORDINATE do create Result.make (Chikuma_cp.x + ship_size, Myoko_cp.y) end + Mikuma_cp: EV_COORDINATE do create Result.make (Kumano_cp.x + ship_size, Myoko_cp.y) end + Mogami_cp: EV_COORDINATE do create Result.make (Mikuma_cp.x + ship_size, Myoko_cp.y) end + Suzuya_cp: EV_COORDINATE do create Result.make (Mogami_cp.x + ship_size, Myoko_cp.y) end + Tone_cp: EV_COORDINATE do create Result.make (Suzuya_cp.x + ship_size, Myoko_cp.y) end + Aoba_cp: EV_COORDINATE do create Result.make (Tone_cp.x + ship_size, Myoko_cp.y) end + Furutaka_cp: EV_COORDINATE do create Result.make (Aoba_cp.x + ship_size, Myoko_cp.y) end + Kako_cp: EV_COORDINATE do create Result.make (Furutaka_cp.x + ship_size, Myoko_cp.y) end + -- Turn one, row 4 + Kinugasa_cp: EV_COORDINATE do create Result.make (Shokaku_cp.x, Myoko_cp.y + ship_size) end + Kitakami_cp: EV_COORDINATE do create Result.make (Kinugasa_cp.x + ship_size, Kinugasa_cp.y) end + Oi_cp: EV_COORDINATE do create Result.make (Kitakami_cp.x + ship_size, Kinugasa_cp.y) end + Yokosuka_cp: EV_COORDINATE do create Result.make (Oi_cp.x + ship_size, Kinugasa_cp.y) end + -- "Also Available" row + Airflot_21_cp: EV_COORDINATE do create Result.make (7, 115) end + Airflot_22_cp: EV_COORDINATE do create Result.make (Airflot_21_cp.x + air_size, Airflot_21_cp.y) end + Airflot_23_cp: EV_COORDINATE do create Result.make (Airflot_22_cp.x + air_size, Airflot_21_cp.y) end + Airflot_24_cp: EV_COORDINATE do create Result.make (Airflot_23_cp.x + air_size, Airflot_21_cp.y) end + Airflot_25_cp: EV_COORDINATE do create Result.make (Airflot_24_cp.x + air_size, Airflot_21_cp.y) end + Airflot_26_cp: EV_COORDINATE do create Result.make (Airflot_25_cp.x + air_size, Airflot_21_cp.y) end + I_boat_cp: EV_COORDINATE do create Result.make (Airflot_26_cp.x + air_size, Airflot_21_cp.y + air_size - ship_size) end + -- Turn two + Shoho_cp: EV_COORDINATE do create Result.make (Shokaku_cp.x, Turn_2_cp.y + 12) end + Junyo_cp: EV_COORDINATE do create Result.make (Shoho_cp.x + ship_size, Shoho_cp.y) end + Sasebo_cp: EV_COORDINATE do create Result.make (Junyo_cp.x + ship_size + gap_size, Shoho_cp.y) end + -- Turn three + Hiyo_cp: EV_COORDINATE do create Result.make (Ryujo_cp.x, Shoho_cp.y) end + Yamato_cp: EV_COORDINATE do create Result.make (Hiyo_cp.x + ship_size, Shoho_cp.y) end + Kure_cp: EV_COORDINATE do create Result.make (Yamato_cp.x + ship_size + gap_size, Shoho_cp.y) end + -- Turn four + -- Turn five + Musashi_cp: EV_COORDINATE do create Result.make (Ryujo_cp.x, Turn_5_cp.y + 12) end + -- Turn six + -- Turn seven + Chiyoda_cp: EV_COORDINATE do create Result.make (Shokaku_cp.x, Turn_7_cp.y + 12) end + Chitose_cp: EV_COORDINATE do create Result.make (Chiyoda_cp.x + ship_size, Chiyoda_cp.y) end + Ryuho_cp: EV_COORDINATE do create Result.make (Chitose_cp.x + ship_size, Chiyoda_cp.y) end + Taiho_cp: EV_COORDINATE do create Result.make (Ryuho_cp.x + ship_size, Chiyoda_cp.y) end + i_boat_removal_cp: EV_COORDINATE do create Result.make (turn_7_cp.x + 8 * ship_size, chiyoda_cp.y) end + -- Turn eight + Unryu_cp: EV_COORDINATE do create Result.make (Shokaku_cp.x, Turn_8_cp.y + 12) end + Amagi_cp: EV_COORDINATE do create Result.make (Unryu_cp.x + ship_size, Unryu_cp.y) end + -- Turn nine + Katsuragi_cp: EV_COORDINATE do create Result.make (Ryujo_cp.x, Unryu_cp.y) end + Shinano_cp: EV_COORDINATE do create Result.make (Katsuragi_cp.x + ship_size, Unryu_cp.y) end + +end diff --git a/jj_vitp/Interface/views/location_widgits_factory.e b/jj_vitp/Interface/views/location_widgits_factory.e new file mode 100644 index 0000000..e224f82 --- /dev/null +++ b/jj_vitp/Interface/views/location_widgits_factory.e @@ -0,0 +1,77 @@ +note + description: "[ + One of the classes that decompose the numourous VITP widgets + into more managable groups. This class models the widgets + that contain the ports AND sea areas. + ]" + author: "Jimmy J. Johnson" + date: "5/15/24" + copyright: "Copyright (c) 2024, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + + +class + LOCATION_WIDGITS_FACTORY + +inherit + + PORT_WIDGET_FACTORY + redefine + make_widgets, + extend_widgets, + pair_widgets, + fill_widgets + end + + SEA_AREAS_FACTORY + redefine + make_widgets, + extend_widgets, + pair_widgets, + fill_widgets + end + +create + make + +feature -- Initialization + + make_widgets + -- Create the widgets in Current + do + create location_widgets.make (100) + Precursor {PORT_WIDGET_FACTORY} + Precursor {SEA_AREAS_FACTORY} + end + +feature -- Access + + location_widgets: VITP_WIDGET_TABLE [LOCATION_WIDGET, LOCATION] + -- Keeps track of widgets + +feature {NONE} -- Implementation + + extend_widgets + -- Put each widget into `world'. + do + Precursor {PORT_WIDGET_FACTORY} + Precursor {SEA_AREAS_FACTORY} + location_widgets.merge (port_widgets) + location_widgets.merge (sea_area_widgets) + end + + pair_widgets + -- Associate each widget with a unit + do + Precursor {PORT_WIDGET_FACTORY} + Precursor {SEA_AREAS_FACTORY} + end + + fill_widgets + -- Call `set_target' to give each widget a target. + do + Precursor {PORT_WIDGET_FACTORY} + Precursor {SEA_AREAS_FACTORY} + end + +end diff --git a/jj_vitp/Interface/views/order_of_appearance_view.e b/jj_vitp/Interface/views/order_of_appearance_view.e new file mode 100644 index 0000000..b6cf95b --- /dev/null +++ b/jj_vitp/Interface/views/order_of_appearance_view.e @@ -0,0 +1,888 @@ +note + description: "[ + Root class for the three order-of-appearance charts in + the {VITP_GAME}. + The position of the control points were obtained by measuring + the phisical charts in millimeters from the edge or top. + ]" + author: "Jimmy J. Johnson" + date: "11/11/23" + copyright: "Copyright (c) 2023, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +deferred class + ORDER_OF_APPEARANCE_VIEW + +inherit + + VITP_CELL_VIEW + redefine + create_interface_objects, + initialize, + add_actions, + draw, + set_target + end + + FONT_AND_COLOR_CONSTANTS + undefine + default_create, + copy + end + +feature {NONE} -- Initialization + + create_interface_objects + -- Create attributes + do + Precursor {VITP_CELL_VIEW} + create widget_factory.make (game) + create returning_air_widgets.make + create returning_amphibious_widgets.make + create flag.make (location) + create big_marker.make (location) + create little_marker.make (location) + create background.make_with_points (top_left_cp, bottom_right_cp) + end + + initialize + -- Set up Current + do + -- Precursor creates the `world' and other previously- + -- defined attributes + Precursor {VITP_CELL_VIEW} + set_minimum_size (ship_size * 14, ship_size * 16) + build_flag + build_markers + add_widgets + end + + build_flag + -- Set `flag' characteristics + do + flag.set_flat + flag.show_outline + end + + build_markers + -- Set the characteristics for `big_marker' and `little_marker'. + do + -- `big_marker' + big_marker.scale (0.08) + big_marker.show_boarder + -- `little_marker' + little_marker.scale (0.05) + little_marker.hide_anchor + little_marker.show_boarder + end + + add_actions + -- Add a click event to the background + do + Precursor {VITP_CELL_VIEW} + -- The next line does not work, I use the `background' to + -- pick up the actions. I bet the event loop does not + -- call this actions or a {EV_CELL_VIEW}? + pointer_button_press_actions.extend (agent on_pressed) + background.pointer_button_press_actions.extend (agent on_pressed) + end + + on_pressed (ax, ay, button: INTEGER; + ax_tilt, ay_tilt, a_pressure: DOUBLE; + a_screen_x, a_screen_y: INTEGER) + -- Agent placed in the `background' retangle to allow the + -- user to click, sending a message to the parent {CHART_TOOL} + -- to set Current as the focused view. + local + pt: TOOL + do + io.put_string (generating_type.name + ".on_pressed: " + generating_type.name + "%N") + pt := parent_tool + check attached {CHART_TOOL} parent_tool as t then + t.set_focused_view (Current) + end + end + + add_widgets + -- Add the attack widgets (e.g. Japanese attack widgets) + -- to the view's `world' by calling the appropriate feature + -- (e.g. `extend_allied_attack_unit_widgets', etc) from + -- {WIDGET_FACTORY}. + do + add_background + add_title + add_top_markers + add_turns + add_return_boxes + add_units + add_returning_widgets + add_miscellaneous_text + add_starting_control_widgets + add_copyright_text + end + + add_background + -- Put a rectangle representing the paper of the chart. + -- This is an attempt to get button press actions to get + -- called so that he zoom-in/zoom-out buttons can be applied + -- the the correct view in the enclosing {CHART_TOOL} + do + background.set_background_color (Light_grey) + world.extend (background) + end + + add_title + -- Put the title into Current + local + p: EV_COORDINATE + t: EV_MODEL_TEXT + do + t := new_text (title, title_font) + create p.make (middle_cp.x - t.width // 2 + 4, 4) + t.set_point_position (p.x, p.y) + world.extend (t) + end + + add_top_markers + -- Add the circles or stars to the top of the chart + local + s, s2: STAR + e, e2: EV_MODEL_ELLIPSE + do + if nationality = {NATIONALITY_CONSTANTS}.japanese then + -- Create the red circles + create e.make_with_positions (0, 0, 9, 9) + create e2.make_with_positions (0, 0, 9, 9) + e.set_x_y (26, 8) + e2.set_x_y (240, 8) + e.set_background_color (color) + e.set_foreground_color (color) + e2.set_background_color (color) + e2.set_foreground_color (color) + world.extend (e) + world.extend (e2) + else + -- Create the blue stars + create s + create s2 + s.scale (0.08) + s2.scale (0.08) + s.set_x_y (26, 8) + s2.set_x_y (240, 8) + s.set_foreground_color (color) + s.set_background_color (color) + s2.set_foreground_color (color) + s2.set_background_color (color) + world.extend (s) + world.extend (s2) + end + end + + add_turns + -- Add the "TURN X" and "TO x-date" text + deferred + -- Call `add_turn_text' a number of times + end + + add_turn_text (a_turn: INTEGER) + -- Add the "TURN X" and TO_date_text + local + p: EV_COORDINATE + t: EV_MODEL_TEXT + s: STRING + do + s := "Turn " + a_turn.out + if a_turn = 9 then + s := s + " (Optional)" + end + p := turn_x_cp (a_turn) + t := new_text (s, Turn_font) + t.set_point_position (p.x, p.y) + world.extend (t) + t := new_text (turn_x_date (a_turn), To_date_font) + t.set_point_position (p.x + 2, p.y + 8) + world.extend (t) + end + + add_return_boxes + -- Add the "Returning Air/Land Units" boxes + do + world.extend (new_box_widget ("Turn 1 Losses", Turn_1_losses_cp)) + world.extend (new_box_widget ("Turn 2 Losses", Turn_2_losses_cp)) + world.extend (new_box_widget ("Turn 3 Losses", Turn_3_losses_cp)) + world.extend (new_box_widget ("Turn 4 Losses", Turn_4_losses_cp)) + world.extend (new_box_widget ("Turn 5 Losses", Turn_5_losses_cp)) + world.extend (new_box_widget ("Turn 6 Losses", Turn_6_losses_cp)) + world.extend (new_box_widget ("Turn 7 Losses", Turn_7_losses_cp)) + end + + add_miscellaneous_text + -- Add other texts as necessary + do + end + + add_starting_control_widgets + -- Add the "Starting Control" text and markers if required + do + -- Add the markers, but hide them + world.extend (flag) + world.extend (big_marker) + world.extend (little_marker) + end + + add_copyright_text + -- Add the copy-right notices to each chart + do + end + + new_text (a_text: STRING; a_font: EV_FONT): EV_MODEL_TEXT + -- Create a new model from he parameters + do + create Result.make_with_text (a_text) + Result.set_font (a_font) + Result.set_foreground_color (color) + end + + new_text_widget (a_text: STRING; a_font: EV_FONT; a_point: EV_COORDINATE): EV_MODEL_TEXT + -- Create a new model from the parameters + do + create Result.make_with_text (a_text) + Result.set_font (a_font) + Result.set_foreground_color (color) + Result.set_point_position (a_point.x, a_point.y) + end + + new_box_widget (a_text: STRING; a_point: EV_COORDINATE): EV_MODEL_WORLD + -- Create the "Returning Air/Land Units" box + local + w, mid: INTEGER + lf, rt: INTEGER + p1, p2: EV_COORDINATE + rec: EV_MODEL_RECTANGLE + mt, mt2: EV_MODEL_TEXT + + g: EV_MODEL_GROUP + use_2: BOOLEAN + ret_s, ret_s2: STRING + may_s, may_s2: STRING + mt_ret, mt_turn, mt_may: EV_MODEL_TEXT + correction: INTEGER + do + -- Make the box relative to `ship_size' and don't + -- go beyond the implied border of the `background' + create Result + -- Get an x-point that is relative to right border + w := 3 * ship_size + rt := (a_point.x + w).min (background.point_b.x - 3 * gap_size) + lf := (rt - w).max (a_point.x) + create p1.make (lf, a_point.y) + create p2.make (rt, a_point.y + ship_size) + create rec.make_with_points (p1, p2) + rec.set_foreground_color (color) + rec.set_background_color (lightened (color, 2.8)) + Result.extend (rec) + -- Build a group to hold all the text and center that + -- group in the `rec' + + ret_s := "RETURNING " + ret_s2 := "AIR/LAND UNITS" + may_s := "(may be placed in any friendly " + may_s2 := "major port)" + create g + mt := new_text (ret_s + ret_s2, returning_units_font) + if mt.width >= rec.width * 0.96 then + -- Use two lines for some of the text + use_2 := true + end + mt_turn := new_text (a_text, turn_x_losses_font) + correction := 2 + if use_2 then + -- Break text over two lines + mt_ret := new_text (" " + ret_s + "%N" + ret_s2, returning_units_font) + mt_ret.set_x_y (rec.x, rec.y - mt_ret.height // 2) + mt_turn.set_x_y (rec.x, rec.y + correction) + mt_may := new_text (may_s + "%N " + may_s2, may_be_placed_font) + mt_may.set_x_y (rec.x - 2 * correction, mt_turn.y + mt_turn.height) + else + -- Use one line per text + mt_ret := new_text (ret_s + ret_s2, returning_units_font) + mt_ret.set_x_y (rec.x, rec.y - mt_ret.height) + mt_turn.set_x_y (rec.x, rec.y + correction // 2) + mt_may := new_text (may_s + may_s2, may_be_placed_font) + mt_may.set_x_y (rec.x - 3 * correction, mt_turn.y + mt_turn.height) + end + Result.extend (mt_ret) + Result.extend (mt_turn) + Result.extend (mt_may) + end + + new_jagged_box (a_text: STRING; a_count_1, a_count_2, a_count_3: INTEGER; a_angle: REAL_64): EV_MODEL_GROUP + -- Builds a three-sided box with jagged lines centered around + -- `a_text' (intended for port names) for placement + -- around the the port names in the "Starting Control". + -- Each side (clockwise from top) consists of the number + -- of triangles given by the parameters, then rotated `a_angle'. +-- require +-- count_big_enough: a_count >= 1 +-- count_small_enough: a_count <= 8 + local + i: INTEGER + a: ARRAY [EV_COORDINATE] + poly: EV_MODEL_POLYGON + t: EV_MODEL_TEXT + p1, p2, p3: EV_COORDINATE + w, h: INTEGER + do + create Result +-- create a.make_empty + -- Build big trianges and then scale down. + w := 60 + h := w // 2 + create p1 + create p2 + create p3 + a := <> + -- Make the first (i.e. top) line + from i := 1 + until i > a_count_1 + loop + create p1.set (p2.x, p2.y) + create p2.set (p1.x + w, p1.y) + create p3.set (p1.x + h, p1.y - h) + a := <> + create poly.make_with_coordinates (a) + poly.set_foreground_color (color) + poly.set_background_color (color) + Result.extend (poly) + i := i + 1 + end + -- Make the second (i.e. right) line + from i := 1 + until i > a_count_2 + loop + create p1.set (p2.x, p2.y) + create p2.set (p1.x, p1.y + w) + create p3.set (p1.x + h, p1.y + h) + a := <> + create poly.make_with_coordinates (a) + poly.set_foreground_color (color) + poly.set_background_color (color) + Result.extend (poly) + i := i + 1 + end + -- Make the third (i.e. bottom) line + from i := 1 + until i > a_count_3 + loop + create p1.set (p2.x, p2.y) + create p2.set (p1.x - w, p1.y) + create p3.set (p1.x - h, p1.y + h) + a := <> + create poly.make_with_coordinates (a) + poly.set_foreground_color (color) + poly.set_background_color (color) + Result.extend (poly) + i := i + 1 + end + Result.scale (0.05) + Result.rotate (a_angle) + t := new_text (a_text, may_be_placed_font) + -- not quite centered so subtract a correction + Result.set_x_y (t.x, t.y - gap_size) + Result.extend (t) + end + + add_units + -- Add {ATTACK_UNIT_WIDGETS} to Current + do + end + + add_returning_widgets + -- Adds an {AIR_UNIT_WIDGET} and an {AMPHIBIOUS_UNIT_WIDGET} + -- to possibly hold a returning unit. This widgets are NOT + -- initially empty. They are targetted, positioned and + -- shown/hidden in feature `draw'. + local + i: INTEGER + air_w: AIR_UNIT_WIDGET + amp_w: AMPHIBIOUS_UNIT_WIDGET + do + -- There is a maximum of ten air units that can + -- return on any given turn. + from i := 1 + until i > 10 + loop + -- Can not be empty + create air_w.make (game.airflot_21) + returning_air_widgets.extend (air_w) + world.extend (air_w) + air_w.hide + i := i + 1 + end + -- There is a maximum of four amphibious units that can + -- return on any given turn. + from i := 1 + until i > 4 + loop + -- Can not be empty + create amp_w.make (game.yokosuka) + returning_amphibious_widgets.extend (amp_w) + world.extend (amp_w) + amp_w.hide + i := i + 1 + end + end + + positioned_widget (a_widget: ATTACK_UNIT_WIDGET; a_point: EV_COORDINATE): ATTACK_UNIT_WIDGET + -- The `a_widget' after positioning it at `a_point' + do + Result := a_widget + Result.set_point_position (a_point.x, a_point.y) + end + +feature -- Access + + widget_factory: WIDGET_FACTORY + -- Creator and repository for widgets in this view + + location: LOCATION + -- A {LOCATION} from the {VITP_GAME} used in `draw' to determine + -- if a unit is on this chart or somewhere else (i.e. in the game.) + deferred + ensure + valid_result: Result = game.japanese_oa_chart or + Result = game.allied_oa_chart or + Result = game.allied_starting_forces_chart + end + + nationality: INTEGER + -- The nationality of the unit on this chart + + color: EV_COLOR + -- The main color used for the text in Current + do + if nationality = {NATIONALITY_CONSTANTS}.japanese then + Result := (create {FONT_AND_COLOR_CONSTANTS}).Japanese_unit_color + else + Result := (create {FONT_AND_COLOR_CONSTANTS}).us_unit_color + end + end + + title: STRING + -- The text at top of this chart + deferred + end + +feature -- Element change + + set_target (a_item: like game) + -- Associate `a_item' with Current. + do + Precursor (a_item) + widget_factory.set_game (a_item) + -- The unit widgets come from `game', so must wait + -- until calling this feature to add them to Current. + -- (i.e. do not add them in `initialize') + -- NO, that is wrong. We do not make new widget when + -- targetting to a new game, we just repair the widgets + -- to the new units. + -- Make the flag color itself based on location's owner + flag.set_location (location) +-- big_marker.set_target (location) +-- little_marker.set_target (location) + big_marker.set_location (location) + little_marker.set_location (location) + end + +feature -- Basic operations + + draw + -- Redraw the view + local +-- t: VITP_WIDGET_TABLE [ATTACK_UNIT_WIDGET, ATTACK_UNIT] + w: ATTACK_UNIT_WIDGET + u: ATTACK_UNIT + i: INTEGER + do + -- Replace this with call to `notify_views' +-- check attached {VITP_WIDGET_TABLE [ATTACK_UNIT_WIDGET, ATTACK_UNIT]} world.widgets as t then +-- -- because of select clause +---- t := world.widgets +-- from t.start +-- until t.after +-- loop +-- w := t.item_for_iteration +-- u := t.key_for_iteration +-- if u.location = location then +-- w.set_unflipped +-- w.set_raised +-- else +-- w.set_flipped +-- w.set_flat +-- end +-- t.forth +-- end +-- end + -- Place any returning air & amphibious units + if not is_view_empty then + from i := 3 + until i > 9 + loop + place_returning_air (i) + place_returning_amphibious (i) + i := i + 1 + end + end + flag.paint + Precursor {VITP_CELL_VIEW} + end + + place_returning_air (a_turn: INTEGER) + -- Place any returning air units at proper place + require + turn_big_enough: a_turn >= 3 + turn_small_enough: a_turn <= 9 + local + t: VITP_TABLE [AIR_UNIT] + i: INTEGER + u: AIR_UNIT + w: AIR_UNIT_WIDGET + cp: EV_COORDINATE + do + if nationality = {NATIONALITY_CONSTANTS}.japanese then + t := game.returning_japanese_air_units (a_turn) + else + t := game.returning_allied_air_units (a_turn) + end + create cp + i := 1 + from t.start + until t.after + loop + u := t.item_for_iteration + w := returning_air_widgets.i_th (i) + w.set_target (u) + w.show + -- position the widget based on turn + cp := turn_x_cp (a_turn) + cp.set_position (cp.x + a_turn * air_size, cp.y + gap_size) + w.set_point_position (cp.x, cp.y) + t.forth + i := i + 1 + end + -- Now hide remaining (i.e. extra) widgets + from + until i > returning_air_widgets.count + loop + returning_air_widgets.i_th (i).hide + i := i + 1 + end + end + + place_returning_amphibious (a_turn: INTEGER) + -- Place any returning amphibious units at proper place + require + turn_big_enough: a_turn >= 3 + turn_small_enough: a_turn <= 9 + local + t: VITP_TABLE [AMPHIBIOUS_UNIT] + i: INTEGER + u: AMPHIBIOUS_UNIT + w: AMPHIBIOUS_UNIT_WIDGET + cp: EV_COORDINATE + do + if nationality = {NATIONALITY_CONSTANTS}.japanese then + t := game.returning_japanese_amphibious_units (a_turn) + else + t := game.returning_allied_amphibious_units (a_turn) + end + create cp + i := 1 + from t.start + until t.after + loop + u := t.item_for_iteration + w := returning_amphibious_widgets.i_th (i) + w.set_target (u) + w.show + -- position the widget based on turn + cp := turn_x_cp (a_turn) + cp.set_position (cp.x + a_turn * air_size, cp.y + 2 * gap_size + air_size) + w.set_point_position (cp.x, cp.y) + t.forth + i := i + 1 + end + -- Now hide remaining (i.e. extra) widgets + from + until i > returning_amphibious_widgets.count + loop + -- returning_amphibious_widgets.item.hide + i := i + 1 + end + end + +feature {NONE} -- Implementation + + flag: FLAG + -- The flag that is one of the "Starting Control" widgets + + big_marker: CONTROL_MARKER + -- The larger of the two port control markers, that is + -- part the "Starting Control" widgets. + + little_marker: CONTROL_MARKER + -- The larger of the two port control markers, that is + -- part the "Starting Control" widgets. + +feature {NONE} -- Implementation + + returning_air_widgets: LINKED_LIST [AIR_UNIT_WIDGET] + -- List of widgets which can hold any returning air units + -- Built up in `draw' + + returning_amphibious_widgets: LINKED_LIST [AMPHIBIOUS_UNIT_WIDGET] + -- List of widgets which can hold any returning amphibious unit + + background: EV_MODEL_RECTANGLE --attribute create Result.make_with_points (top_left_cp, bottom_right_cp) end + -- Represents the paper of the chart and provides a + -- clickable area for selection of Current to pass on + -- a click event to the containing {CHART_TOOL} so that + -- the zoom-in/zoom-out buttons will work. + +feature {NONE} -- Implementation + + turn_x_cp (a_turn: INTEGER): EV_COORDINATE + -- The control point for the "TURN X" text for `a_turn' + require + turn_big_enough: a_turn >= 1 + turn_small_enough: a_turn <= 9 + do + inspect a_turn + when 1 then + Result := Turn_1_cp + when 2 then + Result := Turn_2_cp + when 3 then + Result := Turn_3_cp + when 4 then + Result := Turn_4_cp + when 5 then + Result := Turn_5_cp + when 6 then + Result := Turn_6_cp + when 7 then + Result := Turn_7_cp + when 8 then + Result := Turn_8_cp + when 9 then + Result := Turn_9_cp + else + check + should_not_happen: False + -- because of precondition + end + create Result + end + end + + turn_x_date (a_turn: INTEGER): STRING + -- The date (e.g. "TO DEMCEMBER 1941", etc) corresponding to + -- turn number `a_turn + require + turn_big_enough: a_turn >= 1 + turn_small_enough: a_turn <= 9 + do + inspect a_turn + when 1 then + Result := Turn_1_date + when 2 then + Result := Turn_2_date + when 3 then + Result := Turn_3_date + when 4 then + Result := Turn_4_date + when 5 then + Result := Turn_5_date + when 6 then + Result := Turn_6_date + when 7 then + Result := Turn_7_date + when 8 then + Result := Turn_8_date + when 9 then + Result := Turn_9_date + else + check + should_not_happen: False + -- because of precondition + end + Result := "" + end + end + +feature -- Implementation + + title_font: EV_FONT + once + create Result + Result.set_height (9) + Result.set_weight ({EV_FONT_CONSTANTS}.Weight_bold) + end + + turn_font: EV_FONT + once + create Result + Result.set_height (9) + Result.set_weight ({EV_FONT_CONSTANTS}.Weight_bold) + end + + to_date_font: EV_FONT + once + create Result + Result.set_height (3) + Result.set_weight ({EV_FONT_CONSTANTS}.Weight_bold) + end + + at_port_font: EV_FONT + once + create Result + Result.set_height (5) + Result.set_weight ({EV_FONT_CONSTANTS}.Weight_bold) + end + + returning_units_font: EV_FONT + once + create Result + Result.set_height (4) + Result.set_weight ({EV_FONT_CONSTANTS}.Weight_bold) + end + + turn_x_losses_font: EV_FONT + once + create Result + Result.set_height (3) + Result.set_weight ({EV_FONT_CONSTANTS}.Weight_bold) + end + + may_be_placed_font: EV_FONT + once + create Result + Result.set_height (3) +-- Result.set_weight ({EV_FONT_CONSTANTS}.Weight_bold) + end + + may_be_placed_italic_font: EV_FONT + once + create Result + Result.set_height (3) + Result.set_shape ({EV_FONT_CONSTANTS}.shape_italic) + end + + small_font: EV_FONT + once + create Result + Result.set_height (2) + end + + returning_units_box_color: EV_COLOR + -- The [lighter] color used for the backgroun of the + -- "Returning Air/Land Units" boxes + do + if nationality = {NATIONALITY_CONSTANTS}.japanese then + Result := Japanese_unit_color_dim + else + Result := US_unit_color_dim + end + end + + Returning_units_text: STRING = "RETURNING AIR/LAND UNITS" + -- Text placed in the returning units boxes + + May_be_placed_text: String = "may be placed in any friendly major port" + -- More text for the returning units boxes + + turn_1_date: STRING = "TO DECEMBER 1941" + -- Date placed near the "TURN 1" text + + turn_2_date: STRING = "TO MAY 1942" + -- Date placed near the "TURN 1" text + + turn_3_date: STRING = "TO SEPTEMBER 1942" + -- Date placed near the "TURN 1" text + + turn_4_date: STRING = "TO JANUARY 1943" + -- Date placed near the "TURN 1" text + + turn_5_date: STRING = "TO JUNE 1943" + -- Date placed near the "TURN 1" text + + turn_6_date: STRING = "TO JANUARY 1944" + -- Date placed near the "TURN 1" text + + turn_7_date: STRING = "TO MAY 1944" + -- Date placed near the "TURN 1" text + + turn_8_date: STRING = "TO OCTOBER 1944" + -- Date placed near the "TURN 1" text + + turn_9_date: STRING = "TO JANUARY 1945" + -- Date placed near the "TURN 1" text + +feature {NONE} -- Implementation (control points in millimeters) + + top_left_cp: EV_COORDINATE once create Result.make (0, 0) end + bottom_right_cp: EV_COORDINATE deferred end + middle_cp: EV_COORDINATE do create Result.make (bottom_right_cp.x // 2, bottom_right_cp.y // 2) end + -- Turn X text + turn_1_cp: EV_COORDINATE deferred end + turn_2_cp: EV_COORDINATE deferred end + turn_3_cp: EV_COORDINATE deferred end + turn_4_cp: EV_COORDINATE deferred end + turn_5_cp: EV_COORDINATE deferred end + turn_6_cp: EV_COORDINATE deferred end + turn_7_cp: EV_COORDINATE deferred end + turn_8_cp: EV_COORDINATE deferred end + turn_9_cp: EV_COORDINATE deferred end + -- To some date text + to_dec_41_cp: EV_COORDINATE deferred end + to_may_42_cp: EV_COORDINATE deferred end + to_sep_42_cp: EV_COORDINATE deferred end + to_jan_43_cp: EV_COORDINATE deferred end + to_jun_43_cp: EV_COORDINATE deferred end + to_jan_44_cp: EV_COORDINATE deferred end + to_may_44_cp: EV_COORDINATE deferred end + to_oct_44_cp: EV_COORDINATE deferred end + to_jan_45_cp: EV_COORDINATE deferred end + -- Turn x losses + turn_1_losses_cp: EV_COORDINATE deferred end + turn_2_losses_cp: EV_COORDINATE deferred end + turn_3_losses_cp: EV_COORDINATE deferred end + turn_4_losses_cp: EV_COORDINATE deferred end + turn_5_losses_cp: EV_COORDINATE deferred end + turn_6_losses_cp: EV_COORDINATE deferred end + turn_7_losses_cp: EV_COORDINATE deferred end + +feature {NONE} -- Implementation + + gap_size: INTEGER = 2 + -- To add a small gap between widgets + + ship_size: INTEGER + -- Size of a [square] ship widget + once +-- Result := {SHIP_WIDGET}.default_tile_size.rounded + check attached {SHIP_WIDGET} widget_factory.widgets.item (game.akagi) as w then + Result := w.tile_size.rounded + end + end + + air_size: INTEGER + -- Size of a [square] air unit widget + once +-- Result := ({SHIP_WIDGET}.default_tile_size * 0.7).rounded + check attached {AIR_UNIT_WIDGET} widget_factory.widgets.item (game.airflot_21) as w then + Result := w.tile_size.rounded + end + end + +end diff --git a/jj_vitp/Interface/views/port_widget_factory.e b/jj_vitp/Interface/views/port_widget_factory.e new file mode 100644 index 0000000..5e81716 --- /dev/null +++ b/jj_vitp/Interface/views/port_widget_factory.e @@ -0,0 +1,177 @@ +note + description: "[ + One of the classes that decompose the numourous VITP widgets + into more managable groups. This class models the widgets + that contain the ports. + ]" + author: "Jimmy J. Johnson" + date: "5/15/24" + copyright: "Copyright (c) 2024, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +class + PORT_WIDGET_FACTORY + +inherit + + WIDGET_FACTORY + redefine + make_widgets, + extend_widgets, + pair_widgets, + fill_widgets + end + +create + make + +feature {NONE} -- Initialization + + make_widgets + -- Create widgets for the corresponding game item + do + Precursor {WIDGET_FACTORY} + create port_widgets.make (100) + -- Create widgets + create andaman_islands_widget.make (game.andaman_islands) + create attu_widget.make (game.attu) + create australia_widget.make (game.australia) + create ceylon_widget.make (game.ceylon) + create dutch_harbor_widget.make (game.dutch_harbor) + create guadalcanal_widget.make (game.guadalcanal) + create johnston_island_widget.make (game.johnston_island) + create kwajalein_widget.make (game.kwajalein) + create lae_widget.make (game.lae) + create maloelap_widget.make (game.maloelap) + create midway_widget.make (game.midway) + create new_hebrides_widget.make (game.new_hebrides) + create okinawa_widget.make (game.okinawa) + create pearl_harbor_widget.make (game.pearl_harbor) + create philippines_widget.make (game.philippines) + create port_moresby_widget.make (game.port_moresby) + create saigon_widget.make (game.saigon) + create saipan_widget.make (game.saipan) + create samoa_widget.make (game.samoa) + create singapore_widget.make (game.singapore) + create truk_widget.make (game.truk) + create yokosuka_navy_yard_widget.make (game.yokosuka_navy_yard) + end + +feature -- Access (tables) + + port_widgets: VITP_WIDGET_TABLE [PORT_WIDGET, PORT] + -- Keeps track of widgets + +feature -- Access (ports) + + Andaman_islands_widget: ANDAMAN_ISLANDS_WIDGET + Attu_widget: ATTU_WIDGET + Australia_widget: AUSTRALIA_WIDGET + Ceylon_widget: CEYLON_WIDGET + Dutch_harbor_widget: DUTCH_HARBOR_WIDGET + Guadalcanal_widget: GUADALCANAL_WIDGET + Johnston_island_widget: JOHNSTON_ISLAND_WIDGET + Kwajalein_widget: KWAJALEIN_WIDGET + Lae_widget: LAE_WIDGET + Maloelap_widget: MALOELAP_WIDGET + Midway_widget: MIDWAY_WIDGET + New_hebrides_widget: NEW_HEBRIDES_WIDGET + Okinawa_widget: OKINAWA_WIDGET + Pearl_harbor_widget: PEARL_HARBOR_WIDGET + Philippines_widget: PHILIPPINES_WIDGET + Port_moresby_widget: PORT_MORESBY_WIDGET + Saigon_widget: SAIGON_WIDGET + Saipan_widget: SAIPAN_WIDGET + Samoa_widget: SAMOA_WIDGET + Singapore_widget: SINGAPORE_WIDGET + Truk_widget: TRUK_WIDGET + Yokosuka_navy_yard_widget: YOKOSUKA_NAVY_YARD_WIDGET + +feature {NONE} -- Implementation + + extend_widgets + -- Put each widget {ATTACK_UNIT_WIDGET} into `world'. + do + port_widgets.extend (Andaman_islands_widget, game.Andaman_islands) + port_widgets.extend (Attu_widget, game.Attu) + port_widgets.extend (Australia_widget, game.Australia) + port_widgets.extend (Ceylon_widget, game.Ceylon) + port_widgets.extend (Dutch_harbor_widget, game.Dutch_harbor) + port_widgets.extend (Guadalcanal_widget, game.Guadalcanal) + port_widgets.extend (Johnston_island_widget, game.Johnston_island) + port_widgets.extend (Kwajalein_widget, game.Kwajalein) + port_widgets.extend (Lae_widget, game.Lae) + port_widgets.extend (Maloelap_widget, game.Maloelap) + port_widgets.extend (Midway_widget, game.Midway) + port_widgets.extend (New_hebrides_widget, game.New_hebrides) + port_widgets.extend (Okinawa_widget, game.Okinawa) + port_widgets.extend (Pearl_harbor_widget, game.Pearl_harbor) + port_widgets.extend (Philippines_widget, game.Philippines) + port_widgets.extend (Port_moresby_widget, game.Port_moresby) + port_widgets.extend (Saigon_widget, game.Saigon) + port_widgets.extend (Saipan_widget, game.Saipan) + port_widgets.extend (Samoa_widget, game.Samoa) + port_widgets.extend (Singapore_widget, game.Singapore) + port_widgets.extend (Truk_widget, game.Truk) + port_widgets.extend (Yokosuka_navy_yard_widget, game.Yokosuka_navy_yard) + widgets.merge (port_widgets) + end + + pair_widgets + -- Associate each widget with a unit + do + port_widgets.force (Andaman_islands_widget, game.Andaman_islands) + port_widgets.force (Attu_widget, game.Attu) + port_widgets.force (Australia_widget, game.Australia) + port_widgets.force (Ceylon_widget, game.Ceylon) + port_widgets.force (Dutch_harbor_widget, game.Dutch_harbor) + port_widgets.force (Guadalcanal_widget, game.Guadalcanal) + port_widgets.force (Johnston_island_widget, game.Johnston_island) + port_widgets.force (Kwajalein_widget, game.Kwajalein) + port_widgets.force (Lae_widget, game.Lae) + port_widgets.force (Maloelap_widget, game.Maloelap) + port_widgets.force (Midway_widget, game.Midway) + port_widgets.force (New_hebrides_widget, game.New_hebrides) + port_widgets.force (Okinawa_widget, game.Okinawa) + port_widgets.force (Pearl_harbor_widget, game.Pearl_harbor) + port_widgets.force (Philippines_widget, game.Philippines) + port_widgets.force (Port_moresby_widget, game.Port_moresby) + port_widgets.force (Saigon_widget, game.Saigon) + port_widgets.force (Saipan_widget, game.Saipan) + port_widgets.force (Samoa_widget, game.Samoa) + port_widgets.force (Singapore_widget, game.Singapore) + port_widgets.force (Truk_widget, game.Truk) + port_widgets.force (Yokosuka_navy_yard_widget, game.Yokosuka_navy_yard) + ensure then + port_count_correct: port_widgets.count = 22 +-- ports_paired: across port_widgets as pw all pw.item.vitp = vitp end + end + + fill_widgets + -- Call `set_target' to give each widget a target. + do + Andaman_islands_widget.set_target (game.andaman_islands) + Attu_widget.set_target (game.attu) + Australia_widget.set_target (game.australia) + Ceylon_widget.set_target (game.ceylon) + Dutch_harbor_widget.set_target (game.dutch_harbor) + Guadalcanal_widget.set_target (game.guadalcanal) + Johnston_island_widget.set_target (game.johnston_island) + Kwajalein_widget.set_target (game.kwajalein) + Lae_widget.set_target (game.lae) + Maloelap_widget.set_target (game.maloelap) + Midway_widget.set_target (game.midway) + New_hebrides_widget.set_target (game.new_hebrides) + Okinawa_widget.set_target (game.okinawa) + Pearl_harbor_widget.set_target (game.pearl_harbor) + Philippines_widget.set_target (game.philippines) + Port_moresby_widget.set_target (game.port_moresby) + Saigon_widget.set_target (game.saigon) + Saipan_widget.set_target (game.saipan) + Samoa_widget.set_target (game.samoa) + Singapore_widget.set_target (game.singapore) + Truk_widget.set_target (game.truk) + Yokosuka_navy_yard_widget.set_target (game.yokosuka_navy_yard) + end + +end diff --git a/jj_vitp/Interface/views/sea_areas_factory.e b/jj_vitp/Interface/views/sea_areas_factory.e new file mode 100644 index 0000000..2ab6aa9 --- /dev/null +++ b/jj_vitp/Interface/views/sea_areas_factory.e @@ -0,0 +1,129 @@ +note + description: "[ + One of the classes that decompose the numourous VITP widgets + into more managable groups. This class models the widgets + that contain the sea areas. + ]" + author: "Jimmy J. Johnson" + date: "5/15/24" + copyright: "Copyright (c) 2024, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +class + SEA_AREAS_FACTORY + +inherit + + WIDGET_FACTORY + redefine + make_widgets, + extend_widgets, + pair_widgets, + fill_widgets + end + +create + make + +feature {NONE} -- Initialization + + make_widgets + -- Create widgets for the corresponding game item + do + Precursor {WIDGET_FACTORY} + create sea_area_widgets.make (100) + -- Create widgets + create aleutian_islands_widget.make (game.aleutian_islands) + create bay_of_bengal_widget.make (game.bay_of_bengal) + create central_pacific_ocean_widget.make (game.central_pacific_ocean) + create coral_sea_widget.make (game.coral_sea) + create hawaiian_islands_widget.make (game.hawaiian_islands) + create indian_ocean_widget.make (game.indian_ocean) + create indonesia_widget.make (game.indonesia) + create japanese_islands_widget.make (game.japanese_islands) + create marianas_islands_widget.make (game.marianas_islands) + create marshall_islands_widget.make (game.marshall_islands) + create north_pacific_ocean_widget.make (game.north_pacific_ocean) + create south_pacific_ocean_widget.make (game.south_pacific_ocean) + create us_mandate_widget.make (game.us_mandate) + end + +feature -- Access (tables) + + sea_area_widgets: VITP_WIDGET_TABLE [SEA_AREA_WIDGET, SEA_AREA] + -- Keeps track of sea-area widgets + +feature -- Access (sea area widgets) + + aleutian_islands_widget: ALEUTIAN_ISLANDS_WIDGET + bay_of_bengal_widget: BAY_OF_BENGAL_WIDGET + central_pacific_ocean_widget: CENTRAL_PACIFIC_OCEAN_WIDGET + coral_sea_widget: CORAL_SEA_WIDGET + hawaiian_islands_widget: HAWAIIAN_ISLANDS_WIDGET + indian_ocean_widget: INDIAN_OCEAN_WIDGET + indonesia_widget: INDONESIA_WIDGET + japanese_islands_widget: JAPANESE_ISLANDS_WIDGET + marianas_islands_widget: MARIANAS_ISLANDS_WIDGET + marshall_islands_widget: MARSHALL_ISLANDS_WIDGET + north_pacific_ocean_widget: NORTH_PACIFIC_OCEAN_WIDGET + south_pacific_ocean_widget: SOUTH_PACIFIC_OCEAN_WIDGET + us_mandate_widget: US_MANDATE_WIDGET + +feature {NONE} -- Implementation + + extend_widgets + -- Put each widget into `world' + do + sea_area_widgets.extend (aleutian_islands_widget, game.aleutian_islands) + sea_area_widgets.extend (bay_of_bengal_widget, game.bay_of_bengal) + sea_area_widgets.extend (central_pacific_ocean_widget, game.central_pacific_ocean) + sea_area_widgets.extend (coral_sea_widget, game.coral_sea) + sea_area_widgets.extend (hawaiian_islands_widget, game.hawaiian_islands) + sea_area_widgets.extend (indian_ocean_widget, game.indian_ocean) + sea_area_widgets.extend (indonesia_widget, game.indonesia) + sea_area_widgets.extend (japanese_islands_widget, game.japanese_islands) + sea_area_widgets.extend (marianas_islands_widget, game.marianas_islands) + sea_area_widgets.extend (marshall_islands_widget, game.marshall_islands) + sea_area_widgets.extend (north_pacific_ocean_widget, game.north_pacific_ocean) + sea_area_widgets.extend (south_pacific_ocean_widget, game.south_pacific_ocean) + sea_area_widgets.extend (us_mandate_widget, game.us_mandate) + widgets.merge (sea_area_widgets) + end + + pair_widgets + -- Associate each widget with a sea area + do + sea_area_widgets.force (aleutian_islands_widget, game.aleutian_islands) + sea_area_widgets.force (bay_of_bengal_widget, game.bay_of_bengal) + sea_area_widgets.force (central_pacific_ocean_widget, game.central_pacific_ocean) + sea_area_widgets.force (coral_sea_widget, game.coral_sea) + sea_area_widgets.force (hawaiian_islands_widget, game.hawaiian_islands) + sea_area_widgets.force (indian_ocean_widget, game.indian_ocean) + sea_area_widgets.force (indonesia_widget, game.indonesia) + sea_area_widgets.force (japanese_islands_widget, game.japanese_islands) + sea_area_widgets.force (marianas_islands_widget, game.marianas_islands) + sea_area_widgets.force (marshall_islands_widget, game.marshall_islands) + sea_area_widgets.force (north_pacific_ocean_widget, game.north_pacific_ocean) + sea_area_widgets.force (south_pacific_ocean_widget, game.south_pacific_ocean) + sea_area_widgets.force (us_mandate_widget, game.us_mandate) + end + + fill_widgets + -- Call `set_target' to give each widget a target + do + aleutian_islands_widget.set_target (game.aleutian_islands) + bay_of_bengal_widget.set_target (game.bay_of_bengal) + central_pacific_ocean_widget.set_target (game.central_pacific_ocean) + coral_sea_widget.set_target (game.coral_sea) + hawaiian_islands_widget.set_target (game.hawaiian_islands) + indian_ocean_widget.set_target (game.indian_ocean) + indonesia_widget.set_target (game.indonesia) + japanese_islands_widget.set_target (game.japanese_islands) + marianas_islands_widget.set_target (game.marianas_islands) + marshall_islands_widget.set_target (game.marshall_islands) + north_pacific_ocean_widget.set_target (game.north_pacific_ocean) + south_pacific_ocean_widget.set_target (game.south_pacific_ocean) + us_mandate_widget.set_target (game.us_mandate) + end + +end diff --git a/jj_vitp/Interface/views/vitp_cell_view.e b/jj_vitp/Interface/views/vitp_cell_view.e new file mode 100644 index 0000000..2c8a57f --- /dev/null +++ b/jj_vitp/Interface/views/vitp_cell_view.e @@ -0,0 +1,70 @@ +note + description: "[ + Root class for all "windows" in VITP. + A scrollable drawing area (i.e. an {EV_MODEL_WORLD_CELL} that is + also a {VIEW} through inheritance from {JJ_MODEL_WORLD_CELL_VIEW}. + ]" + author: "Jimmy J. Johnson" + +class + VITP_CELL_VIEW + +inherit + + JJ_MODEL_WORLD_CELL_VIEW + rename + target as game + redefine + draw, + target_imp + end + +--create +-- default_create + +--create {VITP_CELL_VIEW} + +feature -- Basic operations + + draw + -- Redraw the window + do +-- world.wipe_out + world.full_redraw + Precursor {JJ_MODEL_WORLD_CELL_VIEW} + end + + scale_up + -- Increase to the next largest size + do + world.scale (scale_factor) + resize_if_necessary + end + + scale_down + -- Decrease to the next smallest size + do + world.scale (1 / scale_factor) + if world.bounding_box.width < client_width or + world.bounding_box.height < client_height then + fit_to_screen + end + -- fix the scrollbars + resize_if_necessary + crop + end + +feature {NONE} -- Implementation + + target_imp: detachable VITP_GAME + -- Detachable implementation of `target' for void safety + + scale_factor: DOUBLE = 1.5 + -- The amount to grow (or swrink by reciprocal) + + Default_width: INTEGER = 200 + -- The default width of `border' + + Default_height: INTEGER = 300 + -- the default width of `border' +end diff --git a/jj_vitp/Interface/views/vitp_game_attributes.e b/jj_vitp/Interface/views/vitp_game_attributes.e new file mode 100644 index 0000000..e16d38f --- /dev/null +++ b/jj_vitp/Interface/views/vitp_game_attributes.e @@ -0,0 +1,1167 @@ +note + description: "[ + Class incapsulating each {VITP_WIDGET} in VITP and responsible for + the creation of those attributes. Decomposed into this class + so that {WIDGET_FACTORY} would not be such a large file. + + These attributes are used as pseudo-constants. I elected + not to use once features because the order of calls to + once featues may not work for persistence. + ]" + author: "Jimmy J. Johnson" + +deferred class + VITP_GAME_ATTRIBUTES + +feature -- Access + + vitp: VITP_GAME + -- The {VITP_GAME} to which these widgets will be paired. + deferred + end + + world: EV_MODEL_WORLD + -- The world to which some or all of these widgets can be + -- added by calls to the `extend_xxx' features. + -- Effected by descendents of are {EV_CELL_VIEW}. + deferred + end + +feature -- Basic operations + + extend_sea_areas + -- Add each {SEA_AREA_WIDGET} to `world' + do + -- Add widgets to the view + world.extend (bay_of_bengal_widget) + world.extend (central_pacific_ocean_widget) + world.extend (coral_sea_widget) + world.extend (hawaiian_islands_widget) + world.extend (indian_ocean_widget) + world.extend (indonesia_widget) + world.extend (japanese_islands_widget) + world.extend (marianas_islands_widget) + world.extend (north_pacific_ocean_widget) + world.extend (south_pacific_ocean_widget) + world.extend (us_mandate_widget) + + world.extend (marshall_islands_widget) + world.extend (aleutian_islands_widget) + +-- test code: +-- Pick the Houston (stationed in Phillipines) +-- It is droppable on Indonesia and no where else +-- Indonesia_widget.drop_actions.world.extend (agent on_move (?, Indonesia)) +-- See `build_attack_unit_widgets' where trying to add pick actions. + end + + extend_ports + -- Add each {PORT_WIDGET} to "world'. + do + world.extend (andaman_islands_widget) + world.extend (attu_widget) + world.extend (australia_widget) + world.extend (ceylon_widget) + world.extend (dutch_harbor_widget) + world.extend (guadalcanal_widget) + world.extend (johnston_island_widget) + world.extend (kwajalein_widget) + world.extend (lae_widget) + world.extend (maloelap_widget) + world.extend (midway_widget) + world.extend (new_hebrides_widget) + world.extend (okinawa_widget) + world.extend (pearl_harbor_widget) + world.extend (philippines_widget) + world.extend (port_moresby_widget) + world.extend (saigon_widget) + world.extend (saipan_widget) + world.extend (samoa_widget) + world.extend (singapore_widget) + world.extend (truk_widget) + world.extend (yokosuka_navy_yard_widget) + end + + extend_attack_unit_widgets + -- Put each {ATTACK_UNIT_WIDGET} into `world'. + do + extend_japanese_attack_unit_widgets + extend_allied_attack_unit_widgets + end + + extend_allied_attack_unit_widgets + -- Put each Allied {ATTACK_UNIT_WIDGET} into `world. + do + extend_allied_starting_forces_widgets + extend_remaining_allied_unit_widgets + end + + extend_allied_starting_forces_widgets + -- Put each allied starting-forces {ATTACK_UNIT_WIDGET} into `world'. + do + -- On Battleship Row (Pearl Harbor) + world.extend (nevada_widget) + world.extend (arizona_widget) + world.extend (west_virginia_widget) + world.extend (tennessee_widget) + world.extend (oklahoma_widget) + world.extend (maryland_widget) + world.extend (california_widget) + world.extend (pennsylvania_widget) + world.extend (new_orleans_widget) + world.extend (san_francisco_widget) + world.extend (seventh_af_widget) + -- At sea (cannot move) + world.extend (hermes_widget) + world.extend (revenge_widget) + world.extend (prince_of_wales_widget) + world.extend (repulse_widget) + world.extend (fifth_af_widget) + world.extend (louisville_widget) + world.extend (pensacola_widget) + world.extend (indianapolis_widget) + world.extend (minneapolis_widget) + -- In port (may move) + world.extend (houston_widget) + world.extend (exeter_widget) + world.extend (de_ruyter_widget) + world.extend (australia_ship_widget) + world.extend (canberra_widget) + -- Location Uncertain, group W + world.extend (enterprise_widget) + world.extend (salt_lake_city_widget) + world.extend (northampton_widget) + world.extend (chester_widget) + -- Location Uncertain, group X + world.extend (lexington_widget) + world.extend (chicago_widget) + world.extend (portland_widget) + world.extend (astoria_widget) + -- Location Uncertain, group Y + world.extend (saratoga_widget) + -- Location Uncertain, group W + world.extend (hornet_widget) + world.extend (yorktown_widget) + world.extend (vincennes_widget) + world.extend (quincy_widget) + end + + extend_remaining_allied_unit_widgets + -- Put turn-two to turn-nine allied {ATTACK_UNIT_WIDGET} into `world'. + do + -- Turn 2 + world.extend (royal_sovereign_widget) + world.extend (ramilies_widget) + world.extend (resolution_widget) + world.extend (warspite_widget) + world.extend (indomitable_widget) + world.extend (formidable_widget) + world.extend (cornwall_widget) + world.extend (dorestshire_widget) + world.extend (new_mexico_widget) + world.extend (idaho_widget) + world.extend (tenth_af_widget) + world.extend (eleventh_af_widget) + -- Turn 3 + world.extend (north_carolina_widget) + world.extend (mississippi_widget) + world.extend (colorado_widget) + world.extend (marines_1_widget) + world.extend (marines_2_widget) + world.extend (raaf_widget) + world.extend (rnzaf_widget) + world.extend (valiant_widget) + world.extend (illustrious_widget) + -- Turn 4 + world.extend (south_dakota_widget) + world.extend (indiana_widget) + world.extend (washington_widget) + world.extend (wasp_widget) + world.extend (marine_widget) + world.extend (thirteenth_af_widget) + world.extend (devonshire_widget) + world.extend (shropshire_widget) + -- Turn 5 + world.extend (massachusetts_widget) + world.extend (wichita_widget) + world.extend (victorious_widget) + world.extend (marines_3_widget) + world.extend (fourteenth_af_widget) + world.extend (naval_widget) + -- Turn 6 + world.extend (alabama_widget) + world.extend (essex_widget) + world.extend (cv_10_widget) + world.extend (cv_16_widget) + world.extend (independence_widget) + world.extend (princeton_widget) + world.extend (belleau_wood_widget) + world.extend (cowpens_widget) + world.extend (monterey_widget) + world.extend (baltimore_widget) + world.extend (boston_widget) + world.extend (marines_4_widget) + -- Turn 7 + world.extend (iowa_widget) + world.extend (new_jersey_widget) + world.extend (intrepid_widget) + world.extend (cv_12_widget) + world.extend (bunker_hill_widget) + world.extend (cv_18_widget) + world.extend (bataan_widget) + world.extend (cabot_widget) + world.extend (langley_ii_widget) + world.extend (canbera_ii_widget) + world.extend (quincy_ii_widget) + world.extend (f_boat_widget) + -- Turn 8 + world.extend (wisconsin_widget) + world.extend (missouri_widget) + world.extend (ticonderoga_widget) + world.extend (san_jacinto_widget) + world.extend (marines_5_widget) + -- Turn 9 + world.extend (new_york_widget) + world.extend (texas_widget) + world.extend (alaska_widget) + world.extend (franklin_widget) + world.extend (shangri_la_widget) + end + + extend_japanese_attack_unit_widgets + -- Put each Japanese {ATTACK_UNIT_WIDGET} into `world'. + do + -- Turn 1, row 1 + world.extend (shokaku_widget) + world.extend (zuikaku_widget) + world.extend (akagi_widget) + world.extend (kaga_widget) + world.extend (soryu_widget) + world.extend (hiryu_widget) + world.extend (ryujo_widget) + world.extend (hosho_widget) + world.extend (zuiho_widget) + world.extend (mutsu_widget) + world.extend (nagato_widget) + world.extend (fuso_widget) + -- Turn 1, row 2 + world.extend (hyuga_widget) + world.extend (ise_widget) + world.extend (yamashiro_widget) + world.extend (haruna_widget) + world.extend (hiei_widget) + world.extend (kirishima_widget) + world.extend (kongo_widget) + world.extend (ashigara_widget) + world.extend (atago_widget) + world.extend (chokai_widget) + world.extend (haguro_widget) + world.extend (maya_widget) + -- Turn 1, row 3 + world.extend (myoko_widget) + world.extend (nachi_widget) + world.extend (takao_widget) + world.extend (chikuma_widget) + world.extend (kumano_widget) + world.extend (mikuma_widget) + world.extend (mogami_widget) + world.extend (suzuya_widget) + world.extend (tone_widget) + world.extend (aoba_widget) + world.extend (furutaka_widget) + world.extend (kako_widget) + -- Turn 1, row 4 + world.extend (kinugasa_widget) + world.extend (kitakami_widget) + world.extend (oi_widget) + world.extend (yokosuka_widget) + -- Turn 1, also available + world.extend (airflot_21_widget) + world.extend (airflot_22_widget) + world.extend (airflot_23_widget) + world.extend (airflot_24_widget) + world.extend (airflot_25_widget) + world.extend (airflot_26_widget) + world.extend (i_boat_widget) + -- Turn 2 + world.extend (shoho_widget) + world.extend (junyo_widget) + world.extend (sasebo_widget) + -- Turn 3 + world.extend (hiyo_widget) + world.extend (yamato_widget) + world.extend (kure_widget) + -- Turn 5 + world.extend (musashi_widget) + -- Turn 7 + world.extend (chiyoda_widget) + world.extend (chitose_widget) + world.extend (ryuho_widget) + world.extend (taiho_widget) + -- Turn 8 + world.extend (unryu_widget) + world.extend (amagi_widget) + -- Turn 9 + world.extend (katsuragi_widget) + world.extend (shinano_widget) + end + + pair_widgets + -- Associate the matching widget with a {VITP_ITEM} from + -- the {VITP_GAME} (i.e. from `vitp'). + -- Called by `set_target'. + require + has_game: -- ??? + do + pair_location_widgets + pair_attack_unit_widgets + end + + pair_location_widgets + -- Associate each {PORT_WIDGET} and {SEA_AREA_WIDGET} (i.e. each + -- {LOCATION_WIDGET} with the appropriate item from `vitp. + do +-- location_widgets.wipe_out + -- Add each {SEA_AREA_WIDGET} to table + pair_port_widgets + pair_sea_area_widgets + end + + pair_sea_area_widgets + -- Associate the matching {SEA_AREA_WIDGET} with a {SEA_AREA} from + -- the {VITP_GAME} attached to `vitp'. + do +-- sea_area_widgets.wipe_out + -- Add to table + sea_area_widgets.force (Aleutian_islands_widget, vitp.Aleutian_islands) + sea_area_widgets.force (Bay_of_bengal_widget, vitp.Bay_of_bengal) + sea_area_widgets.force (Central_pacific_ocean_widget, vitp.Central_pacific_ocean) + sea_area_widgets.force (Coral_sea_widget, vitp.Coral_sea) + sea_area_widgets.force (Hawaiian_islands_widget, vitp.Hawaiian_islands) + sea_area_widgets.force (Indian_ocean_widget, vitp.Indian_ocean) + sea_area_widgets.force (Indonesia_widget, vitp.Indonesia) + sea_area_widgets.force (Japanese_islands_widget, vitp.Japanese_islands) + sea_area_widgets.force (Marianas_islands_widget, vitp.Marianas_islands) + sea_area_widgets.force (Marshall_islands_widget, vitp.Marshall_islands) + sea_area_widgets.force (North_pacific_ocean_widget, vitp.North_pacific_ocean) + sea_area_widgets.force (South_pacific_ocean_widget, vitp.South_pacific_ocean) + sea_area_widgets.force (US_mandate_widget, vitp.US_mandate) + -- Also pair in `location_widgets' + location_widgets.merge (sea_area_widgets) + end + + pair_port_widgets + -- Associate the matching {PORT_WIDGET} with a {PORT} from + -- the {VITP_GAME} attached to `vitp'. + do +-- port_widgets.wipe_out + -- Add to table + port_widgets.force (Andaman_islands_widget, vitp.Andaman_islands) + port_widgets.force (Attu_widget, vitp.Attu) + port_widgets.force (Australia_widget, vitp.Australia) + port_widgets.force (Ceylon_widget, vitp.Ceylon) + port_widgets.force (Dutch_harbor_widget, vitp.Dutch_harbor) + port_widgets.force (Guadalcanal_widget, vitp.Guadalcanal) + port_widgets.force (Johnston_island_widget, vitp.Johnston_island) + port_widgets.force (Kwajalein_widget, vitp.Kwajalein) + port_widgets.force (Lae_widget, vitp.Lae) + port_widgets.force (Maloelap_widget, vitp.Maloelap) + port_widgets.force (Midway_widget, vitp.Midway) + port_widgets.force (New_hebrides_widget, vitp.New_hebrides) + port_widgets.force (Okinawa_widget, vitp.Okinawa) + port_widgets.force (Pearl_harbor_widget, vitp.Pearl_harbor) + port_widgets.force (Philippines_widget, vitp.Philippines) + port_widgets.force (Port_moresby_widget, vitp.Port_moresby) + port_widgets.force (Saigon_widget, vitp.Saigon) + port_widgets.force (Saipan_widget, vitp.Saipan) + port_widgets.force (Samoa_widget, vitp.Samoa) + port_widgets.force (Singapore_widget, vitp.Singapore) + port_widgets.force (Truk_widget, vitp.Truk) + port_widgets.force (Yokosuka_navy_yard_widget, vitp.Yokosuka_navy_yard) + -- Also pair in `location_widgets' + location_widgets.merge (port_widgets) + end + + pair_attack_unit_widgets + -- Associate each {ATTACK_UNIT_WIDGET} with an {ATTACK_UNIT} from + -- the {VITP_GAME} attached to `vitp. + do + pair_japanese_attack_unit_widgets + pair_allied_attack_unit_widgets + end + + pair_allied_attack_unit_widgets + -- Associate each Allied {ATTACK_UNIT_WIDGET} with an {ATTACK_UNIT} from + -- the {VITP_GAME} attached to `vitp. + do + pair_allied_starting_forces_widgets + pair_remaining_allied_attack_unit_widgets + end + + pair_allied_starting_forces_widgets + -- Associate each Allied starting-forces {ATTACK_UNIT_WIDGET} with + -- an {ATTACK_UNIT} from the {VITP_GAME} attached to `vitp. + do + -- On Battleship Row (Pearl Harbor) + attack_widgets.force (nevada_widget, vitp.nevada) + attack_widgets.force (arizona_widget, vitp.arizona) + attack_widgets.force (west_virginia_widget, vitp.west_virginia) + attack_widgets.force (tennessee_widget, vitp.tennessee) + attack_widgets.force (oklahoma_widget, vitp.oklahoma) + attack_widgets.force (maryland_widget, vitp.maryland) + attack_widgets.force (california_widget, vitp.california) + attack_widgets.force (pennsylvania_widget, vitp.pennsylvania) + attack_widgets.force (new_orleans_widget, vitp.new_orleans) + attack_widgets.force (san_francisco_widget, vitp.san_francisco) + attack_widgets.force (seventh_af_widget, vitp.seventh_af) + -- At sea (cannot move) + attack_widgets.force (hermes_widget, vitp.hermes) + attack_widgets.force (revenge_widget, vitp.revenge) + attack_widgets.force (prince_of_wales_widget, vitp.prince_of_wales) + attack_widgets.force (repulse_widget, vitp.repulse) + attack_widgets.force (fifth_af_widget, vitp.fifth_af) + attack_widgets.force (louisville_widget, vitp.louisville) + attack_widgets.force (pensacola_widget, vitp.pensacola) + attack_widgets.force (indianapolis_widget, vitp.indianapolis) + attack_widgets.force (minneapolis_widget, vitp.minneapolis) + -- In port (may move) + attack_widgets.force (houston_widget, vitp.houston) + attack_widgets.force (exeter_widget, vitp.exeter) + attack_widgets.force (de_ruyter_widget, vitp.de_ruyter) + attack_widgets.force (australia_ship_widget, vitp.australia_ship) + attack_widgets.force (canberra_widget, vitp.canberra) + -- Location Uncertain, group W + attack_widgets.force (enterprise_widget, vitp.enterprise) + attack_widgets.force (salt_lake_city_widget, vitp.salt_lake_city) + attack_widgets.force (northampton_widget, vitp.northampton) + attack_widgets.force (chester_widget, vitp.chester) + -- Location Uncertain, group X + attack_widgets.force (lexington_widget, vitp.lexington) + attack_widgets.force (chicago_widget, vitp.chicago) + attack_widgets.force (portland_widget, vitp.portland) + attack_widgets.force (astoria_widget, vitp.astoria) + -- Location Uncertain, group Y + attack_widgets.force (saratoga_widget, vitp.saratoga) + -- Location Uncertain (group Z + attack_widgets.force (hornet_widget, vitp.hornet) + attack_widgets.force (yorktown_widget, vitp.yorktown) + attack_widgets.force (vincennes_widget, vitp.vincennes) + attack_widgets.force (quincy_widget, vitp.quincy) + end + + pair_remaining_allied_attack_unit_widgets + -- Associate turn-one to turn-nine Allied {ATTACK_UNIT_WIDGET} with + -- an {ATTACK_UNIT} from the {VITP_GAME} attached to `vitp. + do + -- Turn 2 + attack_widgets.force (royal_sovereign_widget, vitp.royal_sovereign) + attack_widgets.force (ramilies_widget, vitp.ramilies) + attack_widgets.force (resolution_widget, vitp.resolution) + attack_widgets.force (warspite_widget, vitp.warspite) + attack_widgets.force (indomitable_widget, vitp.indomitable) + attack_widgets.force (formidable_widget, vitp.formidable) + attack_widgets.force (cornwall_widget, vitp.cornwall) + attack_widgets.force (dorestshire_widget, vitp.dorestshire) + attack_widgets.force (new_mexico_widget, vitp.new_mexico) + attack_widgets.force (idaho_widget, vitp.idaho) + attack_widgets.force (tenth_af_widget, vitp.tenth_af) + attack_widgets.force (eleventh_af_widget, vitp.eleventh_af) + -- Turn 3 + attack_widgets.force (north_carolina_widget, vitp.north_carolina) + attack_widgets.force (mississippi_widget, vitp.mississippi) + attack_widgets.force (colorado_widget, vitp.colorado) + attack_widgets.force (marines_1_widget, vitp.marines_1) + attack_widgets.force (marines_2_widget, vitp.marines_2) + attack_widgets.force (raaf_widget, vitp.raaf) + attack_widgets.force (rnzaf_widget, vitp.rnzaf) + attack_widgets.force (valiant_widget, vitp.valiant) + attack_widgets.force (illustrious_widget, vitp.illustrious) + -- Turn 4 + attack_widgets.force (south_dakota_widget, vitp.south_dakota) + attack_widgets.force (indiana_widget, vitp.indiana) + attack_widgets.force (washington_widget, vitp.washington) + attack_widgets.force (wasp_widget, vitp.wasp) + attack_widgets.force (marine_widget, vitp.marine) + attack_widgets.force (thirteenth_af_widget, vitp.thirteenth_af) + attack_widgets.force (devonshire_widget, vitp.devonshire) + attack_widgets.force (shropshire_widget, vitp.shropshire) + -- Turn 5 + attack_widgets.force (massachusetts_widget, vitp.massachusetts) + attack_widgets.force (wichita_widget, vitp.wichita) + attack_widgets.force (victorious_widget, vitp.victorious) + attack_widgets.force (marines_3_widget, vitp.marines_3) + attack_widgets.force (fourteenth_af_widget, vitp.fourteenth_af) + attack_widgets.force (naval_widget, vitp.naval) + -- Turn 6 + attack_widgets.force (alabama_widget, vitp.alabama) + attack_widgets.force (essex_widget, vitp.essex) + attack_widgets.force (cv_10_widget, vitp.cv_10) + attack_widgets.force (cv_16_widget, vitp.cv_16) + attack_widgets.force (independence_widget, vitp.independence) + attack_widgets.force (princeton_widget, vitp.princeton) + attack_widgets.force (belleau_wood_widget, vitp.belleau_wood) + attack_widgets.force (cowpens_widget, vitp.cowpens) + attack_widgets.force (monterey_widget, vitp.monterey) + attack_widgets.force (baltimore_widget, vitp.baltimore) + attack_widgets.force (boston_widget, vitp.boston) + attack_widgets.force (marines_4_widget, vitp.marines_4) + -- Turn 7 + attack_widgets.force (iowa_widget, vitp.iowa) + attack_widgets.force (new_jersey_widget, vitp.new_jersey) + attack_widgets.force (intrepid_widget, vitp.intrepid) + attack_widgets.force (cv_12_widget, vitp.cv_12) + attack_widgets.force (bunker_hill_widget, vitp.bunker_hill) + attack_widgets.force (cv_18_widget, vitp.cv_18) + attack_widgets.force (bataan_widget, vitp.bataan) + attack_widgets.force (cabot_widget, vitp.cabot) + attack_widgets.force (langley_ii_widget, vitp.langley_ii) + attack_widgets.force (canbera_ii_widget, vitp.canbera_ii) + attack_widgets.force (quincy_ii_widget, vitp.quincy_ii) + attack_widgets.force (f_boat_widget, vitp.f_boat) + -- Turn 8 + attack_widgets.force (wisconsin_widget, vitp.wisconsin) + attack_widgets.force (missouri_widget, vitp.missouri) + attack_widgets.force (ticonderoga_widget, vitp.ticonderoga) + attack_widgets.force (san_jacinto_widget, vitp.san_jacinto) + attack_widgets.force (marines_5_widget, vitp.marines_5) + -- Turn 9 + attack_widgets.force (new_york_widget, vitp.new_york) + attack_widgets.force (texas_widget, vitp.texas) + attack_widgets.force (alaska_widget, vitp.alaska) + attack_widgets.force (franklin_widget, vitp.franklin) + attack_widgets.force (shangri_la_widget, vitp.shangri_la) + end + + pair_japanese_attack_unit_widgets + -- Associate each Japanese {ATTACK_UNIT_WIDGET} with + -- an {ATTACK_UNIT} from the {VITP_GAME} attached to `vitp. + do + -- Turn 1, row 1 + attack_widgets.force (shokaku_widget, vitp.shokaku) + attack_widgets.force (zuikaku_widget, vitp.zuikaku) + attack_widgets.force (akagi_widget, vitp.akagi) + attack_widgets.force (kaga_widget, vitp.kaga) + attack_widgets.force (soryu_widget, vitp.soryu) + attack_widgets.force (hiryu_widget, vitp.hiryu) + attack_widgets.force (ryujo_widget, vitp.ryujo) + attack_widgets.force (hosho_widget, vitp.hosho) + attack_widgets.force (zuiho_widget, vitp.zuiho) + attack_widgets.force (mutsu_widget, vitp.mutsu) + attack_widgets.force (nagato_widget, vitp.nagato) + attack_widgets.force (fuso_widget, vitp.fuso) + -- Turn 1, row 2 + attack_widgets.force (hyuga_widget, vitp.hyuga) + attack_widgets.force (ise_widget, vitp.ise) + attack_widgets.force (yamashiro_widget, vitp.yamashiro) + attack_widgets.force (haruna_widget, vitp.haruna) + attack_widgets.force (hiei_widget, vitp.hiei) + attack_widgets.force (kirishima_widget, vitp.kirishima) + attack_widgets.force (kongo_widget, vitp.kongo) + attack_widgets.force (ashigara_widget, vitp.ashigara) + attack_widgets.force (atago_widget, vitp.atago) + attack_widgets.force (chokai_widget, vitp.chokai) + attack_widgets.force (haguro_widget, vitp.haguro) + attack_widgets.force (maya_widget, vitp.maya) + -- Turn 1, row 3 + attack_widgets.force (myoko_widget, vitp.myoko) + attack_widgets.force (nachi_widget, vitp.nachi) + attack_widgets.force (takao_widget, vitp.takao) + attack_widgets.force (chikuma_widget, vitp.chikuma) + attack_widgets.force (kumano_widget, vitp.kumano) + attack_widgets.force (mikuma_widget, vitp.mikuma) + attack_widgets.force (mogami_widget, vitp.mogami) + attack_widgets.force (suzuya_widget, vitp.suzuya) + attack_widgets.force (tone_widget, vitp.tone) + attack_widgets.force (aoba_widget, vitp.aoba) + attack_widgets.force (furutaka_widget, vitp.furutaka) + attack_widgets.force (kako_widget, vitp.kako) + -- Turn 1, row 4 + attack_widgets.force (kinugasa_widget, vitp.kinugasa) + attack_widgets.force (kitakami_widget, vitp.kitakami) + attack_widgets.force (oi_widget, vitp.oi) + attack_widgets.force (yokosuka_widget, vitp.yokosuka) + -- Turn 1, also available + attack_widgets.force (airflot_21_widget, vitp.airflot_21) + attack_widgets.force (airflot_22_widget, vitp.airflot_22) + attack_widgets.force (airflot_23_widget, vitp.airflot_23) + attack_widgets.force (airflot_24_widget, vitp.airflot_24) + attack_widgets.force (airflot_25_widget, vitp.airflot_25) + attack_widgets.force (airflot_26_widget, vitp.airflot_26) + attack_widgets.force (i_boat_widget, vitp.i_boat) + -- Turn 2 + attack_widgets.force (shoho_widget, vitp.shoho) + attack_widgets.force (junyo_widget, vitp.junyo) + attack_widgets.force (sasebo_widget, vitp.sasebo) + -- Turn 3 + attack_widgets.force (hiyo_widget, vitp.hiyo) + attack_widgets.force (yamato_widget, vitp.yamato) + attack_widgets.force (kure_widget, vitp.kure) + -- Turn 5 + attack_widgets.force (musashi_widget, vitp.musashi) + -- Turn 7 + attack_widgets.force (chiyoda_widget, vitp.chiyoda) + attack_widgets.force (chitose_widget, vitp.chitose) + attack_widgets.force (ryuho_widget, vitp.ryuho) + attack_widgets.force (taiho_widget, vitp.taiho) + -- Turn 8 + attack_widgets.force (unryu_widget, vitp.unryu) + attack_widgets.force (amagi_widget, vitp.amagi) + -- Turn 9 + attack_widgets.force (katsuragi_widget, vitp.katsuragi) + attack_widgets.force (shinano_widget, vitp.shinano) + end + + is_widget_pairing_complete: BOOLEAN + -- Have all widgets been associated with a VITP_ITEM and + -- are all those items in the current VITP_GAME? + do + -- Check the table counts + Result := attack_widgets.count <= 169 and + sea_area_widgets.count = 13 and + port_widgets.count = 22 and + location_widgets.count <= 35 and + -- Verify table contents are correct for current game + across attack_widgets as aw all aw.item.vitp = vitp end and + across sea_area_widgets as sw all sw.item.vitp = vitp end and + across port_widgets as pw all pw.item.vitp = vitp end and + across location_widgets as lw all lw.item.vitp = vitp end + end + + fill_widgets + -- Called by `set_target' to place each item into + -- its associated widget. + do + fill_port_widgets + fill_sea_area_widgets + fill_attack_unit_widgets + end + + fill_port_widgets + -- Call `set_target' for each {PORT_WIDGET}. + do + -- Fill ports + Andaman_islands_widget.set_target (vitp.Andaman_islands) + Attu_widget.set_target (vitp.Attu) + Australia_widget.set_target (vitp.Australia) + Ceylon_widget.set_target (vitp.Ceylon) + Dutch_harbor_widget.set_target (vitp.Dutch_harbor) + Guadalcanal_widget.set_target (vitp.Guadalcanal) + Johnston_island_widget.set_target (vitp.Johnston_island) + Kwajalein_widget.set_target (vitp.Kwajalein) + Lae_widget.set_target (vitp.Lae) + Maloelap_widget.set_target (vitp.Maloelap) + Midway_widget.set_target (vitp.Midway) + New_hebrides_widget.set_target (vitp.New_hebrides) + Okinawa_widget.set_target (vitp.Okinawa) + Pearl_harbor_widget.set_target (vitp.Pearl_harbor) + Philippines_widget.set_target (vitp.Philippines) + Port_moresby_widget.set_target (vitp.Port_moresby) + Saigon_widget.set_target (vitp.Saigon) + Saipan_widget.set_target (vitp.Saipan) + Samoa_widget.set_target (vitp.Samoa) + Singapore_widget.set_target (vitp.Singapore) + Truk_widget.set_target (vitp.Truk) + Yokosuka_navy_yard_widget.set_target (vitp.Yokosuka_navy_yard) + end + + fill_sea_area_widgets + -- Call `set_target' for each {SEA_AREA_WIDGET}. + do + Aleutian_islands_widget.set_target (vitp.Aleutian_islands) + Bay_of_bengal_widget.set_target (vitp.Bay_of_bengal) + Central_pacific_ocean_widget.set_target (vitp.Central_pacific_ocean) + Coral_sea_widget.set_target (vitp.Coral_sea) + Hawaiian_islands_widget.set_target (vitp.Hawaiian_islands) + Indian_ocean_widget.set_target (vitp.Indian_ocean) + Indonesia_widget.set_target (vitp.Indonesia) + Japanese_islands_widget.set_target (vitp.Japanese_islands) + Marianas_islands_widget.set_target (vitp.Marianas_islands) + Marshall_islands_widget.set_target (vitp.Marshall_islands) + North_pacific_ocean_widget.set_target (vitp.North_pacific_ocean) + South_pacific_ocean_widget.set_target (vitp.South_pacific_ocean) + US_mandate_widget.set_target (vitp.US_mandate) + end + + fill_attack_unit_widgets + -- Call `set_target' for each {ATTACK_UNIT_WIDGET}. + do + fill_allied_attack_unit_widgets + fill_japanese_attack_unit_widgets + end + + fill_allied_attack_unit_widgets + -- Call `set_target' for each {ATTACK_UNIT_WIDGET}. + do + fill_allied_starting_forces_widgets + fill_remaining_allied_attack_unit_widgets + end + + fill_allied_starting_forces_widgets + -- Call `set_target' for each allied {ATTACK_UNIT_WIDGET} + -- that is in the starting forces (i.e. turn 1). + local + t: VITP_TABLE [ATTACK_UNIT] + u: ATTACK_UNIT + w: ATTACK_UNIT_WIDGET + do + t := vitp.allied_turn_1_units + from t.start + until t.after + loop + u := t.item_for_iteration + w := attack_widgets.widget (u) + w.set_target (u) + t.forth + end +-- -- On Battleship Row (Pearl Harbor) +-- nevada_widget.set_target (vitp.nevada) +-- arizona_widget.set_target (vitp.arizona) +-- west_virginia_widget, vitp.west_virginia) +-- tennessee_widget, vitp.tennessee) +-- oklahoma_widget, vitp.oklahoma) +-- maryland_widget, vitp.maryland) +-- california_widget, vitp.california) +-- pennsylvania_widget, vitp.pennsylvania) +-- new_orleans_widget, vitp.new_orleans) +-- san_francisco_widget, vitp.san_francisco) +-- seventh_af_widget, vitp.seventh_af) +-- -- At sea (cannot move) +-- hermes_widget, vitp.hermes) +-- revenge_widget, vitp.revenge) +-- prince_of_wales_widget, vitp.prince_of_wales) +-- repulse_widget, vitp.repulse) +-- fifth_af_widget, vitp.fifth_af) +-- louisville_widget, vitp.louisville) +-- pensacola_widget, vitp.pensacola) +-- indianapolis_widget, vitp.indianapolis) +-- minneapolis_widget, vitp.minneapolis) +-- -- In port (may move) +-- houston_widget, vitp.houston) +-- exeter_widget, vitp.exeter) +-- de_ruyter_widget, vitp.de_ruyter) +-- attack_widgets.force (australia_ship_widget, vitp.australia_ship) +-- attack_widgets.force (canberra_widget, vitp.canberra) +-- -- Location Uncertain, group W +-- attack_widgets.force (enterprise_widget, vitp.enterprise) +-- attack_widgets.force (salt_lake_city_widget, vitp.salt_lake_city) +-- attack_widgets.force (northampton_widget, vitp.northampton) +-- attack_widgets.force (chester_widget, vitp.chester) +-- -- Location Uncertain, group X +-- attack_widgets.force (lexington_widget, vitp.lexington) +-- attack_widgets.force (chicago_widget, vitp.chicago) +-- attack_widgets.force (portland_widget, vitp.portland) +-- attack_widgets.force (astoria_widget, vitp.astoria) +-- -- Location Uncertain, group Y +-- attack_widgets.force (saratoga_widget, vitp.saratoga) +-- -- Location Uncertain (group Z +-- attack_widgets.force (hornet_widget, vitp.hornet) +-- attack_widgets.force (yorktown_widget, vitp.yorktown) +-- attack_widgets.force (vincennes_widget, vitp.vincennes) +-- attack_widgets.force (quincy_widget, vitp.quincy) + end + + fill_remaining_allied_attack_unit_widgets + -- Call `set_target' for each allied {ATTACK_UNIT_WIDGET} + -- that is in turns two through nine. + local + t: VITP_TABLE [ATTACK_UNIT] + u: ATTACK_UNIT + w: ATTACK_UNIT_WIDGET + do + -- Turn 2 + t := vitp.allied_turn_2_units + from t.start + until t.after + loop + u := t.item_for_iteration + w := attack_widgets.widget (u) + w.set_target (u) + t.forth + end + -- Turn 3 + t := vitp.allied_turn_3_units + from t.start + until t.after + loop + u := t.item_for_iteration + w := attack_widgets.widget (u) + w.set_target (u) + t.forth + end + -- Turn 4 + t := vitp.allied_turn_4_units + from t.start + until t.after + loop + u := t.item_for_iteration + w := attack_widgets.widget (u) + w.set_target (u) + t.forth + end + -- Turn 5 + t := vitp.allied_turn_5_units + from t.start + until t.after + loop + u := t.item_for_iteration + w := attack_widgets.widget (u) + w.set_target (u) + t.forth + end + -- Turn 6 + t := vitp.allied_turn_6_units + from t.start + until t.after + loop + u := t.item_for_iteration + w := attack_widgets.widget (u) + w.set_target (u) + t.forth + end + -- Turn 7 + t := vitp.allied_turn_7_units + from t.start + until t.after + loop + u := t.item_for_iteration + w := attack_widgets.widget (u) + w.set_target (u) + t.forth + end + -- Turn 8 + t := vitp.allied_turn_8_units + from t.start + until t.after + loop + u := t.item_for_iteration + w := attack_widgets.widget (u) + w.set_target (u) + t.forth + end + -- Turn 9 + t := vitp.allied_turn_9_units + from t.start + until t.after + loop + u := t.item_for_iteration + w := attack_widgets.widget (u) + w.set_target (u) + t.forth + end + end + + fill_japanese_attack_unit_widgets + -- Call `set_target' for each Japanese {ATTACK_UNIT_WIDGET}. + local + t: VITP_TABLE [ATTACK_UNIT] + u: ATTACK_UNIT + w: ATTACK_UNIT_WIDGET + do + t := vitp.japanese_attack_units + from t.start + until t.after + loop + u := t.item_for_iteration + w := attack_widgets.widget (u) + w.set_target (u) + t.forth + end + end + +feature -- Access (tables) + + land_widgets: VITP_WIDGET_TABLE [LOCATION_WIDGET, LOCATION] + -- Keeps track of the "other" land widgets + attribute + create Result.make (100) + end + + port_widgets: VITP_WIDGET_TABLE [PORT_WIDGET, PORT] + -- Keeps track of widgets indexed by a {PORT} + attribute + create Result.make (100) + end + + sea_area_widgets: VITP_WIDGET_TABLE [SEA_AREA_WIDGET, SEA_AREA] + -- Keeps track of widgets indexed by a {SEA_AREA} + attribute + create Result.make (100) + end + + location_widgets: VITP_WIDGET_TABLE [LOCATION_WIDGET, LOCATION] + -- Keeps track of sea areas and ports + attribute + create Result.make (100) + end + + allied_attack_unit_widgets: VITP_WIDGET_TABLE [ATTACK_UNIT_WIDGET, ATTACK_UNIT] + -- Keeps track of Allied attack units + attribute + create Result.make (100) + end + + attack_widgets: VITP_WIDGET_TABLE [ATTACK_UNIT_WIDGET, ATTACK_UNIT] + -- Keeps track of all widgets in Current + attribute + create Result.make (100) + end + + task_force_widgets: VITP_WIDGET_TABLE [TASK_FORCE_WIDGET, TASK_FORCE] + -- Unlike the other widget tables, this table may or may not + -- contain a widget for a particular task force. + attribute + create Result.make (100) + end + +feature -- Land widgets + +-- board_widget: BOARD_WIDGET + asia_widget: ASIA_WIDGET attribute create Result end + kamchatka_widget: KAMCHATKA_WIDGET attribute create Result end + aleutians_widget: ALEUTIANS_WIDGET attribute create Result end + solomans_widget: SOLOMANS_WIDGET attribute create Result end + marshalls_north_widget: MARSHALLS_NORTH_WIDGET attribute create Result end + marshalls_south_widget: MARSHALLS_SOUTH_WIDGET attribute create Result end + +feature -- Sea area widgets + + Aleutian_islands_widget: ALEUTIAN_ISLANDS_WIDGET attribute create Result end + Bay_of_bengal_widget: BAY_OF_BENGAL_WIDGET attribute create Result end + Central_pacific_ocean_widget: CENTRAL_PACIFIC_OCEAN_WIDGET attribute create Result end + Coral_sea_widget: CORAL_SEA_WIDGET attribute create Result end + Hawaiian_islands_widget: HAWAIIAN_ISLANDS_WIDGET attribute create Result end + Indian_ocean_widget: INDIAN_OCEAN_WIDGET attribute create Result end + Indonesia_widget: INDONESIA_WIDGET attribute create Result end + Japanese_islands_widget: JAPANESE_ISLANDS_WIDGET attribute create Result end + Marianas_islands_widget: MARIANAS_ISLANDS_WIDGET attribute create Result end + Marshall_islands_widget: MARSHALL_ISLANDS_WIDGET attribute create Result end + North_pacific_ocean_widget: NORTH_PACIFIC_OCEAN_WIDGET attribute create Result end + South_pacific_ocean_widget: SOUTH_PACIFIC_OCEAN_WIDGET attribute create Result end + US_mandate_widget: US_MANDATE_WIDGET attribute create Result end + +feature -- Port widgets + + Andaman_islands_widget: ANDAMAN_ISLANDS_WIDGET attribute create Result end + Attu_widget: ATTU_WIDGET attribute create Result end + Australia_widget: AUSTRALIA_WIDGET attribute create Result end + Ceylon_widget: CEYLON_WIDGET attribute create Result end + Dutch_harbor_widget: DUTCH_HARBOR_WIDGET attribute create Result end + Guadalcanal_widget: GUADALCANAL_WIDGET attribute create Result end + Johnston_island_widget: JOHNSTON_ISLAND_WIDGET attribute create Result end + Kwajalein_widget: KWAJALEIN_WIDGET attribute create Result end + Lae_widget: LAE_WIDGET attribute create Result end + Maloelap_widget: MALOELAP_WIDGET attribute create Result end + Midway_widget: MIDWAY_WIDGET attribute create Result end + New_hebrides_widget: NEW_HEBRIDES_WIDGET attribute create Result end + Okinawa_widget: OKINAWA_WIDGET attribute create Result end + Pearl_harbor_widget: PEARL_HARBOR_WIDGET attribute create Result end + Philippines_widget: PHILIPPINES_WIDGET attribute create Result end + Port_moresby_widget: PORT_MORESBY_WIDGET attribute create Result end + Saigon_widget: SAIGON_WIDGET attribute create Result end + Saipan_widget: SAIPAN_WIDGET attribute create Result end + Samoa_widget: SAMOA_WIDGET attribute create Result end + Singapore_widget: SINGAPORE_WIDGET attribute create Result end + Truk_widget: TRUK_WIDGET attribute create Result end + Yokosuka_navy_yard_widget: YOKOSUKA_NAVY_YARD_WIDGET attribute create Result end + +feature -- Access (Japanese unit widgets) + -- Turn 1, row 1 + shokaku_widget: SHIP_WIDGET attribute create Result end + zuikaku_widget: SHIP_WIDGET attribute create Result end + akagi_widget: SHIP_WIDGET attribute create Result end + kaga_widget: SHIP_WIDGET attribute create Result end + soryu_widget: SHIP_WIDGET attribute create Result end + hiryu_widget: SHIP_WIDGET attribute create Result end + ryujo_widget: SHIP_WIDGET attribute create Result end + hosho_widget: SHIP_WIDGET attribute create Result end + zuiho_widget: SHIP_WIDGET attribute create Result end + mutsu_widget: SHIP_WIDGET attribute create Result end + nagato_widget: SHIP_WIDGET attribute create Result end + fuso_widget: SHIP_WIDGET attribute create Result end + -- Turn 1, row 2 + hyuga_widget: SHIP_WIDGET attribute create Result end + ise_widget: SHIP_WIDGET attribute create Result end + yamashiro_widget: SHIP_WIDGET attribute create Result end + haruna_widget: SHIP_WIDGET attribute create Result end + hiei_widget: SHIP_WIDGET attribute create Result end + kirishima_widget: SHIP_WIDGET attribute create Result end + kongo_widget: SHIP_WIDGET attribute create Result end + ashigara_widget: SHIP_WIDGET attribute create Result end + atago_widget: SHIP_WIDGET attribute create Result end + chokai_widget: SHIP_WIDGET attribute create Result end + haguro_widget: SHIP_WIDGET attribute create Result end + maya_widget: SHIP_WIDGET attribute create Result end + -- Turn 1, row 3 + myoko_widget: SHIP_WIDGET attribute create Result end + nachi_widget: SHIP_WIDGET attribute create Result end + takao_widget: SHIP_WIDGET attribute create Result end + chikuma_widget: SHIP_WIDGET attribute create Result end + kumano_widget: SHIP_WIDGET attribute create Result end + mikuma_widget: SHIP_WIDGET attribute create Result end + mogami_widget: SHIP_WIDGET attribute create Result end + suzuya_widget: SHIP_WIDGET attribute create Result end + tone_widget: SHIP_WIDGET attribute create Result end + aoba_widget: SHIP_WIDGET attribute create Result end + furutaka_widget: SHIP_WIDGET attribute create Result end + kako_widget: SHIP_WIDGET attribute create Result end + -- Turn 1, row 4 + kinugasa_widget: SHIP_WIDGET attribute create Result end + kitakami_widget: SHIP_WIDGET attribute create Result end + oi_widget: SHIP_WIDGET attribute create Result end + yokosuka_widget: AMPHIBIOUS_UNIT_WIDGET attribute create Result end + -- Turn 1, also available + airflot_21_widget: AIR_UNIT_WIDGET attribute create Result end + airflot_22_widget: AIR_UNIT_WIDGET attribute create Result end + airflot_23_widget: AIR_UNIT_WIDGET attribute create Result end + airflot_24_widget: AIR_UNIT_WIDGET attribute create Result end + airflot_25_widget: AIR_UNIT_WIDGET attribute create Result end + airflot_26_widget: AIR_UNIT_WIDGET attribute create Result end + i_boat_widget: SUBMARINE_WIDGET attribute create Result end + -- Turn 2 + shoho_widget: SHIP_WIDGET attribute create Result end + junyo_widget: SHIP_WIDGET attribute create Result end + sasebo_widget: AMPHIBIOUS_UNIT_WIDGET attribute create Result end + -- Turn 3 + hiyo_widget: SHIP_WIDGET attribute create Result end + yamato_widget: SHIP_WIDGET attribute create Result end + kure_widget: SHIP_WIDGET attribute create Result end + -- Turn 5 + musashi_widget: SHIP_WIDGET attribute create Result end + -- Turn 7 + chiyoda_widget: SHIP_WIDGET attribute create Result end + chitose_widget: SHIP_WIDGET attribute create Result end + ryuho_widget: SHIP_WIDGET attribute create Result end + taiho_widget: SHIP_WIDGET attribute create Result end + -- Turn 8 + unryu_widget: SHIP_WIDGET attribute create Result end + amagi_widget: SHIP_WIDGET attribute create Result end + -- Turn 9 + katsuragi_widget: SHIP_WIDGET attribute create Result end + shinano_widget: SHIP_WIDGET attribute create Result end + +feature -- Access (Allied unit widgets) + + -- On Battleship Row (Pearl Harbor) + nevada_widget: SHIP_WIDGET attribute create Result end + arizona_widget: SHIP_WIDGET attribute create Result end + west_virginia_widget: SHIP_WIDGET attribute create Result end + tennessee_widget: SHIP_WIDGET attribute create Result end + oklahoma_widget: SHIP_WIDGET attribute create Result end + maryland_widget: SHIP_WIDGET attribute create Result end + california_widget: SHIP_WIDGET attribute create Result end + pennsylvania_widget: SHIP_WIDGET attribute create Result end + new_orleans_widget: SHIP_WIDGET attribute create Result end + san_francisco_widget: SHIP_WIDGET attribute create Result end + seventh_af_widget: AIR_UNIT_WIDGET attribute create Result end + -- At sea (cannot move) + hermes_widget: SHIP_WIDGET attribute create Result end + revenge_widget: SHIP_WIDGET attribute create Result end + prince_of_wales_widget: SHIP_WIDGET attribute create Result end + repulse_widget: SHIP_WIDGET attribute create Result end + fifth_af_widget: SHIP_WIDGET attribute create Result end + louisville_widget: SHIP_WIDGET attribute create Result end + pensacola_widget: SHIP_WIDGET attribute create Result end + indianapolis_widget: SHIP_WIDGET attribute create Result end + minneapolis_widget: SHIP_WIDGET attribute create Result end + -- In port (may move) + houston_widget: SHIP_WIDGET attribute create Result end + exeter_widget: SHIP_WIDGET attribute create Result end + de_ruyter_widget: SHIP_WIDGET attribute create Result end + australia_ship_widget: SHIP_WIDGET attribute create Result end + canberra_widget: SHIP_WIDGET attribute create Result end + -- Location Uncertain, group W + enterprise_widget: SHIP_WIDGET attribute create Result end + salt_lake_city_widget: SHIP_WIDGET attribute create Result end + northampton_widget: SHIP_WIDGET attribute create Result end + chester_widget: SHIP_WIDGET attribute create Result end + -- Location Uncertain, group X + lexington_widget: SHIP_WIDGET attribute create Result end + chicago_widget: SHIP_WIDGET attribute create Result end + portland_widget: SHIP_WIDGET attribute create Result end + astoria_widget: SHIP_WIDGET attribute create Result end + -- Location Uncertain, group Y + saratoga_widget: SHIP_WIDGET attribute create Result end + -- Location Uncertain, group W + hornet_widget: SHIP_WIDGET attribute create Result end + yorktown_widget: SHIP_WIDGET attribute create Result end + vincennes_widget: SHIP_WIDGET attribute create Result end + quincy_widget: SHIP_WIDGET attribute create Result end + -- Turn 2 + royal_sovereign_widget: SHIP_WIDGET attribute create Result end + ramilies_widget: SHIP_WIDGET attribute create Result end + resolution_widget: SHIP_WIDGET attribute create Result end + warspite_widget: SHIP_WIDGET attribute create Result end + indomitable_widget: SHIP_WIDGET attribute create Result end + formidable_widget: SHIP_WIDGET attribute create Result end + cornwall_widget: SHIP_WIDGET attribute create Result end + dorestshire_widget: SHIP_WIDGET attribute create Result end + new_mexico_widget: SHIP_WIDGET attribute create Result end + idaho_widget: SHIP_WIDGET attribute create Result end + tenth_af_widget: AIR_UNIT_WIDGET attribute create Result end + eleventh_af_widget: AIR_UNIT_WIDGET attribute create Result end + -- Turn 3 + north_carolina_widget: SHIP_WIDGET attribute create Result end + mississippi_widget: SHIP_WIDGET attribute create Result end + colorado_widget: SHIP_WIDGET attribute create Result end + marines_1_widget: AMPHIBIOUS_UNIT_wIDGET attribute create Result end + marines_2_widget: AMPHIBIOUS_UNIT_WIDGET attribute create Result end + raaf_widget: AIR_UNIT_WIDGET attribute create Result end + rnzaf_widget: AIR_UNIT_WIDGET attribute create Result end + valiant_widget: SHIP_WIDGET attribute create Result end + illustrious_widget: SHIP_WIDGET attribute create Result end + -- Turn 4 + south_dakota_widget: SHIP_WIDGET attribute create Result end + indiana_widget: SHIP_WIDGET attribute create Result end + washington_widget: SHIP_WIDGET attribute create Result end + wasp_widget: SHIP_WIDGET attribute create Result end + marine_widget: SHIP_WIDGET attribute create Result end + thirteenth_af_widget: AIR_UNIT_WIDGET attribute create Result end + devonshire_widget: SHIP_WIDGET attribute create Result end + shropshire_widget: SHIP_WIDGET attribute create Result end + -- Turn 5 + massachusetts_widget: SHIP_WIDGET attribute create Result end + wichita_widget: SHIP_WIDGET attribute create Result end + victorious_widget: SHIP_WIDGET attribute create Result end + marines_3_widget: AMPHIBIOUS_UNIT_WIDGET attribute create Result end + fourteenth_af_widget: AIR_UNIT_WIDGET attribute create Result end + naval_widget: AIR_UNIT_WIDGET attribute create Result end + -- Turn 6 + alabama_widget: SHIP_WIDGET attribute create Result end + essex_widget: SHIP_WIDGET attribute create Result end + cv_10_widget: SHIP_WIDGET attribute create Result end + cv_16_widget: SHIP_WIDGET attribute create Result end + independence_widget: SHIP_WIDGET attribute create Result end + princeton_widget: SHIP_WIDGET attribute create Result end + belleau_wood_widget: SHIP_WIDGET attribute create Result end + cowpens_widget: SHIP_WIDGET attribute create Result end + monterey_widget: SHIP_WIDGET attribute create Result end + baltimore_widget: SHIP_WIDGET attribute create Result end + boston_widget: SHIP_WIDGET attribute create Result end + marines_4_widget: AMPHIBIOUS_UNIT_WIDGET attribute create Result end + -- Turn 7 + iowa_widget: SHIP_WIDGET attribute create Result end + new_jersey_widget: SHIP_WIDGET attribute create Result end + intrepid_widget: SHIP_WIDGET attribute create Result end + cv_12_widget: SHIP_WIDGET attribute create Result end + bunker_hill_widget: SHIP_WIDGET attribute create Result end + cv_18_widget: SHIP_WIDGET attribute create Result end + bataan_widget: SHIP_WIDGET attribute create Result end + cabot_widget: SHIP_WIDGET attribute create Result end + langley_ii_widget: SHIP_WIDGET attribute create Result end + canbera_ii_widget: SHIP_WIDGET attribute create Result end + quincy_ii_widget: SHIP_WIDGET attribute create Result end + f_boat_widget: SUBMARINE_WIDGET attribute create Result end + -- Turn 8 + wisconsin_widget: SHIP_WIDGET attribute create Result end + missouri_widget: SHIP_WIDGET attribute create Result end + ticonderoga_widget: SHIP_WIDGET attribute create Result end + san_jacinto_widget: SHIP_WIDGET attribute create Result end + marines_5_widget: AMPHIBIOUS_UNIT_WIDGET attribute create Result end + -- Turn 9 + new_york_widget: SHIP_WIDGET attribute create Result end + texas_widget: SHIP_WIDGET attribute create Result end + alaska_widget: SHIP_WIDGET attribute create Result end + franklin_widget: SHIP_WIDGET attribute create Result end + shangri_la_widget: SHIP_WIDGET attribute create Result end + +end diff --git a/jj_vitp/Interface/views/vitp_tool.e b/jj_vitp/Interface/views/vitp_tool.e new file mode 100644 index 0000000..6481679 --- /dev/null +++ b/jj_vitp/Interface/views/vitp_tool.e @@ -0,0 +1,140 @@ +note + description: "[ + Root class for tools used in the VITP game. + ]" + author: "Jimmy J. Johnson" + +deferred class + VITP_TOOL + +inherit + + TOOL + rename + target as vitp + redefine + create_interface_objects, + initialize, + add_actions, + target_imp +-- set_target + end + +feature {NONE} -- Initialization + + create_interface_objects + -- Create objects to be used by `Current' in `initialize' + -- Implemented by descendants to create attached objects + -- in order to adhere to void-safety due to the implementation bridge pattern. + do + print ("VITP_TOOL.create_interface_objects %N") + Precursor {TOOL} + print ("%T VITP_TOOL.create_interface_objects after Precursor {TOOL} %N") + create zoom_in_button + create zoom_out_button + create fit_button + zoom_in_button.set_pixmap (create {EV_PIXMAP}.make_with_pixel_buffer (Icon_zoom_in_color_buffer)) + zoom_in_button.set_tooltip ("Zoom In") + zoom_out_button.set_pixmap (create {EV_PIXMAP}.make_with_pixel_buffer (Icon_zoom_out_color_buffer)) + zoom_out_button.set_tooltip ("Zoom Out") + fit_button.set_pixmap (create {EV_PIXMAP}.make_with_pixel_buffer (icon_format_exporteds_color_buffer)) + fit_button.set_tooltip ("Fit to View") + end + + initialize + -- Build the interface for this window + do + Precursor {TOOL} + build_tool_bar + split_manager.enable_mode_changes + split_manager.set_horizontal + end + + build_tool_bar + -- Add buttons to `tool_bar' (from TOOL). + local + vs: EV_VERTICAL_SEPARATOR + do + -- Add a separator and space it out with minimum size. + create vs + tool_bar.extend (vs) + tool_bar.disable_item_expand (vs) + vs.set_minimum_width (20) + -- Add the zoom buttons + tool_bar.extend (zoom_in_button) + tool_bar.extend (zoom_out_button) + tool_bar.extend (fit_button) + tool_bar.disable_item_expand (zoom_in_button) + tool_bar.disable_item_expand (zoom_out_button) + tool_bar.disable_item_expand (fit_button) + -- Add a separator and space it out with minimum size. + create vs + tool_bar.extend (vs) + tool_bar.disable_item_expand (vs) + vs.set_minimum_width (20) + end + + add_actions + -- Add functionality to the buttons + do + Precursor {TOOL} + zoom_in_button.select_actions.extend (agent on_zoom_in) + zoom_out_button.select_actions.extend (agent on_zoom_out) + fit_button.select_actions.extend (agent on_fit) + end + +feature -- Access + + focused_view: VITP_CELL_VIEW + -- The view that currently has the focus + deferred + end + +feature {NONE} -- Implementation (actions) + + on_set_defaults + -- Restore the view-vector to the default settings. + do + end + + on_zoom_in + -- Make the board larger + do + focused_view.scale_up + end + + on_zoom_out + -- Make the board smaller + do + focused_view.scale_down + end + + on_fit + -- Make the content fit the view + do + focused_view.fit_to_screen + focused_view.resize_if_necessary + focused_view.crop + end + + Default_object: VITP_GAME + -- + once + create Result + end + +feature {NONE} -- Implementation + + target_imp: detachable VITP_GAME + -- Detachable implementation of `target' for void safety + + zoom_in_button: EV_BUTTON --EV_TOOL_BAR_BUTTON + -- Button to make the game board larger. + + zoom_out_button: EV_BUTTON --EV_TOOL_BAR_BUTTON + -- Button to make the game board smaller. + + fit_button: EV_BUTTON + -- Button to fit the content to the view + +end diff --git a/jj_vitp/Interface/views/vitp_view.e b/jj_vitp/Interface/views/vitp_view.e new file mode 100644 index 0000000..769d9a3 --- /dev/null +++ b/jj_vitp/Interface/views/vitp_view.e @@ -0,0 +1,37 @@ +note + description: "[ + Root class for all the views in VITP + ]" + author: "Jimmy J. Johnson" + +class + VITP_VIEW + +inherit + + JJ_MODEL_WORLD_VIEW + redefine +-- create_interface_objects, +-- world, +-- target, +-- draw + end + +create {VITP_VIEW} + list_make + +feature -- Basic operations + +-- draw +-- -- Redraw the window +-- do +---- world.wipe_out +-- world.full_redraw +-- Precursor {JJ_MODEL_WORLD_VIEW} +-- end + + +invariant + + +end diff --git a/jj_vitp/Interface/views/widget_factory.e b/jj_vitp/Interface/views/widget_factory.e new file mode 100644 index 0000000..4f67e16 --- /dev/null +++ b/jj_vitp/Interface/views/widget_factory.e @@ -0,0 +1,80 @@ +note + description: "[ + Top container class of the classes that decompose the numourous + VITP widgets into more managable groups. + This class keeps track of widgets, allowing a {VITP_WIDGET} + to add/remove a widget to/from its world. + ]" + author: "Jimmy J. Johnson" + date: "5/15/24" + copyright: "Copyright (c) 2024, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +class + WIDGET_FACTORY + +create + make + +feature {NONE} -- Initialization + + make (a_game: like game) + -- Create an instance + do + print ("WIDGET_FACTORY.make %N") + game := a_game + make_widgets + extend_widgets + pair_widgets + fill_widgets + print ("%T end WIDGET_FACTORY.make %N") + end + + make_widgets + -- Create widgets for the corresponding game item + do + create widgets.make (100) + end + +feature -- Access + + game: VITP_GAME + -- The game for which the widgets are created + + widgets: VITP_WIDGET_TABLE [VITP_WIDGET, VITP_ITEM] + -- Container to keep track of all widgets + +feature -- Element change + + set_game (a_game: like game) + -- Associate `a_game' with Current. + do + game := a_game + -- Add widgets to the table only once, because + -- the widgets don't change + if widgets.is_empty then + extend_widgets + end + pair_widgets + fill_widgets + end + +feature -- Basic operations + + extend_widgets + -- Put each widget into a list. + do + end + + pair_widgets + -- Associate each widget with a unit + do + end + + fill_widgets + -- Called by `set_target' to place each item into + -- its associated widget. + do + end + +end diff --git a/jj_vitp/Interface/views/widget_position_table.e b/jj_vitp/Interface/views/widget_position_table.e new file mode 100644 index 0000000..626742e --- /dev/null +++ b/jj_vitp/Interface/views/widget_position_table.e @@ -0,0 +1,142 @@ +note + description: "[ + A table of TUPLEs where each TUPLE holds an EV_WORLD object + (e.g. EV_TEXT_WIDGET, ATTACK_UNIT_WIDGET, etc.) along with + an EV_COORDINATE of where that widget should be placed, + indexed by a string name. + ]" + author: "Jimmy J. Johnson" + date: "11/11/23" + copyright: "Copyright (c) 2023, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +class + WIDGET_POSITION_TABLE [G -> EV_MODEL, K -> HASHABLE] + +--inherit + +-- HASH_TABLE [TUPLE [mod: G; loc: EV_COORDINATE], K] +-- rename +-- extend as table_extend +-- export +-- {NONE} +-- put, +-- force, +-- table_extend, +-- replace, +-- replace_key, +-- merge +-- end + +create + make + +feature {NONE} -- Initialization + + make + -- Create an instance + do + create table.make (100) + end + +feature -- Access + + widget (a_key: K): EV_MODEL + -- The widget associated with `a_key' + require + has_key: has (a_key) + do + Result := table.definite_item (a_key).mod + end + + location (a_key: K): EV_COORDINATE + -- The location associated with `a_key' + require + has_key: has (a_key) + do + Result := table.definite_item (a_key).loc + end + + widget_for_iteration: EV_MODEL + -- The `widget' item at the current iteration position + require + not_off: not is_off + do + Result := table.item_for_iteration.mod + end + + location_for_iteration: EV_COORDINATE + -- The `location' item at the current iteration position + require + not_off: not is_off + do + Result := table.item_for_iteration.loc + end + + key_for_iteration: K + -- The key at thge currenbt iteration position + require + not_off: not is_off + do + Result := table.key_for_iteration + end + +feature -- Query + + has (a_key: K): BOOLEAN + -- Does Current contain an item with `a_key' + do + Result := table.has (a_key) + end + +feature -- Element change + + extend (a_widget: EV_MODEL; a_x, a_y: INTEGER; a_key: K) + -- Add `a_widget' to the table, located at (a_x, a_y) and + -- indexed by `a_key'. Replace any previous item that + -- was indexed by `a_key'. + -- An EV_COORDINATE is created from `a_x' and `a_y'. + local + loc: EV_COORDINATE + do + create loc.make (a_x, a_y) + table.force ([a_widget, loc], a_key) + end + + reposition (a_key: K; a_x, a_y: INTEGER) + -- Change the `location' for the item indexed by `a_key' + require + has_key: has (a_key) + do + location (a_key).set_x (a_x) + location (a_key).set_y (a_y) + end + +feature -- Cursor movement + + start + -- Bring cursor to first position + do + table.start + end + + forth + -- Advance cursor to next position or `is_off' + require + not_off: not is_off + do + table.forth + end + + is_off: BOOLEAN + -- Is the cursor after the last item? + do + Result := table.off + end + +feature {NONE} -- Implementation + + table: HASH_TABLE [TUPLE [mod: EV_MODEL; loc: EV_COORDINATE], K] + -- Implementation of Current + +end diff --git a/jj_vitp/Interface/widgets/land_widget.e b/jj_vitp/Interface/widgets/land_widget.e new file mode 100644 index 0000000..4a86949 --- /dev/null +++ b/jj_vitp/Interface/widgets/land_widget.e @@ -0,0 +1,26 @@ +note + description: "[ + A {LOCATION_WIDGET} used specifically for building land areas + that are not ports, such as Asia and Kamchatka. + ]" + author: "Jimmy J. Johnson" + +class + LAND_WIDGET + +inherit + + LOCATION_WIDGET + redefine + target_imp + end + +create + default_create + +feature {NONE} -- Implementation + + target_imp: detachable LAND + -- Anchor for the `target' represented by Current + +end diff --git a/jj_vitp/Interface/widgets/land_world.e b/jj_vitp/Interface/widgets/land_world.e new file mode 100644 index 0000000..c2167b8 --- /dev/null +++ b/jj_vitp/Interface/widgets/land_world.e @@ -0,0 +1,29 @@ +note + description: "[ + A EV_MODEL_WORLD containing polygons that represent the land + areas in VITP. The `land' in Current is simply a named object; + This widget defines the visual representation as a group of + polygons in a world. + ]" + author: "Jimmy J. Johnson" + revision: "$Revision: 42 $" + +class + LAND_WORLD + +inherit + + EV_MODEL_WORLD + +create + default_create + +create {LAND_WORLD} + list_make + +feature -- Access + +feature -- Implementation + + +end diff --git a/jj_vitp/Interface/widgets/location_widget.e b/jj_vitp/Interface/widgets/location_widget.e new file mode 100644 index 0000000..11ef7b1 --- /dev/null +++ b/jj_vitp/Interface/widgets/location_widget.e @@ -0,0 +1,184 @@ +note + description: "[ + Widget representing an area on the game board (such as a + land mass or port.) + ]" + author: "Jimmy J. Johnson" + +deferred class + LOCATION_WIDGET + +inherit + + VITP_WIDGET + rename + target as location + redefine + create_interface_objects, +-- initialize, + extend_widgets, + build_widgets, + set_widget_order, + add_actions, +-- defining_figure, + paint, + on_button_pressed, +-- on_pointer_leave, + target_imp + end + +feature {NONE} -- Initialization + + create_interface_objects + -- Initialize attributes + do + create land + land_color := Default_land_color + Precursor {VITP_WIDGET} + end + + extend_widgets + -- Put widgets into Current. This cannot be done + -- in `create_interface_object', because cannot call + -- `extend' feature until all objects [in descendants] + -- are also created. + do + Precursor {VITP_WIDGET} + extend (land) + end + + build_widgets + -- Now that widgets were created in `create_interface_objects' + -- and added to Current in `extend_widgets', build up the + -- widgets by adding internal structure to each widget. + do + Precursor {VITP_WIDGET} + build_land + end + + set_widget_order + -- Ensure the widgets are ordered properly + -- (i.e. whose on top?) + do + Precursor {VITP_WIDGET} + bring_to_front (land) + bring_to_front (text_group) + end + + add_actions + -- Make Current react to events + do + Precursor {VITP_WIDGET} + pointer_button_press_actions.extend (agent on_button_pressed) + pointer_button_release_actions.extend (agent on_button_released) + pointer_leave_actions.extend (agent on_pointer_leave) + end + + build_land + -- Create any land masses in Current + do + end + +feature -- Access + +-- defining_figure: EV_MODEL +-- -- The figure to be used to determine if other figures +-- -- overlap this one or for capturing mouse events +-- do +-- Result := land +-- end + +feature -- Basic operations + + paint + -- Set the colors for the land and other areas + local + bc, c: EV_COLOR + do + Precursor {VITP_WIDGET} + bc := adjusted_color (Land_boundary_color) + c := adjusted_color (land_color) + from land.start + until land.exhausted + loop + check attached {EV_MODEL_POLYGON} land.item as p then + p.set_foreground_color (bc) + p.set_background_color (c) + end + land.forth + end + end + +feature {NONE} -- Implementation (actions) + + on_button_pressed (ax: INTEGER; ay: INTEGER; a_button: INTEGER; x_tilt: DOUBLE; y_tilt: DOUBLE; + pressure: DOUBLE; a_screen_x: INTEGER; a_screen_y: INTEGER) + -- React to a button press by brightening the location. +-- -- Notify `board_world' that Current was clicked +-- -- This allows the `board_world' to handle the click *and* to know the +-- -- widget on which the click occurred. + local +-- u_list: LINKED_SET [VITP_MOVEABLE] + g: EV_MODEL_GROUP + do + io.put_string ("LOCATION_WIDGET.on_button_press -- " + location.name + "%N") + g := group + is_highlighting := True +-- is_highlighting.set_item (true) +-- focused_widgets.extend (Current) + set_dimming_level ({DIMABLE}.Bright) + paint +-- -- Also, brighten all units that are at this location +-- check attached board_world as bw then +-- u_list := location.units +-- from u_list.start +-- until u_list.after +-- loop +-- check attached {ATTACK_UNIT_WIDGET} bw.attack_widgets.item (u_list.item) as w then +-- focused_widgets.extend (w) +-- w.set_dimming_level ({DIMABLE}.Bright) +-- w.paint +-- end +-- u_list.forth +-- end +-- end + end + + on_button_released (ax: INTEGER; ay: INTEGER; a_button: INTEGER; x_tilt: DOUBLE; y_tilt: DOUBLE; + pressure: DOUBLE; a_screen_x: INTEGER; a_screen_y: INTEGER) + -- React to a button release event + do + if is_highlighting then + is_highlighting := false + restore_dimming_level + paint + end + end + + on_pointer_leave + -- React to the pointer leaving the area [in case the + -- button was pressed and dragged off Current]. + do + if is_highlighting then + is_highlighting := false + restore_dimming_level + paint + end +-- Precursor {VITP_NAMED_WIDGET} + end + +feature {NONE} -- Implementation + + is_highlighting: BOOLEAN + -- Is the location set brighter than normal? + + land: EV_MODEL_WORLD + -- To draw the land area(s) in Current + + land_color: EV_COLOR + -- The color with which to draw the land + + target_imp: detachable LOCATION + -- Anchor for the `target' represented by Current + +end diff --git a/jj_vitp/Interface/widgets/other_location_widgets/aleutians_land.e b/jj_vitp/Interface/widgets/other_location_widgets/aleutians_land.e new file mode 100644 index 0000000..93532f1 --- /dev/null +++ b/jj_vitp/Interface/widgets/other_location_widgets/aleutians_land.e @@ -0,0 +1,1181 @@ +note + description: "[ + Coordinates for each polygon representing the islands + appearing in the {ALEUTIANS_WIDGET}. + ]" + author: "Jimmy J. Johnson" + date: "$Date$" + revision: "$Revision$" + +class + ALEUTIANS_LAND + +feature {none} -- Implementation + + unimak: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (380.74074074074042, -269.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (381.62962962962956, -266.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (385.4814814814813, -268.4444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (389.03703703703695, -266.96296296296288)) + Result.extend_point (create {EV_COORDINATE}.make_precise (389.03703703703695, -269.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (394.66666666666652, -271.11111111111103)) + Result.extend_point (create {EV_COORDINATE}.make_precise (393.18518518518476, -269.62962962962956)) + Result.extend_point (create {EV_COORDINATE}.make_precise (393.18518518518476, -266.96296296296288)) + Result.extend_point (create {EV_COORDINATE}.make_precise (396.74074074074042, -262.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (401.77777777777783, -256.5925925925925)) + Result.extend_point (create {EV_COORDINATE}.make_precise (404.14814814814827, -249.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (405.92592592592564, -247.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (404.4444444444448, -242.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (406.81481481481478, -236.1481481481481)) + Result.extend_point (create {EV_COORDINATE}.make_precise (407.70370370370392, -229.33333333333329)) + Result.extend_point (create {EV_COORDINATE}.make_precise (411.55555555555566, -223.70370370370364)) + Result.extend_point (create {EV_COORDINATE}.make_precise (421.03703703703695, -224.59259259259255)) + Result.extend_point (create {EV_COORDINATE}.make_precise (427.25925925925912, -226.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (432.88888888888914, -218.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (432.59259259259261, -214.81481481481475)) + Result.extend_point (create {EV_COORDINATE}.make_precise (437.33333333333348, -213.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (437.33333333333348, -211.25925925925921)) + Result.extend_point (create {EV_COORDINATE}.make_precise (432.88888888888914, -210.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (427.85185185185173, -211.55555555555551)) + Result.extend_point (create {EV_COORDINATE}.make_precise (430.81481481481478, -214.81481481481475)) + Result.extend_point (create {EV_COORDINATE}.make_precise (426.37037037037044, -215.11111111111106)) + Result.extend_point (create {EV_COORDINATE}.make_precise (422.81481481481478, -215.11111111111106)) + Result.extend_point (create {EV_COORDINATE}.make_precise (421.62962962962956, -212.7407407407407)) + Result.extend_point (create {EV_COORDINATE}.make_precise (420.4444444444448, -216.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (418.07407407407391, -217.18518518518513)) + Result.extend_point (create {EV_COORDINATE}.make_precise (416.29629629629608, -215.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (412.14814814814827, -218.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (412.74074074074042, -222.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (408.29629629629608, -223.40740740740736)) + Result.extend_point (create {EV_COORDINATE}.make_precise (405.92592592592564, -221.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (403.25925925925912, -218.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (404.74074074074042, -216.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (403.85185185185173, -209.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (402.07407407407391, -207.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (396.14814814814827, -207.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (396.14814814814827, -206.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (391.11111111111131, -204.4444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (388.4444444444448, -206.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (389.62962962962956, -202.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (381.92592592592564, -203.85185185185179)) + Result.extend_point (create {EV_COORDINATE}.make_precise (373.33333333333348, -205.33333333333329)) + Result.extend_point (create {EV_COORDINATE}.make_precise (362.07407407407391, -205.62962962962956)) + Result.extend_point (create {EV_COORDINATE}.make_precise (350.22222222222217, -204.7407407407407)) + Result.extend_point (create {EV_COORDINATE}.make_precise (341.62962962962956, -202.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (332.4444444444448, -199.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (325.92592592592564, -194.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (321.18518518518476, -190.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (319.40740740740739, -186.96296296296293)) + Result.extend_point (create {EV_COORDINATE}.make_precise (320.88888888888914, -185.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (320, -183.70370370370364)) + Result.extend_point (create {EV_COORDINATE}.make_precise (320, -181.03703703703698)) + Result.extend_point (create {EV_COORDINATE}.make_precise (317.92592592592564, -178.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (314.96296296296305, -175.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (312.88888888888914, -173.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (309.92592592592564, -172.1481481481481)) + Result.extend_point (create {EV_COORDINATE}.make_precise (306.07407407407391, -170.96296296296293)) + Result.extend_point (create {EV_COORDINATE}.make_precise (301.92592592592564, -170.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (299.85185185185173, -169.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (296.29629629629608, -169.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (295.40740740740739, -167.70370370370364)) + Result.extend_point (create {EV_COORDINATE}.make_precise (293.33333333333348, -167.70370370370364)) + Result.extend_point (create {EV_COORDINATE}.make_precise (290.96296296296305, -166.81481481481475)) + Result.extend_point (create {EV_COORDINATE}.make_precise (289.18518518518476, -167.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (286.22222222222217, -168.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (284.14814814814827, -167.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (281.77777777777783, -167.40740740740736)) + Result.extend_point (create {EV_COORDINATE}.make_precise (280, -168.59259259259255)) + Result.extend_point (create {EV_COORDINATE}.make_precise (277.03703703703695, -169.18518518518516)) + Result.extend_point (create {EV_COORDINATE}.make_precise (276.4444444444448, -170.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (274.07407407407391, -170.96296296296293)) + Result.extend_point (create {EV_COORDINATE}.make_precise (273.4814814814813, -173.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (271.11111111111131, -175.11111111111106)) + Result.extend_point (create {EV_COORDINATE}.make_precise (271.40740740740739, -178.96296296296293)) + Result.extend_point (create {EV_COORDINATE}.make_precise (269.62962962962956, -179.85185185185182)) + Result.extend_point (create {EV_COORDINATE}.make_precise (268.14814814814827, -180.4444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (268.14814814814827, -182.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (268.4444444444448, -185.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (265.4814814814813, -186.96296296296293)) + Result.extend_point (create {EV_COORDINATE}.make_precise (265.4814814814813, -194.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (263.70370370370392, -195.55555555555551)) + Result.extend_point (create {EV_COORDINATE}.make_precise (266.66666666666652, -200.29629629629625)) + Result.extend_point (create {EV_COORDINATE}.make_precise (269.92592592592564, -199.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (273.18518518518476, -203.55555555555551)) + Result.extend_point (create {EV_COORDINATE}.make_precise (272.88888888888914, -205.03703703703698)) + Result.extend_point (create {EV_COORDINATE}.make_precise (274.37037037037044, -204.1481481481481)) + Result.extend_point (create {EV_COORDINATE}.make_precise (277.62962962962956, -206.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (280.59259259259261, -205.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (285.33333333333348, -209.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (290.66666666666652, -218.96296296296291)) + Result.extend_point (create {EV_COORDINATE}.make_precise (293.33333333333348, -224.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (294.51851851851825, -227.25925925925921)) + Result.extend_point (create {EV_COORDINATE}.make_precise (294.22222222222217, -229.03703703703698)) + Result.extend_point (create {EV_COORDINATE}.make_precise (297.77777777777783, -229.33333333333329)) + Result.extend_point (create {EV_COORDINATE}.make_precise (298.96296296296305, -228.74074074074068)) + Result.extend_point (create {EV_COORDINATE}.make_precise (298.96296296296305, -231.40740740740733)) + Result.extend_point (create {EV_COORDINATE}.make_precise (296.59259259259261, -231.40740740740733)) + Result.extend_point (create {EV_COORDINATE}.make_precise (298.66666666666652, -236.74074074074068)) + Result.extend_point (create {EV_COORDINATE}.make_precise (300.14814814814827, -238.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (299.25925925925912, -243.85185185185179)) + Result.extend_point (create {EV_COORDINATE}.make_precise (303.11111111111131, -245.33333333333329)) + Result.extend_point (create {EV_COORDINATE}.make_precise (303.40740740740739, -247.70370370370364)) + Result.extend_point (create {EV_COORDINATE}.make_precise (307.25925925925912, -250.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (311.11111111111131, -253.03703703703698)) + Result.extend_point (create {EV_COORDINATE}.make_precise (317.03703703703695, -249.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (318.81481481481478, -246.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (322.37037037037044, -245.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (324.4444444444448, -247.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (326.81481481481478, -245.62962962962956)) + Result.extend_point (create {EV_COORDINATE}.make_precise (329.18518518518476, -246.81481481481475)) + Result.extend_point (create {EV_COORDINATE}.make_precise (330.66666666666652, -245.03703703703698)) + Result.extend_point (create {EV_COORDINATE}.make_precise (330.66666666666652, -248.29629629629625)) + Result.extend_point (create {EV_COORDINATE}.make_precise (328.88888888888914, -249.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (331.25925925925912, -251.85185185185179)) + Result.extend_point (create {EV_COORDINATE}.make_precise (333.33333333333348, -250.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (334.81481481481478, -252.74074074074068)) + Result.extend_point (create {EV_COORDINATE}.make_precise (333.92592592592564, -254.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (335.70370370370392, -256.29629629629625)) + Result.extend_point (create {EV_COORDINATE}.make_precise (338.96296296296305, -258.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (341.03703703703695, -256.5925925925925)) + Result.extend_point (create {EV_COORDINATE}.make_precise (345.4814814814813, -256.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (350.22222222222217, -259.55555555555549)) + Result.extend_point (create {EV_COORDINATE}.make_precise (354.37037037037044, -262.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (360.29629629629608, -269.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (363.25925925925912, -268.4444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (366.81481481481478, -269.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (369.77777777777783, -271.70370370370364)) + Result.extend_point (create {EV_COORDINATE}.make_precise (375.11111111111131, -269.92592592592587)) + end + + umnak: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-34.074074074074133, -32.888888888888914)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-29.629629629629562, -35.851851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-27.555555555555202, -34.962962962962933)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-21.333333333333258, -37.629629629629619)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-20.444444444444343, -36.148148148148096)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-16.888888888888687, -37.333333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-14.222222222221944, -38.814814814814781)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-10.96296296296282, -37.925925925925867)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-10.666666666666515, -34.666666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1.4814814814812962, -31.111111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (5.925925925925867, -31.703703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (6.518518518518249, -27.851851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (2.0740740740739056, -21.925925925925867)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-0.88888888888868678, -19.259259259259238)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1.1851851851849915, -16)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-0.29629629629607734, -10.666666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-4.1481481481480387, -7.4074074074073906)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-11.555555555555202, -3.2592592592592382)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-13.92592592592564, -0.88888888888891415)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-19.851851851851734, 2.6666666666666856)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-23.111111111110858, 4.7407407407407618)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-33.185185185185219, 8.2962962962963047)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-40.296296296296077, 12.740740740740762)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-43.851851851851734, 17.185185185185219)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-42.96296296296282, 18.666666666666686)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-44.444444444444343, 19.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-44.444444444444343, 23.703703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-47.703703703703695, 21.629629629629676)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-46.814814814814781, 27.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-50.074074074074133, 29.629629629629676)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-53.92592592592564, 34.074074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-56, 36.148148148148152)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-55.407407407407391, 38.814814814814781)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-58.666666666666515, 41.777777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-61.037037037036953, 40.296296296296305)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-61.333333333333258, 42.370370370370381)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-66.074074074074133, 42.370370370370381)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-69.92592592592564, 45.925925925925981)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-72.592592592592382, 51.259259259259295)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-74.96296296296282, 51.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-75.555555555555202, 54.814814814814781)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-77.629629629629562, 52.148148148148152)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-78.518518518518476, 54.814814814814781)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-80.592592592592382, 55.407407407407391)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-83.259259259259125, 54.814814814814781)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-85.333333333333258, 56.888888888888857)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-83.259259259259125, 58.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-83.555555555555202, 61.925925925925981)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-87.703703703703695, 58.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-92.148148148148039, 61.333333333333371)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-98.074074074074133, 65.481481481481467)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-103.11111111111086, 68.740740740740762)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-106.37037037037044, 68.148148148148152)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-108.44444444444434, 70.814814814814781)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-110.81481481481478, 72.888888888888857)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-113.7777777777776, 74.074074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-112.88888888888869, 72)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-109.33333333333326, 69.629629629629676)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-110.51851851851848, 67.851851851851904)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-102.22222222222194, 65.777777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-100.14814814814804, 62.222222222222172)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-101.62962962962956, 60.740740740740762)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-100.74074074074088, 58.074074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-97.185185185185219, 57.481481481481467)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-92.740740740740875, 56.296296296296305)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-92.148148148148039, 53.333333333333371)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-91.555555555555202, 49.481481481481467)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-93.629629629629562, 49.185185185185219)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-93.037037037036953, 44.740740740740762)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-89.185185185185219, 44.444444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-85.333333333333258, 40.888888888888857)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-83.851851851851734, 36.444444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-83.851851851851734, 33.481481481481467)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-86.518518518518476, 30.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-86.814814814814781, 25.481481481481524)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-83.851851851851734, 22.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-83.555555555555202, 18.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-80.296296296296077, 18.074074074074133)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-75.851851851851734, 15.111111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-76.740740740740875, 13.629629629629676)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-73.481481481481296, 13.037037037037067)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-70.222222222221944, 8.5925925925926094)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-69.629629629629562, 6.2222222222222285)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-65.185185185185219, 8.8888888888889142)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-60.740740740740875, 9.4814814814815236)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-57.777777777777601, 6.814814814814838)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-56, 6.2222222222222285)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-53.333333333333258, 8.8888888888889142)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-51.555555555555202, 8.5925925925926094)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-48.888888888888687, 8.2962962962963047)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-46.518518518518476, 9.4814814814815236)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-44.740740740740875, 4.7407407407407618)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-45.333333333333258, 3.259259259259295)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-47.111111111110858, 3.259259259259295)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-48, -0.88888888888891415)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-51.259259259259125, -0.88888888888891415)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-52.740740740740875, -2.0740740740740193)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-52.444444444444343, -3.5555555555555429)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-50.370370370370438, -5.3333333333333144)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-48.296296296296077, -10.666666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-50.074074074074133, -12.740740740740705)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-50.666666666666515, -16.296296296296305)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-45.629629629629562, -23.407407407407391)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-44.148148148148039, -26.370370370370324)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-42.370370370370438, -25.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-37.92592592592564, -29.03703703703701)) + end + + chuginadak: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-195.85185185185173, 74.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-196.14814814814804, 70.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-191.40740740740739, 68.148148148148152)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-186.96296296296282, 69.629629629629676)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-183.7037037037037, 68.740740740740762)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-183.7037037037037, 66.074074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-178.37037037037044, 65.185185185185219)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-176.29629629629608, 63.703703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-172.74074074074088, 63.407407407407391)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-170.96296296296282, 64.888888888888857)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-168.88888888888869, 64.888888888888857)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-166.22222222222194, 68.444444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-167.40740740740739, 73.185185185185219)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-166.22222222222194, 74.666666666666686)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-169.4814814814813, 75.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-167.7037037037037, 80.296296296296305)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-170.66666666666652, 80.592592592592609)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-173.33333333333326, 79.111111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-175.7037037037037, 76.148148148148152)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-178.37037037037044, 77.333333333333371)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-179.85185185185173, 75.259259259259295)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-182.22222222222194, 75.259259259259295)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-183.11111111111086, 72.888888888888857)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-185.18518518518522, 75.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-187.85185185185173, 77.333333333333371)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-188.14814814814804, 79.407407407407391)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-193.7777777777776, 78.814814814814781)) + end + + kagamil: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-170.37037037037044, 42.370370370370381)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-166.22222222222194, 42.370370370370381)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-165.92592592592564, 46.222222222222172)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-164.14814814814804, 47.407407407407391)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-166.81481481481478, 48.888888888888857)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-167.40740740740739, 51.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-167.40740740740739, 53.925925925925981)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-171.85185185185173, 55.111111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-171.85185185185173, 53.333333333333371)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-174.51851851851848, 51.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-173.33333333333326, 46.814814814814781)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-173.33333333333326, 43.555555555555543)) + end + + carlisle: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-207.40740740740739, 63.407407407407391)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-203.85185185185173, 59.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-198.81481481481478, 59.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-195.25925925925912, 61.037037037037067)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-195.25925925925912, 65.777777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-198.81481481481478, 69.037037037037067)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-204.74074074074088, 67.851851851851904)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-204.14814814814804, 65.185185185185219)) + end + + herbert: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-210.37037037037044, 80)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-208.59259259259238, 80.592592592592609)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-207.40740740740739, 79.407407407407391)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-204.14814814814804, 81.185185185185219)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-200.59259259259238, 80.888888888888857)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-200.59259259259238, 86.814814814814781)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-205.33333333333326, 91.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-208.59259259259238, 90.074074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-211.85185185185173, 90.666666666666686)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-212.74074074074088, 88.592592592592609)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-211.85185185185173, 86.814814814814781)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-212.14814814814804, 84.444444444444457)) + end + + yunaska: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-257.18518518518522, 93.333333333333371)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-250.96296296296282, 93.333333333333371)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-246.22222222222194, 97.481481481481467)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-247.11111111111086, 102.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-250.07407407407413, 107.2592592592593)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-254.51851851851848, 108.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-258.07407407407413, 107.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-260.14814814814804, 109.03703703703707)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-261.92592592592564, 109.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-267.85185185185173, 116.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-269.33333333333326, 114.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-272, 114.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-272.59259259259238, 107.8518518518519)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-270.22222222222194, 105.48148148148147)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-270.51851851851848, 102.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-265.7777777777776, 101.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-262.22222222222194, 98.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-264.59259259259238, 96.296296296296305)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-259.5555555555552, 95.111111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-257.7777777777776, 96.296296296296305)) + end + + amukta: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-314.66666666666652, 123.2592592592593)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-307.85185185185173, 117.92592592592598)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-306.96296296296282, 120.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-303.40740740740739, 122.07407407407408)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-303.7037037037037, 126.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-306.96296296296282, 131.8518518518519)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-311.7037037037037, 128.59259259259261)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-313.7777777777776, 130.07407407407408)) + end + + seguam: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-419.85185185185173, 138.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-414.51851851851848, 138.37037037037038)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-412.44444444444434, 141.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-408.29629629629608, 141.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-404.44444444444434, 145.18518518518522)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-403.85185185185173, 147.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-408.29629629629608, 151.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-414.81481481481478, 155.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-417.4814814814813, 154.07407407407408)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-418.96296296296282, 156.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-422.81481481481478, 156.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-426.07407407407413, 160)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-428.44444444444434, 157.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-434.66666666666652, 157.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-435.85185185185173, 152.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-430.81481481481478, 148.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-430.51851851851848, 145.77777777777777)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-426.96296296296282, 142.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-423.40740740740739, 141.92592592592587)) + end + + amilia: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-538.37037037037021, 175.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-533.92592592592564, 177.48148148148147)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-529.7777777777776, 176.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-528.88888888888869, 175.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-524.74074074074065, 173.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-521.7777777777776, 174.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-521.4814814814813, 176.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-516.44444444444434, 173.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-514.66666666666652, 175.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-517.33333333333303, 177.77777777777777)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-515.5555555555552, 179.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-514.37037037037021, 182.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-512.88888888888869, 180.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-510.81481481481478, 178.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-509.92592592592564, 179.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-507.25925925925912, 178.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-505.18518518518522, 180.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-501.92592592592564, 179.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-500.44444444444434, 182.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-496.29629629629608, 181.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-495.70370370370347, 178.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-490.96296296296282, 179.8518518518519)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-489.7777777777776, 182.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-487.70370370370347, 181.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-486.22222222222194, 180.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-482.66666666666652, 180.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-480.59259259259238, 181.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-479.11111111111086, 179.8518518518519)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-476.14814814814804, 181.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-474.66666666666652, 182.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-473.18518518518522, 181.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-468.44444444444434, 180.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-468.44444444444434, 182.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-464.88888888888869, 181.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-466.07407407407391, 183.70370370370364)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-469.62962962962956, 184)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-471.11111111111086, 185.18518518518522)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-476.44444444444434, 185.48148148148147)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-477.62962962962956, 184.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-482.37037037037021, 186.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-487.70370370370347, 184.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-489.4814814814813, 186.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-493.62962962962956, 186.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-494.51851851851848, 188.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-498.07407407407391, 187.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-502.22222222222194, 190.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-503.99999999999977, 186.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-504.59259259259238, 190.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-510.22222222222194, 189.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-510.81481481481478, 187.8518518518519)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-512.88888888888869, 190.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-511.40740740740739, 192.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-513.7777777777776, 192.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-515.25925925925912, 190.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-517.92592592592564, 191.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-519.99999999999977, 189.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-518.22222222222194, 187.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-523.25925925925912, 187.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-522.96296296296282, 189.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-525.92592592592564, 189.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-527.11111111111086, 187.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-528.29629629629608, 188.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-530.37037037037021, 189.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-530.96296296296282, 185.48148148148147)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-534.81481481481478, 188.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-541.62962962962956, 188.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-543.40740740740739, 190.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-547.25925925925912, 188.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-548.74074074074065, 189.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-551.40740740740739, 187.8518518518519)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-554.37037037037021, 186.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-553.4814814814813, 182.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-555.5555555555552, 183.70370370370364)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-557.03703703703695, 180.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-558.51851851851848, 181.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-563.25925925925912, 177.77777777777777)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-563.25925925925912, 176)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-558.51851851851848, 176.59259259259255)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-553.7777777777776, 177.77777777777777)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-549.03703703703695, 175.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-549.92592592592564, 178.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-546.96296296296282, 179.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-544.29629629629608, 176.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-544.29629629629608, 180.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-540.74074074074065, 182.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-540.74074074074065, 179.55555555555554)) + end + + atka: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-583.40740740740739, 140.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-583.70370370370347, 136)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-579.5555555555552, 136.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-577.18518518518522, 134.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-571.5555555555552, 133.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-570.66666666666652, 136.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-564.14814814814804, 138.37037037037038)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-564.14814814814804, 141.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-558.81481481481478, 142.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-560.88888888888869, 145.18518518518522)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-557.33333333333303, 149.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-558.51851851851848, 155.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-562.07407407407391, 156.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-561.18518518518522, 159.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-564.14814814814804, 163.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-571.85185185185173, 163.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-575.11111111111086, 161.77777777777777)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-577.18518518518522, 164.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-575.40740740740739, 168.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-570.96296296296282, 170.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-570.96296296296282, 173.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-568.29629629629608, 173.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-566.51851851851848, 175.70370370370364)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-567.11111111111086, 181.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-569.18518518518522, 179.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-571.5555555555552, 177.48148148148147)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-574.22222222222194, 179.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-578.07407407407391, 177.77777777777777)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-578.37037037037021, 181.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-583.99999999999977, 181.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-583.40740740740739, 178.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-586.66666666666652, 179.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-586.96296296296282, 176.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-591.99999999999977, 181.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-594.07407407407391, 186.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-596.14814814814804, 187.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-595.85185185185173, 191.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-599.40740740740739, 189.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-600.88888888888869, 184)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-602.37037037037021, 184.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-604.74074074074065, 185.48148148148147)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-607.11111111111086, 182.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-605.62962962962956, 187.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-603.5555555555552, 190.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-610.07407407407391, 185.77777777777777)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-608.29629629629608, 189.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-610.07407407407391, 190.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-611.5555555555552, 189.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-613.92592592592564, 189.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-615.11111111111086, 191.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-618.07407407407391, 191.70370370370364)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-621.62962962962956, 187.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-621.92592592592564, 190.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-623.11111111111086, 191.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-621.03703703703695, 193.77777777777777)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-626.66666666666652, 194.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-629.33333333333303, 192.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-634.37037037037021, 192.59259259259255)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-637.92592592592564, 190.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-640.29629629629608, 189.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-641.18518518518522, 191.70370370370364)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-646.51851851851848, 191.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-647.70370370370347, 193.48148148148147)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-651.85185185185173, 192)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-650.96296296296282, 194.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-657.7777777777776, 194.07407407407408)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-658.37037037037021, 196.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-662.22222222222194, 196.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-662.51851851851848, 194.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-668.74074074074065, 194.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-669.33333333333303, 195.8518518518519)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-671.99999999999977, 195.8518518518519)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-671.40740740740739, 194.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-675.25925925925912, 194.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-678.51851851851848, 195.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-679.40740740740739, 194.07407407407408)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-681.18518518518522, 192.59259259259255)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-677.33333333333303, 192.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-674.66666666666652, 189.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-672.88888888888869, 189.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-672.59259259259238, 191.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-669.03703703703695, 191.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-668.44444444444434, 187.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-660.14814814814804, 187.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-661.92592592592564, 190.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-658.96296296296282, 191.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-657.4814814814813, 188.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-653.92592592592564, 190.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-654.81481481481478, 185.48148148148147)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-652.44444444444434, 183.70370370370364)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-650.37037037037021, 184.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-649.4814814814813, 186.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-647.11111111111086, 185.77777777777777)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-646.22222222222194, 183.70370370370364)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-642.66666666666652, 184.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-643.25925925925912, 181.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-640.29629629629608, 178.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-640.29629629629608, 183.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-638.81481481481478, 181.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-636.44444444444434, 180.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-635.85185185185173, 182.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-631.11111111111086, 182.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-630.22222222222194, 184)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-629.03703703703695, 182.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-626.96296296296282, 181.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-626.96296296296282, 178.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-623.70370370370347, 178.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-623.11111111111086, 181.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-618.37037037037021, 180.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-617.7777777777776, 182.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-616.29629629629608, 180.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-612.14814814814804, 181.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-613.62962962962956, 178.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-613.92592592592564, 174.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-610.37037037037021, 176.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-607.70370370370347, 175.70370370370364)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-603.85185185185173, 176.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-605.03703703703695, 174.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-609.4814814814813, 173.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-609.18518518518522, 171.8518518518519)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-610.66666666666652, 170.07407407407408)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-608.88888888888869, 168.59259259259255)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-606.51851851851848, 170.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-604.44444444444434, 170.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-604.14814814814804, 168.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-601.4814814814813, 168.59259259259255)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-599.99999999999977, 169.77777777777777)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-598.51851851851848, 171.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-596.14814814814804, 168.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-598.51851851851848, 167.70370370370364)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-600.59259259259238, 165.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-600.59259259259238, 163.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-596.44444444444434, 163.8518518518519)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-594.07407407407391, 163.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-590.51851851851848, 165.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-587.25925925925912, 165.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-586.07407407407391, 161.77777777777777)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-583.70370370370347, 162.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-583.70370370370347, 160.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-580.44444444444434, 158.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-581.03703703703695, 155.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-586.37037037037021, 154.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-583.11111111111086, 152.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-586.96296296296282, 152.59259259259255)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-588.44444444444434, 149.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-585.4814814814813, 147.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-585.7777777777776, 146.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-590.51851851851848, 149.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-587.85185185185173, 154.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-591.99999999999977, 154.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-593.7777777777776, 152)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-597.92592592592564, 152.59259259259255)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-599.99999999999977, 151.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-600.29629629629608, 148.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-598.22222222222194, 148.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-593.7777777777776, 148.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-589.33333333333303, 147.8518518518519)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-588.44444444444434, 144)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-588.74074074074065, 141.03703703703707)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-585.18518518518522, 139.2592592592593)) + end + + great_sitkin: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-753.7777777777776, 178.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-746.07407407407391, 180.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-743.70370370370347, 184.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-741.03703703703695, 185.48148148148147)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-741.33333333333303, 189.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-737.4814814814813, 190.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-739.85185185185173, 192.59259259259255)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-743.11111111111086, 192)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-745.4814814814813, 195.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-743.99999999999977, 196.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-743.70370370370347, 200.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-748.74074074074065, 200.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-749.92592592592564, 197.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-752.88888888888869, 196.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-757.62962962962956, 196.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-757.03703703703695, 192.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-759.70370370370347, 189.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-759.70370370370347, 184.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-757.03703703703695, 183.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-756.14814814814804, 180.74074074074076)) + end + + little_tanaga: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-760.59259259259238, 214.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-756.44444444444434, 213.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-752.29629629629608, 217.18518518518522)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-753.7777777777776, 219.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-750.51851851851848, 219.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-749.62962962962956, 217.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-747.85185185185173, 217.18518518518522)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-745.7777777777776, 218.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-743.70370370370347, 218.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-741.62962962962956, 223.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-740.44444444444434, 225.18518518518522)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-743.99999999999977, 224.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-743.99999999999977, 221.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-745.4814814814813, 222.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-751.40740740740739, 223.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-748.44444444444434, 225.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-751.40740740740739, 225.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-753.4814814814813, 225.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-753.7777777777776, 221.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-755.25925925925912, 224)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-755.85185185185173, 227.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-754.07407407407391, 230.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-757.92592592592564, 228.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-757.33333333333303, 224.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-759.99999999999977, 224.5925925925925)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-763.25925925925912, 222.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-762.07407407407391, 220.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-759.40740740740739, 218.96296296296293)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-760.88888888888869, 216.2962962962963)) + end + + kagalaska: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-778.96296296296282, 219.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-777.7777777777776, 215.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-773.62962962962956, 215.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-770.96296296296282, 216.5925925925925)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-769.4814814814813, 215.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-765.92592592592564, 215.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-767.40740740740739, 220.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-773.33333333333303, 221.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-769.18518518518522, 221.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-768.88888888888869, 223.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-767.11111111111086, 222.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-765.03703703703695, 223.70370370370358)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-765.03703703703695, 226.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-767.70370370370347, 226.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-765.33333333333303, 228.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-767.11111111111086, 230.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-767.11111111111086, 234.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-770.07407407407391, 231.70370370370358)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-768.88888888888869, 235.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-771.85185185185173, 235.85185185185185)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-774.51851851851848, 234.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-777.18518518518522, 234.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-777.18518518518522, 228.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-778.37037037037021, 227.25925925925924)) + end + + adak: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-797.03703703703684, 197.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-794.37037037037021, 195.8518518518519)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-791.70370370370347, 196.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-790.51851851851848, 200.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-792.59259259259238, 203.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-790.22222222222194, 206.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-790.51851851851848, 209.18518518518522)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-796.44444444444423, 210.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-797.33333333333303, 215.70370370370358)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-800.29629629629608, 217.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-798.22222222222194, 217.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-793.7777777777776, 217.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-797.62962962962945, 220.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-792.88888888888869, 219.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-787.85185185185173, 221.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-788.14814814814804, 218.96296296296293)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-783.70370370370347, 217.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-782.51851851851848, 220.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-780.74074074074065, 218.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-779.25925925925912, 222.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-780.14814814814804, 227.85185185185185)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-779.5555555555552, 231.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-779.5555555555552, 234.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-781.33333333333303, 234.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-783.11111111111086, 236.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-784.29629629629608, 233.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-787.25925925925912, 231.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-789.62962962962956, 234.96296296296293)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-787.5555555555552, 235.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-787.85185185185173, 237.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-789.03703703703695, 240.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-790.51851851851848, 237.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-791.11111111111086, 240)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-794.07407407407391, 240.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-794.96296296296282, 238.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-796.44444444444423, 239.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-796.14814814814804, 241.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-799.40740740740728, 241.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-799.99999999999977, 238.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-800.88888888888857, 242.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-802.96296296296282, 243.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-805.33333333333303, 242.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-807.11111111111086, 244.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-806.81481481481467, 247.70370370370358)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-806.22222222222194, 250.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-810.37037037037021, 249.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-812.14814814814804, 252.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-816.88888888888857, 249.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-815.40740740740728, 247.70370370370358)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-815.40740740740728, 243.85185185185185)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-817.18518518518511, 242.96296296296293)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-815.70370370370347, 240.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-816.29629629629608, 237.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-817.4814814814813, 237.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-817.7777777777776, 240.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-819.85185185185173, 241.18518518518522)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-818.6666666666664, 244.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-821.92592592592564, 247.70370370370358)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-823.11111111111086, 250.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-824.59259259259238, 253.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-827.25925925925901, 256.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-829.33333333333303, 255.70370370370358)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-831.40740740740728, 254.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-831.99999999999977, 250.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-829.62962962962945, 248.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-830.81481481481467, 246.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-828.74074074074065, 243.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-825.4814814814813, 240)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-823.11111111111086, 240.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-820.44444444444423, 236.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-821.62962962962945, 234.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-820.44444444444423, 233.18518518518522)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-816.59259259259238, 234.96296296296293)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-818.37037037037021, 232.5925925925925)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-815.99999999999977, 230.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-819.85185185185173, 230.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-823.40740740740728, 230.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-824.29629629629608, 224.5925925925925)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-820.44444444444423, 224.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-820.44444444444423, 221.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-818.07407407407391, 222.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-817.4814814814813, 226.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-814.81481481481467, 226.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-814.51851851851848, 228.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-810.37037037037021, 227.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-807.70370370370347, 228.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-806.22222222222194, 227.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-807.99999999999977, 224.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-809.7777777777776, 224.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-812.44444444444423, 223.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-812.14814814814804, 218.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-809.7777777777776, 216.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-805.92592592592564, 218.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-807.11111111111086, 214.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-808.88888888888857, 213.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-810.07407407407391, 214.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-811.25925925925901, 212.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-813.33333333333303, 210.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-814.22222222222194, 206.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-812.14814814814804, 202.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-808.59259259259238, 200)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-804.14814814814804, 201.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-799.11111111111086, 202.37037037037032)) + end + + kanaga: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-848.29629629629608, 204.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-843.25925925925901, 204.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-842.07407407407391, 206.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-839.70370370370347, 206.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-836.14814814814804, 210.96296296296293)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-839.11111111111086, 212.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-838.51851851851848, 215.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-837.33333333333303, 217.18518518518522)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-841.4814814814813, 219.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-843.85185185185173, 222.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-843.5555555555552, 226.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-842.07407407407391, 229.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-844.14814814814804, 231.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-844.14814814814804, 238.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-849.4814814814813, 240)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-849.7777777777776, 236.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-851.25925925925901, 240.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-853.92592592592564, 239.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-855.70370370370347, 242.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-859.5555555555552, 242.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-862.22222222222194, 240.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-865.4814814814813, 236.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-872.29629629629608, 237.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-877.62962962962945, 240.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-882.07407407407391, 240.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-888.29629629629608, 240.5925925925925)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-890.07407407407391, 242.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-889.7777777777776, 246.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-893.33333333333303, 246.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-893.92592592592564, 242.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-895.40740740740728, 239.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-893.33333333333303, 237.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-889.7777777777776, 233.18518518518522)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-886.51851851851848, 236.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-882.07407407407391, 236.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-878.81481481481467, 234.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-875.5555555555552, 233.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-874.37037037037021, 232)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-870.81481481481467, 231.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-869.92592592592564, 232.5925925925925)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-868.14814814814804, 230.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-859.5555555555552, 227.85185185185185)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-854.51851851851848, 226.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-851.5555555555552, 222.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-850.6666666666664, 213.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-850.37037037037021, 207.40740740740739)) + end + + tanaga: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-936.29629629629608, 208.5925925925925)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-927.40740740740716, 208.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-922.6666666666664, 209.18518518518522)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-920.88888888888857, 208)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-918.22222222222194, 208.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-917.92592592592564, 211.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-914.96296296296282, 212.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-914.37037037037021, 215.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-917.03703703703684, 216.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-913.7777777777776, 218.96296296296293)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-912.59259259259238, 217.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-909.92592592592564, 218.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-910.51851851851825, 221.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-906.37037037037021, 221.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-906.07407407407391, 219.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-901.62962962962945, 218.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-901.33333333333303, 221.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-896.29629629629608, 220.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-893.03703703703684, 218.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-887.99999999999977, 218.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-887.99999999999977, 221.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-889.7777777777776, 221.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-890.96296296296282, 223.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-898.37037037037021, 223.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-903.40740740740728, 226.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-907.25925925925901, 227.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-904.59259259259238, 229.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-903.99999999999977, 231.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-905.7777777777776, 232.5925925925925)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-908.74074074074065, 234.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-908.14814814814804, 237.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-906.37037037037021, 238.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-910.22222222222194, 243.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-913.18518518518499, 241.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-914.37037037037021, 243.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-916.14814814814804, 246.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-915.25925925925901, 250.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-914.07407407407379, 255.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-919.11111111111086, 253.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-919.11111111111086, 248.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-920.88888888888857, 248)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-923.25925925925901, 249.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-926.51851851851825, 245.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-930.37037037037021, 245.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-933.62962962962945, 244.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-933.33333333333303, 240.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-933.62962962962945, 238.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-925.62962962962945, 239.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-925.03703703703684, 237.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-921.7777777777776, 237.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-919.40740740740716, 236.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-919.11111111111086, 230.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-920.88888888888857, 229.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-922.96296296296282, 228.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-925.03703703703684, 226.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-926.51851851851825, 227.85185185185185)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-928.88888888888857, 228.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-930.96296296296282, 226.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-930.96296296296282, 222.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-934.51851851851825, 222.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-938.96296296296282, 220.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-943.11111111111086, 216.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-944.59259259259238, 213.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-941.62962962962945, 208.8888888888888)) + end + + semisopochnoi: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-1143.4074074074072, 193.77777777777777)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1138.9629629629626, 191.70370370370364)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1133.037037037037, 194.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1129.7777777777776, 199.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1125.333333333333, 200.5925925925925)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1125.333333333333, 204.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1129.7777777777776, 205.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1127.9999999999998, 208.5925925925925)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1134.2222222222219, 212.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1135.9999999999998, 214.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1141.037037037037, 215.70370370370358)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1143.7037037037035, 212.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1146.9629629629626, 212.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1150.2222222222219, 209.18518518518522)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1152.2962962962961, 208.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1153.185185185185, 205.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1151.9999999999998, 202.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1152.8888888888887, 198.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1147.5555555555552, 197.62962962962968)) + end + + amchitka: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-1229.6296296296293, 246.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1224.8888888888887, 245.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1223.9999999999998, 249.18518518518522)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1218.6666666666665, 248)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1204.1481481481478, 252.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1203.5555555555552, 256.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1199.7037037037035, 258.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1198.5185185185182, 256.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1196.1481481481478, 258.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1195.5555555555552, 262.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1190.5185185185182, 264.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1186.6666666666665, 271.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1178.3703703703702, 274.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1177.7777777777774, 278.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1173.037037037037, 282.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1168.2962962962961, 280.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1170.6666666666665, 284.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1165.9259259259256, 283.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1159.1111111111109, 282.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1159.1111111111109, 285.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1152.8888888888887, 288)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1155.2592592592591, 289.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1162.0740740740739, 290.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1162.9629629629626, 288.5925925925925)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1166.2222222222219, 290.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1170.9629629629626, 289.18518518518522)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1174.8148148148146, 292.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1178.6666666666665, 289.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1177.185185185185, 286.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1181.9259259259256, 285.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1182.5185185185182, 282.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1186.9629629629626, 280.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1191.4074074074072, 276.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1196.7407407407404, 268.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1199.4074074074072, 268.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1199.7037037037035, 265.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1202.0740740740739, 263.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1205.037037037037, 263.70370370370358)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1207.7037037037035, 260.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1210.9629629629626, 261.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1212.7407407407404, 258.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1215.7037037037035, 259.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1222.8148148148146, 257.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1228.4444444444441, 252.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1231.7037037037035, 253.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1231.4074074074072, 249.48148148148141)) + end + + kiska: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-1323.8518518518517, 176)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1321.7777777777774, 178.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1317.9259259259256, 178.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1315.8518518518517, 183.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1317.6296296296293, 186.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1319.9999999999998, 186.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1319.7037037037035, 190.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1323.8518518518517, 195.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1327.4074074074072, 195.8518518518519)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1325.333333333333, 198.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1328.5925925925924, 199.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1329.4814814814813, 201.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1326.2222222222219, 203.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1322.3703703703702, 202.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1319.9999999999998, 199.70370370370358)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1318.8148148148146, 202.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1314.0740740740739, 203.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1317.9259259259256, 205.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1321.7777777777774, 204.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1322.6666666666665, 207.70370370370358)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1327.9999999999998, 208.5925925925925)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1330.9629629629626, 207.70370370370358)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1331.5555555555552, 205.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1333.9259259259256, 205.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1334.8148148148146, 206.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1334.2222222222219, 210.96296296296293)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1337.4814814814813, 208)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1336.8888888888887, 204.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1339.2592592592591, 206.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1343.1111111111109, 208)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1346.0740740740739, 211.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1347.8518518518517, 213.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1347.5555555555552, 217.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1348.4444444444441, 221.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1351.4074074074072, 222.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1352.2962962962961, 219.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1356.4444444444441, 214.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1359.1111111111109, 215.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1359.7037037037035, 211.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1352.8888888888887, 207.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1348.1481481481478, 205.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1347.5555555555552, 200.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1339.5555555555552, 198.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1334.5185185185182, 197.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1332.7407407407404, 188.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1329.4814814814813, 184.59259259259255)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1328.8888888888887, 180.74074074074076)) + end + + agattu: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-1687.9999999999995, 119.7037037037037)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1685.0370370370367, 122.07407407407408)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1680.5925925925922, 119.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1670.8148148148146, 120.59259259259261)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1672.5925925925922, 123.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1679.1111111111109, 127.7037037037037)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1677.333333333333, 133.92592592592598)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1675.5555555555552, 144)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1680.5925925925922, 142.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1683.8518518518515, 144.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1685.0370370370367, 141.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1687.7037037037035, 140.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1687.1111111111109, 137.18518518518522)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1688.8888888888885, 139.2592592592593)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1689.7777777777774, 137.18518518518522)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1691.2592592592589, 137.48148148148147)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1694.2222222222219, 139.2592592592593)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1696.8888888888885, 140.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1700.7407407407404, 140.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1705.1851851851848, 138.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1706.0740740740737, 136.59259259259261)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1711.4074074074072, 136.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1709.0370370370367, 131.8518518518519)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1704.5925925925922, 130.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1702.5185185185182, 127.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1700.1481481481478, 130.07407407407408)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1696.8888888888885, 129.77777777777777)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1693.6296296296293, 126.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1693.0370370370367, 124.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1689.4814814814811, 125.03703703703707)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1689.1851851851848, 122.07407407407408)) + end + +end diff --git a/jj_vitp/Interface/widgets/other_location_widgets/aleutians_widget.e b/jj_vitp/Interface/widgets/other_location_widgets/aleutians_widget.e new file mode 100644 index 0000000..c7967ac --- /dev/null +++ b/jj_vitp/Interface/widgets/other_location_widgets/aleutians_widget.e @@ -0,0 +1,1237 @@ +note + description: "[ + Widget representing the brown land of the Aleutian Islands + ]" + author: "Jimmy J. Johnson" + +class + ALEUTIANS_WIDGET + +inherit + + LOCATION_WIDGET + redefine + build_widgets, + build_land + end + +create + default_create + +feature {NONE} -- Initialization + + build_widgets + -- Add widgets to Current + do + Precursor {LOCATION_WIDGET} -- Calls `build_land' + -- Remove `text_widget' + prune_all (text_widget) + -- Make adjustments +-- scale_widget (land, 0.07) + scale_widget (Current, 0.07) + rotate_widget (land, 16.0) + set_point_position (0, 0) + translate_widget (Current, 672, 38) + end + + build_land + -- Add `land' to Current and create the polygons. + do + Precursor {LOCATION_WIDGET} + -- Put polygons representing land into the `land' + land.extend (unimak) + land.extend (umnak) + land.extend (chuginadak) + land.extend (kagamil) + land.extend (carlisle) + land.extend (herbert) + land.extend (yunaska) + land.extend (amukta) + land.extend (seguam) + land.extend (amilia) + land.extend (atka) + land.extend (great_sitkin) + land.extend (little_tanaga) + land.extend (kagalaska) + land.extend (adak) + land.extend (kanaga) + land.extend (tanaga) + land.extend (semisopochnoi) + land.extend (amchitka) + land.extend (kiska) + land.extend (agattu) + end + +feature {none} -- Implementation + + unimak: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (380.74074074074042, -269.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (381.62962962962956, -266.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (385.4814814814813, -268.4444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (389.03703703703695, -266.96296296296288)) + Result.extend_point (create {EV_COORDINATE}.make_precise (389.03703703703695, -269.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (394.66666666666652, -271.11111111111103)) + Result.extend_point (create {EV_COORDINATE}.make_precise (393.18518518518476, -269.62962962962956)) + Result.extend_point (create {EV_COORDINATE}.make_precise (393.18518518518476, -266.96296296296288)) + Result.extend_point (create {EV_COORDINATE}.make_precise (396.74074074074042, -262.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (401.77777777777783, -256.5925925925925)) + Result.extend_point (create {EV_COORDINATE}.make_precise (404.14814814814827, -249.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (405.92592592592564, -247.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (404.4444444444448, -242.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (406.81481481481478, -236.1481481481481)) + Result.extend_point (create {EV_COORDINATE}.make_precise (407.70370370370392, -229.33333333333329)) + Result.extend_point (create {EV_COORDINATE}.make_precise (411.55555555555566, -223.70370370370364)) + Result.extend_point (create {EV_COORDINATE}.make_precise (421.03703703703695, -224.59259259259255)) + Result.extend_point (create {EV_COORDINATE}.make_precise (427.25925925925912, -226.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (432.88888888888914, -218.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (432.59259259259261, -214.81481481481475)) + Result.extend_point (create {EV_COORDINATE}.make_precise (437.33333333333348, -213.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (437.33333333333348, -211.25925925925921)) + Result.extend_point (create {EV_COORDINATE}.make_precise (432.88888888888914, -210.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (427.85185185185173, -211.55555555555551)) + Result.extend_point (create {EV_COORDINATE}.make_precise (430.81481481481478, -214.81481481481475)) + Result.extend_point (create {EV_COORDINATE}.make_precise (426.37037037037044, -215.11111111111106)) + Result.extend_point (create {EV_COORDINATE}.make_precise (422.81481481481478, -215.11111111111106)) + Result.extend_point (create {EV_COORDINATE}.make_precise (421.62962962962956, -212.7407407407407)) + Result.extend_point (create {EV_COORDINATE}.make_precise (420.4444444444448, -216.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (418.07407407407391, -217.18518518518513)) + Result.extend_point (create {EV_COORDINATE}.make_precise (416.29629629629608, -215.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (412.14814814814827, -218.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (412.74074074074042, -222.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (408.29629629629608, -223.40740740740736)) + Result.extend_point (create {EV_COORDINATE}.make_precise (405.92592592592564, -221.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (403.25925925925912, -218.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (404.74074074074042, -216.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (403.85185185185173, -209.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (402.07407407407391, -207.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (396.14814814814827, -207.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (396.14814814814827, -206.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (391.11111111111131, -204.4444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (388.4444444444448, -206.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (389.62962962962956, -202.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (381.92592592592564, -203.85185185185179)) + Result.extend_point (create {EV_COORDINATE}.make_precise (373.33333333333348, -205.33333333333329)) + Result.extend_point (create {EV_COORDINATE}.make_precise (362.07407407407391, -205.62962962962956)) + Result.extend_point (create {EV_COORDINATE}.make_precise (350.22222222222217, -204.7407407407407)) + Result.extend_point (create {EV_COORDINATE}.make_precise (341.62962962962956, -202.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (332.4444444444448, -199.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (325.92592592592564, -194.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (321.18518518518476, -190.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (319.40740740740739, -186.96296296296293)) + Result.extend_point (create {EV_COORDINATE}.make_precise (320.88888888888914, -185.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (320, -183.70370370370364)) + Result.extend_point (create {EV_COORDINATE}.make_precise (320, -181.03703703703698)) + Result.extend_point (create {EV_COORDINATE}.make_precise (317.92592592592564, -178.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (314.96296296296305, -175.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (312.88888888888914, -173.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (309.92592592592564, -172.1481481481481)) + Result.extend_point (create {EV_COORDINATE}.make_precise (306.07407407407391, -170.96296296296293)) + Result.extend_point (create {EV_COORDINATE}.make_precise (301.92592592592564, -170.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (299.85185185185173, -169.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (296.29629629629608, -169.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (295.40740740740739, -167.70370370370364)) + Result.extend_point (create {EV_COORDINATE}.make_precise (293.33333333333348, -167.70370370370364)) + Result.extend_point (create {EV_COORDINATE}.make_precise (290.96296296296305, -166.81481481481475)) + Result.extend_point (create {EV_COORDINATE}.make_precise (289.18518518518476, -167.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (286.22222222222217, -168.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (284.14814814814827, -167.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (281.77777777777783, -167.40740740740736)) + Result.extend_point (create {EV_COORDINATE}.make_precise (280, -168.59259259259255)) + Result.extend_point (create {EV_COORDINATE}.make_precise (277.03703703703695, -169.18518518518516)) + Result.extend_point (create {EV_COORDINATE}.make_precise (276.4444444444448, -170.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (274.07407407407391, -170.96296296296293)) + Result.extend_point (create {EV_COORDINATE}.make_precise (273.4814814814813, -173.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (271.11111111111131, -175.11111111111106)) + Result.extend_point (create {EV_COORDINATE}.make_precise (271.40740740740739, -178.96296296296293)) + Result.extend_point (create {EV_COORDINATE}.make_precise (269.62962962962956, -179.85185185185182)) + Result.extend_point (create {EV_COORDINATE}.make_precise (268.14814814814827, -180.4444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (268.14814814814827, -182.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (268.4444444444448, -185.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (265.4814814814813, -186.96296296296293)) + Result.extend_point (create {EV_COORDINATE}.make_precise (265.4814814814813, -194.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (263.70370370370392, -195.55555555555551)) + Result.extend_point (create {EV_COORDINATE}.make_precise (266.66666666666652, -200.29629629629625)) + Result.extend_point (create {EV_COORDINATE}.make_precise (269.92592592592564, -199.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (273.18518518518476, -203.55555555555551)) + Result.extend_point (create {EV_COORDINATE}.make_precise (272.88888888888914, -205.03703703703698)) + Result.extend_point (create {EV_COORDINATE}.make_precise (274.37037037037044, -204.1481481481481)) + Result.extend_point (create {EV_COORDINATE}.make_precise (277.62962962962956, -206.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (280.59259259259261, -205.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (285.33333333333348, -209.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (290.66666666666652, -218.96296296296291)) + Result.extend_point (create {EV_COORDINATE}.make_precise (293.33333333333348, -224.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (294.51851851851825, -227.25925925925921)) + Result.extend_point (create {EV_COORDINATE}.make_precise (294.22222222222217, -229.03703703703698)) + Result.extend_point (create {EV_COORDINATE}.make_precise (297.77777777777783, -229.33333333333329)) + Result.extend_point (create {EV_COORDINATE}.make_precise (298.96296296296305, -228.74074074074068)) + Result.extend_point (create {EV_COORDINATE}.make_precise (298.96296296296305, -231.40740740740733)) + Result.extend_point (create {EV_COORDINATE}.make_precise (296.59259259259261, -231.40740740740733)) + Result.extend_point (create {EV_COORDINATE}.make_precise (298.66666666666652, -236.74074074074068)) + Result.extend_point (create {EV_COORDINATE}.make_precise (300.14814814814827, -238.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (299.25925925925912, -243.85185185185179)) + Result.extend_point (create {EV_COORDINATE}.make_precise (303.11111111111131, -245.33333333333329)) + Result.extend_point (create {EV_COORDINATE}.make_precise (303.40740740740739, -247.70370370370364)) + Result.extend_point (create {EV_COORDINATE}.make_precise (307.25925925925912, -250.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (311.11111111111131, -253.03703703703698)) + Result.extend_point (create {EV_COORDINATE}.make_precise (317.03703703703695, -249.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (318.81481481481478, -246.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (322.37037037037044, -245.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (324.4444444444448, -247.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (326.81481481481478, -245.62962962962956)) + Result.extend_point (create {EV_COORDINATE}.make_precise (329.18518518518476, -246.81481481481475)) + Result.extend_point (create {EV_COORDINATE}.make_precise (330.66666666666652, -245.03703703703698)) + Result.extend_point (create {EV_COORDINATE}.make_precise (330.66666666666652, -248.29629629629625)) + Result.extend_point (create {EV_COORDINATE}.make_precise (328.88888888888914, -249.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (331.25925925925912, -251.85185185185179)) + Result.extend_point (create {EV_COORDINATE}.make_precise (333.33333333333348, -250.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (334.81481481481478, -252.74074074074068)) + Result.extend_point (create {EV_COORDINATE}.make_precise (333.92592592592564, -254.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (335.70370370370392, -256.29629629629625)) + Result.extend_point (create {EV_COORDINATE}.make_precise (338.96296296296305, -258.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (341.03703703703695, -256.5925925925925)) + Result.extend_point (create {EV_COORDINATE}.make_precise (345.4814814814813, -256.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (350.22222222222217, -259.55555555555549)) + Result.extend_point (create {EV_COORDINATE}.make_precise (354.37037037037044, -262.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (360.29629629629608, -269.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (363.25925925925912, -268.4444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (366.81481481481478, -269.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (369.77777777777783, -271.70370370370364)) + Result.extend_point (create {EV_COORDINATE}.make_precise (375.11111111111131, -269.92592592592587)) + end + + umnak: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-34.074074074074133, -32.888888888888914)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-29.629629629629562, -35.851851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-27.555555555555202, -34.962962962962933)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-21.333333333333258, -37.629629629629619)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-20.444444444444343, -36.148148148148096)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-16.888888888888687, -37.333333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-14.222222222221944, -38.814814814814781)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-10.96296296296282, -37.925925925925867)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-10.666666666666515, -34.666666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1.4814814814812962, -31.111111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (5.925925925925867, -31.703703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (6.518518518518249, -27.851851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (2.0740740740739056, -21.925925925925867)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-0.88888888888868678, -19.259259259259238)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1.1851851851849915, -16)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-0.29629629629607734, -10.666666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-4.1481481481480387, -7.4074074074073906)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-11.555555555555202, -3.2592592592592382)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-13.92592592592564, -0.88888888888891415)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-19.851851851851734, 2.6666666666666856)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-23.111111111110858, 4.7407407407407618)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-33.185185185185219, 8.2962962962963047)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-40.296296296296077, 12.740740740740762)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-43.851851851851734, 17.185185185185219)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-42.96296296296282, 18.666666666666686)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-44.444444444444343, 19.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-44.444444444444343, 23.703703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-47.703703703703695, 21.629629629629676)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-46.814814814814781, 27.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-50.074074074074133, 29.629629629629676)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-53.92592592592564, 34.074074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-56, 36.148148148148152)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-55.407407407407391, 38.814814814814781)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-58.666666666666515, 41.777777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-61.037037037036953, 40.296296296296305)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-61.333333333333258, 42.370370370370381)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-66.074074074074133, 42.370370370370381)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-69.92592592592564, 45.925925925925981)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-72.592592592592382, 51.259259259259295)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-74.96296296296282, 51.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-75.555555555555202, 54.814814814814781)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-77.629629629629562, 52.148148148148152)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-78.518518518518476, 54.814814814814781)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-80.592592592592382, 55.407407407407391)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-83.259259259259125, 54.814814814814781)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-85.333333333333258, 56.888888888888857)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-83.259259259259125, 58.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-83.555555555555202, 61.925925925925981)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-87.703703703703695, 58.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-92.148148148148039, 61.333333333333371)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-98.074074074074133, 65.481481481481467)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-103.11111111111086, 68.740740740740762)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-106.37037037037044, 68.148148148148152)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-108.44444444444434, 70.814814814814781)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-110.81481481481478, 72.888888888888857)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-113.7777777777776, 74.074074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-112.88888888888869, 72)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-109.33333333333326, 69.629629629629676)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-110.51851851851848, 67.851851851851904)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-102.22222222222194, 65.777777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-100.14814814814804, 62.222222222222172)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-101.62962962962956, 60.740740740740762)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-100.74074074074088, 58.074074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-97.185185185185219, 57.481481481481467)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-92.740740740740875, 56.296296296296305)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-92.148148148148039, 53.333333333333371)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-91.555555555555202, 49.481481481481467)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-93.629629629629562, 49.185185185185219)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-93.037037037036953, 44.740740740740762)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-89.185185185185219, 44.444444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-85.333333333333258, 40.888888888888857)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-83.851851851851734, 36.444444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-83.851851851851734, 33.481481481481467)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-86.518518518518476, 30.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-86.814814814814781, 25.481481481481524)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-83.851851851851734, 22.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-83.555555555555202, 18.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-80.296296296296077, 18.074074074074133)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-75.851851851851734, 15.111111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-76.740740740740875, 13.629629629629676)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-73.481481481481296, 13.037037037037067)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-70.222222222221944, 8.5925925925926094)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-69.629629629629562, 6.2222222222222285)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-65.185185185185219, 8.8888888888889142)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-60.740740740740875, 9.4814814814815236)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-57.777777777777601, 6.814814814814838)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-56, 6.2222222222222285)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-53.333333333333258, 8.8888888888889142)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-51.555555555555202, 8.5925925925926094)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-48.888888888888687, 8.2962962962963047)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-46.518518518518476, 9.4814814814815236)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-44.740740740740875, 4.7407407407407618)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-45.333333333333258, 3.259259259259295)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-47.111111111110858, 3.259259259259295)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-48, -0.88888888888891415)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-51.259259259259125, -0.88888888888891415)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-52.740740740740875, -2.0740740740740193)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-52.444444444444343, -3.5555555555555429)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-50.370370370370438, -5.3333333333333144)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-48.296296296296077, -10.666666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-50.074074074074133, -12.740740740740705)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-50.666666666666515, -16.296296296296305)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-45.629629629629562, -23.407407407407391)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-44.148148148148039, -26.370370370370324)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-42.370370370370438, -25.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-37.92592592592564, -29.03703703703701)) + end + + chuginadak: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-195.85185185185173, 74.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-196.14814814814804, 70.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-191.40740740740739, 68.148148148148152)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-186.96296296296282, 69.629629629629676)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-183.7037037037037, 68.740740740740762)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-183.7037037037037, 66.074074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-178.37037037037044, 65.185185185185219)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-176.29629629629608, 63.703703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-172.74074074074088, 63.407407407407391)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-170.96296296296282, 64.888888888888857)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-168.88888888888869, 64.888888888888857)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-166.22222222222194, 68.444444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-167.40740740740739, 73.185185185185219)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-166.22222222222194, 74.666666666666686)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-169.4814814814813, 75.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-167.7037037037037, 80.296296296296305)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-170.66666666666652, 80.592592592592609)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-173.33333333333326, 79.111111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-175.7037037037037, 76.148148148148152)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-178.37037037037044, 77.333333333333371)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-179.85185185185173, 75.259259259259295)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-182.22222222222194, 75.259259259259295)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-183.11111111111086, 72.888888888888857)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-185.18518518518522, 75.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-187.85185185185173, 77.333333333333371)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-188.14814814814804, 79.407407407407391)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-193.7777777777776, 78.814814814814781)) + end + + kagamil: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-170.37037037037044, 42.370370370370381)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-166.22222222222194, 42.370370370370381)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-165.92592592592564, 46.222222222222172)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-164.14814814814804, 47.407407407407391)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-166.81481481481478, 48.888888888888857)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-167.40740740740739, 51.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-167.40740740740739, 53.925925925925981)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-171.85185185185173, 55.111111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-171.85185185185173, 53.333333333333371)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-174.51851851851848, 51.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-173.33333333333326, 46.814814814814781)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-173.33333333333326, 43.555555555555543)) + end + + carlisle: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-207.40740740740739, 63.407407407407391)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-203.85185185185173, 59.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-198.81481481481478, 59.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-195.25925925925912, 61.037037037037067)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-195.25925925925912, 65.777777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-198.81481481481478, 69.037037037037067)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-204.74074074074088, 67.851851851851904)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-204.14814814814804, 65.185185185185219)) + end + + herbert: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-210.37037037037044, 80)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-208.59259259259238, 80.592592592592609)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-207.40740740740739, 79.407407407407391)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-204.14814814814804, 81.185185185185219)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-200.59259259259238, 80.888888888888857)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-200.59259259259238, 86.814814814814781)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-205.33333333333326, 91.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-208.59259259259238, 90.074074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-211.85185185185173, 90.666666666666686)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-212.74074074074088, 88.592592592592609)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-211.85185185185173, 86.814814814814781)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-212.14814814814804, 84.444444444444457)) + end + + yunaska: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-257.18518518518522, 93.333333333333371)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-250.96296296296282, 93.333333333333371)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-246.22222222222194, 97.481481481481467)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-247.11111111111086, 102.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-250.07407407407413, 107.2592592592593)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-254.51851851851848, 108.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-258.07407407407413, 107.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-260.14814814814804, 109.03703703703707)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-261.92592592592564, 109.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-267.85185185185173, 116.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-269.33333333333326, 114.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-272, 114.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-272.59259259259238, 107.8518518518519)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-270.22222222222194, 105.48148148148147)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-270.51851851851848, 102.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-265.7777777777776, 101.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-262.22222222222194, 98.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-264.59259259259238, 96.296296296296305)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-259.5555555555552, 95.111111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-257.7777777777776, 96.296296296296305)) + end + + amukta: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-314.66666666666652, 123.2592592592593)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-307.85185185185173, 117.92592592592598)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-306.96296296296282, 120.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-303.40740740740739, 122.07407407407408)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-303.7037037037037, 126.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-306.96296296296282, 131.8518518518519)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-311.7037037037037, 128.59259259259261)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-313.7777777777776, 130.07407407407408)) + end + + seguam: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-419.85185185185173, 138.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-414.51851851851848, 138.37037037037038)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-412.44444444444434, 141.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-408.29629629629608, 141.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-404.44444444444434, 145.18518518518522)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-403.85185185185173, 147.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-408.29629629629608, 151.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-414.81481481481478, 155.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-417.4814814814813, 154.07407407407408)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-418.96296296296282, 156.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-422.81481481481478, 156.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-426.07407407407413, 160)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-428.44444444444434, 157.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-434.66666666666652, 157.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-435.85185185185173, 152.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-430.81481481481478, 148.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-430.51851851851848, 145.77777777777777)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-426.96296296296282, 142.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-423.40740740740739, 141.92592592592587)) + end + + amilia: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-538.37037037037021, 175.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-533.92592592592564, 177.48148148148147)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-529.7777777777776, 176.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-528.88888888888869, 175.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-524.74074074074065, 173.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-521.7777777777776, 174.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-521.4814814814813, 176.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-516.44444444444434, 173.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-514.66666666666652, 175.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-517.33333333333303, 177.77777777777777)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-515.5555555555552, 179.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-514.37037037037021, 182.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-512.88888888888869, 180.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-510.81481481481478, 178.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-509.92592592592564, 179.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-507.25925925925912, 178.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-505.18518518518522, 180.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-501.92592592592564, 179.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-500.44444444444434, 182.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-496.29629629629608, 181.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-495.70370370370347, 178.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-490.96296296296282, 179.8518518518519)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-489.7777777777776, 182.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-487.70370370370347, 181.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-486.22222222222194, 180.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-482.66666666666652, 180.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-480.59259259259238, 181.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-479.11111111111086, 179.8518518518519)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-476.14814814814804, 181.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-474.66666666666652, 182.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-473.18518518518522, 181.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-468.44444444444434, 180.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-468.44444444444434, 182.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-464.88888888888869, 181.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-466.07407407407391, 183.70370370370364)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-469.62962962962956, 184)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-471.11111111111086, 185.18518518518522)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-476.44444444444434, 185.48148148148147)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-477.62962962962956, 184.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-482.37037037037021, 186.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-487.70370370370347, 184.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-489.4814814814813, 186.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-493.62962962962956, 186.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-494.51851851851848, 188.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-498.07407407407391, 187.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-502.22222222222194, 190.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-503.99999999999977, 186.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-504.59259259259238, 190.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-510.22222222222194, 189.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-510.81481481481478, 187.8518518518519)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-512.88888888888869, 190.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-511.40740740740739, 192.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-513.7777777777776, 192.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-515.25925925925912, 190.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-517.92592592592564, 191.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-519.99999999999977, 189.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-518.22222222222194, 187.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-523.25925925925912, 187.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-522.96296296296282, 189.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-525.92592592592564, 189.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-527.11111111111086, 187.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-528.29629629629608, 188.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-530.37037037037021, 189.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-530.96296296296282, 185.48148148148147)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-534.81481481481478, 188.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-541.62962962962956, 188.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-543.40740740740739, 190.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-547.25925925925912, 188.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-548.74074074074065, 189.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-551.40740740740739, 187.8518518518519)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-554.37037037037021, 186.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-553.4814814814813, 182.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-555.5555555555552, 183.70370370370364)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-557.03703703703695, 180.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-558.51851851851848, 181.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-563.25925925925912, 177.77777777777777)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-563.25925925925912, 176)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-558.51851851851848, 176.59259259259255)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-553.7777777777776, 177.77777777777777)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-549.03703703703695, 175.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-549.92592592592564, 178.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-546.96296296296282, 179.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-544.29629629629608, 176.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-544.29629629629608, 180.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-540.74074074074065, 182.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-540.74074074074065, 179.55555555555554)) + end + + atka: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-583.40740740740739, 140.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-583.70370370370347, 136)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-579.5555555555552, 136.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-577.18518518518522, 134.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-571.5555555555552, 133.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-570.66666666666652, 136.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-564.14814814814804, 138.37037037037038)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-564.14814814814804, 141.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-558.81481481481478, 142.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-560.88888888888869, 145.18518518518522)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-557.33333333333303, 149.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-558.51851851851848, 155.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-562.07407407407391, 156.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-561.18518518518522, 159.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-564.14814814814804, 163.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-571.85185185185173, 163.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-575.11111111111086, 161.77777777777777)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-577.18518518518522, 164.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-575.40740740740739, 168.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-570.96296296296282, 170.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-570.96296296296282, 173.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-568.29629629629608, 173.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-566.51851851851848, 175.70370370370364)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-567.11111111111086, 181.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-569.18518518518522, 179.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-571.5555555555552, 177.48148148148147)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-574.22222222222194, 179.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-578.07407407407391, 177.77777777777777)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-578.37037037037021, 181.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-583.99999999999977, 181.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-583.40740740740739, 178.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-586.66666666666652, 179.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-586.96296296296282, 176.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-591.99999999999977, 181.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-594.07407407407391, 186.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-596.14814814814804, 187.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-595.85185185185173, 191.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-599.40740740740739, 189.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-600.88888888888869, 184)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-602.37037037037021, 184.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-604.74074074074065, 185.48148148148147)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-607.11111111111086, 182.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-605.62962962962956, 187.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-603.5555555555552, 190.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-610.07407407407391, 185.77777777777777)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-608.29629629629608, 189.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-610.07407407407391, 190.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-611.5555555555552, 189.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-613.92592592592564, 189.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-615.11111111111086, 191.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-618.07407407407391, 191.70370370370364)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-621.62962962962956, 187.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-621.92592592592564, 190.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-623.11111111111086, 191.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-621.03703703703695, 193.77777777777777)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-626.66666666666652, 194.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-629.33333333333303, 192.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-634.37037037037021, 192.59259259259255)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-637.92592592592564, 190.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-640.29629629629608, 189.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-641.18518518518522, 191.70370370370364)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-646.51851851851848, 191.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-647.70370370370347, 193.48148148148147)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-651.85185185185173, 192)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-650.96296296296282, 194.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-657.7777777777776, 194.07407407407408)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-658.37037037037021, 196.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-662.22222222222194, 196.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-662.51851851851848, 194.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-668.74074074074065, 194.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-669.33333333333303, 195.8518518518519)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-671.99999999999977, 195.8518518518519)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-671.40740740740739, 194.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-675.25925925925912, 194.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-678.51851851851848, 195.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-679.40740740740739, 194.07407407407408)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-681.18518518518522, 192.59259259259255)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-677.33333333333303, 192.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-674.66666666666652, 189.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-672.88888888888869, 189.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-672.59259259259238, 191.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-669.03703703703695, 191.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-668.44444444444434, 187.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-660.14814814814804, 187.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-661.92592592592564, 190.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-658.96296296296282, 191.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-657.4814814814813, 188.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-653.92592592592564, 190.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-654.81481481481478, 185.48148148148147)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-652.44444444444434, 183.70370370370364)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-650.37037037037021, 184.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-649.4814814814813, 186.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-647.11111111111086, 185.77777777777777)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-646.22222222222194, 183.70370370370364)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-642.66666666666652, 184.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-643.25925925925912, 181.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-640.29629629629608, 178.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-640.29629629629608, 183.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-638.81481481481478, 181.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-636.44444444444434, 180.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-635.85185185185173, 182.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-631.11111111111086, 182.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-630.22222222222194, 184)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-629.03703703703695, 182.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-626.96296296296282, 181.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-626.96296296296282, 178.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-623.70370370370347, 178.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-623.11111111111086, 181.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-618.37037037037021, 180.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-617.7777777777776, 182.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-616.29629629629608, 180.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-612.14814814814804, 181.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-613.62962962962956, 178.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-613.92592592592564, 174.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-610.37037037037021, 176.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-607.70370370370347, 175.70370370370364)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-603.85185185185173, 176.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-605.03703703703695, 174.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-609.4814814814813, 173.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-609.18518518518522, 171.8518518518519)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-610.66666666666652, 170.07407407407408)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-608.88888888888869, 168.59259259259255)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-606.51851851851848, 170.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-604.44444444444434, 170.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-604.14814814814804, 168.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-601.4814814814813, 168.59259259259255)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-599.99999999999977, 169.77777777777777)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-598.51851851851848, 171.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-596.14814814814804, 168.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-598.51851851851848, 167.70370370370364)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-600.59259259259238, 165.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-600.59259259259238, 163.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-596.44444444444434, 163.8518518518519)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-594.07407407407391, 163.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-590.51851851851848, 165.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-587.25925925925912, 165.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-586.07407407407391, 161.77777777777777)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-583.70370370370347, 162.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-583.70370370370347, 160.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-580.44444444444434, 158.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-581.03703703703695, 155.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-586.37037037037021, 154.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-583.11111111111086, 152.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-586.96296296296282, 152.59259259259255)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-588.44444444444434, 149.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-585.4814814814813, 147.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-585.7777777777776, 146.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-590.51851851851848, 149.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-587.85185185185173, 154.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-591.99999999999977, 154.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-593.7777777777776, 152)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-597.92592592592564, 152.59259259259255)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-599.99999999999977, 151.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-600.29629629629608, 148.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-598.22222222222194, 148.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-593.7777777777776, 148.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-589.33333333333303, 147.8518518518519)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-588.44444444444434, 144)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-588.74074074074065, 141.03703703703707)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-585.18518518518522, 139.2592592592593)) + end + + great_sitkin: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-753.7777777777776, 178.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-746.07407407407391, 180.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-743.70370370370347, 184.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-741.03703703703695, 185.48148148148147)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-741.33333333333303, 189.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-737.4814814814813, 190.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-739.85185185185173, 192.59259259259255)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-743.11111111111086, 192)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-745.4814814814813, 195.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-743.99999999999977, 196.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-743.70370370370347, 200.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-748.74074074074065, 200.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-749.92592592592564, 197.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-752.88888888888869, 196.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-757.62962962962956, 196.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-757.03703703703695, 192.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-759.70370370370347, 189.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-759.70370370370347, 184.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-757.03703703703695, 183.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-756.14814814814804, 180.74074074074076)) + end + + little_tanaga: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-760.59259259259238, 214.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-756.44444444444434, 213.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-752.29629629629608, 217.18518518518522)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-753.7777777777776, 219.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-750.51851851851848, 219.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-749.62962962962956, 217.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-747.85185185185173, 217.18518518518522)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-745.7777777777776, 218.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-743.70370370370347, 218.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-741.62962962962956, 223.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-740.44444444444434, 225.18518518518522)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-743.99999999999977, 224.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-743.99999999999977, 221.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-745.4814814814813, 222.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-751.40740740740739, 223.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-748.44444444444434, 225.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-751.40740740740739, 225.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-753.4814814814813, 225.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-753.7777777777776, 221.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-755.25925925925912, 224)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-755.85185185185173, 227.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-754.07407407407391, 230.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-757.92592592592564, 228.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-757.33333333333303, 224.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-759.99999999999977, 224.5925925925925)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-763.25925925925912, 222.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-762.07407407407391, 220.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-759.40740740740739, 218.96296296296293)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-760.88888888888869, 216.2962962962963)) + end + + kagalaska: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-778.96296296296282, 219.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-777.7777777777776, 215.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-773.62962962962956, 215.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-770.96296296296282, 216.5925925925925)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-769.4814814814813, 215.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-765.92592592592564, 215.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-767.40740740740739, 220.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-773.33333333333303, 221.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-769.18518518518522, 221.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-768.88888888888869, 223.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-767.11111111111086, 222.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-765.03703703703695, 223.70370370370358)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-765.03703703703695, 226.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-767.70370370370347, 226.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-765.33333333333303, 228.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-767.11111111111086, 230.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-767.11111111111086, 234.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-770.07407407407391, 231.70370370370358)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-768.88888888888869, 235.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-771.85185185185173, 235.85185185185185)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-774.51851851851848, 234.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-777.18518518518522, 234.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-777.18518518518522, 228.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-778.37037037037021, 227.25925925925924)) + end + + adak: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-797.03703703703684, 197.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-794.37037037037021, 195.8518518518519)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-791.70370370370347, 196.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-790.51851851851848, 200.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-792.59259259259238, 203.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-790.22222222222194, 206.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-790.51851851851848, 209.18518518518522)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-796.44444444444423, 210.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-797.33333333333303, 215.70370370370358)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-800.29629629629608, 217.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-798.22222222222194, 217.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-793.7777777777776, 217.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-797.62962962962945, 220.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-792.88888888888869, 219.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-787.85185185185173, 221.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-788.14814814814804, 218.96296296296293)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-783.70370370370347, 217.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-782.51851851851848, 220.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-780.74074074074065, 218.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-779.25925925925912, 222.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-780.14814814814804, 227.85185185185185)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-779.5555555555552, 231.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-779.5555555555552, 234.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-781.33333333333303, 234.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-783.11111111111086, 236.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-784.29629629629608, 233.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-787.25925925925912, 231.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-789.62962962962956, 234.96296296296293)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-787.5555555555552, 235.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-787.85185185185173, 237.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-789.03703703703695, 240.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-790.51851851851848, 237.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-791.11111111111086, 240)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-794.07407407407391, 240.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-794.96296296296282, 238.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-796.44444444444423, 239.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-796.14814814814804, 241.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-799.40740740740728, 241.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-799.99999999999977, 238.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-800.88888888888857, 242.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-802.96296296296282, 243.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-805.33333333333303, 242.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-807.11111111111086, 244.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-806.81481481481467, 247.70370370370358)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-806.22222222222194, 250.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-810.37037037037021, 249.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-812.14814814814804, 252.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-816.88888888888857, 249.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-815.40740740740728, 247.70370370370358)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-815.40740740740728, 243.85185185185185)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-817.18518518518511, 242.96296296296293)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-815.70370370370347, 240.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-816.29629629629608, 237.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-817.4814814814813, 237.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-817.7777777777776, 240.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-819.85185185185173, 241.18518518518522)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-818.6666666666664, 244.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-821.92592592592564, 247.70370370370358)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-823.11111111111086, 250.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-824.59259259259238, 253.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-827.25925925925901, 256.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-829.33333333333303, 255.70370370370358)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-831.40740740740728, 254.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-831.99999999999977, 250.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-829.62962962962945, 248.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-830.81481481481467, 246.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-828.74074074074065, 243.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-825.4814814814813, 240)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-823.11111111111086, 240.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-820.44444444444423, 236.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-821.62962962962945, 234.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-820.44444444444423, 233.18518518518522)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-816.59259259259238, 234.96296296296293)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-818.37037037037021, 232.5925925925925)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-815.99999999999977, 230.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-819.85185185185173, 230.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-823.40740740740728, 230.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-824.29629629629608, 224.5925925925925)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-820.44444444444423, 224.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-820.44444444444423, 221.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-818.07407407407391, 222.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-817.4814814814813, 226.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-814.81481481481467, 226.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-814.51851851851848, 228.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-810.37037037037021, 227.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-807.70370370370347, 228.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-806.22222222222194, 227.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-807.99999999999977, 224.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-809.7777777777776, 224.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-812.44444444444423, 223.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-812.14814814814804, 218.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-809.7777777777776, 216.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-805.92592592592564, 218.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-807.11111111111086, 214.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-808.88888888888857, 213.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-810.07407407407391, 214.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-811.25925925925901, 212.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-813.33333333333303, 210.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-814.22222222222194, 206.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-812.14814814814804, 202.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-808.59259259259238, 200)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-804.14814814814804, 201.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-799.11111111111086, 202.37037037037032)) + end + + kanaga: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-848.29629629629608, 204.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-843.25925925925901, 204.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-842.07407407407391, 206.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-839.70370370370347, 206.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-836.14814814814804, 210.96296296296293)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-839.11111111111086, 212.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-838.51851851851848, 215.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-837.33333333333303, 217.18518518518522)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-841.4814814814813, 219.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-843.85185185185173, 222.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-843.5555555555552, 226.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-842.07407407407391, 229.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-844.14814814814804, 231.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-844.14814814814804, 238.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-849.4814814814813, 240)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-849.7777777777776, 236.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-851.25925925925901, 240.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-853.92592592592564, 239.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-855.70370370370347, 242.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-859.5555555555552, 242.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-862.22222222222194, 240.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-865.4814814814813, 236.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-872.29629629629608, 237.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-877.62962962962945, 240.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-882.07407407407391, 240.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-888.29629629629608, 240.5925925925925)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-890.07407407407391, 242.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-889.7777777777776, 246.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-893.33333333333303, 246.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-893.92592592592564, 242.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-895.40740740740728, 239.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-893.33333333333303, 237.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-889.7777777777776, 233.18518518518522)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-886.51851851851848, 236.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-882.07407407407391, 236.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-878.81481481481467, 234.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-875.5555555555552, 233.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-874.37037037037021, 232)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-870.81481481481467, 231.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-869.92592592592564, 232.5925925925925)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-868.14814814814804, 230.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-859.5555555555552, 227.85185185185185)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-854.51851851851848, 226.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-851.5555555555552, 222.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-850.6666666666664, 213.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-850.37037037037021, 207.40740740740739)) + end + + tanaga: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-936.29629629629608, 208.5925925925925)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-927.40740740740716, 208.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-922.6666666666664, 209.18518518518522)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-920.88888888888857, 208)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-918.22222222222194, 208.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-917.92592592592564, 211.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-914.96296296296282, 212.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-914.37037037037021, 215.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-917.03703703703684, 216.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-913.7777777777776, 218.96296296296293)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-912.59259259259238, 217.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-909.92592592592564, 218.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-910.51851851851825, 221.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-906.37037037037021, 221.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-906.07407407407391, 219.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-901.62962962962945, 218.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-901.33333333333303, 221.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-896.29629629629608, 220.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-893.03703703703684, 218.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-887.99999999999977, 218.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-887.99999999999977, 221.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-889.7777777777776, 221.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-890.96296296296282, 223.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-898.37037037037021, 223.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-903.40740740740728, 226.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-907.25925925925901, 227.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-904.59259259259238, 229.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-903.99999999999977, 231.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-905.7777777777776, 232.5925925925925)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-908.74074074074065, 234.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-908.14814814814804, 237.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-906.37037037037021, 238.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-910.22222222222194, 243.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-913.18518518518499, 241.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-914.37037037037021, 243.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-916.14814814814804, 246.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-915.25925925925901, 250.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-914.07407407407379, 255.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-919.11111111111086, 253.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-919.11111111111086, 248.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-920.88888888888857, 248)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-923.25925925925901, 249.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-926.51851851851825, 245.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-930.37037037037021, 245.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-933.62962962962945, 244.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-933.33333333333303, 240.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-933.62962962962945, 238.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-925.62962962962945, 239.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-925.03703703703684, 237.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-921.7777777777776, 237.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-919.40740740740716, 236.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-919.11111111111086, 230.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-920.88888888888857, 229.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-922.96296296296282, 228.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-925.03703703703684, 226.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-926.51851851851825, 227.85185185185185)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-928.88888888888857, 228.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-930.96296296296282, 226.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-930.96296296296282, 222.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-934.51851851851825, 222.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-938.96296296296282, 220.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-943.11111111111086, 216.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-944.59259259259238, 213.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-941.62962962962945, 208.8888888888888)) + end + + semisopochnoi: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-1143.4074074074072, 193.77777777777777)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1138.9629629629626, 191.70370370370364)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1133.037037037037, 194.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1129.7777777777776, 199.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1125.333333333333, 200.5925925925925)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1125.333333333333, 204.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1129.7777777777776, 205.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1127.9999999999998, 208.5925925925925)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1134.2222222222219, 212.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1135.9999999999998, 214.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1141.037037037037, 215.70370370370358)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1143.7037037037035, 212.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1146.9629629629626, 212.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1150.2222222222219, 209.18518518518522)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1152.2962962962961, 208.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1153.185185185185, 205.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1151.9999999999998, 202.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1152.8888888888887, 198.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1147.5555555555552, 197.62962962962968)) + end + + amchitka: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-1229.6296296296293, 246.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1224.8888888888887, 245.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1223.9999999999998, 249.18518518518522)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1218.6666666666665, 248)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1204.1481481481478, 252.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1203.5555555555552, 256.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1199.7037037037035, 258.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1198.5185185185182, 256.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1196.1481481481478, 258.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1195.5555555555552, 262.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1190.5185185185182, 264.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1186.6666666666665, 271.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1178.3703703703702, 274.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1177.7777777777774, 278.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1173.037037037037, 282.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1168.2962962962961, 280.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1170.6666666666665, 284.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1165.9259259259256, 283.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1159.1111111111109, 282.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1159.1111111111109, 285.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1152.8888888888887, 288)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1155.2592592592591, 289.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1162.0740740740739, 290.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1162.9629629629626, 288.5925925925925)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1166.2222222222219, 290.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1170.9629629629626, 289.18518518518522)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1174.8148148148146, 292.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1178.6666666666665, 289.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1177.185185185185, 286.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1181.9259259259256, 285.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1182.5185185185182, 282.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1186.9629629629626, 280.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1191.4074074074072, 276.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1196.7407407407404, 268.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1199.4074074074072, 268.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1199.7037037037035, 265.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1202.0740740740739, 263.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1205.037037037037, 263.70370370370358)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1207.7037037037035, 260.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1210.9629629629626, 261.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1212.7407407407404, 258.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1215.7037037037035, 259.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1222.8148148148146, 257.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1228.4444444444441, 252.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1231.7037037037035, 253.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1231.4074074074072, 249.48148148148141)) + end + + kiska: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-1323.8518518518517, 176)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1321.7777777777774, 178.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1317.9259259259256, 178.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1315.8518518518517, 183.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1317.6296296296293, 186.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1319.9999999999998, 186.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1319.7037037037035, 190.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1323.8518518518517, 195.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1327.4074074074072, 195.8518518518519)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1325.333333333333, 198.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1328.5925925925924, 199.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1329.4814814814813, 201.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1326.2222222222219, 203.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1322.3703703703702, 202.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1319.9999999999998, 199.70370370370358)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1318.8148148148146, 202.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1314.0740740740739, 203.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1317.9259259259256, 205.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1321.7777777777774, 204.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1322.6666666666665, 207.70370370370358)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1327.9999999999998, 208.5925925925925)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1330.9629629629626, 207.70370370370358)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1331.5555555555552, 205.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1333.9259259259256, 205.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1334.8148148148146, 206.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1334.2222222222219, 210.96296296296293)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1337.4814814814813, 208)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1336.8888888888887, 204.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1339.2592592592591, 206.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1343.1111111111109, 208)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1346.0740740740739, 211.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1347.8518518518517, 213.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1347.5555555555552, 217.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1348.4444444444441, 221.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1351.4074074074072, 222.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1352.2962962962961, 219.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1356.4444444444441, 214.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1359.1111111111109, 215.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1359.7037037037035, 211.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1352.8888888888887, 207.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1348.1481481481478, 205.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1347.5555555555552, 200.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1339.5555555555552, 198.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1334.5185185185182, 197.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1332.7407407407404, 188.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1329.4814814814813, 184.59259259259255)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1328.8888888888887, 180.74074074074076)) + end + + agattu: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-1687.9999999999995, 119.7037037037037)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1685.0370370370367, 122.07407407407408)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1680.5925925925922, 119.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1670.8148148148146, 120.59259259259261)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1672.5925925925922, 123.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1679.1111111111109, 127.7037037037037)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1677.333333333333, 133.92592592592598)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1675.5555555555552, 144)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1680.5925925925922, 142.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1683.8518518518515, 144.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1685.0370370370367, 141.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1687.7037037037035, 140.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1687.1111111111109, 137.18518518518522)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1688.8888888888885, 139.2592592592593)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1689.7777777777774, 137.18518518518522)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1691.2592592592589, 137.48148148148147)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1694.2222222222219, 139.2592592592593)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1696.8888888888885, 140.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1700.7407407407404, 140.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1705.1851851851848, 138.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1706.0740740740737, 136.59259259259261)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1711.4074074074072, 136.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1709.0370370370367, 131.8518518518519)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1704.5925925925922, 130.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1702.5185185185182, 127.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1700.1481481481478, 130.07407407407408)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1696.8888888888885, 129.77777777777777)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1693.6296296296293, 126.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1693.0370370370367, 124.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1689.4814814814811, 125.03703703703707)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1689.1851851851848, 122.07407407407408)) + end + +invariant + +-- correct_location: attached target_imp implies location = vitp.aleutians + +end diff --git a/jj_vitp/Interface/widgets/other_location_widgets/asia_widget.e b/jj_vitp/Interface/widgets/other_location_widgets/asia_widget.e new file mode 100644 index 0000000..73cf972 --- /dev/null +++ b/jj_vitp/Interface/widgets/other_location_widgets/asia_widget.e @@ -0,0 +1,826 @@ +note + description: "[ + Widget representing the brown land of Asia + ]" + author: "Jimmy J. Johnson" + +class + ASIA_WIDGET + +inherit + + LOCATION_WIDGET + redefine + build_widgets, + build_land + end + +create + default_create + +feature {NONE} -- Initialization + + build_widgets + -- Add widgets to Current + do + Precursor {LOCATION_WIDGET} + -- Remove `text_widget' + prune_all (text_widget) + -- Put polygons representing land into the `land' + -- Make adjustments + rotate_widget (land, 12.0) + scale_widget (land, 0.27) + land.set_point_position (0,0) + translate_widget (Current, -5, -11) + end + + build_land + -- Add `land' to Current and create the polygons. + do + Precursor {LOCATION_WIDGET} + -- Put polygons representing land into the `land' + land.extend (hainan) + land.extend (mainland) + land.extend (taiwan) + end + +feature {NONE} -- Implementation + + mainland: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (0, 0)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1442.25, -307)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1441.2499999999993, -296)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1443.2499999999993, -270)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1443.2499999999993, -257)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1448.25, -255)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1441.2499999999993, -249)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1444.25, -236)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1439.2499999999993, -228.00000000000003)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1440.25, -215)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1436.2499999999993, -211.00000000000003)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1437.2499999999993, -202)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1427.2499999999993, -191.00000000000006)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1419.2499999999993, -183)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1415.25, -177.00000000000006)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1412.3611111111104, -169.11111111111117)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1411.25, -162)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1402.25, -157.00000000000006)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1398.2499999999993, -147)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1393.25, -136.00000000000006)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1388.3611111111104, -126.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1386.25, -123)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1380.2499999999993, -110)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1371.2499999999993, -104)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1364.2499999999993, -93.000000000000085)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1358.2499999999993, -90)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1349.25, -77)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1346.5833333333328, -74.000000000000085)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1345.6944444444443, -66)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1338.2499999999995, -67.000000000000114)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1334.25, -55.000000000000114)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1327.2499999999995, -42.000000000000114)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1318.25, -34.000000000000114)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1299.2499999999995, -23)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1294.5833333333328, -17.111111111111256)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1292.3611111111106, -18.000000000000114)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1290.1388888888882, -16.222222222222342)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1286.1388888888882, -16.222222222222342)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1282.1388888888882, -14.444444444444571)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1274.2499999999995, -13.000000000000114)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1271.9166666666661, -16.666666666666799)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1269.25, -13.555555555555657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1266.1388888888882, -18.000000000000114)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1263.4722222222222, -15.333333333333343)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1259.9166666666661, -19.333333333333456)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1257.2499999999995, -17.000000000000114)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1257.2499999999995, -27)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1254.5833333333328, -26.888888888888914)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1251.9166666666661, -26.000000000000114)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1247.2499999999995, -19.000000000000171)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1243.9166666666661, -18.888888888888999)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1247.0277777777776, -24.222222222222342)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1249.2499999999995, -30)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1243.2499999999995, -29.000000000000114)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1241.6944444444439, -23.777777777777914)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1236.805555555555, -18.444444444444571)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1232.25, -10)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1217.25, -11)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1223.2499999999995, -7.0000000000001137)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1221.2499999999995, 2)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1218.5833333333328, -0.22222222222234222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1214.25, 2)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1211.0277777777774, 4.222222222222058)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1207.4722222222222, 8.222222222222058)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1204.805555555555, 8.6666666666665151)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1202.5833333333333, 15.333333333333201)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1197.2499999999995, 18.999999999999886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1197.2499999999995, 27)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1199.9166666666661, 30.444444444444343)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1197.6944444444439, 34.888888888888687)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1199.0277777777776, 42.44444444444423)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1198.1388888888882, 46.44444444444423)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1195.4722222222217, 45.111111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1185.2499999999995, 50)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1184.2499999999995, 56.999999999999829)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1181.6944444444443, 56.222222222222058)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1177.6944444444443, 59.777777777777601)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1173.25, 59)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1174.25, 64.999999999999829)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1168.3611111111106, 67.333333333333144)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1163.0277777777774, 68.666666666666515)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1157.2499999999995, 67)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1152.3611111111106, 74.44444444444423)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1147.2499999999995, 77)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1148.805555555555, 82.4444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1147.0277777777774, 87.777777777777601)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1144.805555555555, 87.777777777777601)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1145.6944444444439, 93.555555555555316)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1153.2499999999993, 98)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1167.2499999999995, 110.99999999999983)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1173.25, 126.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1179.4722222222222, 136.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1184.805555555555, 136.222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1190.1388888888882, 141.11111111111092)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1189.6944444444443, 146.88888888888869)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1189.2499999999995, 152.222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1191.2499999999995, 156.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1191.2499999999995, 171.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1188.25, 184.99999999999983)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1195.2499999999995, 183.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1193.2499999999995, 198)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1184.2499999999995, 208.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1178.25, 212.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1174.1388888888882, 210.88888888888869)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1172.3611111111106, 208.222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1172.3611111111106, 212.222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1164.2499999999995, 213.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1162.1388888888882, 216.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1159.4722222222217, 213.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1157.2499999999995, 213.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1161.25, 220.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1156.3611111111106, 220.222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1154.5833333333328, 215.77777777777749)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1149.6944444444439, 216.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1152.805555555555, 217.55555555555532)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1154.1388888888882, 222.88888888888869)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1149.2499999999995, 222.44444444444417)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1148.3611111111106, 219.33333333333309)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1145.2499999999995, 218.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1147.0277777777774, 223.33333333333309)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1139.9166666666661, 229.55555555555532)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1140.805555555555, 225.55555555555532)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1143.9166666666665, 221.55555555555532)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1136.805555555555, 222.88888888888869)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1135.0277777777774, 228.222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1131.9166666666665, 228.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1130.5833333333328, 225.11111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1128.3611111111106, 229.55555555555532)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1128.2499999999995, 232.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1124.3611111111106, 233.11111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1124.805555555555, 226.4444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1121.25, 226.4444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1120.805555555555, 230.44444444444417)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1116.805555555555, 231.77777777777749)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1114.2499999999993, 228.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1117.6944444444439, 226.88888888888869)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1119.4722222222217, 221.11111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1121.6944444444443, 222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1124.805555555555, 222.88888888888869)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1125.6944444444439, 217.55555555555532)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1122.2499999999995, 216.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1120.805555555555, 213.11111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1122.5833333333333, 211.33333333333309)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1120.2499999999995, 204.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1123.9166666666661, 195.77777777777749)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1128.2499999999995, 191.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1131.4722222222217, 188.222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1126.5833333333328, 189.11111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1128.2499999999995, 185.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1124.3611111111106, 181.99999999999983)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1124.3611111111106, 168.222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1119.4722222222217, 166.4444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1115.2499999999995, 163.99999999999983)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1119.0277777777774, 159.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1120.805555555555, 161.55555555555532)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1121.6944444444443, 157.55555555555532)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1123.9166666666661, 158.88888888888869)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1124.3611111111106, 156.222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1128.2499999999995, 156.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1132.805555555555, 161.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1131.4722222222217, 156.222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1131.4722222222217, 153.11111111111092)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1127.9166666666661, 151.7777777777776)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1132.3611111111106, 148.222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1127.0277777777776, 145.99999999999983)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1127.25, 140)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1119.25, 134)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1116.3611111111109, 136.222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1114.5833333333328, 133.11111111111092)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1110.2499999999995, 132.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1108.3611111111106, 127.7777777777776)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1105.6944444444439, 129.55555555555532)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1105.6944444444439, 132.222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1104.2499999999995, 138.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1100.805555555555, 136.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1097.6944444444439, 137.55555555555532)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1100.805555555555, 131.77777777777749)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1095.4722222222222, 132.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1089.6944444444439, 130.88888888888869)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1094.5833333333333, 127.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1095.9166666666661, 125.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1083.9166666666661, 125.55555555555532)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1088.2499999999995, 117)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1095.4722222222222, 98)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1099.9166666666661, 91.777777777777601)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1098.5833333333328, 86.444444444444173)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1101.6944444444439, 81.555555555555316)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1097.25, 83.777777777777601)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1096.2499999999993, 81)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1082.25, 78)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1079.4722222222217, 74.888888888888687)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1075.9166666666661, 75.333333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1074.5833333333328, 70.44444444444423)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1072.3611111111106, 76.222222222222001)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1051.2499999999995, 77)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1030.2499999999995, 89)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1024.805555555555, 93.555555555555316)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1018.583333333333, 99.777777777777601)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1015.0277777777774, 104.222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1009.2499999999997, 103.77777777777749)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1004.2499999999997, 108)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1003.2499999999995, 99.999999999999829)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1012.2499999999995, 95.999999999999829)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1014.2499999999997, 87.999999999999829)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1004.2499999999997, 87.999999999999829)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1009.694444444444, 84.222222222222001)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1005.694444444444, 82.888888888888687)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1009.2499999999995, 78.999999999999829)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1010.2499999999997, 72.999999999999829)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1016.805555555555, 72.222222222222001)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1020.2499999999997, 63.999999999999829)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1026.25, 58)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1027.0277777777774, 53.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1021.2499999999993, 45.999999999999829)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1002.2499999999997, 42.999999999999829)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1000.2499999999995, 50)) + Result.extend_point (create {EV_COORDINATE}.make_precise (994.13888888888846, 50.44444444444423)) + Result.extend_point (create {EV_COORDINATE}.make_precise (991.24999999999955, 60)) + Result.extend_point (create {EV_COORDINATE}.make_precise (988.24999999999932, 64.999999999999829)) + Result.extend_point (create {EV_COORDINATE}.make_precise (966.25, 72)) + Result.extend_point (create {EV_COORDINATE}.make_precise (960.24999999999966, 83.999999999999829)) + Result.extend_point (create {EV_COORDINATE}.make_precise (957.25, 94)) + Result.extend_point (create {EV_COORDINATE}.make_precise (947.02777777777737, 94)) + Result.extend_point (create {EV_COORDINATE}.make_precise (939.25, 98)) + Result.extend_point (create {EV_COORDINATE}.make_precise (933.24999999999966, 92.999999999999829)) + Result.extend_point (create {EV_COORDINATE}.make_precise (924.24999999999966, 99)) + Result.extend_point (create {EV_COORDINATE}.make_precise (922.13888888888846, 107.7777777777776)) + Result.extend_point (create {EV_COORDINATE}.make_precise (928.24999999999955, 120.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (942.24999999999966, 127.99999999999983)) + Result.extend_point (create {EV_COORDINATE}.make_precise (947.25, 125)) + Result.extend_point (create {EV_COORDINATE}.make_precise (953.25, 127.99999999999983)) + Result.extend_point (create {EV_COORDINATE}.make_precise (958.24999999999955, 136.99999999999983)) + Result.extend_point (create {EV_COORDINATE}.make_precise (954.25, 141.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (956.25, 150.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (965.25, 154.99999999999983)) + Result.extend_point (create {EV_COORDINATE}.make_precise (973.24999999999955, 149.99999999999983)) + Result.extend_point (create {EV_COORDINATE}.make_precise (981.25, 141.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (984.36111111111063, 137.55555555555532)) + Result.extend_point (create {EV_COORDINATE}.make_precise (996.24999999999966, 134)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1005.2499999999997, 140)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1010.1388888888888, 143.77777777777749)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1022.2499999999997, 143)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1036.2499999999995, 147)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1035.4722222222217, 152.222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1032.3611111111106, 153.55555555555532)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1034.2499999999995, 159)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1029.6944444444439, 161.55555555555532)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1021.2499999999993, 159.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1000.8055555555552, 168.222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (998.1388888888888, 174.44444444444423)) + Result.extend_point (create {EV_COORDINATE}.make_precise (995.02777777777737, 172.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (991.24999999999955, 180.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (984.36111111111063, 183.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (983.91666666666629, 179.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (978.58333333333326, 180.222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (982.13888888888823, 185.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (977.24999999999966, 188.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (974.25, 192.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (972.36111111111063, 197.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (968.36111111111063, 197.55555555555532)) + Result.extend_point (create {EV_COORDINATE}.make_precise (966.58333333333303, 203.77777777777749)) + Result.extend_point (create {EV_COORDINATE}.make_precise (961.24999999999932, 212.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (959.47222222222183, 216.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (959.02777777777737, 220.222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (962.58333333333326, 220.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (965.25, 225)) + Result.extend_point (create {EV_COORDINATE}.make_precise (973.694444444444, 228.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (983.25, 235.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1001.25, 280)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1008.2499999999997, 283.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1010.2499999999997, 295)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1016.25, 293.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1022.2499999999997, 307.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1016.25, 314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1022.2499999999997, 324.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1008.2499999999997, 326.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1000.2499999999995, 336)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1006.2499999999993, 337.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1017.25, 346.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1024.3611111111106, 344.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1030.583333333333, 348.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1021.694444444444, 348.22222222222183)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1023.9166666666666, 351.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1027.4722222222222, 355.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1022.1388888888888, 354.88888888888846)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1017.25, 359)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1009.2499999999997, 361.11111111111074)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1021.2499999999997, 359.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1021.2499999999997, 365.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1021.694444444444, 373.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1016.805555555555, 369.55555555555509)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1013.25, 372.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1015.0277777777774, 378)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1014.1388888888883, 381.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1010.583333333333, 382.44444444444412)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1013.25, 388.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1014.5833333333333, 394)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1010.583333333333, 392.22222222222183)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1007.0277777777774, 396.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1003.4722222222218, 398.44444444444412)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1003.9166666666663, 392.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1000.2499999999995, 400.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (996.36111111111063, 402.44444444444412)) + Result.extend_point (create {EV_COORDINATE}.make_precise (992.8055555555552, 409.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (991.24999999999955, 415.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (980.25, 427.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (978.58333333333326, 435.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (974.1388888888888, 437.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (976.36111111111063, 432.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (971.91666666666629, 433.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (968.36111111111063, 432.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (968.8055555555552, 436.22222222222183)) + Result.extend_point (create {EV_COORDINATE}.make_precise (972.36111111111063, 439.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (974.1388888888888, 443.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (969.24999999999966, 445.5555555555552)) + Result.extend_point (create {EV_COORDINATE}.make_precise (967.47222222222217, 451.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (969.694444444444, 452.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (967.91666666666629, 456.22222222222183)) + Result.extend_point (create {EV_COORDINATE}.make_precise (967.91666666666629, 459.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (964.80555555555497, 460.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (971.02777777777737, 461.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (972.8055555555552, 464.22222222222183)) + Result.extend_point (create {EV_COORDINATE}.make_precise (968.8055555555552, 467.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (965.25, 468.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (963.02777777777737, 464.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (957.25, 466)) + Result.extend_point (create {EV_COORDINATE}.make_precise (960.8055555555552, 470.88888888888846)) + Result.extend_point (create {EV_COORDINATE}.make_precise (955.47222222222217, 471.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (953.25, 477)) + Result.extend_point (create {EV_COORDINATE}.make_precise (950.58333333333326, 481.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (944.8055555555552, 481.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (948.36111111111063, 483.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (944.36111111111063, 488.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (941.694444444444, 486.444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (942.13888888888835, 491.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (936.8055555555552, 490.444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (935.47222222222183, 486.88888888888846)) + Result.extend_point (create {EV_COORDINATE}.make_precise (930.58333333333303, 490.444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (934.13888888888846, 494.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (930.13888888888835, 497.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (928.36111111111063, 502.88888888888846)) + Result.extend_point (create {EV_COORDINATE}.make_precise (924.8055555555552, 500.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (923.02777777777737, 505.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (919.91666666666629, 505.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (917.694444444444, 511.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (915.02777777777737, 509.5555555555552)) + Result.extend_point (create {EV_COORDINATE}.make_precise (908.36111111111063, 513.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (903.02777777777737, 518.444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (898.58333333333326, 523.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (896.36111111111063, 527.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (891.91666666666663, 527.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (879.47222222222217, 531.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (874.25, 529.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (875.91666666666629, 535.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (869.694444444444, 534)) + Result.extend_point (create {EV_COORDINATE}.make_precise (867.02777777777737, 531.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (862.13888888888846, 534)) + Result.extend_point (create {EV_COORDINATE}.make_precise (859.02777777777737, 538)) + Result.extend_point (create {EV_COORDINATE}.make_precise (856.36111111111063, 532.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (853.694444444444, 533.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (852.24999999999966, 537)) + Result.extend_point (create {EV_COORDINATE}.make_precise (846.13888888888846, 537.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (847.47222222222217, 542.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (844.8055555555552, 546.444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (840.24999999999966, 547)) + Result.extend_point (create {EV_COORDINATE}.make_precise (838.58333333333303, 541.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (835.02777777777737, 537.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (832.24999999999966, 532)) + Result.extend_point (create {EV_COORDINATE}.make_precise (831.91666666666663, 543.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (828.25, 550.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (823.47222222222217, 550)) + Result.extend_point (create {EV_COORDINATE}.make_precise (823.02777777777737, 553.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (819.47222222222183, 546.88888888888846)) + Result.extend_point (create {EV_COORDINATE}.make_precise (817.69444444444412, 551.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (815.02777777777737, 554.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (812.36111111111074, 551.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (808.8055555555552, 557.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (803.91666666666629, 555.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (794.58333333333303, 556.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (795.02777777777737, 559.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (789.69444444444412, 562.444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (788.36111111111109, 556.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (787.47222222222183, 562.88888888888846)) + Result.extend_point (create {EV_COORDINATE}.make_precise (778.58333333333303, 564.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (765.25, 565.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (762.13888888888846, 573.5555555555552)) + Result.extend_point (create {EV_COORDINATE}.make_precise (763.91666666666629, 578.444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (756.8055555555552, 575.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (759.02777777777737, 571.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (754.58333333333303, 574.444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (753.24999999999966, 578.88888888888846)) + Result.extend_point (create {EV_COORDINATE}.make_precise (757.25, 579.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (757.25, 581.5555555555552)) + Result.extend_point (create {EV_COORDINATE}.make_precise (758.58333333333303, 584.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (761.24999999999966, 586.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (756.25, 594)) + Result.extend_point (create {EV_COORDINATE}.make_precise (746.24999999999966, 592.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (746.13888888888846, 587.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (740.25, 583)) + Result.extend_point (create {EV_COORDINATE}.make_precise (743.02777777777749, 580.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (740.25, 574)) + Result.extend_point (create {EV_COORDINATE}.make_precise (743.9166666666664, 568.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (746.13888888888846, 564.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (741.25, 564)) + Result.extend_point (create {EV_COORDINATE}.make_precise (728.36111111111109, 565.5555555555552)) + Result.extend_point (create {EV_COORDINATE}.make_precise (729.25, 561.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (718.24999999999977, 559.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (716.80555555555532, 553.5555555555552)) + Result.extend_point (create {EV_COORDINATE}.make_precise (715.9166666666664, 561.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (697.24999999999977, 564)) + Result.extend_point (create {EV_COORDINATE}.make_precise (695.9166666666664, 568.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (690.13888888888869, 569.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (694.58333333333303, 570.88888888888835)) + Result.extend_point (create {EV_COORDINATE}.make_precise (693.24999999999977, 574)) + Result.extend_point (create {EV_COORDINATE}.make_precise (683.02777777777749, 577.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (678.13888888888869, 579.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (675.02777777777749, 583.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (675.25, 592)) + Result.extend_point (create {EV_COORDINATE}.make_precise (660.25, 598.99999999999932)) + Result.extend_point (create {EV_COORDINATE}.make_precise (653.24999999999977, 608.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (650.58333333333303, 624.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (655.47222222222217, 635.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (666.24999999999977, 643.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (668.24999999999977, 655.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (682.25, 670.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (687.25, 678.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (704.25, 691.99999999999932)) + Result.extend_point (create {EV_COORDINATE}.make_precise (714.13888888888846, 704.22222222222172)) + Result.extend_point (create {EV_COORDINATE}.make_precise (730.25, 741)) + Result.extend_point (create {EV_COORDINATE}.make_precise (729.25, 793.55555555555497)) + Result.extend_point (create {EV_COORDINATE}.make_precise (620.80555555555543, 818.59259259259238)) + Result.extend_point (create {EV_COORDINATE}.make_precise (584.06481481481478, 788.07407407407391)) + Result.extend_point (create {EV_COORDINATE}.make_precise (576.36111111111109, 786.29629629629608)) + Result.extend_point (create {EV_COORDINATE}.make_precise (576.65740740740739, 790.74074074074042)) + Result.extend_point (create {EV_COORDINATE}.make_precise (573.99074074074065, 791.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (574.25, 784.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (566.58333333333314, 777.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (559.25, 774.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (548.36111111111086, 774)) + Result.extend_point (create {EV_COORDINATE}.make_precise (540.24999999999977, 776)) + Result.extend_point (create {EV_COORDINATE}.make_precise (543.0277777777776, 756.22222222222172)) + Result.extend_point (create {EV_COORDINATE}.make_precise (536.80555555555532, 754.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (527.91666666666663, 754.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (521.25, 758.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (523.02777777777749, 766)) + Result.extend_point (create {EV_COORDINATE}.make_precise (520.80555555555532, 774)) + Result.extend_point (create {EV_COORDINATE}.make_precise (519.91666666666663, 784.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (518.13888888888869, 790.88888888888823)) + Result.extend_point (create {EV_COORDINATE}.make_precise (515.47222222222194, 795.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (511.472222222222, 804.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (510.58333333333309, 813.55555555555475)) + Result.extend_point (create {EV_COORDINATE}.make_precise (509.24999999999983, 817.55555555555475)) + Result.extend_point (create {EV_COORDINATE}.make_precise (504.80555555555532, 822.88888888888823)) + Result.extend_point (create {EV_COORDINATE}.make_precise (502.13888888888869, 839.33333333333235)) + Result.extend_point (create {EV_COORDINATE}.make_precise (502.58333333333331, 845.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (506.13888888888869, 849.55555555555497)) + Result.extend_point (create {EV_COORDINATE}.make_precise (504.36111111111092, 851.7777777777776)) + Result.extend_point (create {EV_COORDINATE}.make_precise (506.58333333333314, 854.88888888888823)) + Result.extend_point (create {EV_COORDINATE}.make_precise (511.472222222222, 853.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (515.47222222222194, 851.7777777777776)) + Result.extend_point (create {EV_COORDINATE}.make_precise (519.02777777777749, 853.55555555555497)) + Result.extend_point (create {EV_COORDINATE}.make_precise (520.36111111111109, 862)) + Result.extend_point (create {EV_COORDINATE}.make_precise (521.25, 868.22222222222172)) + Result.extend_point (create {EV_COORDINATE}.make_precise (524.80555555555532, 873.55555555555475)) + Result.extend_point (create {EV_COORDINATE}.make_precise (527.02777777777749, 872.22222222222172)) + Result.extend_point (create {EV_COORDINATE}.make_precise (527.91666666666663, 878)) + Result.extend_point (create {EV_COORDINATE}.make_precise (531.02777777777749, 890.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (534.58333333333314, 900.22222222222172)) + Result.extend_point (create {EV_COORDINATE}.make_precise (543.91666666666663, 907.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (551.02777777777749, 908.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (556.36111111111109, 907.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (561.24999999999977, 916.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (570.13888888888869, 922.88888888888823)) + Result.extend_point (create {EV_COORDINATE}.make_precise (564.80555555555532, 930.44444444444389)) + Result.extend_point (create {EV_COORDINATE}.make_precise (563.02777777777749, 934.88888888888823)) + Result.extend_point (create {EV_COORDINATE}.make_precise (557.24999999999977, 930.44444444444389)) + Result.extend_point (create {EV_COORDINATE}.make_precise (551.91666666666652, 931.77777777777692)) + Result.extend_point (create {EV_COORDINATE}.make_precise (547.0277777777776, 928.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (546.58333333333303, 923.7777777777776)) + Result.extend_point (create {EV_COORDINATE}.make_precise (542.13888888888869, 922.44444444444366)) + Result.extend_point (create {EV_COORDINATE}.make_precise (538.13888888888869, 916.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (532.80555555555532, 916.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (527.02777777777749, 911.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (524.36111111111086, 918.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (519.91666666666663, 911.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (515.02777777777749, 909.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (514.58333333333326, 904.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (510.58333333333309, 898)) + Result.extend_point (create {EV_COORDINATE}.make_precise (507.91666666666652, 899.33333333333258)) + Result.extend_point (create {EV_COORDINATE}.make_precise (505.6944444444444, 890.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (506.13888888888869, 886.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (503.0277777777776, 890.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (500.80555555555532, 894.88888888888823)) + Result.extend_point (create {EV_COORDINATE}.make_precise (499.472222222222, 885.55555555555475)) + Result.extend_point (create {EV_COORDINATE}.make_precise (497.25, 882.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (492.80555555555532, 881.55555555555475)) + Result.extend_point (create {EV_COORDINATE}.make_precise (489.6944444444444, 875.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (491.02777777777749, 869.55555555555475)) + Result.extend_point (create {EV_COORDINATE}.make_precise (486.13888888888869, 875.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (486.58333333333303, 879.7777777777776)) + Result.extend_point (create {EV_COORDINATE}.make_precise (486.58333333333303, 884.22222222222172)) + Result.extend_point (create {EV_COORDINATE}.make_precise (483.91666666666652, 886.88888888888823)) + Result.extend_point (create {EV_COORDINATE}.make_precise (482.13888888888869, 879.7777777777776)) + Result.extend_point (create {EV_COORDINATE}.make_precise (480.80555555555532, 869.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (481.24999999999983, 856.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (484.80555555555532, 851.7777777777776)) + Result.extend_point (create {EV_COORDINATE}.make_precise (488.36111111111109, 837.55555555555497)) + Result.extend_point (create {EV_COORDINATE}.make_precise (487.472222222222, 831.3333333333328)) + Result.extend_point (create {EV_COORDINATE}.make_precise (487.472222222222, 827.33333333333258)) + Result.extend_point (create {EV_COORDINATE}.make_precise (486.13888888888869, 820.22222222222172)) + Result.extend_point (create {EV_COORDINATE}.make_precise (489.6944444444444, 816.22222222222172)) + Result.extend_point (create {EV_COORDINATE}.make_precise (491.91666666666663, 815.33333333333235)) + Result.extend_point (create {EV_COORDINATE}.make_precise (491.02777777777749, 809.55555555555475)) + Result.extend_point (create {EV_COORDINATE}.make_precise (492.80555555555532, 807.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (492.80555555555532, 802.88888888888823)) + Result.extend_point (create {EV_COORDINATE}.make_precise (492.36111111111109, 796.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (489.24999999999983, 796.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (489.24999999999983, 794)) + Result.extend_point (create {EV_COORDINATE}.make_precise (487.0277777777776, 794)) + Result.extend_point (create {EV_COORDINATE}.make_precise (485.69444444444423, 788.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (487.91666666666652, 790.44444444444389)) + Result.extend_point (create {EV_COORDINATE}.make_precise (491.472222222222, 790.44444444444389)) + Result.extend_point (create {EV_COORDINATE}.make_precise (488.36111111111109, 785.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (487.472222222222, 781.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (483.472222222222, 782.88888888888823)) + Result.extend_point (create {EV_COORDINATE}.make_precise (483.02777777777749, 778.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (483.472222222222, 774)) + Result.extend_point (create {EV_COORDINATE}.make_precise (485.69444444444423, 776.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (488.36111111111109, 778.88888888888823)) + Result.extend_point (create {EV_COORDINATE}.make_precise (490.13888888888869, 775.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (491.02777777777749, 772.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (489.24999999999983, 762.88888888888823)) + Result.extend_point (create {EV_COORDINATE}.make_precise (485.25, 755.33333333333258)) + Result.extend_point (create {EV_COORDINATE}.make_precise (482.13888888888869, 750.444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (480.36111111111109, 754.88888888888823)) + Result.extend_point (create {EV_COORDINATE}.make_precise (478.13888888888869, 750.444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (478.58333333333331, 742.88888888888835)) + Result.extend_point (create {EV_COORDINATE}.make_precise (477.69444444444423, 738.444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (475.47222222222206, 733.55555555555497)) + Result.extend_point (create {EV_COORDINATE}.make_precise (472.80555555555554, 725.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (470.58333333333314, 713.55555555555497)) + Result.extend_point (create {EV_COORDINATE}.make_precise (469.25, 706.88888888888835)) + Result.extend_point (create {EV_COORDINATE}.make_precise (469.25, 700.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (467.0277777777776, 697.55555555555497)) + Result.extend_point (create {EV_COORDINATE}.make_precise (465.25, 690.88888888888835)) + Result.extend_point (create {EV_COORDINATE}.make_precise (461.25, 684.22222222222172)) + Result.extend_point (create {EV_COORDINATE}.make_precise (459.0277777777776, 680.22222222222172)) + Result.extend_point (create {EV_COORDINATE}.make_precise (456.36111111111109, 672.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (456.80555555555537, 669.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (453.69444444444423, 672.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (450.58333333333309, 671.3333333333328)) + Result.extend_point (create {EV_COORDINATE}.make_precise (450.58333333333309, 673.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (448.36111111111109, 674.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (448.36111111111109, 678.88888888888835)) + Result.extend_point (create {EV_COORDINATE}.make_precise (444.36111111111109, 682.88888888888835)) + Result.extend_point (create {EV_COORDINATE}.make_precise (439.91666666666652, 684.22222222222172)) + Result.extend_point (create {EV_COORDINATE}.make_precise (436.36111111111092, 678.444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (439.02777777777766, 685.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (432.80555555555554, 687.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (431.91666666666652, 690.444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (426.13888888888869, 691.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (424.80555555555554, 694.44444444444355)) + Result.extend_point (create {EV_COORDINATE}.make_precise (419.91666666666652, 700.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (416.36111111111097, 701.55555555555497)) + Result.extend_point (create {EV_COORDINATE}.make_precise (412.80555555555543, 701.55555555555497)) + Result.extend_point (create {EV_COORDINATE}.make_precise (410.58333333333331, 698.444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (411.02777777777766, 692.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (408.36111111111097, 701.55555555555497)) + Result.extend_point (create {EV_COORDINATE}.make_precise (404.36111111111097, 702)) + Result.extend_point (create {EV_COORDINATE}.make_precise (400.36111111111109, 700.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (397.6944444444444, 696.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (395.02777777777766, 698.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (393.69444444444434, 696.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (399.91666666666652, 690.444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (400.36111111111109, 683.7777777777776)) + Result.extend_point (create {EV_COORDINATE}.make_precise (398.13888888888869, 688.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (390.13888888888874, 697.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (389.69444444444434, 690.444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (393.69444444444434, 678.88888888888835)) + Result.extend_point (create {EV_COORDINATE}.make_precise (396.80555555555554, 662.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (394.58333333333331, 644.22222222222172)) + Result.extend_point (create {EV_COORDINATE}.make_precise (387.02777777777766, 629.55555555555497)) + Result.extend_point (create {EV_COORDINATE}.make_precise (386.13888888888874, 620.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (383.91666666666652, 622.44444444444366)) + Result.extend_point (create {EV_COORDINATE}.make_precise (383.47222222222206, 627.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (379.02777777777771, 625.55555555555486)) + Result.extend_point (create {EV_COORDINATE}.make_precise (375.91666666666652, 620.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (373.24999999999989, 614.444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (374.58333333333331, 613.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (378.13888888888874, 615.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (380.80555555555543, 618.444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (381.24999999999989, 615.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (377.69444444444434, 610.44444444444366)) + Result.extend_point (create {EV_COORDINATE}.make_precise (378.58333333333314, 604.22222222222183)) + Result.extend_point (create {EV_COORDINATE}.make_precise (373.24999999999989, 601.55555555555486)) + Result.extend_point (create {EV_COORDINATE}.make_precise (375.47222222222206, 606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (371.91666666666652, 606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (369.25, 599.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (365.69444444444434, 600.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (360.80555555555543, 597.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (362.58333333333326, 593.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (359.47222222222206, 597.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (356.80555555555543, 595.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (356.80555555555543, 586.44444444444366)) + Result.extend_point (create {EV_COORDINATE}.make_precise (355.02777777777766, 594)) + Result.extend_point (create {EV_COORDINATE}.make_precise (351.47222222222211, 586.88888888888846)) + Result.extend_point (create {EV_COORDINATE}.make_precise (345.69444444444434, 579.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (338.13888888888874, 569.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (335.91666666666657, 554.444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (337.24999999999989, 552.22222222222183)) + Result.extend_point (create {EV_COORDINATE}.make_precise (333.24999999999989, 542.444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (331.47222222222217, 536.22222222222183)) + Result.extend_point (create {EV_COORDINATE}.make_precise (326.58333333333326, 533.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (327.02777777777766, 536.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (329.69444444444434, 540.22222222222183)) + Result.extend_point (create {EV_COORDINATE}.make_precise (328.36111111111097, 542.444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (325.24999999999989, 538.44444444444366)) + Result.extend_point (create {EV_COORDINATE}.make_precise (322.13888888888874, 539.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (320.36111111111097, 542.444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (320.80555555555543, 546)) + Result.extend_point (create {EV_COORDINATE}.make_precise (316.36111111111097, 550)) + Result.extend_point (create {EV_COORDINATE}.make_precise (316.36111111111097, 543.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (315.91666666666657, 535.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (309.24999999999989, 525.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (307.47222222222211, 516.22222222222183)) + Result.extend_point (create {EV_COORDINATE}.make_precise (306.1388888888888, 517.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (307.02777777777777, 526.44444444444366)) + Result.extend_point (create {EV_COORDINATE}.make_precise (310.13888888888874, 528.22222222222149)) + Result.extend_point (create {EV_COORDINATE}.make_precise (311.02777777777766, 532.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (313.24999999999989, 538.88888888888846)) + Result.extend_point (create {EV_COORDINATE}.make_precise (312.80555555555554, 545.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (309.69444444444434, 550.44444444444366)) + Result.extend_point (create {EV_COORDINATE}.make_precise (304.36111111111103, 554.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (297.25, 555.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (294.1388888888888, 552.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (291.02777777777777, 549.5555555555552)) + Result.extend_point (create {EV_COORDINATE}.make_precise (290.58333333333326, 555.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (283.91666666666663, 558.444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (278.58333333333326, 557.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (278.58333333333326, 559.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (273.25, 559.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (270.1388888888888, 557.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (269.24999999999994, 561.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (266.1388888888888, 561.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (264.80555555555549, 555.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (263.02777777777771, 563.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (259.47222222222217, 562.44444444444366)) + Result.extend_point (create {EV_COORDINATE}.make_precise (260.80555555555543, 556.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (257.69444444444434, 561.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (255.02777777777771, 561.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (254.58333333333326, 557.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (251.02777777777777, 560.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (248.80555555555546, 559.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (251.02777777777777, 553.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (254.58333333333326, 547.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (252.36111111111103, 546.88888888888835)) + Result.extend_point (create {EV_COORDINATE}.make_precise (247.91666666666663, 553.99999999999932)) + Result.extend_point (create {EV_COORDINATE}.make_precise (244.80555555555549, 559.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (236.80555555555546, 560.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (231.47222222222217, 561.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (224.36111111111106, 565.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (222.58333333333331, 573.5555555555552)) + Result.extend_point (create {EV_COORDINATE}.make_precise (223.47222222222217, 581.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (227.47222222222217, 581.55555555555497)) + Result.extend_point (create {EV_COORDINATE}.make_precise (223.02777777777777, 585.5555555555552)) + Result.extend_point (create {EV_COORDINATE}.make_precise (220.80555555555551, 589.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (225.24999999999994, 587.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (219.9166666666666, 592.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (214.13888888888889, 598.88888888888846)) + Result.extend_point (create {EV_COORDINATE}.make_precise (205.6944444444444, 603.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (190.13888888888886, 609.55555555555497)) + Result.extend_point (create {EV_COORDINATE}.make_precise (175.02777777777777, 621.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (157.25, 643.3333333333328)) + Result.extend_point (create {EV_COORDINATE}.make_precise (146.58333333333331, 652.22222222222172)) + Result.extend_point (create {EV_COORDINATE}.make_precise (137.69444444444446, 658.44444444444366)) + end + + hainan: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (763.02777777777737, 601.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (760.8055555555552, 598.88888888888846)) + Result.extend_point (create {EV_COORDINATE}.make_precise (764.8055555555552, 596.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (767.47222222222217, 599.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (770.5833333333328, 599.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (771.47222222222217, 608.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (765.25, 615.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (763.91666666666617, 618.88888888888835)) + Result.extend_point (create {EV_COORDINATE}.make_precise (763.02777777777737, 625.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (759.91666666666663, 628.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (761.69444444444412, 630.444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (759.02777777777737, 631.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (756.36111111111074, 631.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (751.02777777777737, 634.88888888888823)) + Result.extend_point (create {EV_COORDINATE}.make_precise (751.47222222222217, 638.444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (749.25, 639.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (746.58333333333303, 637.99999999999932)) + Result.extend_point (create {EV_COORDINATE}.make_precise (742.58333333333303, 640.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (743.9166666666664, 642.444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (738.13888888888846, 643.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (735.9166666666664, 641.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (731.02777777777737, 641.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (724.80555555555532, 639.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (721.69444444444412, 637.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (719.02777777777715, 636.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (718.58333333333303, 631.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (717.69444444444412, 627.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (718.13888888888869, 620.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (718.13888888888869, 616.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (724.36111111111086, 611.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (729.69444444444412, 607.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (729.25, 605.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (732.80555555555532, 603.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (737.24999999999977, 604.22222222222183)) + Result.extend_point (create {EV_COORDINATE}.make_precise (738.13888888888846, 600.22222222222149)) + Result.extend_point (create {EV_COORDINATE}.make_precise (741.25, 600.22222222222149)) + Result.extend_point (create {EV_COORDINATE}.make_precise (744.8055555555552, 600.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (749.69444444444412, 600.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (753.24999999999966, 598.88888888888846)) + Result.extend_point (create {EV_COORDINATE}.make_precise (757.25, 597.5555555555552)) + end + + taiwan: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (1009.2499999999995, 473.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1009.694444444444, 469.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1012.8055555555549, 469.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1015.0277777777774, 472.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1019.0277777777774, 473.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1023.0277777777774, 477.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1020.3611111111106, 478.88888888888846)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1017.6944444444437, 483.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1019.4722222222218, 488.22222222222183)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1019.4722222222218, 494.444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1014.1388888888883, 499.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1013.25, 501.55555555555497)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1012.8055555555549, 512.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1009.694444444444, 520.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1007.4722222222215, 527.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1000.805555555555, 533.55555555555497)) + Result.extend_point (create {EV_COORDINATE}.make_precise (998.1388888888888, 539.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (997.694444444444, 544.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (997.694444444444, 550.44444444444366)) + Result.extend_point (create {EV_COORDINATE}.make_precise (995.47222222222149, 553.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (993.25, 553.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (992.36111111111063, 550)) + Result.extend_point (create {EV_COORDINATE}.make_precise (992.36111111111063, 547.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (989.694444444444, 542.444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (987.02777777777737, 540.22222222222183)) + Result.extend_point (create {EV_COORDINATE}.make_precise (983.02777777777737, 538.88888888888846)) + Result.extend_point (create {EV_COORDINATE}.make_precise (980.8055555555552, 528.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (978.13888888888823, 524.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (979.47222222222183, 518.444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (980.36111111111063, 506.444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (983.02777777777737, 505.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (985.694444444444, 498)) + Result.extend_point (create {EV_COORDINATE}.make_precise (990.58333333333303, 491.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (991.91666666666606, 487.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (994.58333333333269, 484.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (998.1388888888888, 478.444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1003.0277777777774, 474.88888888888835)) + end + +invariant + +-- correct_location: attached target_imp implies location = vitp.asia + +end diff --git a/jj_vitp/Interface/widgets/other_location_widgets/kamchatka_widget.e b/jj_vitp/Interface/widgets/other_location_widgets/kamchatka_widget.e new file mode 100644 index 0000000..e9bf8e0 --- /dev/null +++ b/jj_vitp/Interface/widgets/other_location_widgets/kamchatka_widget.e @@ -0,0 +1,855 @@ +note + description: "[ + Widget representing the brown land of Kamchatka and Sakhalin + ]" + author: "Jimmy J. Johnson" + +class + KAMCHATKA_WIDGET + +inherit + + LOCATION_WIDGET + redefine + build_widgets, + build_land + end + +create + default_create + +feature {NONE} -- Initialization + + build_widgets + -- Add widgets to Current + do + Precursor {LOCATION_WIDGET} -- calls `build_land' + -- Remove `text_widget' + prune_all (text_widget) + -- Make adjustments + scale_widget (Current, 0.07) + rotate_widget (land, 12.0) + set_point_position (0,0) + translate_widget (Current, 485, -10) + end + + build_land + -- Add `land' to Current and create the polygons. + do + Precursor {LOCATION_WIDGET} + -- Put polygons representing land into the `land' + land.extend (kamchatsky) + land.extend (shumshu) + land.extend (paramushir) + land.extend (atlasov) + land.extend (onekotan) + land.extend (makanrushi) + land.extend (kharimkotan) + land.extend (shiashkotan) + land.extend (ekarma) + land.extend (matua) + land.extend (rasshua) + land.extend (ketoy) + land.extend (simushir) + land.extend (sakhalin) + end + +feature {NONE} -- Implementation + + kamchatsky: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (0, 0)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-6.6666666666667425, -48)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-13.333333333333712, -83.333333333333329)) + Result.extend_point (create {EV_COORDINATE}.make_precise (355.33333333333326, -132)) + Result.extend_point (create {EV_COORDINATE}.make_precise (353.33333333333326, -120)) + Result.extend_point (create {EV_COORDINATE}.make_precise (348, -106.66666666666666)) + Result.extend_point (create {EV_COORDINATE}.make_precise (343.33333333333326, -93.333333333333329)) + Result.extend_point (create {EV_COORDINATE}.make_precise (342.66666666666652, -74.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (345.33333333333326, -65.333333333333329)) + Result.extend_point (create {EV_COORDINATE}.make_precise (348.66666666666652, -68)) + Result.extend_point (create {EV_COORDINATE}.make_precise (347.33333333333326, -59.333333333333329)) + Result.extend_point (create {EV_COORDINATE}.make_precise (353.33333333333326, -52)) + Result.extend_point (create {EV_COORDINATE}.make_precise (352.66666666666652, -34.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (346.66666666666652, -36.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (342, -40)) + Result.extend_point (create {EV_COORDINATE}.make_precise (342.66666666666652, -34)) + Result.extend_point (create {EV_COORDINATE}.make_precise (342.66666666666652, -24)) + Result.extend_point (create {EV_COORDINATE}.make_precise (344.66666666666652, -22)) + Result.extend_point (create {EV_COORDINATE}.make_precise (349.33333333333326, -22.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (350, -18.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (346.66666666666652, -12)) + Result.extend_point (create {EV_COORDINATE}.make_precise (354, -14)) + Result.extend_point (create {EV_COORDINATE}.make_precise (352.66666666666652, -8.6666666666666572)) + Result.extend_point (create {EV_COORDINATE}.make_precise (348, -2.6666666666666572)) + Result.extend_point (create {EV_COORDINATE}.make_precise (351.33333333333326, 4)) + Result.extend_point (create {EV_COORDINATE}.make_precise (353.33333333333326, -0.66666666666665719)) + Result.extend_point (create {EV_COORDINATE}.make_precise (358, -2.6666666666666572)) + Result.extend_point (create {EV_COORDINATE}.make_precise (356.66666666666652, 4)) + Result.extend_point (create {EV_COORDINATE}.make_precise (361.33333333333326, 4)) + Result.extend_point (create {EV_COORDINATE}.make_precise (360.66666666666652, 10.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (361.33333333333326, 16.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (358.66666666666652, 23.333333333333343)) + Result.extend_point (create {EV_COORDINATE}.make_precise (350.66666666666652, 18)) + Result.extend_point (create {EV_COORDINATE}.make_precise (333.33333333333326, 7.3333333333333428)) + Result.extend_point (create {EV_COORDINATE}.make_precise (336.66666666666652, 0.66666666666665719)) + Result.extend_point (create {EV_COORDINATE}.make_precise (341.33333333333326, -4)) + Result.extend_point (create {EV_COORDINATE}.make_precise (338, -4)) + Result.extend_point (create {EV_COORDINATE}.make_precise (330.66666666666652, 4)) + Result.extend_point (create {EV_COORDINATE}.make_precise (326, 1.3333333333333428)) + Result.extend_point (create {EV_COORDINATE}.make_precise (323.33333333333326, -1.3333333333333428)) + Result.extend_point (create {EV_COORDINATE}.make_precise (315.33333333333326, 0.66666666666665719)) + Result.extend_point (create {EV_COORDINATE}.make_precise (308.66666666666652, 4)) + Result.extend_point (create {EV_COORDINATE}.make_precise (301.33333333333326, 14)) + Result.extend_point (create {EV_COORDINATE}.make_precise (297.33333333333326, 12)) + Result.extend_point (create {EV_COORDINATE}.make_precise (290.66666666666652, 12)) + Result.extend_point (create {EV_COORDINATE}.make_precise (278, 18)) + Result.extend_point (create {EV_COORDINATE}.make_precise (263.33333333333326, 28)) + Result.extend_point (create {EV_COORDINATE}.make_precise (255.33333333333326, 34.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (244.66666666666652, 47.333333333333343)) + Result.extend_point (create {EV_COORDINATE}.make_precise (241.33333333333326, 44.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (244, 50.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (239.33333333333326, 53.333333333333343)) + Result.extend_point (create {EV_COORDINATE}.make_precise (237.33333333333326, 46.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (234.66666666666652, 45.333333333333343)) + Result.extend_point (create {EV_COORDINATE}.make_precise (234.66666666666652, 40)) + Result.extend_point (create {EV_COORDINATE}.make_precise (232.66666666666652, 31.333333333333343)) + Result.extend_point (create {EV_COORDINATE}.make_precise (228.66666666666652, 29.333333333333343)) + Result.extend_point (create {EV_COORDINATE}.make_precise (224.66666666666652, 28.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (222.66666666666652, 25.333333333333343)) + Result.extend_point (create {EV_COORDINATE}.make_precise (222.66666666666652, 30)) + Result.extend_point (create {EV_COORDINATE}.make_precise (212.66666666666652, 34.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (213.33333333333326, 38.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (217.33333333333326, 40)) + Result.extend_point (create {EV_COORDINATE}.make_precise (216.66666666666652, 43.333333333333343)) + Result.extend_point (create {EV_COORDINATE}.make_precise (213.33333333333326, 44.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (214.66666666666652, 50.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (222, 52.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (222, 49.333333333333343)) + Result.extend_point (create {EV_COORDINATE}.make_precise (226.66666666666652, 49.333333333333343)) + Result.extend_point (create {EV_COORDINATE}.make_precise (231.33333333333326, 49.333333333333343)) + Result.extend_point (create {EV_COORDINATE}.make_precise (230.66666666666652, 56.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (233.33333333333326, 60)) + Result.extend_point (create {EV_COORDINATE}.make_precise (227.33333333333326, 63.333333333333343)) + Result.extend_point (create {EV_COORDINATE}.make_precise (226.66666666666652, 70.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (222.66666666666652, 68.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (219.33333333333326, 72)) + Result.extend_point (create {EV_COORDINATE}.make_precise (219.33333333333326, 76)) + Result.extend_point (create {EV_COORDINATE}.make_precise (224.66666666666652, 76.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (228, 81.333333333333343)) + Result.extend_point (create {EV_COORDINATE}.make_precise (228, 88.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (225.33333333333326, 92.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (219.33333333333326, 94.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (218, 91.333333333333343)) + Result.extend_point (create {EV_COORDINATE}.make_precise (211.33333333333326, 88.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (214, 94.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (217.33333333333326, 101.99999999999991)) + Result.extend_point (create {EV_COORDINATE}.make_precise (220.66666666666652, 101.33333333333334)) + Result.extend_point (create {EV_COORDINATE}.make_precise (223.33333333333326, 108.66666666666666)) + Result.extend_point (create {EV_COORDINATE}.make_precise (219.33333333333326, 111.33333333333334)) + Result.extend_point (create {EV_COORDINATE}.make_precise (222, 115.99999999999991)) + Result.extend_point (create {EV_COORDINATE}.make_precise (220.66666666666652, 118.66666666666666)) + Result.extend_point (create {EV_COORDINATE}.make_precise (216.66666666666652, 118.66666666666666)) + Result.extend_point (create {EV_COORDINATE}.make_precise (216.66666666666652, 123.33333333333334)) + Result.extend_point (create {EV_COORDINATE}.make_precise (212.66666666666652, 127.33333333333334)) + Result.extend_point (create {EV_COORDINATE}.make_precise (221.33333333333326, 122.66666666666666)) + Result.extend_point (create {EV_COORDINATE}.make_precise (225.33333333333326, 130.66666666666666)) + Result.extend_point (create {EV_COORDINATE}.make_precise (220, 134.66666666666666)) + Result.extend_point (create {EV_COORDINATE}.make_precise (220, 137.99999999999991)) + Result.extend_point (create {EV_COORDINATE}.make_precise (225.33333333333326, 135.99999999999991)) + Result.extend_point (create {EV_COORDINATE}.make_precise (226, 142.66666666666666)) + Result.extend_point (create {EV_COORDINATE}.make_precise (219.33333333333326, 146.66666666666666)) + Result.extend_point (create {EV_COORDINATE}.make_precise (214.66666666666652, 145.33333333333334)) + Result.extend_point (create {EV_COORDINATE}.make_precise (214.66666666666652, 149.99999999999991)) + Result.extend_point (create {EV_COORDINATE}.make_precise (210.66666666666652, 155.33333333333334)) + Result.extend_point (create {EV_COORDINATE}.make_precise (212, 159.99999999999991)) + Result.extend_point (create {EV_COORDINATE}.make_precise (208.66666666666652, 167.99999999999991)) + Result.extend_point (create {EV_COORDINATE}.make_precise (205.33333333333326, 163.99999999999991)) + Result.extend_point (create {EV_COORDINATE}.make_precise (201.33333333333326, 169.33333333333334)) + Result.extend_point (create {EV_COORDINATE}.make_precise (204, 176.66666666666666)) + Result.extend_point (create {EV_COORDINATE}.make_precise (200, 181.33333333333334)) + Result.extend_point (create {EV_COORDINATE}.make_precise (201.33333333333326, 191.33333333333334)) + Result.extend_point (create {EV_COORDINATE}.make_precise (194, 197.99999999999997)) + Result.extend_point (create {EV_COORDINATE}.make_precise (189.33333333333326, 205.99999999999997)) + Result.extend_point (create {EV_COORDINATE}.make_precise (184, 213.99999999999997)) + Result.extend_point (create {EV_COORDINATE}.make_precise (178, 215.99999999999997)) + Result.extend_point (create {EV_COORDINATE}.make_precise (173.33333333333326, 225.33333333333334)) + Result.extend_point (create {EV_COORDINATE}.make_precise (168.66666666666652, 235.33333333333334)) + Result.extend_point (create {EV_COORDINATE}.make_precise (166.66666666666652, 240.66666666666666)) + Result.extend_point (create {EV_COORDINATE}.make_precise (162.66666666666652, 240.66666666666666)) + Result.extend_point (create {EV_COORDINATE}.make_precise (159.33333333333326, 245.99999999999997)) + Result.extend_point (create {EV_COORDINATE}.make_precise (156, 245.33333333333334)) + Result.extend_point (create {EV_COORDINATE}.make_precise (154.66666666666652, 250.66666666666666)) + Result.extend_point (create {EV_COORDINATE}.make_precise (146, 251.33333333333334)) + Result.extend_point (create {EV_COORDINATE}.make_precise (143.33333333333326, 253.99999999999997)) + Result.extend_point (create {EV_COORDINATE}.make_precise (139.33333333333326, 253.33333333333334)) + Result.extend_point (create {EV_COORDINATE}.make_precise (137.33333333333326, 255.99999999999997)) + Result.extend_point (create {EV_COORDINATE}.make_precise (132.66666666666652, 262.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (129.33333333333326, 268)) + Result.extend_point (create {EV_COORDINATE}.make_precise (126.66666666666652, 276)) + Result.extend_point (create {EV_COORDINATE}.make_precise (127.33333333333326, 281.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (118.66666666666652, 281.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (114, 287.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (104.66666666666652, 302.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (100, 303.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (92, 308.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (90.666666666666515, 314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (79.333333333333258, 324.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (74.666666666666515, 328)) + Result.extend_point (create {EV_COORDINATE}.make_precise (69.333333333333258, 331.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (62, 342.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (53.333333333333258, 350.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (51.333333333333258, 348)) + Result.extend_point (create {EV_COORDINATE}.make_precise (60.666666666666515, 336)) + Result.extend_point (create {EV_COORDINATE}.make_precise (61.333333333333258, 323.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (60.666666666666515, 319.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (57.333333333333258, 320.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (58, 309.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (56.666666666666515, 302.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (51.333333333333258, 295.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (46, 295.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (43.333333333333258, 291.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (41.333333333333258, 284.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (39.333333333333258, 271.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (36, 252.66666666666666)) + Result.extend_point (create {EV_COORDINATE}.make_precise (37.333333333333258, 235.99999999999997)) + Result.extend_point (create {EV_COORDINATE}.make_precise (36.666666666666515, 221.33333333333334)) + Result.extend_point (create {EV_COORDINATE}.make_precise (34.666666666666515, 194.66666666666666)) + Result.extend_point (create {EV_COORDINATE}.make_precise (36, 171.33333333333334)) + Result.extend_point (create {EV_COORDINATE}.make_precise (31.333333333333258, 148.66666666666666)) + Result.extend_point (create {EV_COORDINATE}.make_precise (26, 123.33333333333334)) + Result.extend_point (create {EV_COORDINATE}.make_precise (16.666666666666288, 100.66666666666666)) + Result.extend_point (create {EV_COORDINATE}.make_precise (13.333333333333258, 89.333333333333343)) + Result.extend_point (create {EV_COORDINATE}.make_precise (6.6666666666662877, 70.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (2.6666666666662877, 38.666666666666657)) + end + + shumshu: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (37.333333333333258, 350.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (40, 365.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (34, 376)) + Result.extend_point (create {EV_COORDINATE}.make_precise (30.666666666666515, 378)) + Result.extend_point (create {EV_COORDINATE}.make_precise (30.666666666666515, 384)) + Result.extend_point (create {EV_COORDINATE}.make_precise (22.666666666666515, 384.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (18.666666666666288, 384.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (13.333333333333258, 379.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (8.6666666666662877, 378)) + Result.extend_point (create {EV_COORDINATE}.make_precise (8, 373.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (10, 364)) + Result.extend_point (create {EV_COORDINATE}.make_precise (14, 363.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (24.666666666666515, 353.33333333333337)) + end + + paramushir: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-4.6666666666667425, 364.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (2, 366.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (5.1111111111108585, 366)) + Result.extend_point (create {EV_COORDINATE}.make_precise (6, 370.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (4.2222222222221717, 377.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (4.6666666666662877, 383.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (6.8888888888886868, 386.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (7.7777777777776009, 391.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (5.5555555555552019, 392.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (7.7777777777776009, 401.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (5.1111111111108585, 405.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1.5555555555552019, 404.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-2.8888888888891415, 406.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-6.4444444444447981, 412.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-4.6666666666667425, 417.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-6.8888888888891415, 419.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-9.5555555555556566, 422)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-10, 426.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-13.111111111111313, 430)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-14.888888888889142, 434.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-18, 440.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-22, 440.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-28.222222222222399, 449.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-31.777777777777828, 447.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-43.333333333333712, 449.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-47.333333333333712, 453.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-49.555555555555657, 453.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-54.444444444444798, 457.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-57.555555555555657, 465.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-62.444444444444798, 475.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-63.333333333333712, 470.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-66.888888888889142, 466.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-71.777777777777828, 466.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-78, 467.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-80.222222222222399, 462.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-77.555555555555657, 461.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-74.888888888889142, 454.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-74.888888888889142, 447.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-75.333333333333712, 442.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-78, 442)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-79.777777777777828, 437.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-78.888888888889142, 431.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-76.666666666666742, 430.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-72.666666666666742, 430.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-68.666666666666742, 433.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-66, 433.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-63.333333333333712, 429.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-59.777777777777828, 422.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-53.111111111111313, 423.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-48.666666666666742, 422)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-46.444444444444798, 419.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-42.888888888889142, 421.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-36.222222222222399, 418)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-30, 406)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-27.333333333333712, 401.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-24.222222222222399, 397.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-23.777777777777828, 390.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-21.555555555555657, 387.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-21.111111111111313, 382.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-18.444444444444798, 378.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-14.888888888889142, 372.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-9.5555555555556566, 367.33333333333337)) + end + + atlasov: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-55.777777777777828, 343.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-45.555555555555657, 342.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-42.888888888889142, 345.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-41.555555555555657, 343.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-38.444444444444798, 346)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-36.222222222222399, 350)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-37.555555555555657, 351.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-36.222222222222399, 354.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-38.888888888889142, 358.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-42.444444444444798, 360.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-46.444444444444798, 359.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-49.555555555555657, 359.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-53.555555555555657, 355.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-56.222222222222399, 349.11111111111097)) + end + + onekotan: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-114.88888888888914, 527.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-111.77777777777783, 526)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-111.33333333333371, 528.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-105.55555555555566, 529.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-107.77777777777783, 530.88888888888869)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-106.88888888888914, 536.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-108.2222222222224, 539.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-112.66666666666674, 542.88888888888869)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-114, 548.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-115.77777777777783, 550)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-116.2222222222224, 557.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-112.66666666666674, 561.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-112.66666666666674, 569.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-114.88888888888914, 573.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-118.4444444444448, 574.88888888888869)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-122.88888888888914, 578)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-126.88888888888914, 577.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-130.4444444444448, 577.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-133.55555555555566, 574)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-133.11111111111131, 564.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-129.55555555555566, 556.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-125.55555555555566, 550.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-125.55555555555566, 548.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-122, 542)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-119.77777777777783, 536.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-119.33333333333371, 532.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-115.77777777777783, 530.88888888888869)) + end + + makanrushi: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-155.33333333333371, 510)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-153.11111111111131, 508.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-154.88888888888914, 506)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-152.2222222222224, 501.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-147.77777777777783, 499.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-145.55555555555566, 503.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-146.88888888888914, 506.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-146.4444444444448, 509.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-148.2222222222224, 510.88888888888869)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-152.66666666666674, 511.33333333333337)) + end + + kharimkotan: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-147.77777777777783, 590.88888888888869)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-146, 593.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-142.88888888888914, 592.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-138.88888888888914, 592.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-137.11111111111131, 595.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-134.4444444444448, 596.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-134.4444444444448, 600.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-137.55555555555566, 604.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-139.77777777777783, 603.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-142, 605.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-145.11111111111131, 602)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-146.88888888888914, 597.55555555555554)) + end + + shiashkotan: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-180.66666666666674, 630.88888888888869)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-178, 630)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-176.66666666666674, 627.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-173.55555555555566, 627.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-170.88888888888914, 630.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-168.66666666666674, 631.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-170, 632.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-170.4444444444448, 636.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-174, 637.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-174, 641.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-178.4444444444448, 642)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-181.55555555555566, 643.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-183.33333333333371, 647.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-183.33333333333371, 650.88888888888869)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-186.88888888888914, 652.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-190.4444444444448, 652.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-191.33333333333371, 649.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-190.88888888888914, 645.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-187.77777777777783, 644.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-185.55555555555566, 645.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-181.55555555555566, 640.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-182, 636.22222222222217)) + end + + ekarma: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-195.77777777777783, 618.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-194, 620.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-190, 619.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-188.66666666666674, 623.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-191.77777777777783, 626)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-197.11111111111131, 626)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-197.11111111111131, 623.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-198.88888888888914, 620.22222222222217)) + end + + matua: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-263.33333333333371, 734.88888888888869)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-258.88888888888914, 739.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-254, 741.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-256.2222222222224, 742)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-255.77777777777783, 748.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-258, 746)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-260.66666666666674, 747.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-262, 745.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-265.11111111111131, 743.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-266.4444444444448, 736.22222222222217)) + end + + rasshua: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-277.11111111111131, 777.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-274, 781.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-273.11111111111131, 785.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-274.88888888888914, 789.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-276.2222222222224, 791.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-279.77777777777783, 793.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-280.2222222222224, 795.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-283.33333333333371, 795.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-284.2222222222224, 789.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-282.4444444444448, 788.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-283.33333333333371, 784.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-280.2222222222224, 778.88888888888869)) + end + + ketoy: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-333.55555555555566, 837.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-329.1111111111112, 834.88888888888869)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-328.66666666666674, 837.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-324.2222222222224, 836.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-322, 841.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-320.66666666666674, 843.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-322.88888888888903, 846.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-327.77777777777783, 847.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-332.2222222222224, 847.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-332.66666666666674, 845.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-334, 842.44444444444434)) + end + + simushir: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-353.55555555555566, 863.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-349.1111111111112, 864.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-343.77777777777783, 866.44444444444423)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-345.1111111111112, 869.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-346.88888888888903, 872.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-351.33333333333337, 875.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-353.1111111111112, 875.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-355.33333333333337, 879.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-355.33333333333337, 885.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-356.2222222222224, 888.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-361.55555555555566, 889.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-362.88888888888903, 893.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-365.55555555555566, 896.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-368.2222222222224, 901.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-371.77777777777783, 902.88888888888857)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-374, 905.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-377.1111111111112, 905.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-381.1111111111112, 908.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-383.77777777777783, 913.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-386.44444444444468, 917.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-390.88888888888903, 918.44444444444423)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-392.2222222222224, 917.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-395.33333333333337, 916.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-396.2222222222224, 913.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-398, 907.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-395.77777777777783, 905.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-389.1111111111112, 904.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-386.88888888888903, 905.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-383.77777777777783, 904.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-383.33333333333337, 900.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-380.66666666666674, 899.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-380.66666666666674, 895.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-374.44444444444468, 892.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-371.77777777777783, 888.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-367.77777777777783, 887.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-364.2222222222224, 881.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-360.2222222222224, 873.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-356.2222222222224, 867.77777777777771)) + end + + sakhalin: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-1275, 263.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1155, 243.33333333333334)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1148, 282.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1133, 338.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1129.5555555555557, 360.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1126.8888888888889, 377.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1127.7777777777778, 389.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1121.1111111111111, 421.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1108.6666666666667, 455.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1099.3333333333333, 471.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1101.1111111111111, 475.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1089.1111111111111, 507.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1086.8888888888889, 511.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1088.6666666666667, 513.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1088.6666666666667, 525.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1078, 543.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1079.7777777777778, 546)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1078.8888888888889, 555.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1077.5555555555557, 562.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1075.7777777777778, 569.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1067.3333333333335, 593.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1068.2222222222222, 594.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1063.7777777777778, 610)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1053.5555555555557, 618.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1049.5555555555557, 622.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1045.1111111111111, 625.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1037.1111111111111, 633.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1038.4444444444443, 636.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1037.1111111111111, 640.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1035.7777777777778, 644.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1036.2222222222222, 646.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1038, 649.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1036.6666666666667, 655.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1034, 660.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1030.4444444444443, 662.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1032.2222222222222, 664.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1034.8888888888889, 663.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1037.5555555555557, 663.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1038.4444444444443, 658.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1041.5555555555557, 654)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1040.2222222222222, 646.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1042.8888888888889, 643.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1043.7777777777778, 640.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1044.2222222222222, 638.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1046.4444444444443, 636.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1049.1111111111111, 630)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1051.3333333333335, 627.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1053.1111111111111, 623.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1055.3333333333335, 622.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1059.3333333333335, 616.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1062.8888888888889, 613.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1069.5555555555557, 610.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1071.3333333333335, 604.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1073.5555555555557, 605.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1078.4444444444443, 595.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1080.6666666666667, 594)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1084.2222222222222, 589.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1086.8888888888889, 585.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1091.7777777777778, 582)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1102, 578)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1112.6666666666667, 574.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1126.4444444444443, 572.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1123.3333333333333, 570.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1124.6666666666667, 568.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1137.1111111111111, 566.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1140.2222222222222, 564.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1145.1111111111111, 566.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1149.1111111111111, 564.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1153.1111111111111, 558.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1160.6666666666667, 558)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1162, 556.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1168.6666666666667, 560.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1165.5555555555557, 566.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1162.8888888888889, 565.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1160.6666666666667, 567.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1163.3333333333333, 569.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1159.3333333333333, 569.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1154, 570.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1151.7777777777778, 569.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1142, 569.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1142.8888888888889, 570.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1150.4444444444443, 571.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1160.6666666666667, 573.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1174, 579.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1187.7777777777778, 591.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1193.5555555555557, 598.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1196.6666666666667, 610.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1193.1111111111111, 617.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1192.2222222222222, 627.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1194, 633.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1205.1111111111111, 655.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1213.1111111111111, 679.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1217.5555555555557, 697.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1220.2222222222222, 703.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1220.2222222222222, 707.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1223.7777777777778, 714)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1226.8888888888889, 729.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1232.2222222222222, 750.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1232.2222222222222, 762.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1234, 767.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1232.6666666666667, 770)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1233.5555555555557, 774.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1231.7777777777778, 788.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1224.6666666666667, 808.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1216.6666666666667, 821.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1208.2222222222222, 831.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1206, 830.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1201.5555555555557, 836.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1198.8888888888889, 836.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1192.6666666666667, 845.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1190, 850.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1186.8888888888889, 863.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1186, 868.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1188.2222222222222, 874.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1181.5555555555557, 888.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1181.5555555555557, 897.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1175.3333333333333, 905.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1177.1111111111111, 909.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1183.3333333333333, 905.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1183.7777777777778, 911.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1178.8888888888889, 913.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1178.8888888888889, 920.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1176.2222222222222, 921.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1175.7777777777778, 925.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1170.4444444444443, 923.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1164.2222222222222, 924.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1160.6666666666667, 927.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1157.1111111111111, 926.44444444444423)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1156.2222222222222, 921.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1158.8888888888889, 919.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1162, 918.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1166.4444444444443, 916.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1174.4444444444443, 914.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1175.7777777777778, 912.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1173.5555555555557, 908.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1168.2222222222222, 911.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1161.5555555555557, 913.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1155.3333333333333, 913.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1152.6666666666667, 911.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1152.6666666666667, 908.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1150.8888888888889, 907.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1147.7777777777778, 910.44444444444423)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1145.1111111111111, 924.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1144.6666666666667, 940.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1141.1111111111111, 952.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1138, 966.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1134.8888888888889, 969.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1135.7777777777778, 972.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1138.4444444444443, 973.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1139.3333333333333, 976.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1138, 980.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1142, 981.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1145.1111111111111, 989.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1147.3333333333333, 993.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1149.5555555555557, 1000.6666666666666)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1148.2222222222222, 1004.2222222222221)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1148.6666666666667, 1008.2222222222221)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1151.3333333333333, 1009.9999999999999)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1151.3333333333333, 1014.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1153.5555555555557, 1016.2222222222221)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1155.7777777777778, 1007.3333333333334)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1154.4444444444443, 1003.3333333333334)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1153.1111111111111, 997.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1152.2222222222222, 988.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1155.7777777777778, 980.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1157.5555555555557, 974.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1159.7777777777778, 970.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1161.1111111111111, 962.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1160.6666666666667, 957.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1164.2222222222222, 952.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1172.2222222222222, 943.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1176.6666666666667, 940.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1181.5555555555557, 940.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1188.6666666666667, 941.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1191.7777777777778, 939.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1200.2222222222222, 936.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1203.3333333333333, 938.44444444444423)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1207.3333333333333, 940.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1210.4444444444443, 940.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1212.6666666666667, 936.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1215.3333333333333, 927.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1215.3333333333333, 922.44444444444423)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1219.7777777777778, 920.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1219.3333333333333, 922.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1227.3333333333333, 924.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1234.4444444444443, 928.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1239.3333333333333, 933.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1244.6666666666667, 945.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1247.7777777777778, 954.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1254, 971.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1258, 982.44444444444423)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1258.4444444444443, 993.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1261.1111111111111, 1001.5555555555555)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1263.3333333333333, 1005.5555555555555)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1263.7777777777778, 1013.5555555555555)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1266.4444444444443, 1017.111111111111)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1270.8888888888889, 1017.9999999999999)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1273.5555555555557, 1022.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1273.5555555555557, 1033.9999999999998)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1276.6666666666667, 1031.3333333333333)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1278.8888888888889, 1029.1111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1282, 1023.3333333333334)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1284.2222222222222, 1017.111111111111)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1290.4444444444443, 1012.6666666666666)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1288.2222222222222, 1011.7777777777777)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1288.6666666666667, 1001.5555555555555)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1291.3333333333333, 983.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1293.5555555555557, 969.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1298, 954.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1299.7777777777778, 947.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1299.7777777777778, 939.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1296.6666666666667, 939.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1296.2222222222222, 934.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1296.6666666666667, 926.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1294, 925.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1290.4444444444443, 915.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1287.3333333333333, 905.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1282.4444444444443, 893.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1278.8888888888889, 879.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1276.6666666666667, 865.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1278.8888888888889, 857.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1283.7777777777778, 849.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1285.5555555555557, 845.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1282.4444444444443, 838.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1284.6666666666667, 830)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1286, 816.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1286.4444444444443, 805.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1282.8888888888889, 798.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1282, 790)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1275.3333333333333, 775.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1274, 770.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1267.7777777777778, 761.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1264.2222222222222, 755.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1265.5555555555557, 751.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1267.3333333333333, 731.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1266.8888888888889, 720.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1268.2222222222222, 717.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1267.7777777777778, 711.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1271.3333333333333, 705.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1274.8888888888889, 694)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1284.6666666666667, 679.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1293.5555555555557, 662.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1295.3333333333333, 647.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1293.1111111111111, 639.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1289.1111111111111, 636.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1285.5555555555557, 630.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1286.8888888888889, 625.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1282, 622)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1282, 612.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1279.7777777777778, 609.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1280.6666666666667, 597.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1277.5555555555557, 590.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1274.4444444444443, 582.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1275.7777777777778, 579.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1275.7777777777778, 562)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1272.6666666666667, 555.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1270.4444444444443, 550)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1269.1111111111111, 526)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1268.2222222222222, 521.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1267.3333333333333, 502.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1269.1111111111111, 501.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1270.8888888888889, 488.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1268.2222222222222, 485.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1269.5555555555557, 481.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1268.2222222222222, 472.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1266.4444444444443, 461.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1268.6666666666667, 436.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1271.3333333333333, 431.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1268.2222222222222, 429.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1269.1111111111111, 421.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1274.4444444444443, 411.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1275.7777777777778, 403.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1277.5555555555557, 400.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1278.4444444444443, 389.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1275.7777777777778, 376.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1273.5555555555557, 370.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1273.5555555555557, 358.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1271.7777777777778, 350.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1272.2222222222222, 345.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1265.1111111111111, 339.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1260.6666666666667, 329.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1259.3333333333333, 318.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1258.4444444444443, 309.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1261.5555555555557, 304.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1265.1111111111111, 299.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1266.8888888888889, 291.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1265.5555555555557, 288.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1268.2222222222222, 283.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1271.3333333333333, 280.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1273.5555555555557, 272.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1275.3333333333333, 268.22222222222217)) + end + +invariant + +-- correct_location: attached target_imp implies location = vitp.kamchatka + +end diff --git a/jj_vitp/Interface/widgets/other_location_widgets/marshalls_north_widget.e b/jj_vitp/Interface/widgets/other_location_widgets/marshalls_north_widget.e new file mode 100644 index 0000000..fcd6c29 --- /dev/null +++ b/jj_vitp/Interface/widgets/other_location_widgets/marshalls_north_widget.e @@ -0,0 +1,497 @@ +note + description: "[ + Widget representing the brown land of the Northern Marshall Islands + ]" + author: "Jimmy J. Johnson" + +class + MARSHALLS_NORTH_WIDGET + +inherit + + LOCATION_WIDGET + redefine + build_widgets, + build_land + end + +create + default_create + +feature {NONE} -- Initialization + + build_widgets + -- Add widgets to Current + do + Precursor {LOCATION_WIDGET} -- calls `build_land' + -- Remove `text_widget' + prune_all (text_widget) + -- Make adjustments + scale_widget (land, 0.07) +-- scale_widget (land, 0.08) + rotate_widget (land, 13.0) + translate_widget (Current, 450, -265) + end + + build_land + -- Add `land' to Current and create the polygons. + do + Precursor {LOCATION_WIDGET} + -- Put polygons representing land into the `land' + land.extend (wake) + land.extend (taongi_atoll) + land.extend (bikar_atoll) + land.extend (utrik_atoll) + land.extend (taka_atoll) + land.extend (ailuk_atoll) + land.extend (likiep_atoll) + land.extend (wotje_atoll) + land.extend (erikub_atoll) + land.extend (kwajalein_atoll) + land.extend (namu_atoll) + land.extend (ailinglaplap_atoll) + land.extend (maloelap_atoll) + land.extend (aur_atoll) + land.extend (majuro_atoll) + land.extend (amo_atoll) + land.extend (ujae_atoll) + land.extend (wotho_atoll) + land.extend (ailinginae_atoll) + land.extend (rongelap_atoll) + land.extend (rongerik_atoll) + land.extend (bikini_atoll) + land.extend (enewetak_atoll) + end + +feature {NONE} -- Implemetation + + wake: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (0, 0)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-2.3703703703703241, -1.7777777777777768)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-2.074074074074133, -5.0370370370370345)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1.1851851851852189, -7.1111111111111072)) + Result.extend_point (create {EV_COORDINATE}.make_precise (3.5555555555555429, -5.3333333333333321)) + Result.extend_point (create {EV_COORDINATE}.make_precise (3.2592592592592382, -1.1851851851851833)) + end + + taongi_atoll: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (205.33333333333337, 433.18518518518511)) + Result.extend_point (create {EV_COORDINATE}.make_precise (210.37037037037032, 432.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (216.5925925925925, 436.1481481481481)) + Result.extend_point (create {EV_COORDINATE}.make_precise (220.14814814814815, 443.55555555555549)) + Result.extend_point (create {EV_COORDINATE}.make_precise (217.48148148148141, 446.81481481481467)) + Result.extend_point (create {EV_COORDINATE}.make_precise (211.55555555555554, 450.96296296296288)) + Result.extend_point (create {EV_COORDINATE}.make_precise (209.77777777777771, 448.59259259259244)) + Result.extend_point (create {EV_COORDINATE}.make_precise (210.96296296296293, 445.62962962962956)) + Result.extend_point (create {EV_COORDINATE}.make_precise (210.07407407407402, 441.18518518518511)) + Result.extend_point (create {EV_COORDINATE}.make_precise (207.70370370370358, 435.85185185185179)) + end + + bikar_atoll: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (314.07407407407402, 661.92592592592575)) + Result.extend_point (create {EV_COORDINATE}.make_precise (315.25925925925912, 659.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (317.92592592592575, 661.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (320, 661.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (322.66666666666663, 665.18518518518511)) + Result.extend_point (create {EV_COORDINATE}.make_precise (320.29629629629619, 669.92592592592575)) + Result.extend_point (create {EV_COORDINATE}.make_precise (318.51851851851859, 672.29629629629619)) + Result.extend_point (create {EV_COORDINATE}.make_precise (317.33333333333337, 670.81481481481455)) + Result.extend_point (create {EV_COORDINATE}.make_precise (315.55555555555554, 670.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (313.77777777777771, 666.96296296296282)) + Result.extend_point (create {EV_COORDINATE}.make_precise (314.96296296296293, 664.29629629629619)) + end + + utrik_atoll: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (289.77777777777771, 748.74074074074065)) + Result.extend_point (create {EV_COORDINATE}.make_precise (291.25925925925912, 752.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (298.07407407407402, 759.70370370370358)) + Result.extend_point (create {EV_COORDINATE}.make_precise (290.66666666666663, 762.96296296296282)) + Result.extend_point (create {EV_COORDINATE}.make_precise (287.40740740740739, 764.14814814814792)) + Result.extend_point (create {EV_COORDINATE}.make_precise (284.44444444444434, 760.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (284.44444444444434, 752.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (285.62962962962956, 749.92592592592575)) + end + + taka_atoll: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (266.07407407407402, 762.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (272.29629629629619, 762.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (278.81481481481478, 760.59259259259238)) + Result.extend_point (create {EV_COORDINATE}.make_precise (281.48148148148141, 761.4814814814813)) + Result.extend_point (create {EV_COORDINATE}.make_precise (279.70370370370358, 763.85185185185173)) + Result.extend_point (create {EV_COORDINATE}.make_precise (279.70370370370358, 771.85185185185173)) + Result.extend_point (create {EV_COORDINATE}.make_precise (275.55555555555554, 773.92592592592575)) + Result.extend_point (create {EV_COORDINATE}.make_precise (271.40740740740739, 773.92592592592575)) + Result.extend_point (create {EV_COORDINATE}.make_precise (268.74074074074076, 769.18518518518499)) + end + + ailuk_atoll: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (293.03703703703695, 846.51851851851836)) + Result.extend_point (create {EV_COORDINATE}.make_precise (297.77777777777771, 843.85185185185173)) + Result.extend_point (create {EV_COORDINATE}.make_precise (300.14814814814815, 830.51851851851836)) + Result.extend_point (create {EV_COORDINATE}.make_precise (304.5925925925925, 829.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (307.25925925925912, 836.74074074074065)) + Result.extend_point (create {EV_COORDINATE}.make_precise (306.07407407407402, 844.14814814814792)) + Result.extend_point (create {EV_COORDINATE}.make_precise (307.25925925925912, 854.51851851851836)) + Result.extend_point (create {EV_COORDINATE}.make_precise (304, 853.62962962962956)) + Result.extend_point (create {EV_COORDINATE}.make_precise (297.77777777777771, 854.81481481481455)) + end + + likiep_Atoll: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (217.18518518518522, 883.25925925925912)) + Result.extend_point (create {EV_COORDINATE}.make_precise (216.5925925925925, 880.29629629629619)) + Result.extend_point (create {EV_COORDINATE}.make_precise (217.77777777777771, 878.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (217.77777777777771, 873.4814814814813)) + Result.extend_point (create {EV_COORDINATE}.make_precise (215.40740740740739, 868.74074074074065)) + Result.extend_point (create {EV_COORDINATE}.make_precise (220.44444444444434, 869.92592592592575)) + Result.extend_point (create {EV_COORDINATE}.make_precise (225.18518518518522, 869.92592592592575)) + Result.extend_point (create {EV_COORDINATE}.make_precise (229.62962962962956, 875.25925925925912)) + Result.extend_point (create {EV_COORDINATE}.make_precise (243.25925925925912, 881.7777777777776)) + Result.extend_point (create {EV_COORDINATE}.make_precise (247.11111111111097, 890.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (236.14814814814815, 890.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (235.25925925925912, 893.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (227.25925925925912, 893.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (226.37037037037032, 889.18518518518499)) + end + + wotje_atoll: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (300.14814814814815, 936.88888888888869)) + Result.extend_point (create {EV_COORDINATE}.make_precise (293.92592592592575, 927.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (290.66666666666663, 927.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (290.07407407407402, 920.88888888888869)) + Result.extend_point (create {EV_COORDINATE}.make_precise (292.14814814814815, 917.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (315.55555555555554, 917.62962962962956)) + Result.extend_point (create {EV_COORDINATE}.make_precise (322.37037037037032, 913.4814814814813)) + Result.extend_point (create {EV_COORDINATE}.make_precise (331.55555555555554, 921.4814814814813)) + Result.extend_point (create {EV_COORDINATE}.make_precise (329.48148148148141, 930.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (316.44444444444434, 931.55555555555532)) + Result.extend_point (create {EV_COORDINATE}.make_precise (312.5925925925925, 934.51851851851836)) + end + + erikub_atoll: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (298.96296296296293, 952.29629629629619)) + Result.extend_point (create {EV_COORDINATE}.make_precise (299.85185185185185, 941.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (305.77777777777771, 940.74074074074065)) + Result.extend_point (create {EV_COORDINATE}.make_precise (313.77777777777771, 946.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (319.70370370370358, 956.74074074074065)) + Result.extend_point (create {EV_COORDINATE}.make_precise (319.11111111111097, 964.74074074074065)) + Result.extend_point (create {EV_COORDINATE}.make_precise (312.5925925925925, 966.51851851851836)) + Result.extend_point (create {EV_COORDINATE}.make_precise (309.92592592592575, 959.70370370370358)) + Result.extend_point (create {EV_COORDINATE}.make_precise (305.18518518518522, 958.22222222222194)) + Result.extend_point (create {EV_COORDINATE}.make_precise (303.11111111111097, 955.25925925925912)) + end + + kwajalein_atoll: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (18.96296296296299, 935.11111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (33.185185185185219, 935.70370370370358)) + Result.extend_point (create {EV_COORDINATE}.make_precise (43.851851851851904, 932.14814814814792)) + Result.extend_point (create {EV_COORDINATE}.make_precise (62.222222222222172, 937.18518518518499)) + Result.extend_point (create {EV_COORDINATE}.make_precise (71.111111111111086, 934.22222222222194)) + Result.extend_point (create {EV_COORDINATE}.make_precise (74.370370370370324, 934.51851851851836)) + Result.extend_point (create {EV_COORDINATE}.make_precise (81.185185185185219, 928.29629629629619)) + Result.extend_point (create {EV_COORDINATE}.make_precise (83.259259259259238, 937.18518518518499)) + Result.extend_point (create {EV_COORDINATE}.make_precise (94.51851851851859, 948.44444444444412)) + Result.extend_point (create {EV_COORDINATE}.make_precise (104.8888888888888, 958.22222222222194)) + Result.extend_point (create {EV_COORDINATE}.make_precise (102.81481481481478, 963.55555555555532)) + Result.extend_point (create {EV_COORDINATE}.make_precise (106.96296296296293, 974.81481481481455)) + Result.extend_point (create {EV_COORDINATE}.make_precise (102.81481481481478, 979.85185185185173)) + Result.extend_point (create {EV_COORDINATE}.make_precise (103.11111111111109, 993.4814814814813)) + Result.extend_point (create {EV_COORDINATE}.make_precise (91.259259259259238, 986.37037037037021)) + Result.extend_point (create {EV_COORDINATE}.make_precise (85.629629629629676, 979.25925925925912)) + Result.extend_point (create {EV_COORDINATE}.make_precise (84.148148148148152, 970.96296296296282)) + Result.extend_point (create {EV_COORDINATE}.make_precise (86.51851851851859, 966.22222222222194)) + Result.extend_point (create {EV_COORDINATE}.make_precise (78.51851851851859, 959.70370370370358)) + Result.extend_point (create {EV_COORDINATE}.make_precise (69.333333333333371, 956.74074074074065)) + Result.extend_point (create {EV_COORDINATE}.make_precise (58.666666666666629, 959.11111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (51.851851851851848, 954.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (46.222222222222172, 955.85185185185173)) + Result.extend_point (create {EV_COORDINATE}.make_precise (34.370370370370324, 946.37037037037021)) + Result.extend_point (create {EV_COORDINATE}.make_precise (27.555555555555543, 942.51851851851836)) + Result.extend_point (create {EV_COORDINATE}.make_precise (21.925925925925867, 939.55555555555532)) + end + + namu_atoll: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (123.55555555555554, 1042.3703703703702)) + Result.extend_point (create {EV_COORDINATE}.make_precise (123.25925925925924, 1039.1111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (126.81481481481478, 1038.2222222222219)) + Result.extend_point (create {EV_COORDINATE}.make_precise (130.66666666666663, 1039.9999999999998)) + Result.extend_point (create {EV_COORDINATE}.make_precise (144.2962962962963, 1041.185185185185)) + Result.extend_point (create {EV_COORDINATE}.make_precise (144, 1051.5555555555552)) + Result.extend_point (create {EV_COORDINATE}.make_precise (144.8888888888888, 1057.4814814814813)) + Result.extend_point (create {EV_COORDINATE}.make_precise (152, 1068.1481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (156.74074074074076, 1073.7777777777774)) + Result.extend_point (create {EV_COORDINATE}.make_precise (154.66666666666663, 1079.9999999999998)) + Result.extend_point (create {EV_COORDINATE}.make_precise (145.77777777777771, 1082.0740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (141.03703703703695, 1071.4074074074074)) + Result.extend_point (create {EV_COORDINATE}.make_precise (142.81481481481478, 1067.2592592592591)) + Result.extend_point (create {EV_COORDINATE}.make_precise (138.07407407407402, 1061.9259259259256)) + Result.extend_point (create {EV_COORDINATE}.make_precise (135.11111111111109, 1051.8518518518517)) + Result.extend_point (create {EV_COORDINATE}.make_precise (127.11111111111109, 1048.8888888888887)) + end + + ailinglaplap_atoll: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (176.5925925925925, 1108.4444444444441)) + Result.extend_point (create {EV_COORDINATE}.make_precise (181.62962962962968, 1104.5925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (188.74074074074076, 1104.2962962962961)) + Result.extend_point (create {EV_COORDINATE}.make_precise (194.96296296296293, 1101.6296296296296)) + Result.extend_point (create {EV_COORDINATE}.make_precise (201.18518518518522, 1101.333333333333)) + Result.extend_point (create {EV_COORDINATE}.make_precise (205.62962962962968, 1097.4814814814813)) + Result.extend_point (create {EV_COORDINATE}.make_precise (210.07407407407402, 1093.6296296296296)) + Result.extend_point (create {EV_COORDINATE}.make_precise (216.5925925925925, 1094.2222222222219)) + Result.extend_point (create {EV_COORDINATE}.make_precise (213.03703703703695, 1099.8518518518517)) + Result.extend_point (create {EV_COORDINATE}.make_precise (213.62962962962968, 1107.8518518518517)) + Result.extend_point (create {EV_COORDINATE}.make_precise (207.11111111111109, 1114.0740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (208, 1120.5925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (201.18518518518522, 1125.9259259259256)) + Result.extend_point (create {EV_COORDINATE}.make_precise (198.22222222222217, 1129.185185185185)) + Result.extend_point (create {EV_COORDINATE}.make_precise (191.70370370370358, 1126.2222222222219)) + Result.extend_point (create {EV_COORDINATE}.make_precise (189.62962962962968, 1122.6666666666665)) + Result.extend_point (create {EV_COORDINATE}.make_precise (180.14814814814815, 1116.1481481481478)) + end + + maloelap_atoll: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (380.74074074074076, 974.81481481481455)) + Result.extend_point (create {EV_COORDINATE}.make_precise (394.07407407407402, 973.92592592592575)) + Result.extend_point (create {EV_COORDINATE}.make_precise (404.14814814814815, 976.59259259259238)) + Result.extend_point (create {EV_COORDINATE}.make_precise (412.44444444444434, 984.29629629629619)) + Result.extend_point (create {EV_COORDINATE}.make_precise (417.48148148148141, 985.77777777777749)) + Result.extend_point (create {EV_COORDINATE}.make_precise (421.62962962962956, 992.88888888888869)) + Result.extend_point (create {EV_COORDINATE}.make_precise (416.29629629629619, 1000.8888888888887)) + Result.extend_point (create {EV_COORDINATE}.make_precise (415.70370370370358, 1009.4814814814813)) + Result.extend_point (create {EV_COORDINATE}.make_precise (416.8888888888888, 1013.037037037037)) + Result.extend_point (create {EV_COORDINATE}.make_precise (412.74074074074076, 1014.2222222222219)) + Result.extend_point (create {EV_COORDINATE}.make_precise (404.14814814814815, 1013.037037037037)) + Result.extend_point (create {EV_COORDINATE}.make_precise (400.29629629629619, 1007.1111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (399.40740740740739, 1002.074074074074)) + Result.extend_point (create {EV_COORDINATE}.make_precise (392, 988.74074074074065)) + Result.extend_point (create {EV_COORDINATE}.make_precise (386.96296296296293, 984.29629629629619)) + end + + aur_atoll: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (400.29629629629619, 1039.4074074074074)) + Result.extend_point (create {EV_COORDINATE}.make_precise (402.66666666666663, 1023.9999999999998)) + Result.extend_point (create {EV_COORDINATE}.make_precise (413.33333333333337, 1029.037037037037)) + Result.extend_point (create {EV_COORDINATE}.make_precise (413.03703703703695, 1038.2222222222219)) + Result.extend_point (create {EV_COORDINATE}.make_precise (415.70370370370358, 1041.4814814814813)) + Result.extend_point (create {EV_COORDINATE}.make_precise (415.11111111111097, 1047.1111111111109)) + end + + majuro_atoll: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (401.18518518518522, 1136.8888888888887)) + Result.extend_point (create {EV_COORDINATE}.make_precise (404.44444444444434, 1129.4814814814813)) + Result.extend_point (create {EV_COORDINATE}.make_precise (416.5925925925925, 1135.4074074074074)) + Result.extend_point (create {EV_COORDINATE}.make_precise (423.11111111111097, 1134.5185185185182)) + Result.extend_point (create {EV_COORDINATE}.make_precise (432.29629629629619, 1137.7777777777774)) + Result.extend_point (create {EV_COORDINATE}.make_precise (434.96296296296293, 1141.6296296296296)) + Result.extend_point (create {EV_COORDINATE}.make_precise (418.96296296296293, 1146.6666666666665)) + end + + amo_atoll: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (449.48148148148141, 1142.2222222222219)) + Result.extend_point (create {EV_COORDINATE}.make_precise (456.88888888888869, 1129.7777777777774)) + Result.extend_point (create {EV_COORDINATE}.make_precise (459.55555555555532, 1136.2962962962961)) + Result.extend_point (create {EV_COORDINATE}.make_precise (462.81481481481478, 1136.8888888888887)) + Result.extend_point (create {EV_COORDINATE}.make_precise (469.33333333333314, 1141.037037037037)) + Result.extend_point (create {EV_COORDINATE}.make_precise (478.22222222222206, 1141.037037037037)) + Result.extend_point (create {EV_COORDINATE}.make_precise (483.55555555555532, 1138.3703703703702)) + Result.extend_point (create {EV_COORDINATE}.make_precise (483.85185185185185, 1141.6296296296296)) + Result.extend_point (create {EV_COORDINATE}.make_precise (477.92592592592575, 1143.9999999999998)) + Result.extend_point (create {EV_COORDINATE}.make_precise (470.81481481481478, 1149.9259259259256)) + Result.extend_point (create {EV_COORDINATE}.make_precise (469.33333333333314, 1157.037037037037)) + Result.extend_point (create {EV_COORDINATE}.make_precise (460.74074074074076, 1150.8148148148146)) + Result.extend_point (create {EV_COORDINATE}.make_precise (454.51851851851859, 1151.7037037037035)) + end + + ujae_atoll: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-100.44444444444446, 944.88888888888869)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-98.370370370370324, 943.70370370370358)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-93.333333333333314, 949.92592592592575)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-86.814814814814781, 951.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-77.03703703703701, 972.74074074074065)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-88.296296296296305, 968.59259259259238)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-95.407407407407391, 962.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-97.777777777777828, 952.88888888888869)) + end + + wotho_atoll: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-63.703703703703695, 854.81481481481455)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-53.925925925925924, 856.59259259259238)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-53.925925925925924, 860.14814814814792)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-56, 862.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-51.851851851851848, 869.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-53.629629629629619, 872.59259259259238)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-60.740740740740705, 868.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-62.518518518518533, 862.51851851851836)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-64.296296296296305, 860.44444444444434)) + end + + ailinginae_atoll: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-29.03703703703701, 764.14814814814792)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-18.666666666666629, 765.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-10.074074074074133, 763.85185185185173)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-7.1111111111111427, 765.92592592592575)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-6.8148148148147811, 771.25925925925912)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-9.4814814814814099, 772.74074074074065)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-12.148148148148096, 771.25925925925912)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-21.629629629629619, 771.85185185185173)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-28.740740740740705, 769.7777777777776)) + end + + rongelap_atoll: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (0.88888888888885731, 758.81481481481455)) + Result.extend_point (create {EV_COORDINATE}.make_precise (0.59259259259255259, 747.25925925925912)) + Result.extend_point (create {EV_COORDINATE}.make_precise (5.925925925925867, 737.4814814814813)) + Result.extend_point (create {EV_COORDINATE}.make_precise (16, 737.7777777777776)) + Result.extend_point (create {EV_COORDINATE}.make_precise (21.925925925925867, 733.92592592592575)) + Result.extend_point (create {EV_COORDINATE}.make_precise (30.51851851851859, 739.85185185185173)) + Result.extend_point (create {EV_COORDINATE}.make_precise (37.333333333333371, 736.29629629629619)) + Result.extend_point (create {EV_COORDINATE}.make_precise (41.777777777777771, 738.96296296296282)) + Result.extend_point (create {EV_COORDINATE}.make_precise (38.814814814814781, 742.51851851851836)) + Result.extend_point (create {EV_COORDINATE}.make_precise (36.444444444444457, 747.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (30.51851851851859, 748.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (25.481481481481467, 754.96296296296282)) + Result.extend_point (create {EV_COORDINATE}.make_precise (27.259259259259238, 767.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (20.148148148148152, 768.59259259259238)) + Result.extend_point (create {EV_COORDINATE}.make_precise (12.148148148148152, 767.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (6.8148148148147811, 762.37037037037021)) + end + + rongerik_atoll: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (68.148148148148152, 746.37037037037021)) + Result.extend_point (create {EV_COORDINATE}.make_precise (70.222222222222172, 741.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (83.555555555555543, 742.81481481481455)) + Result.extend_point (create {EV_COORDINATE}.make_precise (84.444444444444457, 746.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (82.370370370370324, 747.85185185185173)) + Result.extend_point (create {EV_COORDINATE}.make_precise (81.185185185185219, 755.85185185185173)) + Result.extend_point (create {EV_COORDINATE}.make_precise (77.629629629629676, 755.25925925925912)) + Result.extend_point (create {EV_COORDINATE}.make_precise (72.592592592592496, 757.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (72.592592592592496, 751.11111111111097)) + end + + bikini_atoll: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-129.48148148148141, 722.96296296296282)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-120.88888888888891, 714.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-114.96296296296293, 716.14814814814792)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-109.92592592592592, 713.7777777777776)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-102.81481481481478, 719.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-94.518518518518533, 720.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-93.03703703703701, 733.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-96.592592592592609, 734.81481481481455)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-106.66666666666663, 735.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-118.81481481481478, 737.18518518518499)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-120, 733.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-128.2962962962963, 727.70370370370358)) + end + + enewetak_atoll: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-416.29629629629625, 731.25925925925912)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-409.18518518518511, 719.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-401.77777777777771, 717.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-397.92592592592587, 717.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-394.66666666666663, 721.4814814814813)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-390.22222222222217, 722.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-389.62962962962956, 728.29629629629619)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-383.11111111111109, 735.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-385.18518518518511, 745.7777777777776)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-390.51851851851848, 751.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-401.18518518518511, 750.81481481481455)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-410.37037037037032, 745.7777777777776)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-413.03703703703695, 735.11111111111097)) + end + +invariant + +-- correct_location: attached target_imp implies location = vitp.marshalls_north + +end diff --git a/jj_vitp/Interface/widgets/other_location_widgets/marshalls_south_widget.e b/jj_vitp/Interface/widgets/other_location_widgets/marshalls_south_widget.e new file mode 100644 index 0000000..900f206 --- /dev/null +++ b/jj_vitp/Interface/widgets/other_location_widgets/marshalls_south_widget.e @@ -0,0 +1,352 @@ +note + description: "[ + Widget representing the brown land of the Southern Marshall Islands + ]" + author: "Jimmy J. Johnson" + +class + MARSHALLS_SOUTH_WIDGET + +inherit + + LOCATION_WIDGET + redefine + build_widgets, + build_land + end + +create + default_create + +feature {NONE} -- Initialization + + build_widgets + -- Add widgets to Current + do + Precursor {LOCATION_WIDGET} -- calls `build_land' + -- Remove `text_widget' + prune_all (text_widget) + -- Make adjustments + scale_widget (land, 0.07) + rotate_widget (land, 13.0) + translate_widget (Current, 78, -139) + end + + build_land + -- Add `land' to Current and create the polygons. + do + Precursor {LOCATION_WIDGET} + -- Put polygons representing land into the `land' +-- land.extend (kajalein_south) +-- land.extend (maloelap_south) + land.extend (mili_atoll) + land.extend (butaritari_atoll) + land.extend (abalng_island) + land.extend (tarawa_island) + land.extend (majana_island) + land.extend (kuna_island) + land.extend (aranuka_island) + land.extend (abemama_island) + land.extend (nonouti_island) + land.extend (tabiteuea_island) + land.extend (onotoa_island) + land.extend (beru_island) + land.extend (jaluit_atoll) + end + +feature {NONE} -- Implementation + + kajalein_south: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (0, 0)) + Result.extend_point (create {EV_COORDINATE}.make_precise (13.333333333333343, 0.59259259259259522)) + Result.extend_point (create {EV_COORDINATE}.make_precise (25.18518518518519, -2.3703703703703667)) + Result.extend_point (create {EV_COORDINATE}.make_precise (45.925925925925895, 2.0740740740740762)) + Result.extend_point (create {EV_COORDINATE}.make_precise (63.407407407407391, 1.7777777777777786)) + Result.extend_point (create {EV_COORDINATE}.make_precise (82.962962962962933, 20.148148148148138)) + Result.extend_point (create {EV_COORDINATE}.make_precise (83.555555555555543, 29.925925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (88, 40.888888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (84.444444444444457, 46.222222222222214)) + Result.extend_point (create {EV_COORDINATE}.make_precise (84.148148148148152, 57.481481481481467)) + Result.extend_point (create {EV_COORDINATE}.make_precise (67.851851851851848, 47.407407407407405)) + Result.extend_point (create {EV_COORDINATE}.make_precise (68.148148148148152, 34.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (61.333333333333343, 26.074074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (51.851851851851848, 21.629629629629626)) + Result.extend_point (create {EV_COORDINATE}.make_precise (40, 23.703703703703702)) + Result.extend_point (create {EV_COORDINATE}.make_precise (32.296296296296276, 19.555555555555557)) + Result.extend_point (create {EV_COORDINATE}.make_precise (20.444444444444457, 17.18518518518519)) + Result.extend_point (create {EV_COORDINATE}.make_precise (11.851851851851848, 8)) + end + + maloelap_south: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (362.07407407407402, 38.81481481481481)) + Result.extend_point (create {EV_COORDINATE}.make_precise (375.7037037037037, 38.81481481481481)) + Result.extend_point (create {EV_COORDINATE}.make_precise (390.81481481481478, 45.037037037037038)) + Result.extend_point (create {EV_COORDINATE}.make_precise (397.92592592592587, 50.370370370370367)) + Result.extend_point (create {EV_COORDINATE}.make_precise (403.55555555555554, 56.888888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (396.74074074074065, 63.999999999999986)) + Result.extend_point (create {EV_COORDINATE}.make_precise (396.74074074074065, 78.81481481481481)) + Result.extend_point (create {EV_COORDINATE}.make_precise (382.81481481481478, 69.629629629629619)) + Result.extend_point (create {EV_COORDINATE}.make_precise (373.03703703703695, 54.81481481481481)) + end + + mili_atoll: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (445.03703703703695, 285.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (455.7037037037037, 283.85185185185185)) + Result.extend_point (create {EV_COORDINATE}.make_precise (464.88888888888891, 281.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (468.44444444444446, 285.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (480.59259259259261, 285.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (484.44444444444446, 292.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (483.55555555555554, 305.18518518518522)) + Result.extend_point (create {EV_COORDINATE}.make_precise (488.59259259259261, 316.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (488, 319.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (482.66666666666663, 311.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (478.22222222222217, 307.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (470.81481481481478, 304.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (464.88888888888891, 305.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (461.92592592592587, 301.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (458.07407407407402, 302.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (454.22222222222217, 299.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (450.96296296296282, 302.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (446.22222222222217, 301.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (446.81481481481478, 291.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (445.03703703703695, 291.55555555555554)) + end + + butaritari_atoll: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (534.51851851851848, 553.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (540.74074074074065, 558.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (553.77777777777783, 559.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (557.33333333333326, 557.62962962962956)) + Result.extend_point (create {EV_COORDINATE}.make_precise (560, 545.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (561.48148148148141, 543.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (564.44444444444446, 544)) + Result.extend_point (create {EV_COORDINATE}.make_precise (564.74074074074065, 546.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (562.37037037037021, 547.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (561.18518518518499, 555.25925925925912)) + Result.extend_point (create {EV_COORDINATE}.make_precise (557.62962962962956, 559.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (560.8888888888888, 560.5925925925925)) + Result.extend_point (create {EV_COORDINATE}.make_precise (561.18518518518499, 565.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (554.96296296296282, 568.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (555.25925925925924, 573.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (549.33333333333326, 573.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (545.18518518518499, 575.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (541.62962962962956, 579.25925925925912)) + Result.extend_point (create {EV_COORDINATE}.make_precise (538.37037037037032, 577.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (538.37037037037032, 571.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (536.29629629629619, 569.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (535.40740740740739, 564.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (533.03703703703695, 557.33333333333326)) + end + + abalng_island: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (542.22222222222217, 679.70370370370358)) + Result.extend_point (create {EV_COORDINATE}.make_precise (549.92592592592587, 672.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (555.25925925925924, 674.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (566.81481481481478, 688)) + Result.extend_point (create {EV_COORDINATE}.make_precise (567.11111111111109, 692.14814814814804)) + Result.extend_point (create {EV_COORDINATE}.make_precise (561.48148148148141, 695.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (554.07407407407402, 691.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (552.8888888888888, 686.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (548.44444444444446, 682.96296296296282)) + Result.extend_point (create {EV_COORDINATE}.make_precise (544.29629629629619, 682.96296296296282)) + end + + tarawa_island: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (560, 704.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (560.8888888888888, 711.70370370370358)) + Result.extend_point (create {EV_COORDINATE}.make_precise (577.77777777777783, 728)) + Result.extend_point (create {EV_COORDINATE}.make_precise (566.81481481481478, 731.25925925925912)) + Result.extend_point (create {EV_COORDINATE}.make_precise (562.37037037037021, 734.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (557.33333333333326, 731.85185185185185)) + Result.extend_point (create {EV_COORDINATE}.make_precise (553.48148148148141, 732.14814814814804)) + Result.extend_point (create {EV_COORDINATE}.make_precise (553.77777777777783, 725.92592592592575)) + Result.extend_point (create {EV_COORDINATE}.make_precise (552.59259259259261, 717.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (555.25925925925924, 707.85185185185185)) + end + + majana_island: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (563.25925925925924, 759.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (569.77777777777783, 766.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (566.81481481481478, 768)) + Result.extend_point (create {EV_COORDINATE}.make_precise (565.03703703703695, 775.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (562.07407407407402, 778.37037037037021)) + Result.extend_point (create {EV_COORDINATE}.make_precise (556.14814814814804, 772.74074074074065)) + Result.extend_point (create {EV_COORDINATE}.make_precise (560.59259259259261, 763.55555555555543)) + end + + kuna_island: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (595.25925925925924, 827.85185185185185)) + Result.extend_point (create {EV_COORDINATE}.make_precise (599.11111111111109, 828.74074074074065)) + Result.extend_point (create {EV_COORDINATE}.make_precise (601.48148148148141, 831.70370370370358)) + Result.extend_point (create {EV_COORDINATE}.make_precise (605.33333333333326, 833.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (599.70370370370358, 836.14814814814804)) + Result.extend_point (create {EV_COORDINATE}.make_precise (597.92592592592587, 832.29629629629619)) + end + + aranuka_island: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (609.48148148148141, 835.85185185185185)) + Result.extend_point (create {EV_COORDINATE}.make_precise (615.40740740740739, 835.85185185185185)) + Result.extend_point (create {EV_COORDINATE}.make_precise (619.85185185185173, 833.7777777777776)) + Result.extend_point (create {EV_COORDINATE}.make_precise (622.81481481481478, 838.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (619.85185185185173, 844.14814814814804)) + Result.extend_point (create {EV_COORDINATE}.make_precise (616.59259259259261, 843.85185185185185)) + Result.extend_point (create {EV_COORDINATE}.make_precise (615.70370370370358, 840.59259259259238)) + end + + abemama_island: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (631.11111111111109, 816.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (633.77777777777783, 815.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (635.25925925925924, 810.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (641.18518518518499, 808.59259259259238)) + Result.extend_point (create {EV_COORDINATE}.make_precise (645.92592592592587, 813.92592592592575)) + Result.extend_point (create {EV_COORDINATE}.make_precise (649.18518518518499, 821.62962962962956)) + Result.extend_point (create {EV_COORDINATE}.make_precise (648.59259259259261, 826.96296296296282)) + Result.extend_point (create {EV_COORDINATE}.make_precise (642.07407407407402, 826.37037037037021)) + Result.extend_point (create {EV_COORDINATE}.make_precise (637.92592592592587, 822.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (636.74074074074065, 820.14814814814804)) + Result.extend_point (create {EV_COORDINATE}.make_precise (632.59259259259261, 819.85185185185185)) + end + + nonouti_island: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (665.48148148148141, 911.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (672, 898.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (675.85185185185173, 902.22222222222194)) + Result.extend_point (create {EV_COORDINATE}.make_precise (683.55555555555543, 902.22222222222194)) + Result.extend_point (create {EV_COORDINATE}.make_precise (693.33333333333326, 908.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (695.11111111111109, 914.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (696.8888888888888, 928.29629629629619)) + Result.extend_point (create {EV_COORDINATE}.make_precise (691.25925925925924, 924.74074074074065)) + Result.extend_point (create {EV_COORDINATE}.make_precise (685.62962962962956, 925.62962962962956)) + Result.extend_point (create {EV_COORDINATE}.make_precise (682.07407407407402, 927.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (679.70370370370358, 924.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (672.8888888888888, 919.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (671.40740740740739, 916.74074074074065)) + end + + tabiteuea_island: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (711.40740740740739, 954.96296296296282)) + Result.extend_point (create {EV_COORDINATE}.make_precise (715.25925925925924, 953.7777777777776)) + Result.extend_point (create {EV_COORDINATE}.make_precise (718.81481481481478, 956.14814814814804)) + Result.extend_point (create {EV_COORDINATE}.make_precise (725.33333333333326, 965.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (727.40740740740739, 968.59259259259238)) + Result.extend_point (create {EV_COORDINATE}.make_precise (726.81481481481478, 973.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (732.14814814814804, 974.22222222222194)) + Result.extend_point (create {EV_COORDINATE}.make_precise (735.70370370370358, 978.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (751.70370370370358, 986.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (753.18518518518499, 994.96296296296282)) + Result.extend_point (create {EV_COORDINATE}.make_precise (744, 994.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (737.77777777777783, 995.55555555555532)) + Result.extend_point (create {EV_COORDINATE}.make_precise (729.18518518518499, 989.92592592592575)) + Result.extend_point (create {EV_COORDINATE}.make_precise (728, 982.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (721.77777777777783, 979.55555555555532)) + Result.extend_point (create {EV_COORDINATE}.make_precise (720.59259259259261, 972.74074074074065)) + Result.extend_point (create {EV_COORDINATE}.make_precise (714.66666666666663, 963.85185185185185)) + Result.extend_point (create {EV_COORDINATE}.make_precise (712.29629629629619, 961.18518518518522)) + end + + onotoa_island: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (789.92592592592575, 1015.7037037037035)) + Result.extend_point (create {EV_COORDINATE}.make_precise (796.14814814814792, 1016.2962962962961)) + Result.extend_point (create {EV_COORDINATE}.make_precise (795.55555555555543, 1020.4444444444443)) + Result.extend_point (create {EV_COORDINATE}.make_precise (800.59259259259238, 1024.5925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (801.4814814814813, 1029.333333333333)) + Result.extend_point (create {EV_COORDINATE}.make_precise (796.74074074074065, 1032.5925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (794.07407407407402, 1026.6666666666665)) + Result.extend_point (create {EV_COORDINATE}.make_precise (789.33333333333326, 1025.1851851851852)) + Result.extend_point (create {EV_COORDINATE}.make_precise (790.81481481481455, 1020.4444444444443)) + end + + beru_island: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (829.62962962962956, 970.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (831.40740740740739, 968.29629629629619)) + Result.extend_point (create {EV_COORDINATE}.make_precise (839.70370370370358, 978.37037037037021)) + Result.extend_point (create {EV_COORDINATE}.make_precise (839.40740740740739, 979.85185185185185)) + Result.extend_point (create {EV_COORDINATE}.make_precise (837.03703703703695, 977.7777777777776)) + Result.extend_point (create {EV_COORDINATE}.make_precise (832.59259259259238, 978.07407407407402)) + end + + jaluit_atoll: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (234.96296296296291, 283.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (237.03703703703698, 278.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (242.6666666666666, 277.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (248.29629629629628, 287.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (254.81481481481475, 299.85185185185185)) + Result.extend_point (create {EV_COORDINATE}.make_precise (261.92592592592587, 300.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (265.77777777777783, 308.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (261.03703703703695, 311.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (259.55555555555554, 321.18518518518522)) + Result.extend_point (create {EV_COORDINATE}.make_precise (253.9259259259259, 327.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (246.81481481481475, 324.14814814814804)) + Result.extend_point (create {EV_COORDINATE}.make_precise (244.74074074074068, 317.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (236.14814814814807, 310.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (237.9259259259259, 305.18518518518522)) + Result.extend_point (create {EV_COORDINATE}.make_precise (237.9259259259259, 299.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (239.70370370370367, 292.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (238.5185185185185, 287.11111111111109)) + end + +invariant + +-- correct_location: attached target_imp implies location = vitp.marshalls_south + +end diff --git a/jj_vitp/Interface/widgets/other_location_widgets/solomans_widget.e b/jj_vitp/Interface/widgets/other_location_widgets/solomans_widget.e new file mode 100644 index 0000000..e679f4a --- /dev/null +++ b/jj_vitp/Interface/widgets/other_location_widgets/solomans_widget.e @@ -0,0 +1,1044 @@ +note + description: "[ + Widget representing the brown land of the Soloman Islands + ]" + author: "Jimmy J. Johnson" + +class + SOLOMANS_WIDGET + +inherit + + LOCATION_WIDGET + redefine + build_widgets, + build_land + end + +create + default_create + +feature {NONE} -- Initialization + + build_widgets + -- Add widgets to Current + do + Precursor {LOCATION_WIDGET} -- calls `build_land' + -- Remove `text_widget' + prune_all (text_widget) + -- Make adjustments + scale_widget (land, 0.13) + rotate_widget (land, 13.0) + translate_widget (Current, 9, 132) + end + + build_land + -- Add `land' to Current and create the polygons. + do + Precursor {LOCATION_WIDGET} + -- Put polygons representing land into the `land' + land.extend (new_britain) + land.extend (new_ireland) + land.extend (new_hanover) + land.extend (umboi) + land.extend (bougainville) + land.extend (choiseul) + land.extend (vella_lavella) + land.extend (kolombangara) + land.extend (new_georgia) + land.extend (santa_isabel) + land.extend (malaita) + land.extend (san_cristobal) + land.extend (nendo) + land.extend (new_caledonia) + land.extend (manus) + end + +feature {NONE} -- Implementation + + new_britain: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (0, 0)) + Result.extend_point (create {EV_COORDINATE}.make_precise (3.5555555555555571, -0.88888888888891415)) + Result.extend_point (create {EV_COORDINATE}.make_precise (6.6666666666666288, 1.3333333333333144)) + Result.extend_point (create {EV_COORDINATE}.make_precise (7.5555555555555571, 4)) + Result.extend_point (create {EV_COORDINATE}.make_precise (9.777777777777743, 3.5555555555555998)) + Result.extend_point (create {EV_COORDINATE}.make_precise (11.111111111111086, 1.3333333333333144)) + Result.extend_point (create {EV_COORDINATE}.make_precise (16.444444444444429, 1.3333333333333144)) + Result.extend_point (create {EV_COORDINATE}.make_precise (19.703703703703695, 3.407407407407419)) + Result.extend_point (create {EV_COORDINATE}.make_precise (22.6666666666666, 2.2222222222222854)) + Result.extend_point (create {EV_COORDINATE}.make_precise (25.333333333333329, 0.4444444444444855)) + Result.extend_point (create {EV_COORDINATE}.make_precise (28.296296296296276, -0.14814814814812394)) + Result.extend_point (create {EV_COORDINATE}.make_precise (32.148148148148096, 1.3333333333333144)) + Result.extend_point (create {EV_COORDINATE}.make_precise (38.370370370370324, 3.7037037037037237)) + Result.extend_point (create {EV_COORDINATE}.make_precise (38.370370370370324, 5.4814814814814667)) + Result.extend_point (create {EV_COORDINATE}.make_precise (41.333333333333258, 5.4814814814814667)) + Result.extend_point (create {EV_COORDINATE}.make_precise (41.925925925925924, 4)) + Result.extend_point (create {EV_COORDINATE}.make_precise (43.407407407407391, 4.8888888888889426)) + Result.extend_point (create {EV_COORDINATE}.make_precise (45.185185185185162, 4.2962962962963331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (47.555555555555486, 2.2222222222222854)) + Result.extend_point (create {EV_COORDINATE}.make_precise (51.407407407407391, 4)) + Result.extend_point (create {EV_COORDINATE}.make_precise (52.888888888888886, 3.1111111111110858)) + Result.extend_point (create {EV_COORDINATE}.make_precise (54.074074074074019, 4.5925925925926379)) + Result.extend_point (create {EV_COORDINATE}.make_precise (62.962962962962905, 3.1111111111110858)) + Result.extend_point (create {EV_COORDINATE}.make_precise (65.333333333333258, 1.6296296296296759)) + Result.extend_point (create {EV_COORDINATE}.make_precise (68, 1.9259259259259807)) + Result.extend_point (create {EV_COORDINATE}.make_precise (72.148148148148096, 0.14814814814815236)) + Result.extend_point (create {EV_COORDINATE}.make_precise (72.740740740740705, -2.5185185185185333)) + Result.extend_point (create {EV_COORDINATE}.make_precise (71.259259259259238, -3.1111111111110574)) + Result.extend_point (create {EV_COORDINATE}.make_precise (69.777777777777771, -5.1851851851852189)) + Result.extend_point (create {EV_COORDINATE}.make_precise (73.629629629629619, -9.3333333333333428)) + Result.extend_point (create {EV_COORDINATE}.make_precise (75.703703703703667, -11.703703703703667)) + Result.extend_point (create {EV_COORDINATE}.make_precise (74.518518518518448, -12.592592592592581)) + Result.extend_point (create {EV_COORDINATE}.make_precise (75.111111111111029, -15.851851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (75.407407407407362, -19.111111111111057)) + Result.extend_point (create {EV_COORDINATE}.make_precise (77.185185185185162, -21.185185185185219)) + Result.extend_point (create {EV_COORDINATE}.make_precise (81.629629629629619, -20.888888888888914)) + Result.extend_point (create {EV_COORDINATE}.make_precise (83.703703703703667, -17.925925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (81.03703703703701, -15.555555555555515)) + Result.extend_point (create {EV_COORDINATE}.make_precise (78.6666666666666, -14.666666666666686)) + Result.extend_point (create {EV_COORDINATE}.make_precise (78.370370370370324, -9.0370370370370097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (76.592592592592581, -8.740740740740705)) + Result.extend_point (create {EV_COORDINATE}.make_precise (77.777777777777771, -7.5555555555555145)) + Result.extend_point (create {EV_COORDINATE}.make_precise (78.6666666666666, -2.5185185185185333)) + Result.extend_point (create {EV_COORDINATE}.make_precise (79.259259259259238, 1.3333333333333144)) + Result.extend_point (create {EV_COORDINATE}.make_precise (82.814814814814724, 4.5925925925926379)) + Result.extend_point (create {EV_COORDINATE}.make_precise (87.555555555555543, 4.8888888888889426)) + Result.extend_point (create {EV_COORDINATE}.make_precise (90.222222222222229, 1.6296296296296759)) + Result.extend_point (create {EV_COORDINATE}.make_precise (94.962962962962933, -2.5185185185185333)) + Result.extend_point (create {EV_COORDINATE}.make_precise (100.59259259259258, 0.4444444444444855)) + Result.extend_point (create {EV_COORDINATE}.make_precise (102.37037037037032, 3.7037037037037237)) + Result.extend_point (create {EV_COORDINATE}.make_precise (106.51851851851845, 3.1111111111110858)) + Result.extend_point (create {EV_COORDINATE}.make_precise (107.99999999999994, 1.9259259259259807)) + Result.extend_point (create {EV_COORDINATE}.make_precise (107.40740740740736, 0.4444444444444855)) + Result.extend_point (create {EV_COORDINATE}.make_precise (110.96296296296293, -1.0370370370370097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (113.92592592592592, 1.0370370370370665)) + Result.extend_point (create {EV_COORDINATE}.make_precise (115.99999999999994, 0.14814814814815236)) + Result.extend_point (create {EV_COORDINATE}.make_precise (119.55555555555554, -2.8148148148147811)) + Result.extend_point (create {EV_COORDINATE}.make_precise (120.1481481481481, -5.7777777777777146)) + Result.extend_point (create {EV_COORDINATE}.make_precise (123.99999999999994, -14.074074074074019)) + Result.extend_point (create {EV_COORDINATE}.make_precise (128.74074074074065, -17.925925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (129.33333333333331, -21.185185185185219)) + Result.extend_point (create {EV_COORDINATE}.make_precise (127.25925925925921, -22.666666666666686)) + Result.extend_point (create {EV_COORDINATE}.make_precise (125.77777777777777, -24.4444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (127.85185185185182, -26.222222222222172)) + Result.extend_point (create {EV_COORDINATE}.make_precise (130.22222222222223, -25.629629629629619)) + Result.extend_point (create {EV_COORDINATE}.make_precise (129.33333333333331, -23.259259259259238)) + Result.extend_point (create {EV_COORDINATE}.make_precise (131.11111111111097, -21.481481481481495)) + Result.extend_point (create {EV_COORDINATE}.make_precise (135.55555555555554, -23.555555555555515)) + Result.extend_point (create {EV_COORDINATE}.make_precise (137.03703703703701, -25.629629629629619)) + Result.extend_point (create {EV_COORDINATE}.make_precise (137.92592592592584, -23.851851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (141.77777777777777, -23.851851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (142.96296296296293, -25.03703703703701)) + Result.extend_point (create {EV_COORDINATE}.make_precise (145.62962962962962, -24.148148148148124)) + Result.extend_point (create {EV_COORDINATE}.make_precise (148.29629629629628, -23.851851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (150.66666666666663, -25.925925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (151.55555555555554, -30.666666666666686)) + Result.extend_point (create {EV_COORDINATE}.make_precise (150.37037037037032, -30.370370370370324)) + Result.extend_point (create {EV_COORDINATE}.make_precise (150.37037037037032, -34.814814814814781)) + Result.extend_point (create {EV_COORDINATE}.make_precise (148.59259259259255, -40.444444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (148.59259259259255, -44.296296296296248)) + Result.extend_point (create {EV_COORDINATE}.make_precise (145.33333333333331, -47.851851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (144.44444444444443, -52.592592592592553)) + Result.extend_point (create {EV_COORDINATE}.make_precise (143.25925925925921, -51.407407407407362)) + Result.extend_point (create {EV_COORDINATE}.make_precise (142.37037037037032, -56.148148148148124)) + Result.extend_point (create {EV_COORDINATE}.make_precise (144.44444444444443, -58.518518518518505)) + Result.extend_point (create {EV_COORDINATE}.make_precise (146.51851851851845, -57.925925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (151.55555555555554, -58.518518518518505)) + Result.extend_point (create {EV_COORDINATE}.make_precise (151.85185185185182, -56.740740740740733)) + Result.extend_point (create {EV_COORDINATE}.make_precise (158.96296296296293, -57.333333333333343)) + Result.extend_point (create {EV_COORDINATE}.make_precise (159.25925925925918, -53.777777777777715)) + Result.extend_point (create {EV_COORDINATE}.make_precise (162.51851851851842, -51.407407407407362)) + Result.extend_point (create {EV_COORDINATE}.make_precise (164.88888888888874, -51.999999999999943)) + Result.extend_point (create {EV_COORDINATE}.make_precise (166.96296296296293, -55.259259259259238)) + Result.extend_point (create {EV_COORDINATE}.make_precise (164.88888888888874, -57.333333333333343)) + Result.extend_point (create {EV_COORDINATE}.make_precise (171.11111111111097, -57.333333333333343)) + Result.extend_point (create {EV_COORDINATE}.make_precise (171.40740740740733, -59.999999999999943)) + Result.extend_point (create {EV_COORDINATE}.make_precise (173.77777777777777, -60.888888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (176.74074074074065, -56.444444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (175.25925925925918, -55.259259259259238)) + Result.extend_point (create {EV_COORDINATE}.make_precise (173.48148148148141, -56.740740740740733)) + Result.extend_point (create {EV_COORDINATE}.make_precise (173.48148148148141, -54.074074074074019)) + Result.extend_point (create {EV_COORDINATE}.make_precise (178.22222222222223, -51.111111111111057)) + Result.extend_point (create {EV_COORDINATE}.make_precise (183.85185185185179, -52.296296296296248)) + Result.extend_point (create {EV_COORDINATE}.make_precise (185.03703703703701, -49.629629629629619)) + Result.extend_point (create {EV_COORDINATE}.make_precise (181.48148148148141, -44.888888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (177.33333333333331, -46.370370370370324)) + Result.extend_point (create {EV_COORDINATE}.make_precise (174.66666666666663, -44.888888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (176.74074074074065, -44.888888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (180.29629629629619, -44.296296296296248)) + Result.extend_point (create {EV_COORDINATE}.make_precise (182.37037037037032, -41.629629629629619)) + Result.extend_point (create {EV_COORDINATE}.make_precise (183.25925925925918, -34.814814814814781)) + Result.extend_point (create {EV_COORDINATE}.make_precise (181.18518518518516, -29.185185185185162)) + Result.extend_point (create {EV_COORDINATE}.make_precise (177.03703703703701, -23.555555555555515)) + Result.extend_point (create {EV_COORDINATE}.make_precise (173.77777777777777, -21.777777777777715)) + Result.extend_point (create {EV_COORDINATE}.make_precise (168.74074074074065, -22.370370370370324)) + Result.extend_point (create {EV_COORDINATE}.make_precise (164.59259259259255, -21.481481481481495)) + Result.extend_point (create {EV_COORDINATE}.make_precise (165.18518518518516, -19.111111111111057)) + Result.extend_point (create {EV_COORDINATE}.make_precise (163.70370370370358, -17.333333333333343)) + Result.extend_point (create {EV_COORDINATE}.make_precise (164.29629629629619, -13.777777777777715)) + Result.extend_point (create {EV_COORDINATE}.make_precise (168.44444444444429, -11.111111111111057)) + Result.extend_point (create {EV_COORDINATE}.make_precise (171.11111111111097, -6.9629629629629335)) + Result.extend_point (create {EV_COORDINATE}.make_precise (172.29629629629619, -4)) + Result.extend_point (create {EV_COORDINATE}.make_precise (169.33333333333331, 0.4444444444444855)) + Result.extend_point (create {EV_COORDINATE}.make_precise (162.81481481481472, 3.407407407407419)) + Result.extend_point (create {EV_COORDINATE}.make_precise (156.88888888888874, 6.0740740740740762)) + Result.extend_point (create {EV_COORDINATE}.make_precise (154.51851851851842, 3.407407407407419)) + Result.extend_point (create {EV_COORDINATE}.make_precise (149.48148148148141, 2.2222222222222854)) + Result.extend_point (create {EV_COORDINATE}.make_precise (150.07407407407399, 5.4814814814814667)) + Result.extend_point (create {EV_COORDINATE}.make_precise (147.40740740740733, 3.7037037037037237)) + Result.extend_point (create {EV_COORDINATE}.make_precise (141.77777777777777, 2.5185185185185048)) + Result.extend_point (create {EV_COORDINATE}.make_precise (140.29629629629628, 6.3703703703703809)) + Result.extend_point (create {EV_COORDINATE}.make_precise (144.1481481481481, 8.4444444444444855)) + Result.extend_point (create {EV_COORDINATE}.make_precise (143.85185185185182, 10.222222222222285)) + Result.extend_point (create {EV_COORDINATE}.make_precise (139.99999999999997, 12)) + Result.extend_point (create {EV_COORDINATE}.make_precise (138.51851851851845, 14.370370370370381)) + Result.extend_point (create {EV_COORDINATE}.make_precise (140.88888888888889, 14.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (135.25925925925921, 16.444444444444485)) + Result.extend_point (create {EV_COORDINATE}.make_precise (130.81481481481475, 20.888888888888943)) + Result.extend_point (create {EV_COORDINATE}.make_precise (128.44444444444443, 22.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (125.48148148148141, 22.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (120.7407407407407, 26.518518518518505)) + Result.extend_point (create {EV_COORDINATE}.make_precise (118.37037037037032, 25.037037037037067)) + Result.extend_point (create {EV_COORDINATE}.make_precise (114.51851851851845, 25.333333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (113.62962962962962, 27.111111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (111.85185185185182, 25.925925925925981)) + Result.extend_point (create {EV_COORDINATE}.make_precise (110.37037037037032, 25.925925925925981)) + Result.extend_point (create {EV_COORDINATE}.make_precise (110.37037037037032, 28.592592592592638)) + Result.extend_point (create {EV_COORDINATE}.make_precise (108.88888888888889, 30.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (103.25925925925924, 30.666666666666686)) + Result.extend_point (create {EV_COORDINATE}.make_precise (99.999999999999943, 32.444444444444485)) + Result.extend_point (create {EV_COORDINATE}.make_precise (95.851851851851819, 36.296296296296333)) + Result.extend_point (create {EV_COORDINATE}.make_precise (91.111111111111029, 37.481481481481467)) + Result.extend_point (create {EV_COORDINATE}.make_precise (85.48148148148141, 37.481481481481467)) + Result.extend_point (create {EV_COORDINATE}.make_precise (82.814814814814724, 34.81481481481481)) + Result.extend_point (create {EV_COORDINATE}.make_precise (78.6666666666666, 38.074074074074048)) + Result.extend_point (create {EV_COORDINATE}.make_precise (76.888888888888886, 35.703703703703724)) + Result.extend_point (create {EV_COORDINATE}.make_precise (75.703703703703667, 38.370370370370381)) + Result.extend_point (create {EV_COORDINATE}.make_precise (72.740740740740705, 36.000000000000028)) + Result.extend_point (create {EV_COORDINATE}.make_precise (70.962962962962933, 37.777777777777828)) + Result.extend_point (create {EV_COORDINATE}.make_precise (68.296296296296276, 36.592592592592609)) + Result.extend_point (create {EV_COORDINATE}.make_precise (67.407407407407391, 37.481481481481467)) + Result.extend_point (create {EV_COORDINATE}.make_precise (61.481481481481438, 37.481481481481467)) + Result.extend_point (create {EV_COORDINATE}.make_precise (60.888888888888886, 38.666666666666686)) + Result.extend_point (create {EV_COORDINATE}.make_precise (54.074074074074019, 38.666666666666686)) + Result.extend_point (create {EV_COORDINATE}.make_precise (52.888888888888886, 34.81481481481481)) + Result.extend_point (create {EV_COORDINATE}.make_precise (50.222222222222229, 29.777777777777828)) + Result.extend_point (create {EV_COORDINATE}.make_precise (44.296296296296276, 28.296296296296333)) + Result.extend_point (create {EV_COORDINATE}.make_precise (36.592592592592581, 29.185185185185219)) + Result.extend_point (create {EV_COORDINATE}.make_precise (35.407407407407391, 30.370370370370381)) + Result.extend_point (create {EV_COORDINATE}.make_precise (32.444444444444429, 31.259259259259267)) + Result.extend_point (create {EV_COORDINATE}.make_precise (31.851851851851819, 32.740740740740705)) + Result.extend_point (create {EV_COORDINATE}.make_precise (25.629629629629619, 32.740740740740705)) + Result.extend_point (create {EV_COORDINATE}.make_precise (27.407407407407391, 29.777777777777828)) + Result.extend_point (create {EV_COORDINATE}.make_precise (26.222222222222229, 29.185185185185219)) + Result.extend_point (create {EV_COORDINATE}.make_precise (26.518518518518476, 27.111111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (21.777777777777771, 25.037037037037067)) + Result.extend_point (create {EV_COORDINATE}.make_precise (22.370370370370338, 22.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (20, 20.592592592592638)) + Result.extend_point (create {EV_COORDINATE}.make_precise (18.518518518518491, 21.777777777777828)) + Result.extend_point (create {EV_COORDINATE}.make_precise (17.629629629629619, 19.703703703703724)) + Result.extend_point (create {EV_COORDINATE}.make_precise (14.962962962962948, 18.222222222222285)) + Result.extend_point (create {EV_COORDINATE}.make_precise (12, 16.148148148148152)) + Result.extend_point (create {EV_COORDINATE}.make_precise (9.3333333333333286, 17.629629629629676)) + Result.extend_point (create {EV_COORDINATE}.make_precise (7.2592592592592524, 15.851851851851876)) + Result.extend_point (create {EV_COORDINATE}.make_precise (0.14814814814812394, 13.185185185185219)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1.9259259259259238, 10.518518518518505)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-2.222222222222257, 4.5925925925926379)) + end + + new_ireland: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (110.07407407407402, -132.88888888888883)) + Result.extend_point (create {EV_COORDINATE}.make_precise (112.1481481481481, -132.59259259259255)) + Result.extend_point (create {EV_COORDINATE}.make_precise (114.51851851851845, -130.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (121.62962962962962, -127.85185185185182)) + Result.extend_point (create {EV_COORDINATE}.make_precise (122.22222222222223, -124.29629629629625)) + Result.extend_point (create {EV_COORDINATE}.make_precise (127.25925925925921, -123.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (130.22222222222223, -119.85185185185182)) + Result.extend_point (create {EV_COORDINATE}.make_precise (136.44444444444443, -118.96296296296292)) + Result.extend_point (create {EV_COORDINATE}.make_precise (146.51851851851845, -113.03703703703698)) + Result.extend_point (create {EV_COORDINATE}.make_precise (149.48148148148141, -111.55555555555553)) + Result.extend_point (create {EV_COORDINATE}.make_precise (158.07407407407396, -104.14814814814812)) + Result.extend_point (create {EV_COORDINATE}.make_precise (160.74074074074065, -104.74074074074069)) + Result.extend_point (create {EV_COORDINATE}.make_precise (163.40740740740733, -102.96296296296292)) + Result.extend_point (create {EV_COORDINATE}.make_precise (167.85185185185179, -102.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (177.62962962962962, -90.2222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (181.18518518518516, -89.629629629629605)) + Result.extend_point (create {EV_COORDINATE}.make_precise (185.33333333333331, -82.222222222222172)) + Result.extend_point (create {EV_COORDINATE}.make_precise (187.11111111111097, -83.703703703703667)) + Result.extend_point (create {EV_COORDINATE}.make_precise (189.18518518518516, -82.814814814814781)) + Result.extend_point (create {EV_COORDINATE}.make_precise (191.25925925925918, -75.407407407407362)) + Result.extend_point (create {EV_COORDINATE}.make_precise (193.92592592592581, -75.703703703703667)) + Result.extend_point (create {EV_COORDINATE}.make_precise (196.88888888888874, -73.037037037036995)) + Result.extend_point (create {EV_COORDINATE}.make_precise (200.44444444444429, -72.444444444444386)) + Result.extend_point (create {EV_COORDINATE}.make_precise (201.33333333333331, -73.92592592592591)) + Result.extend_point (create {EV_COORDINATE}.make_precise (203.99999999999989, -71.851851851851833)) + Result.extend_point (create {EV_COORDINATE}.make_precise (203.99999999999989, -68.592592592592553)) + Result.extend_point (create {EV_COORDINATE}.make_precise (208.44444444444429, -68.592592592592553)) + Result.extend_point (create {EV_COORDINATE}.make_precise (210.51851851851842, -65.037037037037038)) + Result.extend_point (create {EV_COORDINATE}.make_precise (214.37037037037032, -57.629629629629619)) + Result.extend_point (create {EV_COORDINATE}.make_precise (217.62962962962962, -49.629629629629619)) + Result.extend_point (create {EV_COORDINATE}.make_precise (213.18518518518516, -44.592592592592553)) + Result.extend_point (create {EV_COORDINATE}.make_precise (214.66666666666663, -38.962962962962933)) + Result.extend_point (create {EV_COORDINATE}.make_precise (212.59259259259255, -38.370370370370324)) + Result.extend_point (create {EV_COORDINATE}.make_precise (212.59259259259255, -35.703703703703667)) + Result.extend_point (create {EV_COORDINATE}.make_precise (210.51851851851842, -34.814814814814781)) + Result.extend_point (create {EV_COORDINATE}.make_precise (210.51851851851842, -31.555555555555515)) + Result.extend_point (create {EV_COORDINATE}.make_precise (207.25925925925918, -30.074074074074019)) + Result.extend_point (create {EV_COORDINATE}.make_precise (206.66666666666663, -27.999999999999943)) + Result.extend_point (create {EV_COORDINATE}.make_precise (204.88888888888874, -30.370370370370324)) + Result.extend_point (create {EV_COORDINATE}.make_precise (201.62962962962962, -33.037037037037038)) + Result.extend_point (create {EV_COORDINATE}.make_precise (200.1481481481481, -35.703703703703667)) + Result.extend_point (create {EV_COORDINATE}.make_precise (198.37037037037032, -35.407407407407362)) + Result.extend_point (create {EV_COORDINATE}.make_precise (198.37037037037032, -39.851851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (196.29629629629619, -40.148148148148124)) + Result.extend_point (create {EV_COORDINATE}.make_precise (195.99999999999989, -43.407407407407362)) + Result.extend_point (create {EV_COORDINATE}.make_precise (194.51851851851842, -45.777777777777715)) + Result.extend_point (create {EV_COORDINATE}.make_precise (196.88888888888874, -48.444444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (196.88888888888874, -58.222222222222172)) + Result.extend_point (create {EV_COORDINATE}.make_precise (193.62962962962962, -60.888888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (192.74074074074065, -65.629629629629619)) + Result.extend_point (create {EV_COORDINATE}.make_precise (187.99999999999989, -71.851851851851833)) + Result.extend_point (create {EV_COORDINATE}.make_precise (185.03703703703701, -73.629629629629605)) + Result.extend_point (create {EV_COORDINATE}.make_precise (185.03703703703701, -75.407407407407362)) + Result.extend_point (create {EV_COORDINATE}.make_precise (181.18518518518516, -79.555555555555515)) + Result.extend_point (create {EV_COORDINATE}.make_precise (178.22222222222223, -84.592592592592538)) + Result.extend_point (create {EV_COORDINATE}.make_precise (172.59259259259255, -88.740740740740691)) + Result.extend_point (create {EV_COORDINATE}.make_precise (167.25925925925918, -90.2222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (161.62962962962962, -91.407407407407362)) + Result.extend_point (create {EV_COORDINATE}.make_precise (153.33333333333331, -96.740740740740691)) + Result.extend_point (create {EV_COORDINATE}.make_precise (146.51851851851845, -104.14814814814812)) + Result.extend_point (create {EV_COORDINATE}.make_precise (142.96296296296293, -105.6296296296296)) + Result.extend_point (create {EV_COORDINATE}.make_precise (139.40740740740733, -108.59259259259254)) + Result.extend_point (create {EV_COORDINATE}.make_precise (135.55555555555554, -110.66666666666661)) + Result.extend_point (create {EV_COORDINATE}.make_precise (132.88888888888889, -112.44444444444439)) + Result.extend_point (create {EV_COORDINATE}.make_precise (129.03703703703701, -113.62962962962959)) + Result.extend_point (create {EV_COORDINATE}.make_precise (127.25925925925921, -115.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (124.59259259259258, -118.96296296296292)) + Result.extend_point (create {EV_COORDINATE}.make_precise (120.44444444444443, -119.55555555555553)) + Result.extend_point (create {EV_COORDINATE}.make_precise (119.55555555555554, -121.62962962962959)) + Result.extend_point (create {EV_COORDINATE}.make_precise (114.51851851851845, -121.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (113.03703703703701, -120.74074074074069)) + Result.extend_point (create {EV_COORDINATE}.make_precise (109.48148148148141, -120.14814814814811)) + Result.extend_point (create {EV_COORDINATE}.make_precise (107.99999999999994, -123.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (104.44444444444443, -123.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (101.77777777777777, -125.18518518518513)) + Result.extend_point (create {EV_COORDINATE}.make_precise (100.59259259259258, -127.85185185185182)) + Result.extend_point (create {EV_COORDINATE}.make_precise (102.96296296296293, -127.85185185185182)) + Result.extend_point (create {EV_COORDINATE}.make_precise (104.44444444444443, -126.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (107.11111111111103, -126.66666666666661)) + Result.extend_point (create {EV_COORDINATE}.make_precise (108.29629629629628, -125.48148148148144)) + Result.extend_point (create {EV_COORDINATE}.make_precise (111.25925925925924, -125.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (113.33333333333326, -126.66666666666661)) + Result.extend_point (create {EV_COORDINATE}.make_precise (112.1481481481481, -128.1481481481481)) + Result.extend_point (create {EV_COORDINATE}.make_precise (110.37037037037032, -129.92592592592587)) + end + + new_hanover: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (71.851851851851819, -136.7407407407407)) + Result.extend_point (create {EV_COORDINATE}.make_precise (75.111111111111029, -137.03703703703698)) + Result.extend_point (create {EV_COORDINATE}.make_precise (76.888888888888886, -139.70370370370367)) + Result.extend_point (create {EV_COORDINATE}.make_precise (78.962962962962933, -139.11111111111106)) + Result.extend_point (create {EV_COORDINATE}.make_precise (80.740740740740705, -140.29629629629625)) + Result.extend_point (create {EV_COORDINATE}.make_precise (82.222222222222229, -141.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (87.555555555555543, -139.70370370370367)) + Result.extend_point (create {EV_COORDINATE}.make_precise (89.333333333333258, -139.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (89.629629629629619, -138.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (94.6666666666666, -136.7407407407407)) + Result.extend_point (create {EV_COORDINATE}.make_precise (97.03703703703701, -132.88888888888883)) + Result.extend_point (create {EV_COORDINATE}.make_precise (95.259259259259238, -131.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (96.148148148148096, -127.25925925925922)) + Result.extend_point (create {EV_COORDINATE}.make_precise (92.296296296296276, -127.55555555555553)) + Result.extend_point (create {EV_COORDINATE}.make_precise (89.925925925925924, -126.66666666666661)) + Result.extend_point (create {EV_COORDINATE}.make_precise (88.148148148148096, -126.96296296296292)) + Result.extend_point (create {EV_COORDINATE}.make_precise (82.222222222222229, -126.66666666666661)) + Result.extend_point (create {EV_COORDINATE}.make_precise (78.6666666666666, -128.4444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (78.6666666666666, -131.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (76.296296296296276, -134.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (72.740740740740705, -134.66666666666663)) + end + + umboi: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-27.407407407407433, 0.4444444444444855)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-24.444444444444443, -0.74074074074070495)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-21.481481481481495, 1.6296296296296759)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-17.925925925925924, 1.9259259259259807)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-12.888888888888914, 6.6666666666666572)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-13.481481481481524, 15.5555555555556)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-17.333333333333357, 17.629629629629676)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-18.518518518518533, 14.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-22.074074074074076, 14.074074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-22.370370370370381, 11.111111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-25.333333333333357, 10.814814814814781)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-28, 6.0740740740740762)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-28.296296296296305, 3.1111111111110858)) + end + + bougainville: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (281.03703703703701, -16.740740740740705)) + Result.extend_point (create {EV_COORDINATE}.make_precise (284.5925925925925, -20.592592592592581)) + Result.extend_point (create {EV_COORDINATE}.make_precise (287.85185185185179, -19.703703703703667)) + Result.extend_point (create {EV_COORDINATE}.make_precise (288.74074074074059, -14.370370370370324)) + Result.extend_point (create {EV_COORDINATE}.make_precise (289.03703703703701, -6.3703703703703241)) + Result.extend_point (create {EV_COORDINATE}.make_precise (287.85185185185179, -2.8148148148147811)) + Result.extend_point (create {EV_COORDINATE}.make_precise (291.11111111111097, -1.3333333333333428)) + Result.extend_point (create {EV_COORDINATE}.make_precise (295.55555555555554, 2.8148148148147811)) + Result.extend_point (create {EV_COORDINATE}.make_precise (299.99999999999983, 2.5185185185185048)) + Result.extend_point (create {EV_COORDINATE}.make_precise (308.29629629629625, 6.3703703703703809)) + Result.extend_point (create {EV_COORDINATE}.make_precise (308.29629629629625, 10.222222222222285)) + Result.extend_point (create {EV_COORDINATE}.make_precise (310.37037037037032, 11.703703703703724)) + Result.extend_point (create {EV_COORDINATE}.make_precise (310.96296296296293, 17.925925925925981)) + Result.extend_point (create {EV_COORDINATE}.make_precise (314.22222222222223, 17.925925925925981)) + Result.extend_point (create {EV_COORDINATE}.make_precise (316.5925925925925, 21.777777777777828)) + Result.extend_point (create {EV_COORDINATE}.make_precise (319.25925925925918, 21.777777777777828)) + Result.extend_point (create {EV_COORDINATE}.make_precise (321.92592592592581, 25.037037037037067)) + Result.extend_point (create {EV_COORDINATE}.make_precise (321.33333333333331, 29.777777777777828)) + Result.extend_point (create {EV_COORDINATE}.make_precise (323.70370370370364, 31.851851851851876)) + Result.extend_point (create {EV_COORDINATE}.make_precise (326.66666666666663, 31.259259259259267)) + Result.extend_point (create {EV_COORDINATE}.make_precise (327.25925925925918, 33.629629629629676)) + Result.extend_point (create {EV_COORDINATE}.make_precise (329.33333333333331, 34.222222222222285)) + Result.extend_point (create {EV_COORDINATE}.make_precise (330.22222222222223, 32.444444444444485)) + Result.extend_point (create {EV_COORDINATE}.make_precise (333.18518518518511, 32.444444444444485)) + Result.extend_point (create {EV_COORDINATE}.make_precise (333.18518518518511, 35.111111111111029)) + Result.extend_point (create {EV_COORDINATE}.make_precise (339.99999999999983, 40.740740740740705)) + Result.extend_point (create {EV_COORDINATE}.make_precise (342.07407407407396, 46.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (344.1481481481481, 47.259259259259267)) + Result.extend_point (create {EV_COORDINATE}.make_precise (345.33333333333331, 50.518518518518505)) + Result.extend_point (create {EV_COORDINATE}.make_precise (344.44444444444429, 52.000000000000028)) + Result.extend_point (create {EV_COORDINATE}.make_precise (346.51851851851842, 57.037037037037067)) + Result.extend_point (create {EV_COORDINATE}.make_precise (345.33333333333331, 60.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (339.99999999999983, 60.296296296296248)) + Result.extend_point (create {EV_COORDINATE}.make_precise (336.74074074074059, 62.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (335.55555555555554, 65.333333333333371)) + Result.extend_point (create {EV_COORDINATE}.make_precise (332.5925925925925, 64.148148148148152)) + Result.extend_point (create {EV_COORDINATE}.make_precise (330.22222222222223, 64.740740740740705)) + Result.extend_point (create {EV_COORDINATE}.make_precise (322.81481481481467, 62.370370370370381)) + Result.extend_point (create {EV_COORDINATE}.make_precise (318.07407407407396, 59.111111111111029)) + Result.extend_point (create {EV_COORDINATE}.make_precise (315.99999999999983, 56.148148148148152)) + Result.extend_point (create {EV_COORDINATE}.make_precise (312.44444444444429, 54.370370370370381)) + Result.extend_point (create {EV_COORDINATE}.make_precise (308.88888888888886, 48.444444444444485)) + Result.extend_point (create {EV_COORDINATE}.make_precise (311.85185185185179, 48.148148148148152)) + Result.extend_point (create {EV_COORDINATE}.make_precise (312.44444444444429, 45.185185185185219)) + Result.extend_point (create {EV_COORDINATE}.make_precise (310.96296296296293, 43.111111111111029)) + Result.extend_point (create {EV_COORDINATE}.make_precise (312.44444444444429, 41.925925925925895)) + Result.extend_point (create {EV_COORDINATE}.make_precise (311.25925925925918, 38.074074074074048)) + Result.extend_point (create {EV_COORDINATE}.make_precise (307.70370370370364, 37.777777777777828)) + Result.extend_point (create {EV_COORDINATE}.make_precise (303.25925925925918, 35.407407407407391)) + Result.extend_point (create {EV_COORDINATE}.make_precise (299.70370370370364, 32.740740740740705)) + Result.extend_point (create {EV_COORDINATE}.make_precise (299.99999999999983, 29.777777777777828)) + Result.extend_point (create {EV_COORDINATE}.make_precise (295.85185185185179, 27.407407407407419)) + Result.extend_point (create {EV_COORDINATE}.make_precise (293.48148148148141, 24.740740740740762)) + Result.extend_point (create {EV_COORDINATE}.make_precise (290.81481481481467, 23.259259259259295)) + Result.extend_point (create {EV_COORDINATE}.make_precise (290.22222222222223, 19.703703703703724)) + Result.extend_point (create {EV_COORDINATE}.make_precise (291.70370370370364, 19.111111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (290.22222222222223, 16.444444444444485)) + Result.extend_point (create {EV_COORDINATE}.make_precise (287.85185185185179, 13.481481481481467)) + Result.extend_point (create {EV_COORDINATE}.make_precise (289.92592592592581, 10.518518518518505)) + Result.extend_point (create {EV_COORDINATE}.make_precise (289.33333333333331, 8.4444444444444855)) + Result.extend_point (create {EV_COORDINATE}.make_precise (289.92592592592581, 6.6666666666666572)) + Result.extend_point (create {EV_COORDINATE}.make_precise (288.44444444444429, 4.8888888888889426)) + Result.extend_point (create {EV_COORDINATE}.make_precise (290.81481481481467, 4.5925925925926379)) + Result.extend_point (create {EV_COORDINATE}.make_precise (290.81481481481467, 2.8148148148147811)) + Result.extend_point (create {EV_COORDINATE}.make_precise (288.44444444444429, 0.74074074074076179)) + Result.extend_point (create {EV_COORDINATE}.make_precise (286.07407407407396, -1.0370370370370097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (284.88888888888886, -0.14814814814812394)) + Result.extend_point (create {EV_COORDINATE}.make_precise (283.99999999999983, -2.8148148148147811)) + Result.extend_point (create {EV_COORDINATE}.make_precise (281.92592592592581, -6.6666666666666856)) + Result.extend_point (create {EV_COORDINATE}.make_precise (282.22222222222223, -11.703703703703667)) + end + + choiseul: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (365.48148148148141, 53.777777777777828)) + Result.extend_point (create {EV_COORDINATE}.make_precise (366.96296296296288, 51.703703703703724)) + Result.extend_point (create {EV_COORDINATE}.make_precise (370.51851851851842, 51.703703703703724)) + Result.extend_point (create {EV_COORDINATE}.make_precise (372.59259259259244, 53.777777777777828)) + Result.extend_point (create {EV_COORDINATE}.make_precise (375.85185185185179, 53.777777777777828)) + Result.extend_point (create {EV_COORDINATE}.make_precise (377.33333333333331, 56.740740740740705)) + Result.extend_point (create {EV_COORDINATE}.make_precise (378.81481481481467, 59.407407407407391)) + Result.extend_point (create {EV_COORDINATE}.make_precise (384.4444444444444, 59.407407407407391)) + Result.extend_point (create {EV_COORDINATE}.make_precise (387.11111111111103, 61.185185185185219)) + Result.extend_point (create {EV_COORDINATE}.make_precise (389.77777777777771, 63.259259259259238)) + Result.extend_point (create {EV_COORDINATE}.make_precise (398.37037037037032, 67.703703703703638)) + Result.extend_point (create {EV_COORDINATE}.make_precise (398.66666666666663, 71.259259259259238)) + Result.extend_point (create {EV_COORDINATE}.make_precise (398.37037037037032, 75.703703703703638)) + Result.extend_point (create {EV_COORDINATE}.make_precise (400.74074074074059, 75.999999999999943)) + Result.extend_point (create {EV_COORDINATE}.make_precise (402.81481481481467, 78.666666666666686)) + Result.extend_point (create {EV_COORDINATE}.make_precise (405.18518518518511, 78.370370370370381)) + Result.extend_point (create {EV_COORDINATE}.make_precise (407.85185185185179, 82.222222222222285)) + Result.extend_point (create {EV_COORDINATE}.make_precise (411.99999999999972, 84.592592592592609)) + Result.extend_point (create {EV_COORDINATE}.make_precise (414.07407407407396, 84.592592592592609)) + Result.extend_point (create {EV_COORDINATE}.make_precise (415.25925925925907, 82.814814814814781)) + Result.extend_point (create {EV_COORDINATE}.make_precise (417.62962962962939, 82.814814814814781)) + Result.extend_point (create {EV_COORDINATE}.make_precise (419.40740740740722, 85.777777777777828)) + Result.extend_point (create {EV_COORDINATE}.make_precise (419.11111111111103, 88.444444444444343)) + Result.extend_point (create {EV_COORDINATE}.make_precise (422.66666666666634, 89.333333333333371)) + Result.extend_point (create {EV_COORDINATE}.make_precise (422.07407407407396, 91.407407407407391)) + Result.extend_point (create {EV_COORDINATE}.make_precise (415.55555555555526, 89.629629629629676)) + Result.extend_point (create {EV_COORDINATE}.make_precise (414.66666666666634, 91.407407407407391)) + Result.extend_point (create {EV_COORDINATE}.make_precise (407.85185185185179, 89.925925925925867)) + Result.extend_point (create {EV_COORDINATE}.make_precise (407.55555555555554, 86.666666666666686)) + Result.extend_point (create {EV_COORDINATE}.make_precise (400.4444444444444, 86.370370370370381)) + Result.extend_point (create {EV_COORDINATE}.make_precise (398.96296296296288, 88.148148148148152)) + Result.extend_point (create {EV_COORDINATE}.make_precise (396.88888888888886, 83.407407407407391)) + Result.extend_point (create {EV_COORDINATE}.make_precise (393.62962962962945, 85.185185185185219)) + Result.extend_point (create {EV_COORDINATE}.make_precise (393.33333333333331, 81.925925925925867)) + Result.extend_point (create {EV_COORDINATE}.make_precise (391.25925925925907, 81.925925925925867)) + Result.extend_point (create {EV_COORDINATE}.make_precise (381.48148148148141, 72.740740740740705)) + Result.extend_point (create {EV_COORDINATE}.make_precise (381.18518518518511, 70.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (376.1481481481481, 65.333333333333371)) + Result.extend_point (create {EV_COORDINATE}.make_precise (374.37037037037032, 65.629629629629676)) + Result.extend_point (create {EV_COORDINATE}.make_precise (371.40740740740728, 62.074074074074019)) + Result.extend_point (create {EV_COORDINATE}.make_precise (366.37037037037032, 59.999999999999943)) + end + + vella_lavella: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (371.40740740740728, 99.111111111111029)) + Result.extend_point (create {EV_COORDINATE}.make_precise (374.37037037037032, 96.148148148148152)) + Result.extend_point (create {EV_COORDINATE}.make_precise (379.70370370370364, 101.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (383.55555555555554, 103.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (383.55555555555554, 105.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (380.29629629629619, 108.29629629629625)) + Result.extend_point (create {EV_COORDINATE}.make_precise (380.29629629629619, 113.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (377.33333333333331, 113.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (377.03703703703701, 110.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (373.77777777777771, 110.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (374.66666666666663, 106.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (372.59259259259244, 105.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (371.99999999999972, 102.66666666666669)) + end + + kolombangara: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (395.70370370370364, 122.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (392.1481481481481, 120.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (390.37037037037032, 117.18518518518522)) + Result.extend_point (create {EV_COORDINATE}.make_precise (390.37037037037032, 113.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (393.62962962962945, 109.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (397.18518518518511, 108.59259259259261)) + Result.extend_point (create {EV_COORDINATE}.make_precise (400.4444444444444, 109.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (402.51851851851842, 113.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (401.62962962962945, 117.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (402.22222222222223, 118.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (400.1481481481481, 121.92592592592587)) + end + + new_georgia: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (401.62962962962945, 127.85185185185185)) + Result.extend_point (create {EV_COORDINATE}.make_precise (403.11111111111103, 125.18518518518522)) + Result.extend_point (create {EV_COORDINATE}.make_precise (405.48148148148141, 125.18518518518522)) + Result.extend_point (create {EV_COORDINATE}.make_precise (408.74074074074059, 120.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (411.11111111111103, 115.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (415.55555555555526, 114.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (420.88888888888886, 118.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (420.88888888888886, 121.03703703703707)) + Result.extend_point (create {EV_COORDINATE}.make_precise (420.59259259259244, 123.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (422.37037037037015, 126.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (422.96296296296288, 127.5555555555556)) + Result.extend_point (create {EV_COORDINATE}.make_precise (425.62962962962939, 126.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (427.99999999999972, 126.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (428.59259259259244, 129.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (430.96296296296288, 129.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (431.55555555555526, 133.18518518518522)) + Result.extend_point (create {EV_COORDINATE}.make_precise (433.33333333333331, 135.5555555555556)) + Result.extend_point (create {EV_COORDINATE}.make_precise (434.22222222222223, 137.03703703703707)) + Result.extend_point (create {EV_COORDINATE}.make_precise (433.62962962962939, 140.59259259259261)) + Result.extend_point (create {EV_COORDINATE}.make_precise (433.62962962962939, 143.5555555555556)) + Result.extend_point (create {EV_COORDINATE}.make_precise (435.70370370370364, 142.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (436.29629629629613, 140.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (439.55555555555526, 138.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (438.96296296296288, 141.48148148148147)) + Result.extend_point (create {EV_COORDINATE}.make_precise (440.4444444444444, 142.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (441.33333333333331, 140.59259259259261)) + Result.extend_point (create {EV_COORDINATE}.make_precise (444.88888888888886, 142.37037037037038)) + Result.extend_point (create {EV_COORDINATE}.make_precise (443.99999999999972, 144.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (441.9259259259257, 144.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (441.9259259259257, 145.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (443.70370370370364, 145.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (443.99999999999972, 148.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (442.81481481481461, 150.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (444.29629629629613, 150.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (446.96296296296288, 149.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (449.33333333333331, 150.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (448.74074074074059, 153.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (446.37037037037015, 155.11111111111103)) + Result.extend_point (create {EV_COORDINATE}.make_precise (444.29629629629613, 152.74074074074065)) + Result.extend_point (create {EV_COORDINATE}.make_precise (441.03703703703701, 150.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (441.03703703703701, 152.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (437.48148148148135, 151.5555555555556)) + Result.extend_point (create {EV_COORDINATE}.make_precise (433.33333333333331, 148.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (433.62962962962939, 145.03703703703707)) + Result.extend_point (create {EV_COORDINATE}.make_precise (432.4444444444444, 142.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (430.66666666666634, 142.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (430.37037037037015, 144.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (427.99999999999972, 141.48148148148147)) + Result.extend_point (create {EV_COORDINATE}.make_precise (425.9259259259257, 139.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (425.03703703703701, 140.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (419.70370370370364, 138.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (419.99999999999972, 136.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (417.33333333333331, 135.5555555555556)) + Result.extend_point (create {EV_COORDINATE}.make_precise (417.9259259259257, 133.18518518518522)) + Result.extend_point (create {EV_COORDINATE}.make_precise (421.77777777777754, 134.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (420.29629629629613, 133.18518518518522)) + Result.extend_point (create {EV_COORDINATE}.make_precise (419.40740740740722, 130.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (417.03703703703701, 127.85185185185185)) + Result.extend_point (create {EV_COORDINATE}.make_precise (416.4444444444444, 129.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (414.66666666666634, 129.03703703703707)) + Result.extend_point (create {EV_COORDINATE}.make_precise (412.59259259259244, 129.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (409.92592592592575, 128.7407407407407)) + Result.extend_point (create {EV_COORDINATE}.make_precise (408.1481481481481, 130.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (409.33333333333331, 132.29629629629625)) + Result.extend_point (create {EV_COORDINATE}.make_precise (410.22222222222223, 135.5555555555556)) + Result.extend_point (create {EV_COORDINATE}.make_precise (411.70370370370364, 138.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (409.62962962962945, 143.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (409.33333333333331, 146.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (411.70370370370364, 149.18518518518516)) + Result.extend_point (create {EV_COORDINATE}.make_precise (415.55555555555526, 149.18518518518516)) + Result.extend_point (create {EV_COORDINATE}.make_precise (417.62962962962939, 147.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (421.18518518518493, 149.48148148148147)) + Result.extend_point (create {EV_COORDINATE}.make_precise (423.55555555555526, 153.03703703703707)) + Result.extend_point (create {EV_COORDINATE}.make_precise (420.88888888888886, 153.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (417.33333333333331, 151.85185185185185)) + Result.extend_point (create {EV_COORDINATE}.make_precise (413.48148148148135, 150.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (409.92592592592575, 149.18518518518516)) + Result.extend_point (create {EV_COORDINATE}.make_precise (407.55555555555554, 149.48148148148147)) + Result.extend_point (create {EV_COORDINATE}.make_precise (406.66666666666663, 146.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (401.62962962962945, 143.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (406.96296296296288, 137.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (409.03703703703701, 134.37037037037038)) + Result.extend_point (create {EV_COORDINATE}.make_precise (406.96296296296288, 132.59259259259261)) + Result.extend_point (create {EV_COORDINATE}.make_precise (403.70370370370364, 130.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (402.51851851851842, 129.03703703703707)) + Result.extend_point (create {EV_COORDINATE}.make_precise (399.55555555555554, 128.7407407407407)) + Result.extend_point (create {EV_COORDINATE}.make_precise (400.74074074074059, 131.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (398.66666666666663, 132.29629629629625)) + Result.extend_point (create {EV_COORDINATE}.make_precise (397.18518518518511, 129.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (394.22222222222223, 127.5555555555556)) + Result.extend_point (create {EV_COORDINATE}.make_precise (392.4444444444444, 126.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (394.81481481481467, 124.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (397.18518518518511, 125.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (397.48148148148141, 123.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (399.85185185185179, 123.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (400.4444444444444, 126.37037037037038)) + end + + santa_isabel: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (447.85185185185179, 91.111111111111029)) + Result.extend_point (create {EV_COORDINATE}.make_precise (447.55555555555526, 88.740740740740705)) + Result.extend_point (create {EV_COORDINATE}.make_precise (451.40740740740722, 89.037037037037067)) + Result.extend_point (create {EV_COORDINATE}.make_precise (451.70370370370364, 90.814814814814781)) + Result.extend_point (create {EV_COORDINATE}.make_precise (455.55555555555526, 93.481481481481467)) + Result.extend_point (create {EV_COORDINATE}.make_precise (459.40740740740722, 93.185185185185219)) + Result.extend_point (create {EV_COORDINATE}.make_precise (461.48148148148135, 96.148148148148152)) + Result.extend_point (create {EV_COORDINATE}.make_precise (465.03703703703701, 96.148148148148152)) + Result.extend_point (create {EV_COORDINATE}.make_precise (467.99999999999972, 95.5555555555556)) + Result.extend_point (create {EV_COORDINATE}.make_precise (470.37037037037015, 98.222222222222285)) + Result.extend_point (create {EV_COORDINATE}.make_precise (471.55555555555526, 96.148148148148152)) + Result.extend_point (create {EV_COORDINATE}.make_precise (477.48148148148135, 102.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (481.62962962962939, 104.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (483.70370370370364, 107.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (485.77777777777754, 107.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (487.85185185185179, 111.5555555555556)) + Result.extend_point (create {EV_COORDINATE}.make_precise (491.99999999999972, 111.5555555555556)) + Result.extend_point (create {EV_COORDINATE}.make_precise (494.37037037037015, 113.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (495.55555555555526, 112.7407407407407)) + Result.extend_point (create {EV_COORDINATE}.make_precise (497.62962962962939, 115.70370370370364)) + Result.extend_point (create {EV_COORDINATE}.make_precise (500.59259259259244, 114.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (507.11111111111103, 119.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (509.18518518518493, 122.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (510.96296296296288, 120.7407407407407)) + Result.extend_point (create {EV_COORDINATE}.make_precise (515.99999999999977, 126.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (523.7037037037037, 132.29629629629625)) + Result.extend_point (create {EV_COORDINATE}.make_precise (520.74074074074065, 134.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (518.96296296296282, 134.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (521.62962962962933, 137.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (523.99999999999977, 137.03703703703707)) + Result.extend_point (create {EV_COORDINATE}.make_precise (525.18518518518499, 142.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (519.25925925925912, 140.59259259259261)) + Result.extend_point (create {EV_COORDINATE}.make_precise (516.88888888888891, 137.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (515.99999999999977, 135.5555555555556)) + Result.extend_point (create {EV_COORDINATE}.make_precise (513.03703703703695, 134.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (513.33333333333326, 137.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (516.29629629629608, 140.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (511.85185185185179, 141.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (512.44444444444434, 139.70370370370364)) + Result.extend_point (create {EV_COORDINATE}.make_precise (508.59259259259244, 139.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (506.81481481481461, 135.85185185185185)) + Result.extend_point (create {EV_COORDINATE}.make_precise (509.48148148148135, 133.18518518518522)) + Result.extend_point (create {EV_COORDINATE}.make_precise (502.37037037037015, 130.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (496.1481481481481, 127.85185185185185)) + Result.extend_point (create {EV_COORDINATE}.make_precise (492.59259259259244, 123.70370370370364)) + Result.extend_point (create {EV_COORDINATE}.make_precise (483.70370370370364, 119.85185185185185)) + Result.extend_point (create {EV_COORDINATE}.make_precise (480.1481481481481, 115.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (477.18518518518493, 115.11111111111103)) + Result.extend_point (create {EV_COORDINATE}.make_precise (474.22222222222223, 111.5555555555556)) + Result.extend_point (create {EV_COORDINATE}.make_precise (472.1481481481481, 111.85185185185185)) + Result.extend_point (create {EV_COORDINATE}.make_precise (471.55555555555526, 108.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (467.40740740740722, 105.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (464.74074074074059, 106.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (465.62962962962939, 103.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (462.66666666666634, 102.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (463.25925925925907, 100.29629629629625)) + Result.extend_point (create {EV_COORDINATE}.make_precise (459.70370370370364, 100.29629629629625)) + Result.extend_point (create {EV_COORDINATE}.make_precise (457.33333333333331, 99.111111111111029)) + Result.extend_point (create {EV_COORDINATE}.make_precise (455.25925925925907, 99.999999999999943)) + Result.extend_point (create {EV_COORDINATE}.make_precise (452.88888888888886, 97.925925925925867)) + Result.extend_point (create {EV_COORDINATE}.make_precise (453.77777777777754, 95.259259259259238)) + Result.extend_point (create {EV_COORDINATE}.make_precise (451.11111111111103, 94.074074074074019)) + end + + malaita: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (553.92592592592564, 131.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (556.29629629629608, 130.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (561.92592592592564, 132.59259259259261)) + Result.extend_point (create {EV_COORDINATE}.make_precise (561.92592592592564, 130.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (563.99999999999977, 130.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (568.44444444444434, 138.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (575.85185185185173, 145.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (574.96296296296282, 148.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (573.18518518518499, 148.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (573.18518518518499, 154.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (576.74074074074065, 155.7037037037037)) + Result.extend_point (create {EV_COORDINATE}.make_precise (582.37037037037021, 159.5555555555556)) + Result.extend_point (create {EV_COORDINATE}.make_precise (582.37037037037021, 162.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (584.74074074074065, 163.7037037037037)) + Result.extend_point (create {EV_COORDINATE}.make_precise (583.85185185185173, 166.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (585.62962962962933, 167.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (585.62962962962933, 170.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (588.59259259259215, 169.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (586.51851851851848, 172.59259259259255)) + Result.extend_point (create {EV_COORDINATE}.make_precise (587.11111111111109, 174.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (585.03703703703695, 174.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (588.59259259259215, 178.81481481481472)) + Result.extend_point (create {EV_COORDINATE}.make_precise (591.2592592592589, 183.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (594.22222222222217, 182.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (591.55555555555543, 180.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (591.55555555555543, 177.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (593.92592592592564, 179.7037037037037)) + Result.extend_point (create {EV_COORDINATE}.make_precise (595.40740740740716, 179.40740740740728)) + Result.extend_point (create {EV_COORDINATE}.make_precise (596.88888888888891, 183.85185185185185)) + Result.extend_point (create {EV_COORDINATE}.make_precise (601.62962962962933, 188.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (601.62962962962933, 192.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (602.51851851851848, 196.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (599.2592592592589, 194.81481481481472)) + Result.extend_point (create {EV_COORDINATE}.make_precise (598.07407407407391, 192.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (595.11111111111109, 194.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (594.22222222222217, 191.85185185185185)) + Result.extend_point (create {EV_COORDINATE}.make_precise (589.77777777777737, 187.7037037037037)) + Result.extend_point (create {EV_COORDINATE}.make_precise (584.44444444444434, 184.74074074074065)) + Result.extend_point (create {EV_COORDINATE}.make_precise (585.92592592592564, 182.37037037037038)) + Result.extend_point (create {EV_COORDINATE}.make_precise (582.96296296296282, 180.59259259259255)) + Result.extend_point (create {EV_COORDINATE}.make_precise (581.18518518518499, 181.18518518518516)) + Result.extend_point (create {EV_COORDINATE}.make_precise (579.40740740740716, 176.74074074074065)) + Result.extend_point (create {EV_COORDINATE}.make_precise (575.5555555555552, 176.74074074074065)) + Result.extend_point (create {EV_COORDINATE}.make_precise (575.5555555555552, 173.18518518518516)) + Result.extend_point (create {EV_COORDINATE}.make_precise (573.7777777777776, 172.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (571.99999999999977, 169.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (570.51851851851848, 171.40740740740728)) + Result.extend_point (create {EV_COORDINATE}.make_precise (565.4814814814813, 165.18518518518516)) + Result.extend_point (create {EV_COORDINATE}.make_precise (564.29629629629608, 158.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (564.29629629629608, 156.59259259259255)) + Result.extend_point (create {EV_COORDINATE}.make_precise (560.14814814814804, 150.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (561.03703703703695, 148.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (558.96296296296282, 145.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (560.44444444444434, 143.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (563.11111111111109, 141.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (560.74074074074065, 138.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (555.99999999999977, 135.5555555555556)) + Result.extend_point (create {EV_COORDINATE}.make_precise (555.99999999999977, 133.18518518518522)) + end + + san_cristobal: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (588.29629629629608, 218.81481481481472)) + Result.extend_point (create {EV_COORDINATE}.make_precise (591.2592592592589, 217.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (600.14814814814804, 221.18518518518516)) + Result.extend_point (create {EV_COORDINATE}.make_precise (607.55555555555543, 227.40740740740728)) + Result.extend_point (create {EV_COORDINATE}.make_precise (610.51851851851848, 227.40740740740728)) + Result.extend_point (create {EV_COORDINATE}.make_precise (611.7037037037037, 229.18518518518516)) + Result.extend_point (create {EV_COORDINATE}.make_precise (617.92592592592564, 229.18518518518516)) + Result.extend_point (create {EV_COORDINATE}.make_precise (621.77777777777737, 233.03703703703707)) + Result.extend_point (create {EV_COORDINATE}.make_precise (623.2592592592589, 230.37037037037038)) + Result.extend_point (create {EV_COORDINATE}.make_precise (625.92592592592564, 230.37037037037038)) + Result.extend_point (create {EV_COORDINATE}.make_precise (630.66666666666629, 241.03703703703707)) + Result.extend_point (create {EV_COORDINATE}.make_precise (632.14814814814804, 239.85185185185185)) + Result.extend_point (create {EV_COORDINATE}.make_precise (633.92592592592564, 244.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (631.85185185185173, 246.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (637.77777777777737, 246.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (638.96296296296282, 248.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (633.03703703703695, 247.85185185185185)) + Result.extend_point (create {EV_COORDINATE}.make_precise (629.18518518518499, 247.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (623.85185185185173, 247.5555555555556)) + Result.extend_point (create {EV_COORDINATE}.make_precise (622.37037037037021, 246.37037037037038)) + Result.extend_point (create {EV_COORDINATE}.make_precise (614.66666666666629, 244.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (609.62962962962933, 241.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (606.96296296296282, 241.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (606.37037037037021, 238.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (602.51851851851848, 238.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (601.03703703703695, 235.40740740740728)) + Result.extend_point (create {EV_COORDINATE}.make_precise (598.66666666666629, 235.11111111111103)) + Result.extend_point (create {EV_COORDINATE}.make_precise (598.96296296296282, 231.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (597.18518518518499, 231.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (596.88888888888891, 225.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (593.33333333333303, 225.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (587.7037037037037, 224.44444444444434)) + end + + nendo: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (785.62962962962933, 244.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (787.11111111111109, 241.03703703703707)) + Result.extend_point (create {EV_COORDINATE}.make_precise (788.29629629629608, 238.37037037037038)) + Result.extend_point (create {EV_COORDINATE}.make_precise (789.18518518518499, 242.81481481481472)) + Result.extend_point (create {EV_COORDINATE}.make_precise (790.07407407407391, 239.5555555555556)) + Result.extend_point (create {EV_COORDINATE}.make_precise (792.74074074074065, 237.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (794.51851851851848, 236.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (796.59259259259215, 237.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (798.66666666666629, 236.59259259259255)) + Result.extend_point (create {EV_COORDINATE}.make_precise (803.99999999999977, 238.37037037037038)) + Result.extend_point (create {EV_COORDINATE}.make_precise (800.44444444444434, 242.81481481481472)) + Result.extend_point (create {EV_COORDINATE}.make_precise (802.22222222222217, 243.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (798.96296296296282, 245.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (798.07407407407391, 243.11111111111103)) + Result.extend_point (create {EV_COORDINATE}.make_precise (795.11111111111109, 242.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (793.03703703703695, 244.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (791.85185185185173, 247.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (790.96296296296282, 243.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (788.59259259259215, 246.66666666666669)) + end + + new_caledonia: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (711.85185185185173, 688.14814814814804)) + Result.extend_point (create {EV_COORDINATE}.make_precise (708.88888888888891, 684.59259259259227)) + Result.extend_point (create {EV_COORDINATE}.make_precise (708.88888888888891, 681.92592592592575)) + Result.extend_point (create {EV_COORDINATE}.make_precise (710.66666666666629, 680.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (710.96296296296282, 683.40740740740716)) + Result.extend_point (create {EV_COORDINATE}.make_precise (713.92592592592564, 684.59259259259227)) + Result.extend_point (create {EV_COORDINATE}.make_precise (717.4814814814813, 688.14814814814804)) + Result.extend_point (create {EV_COORDINATE}.make_precise (721.33333333333303, 693.18518518518511)) + Result.extend_point (create {EV_COORDINATE}.make_precise (724.29629629629608, 693.77777777777749)) + Result.extend_point (create {EV_COORDINATE}.make_precise (724.29629629629608, 691.7037037037037)) + Result.extend_point (create {EV_COORDINATE}.make_precise (726.96296296296282, 690.81481481481467)) + Result.extend_point (create {EV_COORDINATE}.make_precise (729.03703703703695, 692.29629629629619)) + Result.extend_point (create {EV_COORDINATE}.make_precise (732.88888888888891, 692.59259259259227)) + Result.extend_point (create {EV_COORDINATE}.make_precise (738.51851851851848, 697.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (743.85185185185173, 702.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (745.92592592592564, 702.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (750.66666666666629, 709.77777777777749)) + Result.extend_point (create {EV_COORDINATE}.make_precise (757.4814814814813, 713.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (764.59259259259215, 717.18518518518511)) + Result.extend_point (create {EV_COORDINATE}.make_precise (768.14814814814804, 716.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (770.81481481481455, 719.25925925925901)) + Result.extend_point (create {EV_COORDINATE}.make_precise (769.62962962962933, 721.62962962962933)) + Result.extend_point (create {EV_COORDINATE}.make_precise (771.40740740740716, 723.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (772.29629629629608, 724.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (775.55555555555543, 725.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (776.74074074074065, 728.14814814814804)) + Result.extend_point (create {EV_COORDINATE}.make_precise (777.92592592592564, 733.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (781.4814814814813, 735.25925925925901)) + Result.extend_point (create {EV_COORDINATE}.make_precise (782.96296296296282, 739.40740740740716)) + Result.extend_point (create {EV_COORDINATE}.make_precise (788.59259259259215, 740.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (791.55555555555543, 743.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (794.81481481481455, 745.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (795.7037037037037, 747.40740740740716)) + Result.extend_point (create {EV_COORDINATE}.make_precise (801.62962962962933, 745.92592592592575)) + Result.extend_point (create {EV_COORDINATE}.make_precise (803.40740740740716, 751.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (809.33333333333326, 753.92592592592575)) + Result.extend_point (create {EV_COORDINATE}.make_precise (810.22222222222217, 756.59259259259238)) + Result.extend_point (create {EV_COORDINATE}.make_precise (813.18518518518499, 756.59259259259238)) + Result.extend_point (create {EV_COORDINATE}.make_precise (814.37037037037021, 759.25925925925901)) + Result.extend_point (create {EV_COORDINATE}.make_precise (817.62962962962933, 760.14814814814804)) + Result.extend_point (create {EV_COORDINATE}.make_precise (819.40740740740716, 762.81481481481467)) + Result.extend_point (create {EV_COORDINATE}.make_precise (822.96296296296259, 762.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (822.96296296296259, 764.59259259259238)) + Result.extend_point (create {EV_COORDINATE}.make_precise (829.18518518518499, 771.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (830.96296296296259, 770.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (829.77777777777715, 772.59259259259238)) + Result.extend_point (create {EV_COORDINATE}.make_precise (834.22222222222217, 774.96296296296271)) + Result.extend_point (create {EV_COORDINATE}.make_precise (835.70370370370347, 777.03703703703673)) + Result.extend_point (create {EV_COORDINATE}.make_precise (837.18518518518499, 776.14814814814804)) + Result.extend_point (create {EV_COORDINATE}.make_precise (839.55555555555543, 778.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (843.40740740740716, 778.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (845.4814814814813, 781.18518518518511)) + Result.extend_point (create {EV_COORDINATE}.make_precise (846.96296296296259, 785.92592592592575)) + Result.extend_point (create {EV_COORDINATE}.make_precise (849.92592592592564, 790.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (849.33333333333326, 794.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (847.85185185185173, 795.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (847.85185185185173, 798.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (844.59259259259238, 798.37037037037021)) + Result.extend_point (create {EV_COORDINATE}.make_precise (843.40740740740716, 796.59259259259238)) + Result.extend_point (create {EV_COORDINATE}.make_precise (842.51851851851848, 794.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (840.14814814814804, 793.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (839.85185185185173, 795.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (841.92592592592564, 798.37037037037021)) + Result.extend_point (create {EV_COORDINATE}.make_precise (839.85185185185173, 801.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (838.37037037037021, 798.37037037037021)) + Result.extend_point (create {EV_COORDINATE}.make_precise (835.40740740740716, 796.29629629629596)) + Result.extend_point (create {EV_COORDINATE}.make_precise (836.29629629629585, 794.81481481481467)) + Result.extend_point (create {EV_COORDINATE}.make_precise (834.51851851851848, 794.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (831.85185185185173, 792.74074074074065)) + Result.extend_point (create {EV_COORDINATE}.make_precise (826.81481481481455, 793.03703703703673)) + Result.extend_point (create {EV_COORDINATE}.make_precise (821.77777777777715, 788.59259259259238)) + Result.extend_point (create {EV_COORDINATE}.make_precise (819.40740740740716, 789.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (816.44444444444434, 789.18518518518511)) + Result.extend_point (create {EV_COORDINATE}.make_precise (816.14814814814804, 787.40740740740716)) + Result.extend_point (create {EV_COORDINATE}.make_precise (812.29629629629585, 784.74074074074065)) + Result.extend_point (create {EV_COORDINATE}.make_precise (809.92592592592564, 780.29629629629596)) + Result.extend_point (create {EV_COORDINATE}.make_precise (809.62962962962933, 777.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (808.14814814814804, 775.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (806.07407407407391, 775.85185185185185)) + Result.extend_point (create {EV_COORDINATE}.make_precise (805.4814814814813, 773.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (804.29629629629608, 775.25925925925901)) + Result.extend_point (create {EV_COORDINATE}.make_precise (801.33333333333303, 775.25925925925901)) + Result.extend_point (create {EV_COORDINATE}.make_precise (798.07407407407391, 773.18518518518511)) + Result.extend_point (create {EV_COORDINATE}.make_precise (795.40740740740716, 772.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (794.81481481481455, 768.74074074074065)) + Result.extend_point (create {EV_COORDINATE}.make_precise (792.74074074074065, 769.92592592592575)) + Result.extend_point (create {EV_COORDINATE}.make_precise (792.44444444444434, 766.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (790.07407407407391, 764.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (791.2592592592589, 767.85185185185185)) + Result.extend_point (create {EV_COORDINATE}.make_precise (788.88888888888891, 767.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (787.40740740740716, 765.18518518518511)) + Result.extend_point (create {EV_COORDINATE}.make_precise (785.92592592592564, 765.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (782.07407407407391, 762.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (778.81481481481455, 763.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (778.51851851851848, 758.96296296296271)) + Result.extend_point (create {EV_COORDINATE}.make_precise (774.37037037037021, 760.14814814814804)) + Result.extend_point (create {EV_COORDINATE}.make_precise (771.99999999999977, 758.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (769.03703703703695, 756.59259259259238)) + Result.extend_point (create {EV_COORDINATE}.make_precise (768.14814814814804, 758.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (764.59259259259215, 754.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (762.81481481481455, 748.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (759.2592592592589, 746.81481481481467)) + Result.extend_point (create {EV_COORDINATE}.make_precise (752.44444444444434, 742.37037037037021)) + Result.extend_point (create {EV_COORDINATE}.make_precise (749.18518518518499, 736.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (745.33333333333303, 734.96296296296271)) + Result.extend_point (create {EV_COORDINATE}.make_precise (745.03703703703695, 732.59259259259238)) + Result.extend_point (create {EV_COORDINATE}.make_precise (742.96296296296282, 732.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (742.37037037037021, 728.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (740.59259259259215, 728.14814814814804)) + Result.extend_point (create {EV_COORDINATE}.make_precise (741.18518518518499, 726.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (739.7037037037037, 725.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (737.62962962962933, 726.37037037037021)) + Result.extend_point (create {EV_COORDINATE}.make_precise (733.4814814814813, 723.70370370370358)) + Result.extend_point (create {EV_COORDINATE}.make_precise (733.77777777777737, 721.92592592592575)) + Result.extend_point (create {EV_COORDINATE}.make_precise (730.81481481481455, 721.03703703703673)) + Result.extend_point (create {EV_COORDINATE}.make_precise (727.55555555555543, 718.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (730.51851851851848, 716.29629629629596)) + Result.extend_point (create {EV_COORDINATE}.make_precise (728.14814814814804, 714.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (723.7037037037037, 709.18518518518511)) + Result.extend_point (create {EV_COORDINATE}.make_precise (720.44444444444434, 708.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (721.92592592592564, 706.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (719.2592592592589, 705.03703703703707)) + Result.extend_point (create {EV_COORDINATE}.make_precise (719.2592592592589, 701.77777777777749)) + Result.extend_point (create {EV_COORDINATE}.make_precise (716.29629629629608, 700.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (715.11111111111109, 698.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (717.4814814814813, 698.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (719.85185185185173, 699.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (719.2592592592589, 695.85185185185185)) + Result.extend_point (create {EV_COORDINATE}.make_precise (716.59259259259215, 695.25925925925901)) + Result.extend_point (create {EV_COORDINATE}.make_precise (714.81481481481455, 696.14814814814804)) + Result.extend_point (create {EV_COORDINATE}.make_precise (714.81481481481455, 693.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (713.03703703703695, 695.85185185185185)) + Result.extend_point (create {EV_COORDINATE}.make_precise (711.2592592592589, 692.29629629629619)) + Result.extend_point (create {EV_COORDINATE}.make_precise (713.03703703703695, 690.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (713.62962962962933, 688.44444444444446)) + end + + manus: EV_MODEL_POLYGON + -- Make the polygon + attribute + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-81.629629629629619, -157.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-79.555555555555557, -157.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-78.962962962962962, -159.25925925925921)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-76.592592592592595, -159.25925925925921)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-72.740740740740733, -158.6666666666666)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-70.370370370370381, -159.85185185185179)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-65.333333333333329, -159.55555555555549)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-57.925925925925924, -159.55555555555549)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-49.629629629629633, -156.88888888888883)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-44.592592592592595, -155.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-44.296296296296305, -157.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-46.370370370370374, -159.25925925925921)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-41.925925925925924, -157.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-42.518518518518526, -154.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-48.148148148148152, -154.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-49.925925925925924, -152.1481481481481)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-53.777777777777771, -147.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-57.629629629629633, -149.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-59.703703703703709, -147.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-61.777777777777771, -149.48148148148144)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-63.555555555555557, -148.29629629629625)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-69.481481481481481, -148.88888888888883)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-72.148148148148152, -150.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-75.111111111111114, -152.1481481481481)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-77.18518518518519, -151.85185185185179)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-75.111111111111114, -150.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-76.296296296296305, -148.59259259259255)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-80.444444444444443, -149.18518518518513)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-81.333333333333329, -147.11111111111106)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-83.407407407407405, -147.40740740740736)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-84.296296296296291, -151.55555555555549)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-81.333333333333329, -152.4444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-81.037037037037038, -154.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-82.222222222222214, -155.11111111111106)) + end + +invariant + +-- correct_location: attached target_imp implies location = vitp.solomans + +end diff --git a/jj_vitp/Interface/widgets/other_widgets/anchor.e b/jj_vitp/Interface/widgets/other_widgets/anchor.e new file mode 100644 index 0000000..b98566a --- /dev/null +++ b/jj_vitp/Interface/widgets/other_widgets/anchor.e @@ -0,0 +1,123 @@ +note + description: "[ + A widget drawn as an anchor. + ]" + author: "Jimmy J. Johnson" + +class + ANCHOR + +inherit + + EV_MODEL_POLYGON + redefine + default_create + end + +create + default_create + +feature {NONE} -- Initialization + + default_create + -- Create an intance + do + Precursor {EV_MODEL_POLYGON} + extend_point (create {EV_COORDINATE}.make_precise (0, 0)) + extend_point (create {EV_COORDINATE}.make_precise (-2.2222222222222285, -1.3333333333333286)) + extend_point (create {EV_COORDINATE}.make_precise (-4, -5.7777777777777857)) + extend_point (create {EV_COORDINATE}.make_precise (-3.5555555555555571, -9.3333333333333286)) + extend_point (create {EV_COORDINATE}.make_precise (-1.3333333333333286, -12)) + extend_point (create {EV_COORDINATE}.make_precise (2.6666666666666714, -13.777777777777786)) + extend_point (create {EV_COORDINATE}.make_precise (7.5555555555555571, -14.222222222222214)) + extend_point (create {EV_COORDINATE}.make_precise (11.1111111111111, -13.333333333333329)) + extend_point (create {EV_COORDINATE}.make_precise (13.777777777777771, -9.3333333333333286)) + extend_point (create {EV_COORDINATE}.make_precise (14.666666666666671, -4.8888888888888857)) + extend_point (create {EV_COORDINATE}.make_precise (11.358024691358025, 0.52674897119338482)) + extend_point (create {EV_COORDINATE}.make_precise (43.999999999999986, 0.44444444444444287)) + extend_point (create {EV_COORDINATE}.make_precise (44.806584362139901, -1.1851851851851904)) + extend_point (create {EV_COORDINATE}.make_precise (45.59670781893, 0.39506172839504927)) + extend_point (create {EV_COORDINATE}.make_precise (48.625514403292172, 0.79012345679011275)) + extend_point (create {EV_COORDINATE}.make_precise (48.8888888888889, 4.4444444444444429)) + extend_point (create {EV_COORDINATE}.make_precise (45.860082304526699, 4.7407407407407334)) + extend_point (create {EV_COORDINATE}.make_precise (44.938271604938265, 6.3209876543209731)) + extend_point (create {EV_COORDINATE}.make_precise (44.279835390946474, 4.4773662551440196)) + extend_point (create {EV_COORDINATE}.make_precise (8.5925925925925952, 4.7407407407407334)) + extend_point (create {EV_COORDINATE}.make_precise (9.5144032921810577, 95.736625514403258)) + extend_point (create {EV_COORDINATE}.make_precise (14.650205761316855, 102.18930041152258)) + extend_point (create {EV_COORDINATE}.make_precise (20.31275720164605, 101.53086419753082)) + extend_point (create {EV_COORDINATE}.make_precise (24.444444444444443, 99.999999999999986)) + extend_point (create {EV_COORDINATE}.make_precise (29.333333333333329, 96.888888888888872)) + extend_point (create {EV_COORDINATE}.make_precise (34.666666666666671, 93.777777777777786)) + extend_point (create {EV_COORDINATE}.make_precise (38.222222222222214, 90.222222222222214)) + extend_point (create {EV_COORDINATE}.make_precise (42.222222222222214, 86.222222222222214)) + extend_point (create {EV_COORDINATE}.make_precise (46.222222222222214, 81.777777777777786)) + extend_point (create {EV_COORDINATE}.make_precise (49.777777777777757, 76.444444444444443)) + extend_point (create {EV_COORDINATE}.make_precise (51.522633744855952, 71.901234567901199)) + extend_point (create {EV_COORDINATE}.make_precise (52.312757201646022, 68.082304526748928)) + extend_point (create {EV_COORDINATE}.make_precise (52.971193415637813, 65.448559670781847)) + extend_point (create {EV_COORDINATE}.make_precise (52.8888888888889, 63.1111111111111)) + extend_point (create {EV_COORDINATE}.make_precise (50.666666666666671, 63.999999999999986)) + extend_point (create {EV_COORDINATE}.make_precise (54.02469135802464, 60.444444444444443)) + extend_point (create {EV_COORDINATE}.make_precise (55.341563786008223, 57.283950617283935)) + extend_point (create {EV_COORDINATE}.make_precise (55.999999999999986, 53.333333333333329)) + extend_point (create {EV_COORDINATE}.make_precise (57.580246913580211, 58.864197530864161)) + extend_point (create {EV_COORDINATE}.make_precise (57.185185185185148, 62.814814814814795)) + extend_point (create {EV_COORDINATE}.make_precise (56.444444444444443, 67.999999999999986)) + extend_point (create {EV_COORDINATE}.make_precise (55.555555555555557, 72.444444444444443)) + extend_point (create {EV_COORDINATE}.make_precise (53.777777777777757, 76.888888888888872)) + extend_point (create {EV_COORDINATE}.make_precise (50.995884773662524, 82.041152263374428)) + extend_point (create {EV_COORDINATE}.make_precise (47.308641975308618, 86.386831275720127)) + extend_point (create {EV_COORDINATE}.make_precise (43.555555555555557, 90.222222222222214)) + extend_point (create {EV_COORDINATE}.make_precise (39.999999999999986, 94.222222222222186)) + extend_point (create {EV_COORDINATE}.make_precise (33.777777777777757, 99.1111111111111)) + extend_point (create {EV_COORDINATE}.make_precise (29.92592592592591, 102.05761316872425)) + extend_point (create {EV_COORDINATE}.make_precise (24.395061728395049, 104.82304526748966)) + extend_point (create {EV_COORDINATE}.make_precise (18.469135802469125, 106.79835390946495)) + extend_point (create {EV_COORDINATE}.make_precise (13.728395061728392, 108.5102880658436)) + extend_point (create {EV_COORDINATE}.make_precise (9.9094650205761212, 111.67078189300408)) + extend_point (create {EV_COORDINATE}.make_precise (7.6707818930040759, 114.56790123456786)) + extend_point (create {EV_COORDINATE}.make_precise (4.8888888888888999, 118.22222222222219)) + extend_point (create {EV_COORDINATE}.make_precise (3.1111111111111001, 114.66666666666664)) + extend_point (create {EV_COORDINATE}.make_precise (0.44444444444444287, 111.55555555555553)) + extend_point (create {EV_COORDINATE}.make_precise (-3.1111111111111001, 108.88888888888887)) + extend_point (create {EV_COORDINATE}.make_precise (-8.4444444444444429, 107.1111111111111)) + extend_point (create {EV_COORDINATE}.make_precise (-16, 103.99999999999999)) + extend_point (create {EV_COORDINATE}.make_precise (-21.777777777777771, 101.33333333333333)) + extend_point (create {EV_COORDINATE}.make_precise (-26.222222222222214, 97.777777777777786)) + extend_point (create {EV_COORDINATE}.make_precise (-31.1111111111111, 93.777777777777786)) + extend_point (create {EV_COORDINATE}.make_precise (-34.666666666666671, 90.222222222222214)) + extend_point (create {EV_COORDINATE}.make_precise (-38.222222222222214, 85.333333333333329)) + extend_point (create {EV_COORDINATE}.make_precise (-40.444444444444443, 82.222222222222214)) + extend_point (create {EV_COORDINATE}.make_precise (-43.1111111111111, 77.333333333333329)) + extend_point (create {EV_COORDINATE}.make_precise (-44.888888888888886, 72.888888888888872)) + extend_point (create {EV_COORDINATE}.make_precise (-46.666666666666671, 67.1111111111111)) + extend_point (create {EV_COORDINATE}.make_precise (-47.55555555555555, 61.333333333333329)) + extend_point (create {EV_COORDINATE}.make_precise (-46.666666666666671, 55.1111111111111)) + extend_point (create {EV_COORDINATE}.make_precise (-44.872427983539112, 60.31275720164605)) + extend_point (create {EV_COORDINATE}.make_precise (-43.160493827160508, 63.604938271604922)) + extend_point (create {EV_COORDINATE}.make_precise (-40.444444444444443, 66.666666666666643)) + extend_point (create {EV_COORDINATE}.make_precise (-43.423868312757222, 66.370370370370338)) + extend_point (create {EV_COORDINATE}.make_precise (-41.448559670781904, 73.481481481481481)) + extend_point (create {EV_COORDINATE}.make_precise (-38.666666666666671, 78.666666666666643)) + extend_point (create {EV_COORDINATE}.make_precise (-36.181069958847743, 82.567901234567856)) + extend_point (create {EV_COORDINATE}.make_precise (-32.888888888888886, 86.666666666666643)) + extend_point (create {EV_COORDINATE}.make_precise (-29.333333333333329, 90.222222222222214)) + extend_point (create {EV_COORDINATE}.make_precise (-24.8888888888889, 94.666666666666643)) + extend_point (create {EV_COORDINATE}.make_precise (-20.444444444444443, 97.333333333333329)) + extend_point (create {EV_COORDINATE}.make_precise (-15.555555555555557, 99.999999999999986)) + extend_point (create {EV_COORDINATE}.make_precise (-10.222222222222229, 101.77777777777779)) + extend_point (create {EV_COORDINATE}.make_precise (-4.8888888888888999, 103.55555555555553)) + extend_point (create {EV_COORDINATE}.make_precise (1.3333333333333286, 95.999999999999986)) + extend_point (create {EV_COORDINATE}.make_precise (1.744855967078152, 5.0041152263374471)) + extend_point (create {EV_COORDINATE}.make_precise (-34.469135802469154, 5.0041152263374471)) + extend_point (create {EV_COORDINATE}.make_precise (-35.52263374485598, 6.7160493827160366)) + extend_point (create {EV_COORDINATE}.make_precise (-36.181069958847743, 4.8724279835390831)) + extend_point (create {EV_COORDINATE}.make_precise (-39.1111111111111, 4.8888888888888857)) + extend_point (create {EV_COORDINATE}.make_precise (-39.1111111111111, 1.3333333333333286)) + extend_point (create {EV_COORDINATE}.make_precise (-36.312757201646107, 0.52674897119338482)) + extend_point (create {EV_COORDINATE}.make_precise (-35.654320987654316, -1.0534979423868407)) + extend_point (create {EV_COORDINATE}.make_precise (-34.600823045267518, 0.79012345679011275)) + end + +end diff --git a/jj_vitp/Interface/widgets/other_widgets/arrow.e b/jj_vitp/Interface/widgets/other_widgets/arrow.e new file mode 100644 index 0000000..9c9dc95 --- /dev/null +++ b/jj_vitp/Interface/widgets/other_widgets/arrow.e @@ -0,0 +1,177 @@ +note + description: "[ + An arrow widget + ]" + author: "Jimmy J. Johnson" + +class + ARROW + +inherit + + VITP_WIDGET + redefine + default_create, + target_imp, + build_widgets, + paint + end + +create + default_create + +feature {NONE} -- Initialization + + default_create + -- Initialize attributes + do +-- create head_dot + create nock + create shaft + create head + Precursor {VITP_WIDGET} + end + + build_widgets + -- Create the widgets that make up Current + local + t: EV_MODEL_TRANSFORMATION + do + -- Use the `dot' as reference point to build the arrow (the center of the nock). + -- The EV_MODEL_DOT and EV_MODEL_LINE do not scale nicely, so use circle and + -- rectangle to build the parts of the arrow. + create t.make_zero + t.translate (width // 2, 0) + dot.transform (t) + direction := North + build_nock + build_shaft + build_head + end + + build_nock + -- Create the end of the arrow opposite the head + -- A circle slightly bigger than the shaft, centered on `dot' + local + p1, p2: EV_COORDINATE + r: INTEGER + do + r := (width // 2) + (width // 4) + create p1.make_precise (dot.x - r, dot.y - r) + create p2.make_precise (dot.x + r, dot.y + r) + create nock.make_with_points (p1, p2) + extend (nock) + end + + build_shaft + -- Create the shaft as a rectangle `width' wide with an arrow on the + -- end. Assume the arrow tip ends `Default_length' away from `dot'. + local + p: EV_COORDINATE + len, wid: INTEGER + do +io.put_string ("ARROW.build_shaft -- fix me! Add a pointed tip. %N") + len := length + wid := width // 2 + create shaft + create p.make_precise (dot.x - wid, dot.y) + shaft.extend_point (p) + create p.make_precise (dot.x + wid, dot.y) + shaft.extend_point (p) + create p.make_precise (dot.x + wid, dot.y + len) + shaft.extend_point (p) + create p.make_precise (dot.x - wid, dot.y + len) + shaft.extend_point (p) + extend (shaft) + end + + build_head + -- Create the point (or retical) end of the arrow + local + p: EV_COORDINATE + do + create head + end + +feature -- Access + + direction: INTEGER + -- The direction the arrow is pointing if not targetting a unit + + width: INTEGER + -- The size of the `shaft' + do + Result := 100 + end + + length: INTEGER + -- The length of the `shaft' calculated from the distance between the + -- two widgets or as a percentage of the size of the `unit_widget' + local + xd, yd: INTEGER + do + Result := 500 + end + +feature -- Basic operations + + fill_widgets + -- Nothing to do here. + do + end + + paint + -- Set the colors of the sub-widgets + do + Precursor {VITP_WIDGET} +-- if attached unit_widget as uw then +-- if attached targetted_widget as tw then +-- if uw.unit.nationality = US then +-- nock.set_foreground_color (adjusted_color (US_retical_color)) +-- nock.set_background_color (adjusted_color (US_retical_color)) +-- shaft.set_foreground_color (adjusted_color (US_retical_color)) +-- shaft.set_background_color (adjusted_color (US_retical_color)) +-- else +-- nock.set_foreground_color (adjusted_color (Japanese_retical_color)) +-- nock.set_background_color (adjusted_color (Japanese_retical_color)) +-- shaft.set_foreground_color (adjusted_color (Japanese_retical_color)) +-- shaft.set_background_color (adjusted_color (Japanese_retical_color)) +-- end +-- else +-- -- there is no target +-- nock.set_foreground_color (adjusted_color (arrow_color)) +-- nock.set_background_color (adjusted_color (arrow_color)) +-- shaft.set_foreground_color (adjusted_color (arrow_color)) +-- shaft.set_background_color (adjusted_color (arrow_color)) +--io.put_string ("ARROW.paint -- fix me! Hide/show the retical %N") +-- end +-- end + end + +feature {NONE} -- Implementation + + target_imp: detachable ATTACK_UNIT + -- Anchor for `target' + + nock: EV_MODEL_ELLIPSE + -- Shows the end opposite the head + + shaft: EV_MODEL_POLYGON + -- The shaft of the arrow + + head: EV_MODEL_POLYGON + -- The point of the arrow + +-- head: RETICAL + -- Gun sight retical + + North: INTEGER = 1 + South: INTEGER = 2 + East: INTEGER = 3 + West: INTEGER = 4 + North_east: INTEGER = 5 + South_east: INTEGER = 6 + North_west: INTEGER = 7 + South_west: INTEGER = 8 + +end diff --git a/jj_vitp/Interface/widgets/other_widgets/border.e b/jj_vitp/Interface/widgets/other_widgets/border.e new file mode 100644 index 0000000..c6e6777 --- /dev/null +++ b/jj_vitp/Interface/widgets/other_widgets/border.e @@ -0,0 +1,236 @@ +note + description: "[ + Builds a raised border for placement on an {ATTACK_UNIT_WIDGET} + ]" + author: "Jimmy J. Johnson" + +class + BORDER + +inherit + + EV_MODEL_WORLD + redefine + create_interface_objects + end + +create + make + +create {BORDER} + list_make + +feature {NONE} -- Initialization + + create_interface_objects + -- Initialize attributes + do + Precursor {EV_MODEL_WORLD} + create color + create borders.make_filled (create {LINKED_LIST [EV_MODEL_POLYGON]}.make, 1, 4) + end + +-- make (a_size: REAL_64) + make (a_width, a_height, a_edge_size: REAL_64) + -- Create Current setting the `width' and `height' + -- If `a_width' and `a_height' is the size of the widget on + -- which to place the border, then the border steps will be + -- placed over the edge of the widget, not surrounding the + -- widget. (This seems preferred, so that the size of the + -- bordered widget is not bigger than planned.) + require + width_big_enough: a_width >= 30 -- arbitrary + height_big_enough: a_height >= 30 + edge_size_big_enough: a_edge_size >= 10 + local + i: INTEGER + do + default_create + create borders.make_filled (create {LINKED_LIST [EV_MODEL_POLYGON]}.make, 1, 4) + from i := Left + until i > Bottom + loop + borders [i] := create {LINKED_LIST [EV_MODEL_POLYGON]}.make + i := i + 1 + end +-- size := a_size + width := a_width + height := a_height + edge_size := a_edge_size + build_edges + end + +feature -- Access + + color: EV_COLOR + -- The color from which to `paint' Current. + + width: REAL_64 + -- The width from which to build Current. + + height: REAL_64 + -- The height from which to build Current. + +-- size: REAL_64 + -- The width [and length] from which to build Current. + +feature -- Element change + + set_color (a_color: EV_COLOR) + -- Change the `color'. + do + color := a_color + paint + end + +feature -- Basic operations + + paint + -- Set the colors for the boarder polygons based on the + -- color of the background color of the `tile' + local + i: INTEGER + do + -- Color each edge in order: Left, Top, Right, Bottom + from i := Left + until i > Bottom + loop + paint_edge (i) + i := i + 1 + end + end + +feature {NONE} -- Implementation + + paint_edge (a_index: INTEGER) + -- Paint the `a_index'th edge + require + index_big_enough: a_index >= 1 + index_small_enough: a_index <= 4 + local + fad: COLOR_FADER + polys: LINKED_LIST [EV_MODEL_POLYGON] + p: EV_MODEL_POLYGON + c: EV_COLOR + i: INTEGER + do + polys := borders [a_index] + create fad.make_with_color_and_count (color, polys.count) + from polys.start + until polys.exhausted + loop + p := polys.item + i := polys.count - polys.index + 1 + if a_index <= 2 then + c := fad.i_th_lighter (i) + else + c := fad.i_th_darker (i) + end + p.set_background_color (c) + p.set_foreground_color (c) + polys.forth + end + end + + build_edges + -- Create the polygons that simulate a raised boarder + local + -- Short variable names to make equations shorter + p, p2, p3, p4: EV_COORDINATE + poly: EV_MODEL_POLYGON + w, h: REAL_64 + ss: REAL_64 + c: INTEGER + i: INTEGER + do + -- Each boarder is one-tenth the width of the `box'. We then determine + -- the number of times 2 will go into this width and use that as the + -- number of color steps to make on each boarder. + -- The right and bottom boarders should fade-to-black; the top and left + -- boarders should fade-to-white then fade-to-grey. + -- This should give the appearance of a light source up and left. + ss := step_size + w := width + h := height + c := step_count + from i := 1 + until i > c + loop + -- right + create p.make_precise (w - i * ss, i * ss) + create p2.make_precise ((w - (i - 1) * ss), (i - 1) * ss) + create p3.make_precise (w - (i - 1) * ss, h - (i - 1) * ss) + create p4.make_precise (w - i * ss, h - i * ss) + create poly + poly.extend_point (p) + poly.extend_point (p2) + poly.extend_point (p3) + poly.extend_point (p4) + borders [Right].extend (poly) + extend (poly) + -- left + create p.make_precise (i * ss, i * ss) + create p2.make_precise (i * ss, h - i * ss) + create p3.make_precise ((i - 1) * ss, h - (i - 1) * ss) + create p4.make_precise ((i - 1) * ss, (i - 1) * ss) + create poly + poly.extend_point (p) + poly.extend_point (p2) + poly.extend_point (p3) + poly.extend_point (p4) + borders [Left].extend (poly) + extend (poly) + -- bottom + create p.make_precise (i * ss, h - i * ss) + create p2.make_precise ((w - i * ss), h - i * ss) + create p3.make_precise (w - (i - 1) * ss, h - (i - 1) * ss) + create p4.make_precise ((i - 1) * ss, h - (i - 1) * ss) + create poly + poly.extend_point (p) + poly.extend_point (p2) + poly.extend_point (p3) + poly.extend_point (p4) + borders [Bottom].extend (poly) + extend (poly) + -- top + create p.make_precise ((i - 1) * ss, (i - 1) * ss) + create p2.make_precise (w - (i - 1) * ss, (i - 1) * ss) + create p3.make_precise (w - i * ss, i * ss) + create p4.make_precise (i * ss, i * ss) + create poly + poly.extend_point (p) + poly.extend_point (p2) + poly.extend_point (p3) + poly.extend_point (p4) + borders [Top].extend (poly) + extend (poly) + i := i + 1 + end + end + + borders: ARRAY [LINKED_LIST [EV_MODEL_POLYGON]] + -- Contains the four edges + + edge_size: REAL_64 + -- The size of each edge calculated from the smaller of + -- the `width' or `height' +-- do +---- Result := size / 10 +-- Result := width.min (height) / 10 +-- end + + step_count: INTEGER + -- The number of incremental colors into which each edge is broken + do + Result := (edge_size / step_size).rounded + end + + step_size: REAL_64 = 2.0 + -- The logical width of each polygon in the edges + + Left: INTEGER = 1 + Top: INTEGER = 2 + Right: INTEGER = 3 + Bottom: INTEGER = 4 + +end diff --git a/jj_vitp/Interface/widgets/other_widgets/control_marker.e b/jj_vitp/Interface/widgets/other_widgets/control_marker.e new file mode 100644 index 0000000..b2a3761 --- /dev/null +++ b/jj_vitp/Interface/widgets/other_widgets/control_marker.e @@ -0,0 +1,251 @@ +note + description: "[ + Draws the circular control markers for VITP. + ]" + author: "Jimmy J. Johnson" + +class + CONTROL_MARKER + +inherit + + FONT_AND_COLOR_CONSTANTS + undefine + default_create + end + + DIMABLE + redefine + default_create + end + + EV_MODEL_WORLD + redefine + default_create, + create_interface_objects + end +create + make + +create {CONTROL_MARKER} + list_make + +feature {NONE} -- Initialization + + default_create + -- Set up Current + do + Precursor {DIMABLE} + Precursor {EV_MODEL_WORLD} + build_widgets + end + + make (a_location: LOCATION) + -- Set up Current + do + location_imp := a_location + default_create + end + + create_interface_objects + -- Create attributes + local + p1, p2: EV_COORDINATE + s: REAL_64 + offset: REAL_64 + t: EV_MODEL_TRANSFORMATION + do + Precursor {EV_MODEL_WORLD} + create circle + create sun + create star + create anchor + end + + build_widgets + -- Construct and add widgets to Current. + do + build_circle + build_sun + build_star + build_anchor + star.scale (0.8) + anchor.set_x_y (anchor.x + 90, anchor.y + 62) + star.set_x_y (star.x + 96, star.y + 96) + sun.set_x_y (sun.x + 20, sun.y + 30) + paint + end + + build_circle + -- Create the marker + local + p1, p2: EV_COORDINATE + s: REAL_64 + do + extend (circle) + create p1.make_precise (0, 0) + create p2.make_precise (Initial_size, Initial_size) + circle.set_point_a (p1) + circle.set_point_b (p2) + end + + build_sun + -- Create the "Japanese" rising `sun' + local + p1, p2: EV_COORDINATE + s: REAL_64 + offset: REAL_64 + do + extend (sun) + -- create a circle that is slightly small than `circle' + -- and offset it a little + s := Initial_size * 0.7 + create p1.make_precise (0, 0) + create p2.make_precise (s, s) + sun.set_point_a (p1) + sun.set_point_b (p2) + offset := Initial_size / 12 + -- offset a little +-- translate_widget (sun, offset, offset) + end + + build_star + -- Create the star + do + extend (star) +-- translate_widget (star, -Initial_size/12, -Initial_size/12) +-- scale_widget (star, 1.2) +-- fix center on ... dot is not positioned yet by `initialize' +-- star.set_x_y (dot.x, dot.y) + end + + build_anchor + -- Create an anchor + do + extend (anchor) +-- scale_widget (anchor, 2.0) +-- translate_widget (anchor, -Initial_size/12, -Initial_size/12) +-- fix center on ... dot is not positioned yet by `initialize' + end + +feature -- Access + + location: LOCATION + -- The location (e.g. a PORT or a chart) to which + -- this marker belongs + require + has_location: has_location + do + check attached location_imp as loc then + Result := loc + end + end + + set_location (a_location: like location) + -- Change the `location' + do + location_imp := a_location + end + +feature {NONE} -- Implementation + + location_imp: detachable like location + -- Implementation for `location' + +feature -- Status report + + has_location: BOOLEAN + -- Has a location been assigned? + do + Result := attached location_imp + end + + is_boarder_shown: BOOLEAN + -- Should the outline of the flag show? + +feature -- Status setting + + show_boarder + -- Make the outline of the flag visible + do + is_boarder_shown := true + end + + hide_boarder + -- Make the outline of the flag NOT visible + do + is_boarder_shown := false + end + +feature -- Basic operations + + hide_anchor + -- Make the anchor no show. + -- Required for non-major ports. + do + anchor.hide + end + + paint + -- Set the colors of the sub-widgets + local + fc: EV_COLOR + do + circle.show + if location.is_allied then + circle.set_foreground_color (adjusted_color (US_unit_color)) + circle.set_background_color (adjusted_color (US_unit_color)) + sun.hide + star.show +-- star.paint + else + sun.show + star.hide + circle.set_foreground_color (adjusted_color (White)) + circle.set_background_color (adjusted_color (White)) + end + -- Hide or show boarder color? + if location.nationality = {NATIONALITY_CONSTANTS}.japanese then + fc := japanese_unit_color + else + fc := allied_unit_boarder_color + end + if is_boarder_shown then + circle.set_foreground_color (adjusted_color (fc)) + end + anchor.set_foreground_color (adjusted_color (Black)) + anchor.set_background_color (adjusted_color (Black)) + sun.set_foreground_color (adjusted_color (Japanese_unit_color)) + sun.set_background_color (adjusted_color (Japanese_unit_color)) + end + +feature {NONE} -- Implementation + + circle: EV_MODEL_ELLIPSE + -- The main figure + + sun: EV_MODEL_ELLIPSE + -- The sun on Japanese markers + + star: STAR + -- The star on US widgets + + anchor: ANCHOR + -- The anchor on major port control markers + + internal_scale_factor_small: DOUBLE = 0.05 + -- Used to scale `internal_size' + + internal_scale_factor_medium: DOUBLE = 0.07 + -- Used to scale `internal_size' + + internal_scale_factor_large: DOUBLE = 0.09 + -- Used to scale `internal_size' + + Initial_size: REAL_64 = 200.0 + -- Used internally to build the figure + +invariant + + +end diff --git a/jj_vitp/Interface/widgets/other_widgets/flag.e b/jj_vitp/Interface/widgets/other_widgets/flag.e new file mode 100644 index 0000000..6cb6b28 --- /dev/null +++ b/jj_vitp/Interface/widgets/other_widgets/flag.e @@ -0,0 +1,641 @@ +note + description: "[ + A base class for building the Japanese or US flag + ]" + author: "Jimmy J. Johnson" + +class + FLAG + +inherit + + FONT_AND_COLOR_CONSTANTS + undefine + default_create + end + + DIMABLE + redefine + default_create + end + + EV_MODEL_WORLD + redefine + default_create, + create_interface_objects + end + +create + make + +create {FLAG} + list_make + +feature {NONE} -- Initialization + + default_create + -- Set up Current + do + Precursor {DIMABLE} + Precursor {EV_MODEL_WORLD} + build_widgets + end + + make (a_location: like location) + -- Set up Current + do + location_imp := a_location + default_create + end + + create_interface_objects + -- Create attributes + do + Precursor {EV_MODEL_WORLD} + create field + create border.make (width, height, border_size) + background_coordinates := [create {EV_COORDINATE}, create {EV_COORDINATE}] + create background + create charge + create rising_sun + create canton + create canton_imp + create stars.make + end + + build_widgets + -- Create the widget and associate it with `a_location' + do + build_field + build_us_charge + build_japanese_charge + build_canton + build_border + scale (0.07) + end + + build_border + -- Add the border on top of other widgets in Current + do + extend (border) + end + + build_field + -- Create the flags background + local + p1, p2: EV_COORDINATE + do + create field + extend (field) +-- create p1.make_precise (0.0, 0.0) +-- create p2.make_precise (width, height) + create p1.make_precise (border_size, border_size) + create p2.make_precise (width - border_size, height - border_size) + create background.make_with_points (p1, p2) + -- Save the points + background_coordinates := [p1, p2] + field.extend (background) + end + + build_us_charge + -- Build the `charge', sizing it relative to the `background' rectangle. + -- Create the red stripes. (The white is background.) + local + i: INTEGER + x1, y1, x2, y2: REAL_64 + h: REAL_64 + stripe: EV_MODEL_POLYGON + do + create charge + field.extend (charge) + x1 := background_coordinates.point_1.x + 2 + y1 := background_coordinates.point_1.y + 2 + x2 := background_coordinates.point_2.x - 2 + y2 := background_coordinates.point_2.y - 2 + h := (y2 - y1) / 13 + from i := 1 + until i > 13 + loop + if i \\ 2 = 1 then + create stripe + stripe.extend_point (create {EV_COORDINATE}.make_precise (x1, y1 + (i - 1) * h)) + stripe.extend_point (create {EV_COORDINATE}.make_precise (x2, y1 + (i - 1) * h)) + stripe.extend_point (create {EV_COORDINATE}.make_precise (x2, y1 + i * h)) + stripe.extend_point (create {EV_COORDINATE}.make_precise (x1, y1 + i * h)) + charge.extend (stripe) + end + i := i + 1 + end + end + + build_japanese_charge + -- Create the sun and rays for the Japanese flag + local + p1: EV_MODEL_POLYGON + os: REAL_64 + clipper: POLYGON_CLIPPER + ang, ang_step: REAL_64 + mid: EV_COORDINATE + ray: EV_MODEL_POLYGON + do + build_rising_sun + rising_sun.scale_x (1.8) + rising_sun.scale_y (1.4) + field.extend (rising_sun) + -- Must move the charge a bit to line up with the background + rising_sun.set_x_y (165, 100) +-- center_widget_on_other (rising_sun, field) +-- create japanese_charge +-- field.extend (japanese_charge) +-- -- Build the `japanese_charge' inside a square so the angles at which the rays +-- -- radiate from the sun can be uniformly spaced around a circle. After +-- -- the rays are build the `charge' is scaled to match the flag's `width' +-- -- and `height'. +-- -- Create a polygon slightly smaller than the `field' +-- os := width / 10.0 +-- create p1 +-- p1.extend_point (create {EV_COORDINATE}.make_precise (os, os)) +-- p1.extend_point (create {EV_COORDINATE}.make_precise (width - os, os)) +-- p1.extend_point (create {EV_COORDINATE}.make_precise (width - os, width - os)) +-- p1.extend_point (create {EV_COORDINATE}.make_precise (os, width - os)) +-- -- Each of the 16 "rays" immenating from the sun is built as a triangle centered +-- -- at the midpoint, extending beyond the boundaries of `p1'. Each ray is then +-- -- clipped against `p1' +-- create clipper +-- ang := (2.0 * Pi) / 16.0 +-- create mid.make_precise (width / 2.0, width / 2.0) +-- from i := 1 +-- until i > 16 +-- loop +-- create ray.default_create +-- ray.extend_point (mid) +-- ax := delta_x (ang * i, width) +-- ay := delta_y (ang * i, width) +-- ray.extend_point (create {EV_COORDINATE}.make_precise (ax, ay)) +-- ax := delta_x (ang * (i + 1), width) +-- ay := delta_y (ang * (i + 1), width) +-- ray.extend_point (create {EV_COORDINATE}.make_precise (ax, ay)) +-- ray := clipper.clipped (ray, p1) +-- field.extend (ray) +-- i := i + 1 +-- end + end + +-- build_canton +-- -- Create the union on US flag. +-- -- This contains the [50] stars (should be 48). +-- local +-- p1, p2: EV_COORDINATE +-- s: STAR +-- i, j: INTEGER +-- a, b: REAL_64 +-- c, d: REAL_64 +-- e, f, g, h: REAL_64 +-- k: REAL_64 +-- ax, ay: REAL_64 +-- t: EV_MODEL_TRANSFORMATION +-- do +-- create t.make_zero +-- create canton +-- field.extend (canton) +-- a := height +-- b := width +-- c := a * 7/13 +-- d := b * 2/5 +-- e := c / 10 +-- f := c / 10 +-- g := d / 12 +-- h := d / 12 +-- k := a * 0.0616 +-- create p1.make_precise (0.0, 0.0) +-- create p2.make_precise (d, c) +---- create canton_imp.make_with_points (p1, p2) +---- create canton_imp +-- canton_imp.extend_point (create {EV_COORDINATE}.make_precise (0.0, 0.0)) +-- canton_imp.extend_point (create {EV_COORDINATE}.make_precise (d, 0.0)) +-- canton_imp.extend_point (create {EV_COORDINATE}.make_precise (d, c)) +-- canton_imp.extend_point (create {EV_COORDINATE}.make_precise (0.0, c)) +-- canton.extend (canton_imp) +-- -- A star is created, scaled and then its center point is moved to +-- -- (0, 0). From there the star is positioned based on the algorithm. +-- -- Add the 6 x 5 set of stars +-- from i := 1 +-- until i > 6 +-- loop +-- ax := (i - 1) * (2 * h) + g +-- from j := 1 +-- until j > 5 +-- loop +-- create s +---- s.set_target (location) +-- s.scale (0.0616) +-- canton.extend (s) +-- stars.extend (s) +-- t.translate (-s.dot.point.x, -s.dot.point.y) +-- s.transform (t) +-- ay := (j - 1) * (2 * f) + e +-- t.translate (ax, ay) +-- s.transform (t) +-- j := j + 1 +-- end +-- i := i + 1 +-- end +-- -- Add the remaining stars, the 5 x 4 set +-- from i := 1 +-- until i > 5 +-- loop +-- ax := i * (2 * h) - h + g +-- from j := 1 +-- until j > 4 +-- loop +-- create s +---- s.set_target (location) +-- s.scale (0.0616) +-- canton.extend (s) +-- t.translate (-s.dot.point.x, -s.dot.point.y) +-- s.transform (t) +-- ay := j * (2 * f) - f + e +-- t.translate (ax, ay) +-- s.transform (t) +-- j := j + 1 +-- end +-- i := i + 1 +-- end +-- end + + build_canton + -- Create the 48-star union on US flag. + -- The dimensions were estimated based on the 50-star version. + local +-- p1, p2: EV_COORDINATE + s: STAR + i, j: INTEGER + a, b: REAL_64 + c, d: REAL_64 + e, f, g, h: REAL_64 + k: REAL_64 + ax, ay: REAL_64 + marg: REAL_64 -- margin to account for boarder + t: EV_MODEL_TRANSFORMATION + x1, y1, x2, y2: REAL_64 + do + create t.make_zero + create canton + field.extend (canton) + x1 := background_coordinates.point_1.x + 2 + y1 := background_coordinates.point_1.y + 2 + x2 := background_coordinates.point_2.x - 2 + y2 := background_coordinates.point_2.y - 2 + +-- a := height - 2 * border_size +-- b := width - 2 * border_size + a := y2 - y1 + b := x2 - x1 + c := a * 7/13 + d := b * 2/5 + e := c / 7 -- divided by number of rows + 1 + f := c / 7 -- divided by number of rows + 1 + g := d / 9 -- divided by number of columns + 1 + h := d / 9 -- divided by number of columns + 1 + k := a * 0.0616 +-- create p1.make_precise (0.0, 0.0) +-- create p2.make_precise (d, c) + -- Create the blue background for the stars + canton_imp.extend_point (create {EV_COORDINATE}.make_precise (x1, y1)) + canton_imp.extend_point (create {EV_COORDINATE}.make_precise (x1 + d, y1)) + canton_imp.extend_point (create {EV_COORDINATE}.make_precise (x1 + d, y1 + c)) + canton_imp.extend_point (create {EV_COORDINATE}.make_precise (x1, y1 + c)) + canton.extend (canton_imp) + -- A star is created, scaled and then its center point is moved to + -- (0, 0). From there the star is positioned based on the algorithm. + -- Add the 6 x 5 set of stars + from i := 1 + until i > 8 + loop +-- ax := (i - 1) * (2 * h) + g +-- ax := (i - 1) * h + g/2 + ax := x1 + (i - 1) * h + g + from j := 1 + until j > 6 + loop + create s + s.scale (0.0616) + canton.extend (s) + stars.extend (s) +-- t.translate (-s.dot.point.x, -s.dot.point.y) +-- s.transform (t) + s.set_x_y (0, 0) +-- ay := (j - 1) * (2 * f) + e +-- ay := (j - 1) * f + e/2 + ay := y1 + (j - 1) * f + e + t.translate (ax, ay) + s.transform (t) + j := j + 1 + end + i := i + 1 + end + end + +feature -- Access + + location: LOCATION + -- The location (e.g. a PORT or a chart) to which + -- this marker belongs + require + has_location: has_location + do + check attached location_imp as loc then + Result := loc + end + end + + set_location (a_location: like location) + -- Change the `location' + do + location_imp := a_location + end + +feature {NONE} -- Implementation + + location_imp: detachable like location + -- Implementation for `location' + +feature -- Status report + + has_location: BOOLEAN + -- Has a location been assigned? + do + Result := attached location_imp + end + + is_outlined: BOOLEAN + -- Should the outline of the flag show? + -- If yes, change the foreground color to show a line around Current. + + is_flat: BOOLEAN + -- Should Current be drawn as a flat picture? + +feature -- Status setting + + show_outline + -- Make the outline of the flag visible + do + is_outlined := true + end + + hide_outline + -- Make the outline of the flag NOT visible + do + is_outlined := false + end + + set_flat + -- Cause the widget to be painted as a flat tile + do + is_flat := True + paint + end + + set_raised + -- Cause the widget to be painted as a 3-d tile + do + is_flat := False + paint + end + +feature -- Basic operations + +-- set_dimming_level (a_level: INTEGER) +-- -- Change the `dimming_level' +-- do +-- Precursor {DIMABLE} (a_level) +-- paint +-- end + + paint + -- Set the colors of the sub-widgets + do + paint_field + paint_charge + paint_canton + paint_border + if is_flat then + border.hide + else + border.show + end + if location.is_allied then + field.show + charge.show + canton.show + rising_sun.hide + elseif location.nationality = {NATIONALITY_CONSTANTS}.japanese then + field.show + rising_sun.show + charge.hide + canton.hide + else + field.hide + charge.hide + canton.hide + rising_sun.hide + border.hide + end + end + +feature {NONE} -- Implementation + + paint_border + -- Set the color for the `border' + do + border.set_color (adjusted_color (White)) + end + + paint_field + -- Paint the `field' + local + c: EV_COLOR + do + c := us_flag_white_color + background.set_background_color (adjusted_color (c)) + -- Set color for boarder around the background if shown. + -- This is just the line around the flag on the OA Charts. + if is_outlined then + if location.nationality = {NATIONALITY_CONSTANTS}.japanese then + c := japanese_unit_color + else + c := us_unit_color + end + end + background.set_foreground_color (adjusted_color (c)) + end + + paint_charge + -- Paint the `charge' + do + from charge.start + until charge.exhausted + loop + if attached {EV_MODEL_POLYGON} charge.item as s then + s.set_foreground_color (adjusted_color (US_flag_red_color)) + s.set_background_color (adjusted_color (US_flag_red_color)) + end + rising_sun.set_foreground_color (adjusted_color (Japanese_unit_color)) + rising_sun.set_background_color (adjusted_color (Japanese_unit_color)) + charge.forth + end + end + + paint_canton + -- Paint the canton area (and stars) + local + s: STAR + do + canton_imp.set_background_color (adjusted_color (US_flag_blue_color)) + canton_imp.set_foreground_color (adjusted_color (US_flag_blue_color)) + -- Must paint each star (to dim or brighten them) + from stars.start + until stars.off + loop + s := stars.item + s.set_background_color (adjusted_color (white)) + s.set_foreground_color (adjusted_color (white)) + stars.forth + end + end + +feature {NONE} -- Implementation + + frozen height: REAL_64 = 200.0 + -- The span of a flag down the side parallel to the flagpole + +-- width: REAL_64 = 380.0 + width: REAL_64 = 330.0 + -- The span of the flag along the side at right angles to the flagpole + + ratio: REAL_64 + -- The ratio of the `width' / `height' (1.9 for US flags) + + background_coordinates: TUPLE [point_1: EV_COORDINATE; point_2: EV_COORDINATE] + -- The corner points for the `background'. + -- Used EV_COORDINATE to be more precise (i.e. REAL_64, not INTEGER_32) + + background: EV_MODEL_RECTANGLE + -- The background of Current (usually white) + + border: BORDER + -- The borders around the `field', giving a raised appearance + + border_size: REAL_64 + -- Ratio of the size of the `border' to `width' + do + Result:= (height.min (width)) / 20 + end + + canton: EV_MODEL_WORLD + -- The upper hoist (left) quarter (contains the field of stars in US flag) + + charge: EV_MODEL_WORLD + -- A figure or symbol appearing on the flag + + rising_sun: EV_MODEL_POLYGON + -- The red sun and rays on the Japanese flag + + field: EV_MODEL_WORLD + -- The top container for Current + + canton_imp: EV_MODEL_POLYGON + -- The rectangle to make a blue canton + + stars: LINKED_SET [STAR] + -- Keep track of all the stars in Current, so they can be dimmed + -- when `set_dimming_level' is called + + build_rising_sun + -- Make the polygon + do + create rising_sun + -- Points generated by Grabber application + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (0, 0)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (32.395061728395063, 39.308641975308639)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (35.358024691358025, 37.728395061728392)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (38.913580246913575, 35.55555555555555)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (20.938271604938265, 1.7777777777777786)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (33.777777777777771, 1.7777777777777786)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (43.851851851851848, 33.777777777777764)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (46.617283950617285, 33.58024691358024)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (49.97530864197531, 32.79012345679012)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (47.407407407407412, 1.5802469135802468)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (58.66666666666665, 1.9753086419753103)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (56.888888888888879, 33.185185185185176)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (59.851851851851841, 32.987654320987652)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (64.395061728395063, 33.975308641975303)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (74.074074074074048, 1.3827160493827169)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (87.111111111111114, 1.7777777777777786)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (69.925925925925895, 35.950617283950614)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (72.296296296296276, 37.92592592592591)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (74.271604938271594, 40.296296296296291)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (107.25925925925924, 0.98765432098765338)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (130.17283950617283, 1.1851851851851851)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (78.81481481481481, 44.444444444444436)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (80.790123456790099, 47.012345679012341)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (82.370370370370352, 50.962962962962955)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (168.09876543209876, 1.3827160493827169)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (167.90123456790118, 30.024691358024683)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (85.333333333333314, 55.506172839506164)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (85.925925925925895, 58.074074074074055)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (85.925925925925895, 62.222222222222207)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (167.90123456790118, 54.716049382716044)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (168.09876543209876, 76.246913580246883)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (85.925925925925895, 68.938271604938251)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (85.53086419753086, 72.098765432098759)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (85.135802469135797, 75.851851851851848)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (167.3086419753086, 100.34567901234567)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (166.71604938271602, 130.56790123456787)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (83.160493827160479, 80.592592592592581)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (81.382716049382708, 83.160493827160479)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (79.407407407407391, 85.728395061728378)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (130.56790123456787, 128.59259259259255)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (107.06172839506172, 129.38271604938268)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (75.259259259259238, 89.679012345679013)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (72.691358024691368, 92.049382716049365)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (69.53086419753086, 94.024691358024654)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (87.308641975308632, 128.98765432098762)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (74.074074074074048, 129.18518518518516)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (64.592592592592581, 96.395061728395035)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (61.432098765432094, 97.185185185185162)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (57.283950617283942, 97.185185185185162)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (60.049382716049372, 128.79012345679007)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (47.999999999999993, 128.79012345679007)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (50.37037037037036, 97.382716049382708)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (47.407407407407412, 97.185185185185162)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (44.049382716049372, 95.999999999999972)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (34.172839506172842, 128.98765432098762)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (19.950617283950621, 129.18518518518516)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (38.716049382716044, 94.024691358024654)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (35.358024691358025, 92.839506172839464)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (32.592592592592588, 90.469135802469111)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (0.39506172839506704, 128.59259259259255)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (0.39506172839506704, 109.43209876543207)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (28.839506172839513, 85.925925925925895)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (26.074074074074076, 83.358024691357997)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (24.493827160493822, 79.999999999999972)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (0.19753086419753174, 93.03703703703701)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (0.19753086419753174, 82.172839506172807)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (21.728395061728399, 75.061728395061692)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (21.728395061728399, 71.703703703703695)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (21.925925925925924, 68.34567901234567)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (0.39506172839506704, 70.123456790123441)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (0.39506172839506704, 61.234567901234563)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (21.728395061728399, 62.617283950617271)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (21.333333333333336, 59.061728395061728)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (22.320987654320987, 56.493827160493829)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (0.19753086419753174, 49.185185185185176)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (0.39506172839506704, 37.530864197530853)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (24.691358024691361, 50.567901234567891)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (26.271604938271594, 47.012345679012341)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (28.444444444444436, 44.049382716049379)) + rising_sun.extend_point (create {EV_COORDINATE}.make_precise (0, 20.938271604938272)) + end + +end diff --git a/jj_vitp/Interface/widgets/other_widgets/star.e b/jj_vitp/Interface/widgets/other_widgets/star.e new file mode 100644 index 0000000..3d91124 --- /dev/null +++ b/jj_vitp/Interface/widgets/other_widgets/star.e @@ -0,0 +1,83 @@ +note + description: "[ + A star widget + ]" + author: "Jimmy J. Johnson" + +class + STAR + +inherit + + FONT_AND_COLOR_CONSTANTS + undefine + default_create + end + + EV_MODEL_POLYGON + redefine + default_create + end + +create + default_create + +feature {NONE} -- Initialization + + default_create + -- Create an intance + do + Precursor {EV_MODEL_POLYGON} + build_widgets + end + + build_widgets + -- Create the widget + local + d: REAL_64 -- the diameter of a circle that fits in box + r: REAL_64 -- the radius of above circle + r_small: REAL_64 -- the radius of a smaller circle + a: REAL_64 -- the current angle around a circle + delta_a: REAL_64 -- the amount to change `ang' as we go around circle + i: INTEGER + ax, ay: REAL_64 + p: EV_COORDINATE + do + d := 200 + r := d / 2.0 + r_small := r / 3.0 + delta_a := (2.0 * Pi) / (points_on_star_count * 2.0) + a := 0 + from i := 1 + until i > points_on_star_count * 2 + loop + if i \\ 2 = 1 then + ax := delta_x (a, r_small) + ay := delta_y (a, r_small) + else + ax := delta_x (a, r) + ay := delta_y (a, r) + end + create p.make_precise (ax, ay) + extend_point (p) + a := a + delta_a + i := i + 1 + end + -- Rotate star and move it to the center of its system. + rotate (0.3) + set_background_color (White) + set_foreground_color (White) + end + +feature -- Basic operations + + +feature {NONE} -- Implementation + + points_on_star_count: INTEGER = 5 + -- The number of points the star has + +invariant + + +end diff --git a/jj_vitp/Interface/widgets/port_widgets/andaman_islands_widget.e b/jj_vitp/Interface/widgets/port_widgets/andaman_islands_widget.e new file mode 100644 index 0000000..0f9e0fa --- /dev/null +++ b/jj_vitp/Interface/widgets/port_widgets/andaman_islands_widget.e @@ -0,0 +1,1060 @@ + note + description: "[ + The widget representing this port + ]" + author: "Jimmy J. Johnson" + +class + ANDAMAN_ISLANDS_WIDGET + +inherit + +-- GREEN_PORT_WIDGET +-- undefine +-- paint +-- redefine +-- create_interface_objects, +-- initialize, +-- position_widgets, +-- build_land +-- end + + ISLAND_PORT_WIDGET + redefine + create_interface_objects, +-- initialize, + position_widgets, + build_land, + rotation_amount + end + +create + make + +feature {NONE} -- Initialization + + create_interface_objects + -- Initialize attributes + do +print ("ANDAMAN_ISLANDS_WIDGET.create_interface_objects %N") + north_andaman := north_andaman_imp + middle_andaman := middle_andaman_imp + labyrinth_island := labyrinth_island_imp + little_andaman := little_andaman_imp + Precursor {ISLAND_PORT_WIDGET} +-- Precursor {GREEN_PORT_WIDGET} + end + +-- initialize +-- -- Set up the widgets in Current. +-- do +-- Precursor {ISLAND_PORT_WIDGET} +---- Precursor {GREEN_PORT_WIDGET} +-- end + + position_widgets + -- Move Current and contained widgets to correct + -- location and set their their sizes + do + Precursor {ISLAND_PORT_WIDGET} +-- Precursor {GREEN_PORT_WIDGET} + scale_widget (land, 0.08) + rotate_widget (land, 10.0) + center_on (20, 215) + translate_widget (land, 44, -136) + translate_widget (text_group, -8, -3) +-- marker.center_on_dot (dot) + marker.set_x_y (dot.x, dot.y) + translate_widget (marker, 3, 5) + end + + build_land + -- Add widgets to Current + do + Precursor {ISLAND_PORT_WIDGET} + -- Initialize attributes + land.extend (north_andaman) + land.extend (middle_andaman) + land.extend (labyrinth_island) + land.extend (little_andaman) + end + +feature -- Status report + + is_red: BOOLEAN = False + -- Does Current represent a red (i.e. major) port? + +feature{NONE} -- Implementation + + north_andaman: EV_MODEL_POLYGON + middle_andaman: EV_MODEL_POLYGON + labyrinth_island: EV_MODEL_POLYGON + little_andaman: EV_MODEL_POLYGON + +feature{NONE} -- Implementation + + north_andaman_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (0, 0)) + Result.extend_point (create {EV_COORDINATE}.make_precise (2.6666666666666856, -2.6666666666666679)) + Result.extend_point (create {EV_COORDINATE}.make_precise (6.2222222222222285, -2.6666666666666679)) + Result.extend_point (create {EV_COORDINATE}.make_precise (8, 4.8888888888888893)) + Result.extend_point (create {EV_COORDINATE}.make_precise (9.7777777777778283, 13.777777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (11.111111111111143, 23.111111111111107)) + Result.extend_point (create {EV_COORDINATE}.make_precise (10.222222222222229, 31.555555555555557)) + Result.extend_point (create {EV_COORDINATE}.make_precise (7.1111111111111427, 39.555555555555557)) + Result.extend_point (create {EV_COORDINATE}.make_precise (3.5555555555555429, 39.111111111111107)) + Result.extend_point (create {EV_COORDINATE}.make_precise (6.6666666666666856, 42.222222222222214)) + Result.extend_point (create {EV_COORDINATE}.make_precise (6.6666666666666856, 50.222222222222214)) + Result.extend_point (create {EV_COORDINATE}.make_precise (4.4444444444444571, 50.222222222222214)) + Result.extend_point (create {EV_COORDINATE}.make_precise (4.8888888888889142, 52.888888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (8, 53.333333333333329)) + Result.extend_point (create {EV_COORDINATE}.make_precise (9.3333333333333712, 57.777777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (11.111111111111143, 59.1111111111111)) + Result.extend_point (create {EV_COORDINATE}.make_precise (13.333333333333371, 61.333333333333329)) + Result.extend_point (create {EV_COORDINATE}.make_precise (15.555555555555543, 59.555555555555557)) + Result.extend_point (create {EV_COORDINATE}.make_precise (17.777777777777828, 57.777777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (17.333333333333371, 62.222222222222214)) + Result.extend_point (create {EV_COORDINATE}.make_precise (20, 63.1111111111111)) + Result.extend_point (create {EV_COORDINATE}.make_precise (18.666666666666686, 65.333333333333329)) + Result.extend_point (create {EV_COORDINATE}.make_precise (15.555555555555543, 66.222222222222214)) + Result.extend_point (create {EV_COORDINATE}.make_precise (12.888888888888914, 72.444444444444429)) + Result.extend_point (create {EV_COORDINATE}.make_precise (16, 71.1111111111111)) + Result.extend_point (create {EV_COORDINATE}.make_precise (17.777777777777828, 72.888888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (17.777777777777828, 76.888888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (20.444444444444457, 83.1111111111111)) + Result.extend_point (create {EV_COORDINATE}.make_precise (23.111111111111143, 86.222222222222214)) + Result.extend_point (create {EV_COORDINATE}.make_precise (26.222222222222229, 85.777777777777757)) + Result.extend_point (create {EV_COORDINATE}.make_precise (26.222222222222229, 88.888888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (23.111111111111143, 90.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (20.444444444444457, 93.777777777777757)) + Result.extend_point (create {EV_COORDINATE}.make_precise (20.888888888888914, 97.777777777777757)) + Result.extend_point (create {EV_COORDINATE}.make_precise (19.111111111111143, 99.555555555555557)) + Result.extend_point (create {EV_COORDINATE}.make_precise (17.333333333333371, 92.444444444444429)) + Result.extend_point (create {EV_COORDINATE}.make_precise (15.111111111111143, 92.444444444444429)) + Result.extend_point (create {EV_COORDINATE}.make_precise (14.222222222222229, 95.555555555555557)) + Result.extend_point (create {EV_COORDINATE}.make_precise (14.222222222222229, 99.555555555555557)) + Result.extend_point (create {EV_COORDINATE}.make_precise (12, 99.555555555555557)) + Result.extend_point (create {EV_COORDINATE}.make_precise (11.111111111111143, 93.777777777777757)) + Result.extend_point (create {EV_COORDINATE}.make_precise (9.7777777777778283, 91.555555555555557)) + Result.extend_point (create {EV_COORDINATE}.make_precise (6.2222222222222285, 93.777777777777757)) + Result.extend_point (create {EV_COORDINATE}.make_precise (3.5555555555555429, 93.333333333333329)) + Result.extend_point (create {EV_COORDINATE}.make_precise (3.5555555555555429, 96.888888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (0.74074074074076179, 95.259259259259252)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1.6296296296296191, 91.407407407407376)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1.9259259259259238, 89.333333333333329)) + Result.extend_point (create {EV_COORDINATE}.make_precise (3.7037037037036953, 89.92592592592591)) + Result.extend_point (create {EV_COORDINATE}.make_precise (3.7037037037036953, 87.259259259259252)) + Result.extend_point (create {EV_COORDINATE}.make_precise (5.1851851851852189, 83.703703703703681)) + Result.extend_point (create {EV_COORDINATE}.make_precise (2.5185185185185333, 82.518518518518505)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-0.14814814814815236, 83.999999999999986)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-4.5925925925926094, 82.222222222222214)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-6.3703703703703809, 83.999999999999986)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-9.0370370370370665, 85.777777777777757)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-8.4444444444444571, 89.92592592592591)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-9.0370370370370665, 93.185185185185148)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-6.3703703703703809, 94.962962962962948)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-5.4814814814814667, 97.037037037037024)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-3.7037037037036953, 94.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1.6296296296296759, 93.777777777777757)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1.9259259259259238, 96.740740740740719)) + Result.extend_point (create {EV_COORDINATE}.make_precise (0.74074074074076179, 100.88888888888889)) + Result.extend_point (create {EV_COORDINATE}.make_precise (3.1111111111111427, 102.37037037037035)) + Result.extend_point (create {EV_COORDINATE}.make_precise (2.2222222222222285, 103.55555555555556)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-0.74074074074076179, 106.8148148148148)) + Result.extend_point (create {EV_COORDINATE}.make_precise (4, 108.29629629629626)) + Result.extend_point (create {EV_COORDINATE}.make_precise (5.4814814814814667, 107.40740740740738)) + Result.extend_point (create {EV_COORDINATE}.make_precise (7.2592592592592382, 109.18518518518515)) + Result.extend_point (create {EV_COORDINATE}.make_precise (10.518518518518533, 107.99999999999999)) + Result.extend_point (create {EV_COORDINATE}.make_precise (11.703703703703695, 109.77777777777776)) + Result.extend_point (create {EV_COORDINATE}.make_precise (9.6296296296296191, 112.44444444444441)) + Result.extend_point (create {EV_COORDINATE}.make_precise (12.296296296296305, 115.99999999999999)) + Result.extend_point (create {EV_COORDINATE}.make_precise (17.925925925925924, 113.6296296296296)) + Result.extend_point (create {EV_COORDINATE}.make_precise (15.851851851851848, 115.70370370370368)) + Result.extend_point (create {EV_COORDINATE}.make_precise (15.555555555555543, 120.14814814814811)) + Result.extend_point (create {EV_COORDINATE}.make_precise (13.481481481481467, 126.66666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (10.814814814814781, 128.7407407407407)) + Result.extend_point (create {EV_COORDINATE}.make_precise (9.9259259259259238, 130.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (8.7407407407407618, 140.29629629629625)) + Result.extend_point (create {EV_COORDINATE}.make_precise (7.5555555555555429, 146.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (8.7407407407407618, 147.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (8.1481481481481524, 150.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (7.2592592592592382, 150.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (8.1481481481481524, 158.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (6.9629629629629335, 161.62962962962962)) + Result.extend_point (create {EV_COORDINATE}.make_precise (6.6666666666666856, 166.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (8.1481481481481524, 172.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (8.1481481481481524, 178.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (7.5555555555555429, 182.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (5.4814814814814667, 181.77777777777777)) + Result.extend_point (create {EV_COORDINATE}.make_precise (5.1851851851852189, 183.85185185185179)) + Result.extend_point (create {EV_COORDINATE}.make_precise (6.0740740740740762, 186.22222222222223)) + Result.extend_point (create {EV_COORDINATE}.make_precise (5.1851851851852189, 188.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (3.4074074074073906, 192.4444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (0.44444444444445708, 194.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-0.74074074074076179, 195.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1.3333333333333144, 198.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-2.8148148148147811, 200.7407407407407)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-4.5925925925926094, 200.1481481481481)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-6.9629629629629903, 198.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-9.0370370370370665, 202.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-11.111111111111086, 201.03703703703701)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-14.370370370370381, 201.03703703703701)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-14.666666666666629, 202.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-17.925925925925924, 202.22222222222223)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-17.629629629629676, 204.29629629629625)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-16.148148148148152, 205.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-16.740740740740762, 206.96296296296293)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-19.111111111111086, 206.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-21.185185185185219, 203.40740740740733)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-22.370370370370381, 201.62962962962962)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-23.851851851851848, 199.85185185185179)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-23.851851851851848, 203.40740740740733)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-23.555555555555543, 205.77777777777777)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-22.370370370370381, 206.96296296296293)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-24.148148148148152, 207.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-26.222222222222172, 205.77777777777777)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-27.111111111111086, 208.7407407407407)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-25.925925925925924, 211.40740740740733)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-26.222222222222172, 213.77777777777777)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-28.296296296296305, 213.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-30.96296296296299, 211.70370370370364)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-32.444444444444457, 211.40740740740733)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-34.518518518518533, 208.4444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-33.037037037037067, 205.18518518518516)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-33.037037037037067, 201.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-30.96296296296299, 202.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-29.481481481481467, 201.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-30.370370370370381, 200.1481481481481)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-33.333333333333314, 198.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-33.037037037037067, 193.92592592592592)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-32.148148148148152, 190.96296296296293)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-34.518518518518533, 189.77777777777777)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-37.185185185185219, 191.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-36, 193.62962962962962)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-38.074074074074076, 197.48148148148147)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-38.074074074074076, 199.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-40.148148148148152, 203.40740740740733)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-41.925925925925924, 203.40740740740733)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-39.259259259259238, 206.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-39.851851851851848, 211.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-37.185185185185219, 211.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-35.703703703703695, 214.96296296296293)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-33.333333333333314, 218.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-31.555555555555543, 217.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-28.592592592592609, 217.03703703703701)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-29.481481481481467, 218.81481481481472)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-28, 221.18518518518516)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-28.888888888888857, 223.85185185185179)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-30.370370370370381, 226.81481481481472)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-32.444444444444457, 225.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-36.296296296296305, 230.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-37.777777777777771, 230.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-38.666666666666629, 226.81481481481472)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-40.740740740740762, 227.70370370370364)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-41.925925925925924, 231.25925925925918)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-44.888888888888857, 231.85185185185179)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-44.592592592592609, 222.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-46.666666666666629, 218.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-48.148148148148152, 223.85185185185179)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-50.518518518518533, 224.7407407407407)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-50.222222222222172, 229.18518518518516)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-49.333333333333314, 230.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-50.518518518518533, 231.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-51.111111111111086, 234.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-56.740740740740762, 234.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-58.518518518518533, 235.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-58.814814814814781, 239.85185185185179)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-57.333333333333314, 241.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-55.555555555555543, 239.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-56.148148148148152, 237.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-55.259259259259238, 235.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-53.481481481481467, 236.29629629629625)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-48.444444444444457, 236.29629629629625)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-42.814814814814781, 239.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-38.666666666666629, 243.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-36.888888888888857, 247.25925925925918)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-39.259259259259238, 250.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-40.740740740740762, 253.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-36, 254.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-33.037037037037067, 253.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-30.96296296296299, 255.85185185185179)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-31.259259259259238, 260.5925925925925)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-29.777777777777771, 263.25925925925918)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-26.814814814814781, 265.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-26.518518518518533, 270.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-24.740740740740762, 271.85185185185179)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-24.444444444444457, 280.14814814814804)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-22.074074074074076, 283.40740740740733)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-22.96296296296299, 285.18518518518511)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-24.444444444444457, 288.4444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-27.703703703703695, 292.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-28.296296296296305, 295.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-26.222222222222172, 298.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-24.740740740740762, 297.62962962962956)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-22.666666666666629, 299.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-21.481481481481467, 302.96296296296293)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-19.407407407407391, 302.96296296296293)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-17.925925925925924, 306.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-16.444444444444457, 309.18518518518511)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-17.037037037037067, 311.25925925925918)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-18.518518518518533, 312.14814814814804)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-16.740740740740762, 315.70370370370364)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-13.777777777777771, 316.29629629629625)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-13.185185185185219, 321.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-16.740740740740762, 318.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-17.629629629629676, 320.74074074074065)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-18.518518518518533, 338.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-21.185185185185219, 353.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-19.407407407407391, 359.85185185185173)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-20.296296296296305, 363.11111111111103)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-17.037037037037067, 370.51851851851842)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-14.370370370370381, 378.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-14.370370370370381, 387.11111111111103)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-16.148148148148152, 392.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-17.629629629629676, 395.11111111111103)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-17.333333333333314, 397.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-16.148148148148152, 399.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-18.222222222222172, 399.85185185185173)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-18.222222222222172, 402.51851851851842)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-19.703703703703695, 400.74074074074065)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-23.851851851851848, 400.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-25.333333333333314, 402.81481481481472)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-28.888888888888857, 406.96296296296293)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-26.814814814814781, 408.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-25.925925925925924, 410.81481481481472)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-22.666666666666629, 408.14814814814804)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-20.888888888888857, 407.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-19.703703703703695, 409.62962962962956)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-22.370370370370381, 411.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-24.148148148148152, 413.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-26.222222222222172, 416.14814814814804)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-27.703703703703695, 417.92592592592581)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-29.481481481481467, 417.62962962962956)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-31.259259259259238, 418.81481481481472)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-34.518518518518533, 418.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-32.740740740740762, 420.5925925925925)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-31.851851851851848, 424.74074074074065)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-33.333333333333314, 428.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-34.814814814814781, 431.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-35.111111111111086, 433.92592592592581)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-40.148148148148152, 434.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-45.481481481481467, 440.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-46.074074074074076, 444.29629629629619)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-48.444444444444457, 443.40740740740728)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-51.111111111111086, 453.18518518518511)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-47.555555555555543, 452.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-44.296296296296305, 454.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-44.592592592592609, 456.74074074074059)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-41.629629629629676, 460.5925925925925)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-42.222222222222172, 462.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-45.777777777777771, 458.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-47.259259259259238, 458.81481481481472)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-48.148148148148152, 461.18518518518511)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-45.185185185185219, 463.25925925925912)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-41.037037037037067, 464.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-45.185185185185219, 465.92592592592581)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-48.444444444444457, 466.51851851851842)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-55.259259259259238, 467.40740740740728)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-57.037037037037067, 466.51851851851842)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-60.592592592592609, 466.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-64.148148148148152, 468.5925925925925)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-67.703703703703695, 470.07407407407391)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-72.148148148148124, 469.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-75.703703703703695, 467.40740740740728)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-83.111111111111086, 467.11111111111103)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-90.814814814814781, 466.81481481481472)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-93.481481481481467, 470.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-95.555555555555515, 470.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-98.222222222222172, 473.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-102.07407407407408, 471.25925925925912)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-103.55555555555551, 472.14814814814804)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-104.74074074074073, 470.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-105.92592592592592, 471.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-109.77777777777777, 472.14814814814804)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-111.55555555555551, 469.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-113.92592592592592, 471.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-114.81481481481478, 468.5925925925925)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-117.48148148148147, 468.29629629629619)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-118.37037037037038, 466.51851851851842)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-116.88888888888886, 463.25925925925912)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-118.07407407407408, 461.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-119.85185185185182, 462.96296296296282)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-119.85185185185182, 447.25925925925912)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-118.96296296296293, 445.18518518518511)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-120.14814814814812, 443.40740740740728)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-120.14814814814812, 426.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-118.96296296296293, 422.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-121.33333333333331, 421.18518518518511)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-119.25925925925924, 419.11111111111103)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-118.66666666666663, 416.74074074074065)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-119.55555555555551, 415.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-119.55555555555551, 406.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-117.77777777777777, 406.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-118.66666666666663, 400.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-120.14814814814812, 397.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-123.11111111111109, 395.70370370370364)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-121.33333333333331, 392.14814814814804)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-123.99999999999997, 390.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-123.7037037037037, 384.74074074074065)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-120.74074074074073, 385.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-117.48148148148147, 380.29629629629625)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-118.37037037037038, 376.74074074074065)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-117.18518518518516, 374.96296296296293)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-119.25925925925924, 371.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-119.55555555555551, 364.29629629629625)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-126.07407407407408, 361.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-117.77777777777777, 358.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-116.29629629629628, 353.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-115.11111111111109, 350.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-115.11111111111109, 348.29629629629625)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-113.33333333333331, 349.18518518518511)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-112.74074074074073, 353.62962962962956)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-109.77777777777777, 350.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-108.88888888888886, 346.51851851851842)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-107.40740740740739, 341.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-104.74074074074073, 341.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-103.85185185185182, 337.92592592592581)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-107.11111111111109, 337.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-107.40740740740739, 331.70370370370364)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-110.07407407407408, 329.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-104.44444444444443, 325.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-108.59259259259258, 323.11111111111103)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-107.11111111111109, 319.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-103.55555555555551, 317.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-107.7037037037037, 312.14814814814804)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-108.88888888888886, 315.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-111.25925925925924, 316.5925925925925)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-110.96296296296293, 311.25925925925918)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-109.77777777777777, 309.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-110.96296296296293, 295.25925925925918)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-115.99999999999997, 287.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-112.74074074074073, 275.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-109.77777777777777, 274.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-107.99999999999997, 279.85185185185179)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-106.22222222222217, 273.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-104.44444444444443, 275.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-102.37037037037038, 270.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-99.703703703703695, 267.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-97.925925925925924, 264.4444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-94.370370370370381, 268.29629629629625)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-94.666666666666629, 263.85185185185179)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-91.703703703703695, 262.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-89.925925925925924, 263.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-86.370370370370381, 262.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-85.777777777777771, 254.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-83.111111111111086, 247.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-86.074074074074076, 248.14814814814804)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-86.666666666666629, 243.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-85.18518518518519, 243.70370370370364)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-86.666666666666629, 239.25925925925918)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-84.888888888888857, 237.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-84.296296296296305, 231.25925925925918)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-85.481481481481467, 230.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-86.370370370370381, 224.4444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-84.888888888888857, 223.25925925925918)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-87.259259259259238, 221.18518518518516)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-84.888888888888857, 214.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-80.740740740740733, 218.22222222222223)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-78.96296296296299, 214.96296296296293)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-82.814814814814781, 214.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-78.96296296296299, 212.29629629629625)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-75.999999999999972, 208.7407407407407)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-82.222222222222172, 209.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-82.518518518518533, 207.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-83.703703703703695, 208.7407407407407)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-87.851851851851848, 205.77777777777777)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-86.370370370370381, 199.85185185185179)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-86.666666666666629, 189.48148148148147)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-84.888888888888857, 188.29629629629625)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-85.481481481481467, 181.77777777777777)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-84.592592592592581, 178.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-83.111111111111086, 182.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-81.037037037037038, 183.85185185185179)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-81.333333333333314, 181.48148148148147)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-82.222222222222172, 176.4444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-81.333333333333314, 174.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-79.259259259259238, 175.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-77.18518518518519, 177.92592592592592)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-75.999999999999972, 176.1481481481481)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-77.481481481481467, 172.29629629629625)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-75.703703703703695, 170.22222222222223)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-79.555555555555515, 169.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-81.037037037037038, 164.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-75.999999999999972, 163.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-72.444444444444429, 164.59259259259255)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-69.481481481481467, 163.70370370370364)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-68.888888888888857, 160.7407407407407)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-67.703703703703695, 159.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-71.555555555555515, 155.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-75.703703703703695, 156.59259259259255)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-78.370370370370381, 156.59259259259255)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-78.666666666666629, 148.59259259259255)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-74.222222222222172, 149.18518518518516)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-72.740740740740733, 147.40740740740733)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-76.296296296296305, 146.22222222222223)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-77.777777777777771, 142.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-75.999999999999972, 141.48148148148147)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-76.296296296296305, 135.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-73.629629629629648, 133.48148148148147)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-73.925925925925924, 130.22222222222223)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-73.629629629629648, 128.1481481481481)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-75.703703703703695, 127.85185185185181)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-72.740740740740733, 121.92592592592591)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-68.888888888888857, 123.99999999999999)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-66.814814814814781, 121.33333333333333)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-66.814814814814781, 114.51851851851849)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-70.666666666666629, 115.1111111111111)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-72.148148148148124, 111.85185185185181)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-74.814814814814781, 112.14814814814811)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-75.999999999999972, 105.92592592592591)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-71.555555555555515, 105.92592592592591)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-72.148148148148124, 103.55555555555556)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-70.074074074074076, 100.88888888888889)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-75.111111111111086, 99.1111111111111)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-73.629629629629648, 94.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-75.407407407407391, 90.222222222222214)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-72.148148148148124, 85.777777777777757)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-71.851851851851848, 76.888888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-70.370370370370381, 74.518518518518505)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-68.592592592592581, 75.703703703703681)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-65.333333333333314, 71.259259259259252)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-61.777777777777771, 71.259259259259252)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-60, 69.777777777777757)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-61.777777777777771, 67.407407407407405)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-64.148148148148152, 67.999999999999986)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-66.222222222222172, 66.222222222222214)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-68.592592592592581, 65.92592592592591)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-68.888888888888857, 62.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-68.296296296296305, 59.703703703703681)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-63.851851851851848, 60.888888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-58.814814814814781, 59.407407407407405)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-58.518518518518533, 54.074074074074062)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-57.037037037037067, 54.370370370370352)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-53.481481481481467, 49.92592592592591)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-56.740740740740762, 44.592592592592581)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-57.037037037037067, 35.999999999999993)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-49.629629629629676, 34.814814814814802)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-47.851851851851848, 33.333333333333329)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-47.259259259259238, 28.592592592592581)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-42.814814814814781, 26.222222222222221)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-41.037037037037067, 27.703703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-39.259259259259238, 26.518518518518505)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-38.370370370370381, 23.259259259259252)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-39.259259259259238, 22.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-42.814814814814781, 23.555555555555557)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-41.333333333333314, 21.481481481481481)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-38.666666666666629, 20.592592592592581)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-38.666666666666629, 17.333333333333329)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-41.629629629629676, 17.037037037037031)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-43.407407407407391, 15.259259259259252)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-34.518518518518533, 11.407407407407405)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-33.037037037037067, 12.296296296296291)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-26.518518518518533, 10.222222222222221)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-22.96296296296299, 10.81481481481481)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-17.925925925925924, 9.3333333333333286)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-18.518518518518533, 7.5555555555555571)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-15.555555555555543, 0.14814814814814525)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-10.814814814814781, 2.2222222222222214)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-8.7407407407407618, -0.74074074074074403)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-6.6666666666666288, 0.74074074074073692)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-3.1111111111110858, -2.518518518518519)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-0.44444444444445708, -2.518518518518519)) + end + + middle_andaman_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-119.25925925925924, 474.51851851851842)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-115.7037037037037, 473.92592592592581)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-115.99999999999997, 471.85185185185173)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-113.03703703703704, 472.74074074074059)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-112.44444444444443, 473.92592592592581)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-109.18518518518516, 474.51851851851842)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-109.18518518518516, 478.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-111.25925925925924, 487.25925925925912)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-112.74074074074073, 493.18518518518511)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-113.62962962962962, 497.92592592592575)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-115.11111111111109, 494.07407407407391)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-116.88888888888886, 496.14814814814804)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-114.81481481481478, 499.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-113.33333333333331, 506.81481481481467)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-114.81481481481478, 509.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-113.62962962962962, 513.62962962962945)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-115.99999999999997, 521.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-113.92592592592592, 520.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-113.62962962962962, 521.92592592592575)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-109.18518518518516, 517.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-105.92592592592592, 515.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-98.814814814814781, 518.07407407407391)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-97.037037037037038, 515.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-103.85185185185182, 515.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-105.92592592592592, 513.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-107.7037037037037, 513.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-109.18518518518516, 500.29629629629619)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-107.7037037037037, 495.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-105.03703703703704, 494.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-106.51851851851848, 503.85185185185173)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-103.85185185185182, 501.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-102.07407407407408, 505.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-101.48148148148147, 500.29629629629619)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-102.96296296296293, 499.40740740740728)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-102.66666666666663, 497.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-101.18518518518516, 497.92592592592575)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-94.666666666666629, 499.40740740740728)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-94.370370370370381, 506.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-92.888888888888857, 508.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-93.481481481481467, 512.74074074074053)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-94.962962962962933, 515.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-94.370370370370381, 517.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-92.296296296296305, 513.62962962962945)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-93.481481481481467, 504.74074074074053)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-92.296296296296305, 499.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-92.592592592592581, 495.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-94.666666666666629, 496.74074074074053)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-96.148148148148124, 496.14814814814804)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-98.518518518518476, 496.74074074074053)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-99.999999999999972, 493.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-102.07407407407408, 490.81481481481467)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-99.703703703703695, 482.51851851851842)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-96.148148148148124, 475.70370370370364)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-93.481481481481467, 474.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-91.407407407407391, 468.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-85.777777777777771, 468.29629629629619)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-77.777777777777771, 467.70370370370364)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-70.666666666666629, 471.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-65.037037037037067, 471.25925925925912)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-63.555555555555543, 472.14814814814804)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-60.888888888888857, 470.07407407407391)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-52, 474.51851851851842)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-51.703703703703695, 477.18518518518511)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-47.555555555555543, 479.25925925925912)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-48.148148148148152, 481.92592592592581)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-46.666666666666629, 484.29629629629619)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-48.444444444444457, 485.18518518518511)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-46.666666666666629, 488.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-46.370370370370381, 490.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-50.222222222222172, 491.70370370370358)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-55.555555555555543, 491.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-54.666666666666629, 494.96296296296282)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-52.296296296296305, 494.96296296296282)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-48.740740740740762, 493.18518518518511)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-47.851851851851848, 495.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-44.888888888888857, 491.40740740740728)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-40.148148148148152, 490.81481481481467)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-36.888888888888857, 497.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-36, 501.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-39.555555555555543, 499.40740740740728)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-40.148148148148152, 500.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-42.518518518518533, 498.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-45.777777777777771, 499.40740740740728)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-45.481481481481467, 502.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-48.148148148148152, 506.51851851851836)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-50.518518518518533, 500.5925925925925)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-51.703703703703695, 497.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-54.370370370370381, 497.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-52.592592592592609, 501.18518518518511)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-52, 506.81481481481467)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-49.037037037037067, 511.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-48.444444444444457, 514.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-52.888888888888857, 513.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-55.851851851851848, 510.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-55.555555555555543, 513.92592592592575)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-59.703703703703695, 512.74074074074053)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-61.185185185185219, 515.40740740740728)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-59.407407407407391, 515.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-59.407407407407391, 522.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-61.777777777777771, 524.29629629629619)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-65.333333333333314, 523.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-68.592592592592581, 525.18518518518511)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-71.555555555555515, 521.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-73.925925925925924, 524.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-72.148148148148124, 526.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-69.18518518518519, 526.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-71.259259259259238, 532.29629629629619)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-71.851851851851848, 535.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-74.518518518518533, 534.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-75.999999999999972, 534.96296296296282)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-76.296296296296305, 539.70370370370358)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-73.925925925925924, 541.18518518518511)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-74.222222222222172, 546.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-77.777777777777771, 545.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-81.629629629629648, 548.29629629629619)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-80.444444444444429, 552.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-90.518518518518533, 561.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-94.666666666666629, 560.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-97.037037037037038, 555.40740740740728)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-100.88888888888886, 555.40740740740728)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-102.96296296296293, 547.70370370370358)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-100.29629629629628, 537.62962962962945)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-97.925925925925924, 529.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-100.88888888888886, 534.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-103.55555555555551, 542.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-103.85185185185182, 550.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-103.55555555555551, 555.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-99.999999999999972, 557.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-97.333333333333314, 560.14814814814804)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-98.814814814814781, 562.51851851851836)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-94.962962962962933, 564.5925925925925)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-92.888888888888857, 566.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-90.222222222222172, 566.07407407407391)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-89.629629629629648, 567.85185185185173)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-83.407407407407391, 568.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-86.96296296296299, 571.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-85.777777777777771, 576.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-90.222222222222172, 576.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-95.851851851851819, 575.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-97.333333333333314, 577.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-99.703703703703695, 574.96296296296282)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-99.703703703703695, 579.70370370370358)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-97.037037037037038, 579.70370370370358)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-95.555555555555515, 583.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-92.888888888888857, 584.14814814814804)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-88.740740740740733, 582.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-88.444444444444429, 586.51851851851836)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-94.962962962962933, 585.62962962962945)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-101.77777777777777, 586.81481481481467)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-105.03703703703704, 588.5925925925925)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-102.37037037037038, 591.85185185185173)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-104.74074074074073, 594.51851851851836)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-100.88888888888886, 596.5925925925925)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-105.62962962962962, 598.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-108.29629629629628, 605.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-107.40740740740739, 610.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-105.62962962962962, 608.74074074074053)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-100.88888888888886, 610.81481481481467)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-95.259259259259238, 607.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-83.407407407407391, 608.74074074074053)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-82.518518518518533, 622.96296296296282)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-83.703703703703695, 625.92592592592575)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-81.333333333333314, 627.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-81.333333333333314, 640.14814814814804)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-83.111111111111086, 642.81481481481467)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-87.555555555555515, 660.29629629629608)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-86.96296296296299, 662.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-89.629629629629648, 673.62962962962945)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-89.333333333333314, 676.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-91.407407407407391, 682.51851851851836)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-95.851851851851819, 682.51851851851836)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-97.333333333333314, 688.74074074074053)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-96.148148148148124, 692.5925925925925)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-97.629629629629619, 694.96296296296271)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-100.29629629629628, 691.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-101.18518518518516, 697.92592592592575)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-103.85185185185182, 698.81481481481467)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-105.33333333333331, 696.14814814814792)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-107.40740740740739, 697.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-110.96296296296293, 693.18518518518511)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-113.33333333333331, 696.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-114.81481481481478, 695.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-117.48148148148147, 697.62962962962945)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-116.59259259259258, 704.14814814814792)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-114.51851851851848, 706.81481481481467)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-119.55555555555551, 707.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-122.51851851851848, 710.07407407407391)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-123.7037037037037, 712.74074074074053)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-125.48148148148147, 711.25925925925912)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-130.51851851851848, 713.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-129.03703703703704, 718.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-125.77777777777777, 718.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-123.7037037037037, 720.74074074074053)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-119.25925925925924, 719.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-116.88888888888886, 715.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-117.77777777777777, 712.74074074074053)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-116.59259259259258, 711.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-115.7037037037037, 714.51851851851836)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-113.92592592592592, 716.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-113.33333333333331, 713.92592592592575)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-107.40740740740739, 712.14814814814792)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-108.88888888888886, 709.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-111.25925925925924, 709.18518518518511)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-110.37037037037038, 706.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-111.55555555555551, 704.14814814814792)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-108.29629629629628, 700.29629629629608)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-107.40740740740739, 702.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-104.74074074074073, 703.85185185185173)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-93.481481481481467, 703.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-94.370370370370381, 705.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-99.407407407407391, 706.81481481481467)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-97.037037037037038, 709.18518518518511)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-96.740740740740733, 713.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-99.111111111111086, 716.29629629629608)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-98.814814814814781, 718.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-95.259259259259238, 717.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-92.592592592592581, 721.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-95.259259259259238, 727.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-99.407407407407391, 731.70370370370358)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-102.07407407407408, 736.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-100.88888888888886, 738.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-103.55555555555551, 741.18518518518511)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-102.96296296296293, 745.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-106.22222222222217, 747.40740740740728)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-105.33333333333331, 749.18518518518511)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-108.29629629629628, 758.96296296296271)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-107.40740740740739, 763.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-113.03703703703704, 777.62962962962945)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-114.22222222222217, 773.4814814814813)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-115.11111111111109, 777.62962962962945)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-116.88888888888886, 777.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-117.48148148148147, 772.29629629629608)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-119.25925925925924, 767.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-121.92592592592592, 765.4814814814813)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-126.07407407407408, 766.07407407407391)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-125.18518518518516, 768.74074074074053)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-131.40740740740739, 769.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-134.96296296296293, 765.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-138.22222222222217, 764.5925925925925)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-139.11111111111109, 761.62962962962945)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-141.18518518518516, 756.5925925925925)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-143.55555555555551, 758.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-146.22222222222217, 757.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-147.7037037037037, 760.14814814814792)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-151.55555555555551, 758.07407407407391)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-149.18518518518516, 750.96296296296271)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-145.33333333333331, 750.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-145.03703703703704, 753.92592592592575)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-143.85185185185182, 755.70370370370358)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-140.59259259259258, 751.85185185185173)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-139.40740740740739, 755.40740740740728)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-136.44444444444443, 751.25925925925912)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-137.03703703703704, 747.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-139.11111111111109, 740.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-140.88888888888886, 745.92592592592575)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-141.77777777777777, 742.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-144.44444444444443, 738.51851851851836)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-143.85185185185182, 742.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-144.44444444444443, 747.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-147.99999999999997, 746.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-149.18518518518516, 738.51851851851836)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-152.4444444444444, 734.07407407407391)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-151.25925925925924, 726.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-147.99999999999997, 724.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-140.88888888888886, 727.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-139.99999999999997, 721.92592592592575)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-141.48148148148147, 719.85185185185173)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-146.51851851851848, 721.62962962962945)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-147.99999999999997, 719.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-151.25925925925924, 721.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-157.48148148148147, 707.70370370370358)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-155.99999999999997, 701.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-156.29629629629628, 698.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-158.66666666666663, 692.29629629629608)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-159.55555555555551, 695.25925925925912)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-163.7037037037037, 697.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-164.29629629629628, 693.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-166.66666666666663, 696.74074074074053)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-169.62962962962962, 697.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-172.59259259259258, 691.40740740740728)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-173.18518518518516, 684.5925925925925)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-173.18518518518516, 674.81481481481467)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-170.22222222222217, 670.96296296296271)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-171.99999999999997, 670.07407407407391)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-173.18518518518516, 662.96296296296271)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-174.37037037037035, 655.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-175.55555555555551, 653.18518518518511)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-177.62962962962962, 651.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-175.25925925925924, 648.14814814814804)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-177.92592592592592, 647.85185185185173)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-178.81481481481478, 645.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-184.4444444444444, 648.74074074074053)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-185.62962962962962, 645.18518518518511)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-187.99999999999997, 642.51851851851836)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-182.96296296296293, 633.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-182.66666666666663, 626.51851851851836)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-177.03703703703701, 620.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-178.22222222222217, 618.81481481481467)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-175.25925925925924, 617.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-174.96296296296293, 614.96296296296282)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-172.59259259259258, 615.25925925925912)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-168.4444444444444, 609.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-166.07407407407405, 612.5925925925925)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-162.22222222222217, 608.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-160.4444444444444, 613.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-156.59259259259258, 614.96296296296282)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-154.81481481481478, 619.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-151.25925925925924, 613.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-150.96296296296293, 605.18518518518511)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-151.25925925925924, 598.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-153.62962962962962, 595.40740740740728)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-151.25925925925924, 593.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-150.07407407407408, 586.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-152.14814814814812, 582.07407407407391)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-146.22222222222217, 571.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-147.7037037037037, 567.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-147.40740740740739, 564.29629629629619)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-149.48148148148147, 556.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-148.59259259259258, 549.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-144.44444444444443, 542.07407407407391)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-145.62962962962962, 538.81481481481467)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-140.88888888888886, 522.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-141.18518518518516, 518.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-134.96296296296293, 504.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-133.77777777777777, 505.62962962962945)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-137.62962962962962, 515.70370370370358)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-136.74074074074073, 516.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-130.51851851851848, 504.14814814814804)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-127.85185185185182, 503.85185185185173)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-130.22222222222217, 511.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-128.74074074074073, 512.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-127.85185185185182, 507.40740740740728)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-126.37037037037038, 506.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-126.07407407407408, 503.85185185185173)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-123.99999999999997, 495.85185185185173)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-121.92592592592592, 495.25925925925912)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-119.25925925925924, 488.74074074074053)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-119.85185185185182, 480.44444444444434)) + end + + labyrinth_island_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-141.18518518518516, 763.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-137.92592592592592, 766.96296296296271)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-134.07407407407408, 767.85185185185173)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-131.99999999999997, 772.29629629629608)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-125.77777777777777, 775.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-124.29629629629628, 779.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-121.62962962962962, 781.18518518518511)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-120.74074074074073, 787.40740740740728)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-117.77777777777777, 793.92592592592575)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-119.55555555555551, 794.51851851851836)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-118.96296296296293, 798.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-121.62962962962962, 796.5925925925925)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-123.99999999999997, 798.07407407407391)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-122.51851851851848, 800.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-131.11111111111109, 805.4814814814813)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-126.66666666666663, 806.07407407407391)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-125.48148148148147, 809.62962962962945)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-122.22222222222217, 809.62962962962945)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-121.92592592592592, 807.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-119.85185185185182, 809.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-116.59259259259258, 810.81481481481467)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-116.29629629629628, 817.62962962962945)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-124.59259259259258, 821.4814814814813)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-125.48148148148147, 824.14814814814792)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-126.66666666666663, 822.96296296296271)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-132.29629629629628, 823.85185185185173)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-135.25925925925924, 826.51851851851836)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-142.66666666666663, 825.62962962962945)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-143.55555555555551, 827.40740740740728)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-154.22222222222217, 826.51851851851836)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-159.25925925925924, 822.96296296296271)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-160.7407407407407, 817.62962962962945)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-155.99999999999997, 814.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-156.29629629629628, 812.5925925925925)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-157.77777777777774, 806.96296296296271)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-148.59259259259258, 806.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-145.33333333333331, 804.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-144.44444444444443, 800.74074074074053)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-144.74074074074073, 796.5925925925925)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-146.51851851851848, 795.40740740740728)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-144.74074074074073, 793.62962962962945)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-150.07407407407408, 785.62962962962945)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-147.99999999999997, 776.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-145.03703703703704, 769.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-143.25925925925924, 768.44444444444434)) + end + + little_andaman_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-187.99999999999997, 994.51851851851836)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-185.62962962962962, 995.70370370370347)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-184.7407407407407, 994.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-182.37037037037035, 994.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-177.33333333333331, 998.96296296296271)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-167.55555555555551, 1007.8518518518516)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-169.33333333333331, 1011.7037037037034)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-167.55555555555551, 1014.3703703703701)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-162.81481481481478, 1030.9629629629628)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-158.96296296296293, 1033.3333333333333)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-158.07407407407405, 1036.5925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-159.85185185185182, 1038.9629629629628)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-158.66666666666663, 1053.4814814814813)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-155.7037037037037, 1061.4814814814813)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-154.51851851851848, 1070.0740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-153.62962962962962, 1074.8148148148148)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-156.88888888888886, 1076.5925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-158.07407407407405, 1074.5185185185185)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-160.4444444444444, 1075.7037037037035)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-160.7407407407407, 1081.9259259259256)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-166.37037037037035, 1086.3703703703702)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-171.40740740740739, 1092)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-174.66666666666663, 1096.7407407407406)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-174.66666666666663, 1103.5555555555557)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-173.18518518518516, 1106.2222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-170.22222222222217, 1106.5185185185185)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-166.37037037037035, 1108.5925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-164.59259259259258, 1110.3703703703702)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-164.88888888888886, 1113.9259259259256)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-167.25925925925924, 1117.1851851851852)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-171.11111111111109, 1120.4444444444443)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-178.81481481481478, 1134.9629629629628)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-185.92592592592592, 1138.5185185185185)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-191.85185185185182, 1137.037037037037)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-197.77777777777774, 1138.2222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-206.96296296296293, 1135.2592592592591)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-213.18518518518516, 1129.6296296296296)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-219.11111111111109, 1124.8888888888889)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-220.29629629629628, 1125.7777777777778)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-225.9259259259259, 1130.2222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-232.7407407407407, 1129.3333333333333)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-233.03703703703701, 1130.8148148148148)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-240.7407407407407, 1130.2222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-241.33333333333329, 1127.5555555555557)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-237.18518518518516, 1123.4074074074074)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-237.48148148148144, 1120.4444444444443)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-234.22222222222217, 1114.8148148148148)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-232.4444444444444, 1113.3333333333333)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-230.07407407407405, 1110.6666666666665)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-229.77777777777774, 1103.2592592592591)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-227.40740740740739, 1101.1851851851852)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-226.51851851851848, 1097.6296296296296)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-227.70370370370367, 1097.037037037037)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-227.11111111111109, 1090.2222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-229.18518518518516, 1089.037037037037)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-232.7407407407407, 1082.5185185185185)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-235.11111111111109, 1079.2592592592591)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-238.96296296296293, 1079.2592592592591)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-241.03703703703701, 1059.4074074074074)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-239.85185185185182, 1057.9259259259256)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-240.1481481481481, 1042.8148148148148)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-241.62962962962959, 1038.9629629629628)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-240.7407407407407, 1035.7037037037035)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-237.77777777777774, 1033.3333333333333)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-237.18518518518516, 1036.5925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-234.22222222222217, 1036)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-231.25925925925924, 1032.7407407407406)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-226.51851851851848, 1033.3333333333333)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-221.48148148148147, 1021.1851851851851)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-218.51851851851848, 1021.7777777777777)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-214.37037037037032, 1011.7037037037034)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-209.33333333333331, 1010.8148148148147)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-209.03703703703701, 1008.1481481481479)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-210.81481481481478, 1006.3703703703701)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-206.07407407407405, 1003.111111111111)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-204.29629629629628, 1004.296296296296)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-201.03703703703701, 1002.5185185185184)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-197.18518518518516, 997.4814814814813)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-193.03703703703701, 996.8888888888888)) + end + +feature {NONE} -- Implementation + + rotation_amount: REAL_64 = 10.0 + -- Make the arrow point north-east + +invariant + + correct_port: attached target_imp implies port = game.andaman_islands + +end diff --git a/jj_vitp/Interface/widgets/port_widgets/attu_widget.e b/jj_vitp/Interface/widgets/port_widgets/attu_widget.e new file mode 100644 index 0000000..dfa9753 --- /dev/null +++ b/jj_vitp/Interface/widgets/port_widgets/attu_widget.e @@ -0,0 +1,165 @@ +note + description: "[ + The widget representing this port + ]" + author: "Jimmy J. Johnson" + +class + ATTU_WIDGET + +inherit + +-- GREEN_PORT_WIDGET +-- undefine +-- paint +-- redefine +-- initialize, +-- create_interface_objects, +-- position_widgets, +-- build_land +-- end + + ISLAND_PORT_WIDGET + redefine + create_interface_objects, +-- initialize, + position_widgets, + build_land, + rotation_amount + end + +create + make + +feature {NONE} -- Initialization + + create_interface_objects + -- Initialize attributes + do + attu_island := attu_island_imp + -- Make objects non-Void before calling Precursor, + -- because a qualified call is made in an EV_xx class. + Precursor {ISLAND_PORT_WIDGET} +-- Precursor {GREEN_PORT_WIDGET} + end + +-- initialize +-- -- Set up the widgets in Current. +-- do +-- Precursor {ISLAND_PORT_WIDGET} +---- Precursor {GREEN_PORT_WIDGET} +-- end + + position_widgets + -- Move Current and contained widgets to correct + -- location and set their their sizes + do + Precursor {ISLAND_PORT_WIDGET} +-- Precursor {GREEN_PORT_WIDGET} +-- marker.center_on_dot (dot) + marker.set_x_y (dot.x, dot.y) + center_on (532, 20) + translate_widget (land, 9, 2) + translate_widget (name_mt, -1, 0) + translate_widget (marker, 0, 7) + scale_widget (land, 0.25) + end + + build_land + -- Add widgets to Current + do + Precursor {ISLAND_PORT_WIDGET} + land.extend (attu_island) + end + +feature -- Status report + + is_red: BOOLEAN = False + -- Does Current represent a red (i.e. major) port? + +feature {NONE} -- Implementation + + attu_island: EV_MODEL_POLYGON + +feature {NONE} -- Implementation + + attu_island_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (0, 0)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-0.44444444444444287, -2.2222222222222854)) + Result.extend_point (create {EV_COORDINATE}.make_precise (3.1111111111111072, -6.6666666666666856)) + Result.extend_point (create {EV_COORDINATE}.make_precise (6.2222222222222214, -7.1111111111110858)) + Result.extend_point (create {EV_COORDINATE}.make_precise (8, -11.111111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (12.444444444444443, -12)) + Result.extend_point (create {EV_COORDINATE}.make_precise (14.666666666666657, -14.666666666666686)) + Result.extend_point (create {EV_COORDINATE}.make_precise (18.222222222222221, -15.111111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (23.111111111111107, -13.333333333333371)) + Result.extend_point (create {EV_COORDINATE}.make_precise (26.222222222222221, -15.111111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (30.222222222222221, -14.222222222222285)) + Result.extend_point (create {EV_COORDINATE}.make_precise (35.111111111111107, -13.777777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (37.777777777777771, -14.222222222222285)) + Result.extend_point (create {EV_COORDINATE}.make_precise (40.444444444444443, -12.888888888888914)) + Result.extend_point (create {EV_COORDINATE}.make_precise (40.444444444444443, -10.666666666666686)) + Result.extend_point (create {EV_COORDINATE}.make_precise (44.444444444444443, -10.666666666666686)) + Result.extend_point (create {EV_COORDINATE}.make_precise (46.222222222222214, -12.888888888888914)) + Result.extend_point (create {EV_COORDINATE}.make_precise (55.555555555555557, -11.5555555555556)) + Result.extend_point (create {EV_COORDINATE}.make_precise (57.333333333333329, -13.777777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (64.444444444444429, -8.4444444444444571)) + Result.extend_point (create {EV_COORDINATE}.make_precise (59.555555555555557, -4)) + Result.extend_point (create {EV_COORDINATE}.make_precise (62.666666666666657, -3.5555555555555998)) + Result.extend_point (create {EV_COORDINATE}.make_precise (62.666666666666657, -0.88888888888891415)) + Result.extend_point (create {EV_COORDINATE}.make_precise (69.777777777777757, -6.2222222222222854)) + Result.extend_point (create {EV_COORDINATE}.make_precise (70.666666666666657, -4)) + Result.extend_point (create {EV_COORDINATE}.make_precise (75.999999999999986, -3.1111111111110858)) + Result.extend_point (create {EV_COORDINATE}.make_precise (76.444444444444429, 2.2222222222222285)) + Result.extend_point (create {EV_COORDINATE}.make_precise (72.888888888888886, 5.7777777777777146)) + Result.extend_point (create {EV_COORDINATE}.make_precise (78.666666666666657, 7.1111111111110858)) + Result.extend_point (create {EV_COORDINATE}.make_precise (87.1111111111111, 8.4444444444444002)) + Result.extend_point (create {EV_COORDINATE}.make_precise (87.1111111111111, 10.666666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (80.444444444444429, 11.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (77.333333333333329, 12.4444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (76.444444444444429, 14.222222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (72.888888888888886, 11.111111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (69.777777777777757, 8.8888888888889142)) + Result.extend_point (create {EV_COORDINATE}.make_precise (66.222222222222214, 11.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (63.555555555555557, 14.666666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (64.444444444444429, 16.888888888888914)) + Result.extend_point (create {EV_COORDINATE}.make_precise (60.444444444444429, 19.111111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (57.777777777777757, 16.4444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (55.999999999999986, 16)) + Result.extend_point (create {EV_COORDINATE}.make_precise (55.555555555555557, 12)) + Result.extend_point (create {EV_COORDINATE}.make_precise (50.666666666666657, 13.777777777777715)) + Result.extend_point (create {EV_COORDINATE}.make_precise (43.1111111111111, 23.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (39.1111111111111, 24.4444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (39.1111111111111, 19.111111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (37.777777777777771, 16.4444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (34.222222222222221, 18.222222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (32.444444444444443, 16.4444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (31.999999999999993, 19.111111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (28.888888888888886, 19.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (24.444444444444443, 17.333333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (26.222222222222221, 14.666666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (27.111111111111107, 11.111111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (27.111111111111107, 8.4444444444444002)) + Result.extend_point (create {EV_COORDINATE}.make_precise (29.777777777777771, 3.5555555555555429)) + Result.extend_point (create {EV_COORDINATE}.make_precise (26.666666666666657, 5.3333333333333144)) + Result.extend_point (create {EV_COORDINATE}.make_precise (19.999999999999993, 4.8888888888889142)) + Result.extend_point (create {EV_COORDINATE}.make_precise (15.111111111111107, 7.1111111111110858)) + Result.extend_point (create {EV_COORDINATE}.make_precise (12.888888888888886, 5.7777777777777146)) + Result.extend_point (create {EV_COORDINATE}.make_precise (15.555555555555557, 0)) + Result.extend_point (create {EV_COORDINATE}.make_precise (15.999999999999993, -3.1111111111110858)) + Result.extend_point (create {EV_COORDINATE}.make_precise (9.3333333333333286, -1.7777777777777715)) + Result.extend_point (create {EV_COORDINATE}.make_precise (8, 0)) + Result.extend_point (create {EV_COORDINATE}.make_precise (3.5555555555555571, 0.44444444444440023)) + Result.extend_point (create {EV_COORDINATE}.make_precise (3.1111111111111072, -1.3333333333333712)) + end + +feature {NONE} -- Implementation + + rotation_amount: REAL_64 = 5.0 + -- Make the arrow point slightly south of east + +end diff --git a/jj_vitp/Interface/widgets/port_widgets/australia_widget.e b/jj_vitp/Interface/widgets/port_widgets/australia_widget.e new file mode 100644 index 0000000..ca44b45 --- /dev/null +++ b/jj_vitp/Interface/widgets/port_widgets/australia_widget.e @@ -0,0 +1,996 @@ +note + description: "[ + Widget representing a {PORT}. + ]" + author: "Jimmy J. Johnson" + +class + AUSTRALIA_WIDGET + +inherit + + RED_PORT_WIDGET + redefine + create_interface_objects, + extend_widgets, + set_fonts_and_colors, + position_widgets, + build_land + end + +create + make + +feature {NONE} -- Initialization + + create_interface_objects + -- Initialize attributes + do + Precursor {RED_PORT_WIDGET} + mainland := mainland_imp + melville_island := melville_island_imp + create not_allowed_text.make_with_text ("(No British Allowed)") +-- extend (not_allowed_text) + end + + extend_widgets + -- Put widgets into Current. This cannot be done + -- in `create_interface_object', because cannot call + -- `extend' feature until all objects [in descendants] + -- are also created. + do + Precursor {RED_PORT_WIDGET} + text_group.extend (not_allowed_text) + end + + set_fonts_and_colors + -- Set up the widgets in Current. + do + Precursor {RED_PORT_WIDGET} + not_allowed_text.set_font (Subtext_font) + dot.show + dot.set_foreground_color (Yellow) + end + + position_widgets + -- Move Current and contained widgets to correct + -- location and set their their sizes + do + Precursor {RED_PORT_WIDGET} + -- make adjustments + scale_widget (land, 0.23) + rotate_widget (land, 10.0) + translate_widget (Current, 364, 773) +-- anchor.set_x_y (x, y - 200) +-- name_mt.set_x_y (x - 5, y - 190) +-- not_allowed_text.set_x_y (x, y - 170) + text_group.set_x_y (300, 465) + marker.set_x_y (270, 460) + anchor.set_x_y (300, 455) + not_allowed_text.set_x_y (300, 470) + +-- translate_widget (name_mt, -68, -311) +-- translate_widget (dot, -80, -290) +---- marker.center_on_dot (dot) +-- marker.set_x_y (dot.x, dot.y) +---- anchor.center_on_dot (dot) +-- anchor.set_x_y (dot.x, dot.y) +-- translate_widget (marker, -10, -20) +-- translate_widget (anchor, 17, -30) +-- translate_widget (not_allowed_text, -77, -306) + dot.set_x_y (x, y) + + end + + build_land + -- Add widgets to Current + do + Precursor {RED_PORT_WIDGET} + -- Initialize attributes + land.extend (mainland) + land.extend (melville_island) + end + + not_allowed_text: EV_MODEL_TEXT + -- Extra text on some Red ports (e.g. "No British Allowed"). + +--feature -- Access + +-- defining_figure: EV_MODEL +-- -- The figure to be used to determine if other figures +-- -- overlap this one or for capturing mouse events +-- do +-- Result := mainland +-- end + +feature -- Access + + mainland: EV_MODEL_POLYGON + melville_island: EV_MODEL_POLYGON + +feature -- Status report + + is_red: BOOLEAN = True + -- Does Current represent a red (i.e. major) port? + +feature {NONE} -- Implementation + + mainland_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Clockwise from Adelaide (where west coast goes off the bottom) + Result.extend_point (create {EV_COORDINATE}.make_precise (-3, 20)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-7, 12)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-8, 7)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-5, 5)) + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (0, 0)) + Result.extend_point (create {EV_COORDINATE}.make_precise (0, -7.5555555555555429)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-4.4444444444442297, -9.3333333333330302)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-5.3333333333331439, -15.111111111110858)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-9.3333333333331439, -20.888888888888914)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-9.7777777777778283, -16)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-13.777777777777828, -10.222222222221944)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-12.888888888888687, -5.7777777777777146)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-15.555555555555316, 0.44444444444445708)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-16.44444444444423, 6.6666666666669698)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-18.222222222222285, 8)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-24.888888888888687, 6.2222222222222854)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-25.333333333333144, 8)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-28.888888888888687, 7.1111111111110858)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-28.888888888888687, 9.7777777777780557)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-32.888888888888687, 9.3333333333335986)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-35.1111111111112, 11.111111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-38.222222222222285, 10.222222222222285)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-35.1111111111112, 5.7777777777780557)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-34.222222222222285, 0.44444444444445708)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-28.888888888888687, 0)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-25.333333333333144, 1.3333333333335986)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-23.1111111111112, -12)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-26.222222222222285, -10.222222222221944)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-22.666666666666515, -14.222222222221944)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-22.666666666666515, -19.111111111110858)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-24.44444444444423, -21.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-22.222222222222285, -22.666666666666401)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-23.1111111111112, -24.888888888888914)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-20, -26.666666666666401)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-20, -29.777777777777715)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-13.777777777777828, -35.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-11.555555555555316, -36.888888888888914)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-12.888888888888687, -41.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-15.1111111111112, -45.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-10.222222222222285, -47.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-10.222222222222285, -51.111111111110858)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-12.44444444444423, -51.111111111110858)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-14.666666666666515, -62.666666666666401)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-16.888888888888687, -65.777777777777715)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-15.1111111111112, -56.44444444444423)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-16, -52.44444444444423)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-18.666666666666515, -52.888888888888914)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-20.44444444444423, -49.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-23.555555555555316, -47.111111111110858)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-24.44444444444423, -40.44444444444423)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-27.1111111111112, -39.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-29.333333333333144, -33.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-35.1111111111112, -33.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-35.555555555555316, -29.777777777777715)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-41.333333333333144, -27.111111111110858)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-44, -24.44444444444423)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-47.1111111111112, -23.111111111110858)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-49.333333333333144, -17.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-52.888888888888687, -14.222222222221944)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-52.888888888888687, -9.3333333333330302)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-55.1111111111112, -10.666666666666401)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-57.777777777777828, -8.4444444444442297)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-56, -3.5555555555555429)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-56, 1.7777777777780557)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-52.888888888888687, 0.88888888888914153)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-52.44444444444423, 4)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-56.888888888888687, 4)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-60.888888888888687, 0)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-63.555555555555316, -0.88888888888891415)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-64.888888888888687, 2.6666666666669698)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-66.222222222222285, -0.88888888888891415)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-72, -5.3333333333330302)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-73.333333333333144, -8.4444444444442297)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-76.44444444444423, -7.5555555555555429)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-76.888888888888687, -9.7777777777777146)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-74.666666666666515, -12.44444444444423)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-72, -10.222222222221944)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-68.888888888888687, -8.4444444444442297)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-72, -13.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-70.666666666666515, -16.888888888888914)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-73.777777777777828, -19.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-72.888888888888687, -24)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-77.777777777777828, -30.222222222221944)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-83.555555555555316, -33.777777777777715)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-82.222222222222285, -38.222222222221944)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-83.1111111111112, -42.222222222221944)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-88.44444444444423, -45.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-95.1111111111112, -45.777777777777715)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-95.555555555555316, -49.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-98.222222222222285, -50.222222222221944)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-97.333333333333144, -52)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-101.33333333333314, -53.777777777777715)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-99.555555555555316, -55.111111111110858)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-100.44444444444423, -59.111111111110858)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-96.44444444444423, -58.666666666666401)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-96, -63.111111111110858)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-98.666666666666515, -66.666666666666401)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-101.77777777777783, -64.888888888888914)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-105.77777777777783, -64)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-104, -69.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-107.1111111111112, -71.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-108.44444444444423, -74.222222222221944)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-112.44444444444423, -70.222222222221944)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-109.33333333333314, -76)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-114.22222222222229, -75.111111111110858)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-119.1111111111112, -72.888888888888914)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-127.55555555555532, -76.888888888888914)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-130.22222222222229, -80.44444444444423)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-136, -80.888888888888914)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-137.33333333333314, -78.222222222221944)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-143.99999999999983, -77.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-152.88888888888869, -85.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-167.11111111111092, -92)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-173.77777777777783, -88.888888888888914)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-195.99999999999983, -88.888888888888914)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-215.55555555555532, -86.666666666666401)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-231.99999999999989, -78.222222222221944)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-247.99999999999989, -73.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-254.222222222222, -71.111111111110858)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-264.44444444444423, -70.222222222221944)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-275.11111111111092, -70.222222222221944)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-280.88888888888869, -71.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-285.33333333333326, -70.222222222221944)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-289.77777777777771, -67.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-295.11111111111092, -63.111111111110858)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-299.11111111111092, -62.222222222221944)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-305.77777777777771, -58.222222222221944)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-312.44444444444423, -53.777777777777715)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-320.44444444444423, -52)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-326.222222222222, -48.44444444444423)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-328.44444444444423, -43.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-329.33333333333326, -35.111111111110858)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-331.99999999999977, -36)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-334.222222222222, -31.111111111110858)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-339.11111111111092, -26.666666666666401)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-343.55555555555532, -26.666666666666401)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-349.77777777777766, -22.666666666666401)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-351.55555555555532, -27.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-355.55555555555532, -26.222222222221944)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-356.8888888888888, -28)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-360.8888888888888, -27.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-360.8888888888888, -25.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-364.44444444444423, -25.777777777777715)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-365.77777777777766, -28)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-368.44444444444423, -27.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-368.44444444444423, -24)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-372.8888888888888, -24.44444444444423)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-374.222222222222, -28.888888888888914)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-377.33333333333326, -28.888888888888914)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-378.222222222222, -26.666666666666401)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-383.11111111111092, -27.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-384.8888888888888, -29.777777777777715)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-394.222222222222, -28.888888888888914)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-395.55555555555532, -27.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-406.222222222222, -27.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-410.222222222222, -24.888888888888914)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-420.44444444444423, -25.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-424.44444444444423, -24)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-431.11111111111097, -19.111111111110858)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-430.222222222222, -13.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-433.33333333333314, -13.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-433.7777777777776, -10.666666666666401)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-435.99999999999977, -11.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-436.44444444444429, -8.8888888888889142)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-439.55555555555532, -10.222222222221944)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-444.44444444444429, -11.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-447.11111111111097, -10.222222222221944)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-448.44444444444429, -7.1111111111108585)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-455.55555555555532, -3.1111111111108585)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-455.99999999999977, 1.7777777777780557)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-460.44444444444429, 1.3333333333335986)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-462.66666666666652, 3.5555555555557703)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-466.66666666666652, 1.7777777777780557)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-468.44444444444429, 3.5555555555557703)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-465.7777777777776, 6.2222222222222854)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-469.7777777777776, 7.1111111111110858)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-472.88888888888869, 4.4444444444444571)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-475.11111111111097, 7.1111111111110858)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-480.44444444444429, 5.7777777777780557)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-482.222222222222, 3.5555555555557703)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-484.88888888888869, 4.4444444444444571)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-489.77777777777754, 3.5555555555557703)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-491.11111111111097, 6.2222222222222854)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-494.22222222222206, 2.6666666666669698)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-495.11111111111097, 4.4444444444444571)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-498.66666666666652, 4.4444444444444571)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-501.33333333333314, 4)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-503.55555555555532, 0.44444444444445708)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-508.44444444444429, -0.4444444444442297)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-511.11111111111097, -0.4444444444442297)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-515.11111111111097, -5.3333333333330302)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-519.99999999999977, -9.7777777777777146)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-523.99999999999977, -13.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-526.22222222222206, -14.666666666666401)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-531.11111111111097, -16.44444444444423)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-531.55555555555532, -13.777777777777715)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-533.33333333333314, -16.888888888888914)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-535.11111111111097, -32.888888888888914)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-532.88888888888869, -33.777777777777715)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-535.55555555555532, -37.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-532.44444444444423, -37.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-529.33333333333314, -33.777777777777715)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-526.22222222222206, -34.666666666666401)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-520.44444444444434, -40.888888888888914)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-518.66666666666652, -44.44444444444423)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-521.33333333333314, -61.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-519.11111111111097, -64.44444444444423)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-519.55555555555532, -72.888888888888914)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-517.7777777777776, -70.666666666666401)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-518.22222222222206, -82.666666666666401)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-523.99999999999977, -96)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-525.33333333333314, -102.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-531.55555555555532, -111.11111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-535.55555555555532, -129.77777777777754)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-534.6666666666664, -145.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-537.7777777777776, -155.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-543.55555555555532, -160.44444444444429)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-544.44444444444423, -168.88888888888863)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-550.66666666666652, -178.22222222222194)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-553.7777777777776, -179.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-555.55555555555532, -189.7777777777776)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-553.33333333333314, -190.22222222222194)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-557.7777777777776, -201.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-562.66666666666652, -211.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-567.55555555555532, -218.22222222222194)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-573.33333333333314, -223.99999999999972)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-575.11111111111086, -227.99999999999972)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-576.88888888888869, -229.7777777777776)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-576.88888888888869, -231.99999999999972)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-578.6666666666664, -234.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-582.22222222222194, -246.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-580.88888888888869, -248.88888888888863)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-578.6666666666664, -245.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-576.44444444444423, -236.88888888888863)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-574.22222222222194, -233.7777777777776)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-571.99999999999977, -235.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-569.33333333333314, -227.99999999999972)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-567.11111111111086, -227.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-567.99999999999977, -223.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-564.88888888888869, -223.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-564.44444444444423, -219.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-561.33333333333314, -220.88888888888863)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-560.44444444444423, -226.22222222222194)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-567.11111111111086, -231.99999999999972)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-568.44444444444423, -236.44444444444429)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-571.11111111111086, -242.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-568.88888888888869, -247.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-567.99999999999977, -243.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-564.44444444444423, -242.22222222222194)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-563.99999999999977, -232.44444444444429)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-561.7777777777776, -230.22222222222194)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-559.99999999999977, -235.99999999999972)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-558.66666666666652, -228.44444444444429)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-555.11111111111086, -223.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-552.44444444444423, -227.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-553.33333333333314, -229.7777777777776)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-552.88888888888869, -231.99999999999972)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-554.22222222222194, -235.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-552.44444444444423, -236.44444444444429)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-554.66666666666652, -240.88888888888863)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-556.88888888888869, -243.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-560.88888888888869, -255.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-563.99999999999977, -257.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-565.7777777777776, -267.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-571.11111111111086, -272.88888888888863)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-570.6666666666664, -283.55555555555537)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-567.99999999999977, -292.44444444444429)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-563.55555555555532, -298.22222222222194)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-562.22222222222194, -303.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-563.99999999999977, -303.99999999999972)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-563.11111111111086, -307.55555555555537)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-561.7777777777776, -308.88888888888863)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-561.7777777777776, -312.44444444444429)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-565.33333333333314, -316.44444444444429)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-566.66666666666652, -322.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-563.99999999999977, -322.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-562.22222222222194, -327.55555555555537)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-559.99999999999977, -335.55555555555537)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-557.33333333333314, -339.55555555555537)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-552.88888888888869, -340.88888888888863)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-554.66666666666652, -331.99999999999972)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-553.33333333333314, -326.22222222222194)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-554.66666666666652, -323.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-549.33333333333314, -324.88888888888863)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-547.11111111111086, -330.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-543.99999999999977, -334.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-543.55555555555532, -338.22222222222194)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-536.44444444444423, -343.55555555555537)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-533.7777777777776, -342.22222222222194)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-528.44444444444423, -345.77777777777749)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-524.88888888888869, -345.77777777777749)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-523.99999999999977, -348.44444444444429)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-521.33333333333314, -352.44444444444429)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-516.44444444444434, -353.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-515.11111111111097, -356.88888888888863)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-512.44444444444434, -359.99999999999972)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-508.44444444444429, -359.11111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-507.99999999999977, -363.11111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-502.22222222222206, -364.44444444444429)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-499.11111111111097, -367.11111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-495.55555555555532, -367.55555555555532)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-492.88888888888869, -373.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-490.66666666666652, -374.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-492.44444444444429, -369.77777777777749)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-492.44444444444429, -366.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-489.77777777777754, -366.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-485.77777777777754, -368.88888888888863)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-481.7777777777776, -364.88888888888863)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-471.55555555555532, -367.99999999999972)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-461.33333333333314, -376.44444444444429)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-455.11111111111097, -375.99999999999972)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-447.99999999999977, -377.77777777777749)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-444.44444444444429, -383.11111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-439.99999999999977, -386.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-434.66666666666652, -385.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-431.11111111111097, -381.77777777777749)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-427.11111111111092, -383.11111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-425.7777777777776, -385.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-413.33333333333314, -387.11111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-399.11111111111092, -393.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-391.11111111111092, -400.44444444444423)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-383.99999999999977, -415.55555555555532)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-381.77777777777766, -415.11111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-381.77777777777766, -420.88888888888869)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-378.66666666666657, -421.77777777777749)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-371.55555555555532, -425.77777777777749)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-367.55555555555532, -427.55555555555532)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-367.11111111111092, -431.99999999999972)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-370.222222222222, -431.99999999999972)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-371.55555555555532, -438.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-372.8888888888888, -447.11111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-368.44444444444423, -456.88888888888869)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-363.11111111111092, -457.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-363.11111111111092, -461.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-356.8888888888888, -461.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-358.66666666666657, -462.222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-352.44444444444423, -471.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-351.55555555555532, -469.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-353.33333333333326, -466.222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-349.33333333333326, -461.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-343.55555555555532, -447.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-338.66666666666657, -442.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-339.55555555555532, -445.77777777777749)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-339.11111111111092, -455.55555555555526)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-334.222222222222, -452.88888888888869)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-334.66666666666657, -456.88888888888869)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-337.77777777777766, -462.222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-341.77777777777766, -463.55555555555526)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-342.66666666666657, -467.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-339.99999999999977, -469.77777777777749)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-339.11111111111092, -471.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-341.77777777777766, -472.88888888888869)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-335.99999999999977, -476.88888888888869)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-334.66666666666657, -473.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-330.66666666666657, -470.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-330.66666666666657, -474.222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-326.222222222222, -472.88888888888869)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-325.33333333333326, -468.88888888888869)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-320.44444444444423, -466.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-321.77777777777766, -471.11111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-310.222222222222, -469.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-319.55555555555532, -472.44444444444423)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-318.66666666666657, -477.77777777777749)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-315.11111111111092, -475.55555555555526)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-315.11111111111092, -480.44444444444423)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-311.11111111111092, -487.99999999999972)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-319.11111111111092, -479.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-320.8888888888888, -485.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-320.8888888888888, -489.77777777777749)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-318.66666666666657, -492.44444444444417)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-320.44444444444423, -495.11111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-322.222222222222, -495.99999999999972)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-319.11111111111092, -496.44444444444417)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-317.33333333333326, -497.77777777777749)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-315.99999999999977, -494.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-312.44444444444423, -497.77777777777749)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-309.33333333333326, -503.11111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-305.33333333333326, -503.99999999999972)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-301.77777777777771, -501.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-299.99999999999989, -499.55555555555526)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-295.55555555555532, -499.99999999999972)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-298.222222222222, -501.77777777777749)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-295.99999999999989, -503.55555555555526)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-301.77777777777771, -503.99999999999972)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-299.99999999999989, -505.77777777777749)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-303.11111111111092, -507.11111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-303.99999999999989, -509.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-305.77777777777771, -512.88888888888869)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-304.44444444444423, -516.88888888888869)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-302.222222222222, -514.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-300.88888888888869, -511.55555555555526)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-298.222222222222, -513.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-295.99999999999989, -511.99999999999972)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-294.222222222222, -514.22222222222194)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-293.33333333333326, -517.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-292.88888888888869, -521.77777777777749)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-290.222222222222, -519.5555555555552)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-291.11111111111092, -515.11111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-291.99999999999989, -511.99999999999972)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-287.99999999999989, -516.44444444444412)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-286.222222222222, -509.77777777777749)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-286.222222222222, -513.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-282.66666666666657, -515.11111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-284.44444444444423, -518.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-280.88888888888869, -521.77777777777749)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-282.222222222222, -523.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-285.33333333333326, -523.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-284.88888888888869, -527.11111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-282.222222222222, -528.88888888888857)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-278.66666666666657, -527.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-278.66666666666657, -524.44444444444412)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-277.77777777777771, -521.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-275.99999999999989, -524.88888888888869)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-271.99999999999989, -529.77777777777749)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-273.33333333333326, -524.88888888888869)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-270.222222222222, -520.88888888888869)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-267.55555555555532, -526.22222222222194)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-264.44444444444423, -527.11111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-266.66666666666657, -527.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-266.66666666666657, -531.11111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-262.222222222222, -532.88888888888857)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-258.66666666666657, -527.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-252.44444444444423, -529.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-251.55555555555532, -525.77777777777749)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-246.66666666666657, -523.11111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-242.222222222222, -517.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-240.88888888888869, -514.22222222222194)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-233.77777777777771, -509.77777777777749)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-236.44444444444423, -505.77777777777749)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-236.88888888888869, -498.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-238.222222222222, -493.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-240.88888888888869, -489.77777777777749)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-234.222222222222, -495.11111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-232.88888888888869, -493.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-232.88888888888869, -496.88888888888869)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-234.66666666666657, -497.77777777777749)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-235.11111111111092, -501.77777777777749)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-232.44444444444423, -503.11111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-229.33333333333326, -507.11111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-223.99999999999989, -509.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-223.99999999999989, -506.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-213.33333333333326, -505.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-212.44444444444423, -503.55555555555526)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-212.44444444444423, -499.99999999999972)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-213.77777777777771, -497.77777777777749)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-210.222222222222, -498.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-208.88888888888869, -500.88888888888863)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-209.33333333333326, -502.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-209.77777777777771, -505.77777777777749)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-205.33333333333326, -505.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-203.55555555555532, -501.77777777777749)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-202.222222222222, -498.22222222222194)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-198.66666666666652, -497.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-197.33333333333314, -493.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-193.77777777777783, -491.11111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-192.44444444444423, -493.77777777777749)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-195.99999999999983, -495.11111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-197.48148148148135, -499.55555555555526)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-200.74074074074053, -501.62962962962933)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-204.59259259259244, -507.55555555555526)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-201.03703703703695, -508.74074074074048)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-202.51851851851836, -511.99999999999972)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-205.4814814814813, -515.25925925925901)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-208.74074074074053, -517.92592592592564)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-206.96296296296288, -522.07407407407379)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-202.51851851851836, -524.74074074074042)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-200.1481481481481, -528.88888888888857)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-197.48148148148135, -538.96296296296271)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-194.81481481481467, -540.14814814814781)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-194.222222222222, -537.48148148148118)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-191.85185185185179, -538.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-187.70370370370358, -542.81481481481455)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-187.40740740740722, -539.25925925925901)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-183.85185185185179, -538.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-186.222222222222, -540.74074074074042)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-186.222222222222, -543.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-191.25925925925912, -546.07407407407379)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-190.37037037037027, -552.29629629629596)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-185.92592592592575, -552.59259259259227)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-185.33333333333314, -558.22222222222194)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-181.77777777777783, -559.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-180.29629629629613, -564.14814814814781)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-174.96296296296288, -564.74074074074042)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-168.44444444444423, -565.62962962962933)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-171.70370370370358, -570.07407407407379)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-164.88888888888869, -570.96296296296271)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-161.92592592592575, -567.70370370370347)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-157.18518518518511, -567.40740740740716)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-150.96296296296288, -569.18518518518488)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-147.70370370370358, -566.51851851851825)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-142.96296296296293, -569.77777777777749)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-138.22222222222229, -570.96296296296271)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-130.51851851851848, -570.3703703703701)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-133.48148148148141, -570.96296296296271)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-133.77777777777783, -575.40740740740716)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-136.44444444444423, -580.14814814814781)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-134.66666666666652, -583.40740740740716)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-139.1111111111112, -585.48148148148118)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-142.96296296296293, -585.18518518518488)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-144.1481481481481, -581.92592592592564)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-145.62962962962945, -584.29629629629596)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-147.11111111111092, -584.88888888888857)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-146.222222222222, -586.96296296296271)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-148.59259259259244, -586.96296296296271)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-147.99999999999983, -589.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-152.74074074074053, -588.74074074074042)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-151.85185185185179, -592.29629629629596)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-148.88888888888869, -592.59259259259227)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-147.70370370370358, -594.07407407407379)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-145.62962962962945, -593.18518518518488)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-143.85185185185179, -594.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-142.07407407407391, -591.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-140.59259259259261, -593.18518518518488)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-138.51851851851848, -591.40740740740716)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-137.62962962962945, -593.18518518518488)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-137.62962962962945, -595.5555555555552)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-134.07407407407391, -596.44444444444412)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-134.07407407407391, -589.03703703703673)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-133.48148148148141, -585.18518518518488)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-131.70370370370358, -583.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-127.85185185185185, -589.03703703703673)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-121.33333333333314, -581.03703703703673)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-117.77777777777783, -580.44444444444412)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-114.51851851851848, -578.3703703703701)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-112.14814814814815, -579.55555555555532)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-110.37037037037032, -577.48148148148118)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-106.51851851851848, -579.55555555555532)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-103.85185185185185, -579.55555555555532)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-105.03703703703695, -575.40740740740716)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-101.18518518518511, -576.59259259259227)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-98.518518518518476, -576.29629629629596)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-98.518518518518476, -570.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-95.555555555555316, -574.22222222222194)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-91.703703703703582, -570.96296296296271)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-87.259259259259125, -572.14814814814781)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-85.185185185185105, -575.11111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-81.037037037036953, -572.14814814814781)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-76.888888888888687, -567.11111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-74.518518518518476, -568.88888888888857)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-72.148148148148152, -572.14814814814781)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-67.407407407407391, -572.14814814814781)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-66.518518518518476, -575.11111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-63.555555555555316, -575.40740740740716)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-60, -578.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-57.629629629629449, -578.3703703703701)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-59.407407407407391, -576.29629629629596)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-57.925925925925753, -575.11111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-64.148148148148152, -569.48148148148118)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-64.148148148148152, -566.51851851851825)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-61.185185185185105, -569.18518518518488)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-58.222222222222285, -569.48148148148118)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-55.851851851851848, -572.14814814814781)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-54.666666666666515, -567.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-55.851851851851848, -563.85185185185151)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-52.296296296296191, -563.55555555555532)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-49.037037037036953, -566.51851851851825)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-52.296296296296191, -569.18518518518488)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-51.1111111111112, -571.25925925925901)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-53.777777777777828, -572.14814814814781)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-49.629629629629449, -573.92592592592564)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-47.851851851851848, -573.92592592592564)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-49.037037037036953, -575.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-46.074074074073906, -575.70370370370347)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-44, -576.88888888888857)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-43.407407407407391, -573.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-44.296296296296191, -568.59259259259227)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-41.037037037036953, -569.48148148148118)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-39.259259259259125, -571.85185185185151)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-38.370370370370324, -569.77777777777749)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-35.1111111111112, -568.59259259259227)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-35.407407407407391, -564.44444444444412)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-39.851851851851848, -558.22222222222194)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-43.703703703703582, -553.18518518518488)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-41.333333333333144, -551.11111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-44.296296296296191, -549.03703703703673)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-48.740740740740534, -542.22222222222194)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-48.740740740740534, -546.07407407407379)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-52.296296296296191, -543.11111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-53.185185185185105, -544.59259259259227)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-55.259259259259125, -543.11111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-57.037037037036953, -543.70370370370347)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-58.518518518518476, -541.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-56.44444444444423, -540.74074074074042)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-59.1111111111112, -538.07407407407379)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-58.518518518518476, -534.22222222222194)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-54.962962962962933, -535.11111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-54.962962962962933, -532.74074074074042)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-56.148148148148152, -527.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-58.518518518518476, -525.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-58.518518518518476, -521.77777777777749)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-62.370370370370324, -520.59259259259227)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-63.555555555555316, -516.44444444444412)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-65.333333333333144, -515.5555555555552)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-66.518518518518476, -510.81481481481455)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-69.48148148148141, -509.62962962962933)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-70.074074074073906, -504.88888888888863)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-66.518518518518476, -501.92592592592564)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-64.148148148148152, -502.22222222222194)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-52.592592592592609, -494.22222222222194)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-50.814814814814667, -494.22222222222194)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-50.518518518518476, -490.3703703703701)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-46.370370370370324, -488.88888888888869)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-45.48148148148141, -491.25925925925901)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-42.518518518518476, -491.25925925925901)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-42.518518518518476, -488.88888888888869)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-38.666666666666515, -488.29629629629602)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-36.296296296296191, -491.55555555555526)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-35.407407407407391, -489.48148148148124)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-37.777777777777828, -486.22222222222194)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-40.148148148148152, -484.74074074074048)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-38.074074074073906, -482.3703703703701)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-33.925925925925753, -483.85185185185156)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-35.407407407407391, -485.92592592592564)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-33.333333333333144, -488.59259259259233)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-30.962962962962933, -487.70370370370347)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-30.962962962962933, -483.25925925925901)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-33.629629629629449, -481.18518518518493)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-28.592592592592609, -479.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-22.666666666666515, -476.14814814814787)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-17.629629629629449, -475.55555555555526)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-10.222222222222285, -466.3703703703701)) + Result.extend_point (create {EV_COORDINATE}.make_precise (4, -461.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (12.444444444444684, -457.77777777777749)) + Result.extend_point (create {EV_COORDINATE}.make_precise (16.8888888888888, -449.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (21.777777777777715, -447.11111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (25.333333333333485, -443.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (32.8888888888888, -442.222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (33.333333333333485, -438.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (44.444444444444684, -440.44444444444423)) + Result.extend_point (create {EV_COORDINATE}.make_precise (50.666666666666856, -444.88888888888869)) + Result.extend_point (create {EV_COORDINATE}.make_precise (53.777777777777942, -446.222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (55.111111111111313, -456.88888888888869)) + Result.extend_point (create {EV_COORDINATE}.make_precise (62.222222222222172, -466.222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (62.666666666666856, -470.222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (66.666666666666856, -479.11111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (65.333333333333485, -482.222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (69.333333333333485, -498.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (72.444444444444684, -499.55555555555526)) + Result.extend_point (create {EV_COORDINATE}.make_precise (71.555555555555543, -504.44444444444417)) + Result.extend_point (create {EV_COORDINATE}.make_precise (69.333333333333485, -506.22222222222194)) + Result.extend_point (create {EV_COORDINATE}.make_precise (69.333333333333485, -517.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (70.666666666666856, -522.22222222222194)) + Result.extend_point (create {EV_COORDINATE}.make_precise (69.777777777777942, -525.77777777777749)) + Result.extend_point (create {EV_COORDINATE}.make_precise (67.111111111111313, -526.22222222222194)) + Result.extend_point (create {EV_COORDINATE}.make_precise (68.8888888888888, -535.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (71.555555555555543, -541.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (74.666666666666856, -540.44444444444412)) + Result.extend_point (create {EV_COORDINATE}.make_precise (69.777777777777942, -550.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (74.222222222222172, -553.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (75.999999999999886, -556.44444444444412)) + Result.extend_point (create {EV_COORDINATE}.make_precise (78.666666666666856, -551.5555555555552)) + Result.extend_point (create {EV_COORDINATE}.make_precise (75.555555555555543, -559.11111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (79.111111111111313, -559.55555555555532)) + Result.extend_point (create {EV_COORDINATE}.make_precise (70.666666666666856, -559.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (75.999999999999886, -573.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (85.333333333333485, -573.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (78.666666666666856, -574.22222222222194)) + Result.extend_point (create {EV_COORDINATE}.make_precise (82.666666666666856, -587.11111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (83.111111111111313, -592.44444444444412)) + Result.extend_point (create {EV_COORDINATE}.make_precise (83.555555555555543, -598.22222222222194)) + Result.extend_point (create {EV_COORDINATE}.make_precise (86.666666666666856, -598.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (88.8888888888888, -603.5555555555552)) + Result.extend_point (create {EV_COORDINATE}.make_precise (95.111111111111313, -603.5555555555552)) + Result.extend_point (create {EV_COORDINATE}.make_precise (92.444444444444684, -598.22222222222194)) + Result.extend_point (create {EV_COORDINATE}.make_precise (95.555555555555543, -599.11111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (98.222222222222172, -594.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (97.333333333333485, -590.22222222222194)) + Result.extend_point (create {EV_COORDINATE}.make_precise (99.999999999999886, -589.77777777777749)) + Result.extend_point (create {EV_COORDINATE}.make_precise (97.777777777777942, -582.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (99.555555555555543, -577.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (101.77777777777794, -575.11111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (104.8888888888888, -576.44444444444412)) + Result.extend_point (create {EV_COORDINATE}.make_precise (108.8888888888888, -574.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (103.99999999999989, -569.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (104.8888888888888, -564.44444444444412)) + Result.extend_point (create {EV_COORDINATE}.make_precise (108.44444444444468, -565.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (108.44444444444468, -560.88888888888857)) + Result.extend_point (create {EV_COORDINATE}.make_precise (112.44444444444468, -560.44444444444412)) + Result.extend_point (create {EV_COORDINATE}.make_precise (109.77777777777794, -551.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (115.11111111111131, -554.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (114.22222222222217, -543.11111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (116.44444444444468, -541.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (115.11111111111131, -532.44444444444412)) + Result.extend_point (create {EV_COORDINATE}.make_precise (118.22222222222217, -527.5555555555552)) + Result.extend_point (create {EV_COORDINATE}.make_precise (119.55555555555554, -521.77777777777749)) + Result.extend_point (create {EV_COORDINATE}.make_precise (121.77777777777794, -515.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (126.22222222222217, -515.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (129.33333333333348, -519.11111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (129.77777777777794, -521.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (133.77777777777794, -519.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (137.33333333333348, -523.5555555555552)) + Result.extend_point (create {EV_COORDINATE}.make_precise (138.66666666666686, -521.77777777777749)) + Result.extend_point (create {EV_COORDINATE}.make_precise (139.99999999999989, -514.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (147.55555555555554, -511.99999999999972)) + Result.extend_point (create {EV_COORDINATE}.make_precise (147.55555555555554, -507.99999999999972)) + Result.extend_point (create {EV_COORDINATE}.make_precise (153.77777777777794, -508.88888888888863)) + Result.extend_point (create {EV_COORDINATE}.make_precise (153.77777777777794, -504.44444444444417)) + Result.extend_point (create {EV_COORDINATE}.make_precise (157.77777777777794, -503.99999999999972)) + Result.extend_point (create {EV_COORDINATE}.make_precise (153.77777777777794, -500.88888888888863)) + Result.extend_point (create {EV_COORDINATE}.make_precise (154.66666666666686, -496.88888888888869)) + Result.extend_point (create {EV_COORDINATE}.make_precise (156.8888888888888, -497.77777777777749)) + Result.extend_point (create {EV_COORDINATE}.make_precise (153.33333333333348, -492.44444444444417)) + Result.extend_point (create {EV_COORDINATE}.make_precise (155.99999999999989, -489.77777777777749)) + Result.extend_point (create {EV_COORDINATE}.make_precise (157.33333333333348, -479.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (159.55555555555554, -478.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (159.99999999999989, -471.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (158.66666666666686, -468.88888888888869)) + Result.extend_point (create {EV_COORDINATE}.make_precise (162.22222222222217, -463.11111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (166.66666666666686, -459.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (170.66666666666686, -458.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (168.8888888888888, -454.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (172.44444444444468, -447.55555555555526)) + Result.extend_point (create {EV_COORDINATE}.make_precise (174.22222222222217, -442.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (174.22222222222217, -433.77777777777749)) + Result.extend_point (create {EV_COORDINATE}.make_precise (171.99999999999989, -428.88888888888869)) + Result.extend_point (create {EV_COORDINATE}.make_precise (172.44444444444468, -424.88888888888869)) + Result.extend_point (create {EV_COORDINATE}.make_precise (178.22222222222217, -426.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (179.55555555555554, -418.222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (177.77777777777794, -412.88888888888869)) + Result.extend_point (create {EV_COORDINATE}.make_precise (179.99999999999989, -408.44444444444423)) + Result.extend_point (create {EV_COORDINATE}.make_precise (187.11111111111131, -403.55555555555532)) + Result.extend_point (create {EV_COORDINATE}.make_precise (190.22222222222217, -406.222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (189.33333333333348, -402.222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (191.99999999999989, -400.44444444444423)) + Result.extend_point (create {EV_COORDINATE}.make_precise (194.22222222222217, -403.99999999999972)) + Result.extend_point (create {EV_COORDINATE}.make_precise (195.11111111111131, -398.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (202.66666666666686, -397.77777777777749)) + Result.extend_point (create {EV_COORDINATE}.make_precise (202.22222222222217, -400.44444444444423)) + Result.extend_point (create {EV_COORDINATE}.make_precise (207.55555555555554, -391.99999999999972)) + Result.extend_point (create {EV_COORDINATE}.make_precise (204.44444444444468, -391.55555555555532)) + Result.extend_point (create {EV_COORDINATE}.make_precise (211.11111111111131, -388.44444444444423)) + Result.extend_point (create {EV_COORDINATE}.make_precise (211.55555555555554, -391.55555555555532)) + Result.extend_point (create {EV_COORDINATE}.make_precise (214.22222222222217, -386.222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (222.66666666666686, -384.44444444444429)) + Result.extend_point (create {EV_COORDINATE}.make_precise (221.77777777777794, -381.77777777777749)) + Result.extend_point (create {EV_COORDINATE}.make_precise (226.66666666666686, -379.99999999999972)) + Result.extend_point (create {EV_COORDINATE}.make_precise (227.55555555555554, -382.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (232.44444444444468, -378.22222222222194)) + Result.extend_point (create {EV_COORDINATE}.make_precise (237.77777777777794, -371.11111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (235.11111111111131, -373.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (232.44444444444468, -371.55555555555532)) + Result.extend_point (create {EV_COORDINATE}.make_precise (232.8888888888888, -365.77777777777749)) + Result.extend_point (create {EV_COORDINATE}.make_precise (237.33333333333348, -362.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (241.77777777777794, -359.55555555555532)) + Result.extend_point (create {EV_COORDINATE}.make_precise (245.33333333333348, -357.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (244.8888888888888, -351.55555555555537)) + Result.extend_point (create {EV_COORDINATE}.make_precise (245.33333333333348, -347.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (250.22222222222217, -346.22222222222194)) + Result.extend_point (create {EV_COORDINATE}.make_precise (247.99999999999989, -338.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (252.8888888888888, -327.99999999999972)) + Result.extend_point (create {EV_COORDINATE}.make_precise (256.44444444444468, -325.77777777777749)) + Result.extend_point (create {EV_COORDINATE}.make_precise (253.33333333333348, -321.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (258.22222222222229, -324.44444444444429)) + Result.extend_point (create {EV_COORDINATE}.make_precise (263.11111111111131, -318.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (260.88888888888903, -324.44444444444429)) + Result.extend_point (create {EV_COORDINATE}.make_precise (259.11111111111131, -331.55555555555537)) + Result.extend_point (create {EV_COORDINATE}.make_precise (262.66666666666686, -331.55555555555537)) + Result.extend_point (create {EV_COORDINATE}.make_precise (266.66666666666686, -324.88888888888863)) + Result.extend_point (create {EV_COORDINATE}.make_precise (274.66666666666686, -321.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (274.66666666666686, -325.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (271.99999999999966, -327.55555555555537)) + Result.extend_point (create {EV_COORDINATE}.make_precise (274.22222222222229, -329.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (275.99999999999966, -327.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (279.55555555555566, -323.99999999999972)) + Result.extend_point (create {EV_COORDINATE}.make_precise (281.33333333333348, -318.22222222222194)) + Result.extend_point (create {EV_COORDINATE}.make_precise (279.99999999999966, -305.77777777777749)) + Result.extend_point (create {EV_COORDINATE}.make_precise (282.66666666666686, -296.44444444444429)) + Result.extend_point (create {EV_COORDINATE}.make_precise (284.88888888888903, -298.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (290.22222222222229, -298.22222222222194)) + Result.extend_point (create {EV_COORDINATE}.make_precise (292.88888888888903, -291.55555555555537)) + Result.extend_point (create {EV_COORDINATE}.make_precise (293.33333333333348, -286.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (299.55555555555566, -284.44444444444429)) + Result.extend_point (create {EV_COORDINATE}.make_precise (301.33333333333348, -285.77777777777749)) + Result.extend_point (create {EV_COORDINATE}.make_precise (305.77777777777794, -281.77777777777749)) + Result.extend_point (create {EV_COORDINATE}.make_precise (311.11111111111131, -268.44444444444429)) + Result.extend_point (create {EV_COORDINATE}.make_precise (317.77777777777794, -265.7777777777776)) + Result.extend_point (create {EV_COORDINATE}.make_precise (322.66666666666686, -255.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (329.33333333333348, -253.7777777777776)) + Result.extend_point (create {EV_COORDINATE}.make_precise (333.77777777777794, -259.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (335.11111111111131, -262.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (331.99999999999966, -265.7777777777776)) + Result.extend_point (create {EV_COORDINATE}.make_precise (337.33333333333348, -268.44444444444429)) + Result.extend_point (create {EV_COORDINATE}.make_precise (335.99999999999966, -264.44444444444429)) + Result.extend_point (create {EV_COORDINATE}.make_precise (338.66666666666686, -260.44444444444429)) + Result.extend_point (create {EV_COORDINATE}.make_precise (333.33333333333348, -245.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (332.44444444444468, -237.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (335.99999999999966, -237.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (331.11111111111131, -227.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (334.22222222222229, -227.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (333.33333333333348, -210.22222222222194)) + Result.extend_point (create {EV_COORDINATE}.make_precise (335.55555555555566, -207.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (332.44444444444468, -207.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (332.88888888888903, -199.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (338.22222222222229, -196.44444444444429)) + Result.extend_point (create {EV_COORDINATE}.make_precise (337.33333333333348, -192.88888888888863)) + Result.extend_point (create {EV_COORDINATE}.make_precise (340.44444444444468, -199.99999999999972)) + Result.extend_point (create {EV_COORDINATE}.make_precise (338.22222222222229, -208.44444444444429)) + Result.extend_point (create {EV_COORDINATE}.make_precise (340.88888888888903, -208.88888888888863)) + Result.extend_point (create {EV_COORDINATE}.make_precise (340.44444444444468, -202.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (342.66666666666686, -197.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (339.99999999999966, -188.44444444444429)) + Result.extend_point (create {EV_COORDINATE}.make_precise (340.44444444444468, -182.22222222222194)) + Result.extend_point (create {EV_COORDINATE}.make_precise (343.55555555555566, -178.22222222222194)) + Result.extend_point (create {EV_COORDINATE}.make_precise (343.11111111111131, -171.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (344.88888888888903, -166.22222222222194)) + Result.extend_point (create {EV_COORDINATE}.make_precise (344.44444444444468, -159.99999999999972)) + Result.extend_point (create {EV_COORDINATE}.make_precise (340.88888888888903, -157.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (341.77777777777794, -152.88888888888863)) + Result.extend_point (create {EV_COORDINATE}.make_precise (338.22222222222229, -150.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (336.88888888888903, -135.11111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (331.55555555555566, -118.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (330.22222222222229, -111.99999999999972)) + Result.extend_point (create {EV_COORDINATE}.make_precise (329.77777777777794, -108.44444444444423)) + Result.extend_point (create {EV_COORDINATE}.make_precise (332.44444444444468, -108.88888888888863)) + Result.extend_point (create {EV_COORDINATE}.make_precise (331.11111111111131, -101.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (328.88888888888903, -98.222222222221944)) + Result.extend_point (create {EV_COORDINATE}.make_precise (329.33333333333348, -92)) + Result.extend_point (create {EV_COORDINATE}.make_precise (325.33333333333348, -85.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (325.33333333333348, -81.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (321.33333333333348, -80)) + Result.extend_point (create {EV_COORDINATE}.make_precise (320.44444444444468, -76)) + Result.extend_point (create {EV_COORDINATE}.make_precise (320.44444444444468, -67.111111111110858)) + Result.extend_point (create {EV_COORDINATE}.make_precise (315.55555555555566, -65.777777777777715)) + Result.extend_point (create {EV_COORDINATE}.make_precise (312.44444444444468, -59.111111111110858)) + Result.extend_point (create {EV_COORDINATE}.make_precise (309.77777777777794, -57.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (304.44444444444468, -56)) + Result.extend_point (create {EV_COORDINATE}.make_precise (298.66666666666686, -45.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (291.99999999999966, -37.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (290.66666666666686, -28)) + end + + melville_island_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-183.85185185185173, -592.88888888888857)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-180.29629629629613, -589.92592592592564)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-178.222222222222, -589.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-174.96296296296282, -583.11111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-176.44444444444423, -587.25925925925901)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-172.88888888888869, -589.62962962962933)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-170.81481481481467, -588.44444444444412)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-168.74074074074053, -590.51851851851825)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-166.07407407407391, -589.03703703703673)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-164.88888888888869, -592.29629629629596)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-161.33333333333314, -591.11111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-158.07407407407391, -587.25925925925901)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-159.55555555555532, -584.29629629629596)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-158.96296296296282, -582.22222222222194)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-161.33333333333314, -581.92592592592564)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-163.40740740740722, -578.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-169.03703703703695, -576.29629629629596)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-171.11111111111092, -574.51851851851825)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-177.92592592592575, -577.48148148148118)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-180.29629629629613, -576.59259259259227)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-185.92592592592575, -578.07407407407379)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-191.85185185185173, -576.88888888888857)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-193.33333333333314, -578.3703703703701)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-192.14814814814804, -579.85185185185151)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-192.14814814814804, -581.62962962962933)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-188.29629629629613, -580.74074074074042)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-188.59259259259244, -584.59259259259227)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-190.37037037037027, -585.48148148148118)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-190.07407407407391, -587.25925925925901)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-185.92592592592575, -588.44444444444412)) + end + +invariant + + correct_port: attached target_imp implies port = game.australia + +end diff --git a/jj_vitp/Interface/widgets/port_widgets/ceylon_widget.e b/jj_vitp/Interface/widgets/port_widgets/ceylon_widget.e new file mode 100644 index 0000000..1de107c --- /dev/null +++ b/jj_vitp/Interface/widgets/port_widgets/ceylon_widget.e @@ -0,0 +1,111 @@ +note + description: "[ + The widget representing this port + ]" + author: "Jimmy J. Johnson" + +class + CEYLON_WIDGET + +inherit + +-- RED_PORT_WIDGET +-- undefine +-- paint +-- redefine +-- create_interface_objects, +-- initialize, +-- extend_widgets, +-- position_widgets +-- end + + ISLAND_PORT_WIDGET + redefine + create_interface_objects, + extend_widgets, +-- initialize, + set_fonts_and_colors, + position_widgets, + rotation_amount + end + +create + make + +feature {NONE} -- Initialization + + create_interface_objects + -- Create widgets + do + create not_allowed_text_mt.make_with_text ("(No U.S. Allowed)") + create reinforcements_text_mt.make_with_text ("British Reinforcements%Nexcept the Victorious") + Precursor {ISLAND_PORT_WIDGET} +-- Precursor {RED_PORT_WIDGET} + end + + extend_widgets + -- Put widgets into Current. This cannot be done + -- in `create_interface_object', because cannot call + -- `extend' feature until all objects [in descendants] + -- are also created. + do + Precursor {ISLAND_PORT_WIDGET} +-- Precursor {RED_PORT_WIDGET} + text_group.extend (not_allowed_text_mt) + text_group.extend (reinforcements_text_mt) + end + + set_fonts_and_colors + -- Set the default fonts for any text widgets and set + -- the default colors for any contained widgets. + do + Precursor {ISLAND_PORT_WIDGET} +-- Precursor {RED_PORT_WIDGET} + not_allowed_text_mt.set_font (Subtext_font) + reinforcements_text_mt.set_font (Subtext_font) + end + + position_widgets + -- Move Current and contained widgets to correct + -- location and set their their sizes + do + Precursor {ISLAND_PORT_WIDGET} +-- Precursor {RED_PORT_WIDGET} + center_on (22, 178) +-- center_on (50, 200) + text_group.set_x_y (inner_circle.x + 2, inner_circle.y + 6) + anchor.set_x_y (inner_circle.x + 1, inner_circle.y - 2) + + not_allowed_text_mt.set_x_y (inner_circle.x + 19, inner_circle.y - 10) + reinforcements_text_mt.set_x_y (inner_circle.x + 17, inner_circle.y + 17) + marker.set_x_y (inner_circle.x - 6, inner_circle.y - 6) + +-- text_widget.center_on_dot (dot) +-- translate_widget (name_mt, 0, 6) +-- translate_widget (not_allowed_text, 58, 41) +-- translate_widget (reinforcements_text, 55, 70) +-- marker.center_on_dot (dot) +-- marker.set_x_y (dot.x, dot.y) +-- anchor.center_on_dot (dot) +-- anchor.set_x_y (dot.x, dot.y) +-- translate_widget (marker, -7, -6) +-- translate_widget (anchor, -1, -4) + end + +feature -- Status report + + is_red: BOOLEAN = True + -- Does Current represent a red (i.e. major) port? + +feature {NONE} -- Implementation + + not_allowed_text_mt: EV_MODEL_TEXT + -- Extra text on some Red ports (e.g. "No British Allowed"). + + reinforcements_text_mt: EV_MODEL_TEXT + -- Extra text about reinforcement placement + + rotation_amount: REAL_64 = 150.0 + -- Make the arrow point north-east + +end diff --git a/jj_vitp/Interface/widgets/port_widgets/dutch_harbor_widget.e b/jj_vitp/Interface/widgets/port_widgets/dutch_harbor_widget.e new file mode 100644 index 0000000..72ec97e --- /dev/null +++ b/jj_vitp/Interface/widgets/port_widgets/dutch_harbor_widget.e @@ -0,0 +1,493 @@ +note + description: "[ + The widget representing this port + ]" + author: "Jimmy J. Johnson" + +class + DUTCH_HARBOR_WIDGET + +inherit + +-- GREEN_PORT_WIDGET +-- undefine +-- paint +-- redefine +-- create_interface_objects, +-- initialize, +-- position_widgets, +-- build_land +-- end + + ISLAND_PORT_WIDGET + redefine + create_interface_objects, +-- initialize, + position_widgets, + build_land, + rotation_amount + end + +create + make + +feature {NONE} -- Initialization + + create_interface_objects + -- Initialize attributes + do + unalaska_island := unalaska_island_imp + Precursor {ISLAND_PORT_WIDGET} +-- Precursor {GREEN_PORT_WIDGET} + end + +-- initialize +-- -- Set up the widgets in Current. +-- do +-- Precursor {ISLAND_PORT_WIDGET} +---- Precursor {GREEN_PORT_WIDGET} +-- end + + position_widgets + -- Move Current and contained widgets to correct + -- location and set their their sizes + do + Precursor {ISLAND_PORT_WIDGET} +-- Precursor {GREEN_PORT_WIDGET} + center_on (666, 67) + bring_to_front (land) + translate_widget (land, -4, -7) + scale_widget (land, 0.3) + rotate_widget (land, 13.0) + translate_widget (name_mt, 0, -1) +-- marker.center_on_dot (dot) + marker.set_x_y (dot.x, dot.y) + translate_widget (marker, 0, 7) + end + + build_land + -- Add widgets to Current + do + Precursor {ISLAND_PORT_WIDGET} + land.extend (unalaska_island) + end + +feature -- Status report + + is_red: BOOLEAN = False + -- Does Current represent a red (i.e. major) port? + +feature {NONE} -- Implementation + + unalaska_island: EV_MODEL_POLYGON + +feature {NONE} -- Implementation + + unalaska_island_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (0, 0)) + Result.extend_point (create {EV_COORDINATE}.make_precise (3.5555555555556566, -0.59259259259255259)) + Result.extend_point (create {EV_COORDINATE}.make_precise (4.148148148148266, -2.6666666666666288)) + Result.extend_point (create {EV_COORDINATE}.make_precise (8.5925925925921547, -6.8148148148147811)) + Result.extend_point (create {EV_COORDINATE}.make_precise (11.851851851851734, -7.7037037037036953)) + Result.extend_point (create {EV_COORDINATE}.make_precise (11.555555555555657, -9.185185185185162)) + Result.extend_point (create {EV_COORDINATE}.make_precise (16.296296296296305, -11.851851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (16.888888888889142, -10.666666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (18.962962962963047, -11.259259259259238)) + Result.extend_point (create {EV_COORDINATE}.make_precise (23.407407407407391, -10.370370370370324)) + Result.extend_point (create {EV_COORDINATE}.make_precise (22.518518518518249, -12.740740740740705)) + Result.extend_point (create {EV_COORDINATE}.make_precise (25.185185185184991, -13.333333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (26.370370370370438, -14.518518518518476)) + Result.extend_point (create {EV_COORDINATE}.make_precise (27.259259259258897, -11.851851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (30.518518518518249, -12.740740740740705)) + Result.extend_point (create {EV_COORDINATE}.make_precise (32, -12.148148148148096)) + Result.extend_point (create {EV_COORDINATE}.make_precise (32, -14.222222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (29.92592592592564, -15.111111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (33.481481481481524, -18.370370370370324)) + Result.extend_point (create {EV_COORDINATE}.make_precise (34.666666666666742, -21.03703703703701)) + Result.extend_point (create {EV_COORDINATE}.make_precise (38.518518518518249, -19.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (41.777777777778056, -15.703703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (42.074074074073906, -18.074074074074019)) + Result.extend_point (create {EV_COORDINATE}.make_precise (41.185185185184991, -21.333333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (47.111111111111313, -15.703703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (48.296296296296305, -16.296296296296305)) + Result.extend_point (create {EV_COORDINATE}.make_precise (46.518518518518249, -21.629629629629676)) + Result.extend_point (create {EV_COORDINATE}.make_precise (47.703703703703923, -22.222222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (51.851851851851734, -18.666666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (51.555555555555657, -21.333333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (53.92592592592564, -22.222222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (50.962962962963047, -23.703703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (50.370370370370438, -26.370370370370324)) + Result.extend_point (create {EV_COORDINATE}.make_precise (58.962962962963047, -24)) + Result.extend_point (create {EV_COORDINATE}.make_precise (59.259259259258897, -25.777777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (61.03703703703718, -25.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (61.629629629629562, -23.407407407407391)) + Result.extend_point (create {EV_COORDINATE}.make_precise (64, -26.074074074074019)) + Result.extend_point (create {EV_COORDINATE}.make_precise (61.03703703703718, -27.851851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (62.518518518518249, -28.148148148148096)) + Result.extend_point (create {EV_COORDINATE}.make_precise (62.518518518518249, -30.814814814814781)) + Result.extend_point (create {EV_COORDINATE}.make_precise (60.444444444444798, -31.407407407407391)) + Result.extend_point (create {EV_COORDINATE}.make_precise (60.444444444444798, -33.777777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (70.222222222222399, -30.814814814814781)) + Result.extend_point (create {EV_COORDINATE}.make_precise (72.592592592592155, -32.592592592592553)) + Result.extend_point (create {EV_COORDINATE}.make_precise (75.851851851851734, -33.185185185185162)) + Result.extend_point (create {EV_COORDINATE}.make_precise (77.333333333333485, -34.370370370370324)) + Result.extend_point (create {EV_COORDINATE}.make_precise (79.407407407407391, -33.777777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (78.814814814814781, -35.851851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (75.851851851851734, -34.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (73.481481481481524, -34.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (69.92592592592564, -32.888888888888914)) + Result.extend_point (create {EV_COORDINATE}.make_precise (68.740740740740648, -34.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (66.370370370370438, -35.851851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (65.185185185184991, -37.925925925925867)) + Result.extend_point (create {EV_COORDINATE}.make_precise (66.074074074073906, -40)) + Result.extend_point (create {EV_COORDINATE}.make_precise (64.592592592592155, -40)) + Result.extend_point (create {EV_COORDINATE}.make_precise (64, -43.259259259259238)) + Result.extend_point (create {EV_COORDINATE}.make_precise (62.518518518518249, -45.03703703703701)) + Result.extend_point (create {EV_COORDINATE}.make_precise (63.407407407407391, -47.111111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (66.666666666666742, -48.888888888888914)) + Result.extend_point (create {EV_COORDINATE}.make_precise (68.740740740740648, -49.777777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (70.222222222222399, -47.703703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (72, -48)) + Result.extend_point (create {EV_COORDINATE}.make_precise (73.481481481481524, -44.444444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (74.666666666666742, -46.518518518518476)) + Result.extend_point (create {EV_COORDINATE}.make_precise (73.185185185184991, -49.777777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (76.148148148148266, -47.703703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (77.333333333333485, -49.185185185185162)) + Result.extend_point (create {EV_COORDINATE}.make_precise (76.444444444444798, -50.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (74.962962962963047, -53.03703703703701)) + Result.extend_point (create {EV_COORDINATE}.make_precise (72.888888888889142, -53.03703703703701)) + Result.extend_point (create {EV_COORDINATE}.make_precise (71.407407407407391, -56.888888888888914)) + Result.extend_point (create {EV_COORDINATE}.make_precise (73.185185185184991, -60.444444444444429)) + Result.extend_point (create {EV_COORDINATE}.make_precise (76.444444444444798, -62.222222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (83.259259259258897, -61.925925925925867)) + Result.extend_point (create {EV_COORDINATE}.make_precise (86.814814814814781, -62.518518518518476)) + Result.extend_point (create {EV_COORDINATE}.make_precise (87.407407407407391, -59.851851851851819)) + Result.extend_point (create {EV_COORDINATE}.make_precise (90.666666666666742, -56.296296296296305)) + Result.extend_point (create {EV_COORDINATE}.make_precise (90.370370370370438, -52.740740740740705)) + Result.extend_point (create {EV_COORDINATE}.make_precise (89.777777777778056, -49.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (92.148148148148266, -51.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (93.03703703703718, -53.333333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (94.518518518518249, -50.666666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (97.481481481481524, -49.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (96.296296296296305, -53.333333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (94.814814814814781, -56.888888888888914)) + Result.extend_point (create {EV_COORDINATE}.make_precise (93.333333333333485, -57.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (93.629629629629562, -59.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (92.740740740740648, -60.740740740740705)) + Result.extend_point (create {EV_COORDINATE}.make_precise (94.518518518518249, -61.333333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (98.370370370370438, -57.777777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (101.03703703703718, -60.444444444444429)) + Result.extend_point (create {EV_COORDINATE}.make_precise (98.962962962963047, -60.148148148148096)) + Result.extend_point (create {EV_COORDINATE}.make_precise (97.481481481481524, -60.740740740740705)) + Result.extend_point (create {EV_COORDINATE}.make_precise (96.592592592592155, -62.222222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (99.851851851851734, -62.518518518518476)) + Result.extend_point (create {EV_COORDINATE}.make_precise (104, -62.222222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (105.77777777777806, -63.111111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (101.92592592592564, -63.999999999999972)) + Result.extend_point (create {EV_COORDINATE}.make_precise (97.777777777778056, -65.185185185185162)) + Result.extend_point (create {EV_COORDINATE}.make_precise (94.222222222222399, -65.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (89.481481481481524, -65.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (90.370370370370438, -67.25925925925921)) + Result.extend_point (create {EV_COORDINATE}.make_precise (88.888888888889142, -68.740740740740705)) + Result.extend_point (create {EV_COORDINATE}.make_precise (84.740740740740648, -68.444444444444429)) + Result.extend_point (create {EV_COORDINATE}.make_precise (81.185185185184991, -71.703703703703667)) + Result.extend_point (create {EV_COORDINATE}.make_precise (78.518518518518249, -69.03703703703701)) + Result.extend_point (create {EV_COORDINATE}.make_precise (74.666666666666742, -68.444444444444429)) + Result.extend_point (create {EV_COORDINATE}.make_precise (74.370370370370438, -70.814814814814753)) + Result.extend_point (create {EV_COORDINATE}.make_precise (75.851851851851734, -73.185185185185162)) + Result.extend_point (create {EV_COORDINATE}.make_precise (74.370370370370438, -73.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (73.481481481481524, -72.296296296296305)) + Result.extend_point (create {EV_COORDINATE}.make_precise (71.111111111111313, -73.185185185185162)) + Result.extend_point (create {EV_COORDINATE}.make_precise (69.333333333333485, -74.370370370370324)) + Result.extend_point (create {EV_COORDINATE}.make_precise (72.592592592592155, -74.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (72.592592592592155, -76.444444444444429)) + Result.extend_point (create {EV_COORDINATE}.make_precise (70.814814814814781, -76.444444444444429)) + Result.extend_point (create {EV_COORDINATE}.make_precise (69.333333333333485, -78.814814814814753)) + Result.extend_point (create {EV_COORDINATE}.make_precise (66.666666666666742, -79.407407407407362)) + Result.extend_point (create {EV_COORDINATE}.make_precise (64, -79.407407407407362)) + Result.extend_point (create {EV_COORDINATE}.make_precise (63.111111111111313, -85.03703703703701)) + Result.extend_point (create {EV_COORDINATE}.make_precise (64.592592592592155, -85.925925925925867)) + Result.extend_point (create {EV_COORDINATE}.make_precise (66.370370370370438, -85.333333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (68.444444444444798, -87.999999999999972)) + Result.extend_point (create {EV_COORDINATE}.make_precise (69.03703703703718, -90.666666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (69.333333333333485, -93.03703703703701)) + Result.extend_point (create {EV_COORDINATE}.make_precise (71.407407407407391, -95.407407407407362)) + Result.extend_point (create {EV_COORDINATE}.make_precise (73.185185185184991, -95.407407407407362)) + Result.extend_point (create {EV_COORDINATE}.make_precise (75.555555555555657, -97.185185185185162)) + Result.extend_point (create {EV_COORDINATE}.make_precise (74.962962962963047, -98.666666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (77.03703703703718, -100.1481481481481)) + Result.extend_point (create {EV_COORDINATE}.make_precise (79.407407407407391, -99.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (81.777777777778056, -101.03703703703701)) + Result.extend_point (create {EV_COORDINATE}.make_precise (82.666666666666742, -102.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (84.444444444444798, -101.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (85.03703703703718, -103.99999999999997)) + Result.extend_point (create {EV_COORDINATE}.make_precise (88.296296296296305, -104.29629629629628)) + Result.extend_point (create {EV_COORDINATE}.make_precise (90.666666666666742, -102.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (93.03703703703718, -103.11111111111106)) + Result.extend_point (create {EV_COORDINATE}.make_precise (93.333333333333485, -104.59259259259255)) + Result.extend_point (create {EV_COORDINATE}.make_precise (96.592592592592155, -105.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (99.259259259258897, -107.25925925925921)) + Result.extend_point (create {EV_COORDINATE}.make_precise (100.74074074074065, -108.4444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (101.92592592592564, -106.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (101.62962962962956, -103.70370370370367)) + Result.extend_point (create {EV_COORDINATE}.make_precise (102.51851851851825, -101.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (104, -103.11111111111106)) + Result.extend_point (create {EV_COORDINATE}.make_precise (104.59259259259215, -106.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (107.85185185185173, -109.03703703703701)) + Result.extend_point (create {EV_COORDINATE}.make_precise (111.40740740740739, -107.25925925925921)) + Result.extend_point (create {EV_COORDINATE}.make_precise (113.77777777777806, -104.29629629629628)) + Result.extend_point (create {EV_COORDINATE}.make_precise (114.96296296296305, -99.25925925925921)) + Result.extend_point (create {EV_COORDINATE}.make_precise (111.70370370370392, -98.962962962962933)) + Result.extend_point (create {EV_COORDINATE}.make_precise (111.70370370370392, -96.888888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (109.03703703703718, -94.518518518518476)) + Result.extend_point (create {EV_COORDINATE}.make_precise (110.81481481481478, -91.851851851851819)) + Result.extend_point (create {EV_COORDINATE}.make_precise (112.2962962962963, -90.074074074074019)) + Result.extend_point (create {EV_COORDINATE}.make_precise (110.51851851851825, -87.999999999999972)) + Result.extend_point (create {EV_COORDINATE}.make_precise (112.2962962962963, -86.518518518518476)) + Result.extend_point (create {EV_COORDINATE}.make_precise (114.66666666666674, -87.703703703703667)) + Result.extend_point (create {EV_COORDINATE}.make_precise (114.96296296296305, -83.851851851851819)) + Result.extend_point (create {EV_COORDINATE}.make_precise (112.2962962962963, -80.296296296296305)) + Result.extend_point (create {EV_COORDINATE}.make_precise (114.66666666666674, -80.296296296296305)) + Result.extend_point (create {EV_COORDINATE}.make_precise (116.4444444444448, -82.666666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (118.51851851851825, -85.333333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (117.62962962962956, -86.518518518518476)) + Result.extend_point (create {EV_COORDINATE}.make_precise (118.81481481481478, -88.592592592592553)) + Result.extend_point (create {EV_COORDINATE}.make_precise (118.81481481481478, -91.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (122.66666666666674, -93.629629629629619)) + Result.extend_point (create {EV_COORDINATE}.make_precise (120.88888888888914, -89.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (120.59259259259215, -86.814814814814753)) + Result.extend_point (create {EV_COORDINATE}.make_precise (122.96296296296305, -88.592592592592553)) + Result.extend_point (create {EV_COORDINATE}.make_precise (123.55555555555566, -90.370370370370324)) + Result.extend_point (create {EV_COORDINATE}.make_precise (125.92592592592564, -91.25925925925921)) + Result.extend_point (create {EV_COORDINATE}.make_precise (128, -91.25925925925921)) + Result.extend_point (create {EV_COORDINATE}.make_precise (128.88888888888914, -93.925925925925867)) + Result.extend_point (create {EV_COORDINATE}.make_precise (128.88888888888914, -98.370370370370324)) + Result.extend_point (create {EV_COORDINATE}.make_precise (130.96296296296305, -97.777777777777715)) + Result.extend_point (create {EV_COORDINATE}.make_precise (131.2592592592589, -101.03703703703701)) + Result.extend_point (create {EV_COORDINATE}.make_precise (131.85185185185173, -103.70370370370367)) + Result.extend_point (create {EV_COORDINATE}.make_precise (134.2222222222224, -105.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (134.51851851851825, -106.96296296296293)) + Result.extend_point (create {EV_COORDINATE}.make_precise (136.2962962962963, -104.29629629629628)) + Result.extend_point (create {EV_COORDINATE}.make_precise (134.2222222222224, -100.7407407407407)) + Result.extend_point (create {EV_COORDINATE}.make_precise (134.51851851851825, -97.777777777777715)) + Result.extend_point (create {EV_COORDINATE}.make_precise (138.37037037037044, -98.666666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (139.55555555555566, -99.851851851851819)) + Result.extend_point (create {EV_COORDINATE}.make_precise (141.62962962962956, -100.1481481481481)) + Result.extend_point (create {EV_COORDINATE}.make_precise (142.51851851851825, -103.11111111111106)) + Result.extend_point (create {EV_COORDINATE}.make_precise (144.2962962962963, -103.40740740740736)) + Result.extend_point (create {EV_COORDINATE}.make_precise (144.88888888888914, -99.25925925925921)) + Result.extend_point (create {EV_COORDINATE}.make_precise (146.07407407407391, -97.777777777777715)) + Result.extend_point (create {EV_COORDINATE}.make_precise (145.48148148148152, -95.111111111111057)) + Result.extend_point (create {EV_COORDINATE}.make_precise (142.81481481481478, -93.629629629629619)) + Result.extend_point (create {EV_COORDINATE}.make_precise (143.70370370370392, -92.740740740740705)) + Result.extend_point (create {EV_COORDINATE}.make_precise (146.07407407407391, -93.629629629629619)) + Result.extend_point (create {EV_COORDINATE}.make_precise (147.55555555555566, -96.592592592592553)) + Result.extend_point (create {EV_COORDINATE}.make_precise (149.03703703703718, -95.407407407407362)) + Result.extend_point (create {EV_COORDINATE}.make_precise (149.33333333333348, -91.851851851851819)) + Result.extend_point (create {EV_COORDINATE}.make_precise (146.37037037037044, -91.25925925925921)) + Result.extend_point (create {EV_COORDINATE}.make_precise (147.55555555555566, -88.592592592592553)) + Result.extend_point (create {EV_COORDINATE}.make_precise (142.51851851851825, -86.518518518518476)) + Result.extend_point (create {EV_COORDINATE}.make_precise (139.85185185185173, -86.222222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (137.18518518518499, -88.592592592592553)) + Result.extend_point (create {EV_COORDINATE}.make_precise (136, -84.148148148148096)) + Result.extend_point (create {EV_COORDINATE}.make_precise (133.92592592592564, -82.666666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (133.92592592592564, -80.296296296296305)) + Result.extend_point (create {EV_COORDINATE}.make_precise (129.77777777777806, -79.703703703703667)) + Result.extend_point (create {EV_COORDINATE}.make_precise (130.96296296296305, -76.444444444444429)) + Result.extend_point (create {EV_COORDINATE}.make_precise (128.88888888888914, -75.851851851851819)) + Result.extend_point (create {EV_COORDINATE}.make_precise (126.51851851851825, -75.851851851851819)) + Result.extend_point (create {EV_COORDINATE}.make_precise (127.40740740740739, -73.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (121.48148148148152, -75.25925925925921)) + Result.extend_point (create {EV_COORDINATE}.make_precise (121.18518518518499, -73.777777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (118.51851851851825, -73.777777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (122.66666666666674, -71.999999999999972)) + Result.extend_point (create {EV_COORDINATE}.make_precise (124.14814814814827, -70.814814814814753)) + Result.extend_point (create {EV_COORDINATE}.make_precise (119.70370370370392, -68.740740740740705)) + Result.extend_point (create {EV_COORDINATE}.make_precise (116.74074074074065, -68.148148148148096)) + Result.extend_point (create {EV_COORDINATE}.make_precise (113.77777777777806, -66.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (115.55555555555566, -65.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (117.62962962962956, -65.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (117.92592592592564, -63.703703703703667)) + Result.extend_point (create {EV_COORDINATE}.make_precise (114.66666666666674, -61.925925925925867)) + Result.extend_point (create {EV_COORDINATE}.make_precise (114.07407407407391, -60.740740740740705)) + Result.extend_point (create {EV_COORDINATE}.make_precise (117.03703703703718, -60.740740740740705)) + Result.extend_point (create {EV_COORDINATE}.make_precise (118.81481481481478, -62.222222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (118.81481481481478, -57.777777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (120.59259259259215, -60.148148148148096)) + Result.extend_point (create {EV_COORDINATE}.make_precise (121.48148148148152, -63.111111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (122.37037037037044, -64.592592592592553)) + Result.extend_point (create {EV_COORDINATE}.make_precise (124.74074074074065, -62.518518518518476)) + Result.extend_point (create {EV_COORDINATE}.make_precise (124.14814814814827, -60.148148148148096)) + Result.extend_point (create {EV_COORDINATE}.make_precise (125.62962962962956, -61.333333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (125.92592592592564, -64.888888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (126.2222222222224, -66.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (130.96296296296305, -69.629629629629648)) + Result.extend_point (create {EV_COORDINATE}.make_precise (132.14814814814827, -67.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (131.85185185185173, -65.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (133.92592592592564, -65.777777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (134.81481481481478, -63.999999999999972)) + Result.extend_point (create {EV_COORDINATE}.make_precise (134.81481481481478, -67.25925925925921)) + Result.extend_point (create {EV_COORDINATE}.make_precise (135.40740740740739, -71.111111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (136.59259259259215, -72.888888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (139.2592592592589, -71.999999999999972)) + Result.extend_point (create {EV_COORDINATE}.make_precise (140.14814814814827, -68.740740740740705)) + Result.extend_point (create {EV_COORDINATE}.make_precise (139.2592592592589, -66.074074074074019)) + Result.extend_point (create {EV_COORDINATE}.make_precise (141.92592592592564, -65.185185185185162)) + Result.extend_point (create {EV_COORDINATE}.make_precise (142.2222222222224, -66.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (141.62962962962956, -69.925925925925867)) + Result.extend_point (create {EV_COORDINATE}.make_precise (141.03703703703718, -75.25925925925921)) + Result.extend_point (create {EV_COORDINATE}.make_precise (142.81481481481478, -72.888888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (144.2962962962963, -74.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (146.66666666666674, -77.333333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (146.96296296296305, -72.888888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (149.03703703703718, -73.777777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (149.33333333333348, -79.407407407407362)) + Result.extend_point (create {EV_COORDINATE}.make_precise (151.11111111111131, -81.185185185185162)) + Result.extend_point (create {EV_COORDINATE}.make_precise (152.59259259259215, -79.999999999999972)) + Result.extend_point (create {EV_COORDINATE}.make_precise (152.88888888888914, -82.074074074074019)) + Result.extend_point (create {EV_COORDINATE}.make_precise (155.2592592592589, -82.074074074074019)) + Result.extend_point (create {EV_COORDINATE}.make_precise (157.62962962962956, -83.851851851851819)) + Result.extend_point (create {EV_COORDINATE}.make_precise (160, -82.666666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (156.4444444444448, -78.518518518518476)) + Result.extend_point (create {EV_COORDINATE}.make_precise (155.55555555555566, -76.740740740740705)) + Result.extend_point (create {EV_COORDINATE}.make_precise (158.2222222222224, -75.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (156.4444444444448, -73.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (157.62962962962956, -71.111111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (151.70370370370392, -71.407407407407362)) + Result.extend_point (create {EV_COORDINATE}.make_precise (153.48148148148152, -66.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (152.2962962962963, -65.777777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (148.4444444444448, -65.185185185185162)) + Result.extend_point (create {EV_COORDINATE}.make_precise (149.92592592592564, -62.518518518518476)) + Result.extend_point (create {EV_COORDINATE}.make_precise (146.96296296296305, -62.222222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (145.18518518518499, -64.888888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (143.40740740740739, -64.296296296296305)) + Result.extend_point (create {EV_COORDINATE}.make_precise (144.88888888888914, -61.333333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (142.81481481481478, -59.851851851851819)) + Result.extend_point (create {EV_COORDINATE}.make_precise (144, -57.777777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (141.33333333333348, -57.777777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (141.03703703703718, -56.296296296296305)) + Result.extend_point (create {EV_COORDINATE}.make_precise (137.77777777777806, -58.074074074074019)) + Result.extend_point (create {EV_COORDINATE}.make_precise (136.88888888888914, -55.407407407407391)) + Result.extend_point (create {EV_COORDINATE}.make_precise (133.92592592592564, -58.370370370370324)) + Result.extend_point (create {EV_COORDINATE}.make_precise (133.62962962962956, -56.296296296296305)) + Result.extend_point (create {EV_COORDINATE}.make_precise (130.96296296296305, -56.888888888888914)) + Result.extend_point (create {EV_COORDINATE}.make_precise (132.4444444444448, -53.03703703703701)) + Result.extend_point (create {EV_COORDINATE}.make_precise (130.37037037037044, -53.629629629629676)) + Result.extend_point (create {EV_COORDINATE}.make_precise (127.40740740740739, -50.370370370370324)) + Result.extend_point (create {EV_COORDINATE}.make_precise (122.96296296296305, -52.740740740740705)) + Result.extend_point (create {EV_COORDINATE}.make_precise (123.2592592592589, -49.777777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (120, -53.03703703703701)) + Result.extend_point (create {EV_COORDINATE}.make_precise (119.70370370370392, -49.185185185185162)) + Result.extend_point (create {EV_COORDINATE}.make_precise (116.4444444444448, -48.888888888888914)) + Result.extend_point (create {EV_COORDINATE}.make_precise (120.2962962962963, -46.814814814814781)) + Result.extend_point (create {EV_COORDINATE}.make_precise (122.37037037037044, -42.074074074074019)) + Result.extend_point (create {EV_COORDINATE}.make_precise (120.2962962962963, -44.444444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (117.62962962962956, -45.629629629629676)) + Result.extend_point (create {EV_COORDINATE}.make_precise (116.74074074074065, -42.370370370370324)) + Result.extend_point (create {EV_COORDINATE}.make_precise (117.33333333333348, -39.703703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (116.4444444444448, -38.222222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (114.37037037037044, -39.703703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (115.85185185185173, -34.074074074074019)) + Result.extend_point (create {EV_COORDINATE}.make_precise (113.48148148148152, -36.444444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (112, -37.925925925925867)) + Result.extend_point (create {EV_COORDINATE}.make_precise (111.70370370370392, -42.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (110.51851851851825, -41.777777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (109.03703703703718, -44.444444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (108.4444444444448, -40.592592592592553)) + Result.extend_point (create {EV_COORDINATE}.make_precise (109.62962962962956, -37.03703703703701)) + Result.extend_point (create {EV_COORDINATE}.make_precise (110.2222222222224, -33.185185185185162)) + Result.extend_point (create {EV_COORDINATE}.make_precise (107.55555555555566, -34.666666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (105.18518518518499, -35.259259259259238)) + Result.extend_point (create {EV_COORDINATE}.make_precise (104.2962962962963, -38.222222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (103.11111111111131, -34.666666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (105.77777777777806, -33.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (108.14814814814827, -30.518518518518476)) + Result.extend_point (create {EV_COORDINATE}.make_precise (109.92592592592564, -29.333333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (108.14814814814827, -27.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (106.37037037037044, -27.851851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (105.77777777777806, -30.222222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (104.2962962962963, -29.629629629629676)) + Result.extend_point (create {EV_COORDINATE}.make_precise (101.03703703703718, -31.703703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (101.03703703703718, -33.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (99.555555555555657, -34.074074074074019)) + Result.extend_point (create {EV_COORDINATE}.make_precise (98.666666666666742, -36.444444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (98.666666666666742, -39.407407407407391)) + Result.extend_point (create {EV_COORDINATE}.make_precise (95.703703703703923, -37.629629629629676)) + Result.extend_point (create {EV_COORDINATE}.make_precise (97.777777777778056, -34.074074074074019)) + Result.extend_point (create {EV_COORDINATE}.make_precise (97.185185185184991, -31.111111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (98.074074074073906, -29.925925925925867)) + Result.extend_point (create {EV_COORDINATE}.make_precise (98.666666666666742, -27.851851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (101.03703703703718, -26.666666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (100.74074074074065, -23.407407407407391)) + Result.extend_point (create {EV_COORDINATE}.make_precise (98.962962962963047, -23.407407407407391)) + Result.extend_point (create {EV_COORDINATE}.make_precise (100.14814814814827, -20.740740740740705)) + Result.extend_point (create {EV_COORDINATE}.make_precise (97.185185185184991, -22.222222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (95.703703703703923, -25.185185185185162)) + Result.extend_point (create {EV_COORDINATE}.make_precise (94.518518518518249, -21.333333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (92.148148148148266, -21.925925925925867)) + Result.extend_point (create {EV_COORDINATE}.make_precise (92.148148148148266, -25.185185185185162)) + Result.extend_point (create {EV_COORDINATE}.make_precise (90.962962962963047, -23.703703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (89.185185185184991, -26.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (88.888888888889142, -24.296296296296305)) + Result.extend_point (create {EV_COORDINATE}.make_precise (89.777777777778056, -21.629629629629676)) + Result.extend_point (create {EV_COORDINATE}.make_precise (89.777777777778056, -18.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (88.296296296296305, -20.444444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (87.407407407407391, -23.703703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (86.814814814814781, -20.148148148148096)) + Result.extend_point (create {EV_COORDINATE}.make_precise (84.740740740740648, -21.333333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (84.740740740740648, -24)) + Result.extend_point (create {EV_COORDINATE}.make_precise (82.666666666666742, -25.185185185185162)) + Result.extend_point (create {EV_COORDINATE}.make_precise (81.481481481481524, -23.703703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (81.777777777778056, -21.03703703703701)) + Result.extend_point (create {EV_COORDINATE}.make_precise (79.703703703703923, -18.074074074074019)) + Result.extend_point (create {EV_COORDINATE}.make_precise (78.518518518518249, -18.666666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (79.111111111111313, -22.222222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (75.851851851851734, -22.222222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (77.03703703703718, -24.888888888888914)) + Result.extend_point (create {EV_COORDINATE}.make_precise (75.259259259258897, -25.185185185185162)) + Result.extend_point (create {EV_COORDINATE}.make_precise (72.888888888889142, -23.407407407407391)) + Result.extend_point (create {EV_COORDINATE}.make_precise (72.592592592592155, -18.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (66.666666666666742, -17.777777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (64.888888888889142, -19.259259259259238)) + Result.extend_point (create {EV_COORDINATE}.make_precise (62.814814814814781, -14.518518518518476)) + Result.extend_point (create {EV_COORDINATE}.make_precise (59.259259259258897, -13.333333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (57.777777777778056, -11.851851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (55.407407407407391, -11.851851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (54.814814814814781, -10.370370370370324)) + Result.extend_point (create {EV_COORDINATE}.make_precise (50.370370370370438, -10.370370370370324)) + Result.extend_point (create {EV_COORDINATE}.make_precise (49.777777777778056, -4.740740740740705)) + Result.extend_point (create {EV_COORDINATE}.make_precise (43.851851851851734, -4.1481481481480955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (42.666666666666742, -5.925925925925867)) + Result.extend_point (create {EV_COORDINATE}.make_precise (37.333333333333485, -2.9629629629629903)) + Result.extend_point (create {EV_COORDINATE}.make_precise (37.333333333333485, -0.59259259259255259)) + Result.extend_point (create {EV_COORDINATE}.make_precise (32.592592592592155, 4.7407407407407618)) + Result.extend_point (create {EV_COORDINATE}.make_precise (33.481481481481524, 6.814814814814838)) + Result.extend_point (create {EV_COORDINATE}.make_precise (31.703703703703923, 7.4074074074074474)) + Result.extend_point (create {EV_COORDINATE}.make_precise (29.629629629629562, 5.6296296296296759)) + Result.extend_point (create {EV_COORDINATE}.make_precise (26.666666666666742, 4.7407407407407618)) + Result.extend_point (create {EV_COORDINATE}.make_precise (24.592592592592155, 3.8518518518519045)) + Result.extend_point (create {EV_COORDINATE}.make_precise (22.518518518518249, 2.6666666666666856)) + Result.extend_point (create {EV_COORDINATE}.make_precise (21.03703703703718, 4.1481481481481524)) + Result.extend_point (create {EV_COORDINATE}.make_precise (21.333333333333485, 7.7037037037036953)) + Result.extend_point (create {EV_COORDINATE}.make_precise (21.333333333333485, 9.4814814814815236)) + Result.extend_point (create {EV_COORDINATE}.make_precise (19.555555555555657, 8.5925925925926094)) + Result.extend_point (create {EV_COORDINATE}.make_precise (18.370370370370438, 10.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (17.185185185184991, 8.2962962962963047)) + Result.extend_point (create {EV_COORDINATE}.make_precise (14.222222222222399, 6.814814814814838)) + Result.extend_point (create {EV_COORDINATE}.make_precise (9.1851851851849915, 6.2222222222222285)) + Result.extend_point (create {EV_COORDINATE}.make_precise (8, 4.4444444444444571)) + Result.extend_point (create {EV_COORDINATE}.make_precise (5.6296296296295623, 5.6296296296296759)) + Result.extend_point (create {EV_COORDINATE}.make_precise (4.4444444444447981, 2.6666666666666856)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1.7777777777780557, 1.7777777777777715)) + end + +feature {NONE} -- Implementation + + rotation_amount: REAL_64 = -50.0 + -- Make the arrow point north-east + +end diff --git a/jj_vitp/Interface/widgets/port_widgets/green_port_widget.e b/jj_vitp/Interface/widgets/port_widgets/green_port_widget.e new file mode 100644 index 0000000..77b66b5 --- /dev/null +++ b/jj_vitp/Interface/widgets/port_widgets/green_port_widget.e @@ -0,0 +1,47 @@ +note + description: "[ + Widget representing a non-major port. + ]" + author: "Jimmy J. Johnson" + date: "$Date$" + revision: "$Revision$" + +deferred class + GREEN_PORT_WIDGET + +inherit + + PORT_WIDGET + redefine + build_widgets, + set_fonts_and_colors, + position_widgets + end + +feature {NONE} -- Initialization + + build_widgets + -- Set up the widgets in Current. + do + Precursor {PORT_WIDGET} + marker.hide_anchor + anchor.hide + end + + set_fonts_and_colors + -- Set the default fonts for any text widgets and set + -- the default colors for any contained widgets. + do + Precursor {PORT_WIDGET} + land_color := Green_port_color + end + + position_widgets + -- Move Current and contained widgets to correct + -- location and set their their sizes + do + Precursor {PORT_WIDGET} + scale_widget (marker, 0.06) + end + +end diff --git a/jj_vitp/Interface/widgets/port_widgets/guadalcanal_widget.e b/jj_vitp/Interface/widgets/port_widgets/guadalcanal_widget.e new file mode 100644 index 0000000..793f652 --- /dev/null +++ b/jj_vitp/Interface/widgets/port_widgets/guadalcanal_widget.e @@ -0,0 +1,122 @@ +note + description: "[ + The widget representing this port + ]" + author: "Jimmy J. Johnson" + +class + GUADALCANAL_WIDGET + +inherit + +-- GREEN_PORT_WIDGET +-- undefine +-- paint +-- redefine +-- create_interface_objects, +-- initialize, +-- position_widgets, +-- build_land +-- end + + ISLAND_PORT_WIDGET + redefine + create_interface_objects, +-- initialize, + position_widgets, + build_land, + rotation_amount + end + +create + make + +feature {NONE} -- Initialization + + create_interface_objects + -- Initialize attributes + do + mainland := mainland_imp + Precursor {ISLAND_PORT_WIDGET} +-- Precursor {GREEN_PORT_WIDGET} + end + +-- initialize +-- -- Set up the widgets in Current. +-- do +-- Precursor {ISLAND_PORT_WIDGET} +---- Precursor {GREEN_PORT_WIDGET} +-- end + + position_widgets + -- Move Current and contained widgets to correct + -- location and set their their sizes + do + Precursor {ISLAND_PORT_WIDGET} +-- Precursor {GREEN_PORT_WIDGET} +-- marker.center_on_dot (dot) + marker.set_x_y (dot.x, dot.y) + center_on (404, 458) + translate_widget (land, 5, -18) + scale_widget (land, 0.6) + rotate_widget (land, 14.0) + translate_widget (name_mt, 0, 0) + translate_widget (marker, 5, -8) + end + + build_land + -- Add widgets to Current + do + Precursor {ISLAND_PORT_WIDGET} + land.extend (mainland) + end + +feature -- Status report + + is_red: BOOLEAN = False + -- Does Current represent a red (i.e. major) port? + +feature {NONE} -- Implementation + + mainland: EV_MODEL_POLYGON + +feature {NONE} -- Implementation + + mainland_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (0, 0)) + Result.extend_point (create {EV_COORDINATE}.make_precise (5.925925925925867, -2.6666666666666856)) + Result.extend_point (create {EV_COORDINATE}.make_precise (11.259259259259238, 0.88888888888891415)) + Result.extend_point (create {EV_COORDINATE}.make_precise (16, 4.740740740740705)) + Result.extend_point (create {EV_COORDINATE}.make_precise (26.074074074074019, 4.1481481481480955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (38.222222222222285, 5.6296296296296191)) + Result.extend_point (create {EV_COORDINATE}.make_precise (45.037037037037067, 6.8148148148147811)) + Result.extend_point (create {EV_COORDINATE}.make_precise (45.925925925925867, 11.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (49.185185185185219, 13.333333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (50.370370370370438, 17.777777777777828)) + Result.extend_point (create {EV_COORDINATE}.make_precise (54.814814814814781, 20.444444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (55.703703703703695, 24)) + Result.extend_point (create {EV_COORDINATE}.make_precise (57.777777777777828, 25.777777777777828)) + Result.extend_point (create {EV_COORDINATE}.make_precise (47.111111111111086, 29.629629629629619)) + Result.extend_point (create {EV_COORDINATE}.make_precise (42.370370370370438, 26.370370370370324)) + Result.extend_point (create {EV_COORDINATE}.make_precise (37.925925925925867, 27.259259259259238)) + Result.extend_point (create {EV_COORDINATE}.make_precise (29.925925925925867, 23.703703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (21.629629629629562, 24)) + Result.extend_point (create {EV_COORDINATE}.make_precise (13.333333333333371, 25.185185185185219)) + Result.extend_point (create {EV_COORDINATE}.make_precise (8.2962962962963047, 20.444444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (5.3333333333333712, 19.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (4.4444444444444571, 16)) + Result.extend_point (create {EV_COORDINATE}.make_precise (0.88888888888891415, 10.666666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1.4814814814815236, 8.2962962962963047)) + Result.extend_point (create {EV_COORDINATE}.make_precise (0.29629629629630472, 5.6296296296296191)) + end + +feature {NONE} -- Implementation + + rotation_amount: REAL_64 = -50.0 + -- Make the arrow point north-east + +end diff --git a/jj_vitp/Interface/widgets/port_widgets/island_port_widget.e b/jj_vitp/Interface/widgets/port_widgets/island_port_widget.e new file mode 100644 index 0000000..d188e4b --- /dev/null +++ b/jj_vitp/Interface/widgets/port_widgets/island_port_widget.e @@ -0,0 +1,249 @@ +note + description: "[ + Widget to reprensent the "island" ports in VITP. + Island ports are drawn with a circle and usually has an arrow + pointing the the `mainland' + ]" + author: "Jimmy J. Johnson" + +deferred class + ISLAND_PORT_WIDGET + +inherit + + PORT_WIDGET + redefine + create_interface_objects, +-- initialize, + build_widgets, + set_fonts_and_colors, + position_widgets, +-- defining_figure, + paint + end + +feature {NONE} -- Initialization + + create_interface_objects + -- Create the attributes + do + Precursor {PORT_WIDGET} + create arrow_world + create outer_circle + create inner_circle + create outer_arrow + create inner_arrow + create masking_box + create bogus_arrow -- to be removed later + extend (outer_circle) + extend (inner_circle) + extend (arrow_world) + -- The `arrow_world' contains the arrows and box + -- (see `build_circle') + end + + build_widgets + -- Now that widgets were created in `create_interface_objects' + -- and added to Current in `extend_widgets', build up the + -- widgets by adding internal structure to each widget. + do + Precursor {PORT_WIDGET} + build_circle + end + + set_fonts_and_colors + -- Set the default fonts for any text widgets and set + -- the default colors for any contained widgets. + do + Precursor {PORT_WIDGET} + dot.set_foreground_color (Cyan) + end + + position_widgets + -- Move Current and contained widgets to correct + -- location and set their their sizes + do + Precursor {PORT_WIDGET} + -- Because Current is built big and scaled down, + -- the font ends up being too small. Therefore, + -- the size of the font must be scaled back up to + -- make it appear the same size as the text on + -- non-island ports. + scale_widget (Current, 0.25) + scale_widget (text_group, 4.0) +-- scale_widget (marker, 4.0) +-- scale_widget (anchor, 4.0) + -- Center the widgets on x and y. + text_group.set_x_y (inner_circle.x, inner_circle.y) + anchor.set_x_y (inner_circle.x, inner_circle.y) + marker.set_x_y (inner_circle.x, inner_circle.y) +-- -- Green widgets have smaller markers +-- if not is_red then +-- scale_widget (marker, 0.06) +-- end + if is_red then + scale_widget (marker, 0.32) + anchor.scale (0.27) + else + scale_widget (marker, 0.25) + end + end + +-- set_widget_order +-- -- Ensure the widgets are ordered properly +-- -- (i.e. whose on top?) +-- do +-- Precursor {LOCATION_WIDGET} +-- end + + frozen build_circle + -- Create the circle that represents the port + do + -- build the circle big; scale it later +-- rad := 50 + -- Build two circles (and four arrows), placing a + -- smaller figure inside another corresponding one + -- to give the appearance of a green/red circle + -- inside a white circle. + outer_circle.set_radius1 (50) + outer_circle.set_radius2 (50) + inner_circle.set_radius1 (47) + inner_circle.set_radius2 (47) + -- center the smaller circle on the larger + + -- Because we may want to rotate the circle, we build it with a + -- symetrical (arrow going oposite directions) and perform the + -- rotation on this. After the rotation the extraneous arrow + -- is removed. + arrow_world.extend (outer_arrow) + arrow_world.extend (inner_arrow) + arrow_world.extend (masking_box) + arrow_world.extend (bogus_arrow) + -- start at point of arrow + outer_arrow.extend_point (create {EV_COORDINATE}.make (66, 0)) + outer_arrow.extend_point (create {EV_COORDINATE}.make (47, 40)) + outer_arrow.extend_point (create {EV_COORDINATE}.make (47, -40)) + inner_arrow.extend_point (create {EV_COORDINATE}.make (63, 0)) + inner_arrow.extend_point (create {EV_COORDINATE}.make (50, 27)) + inner_arrow.extend_point (create {EV_COORDINATE}.make (50, -27)) + masking_box.extend_point (create {EV_COORDINATE}.make (0, -15)) + masking_box.extend_point (create {EV_COORDINATE}.make (52, -15)) + masking_box.extend_point (create {EV_COORDINATE}.make (52, 15)) + masking_box.extend_point (create {EV_COORDINATE}.make (0, 15)) + -- reflect `outer_arrow' for the `bogus_arrow_1' + bogus_arrow.extend_point (create {EV_COORDINATE}.make (-66, 0)) + bogus_arrow.extend_point (create {EV_COORDINATE}.make (-47, 40)) + bogus_arrow.extend_point (create {EV_COORDINATE}.make (-47, -40)) + -- rotate the arrow only + rotate_arrow + arrow_world.prune_all (bogus_arrow) + -- Move all the pieces so the center of the circle is more in line + -- with the way the rest of the game pieces are defined +-- create t.make_zero +-- t.translate (66, 66) +-- outer_circle.transform (t) +-- inner_circle.transform (t) +-- outer_arrow.transform (t) +-- inner_arrow.transform (t) +-- masking_box.transform (t) +-- bogus_arrow.transform (t) + ensure + has_circles: has (arrow_world) + has_outer_circle: has (outer_circle) + has_inner_circle: has (inner_circle) + end + +-- defining_figure: EV_MODEL +-- -- The figure to be used to determine if other figures +-- -- overlap this one or for capturing mouse events +-- do +-- Result := outer_circle +-- end + +feature -- Basic operations + + paint + -- Color the widgets + local + c, cw: EV_COLOR + do + Precursor {PORT_WIDGET} + cw := adjusted_color (White) + c := adjusted_color (land_color) + outer_circle.set_background_color (cw) + outer_circle.set_foreground_color (cw) + outer_arrow.set_background_color (cw) + outer_arrow.set_foreground_color (cw) + inner_circle.set_background_color (c) + inner_circle.set_foreground_color (c) + inner_arrow.set_background_color (c) + inner_arrow.set_foreground_color (c) + masking_box.set_background_color (c) + masking_box.set_foreground_color (c) + end + +feature {NONE} -- Implementation + + frozen center_on (ax, ay: INTEGER) + -- Translate Current so that the `dot' is at position (`ax', `ay') + local + t: EV_MODEL_TRANSFORMATION + do + create t.make_zero + t.translate (ax - inner_circle.x, ay - inner_circle.y) + transform (t) + end + + frozen hide_arrow + -- Remove the arrow from Current + do + outer_arrow.hide + inner_arrow.hide + masking_box.hide + end + + frozen rotate_arrow + -- Rotate only the arrow; the circle does not rotate correctly + do + -- This rotates around (0, 0), because this is called + -- before the completed port widget is translated. +-- rotate_widget (outer_arrow, rotation_amount) +-- rotate_widget (inner_arrow, rotation_amount) +-- rotate_widget (masking_box, rotation_amount) + rotate_widget (arrow_world, rotation_amount) + end + + rotation_amount: REAL_64 + -- The number of degrees to rotate the `circle' in order to make the + -- arrow point the correct dirction + do + Result := 0 + end + + arrow_world: EV_MODEL_WORLD + -- Holds the circles and arrows as a group, so + -- rotations will be relative to center at [0,0]. + + outer_circle: EV_MODEL_ELLIPSE + -- The larger (white) circle representing the `port' + + inner_circle: EV_MODEL_ELLIPSE + -- The smaller (red/green) circle representing the `port' + + outer_arrow: EV_MODEL_POLYGON + -- The larger (white) triangle that make an arrow coming out of the `circle' + + inner_arrow: EV_MODEL_POLYGON + -- The smaller (red/green) triangle that is inside the `outer_triangle' + + masking_box: EV_MODEL_POLYGON + -- A rectangle that is the same color as the `inner_circle', used to + -- visually connect the `inner_arrow' to the `inner_circle'. + + bogus_arrow: EV_MODEL_POLYGON + -- Arrow built on opposite side of circle from + -- `outer_arrow' in order to keep the `dot' in + -- the middle of the circle. It is removed after + -- the `arrow' is rotated and the `dot' is built. + +end diff --git a/jj_vitp/Interface/widgets/port_widgets/johnston_island_widget.e b/jj_vitp/Interface/widgets/port_widgets/johnston_island_widget.e new file mode 100644 index 0000000..6b5a3c1 --- /dev/null +++ b/jj_vitp/Interface/widgets/port_widgets/johnston_island_widget.e @@ -0,0 +1,68 @@ +note + description: "[ + The widget representing this port + ]" + author: "Jimmy J. Johnson" + +class + JOHNSTON_ISLAND_WIDGET + +inherit + +-- GREEN_PORT_WIDGET +-- undefine +-- paint +-- redefine +-- initialize, +-- create_interface_objects, +-- position_widgets +-- end + + ISLAND_PORT_WIDGET + redefine + create_interface_objects, +-- initialize, + position_widgets + end + +create + make + +feature {NONE} -- Initialization + + create_interface_objects + -- Initialize attributes + do + Precursor {ISLAND_PORT_WIDGET} +-- Precursor {GREEN_PORT_WIDGET} + end + +-- initialize +-- -- Set up the widgets in Current. +-- do +-- Precursor {ISLAND_PORT_WIDGET} +---- Precursor {GREEN_PORT_WIDGET} +-- hide_arrow +-- dot.show +-- end + + position_widgets + -- Move Current and contained widgets to correct + -- location and set their their sizes + do + Precursor {ISLAND_PORT_WIDGET} +-- Precursor {GREEN_PORT_WIDGET} + center_on (639, 370) + center_widget_on_other (marker, dot) + translate_widget (name_mt, -1, 1) + translate_widget (marker, -2, -5) + dot.set_foreground_color (Cyan) + dot.show + end + +feature -- Status report + + is_red: BOOLEAN = False + -- Does Current represent a red (i.e. major) port? + +end diff --git a/jj_vitp/Interface/widgets/port_widgets/kwajalein_widget.e b/jj_vitp/Interface/widgets/port_widgets/kwajalein_widget.e new file mode 100644 index 0000000..1cb5735 --- /dev/null +++ b/jj_vitp/Interface/widgets/port_widgets/kwajalein_widget.e @@ -0,0 +1,125 @@ +note + description: "[ + The widget representing this port + ]" + author: "Jimmy J. Johnson" + +class + KWAJALEIN_WIDGET + +inherit + +-- GREEN_PORT_WIDGET +-- undefine +-- paint +-- redefine +-- create_interface_objects, +-- initialize, +-- position_widgets, +-- build_land +-- end + + ISLAND_PORT_WIDGET + redefine + create_interface_objects, +-- initialize, + position_widgets, + build_land, + rotation_amount + end + +create + make + +feature {NONE} -- Initialization + + create_interface_objects + -- Initialize attributes + do + kwajalein_atoll := kwajalein_atoll_imp + Precursor {ISLAND_PORT_WIDGET} +-- Precursor {GREEN_PORT_WIDGET} + end + +-- initialize +-- -- Set up the widgets in Current. +-- do +-- Precursor {ISLAND_PORT_WIDGET} +---- Precursor {GREEN_PORT_WIDGET} +-- end + + position_widgets + -- Move Current and contained widgets to correct + -- location and set their their sizes + do + Precursor {ISLAND_PORT_WIDGET} +-- Precursor {GREEN_PORT_WIDGET} + center_on (469, 350) + scale_widget (land, 0.27) + rotate_widget (land, 13.0) + translate_widget (land, 0, -20) + translate_widget (name_mt, 0, 2) + translate_widget (dot, 2, -2) +-- marker.center_on_dot (dot) + marker.set_x_y (dot.x, dot.y) + end + + build_land + -- Add widgets to Current + do + Precursor {ISLAND_PORT_WIDGET} + land.extend (kwajalein_atoll) + end + +feature -- Status report + + is_red: BOOLEAN = False + -- Does Current represent a red (i.e. major) port? + +feature {NONE} -- Implementation + + kwajalein_atoll: EV_MODEL_POLYGON + +feature {NONE} -- Implementation + + kwajalein_atoll_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (0, 0)) + Result.extend_point (create {EV_COORDINATE}.make_precise (14.222222222222229, 0.59259259259272312)) + Result.extend_point (create {EV_COORDINATE}.make_precise (24.888888888888914, -2.9629629629630472)) + Result.extend_point (create {EV_COORDINATE}.make_precise (43.259259259259068, 2.074074074074133)) + Result.extend_point (create {EV_COORDINATE}.make_precise (52.148148148147982, -0.88888888888902784)) + Result.extend_point (create {EV_COORDINATE}.make_precise (55.407407407407334, -0.59259259259249575)) + Result.extend_point (create {EV_COORDINATE}.make_precise (62.222222222222229, -6.8148148148146674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (64.296296296296248, 2.074074074074133)) + Result.extend_point (create {EV_COORDINATE}.make_precise (75.5555555555556, 13.333333333333258)) + Result.extend_point (create {EV_COORDINATE}.make_precise (85.92592592592581, 23.111111111110972)) + Result.extend_point (create {EV_COORDINATE}.make_precise (83.851851851851791, 28.444444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (87.999999999999716, 39.703703703703582)) + Result.extend_point (create {EV_COORDINATE}.make_precise (83.851851851851791, 44.740740740740875)) + Result.extend_point (create {EV_COORDINATE}.make_precise (84.148148148147982, 58.37037037037021)) + Result.extend_point (create {EV_COORDINATE}.make_precise (72.296296296296248, 51.259259259259352)) + Result.extend_point (create {EV_COORDINATE}.make_precise (66.666666666666686, 44.148148148148266)) + Result.extend_point (create {EV_COORDINATE}.make_precise (65.185185185185162, 35.851851851851507)) + Result.extend_point (create {EV_COORDINATE}.make_precise (67.5555555555556, 31.111111111110972)) + Result.extend_point (create {EV_COORDINATE}.make_precise (59.5555555555556, 24.592592592592723)) + Result.extend_point (create {EV_COORDINATE}.make_precise (50.370370370370381, 21.62962962962979)) + Result.extend_point (create {EV_COORDINATE}.make_precise (39.703703703703525, 24)) + Result.extend_point (create {EV_COORDINATE}.make_precise (32.88888888888863, 19.555555555555657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (27.259259259259125, 20.740740740740875)) + Result.extend_point (create {EV_COORDINATE}.make_precise (26.074074074073962, 14.814814814814895)) + Result.extend_point (create {EV_COORDINATE}.make_precise (24.296296296296248, 17.185185185185333)) + Result.extend_point (create {EV_COORDINATE}.make_precise (15.407407407407334, 11.259259259259352)) + Result.extend_point (create {EV_COORDINATE}.make_precise (8.5925925925924389, 7.4074074074075043)) + Result.extend_point (create {EV_COORDINATE}.make_precise (2.9629629629628198, 4.4444444444444571)) + end + +feature {NONE} -- Implementation + + rotation_amount: REAL_64 = -45.0 + -- Make the arrow point north-east + +end diff --git a/jj_vitp/Interface/widgets/port_widgets/lae_widget.e b/jj_vitp/Interface/widgets/port_widgets/lae_widget.e new file mode 100644 index 0000000..6eaa0af --- /dev/null +++ b/jj_vitp/Interface/widgets/port_widgets/lae_widget.e @@ -0,0 +1,1006 @@ +note + description: "[ + Widget representing a {PORT}. + ]" + author: "Jimmy J. Johnson" + +class + LAE_WIDGET + +inherit + + GREEN_PORT_WIDGET + redefine + create_interface_objects, + position_widgets, + build_land + end + +create + make + +feature {NONE} -- Initialization + + create_interface_objects + -- Initialize attributes + do + Precursor {GREEN_PORT_WIDGET} + mainland := mainland_imp + end + + position_widgets + -- Move Current and contained widgets to correct + -- location and set their their sizes + do + Precursor {GREEN_PORT_WIDGET} + center_widget_on_other (land, dot) + scale_widget (land, 0.07) + rotate_widget (land, 15.0) + translate_widget (Current, 302, 385) + translate_widget (name_mt, 2, -10) + translate_widget (dot, 15, -5) + center_widget_on_other (marker, dot) + end + + build_land + -- Add widgets to Current + do + Precursor {GREEN_PORT_WIDGET} + -- Initialize attributes + land.extend (mainland) + end + +feature -- Access + + defining_figure: EV_MODEL + -- The figure to be used to determine if other figures + -- overlap this one or for capturing mouse events + do + Result := mainland + end + + mainland: EV_MODEL_POLYGON + -- The Lae have of the green island + +feature -- Status report + + is_red: BOOLEAN = False + -- Does Current represent a red (i.e. major) port? + +feature {NONE} -- Implementation + + mainland_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (0, 0)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-48, -41)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-215, -117)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-358, -275)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-628, -424)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-780, -513)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1007, -597)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1226, -628)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1437, -599)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1434.3333333333335, -615.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1415.6666666666667, -613.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1410.7777777777778, -615)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1417.8888888888889, -616.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1432.1111111111113, -617.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1437, -617.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1440.1111111111113, -612.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1450.7777777777778, -607)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1456.1111111111113, -613.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1457, -618.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1463.2222222222222, -619)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1464.1111111111113, -616.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1468.1111111111113, -614.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1472.5555555555557, -615.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1466.7777777777778, -609.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1469, -606.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1479.6666666666667, -614.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1482.3333333333335, -619.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1486.3333333333335, -619)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1485.4444444444446, -615.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1481.8888888888889, -611.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1477.8888888888889, -608.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1484.1111111111113, -610.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1489, -611.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1492.5555555555557, -617.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1488.5555555555557, -618.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1480.5555555555557, -624.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1481.4444444444446, -629.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1485.8888888888889, -632.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1485.8888888888889, -630.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1490.7777777777778, -627.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1494.3333333333335, -629.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1497.4444444444446, -627)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1493, -626.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1494.3333333333335, -623.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1497, -624.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1499.2222222222222, -623.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1503.6666666666667, -628.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1503.2222222222222, -620.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1506.7777777777778, -626.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1509.4444444444446, -635.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1505.8888888888889, -632.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1505, -634.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1505, -637.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1510.7777777777778, -642.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1512.1111111111113, -651)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1517, -647)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1515.6666666666667, -641.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1513.4444444444446, -635.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1517.8888888888889, -639)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1519.2222222222222, -642.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1522.7777777777778, -640.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1525.4444444444443, -642.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1524.1111111111111, -646.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1529, -655.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1530.7777777777778, -657.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1525, -662.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1526.7777777777778, -669.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1526.7777777777778, -680.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1525, -681.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1524.5555555555557, -683.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1518.3333333333335, -684.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1517.8888888888889, -682.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1517, -687.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1517, -692.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1517.4444444444446, -695.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1514.3333333333335, -693.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1511.6666666666667, -693.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1511.2222222222222, -699)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1507.6666666666667, -696.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1509.4444444444446, -703.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1510.7777777777778, -707)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1513.4444444444446, -706.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1514.7777777777778, -699.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1518.7777777777778, -699.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1521.8888888888889, -696.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1528.5555555555557, -691)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1527.2222222222222, -684.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1528.1111111111111, -677.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1527.6666666666667, -672.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1528.1111111111111, -666.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1530.7777777777778, -663.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1532.1111111111111, -661.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1537.4444444444443, -662.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1540.1111111111111, -666.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1541, -662.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1538.3333333333335, -659.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1533.8888888888889, -653.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1534.7777777777778, -648.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1537.8888888888889, -648.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1543.6666666666667, -645.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1549.4444444444443, -639)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1550.7777777777778, -634.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1550.3333333333335, -627.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1547.2222222222222, -627.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1545.8888888888889, -623.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1551.6666666666667, -621.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1556.1111111111111, -621.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1552.5555555555557, -619.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1552.1111111111111, -616.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1556.1111111111111, -613.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1558.3333333333335, -608.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1563.6666666666667, -606.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1564.5555555555557, -602.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1575.6666666666667, -603.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1579.2222222222222, -605.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1584.1111111111111, -604.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1585.4444444444443, -599)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1590.3333333333335, -599.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1595.2222222222222, -601.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1594.7777777777778, -604.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1602.3333333333335, -611)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1604.1111111111111, -613.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1606.7777777777778, -615.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1605, -617.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1602.7777777777778, -615.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1602.7777777777778, -618.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1606.7777777777778, -623.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1608.5555555555557, -626.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1610.3333333333333, -635.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1612.5555555555557, -636.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1612.5555555555557, -644.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1610.3333333333333, -643.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1598.3333333333335, -643)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1598.3333333333335, -645.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1596.5555555555557, -648.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1593.8888888888889, -651.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1597, -651.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1598.3333333333335, -656.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1598.7777777777778, -659.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1601.8888888888889, -658.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1604.5555555555557, -659.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1605, -665.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1606.7777777777778, -667.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1602.3333333333335, -673.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1605, -674.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1605, -677.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1609.8888888888889, -677.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1613, -675.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1612.5555555555557, -672.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1614.7777777777778, -670.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1617.8888888888889, -671.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1621, -676.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1625.8888888888889, -681.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1622.3333333333333, -681.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1620.5555555555557, -683.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1622.7777777777778, -685.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1625.4444444444443, -687.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1629, -687.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1638.3333333333333, -691.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1630.3333333333333, -689.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1627.6666666666667, -689.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1627.6666666666667, -691.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1630.3333333333333, -693.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1636.5555555555557, -698.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1644.1111111111111, -703.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1647.2222222222222, -705.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1647.6666666666667, -707.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1650.3333333333333, -707.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1659.6666666666667, -708.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1668.1111111111111, -707)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1671.2222222222222, -705.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1674.3333333333333, -709.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1677, -708.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1679.6666666666667, -710.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1682.3333333333333, -711.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1676.5555555555557, -712.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1676.5555555555557, -715.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1678.7777777777778, -717.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1674.3333333333333, -719.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1675.6666666666667, -722.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1684.1111111111111, -722.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1673.4444444444443, -727)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1669.8888888888889, -727.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1661.8888888888889, -728.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1668.1111111111111, -730.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1663.6666666666667, -733.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1653.8888888888889, -732.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1645.4444444444443, -731.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1638.7777777777778, -731.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1631.6666666666667, -731.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1625.8888888888889, -730.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1617.8888888888889, -723.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1612.1111111111111, -720.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1600.1111111111111, -729.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1590.7777777777778, -737.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1584.1111111111111, -748.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1576.1111111111111, -753.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1568.1111111111111, -755.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1561, -752.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1555.6666666666667, -754.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1553.4444444444443, -749.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1553, -743.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1555.2222222222222, -735.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1552.5555555555557, -739.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1549.8888888888889, -746.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1549, -750.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1546.7777777777778, -743)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1546.7777777777778, -737.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1545.4444444444443, -747)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1542.3333333333335, -740.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1534.7777777777778, -736.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1539.6666666666667, -740.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1537.8888888888889, -742.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1534.3333333333335, -744.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1541.4444444444443, -748.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1541.4444444444443, -750.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1543.2222222222222, -753.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1541.8888888888889, -755)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1536.5555555555557, -751.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1532.5555555555557, -750.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1531.6666666666667, -747)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1528.1111111111111, -743.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1527.2222222222222, -736.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1525.8888888888889, -729.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1529, -724.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1526.3333333333335, -727)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1525.4444444444443, -734.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1524.1111111111111, -738.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1524.1111111111111, -740.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1524.1111111111111, -747)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1520.1111111111111, -746.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1517, -740.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1517.8888888888889, -744.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1515.6666666666667, -746.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1514.3333333333335, -742.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1515.6666666666667, -749.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1520.1111111111111, -749.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1520.5555555555557, -753.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1511.6666666666667, -755.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1508.5555555555557, -763)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1513.4444444444446, -763.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1506.3333333333335, -765.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1507.6666666666667, -767.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1511.6666666666667, -766.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1516.5555555555557, -769.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1515.6666666666667, -772.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1511.2222222222222, -775)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1507.2222222222222, -778.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1512.1111111111113, -779.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1516.5555555555557, -775.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1518.7777777777778, -770.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1520.5555555555557, -767.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1525.4444444444443, -768.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1524.5555555555557, -772.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1520.5555555555557, -776.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1516.1111111111113, -779)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1522.7777777777778, -776.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1525.8888888888889, -775.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1527.2222222222222, -773.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1532.1111111111111, -771.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1535.6666666666667, -773.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1540.1111111111111, -772.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1548.5555555555557, -772.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1552.1111111111111, -774.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1559.6666666666667, -774.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1562.7777777777778, -775.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1567.6666666666667, -774.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1570.3333333333335, -775.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1575.6666666666667, -775.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1577.4444444444443, -772.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1585.8888888888889, -772.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1591.2222222222222, -766.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1593.8888888888889, -768.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1597.8888888888889, -768.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1601, -769.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1605.8888888888889, -771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1609.8888888888889, -770.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1612.5555555555557, -767.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1613, -765.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1619.6666666666667, -767)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1621.8888888888889, -769.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1622.3333333333333, -772.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1625, -776.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1631.2222222222222, -776.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1641.4444444444443, -772.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1644.5555555555557, -768.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1651.2222222222222, -768.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1657.4444444444443, -775)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1661, -777.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1661.4444444444443, -780.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1666.7777777777778, -780.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1676.1111111111111, -787.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1670.7777777777778, -791)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1672.5555555555557, -792.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1675.6666666666667, -791)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1677.8888888888889, -794.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1680.1111111111111, -794.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1681.8888888888889, -796.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1680.5555555555557, -799.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1683.2222222222222, -799.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1685.4444444444443, -803.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1684.1111111111111, -806.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1686.3333333333333, -809.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1680.1111111111111, -815.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1676.1111111111111, -818.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1673.8888888888889, -817.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1670.7777777777778, -819.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1677.8888888888889, -820.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1675.2222222222222, -822.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1673.8888888888889, -823.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1677.8888888888889, -823.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1681, -821.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1685.8888888888889, -819)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1688.1111111111111, -822.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1689.8888888888889, -825.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1688.5555555555557, -828.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1685.4444444444443, -831.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1683.6666666666667, -833.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1686.3333333333333, -832.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1689.4444444444443, -830.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1693.8888888888889, -831)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1696.5555555555557, -828.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1699.6666666666667, -831.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1704.1111111111111, -830.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1706.3333333333333, -832.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1705.8888888888889, -836.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1709.4444444444443, -835.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1712.1111111111111, -835.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1715.2222222222222, -838.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1716.1111111111111, -841.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1720.1111111111111, -840.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1725.8888888888889, -841.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1725.8888888888889, -838.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1728.5555555555557, -836.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1734.7777777777778, -841.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1733.4444444444443, -846.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1739.2222222222222, -851.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1737, -848.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1741, -847)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1739.2222222222222, -843)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1742.7777777777778, -839)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1751.2222222222222, -836.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1754.3333333333333, -841.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1759.2222222222222, -842.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1761.4444444444443, -843.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1771.2222222222222, -842.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1776.1111111111111, -844.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1770.3333333333333, -850.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1769.4444444444443, -856.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1771.6666666666667, -853.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1775.2222222222222, -851.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1779.2222222222222, -855)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1784.5555555555557, -853.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1788.1111111111111, -861.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1791.6666666666667, -859.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1793.4444444444443, -865.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1795.2222222222222, -870.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1799.6666666666667, -874.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1795.6666666666667, -875.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1803.6666666666667, -884.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1803.2222222222222, -888.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1789, -891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1777.4444444444443, -895)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1775.6666666666667, -890.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1767.6666666666667, -892.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1763.2222222222222, -886.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1764.1111111111111, -882.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1757.8888888888889, -884.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1757.8888888888889, -879.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1761.8888888888889, -875.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1764.1111111111111, -877.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1765.8888888888889, -871)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1767.6666666666667, -867)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1766.3333333333333, -862.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1769.4444444444443, -860.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1767.6666666666667, -858.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1764.1111111111111, -860.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1759.2222222222222, -862.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1753, -868.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1749.8888888888889, -876.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1749, -883)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1745.4444444444443, -887)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1745.8888888888889, -891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1748.1111111111111, -896.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1751.6666666666667, -900.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1740.1111111111111, -903)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1730.7777777777778, -906.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1725.4444444444443, -909.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1721, -909.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1725, -905.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1717.8888888888889, -906.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1694.3333333333333, -911)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1688.1111111111111, -913.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1688.1111111111111, -916.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1681, -923.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1673.8888888888889, -925.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1672.1111111111111, -929.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1671.6666666666667, -932.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1667.2222222222222, -933.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1663.2222222222222, -938.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1657, -938.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1656.1111111111111, -940.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1649.4444444444443, -941.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1641, -944.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1629, -941.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1615.6666666666667, -942.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1607.6666666666667, -936.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1596.1111111111111, -933.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1593.4444444444443, -934.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1592.1111111111111, -930.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1589, -930.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1586.3333333333335, -928.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1581.8888888888889, -928.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1579.6666666666667, -925.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1575.6666666666667, -926.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1574.3333333333335, -923.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1566.3333333333335, -920.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1566.3333333333335, -917.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1561.8888888888889, -915.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1559.2222222222222, -911.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1553.4444444444443, -908.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1537, -906.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1537.4444444444443, -908.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1521, -907.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1518.7777777777778, -910.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1495.6666666666667, -908.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1489.4444444444446, -903)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1485, -897.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1487.6666666666667, -892.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1491.6666666666667, -894.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1492.1111111111113, -891.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1494.7777777777778, -890.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1495.2222222222222, -886.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1492.1111111111113, -883)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1489.8888888888889, -875.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1486.3333333333335, -873.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1484.1111111111113, -868.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1479.6666666666667, -867)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1475.2222222222222, -855.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1471.2222222222222, -853.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1474.7777777777778, -850.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1478.3333333333335, -843.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1478.3333333333335, -838.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1478.3333333333335, -834.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1482.7777777777778, -829.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1485.4444444444446, -825.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1490.7777777777778, -824.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1488.5555555555557, -819)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1487.6666666666667, -806.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1485, -803)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1483.6666666666667, -808.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1480.1111111111113, -813.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1478.7777777777778, -816.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1475.2222222222222, -816.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1475.6666666666667, -812.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1478.3333333333335, -810.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1478.3333333333335, -806.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1480.1111111111113, -802.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1481.4444444444446, -797.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1483.6666666666667, -800.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1487.2222222222222, -802.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1484.5555555555557, -797.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1483.2222222222222, -791.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1487.2222222222222, -787.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1485.8888888888889, -778.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1484.1111111111113, -772.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1481, -764.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1476.5555555555557, -755.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1473.4444444444446, -753.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1468.1111111111113, -743.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1465, -741.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1466.3333333333335, -738.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1461.8888888888889, -727.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1459.2222222222222, -726.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1458.7777777777778, -720.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1456.1111111111113, -719.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1456.1111111111113, -714.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1452.1111111111113, -715.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1449.8888888888889, -719.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1451.6666666666667, -726.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1451.6666666666667, -731.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1454.3333333333335, -732.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1455.2222222222222, -741.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1450.7777777777778, -749.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1449.4444444444446, -747.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1446.7777777777778, -748.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1448.5555555555557, -752.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1450.3333333333335, -755.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1452.1111111111113, -760.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1449, -759)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1446.3333333333335, -758.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1445.8888888888889, -766.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1444.5555555555557, -761.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1444.5555555555557, -755.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1445.8888888888889, -751)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1442.3333333333335, -747.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1440.1111111111113, -749.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1437, -740.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1437, -727)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1435.2222222222222, -719)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1437.4444444444446, -717.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1434.7777777777778, -712.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1435.2222222222222, -707.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1433, -704.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1427.6666666666667, -701.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1427.2222222222222, -706.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1424.1111111111113, -706.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1424.1111111111113, -709.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1421.4444444444446, -709.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1421.8888888888889, -712.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1419.2222222222222, -708.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1420.5555555555557, -705.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1419.2222222222222, -701.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1422.7777777777778, -700.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1424.1111111111113, -689.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1421, -690.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1418.3333333333335, -687)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1420.1111111111113, -682.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1417, -681.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1418.3333333333335, -678.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1413, -678.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1411.2222222222222, -680.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1410.3333333333335, -675)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1405.4444444444446, -670.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1402.7777777777778, -671.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1398.3333333333335, -671.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1397.4444444444446, -667.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1392.5555555555557, -667.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1385.8888888888889, -667.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1376.1111111111113, -667)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1368.5555555555557, -670.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1363.6666666666667, -667.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1354.7777777777778, -676.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1353, -683.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1349, -687.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1342.7777777777778, -688.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1341, -691.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1337.4444444444446, -692.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1339.2222222222222, -695.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1334.7777777777778, -699.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1331.2222222222222, -698.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1330.3333333333335, -702.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1323.6666666666667, -704.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1320.5555555555557, -712.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1323.2222222222222, -711.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1320.5555555555557, -716.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1319.6666666666667, -722.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1309.8888888888889, -732.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1301.8888888888889, -734.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1294.3333333333335, -738.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1289.4444444444446, -749.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1288.1111111111113, -757.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1284.5555555555557, -759)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1285.4444444444446, -767)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1277.4444444444446, -774.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1272.1111111111113, -774.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1269, -775.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1264.1111111111113, -773.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1260.1111111111113, -770.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1256.1111111111113, -771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1253.4444444444446, -771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1250.3333333333335, -772.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1246.7777777777778, -769.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1239.6666666666667, -776.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1233, -776.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1229.8888888888889, -782.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1224.1111111111113, -781.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1218.7777777777778, -784.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1213.4444444444446, -783.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1208.1111111111113, -784.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1202.7777777777778, -788.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1205.4444444444446, -791)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1208.5555555555557, -791.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1205, -794.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1207.6666666666667, -799)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1210.3333333333335, -799.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1214.3333333333335, -803.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1214.7777777777778, -812.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1206.3333333333335, -815.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1200.5555555555557, -816.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1186.3333333333335, -825.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1180.1111111111113, -831)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1176.5555555555557, -831)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1168.5555555555557, -834.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1165, -837.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1156.5555555555557, -839.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1154.7777777777778, -841.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1141.8888888888891, -842.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1134.3333333333335, -835)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1123.6666666666667, -827)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1119.6666666666667, -827)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1106.3333333333335, -820.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1080.5555555555557, -813.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1072.1111111111113, -811.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1063.2222222222224, -803.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1052.5555555555557, -794.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1051.6666666666667, -796.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1040.5555555555557, -795.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1031.2222222222224, -788.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1022.3333333333334, -785.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1017.4444444444446, -781.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1009, -779.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-993.88888888888903, -769.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-982.33333333333337, -765.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-969.44444444444457, -759)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-951.66666666666674, -760.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-944.55555555555566, -760.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-942.77777777777783, -764.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-933.88888888888903, -758.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-932.55555555555566, -754.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-929, -755.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-921, -751)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-917.44444444444457, -751.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-919.2222222222224, -756.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-911.66666666666674, -754.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-901.44444444444457, -754.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-886.33333333333337, -750.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-882.33333333333337, -743.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-885, -741.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-888.1111111111112, -738.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-885.44444444444457, -735)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-878.77777777777783, -736.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-879.66666666666674, -739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-873, -736.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-863.66666666666674, -737.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-858.33333333333337, -739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-843.2222222222224, -735)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-829.44444444444457, -729.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-815.2222222222224, -723.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-792.11111111111131, -712.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-785.44444444444457, -709.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-778.33333333333348, -703.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-769, -705.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-752.55555555555566, -693.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-747.66666666666674, -693.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-737.88888888888914, -691)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-725, -683.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-720.55555555555566, -680.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-715.66666666666674, -681.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-683.66666666666674, -670.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-678.77777777777783, -671.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-668.11111111111131, -670.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-660.11111111111131, -669.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-652.55555555555566, -666.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-640.55555555555566, -665.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-636.11111111111131, -661.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-630.77777777777783, -663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-625.88888888888914, -654.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-622.33333333333348, -657.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-618.77777777777783, -655.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-619.66666666666674, -650.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-609.44444444444457, -645.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-607.2222222222224, -647.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-601.88888888888914, -643.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-602.33333333333348, -641.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-592.55555555555566, -636.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-592.11111111111131, -631.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-586.77777777777783, -628.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-583.2222222222224, -630.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-571.66666666666674, -630.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-575.2222222222224, -626.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-566.33333333333348, -624.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-567.66666666666674, -627.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-569, -629.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-567.2222222222224, -631)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-553.44444444444457, -630.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-536.55555555555566, -627)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-537.44444444444457, -622.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-534.77777777777783, -620.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-537, -618.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-536.55555555555566, -613.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-533, -610.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-528.11111111111131, -610.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-512.11111111111131, -602.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-507.2222222222224, -597.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-510.33333333333348, -595.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-509.44444444444457, -592.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-505, -593.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-498.33333333333348, -587.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-497.44444444444457, -582.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-494.77777777777806, -582.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-492.55555555555566, -577.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-486.77777777777806, -576.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-482.77777777777806, -573.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-467.2222222222224, -575.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-463.66666666666674, -571)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-458.33333333333348, -569.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-445.88888888888914, -555)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-434.77777777777806, -541.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-421.88888888888914, -533.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-421.88888888888914, -529.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-424.55555555555566, -524.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-421.88888888888914, -514.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-422.77777777777806, -510.5555555555556)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-422.33333333333348, -497.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-426.33333333333348, -489.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-426.33333333333348, -486.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-428.11111111111131, -480.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-423.2222222222224, -474.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-418.77777777777806, -476.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-413, -474.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-406.33333333333348, -476.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-404.11111111111131, -473.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-398.33333333333348, -473.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-393.88888888888914, -470.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-390.77777777777806, -471)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-387.66666666666674, -468.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-380.55555555555566, -467)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-377.4444444444448, -465.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-374.33333333333348, -467)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-371.66666666666674, -466.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-370.77777777777806, -463)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-365.88888888888914, -463)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-364.55555555555566, -464.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-361.88888888888914, -463.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-360.55555555555566, -461.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-353.4444444444448, -458.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-349, -450.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-340.55555555555566, -450.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-333, -441.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-329.4444444444448, -443)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-321.88888888888914, -440.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-320.11111111111131, -436.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-312.11111111111131, -433.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-310.33333333333348, -435.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-306.33333333333348, -435)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-306.33333333333348, -431.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-302.33333333333348, -433.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-293.88888888888914, -431.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-289.88888888888914, -436.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-285, -434.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-282.77777777777806, -435)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-281.4444444444448, -432.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-272.55555555555566, -431.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-268.11111111111131, -425.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-261, -422.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-256.11111111111131, -417.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-251.66666666666674, -410.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-251.66666666666674, -405.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-248.11111111111131, -401.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-240.11111111111131, -399.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-237.88888888888914, -393.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-234.77777777777806, -387.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-236.55555555555566, -381.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-236.11111111111131, -376.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-234.77777777777806, -369.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-237.4444444444448, -367)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-245, -363.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-254.77777777777806, -362.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-261.4444444444448, -362.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-260.11111111111131, -359)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-269.4444444444448, -359.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-278.33333333333348, -363.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-281.88888888888914, -359.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-286.33333333333348, -359.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-297.88888888888914, -360.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-299.2222222222224, -363.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-305.88888888888914, -363)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-309.88888888888914, -361.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-315.2222222222224, -359.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-317.88888888888914, -350.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-317, -346.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-318.77777777777806, -343.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-316.55555555555566, -337.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-309.4444444444448, -333.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-305.88888888888914, -327.88888888888903)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-309.4444444444448, -325.2222222222224)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-308.11111111111131, -322.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-304.55555555555566, -320.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-300.55555555555566, -314.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-301.88888888888914, -310.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-299.2222222222224, -305.2222222222224)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-299.66666666666674, -300.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-295.66666666666674, -298.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-296.55555555555566, -295)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-293.4444444444448, -293.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-292.55555555555566, -291)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-289.88888888888914, -293.2222222222224)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-287.2222222222224, -289.2222222222224)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-282.77777777777806, -289.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-281.4444444444448, -287)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-275.2222222222224, -284.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-273, -280.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-269, -279.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-266.33333333333348, -275.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-269, -273.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-266.77777777777806, -271.88888888888903)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-261.88888888888914, -271.88888888888903)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-259.66666666666674, -268.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-262.33333333333348, -267.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-259.66666666666674, -264.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-253, -263.88888888888903)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-250.77777777777806, -259.88888888888903)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-249.88888888888914, -256.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-250.33333333333348, -253.2222222222224)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-247.66666666666674, -250.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-244.55555555555566, -248.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-242.33333333333348, -251.88888888888903)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-238.77777777777806, -248.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-235.66666666666674, -250.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-229.4444444444448, -245.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-226.33333333333348, -246.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-225.4444444444448, -241.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-222.33333333333348, -237.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-221.4444444444448, -239.88888888888903)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-210.77777777777806, -238.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-210.33333333333348, -232.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-208.11111111111131, -229.2222222222224)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-205.88888888888914, -223)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-203.2222222222224, -215)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-204.55555555555566, -206.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-201.4444444444448, -204.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-200.55555555555566, -198.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-202.77777777777806, -196.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-201, -190.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-196.11111111111131, -187.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-190.77777777777806, -187.88888888888903)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-185.4444444444448, -184.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-179.2222222222224, -183)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-177.88888888888914, -179.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-178.77777777777806, -175)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-178.77777777777806, -166.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-176.55555555555566, -160.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-173.88888888888914, -155.88888888888903)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-172.55555555555566, -150.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-166.77777777777806, -143.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-157.88888888888914, -142.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-149, -142.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-141.88888888888914, -144.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-141.4444444444448, -147.88888888888903)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-130.33333333333348, -147)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-123.2222222222224, -148.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-118.33333333333348, -153.2222222222224)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-118.33333333333348, -150.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-108.11111111111131, -152.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-108.55555555555566, -150.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-104.55555555555566, -151)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-101.4444444444448, -145.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-104.55555555555566, -142.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-101.4444444444448, -140.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-102.33333333333348, -136.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-106.77777777777806, -135.88888888888903)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-109.88888888888914, -133.2222222222224)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-109.88888888888914, -125.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-112.11111111111131, -122.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-114.77777777777806, -120.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-113.88888888888914, -115)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-109.4444444444448, -106.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-103.2222222222224, -104.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-97, -103.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-90.777777777778056, -99)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-90.777777777778056, -95)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-86.333333333333485, -97.666666666666742)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-78.333333333333485, -96.333333333333371)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-75.222222222222399, -95)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-72.111111111111313, -97.222222222222399)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-69.444444444444798, -95.888888888889028)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-61.888888888889142, -98.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-59.222222222222399, -95.444444444444571)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-54.777777777778056, -95.444444444444571)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-53, -92.333333333333371)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-44.111111111111313, -94.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-42.777777777778056, -95.444444444444571)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-39.666666666666742, -94.555555555555657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-38.777777777778056, -91.888888888889028)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-35.666666666666742, -90.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-35.222222222222399, -86.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-39.222222222222399, -85.666666666666742)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-44.555555555555657, -82.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-50.777777777778056, -79.888888888889028)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-58.333333333333485, -79.888888888889028)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-62.333333333333485, -79.888888888889028)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-66.777777777778056, -76.777777777777828)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-66.333333333333485, -73.666666666666742)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-63.222222222222399, -70.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-58.777777777778056, -68.333333333333371)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-53.444444444444798, -61.666666666666742)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-50.333333333333485, -58.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-45.888888888889142, -53.666666666666742)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-39.222222222222399, -52.333333333333371)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-33, -52.777777777777828)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-29, -48.777777777777828)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-26.777777777778056, -51.444444444444571)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-23.222222222222399, -50.555555555555657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-22.333333333333485, -48.333333333333371)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-18.777777777778056, -47.888888888889028)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-13.888888888889142, -43.444444444444571)) + Result.extend_point (create {EV_COORDINATE}.make_precise (0.77777777777760093, -40.333333333333371)) + Result.extend_point (create {EV_COORDINATE}.make_precise (7, -39)) + Result.extend_point (create {EV_COORDINATE}.make_precise (7.8888888888886868, -41.666666666666742)) + Result.extend_point (create {EV_COORDINATE}.make_precise (16.777777777777601, -39.444444444444571)) + Result.extend_point (create {EV_COORDINATE}.make_precise (13.666666666666515, -38.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (15.444444444444343, -35)) + Result.extend_point (create {EV_COORDINATE}.make_precise (20.333333333333258, -34.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (22.555555555555202, -36.333333333333371)) + Result.extend_point (create {EV_COORDINATE}.make_precise (28.777777777777601, -36.777777777777828)) + Result.extend_point (create {EV_COORDINATE}.make_precise (33.666666666666515, -37.666666666666742)) + Result.extend_point (create {EV_COORDINATE}.make_precise (37.666666666666515, -39.444444444444571)) + Result.extend_point (create {EV_COORDINATE}.make_precise (36.777777777777601, -36.777777777777828)) + Result.extend_point (create {EV_COORDINATE}.make_precise (31.444444444444343, -35.444444444444571)) + Result.extend_point (create {EV_COORDINATE}.make_precise (28.777777777777601, -32.777777777777828)) + Result.extend_point (create {EV_COORDINATE}.make_precise (26.111111111110858, -34.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (23.444444444444343, -30.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (19.444444444444343, -29.666666666666742)) + Result.extend_point (create {EV_COORDINATE}.make_precise (17.666666666666515, -26.555555555555657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (11, -28.333333333333371)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-3.6666666666667425, -31.888888888889028)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-7.2222222222223991, -29.666666666666742)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-7.6666666666667425, -24.333333333333371)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-5, -22.555555555555657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (3.4444444444443434, -21.222222222222399)) + Result.extend_point (create {EV_COORDINATE}.make_precise (6.5555555555552019, -19.444444444444571)) + Result.extend_point (create {EV_COORDINATE}.make_precise (14.555555555555202, -17.222222222222399)) + Result.extend_point (create {EV_COORDINATE}.make_precise (19.888888888888687, -16.777777777777828)) + Result.extend_point (create {EV_COORDINATE}.make_precise (19.444444444444343, -11.888888888889028)) + Result.extend_point (create {EV_COORDINATE}.make_precise (23, -10.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (22.555555555555202, -6.5555555555556566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (16.777777777777601, -6.5555555555556566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (14.111111111110858, -5.2222222222223991)) + Result.extend_point (create {EV_COORDINATE}.make_precise (11.888888888888687, -3.4444444444445708)) + Result.extend_point (create {EV_COORDINATE}.make_precise (9.6666666666665151, -1.2222222222223991)) + Result.extend_point (create {EV_COORDINATE}.make_precise (5.2222222222219443, -3.4444444444445708)) + Result.extend_point (create {EV_COORDINATE}.make_precise (2.5555555555552019, -3)) + end + +invariant + + correct_port: attached target_imp implies port = game.lae + +end diff --git a/jj_vitp/Interface/widgets/port_widgets/maloelap_widget.e b/jj_vitp/Interface/widgets/port_widgets/maloelap_widget.e new file mode 100644 index 0000000..54c32d6 --- /dev/null +++ b/jj_vitp/Interface/widgets/port_widgets/maloelap_widget.e @@ -0,0 +1,117 @@ +note + description: "[ + The widget representing this port + ]" + author: "Jimmy J. Johnson" + +class + MALOELAP_WIDGET + +inherit + +-- GREEN_PORT_WIDGET +-- undefine +-- paint +-- redefine +-- create_interface_objects, +-- initialize, +-- position_widgets, +-- build_land +-- end + + ISLAND_PORT_WIDGET + redefine + create_interface_objects, +-- initialize, + position_widgets, + build_land, + rotation_amount + end + +create + make + +feature {NONE} -- Initialization + + create_interface_objects + -- Initialize attributes + do + taroa_island := taroa_island_imp + Precursor {ISLAND_PORT_WIDGET} +-- Precursor {GREEN_PORT_WIDGET} + end + +-- initialize +-- -- Set up the widgets in Current. +-- do +-- Precursor {ISLAND_PORT_WIDGET} +---- Precursor {GREEN_PORT_WIDGET} +-- end + + position_widgets + -- Move Current and contained widgets to correct + -- location and set their their sizes + do + Precursor {ISLAND_PORT_WIDGET} +-- Precursor {GREEN_PORT_WIDGET} + scale_widget (land, 0.21) + rotate_widget (land, 13.0) + center_on (521, 345) + translate_widget (land, -26, -8) +-- text_widget.center_on_dot (dot) +-- translate_widget (name_mt, 0, 1) + translate_widget (dot, 2, 5) +-- marker.center_on_dot (dot) + marker.set_x_y (dot.x, dot.y) + end + + build_land + -- Add widgets to Current + do + Precursor {ISLAND_PORT_WIDGET} + land.extend (taroa_island) + end + +feature -- Status report + + is_red: BOOLEAN = False + -- Does Current represent a red (i.e. major) port? + +feature {NONE} -- Implementation + + taroa_island: EV_MODEL_POLYGON + +feature {NONE} -- Implementation + + taroa_island_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (0, 0)) + Result.extend_point (create {EV_COORDINATE}.make_precise (19.999999999999773, -1.3333333333332575)) + Result.extend_point (create {EV_COORDINATE}.make_precise (35.111111111111086, 2.6666666666665151)) + Result.extend_point (create {EV_COORDINATE}.make_precise (47.555555555555429, 14.222222222222399)) + Result.extend_point (create {EV_COORDINATE}.make_precise (55.111111111111086, 16.444444444444343)) + Result.extend_point (create {EV_COORDINATE}.make_precise (61.333333333333258, 27.111111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (53.333333333333258, 39.111111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (52.444444444444116, 52)) + Result.extend_point (create {EV_COORDINATE}.make_precise (54.222222222221944, 57.333333333333485)) + Result.extend_point (create {EV_COORDINATE}.make_precise (48, 59.111111111110858)) + Result.extend_point (create {EV_COORDINATE}.make_precise (35.111111111111086, 57.333333333333485)) + Result.extend_point (create {EV_COORDINATE}.make_precise (29.333333333333258, 48.444444444444343)) + Result.extend_point (create {EV_COORDINATE}.make_precise (28, 40.888888888889142)) + Result.extend_point (create {EV_COORDINATE}.make_precise (16.888888888888914, 20.888888888889142)) + Result.extend_point (create {EV_COORDINATE}.make_precise (9.3333333333332575, 14.222222222222399)) + end + +feature {NONE} -- Implementation + + rotation_amount: REAL_64 = 180.0 + -- Make the arrow point north-east + +invariant + + corrrect_port: attached target_imp implies port = game.maloelap + +end diff --git a/jj_vitp/Interface/widgets/port_widgets/midway_widget.e b/jj_vitp/Interface/widgets/port_widgets/midway_widget.e new file mode 100644 index 0000000..f51d168 --- /dev/null +++ b/jj_vitp/Interface/widgets/port_widgets/midway_widget.e @@ -0,0 +1,152 @@ +note + description: "[ + The widget representing this port + ]" + author: "Jimmy J. Johnson" + +class + MIDWAY_WIDGET + +inherit + +-- GREEN_PORT_WIDGET +-- undefine +-- paint +-- redefine +-- create_interface_objects, +-- initialize, +-- position_widgets, +-- build_land +-- end + + ISLAND_PORT_WIDGET + redefine + create_interface_objects, +-- initialize, + position_widgets, + build_land, + rotation_amount + end + +create + make + +feature {NONE} -- Initialization + + create_interface_objects + -- Initialize attributes + do + henderson_field := henderson_field_imp + aux_field := aux_field_imp + Precursor {ISLAND_PORT_WIDGET} +-- Precursor {GREEN_PORT_WIDGET} + end + +-- initialize +-- -- Set up the widgets in Current. +-- do +-- Precursor {ISLAND_PORT_WIDGET} +---- Precursor {GREEN_PORT_WIDGET} +-- end + + position_widgets + -- Move Current and contained widgets to correct + -- location and set their their sizes + do + Precursor {ISLAND_PORT_WIDGET} +-- Precursor {GREEN_PORT_WIDGET} + center_on (565, 217) + translate_widget (land, -24, 0) + translate_widget (name_mt, 1, 1) + translate_widget (dot, 3, 3) + scale_widget (land, 0.07) + rotate_widget (land, 13.0) +-- marker.center_on_dot (dot) + marker.set_x_y (dot.x, dot.y) + translate_widget (marker, 5, 7) + end + + build_land + -- Add widgets to Current + do + Precursor {ISLAND_PORT_WIDGET} + land.extend (henderson_field) + land.extend (aux_field) + end + +feature -- Status report + + is_red: BOOLEAN = False + -- Does Current represent a red (i.e. major) port? + +feature {NONE} -- Implementation + + henderson_field: EV_MODEL_POLYGON + aux_field: EV_MODEL_POLYGON + +feature {NONE} -- Implementation + + henderson_field_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (0, 0)) + Result.extend_point (create {EV_COORDINATE}.make_precise (18, -15)) + Result.extend_point (create {EV_COORDINATE}.make_precise (55, -15)) + Result.extend_point (create {EV_COORDINATE}.make_precise (91, -24)) + Result.extend_point (create {EV_COORDINATE}.make_precise (110, -11)) + Result.extend_point (create {EV_COORDINATE}.make_precise (127, -6)) + Result.extend_point (create {EV_COORDINATE}.make_precise (144, -9)) + Result.extend_point (create {EV_COORDINATE}.make_precise (153, -5)) + Result.extend_point (create {EV_COORDINATE}.make_precise (152, 6)) + Result.extend_point (create {EV_COORDINATE}.make_precise (138, 8)) + Result.extend_point (create {EV_COORDINATE}.make_precise (130, 7)) + Result.extend_point (create {EV_COORDINATE}.make_precise (111, 14)) + Result.extend_point (create {EV_COORDINATE}.make_precise (106, 31)) + Result.extend_point (create {EV_COORDINATE}.make_precise (127, 34)) + Result.extend_point (create {EV_COORDINATE}.make_precise (139, 35)) + Result.extend_point (create {EV_COORDINATE}.make_precise (152, 32)) + Result.extend_point (create {EV_COORDINATE}.make_precise (155, 44)) + Result.extend_point (create {EV_COORDINATE}.make_precise (79, 80)) + Result.extend_point (create {EV_COORDINATE}.make_precise (80, 104)) + Result.extend_point (create {EV_COORDINATE}.make_precise (70, 86)) + Result.extend_point (create {EV_COORDINATE}.make_precise (48, 92)) + Result.extend_point (create {EV_COORDINATE}.make_precise (43, 99)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-44, 131)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-54, 125)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-54, 119)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-14, 67)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-6, 41)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-2, 19)) + end + + aux_field_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (237, 53)) + Result.extend_point (create {EV_COORDINATE}.make_precise (277, 40)) + Result.extend_point (create {EV_COORDINATE}.make_precise (306, 26)) + Result.extend_point (create {EV_COORDINATE}.make_precise (340, -9)) + Result.extend_point (create {EV_COORDINATE}.make_precise (344, -23)) + Result.extend_point (create {EV_COORDINATE}.make_precise (351, -16)) + Result.extend_point (create {EV_COORDINATE}.make_precise (366, 30)) + Result.extend_point (create {EV_COORDINATE}.make_precise (373, 37)) + Result.extend_point (create {EV_COORDINATE}.make_precise (370, 51)) + Result.extend_point (create {EV_COORDINATE}.make_precise (348, 57)) + Result.extend_point (create {EV_COORDINATE}.make_precise (342, 55)) + Result.extend_point (create {EV_COORDINATE}.make_precise (333, 61)) + Result.extend_point (create {EV_COORDINATE}.make_precise (310, 64)) + Result.extend_point (create {EV_COORDINATE}.make_precise (298, 62)) + Result.extend_point (create {EV_COORDINATE}.make_precise (284, 68)) + Result.extend_point (create {EV_COORDINATE}.make_precise (267, 62)) + end + +feature {NONE} -- Implementation + + rotation_amount: REAL_64 = 45.0 + -- Make the arrow point north-east + +end diff --git a/jj_vitp/Interface/widgets/port_widgets/new_hebrides_widget.e b/jj_vitp/Interface/widgets/port_widgets/new_hebrides_widget.e new file mode 100644 index 0000000..2b9781e --- /dev/null +++ b/jj_vitp/Interface/widgets/port_widgets/new_hebrides_widget.e @@ -0,0 +1,264 @@ +note + description: "[ + The widget representing this port + ]" + author: "Jimmy J. Johnson" + +class + NEW_HEBRIDES_WIDGET + +inherit + +-- GREEN_PORT_WIDGET +-- undefine +-- paint +-- redefine +-- create_interface_objects, +-- initialize, +-- position_widgets, +-- build_land +-- end + + ISLAND_PORT_WIDGET + redefine + create_interface_objects, + position_widgets, + build_land, + rotation_amount + end + +create + make + +feature {NONE} -- Initialization + + create_interface_objects + -- Initialize attributes + do + vanuatu := vanuatu_imp + malekula := malekula_imp + ambrym := ambrym_imp + pentecost := pentecost_imp + maewo := maewo_imp + ambae := ambae_imp + Precursor {ISLAND_PORT_WIDGET} +-- Precursor {GREEN_PORT_WIDGET} + end + + position_widgets + -- Move Current and contained widgets to correct + -- location and set their their sizes + do +-- Precursor {GREEN_PORT_WIDGET} + Precursor {ISLAND_PORT_WIDGET} +-- marker.center_on_dot (dot) + marker.set_x_y (dot.x, dot.y) + scale_widget (land, 0.55) + rotate_widget (land, 13.0) + center_on (450, 511) + translate_widget (land, -10, -32) + translate_widget (name_mt, -1, -3) + translate_widget (marker, 0, 7) + bring_to_front (marker) + end + + build_land + -- Add widgets to Current + do + Precursor {ISLAND_PORT_WIDGET} + land.extend (vanuatu) + land.extend (malekula) + land.extend (ambrym) + land.extend (pentecost) + land.extend (maewo) + land.extend (ambae) + end + +feature -- Status report + + is_red: BOOLEAN = False + -- Does Current represent a red (i.e. major) port? + +feature {NONE} -- Implementation + + vanuatu: EV_MODEL_POLYGON + malekula: EV_MODEL_POLYGON + ambrym: EV_MODEL_POLYGON + pentecost: EV_MODEL_POLYGON + maewo: EV_MODEL_POLYGON + ambae: EV_MODEL_POLYGON + + +feature {NONE} -- Implementation + + vanuatu_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (0, 0)) + Result.extend_point (create {EV_COORDINATE}.make_precise (0, -7.4074074074075043)) + Result.extend_point (create {EV_COORDINATE}.make_precise (2.9629629629630472, -11.259259259259238)) + Result.extend_point (create {EV_COORDINATE}.make_precise (4.7407407407408755, -9.7777777777778283)) + Result.extend_point (create {EV_COORDINATE}.make_precise (8.8888888888889142, -4.7407407407407618)) + Result.extend_point (create {EV_COORDINATE}.make_precise (11.851851851851961, 0.29629629629630472)) + Result.extend_point (create {EV_COORDINATE}.make_precise (11.851851851851961, 5.925925925925867)) + Result.extend_point (create {EV_COORDINATE}.make_precise (13.925925925925981, 13.037037037036953)) + Result.extend_point (create {EV_COORDINATE}.make_precise (18.074074074074247, 13.037037037036953)) + Result.extend_point (create {EV_COORDINATE}.make_precise (20.444444444444343, 10.666666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (19.851851851851961, 8.2962962962963047)) + Result.extend_point (create {EV_COORDINATE}.make_precise (21.333333333333371, 4.1481481481481524)) + Result.extend_point (create {EV_COORDINATE}.make_precise (19.851851851851961, 2.3703703703703241)) + Result.extend_point (create {EV_COORDINATE}.make_precise (23.407407407407618, 2.3703703703703241)) + Result.extend_point (create {EV_COORDINATE}.make_precise (29.03703703703718, 5.0370370370369528)) + Result.extend_point (create {EV_COORDINATE}.make_precise (24.888888888888914, 4.4444444444444571)) + Result.extend_point (create {EV_COORDINATE}.make_precise (25.777777777777715, 7.4074074074073906)) + Result.extend_point (create {EV_COORDINATE}.make_precise (24.592592592592609, 9.1851851851852189)) + Result.extend_point (create {EV_COORDINATE}.make_precise (26.370370370370438, 12.148148148148152)) + Result.extend_point (create {EV_COORDINATE}.make_precise (29.925925925925981, 11.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (32, 18.370370370370324)) + Result.extend_point (create {EV_COORDINATE}.make_precise (30.814814814814781, 21.629629629629676)) + Result.extend_point (create {EV_COORDINATE}.make_precise (34.074074074074247, 28.444444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (31.703703703703809, 31.407407407407391)) + Result.extend_point (create {EV_COORDINATE}.make_precise (34.666666666666742, 31.703703703703582)) + Result.extend_point (create {EV_COORDINATE}.make_precise (33.777777777777715, 34.962962962962933)) + Result.extend_point (create {EV_COORDINATE}.make_precise (33.481481481481524, 38.222222222222172)) + Result.extend_point (create {EV_COORDINATE}.make_precise (31.407407407407618, 41.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (26.666666666666742, 40)) + Result.extend_point (create {EV_COORDINATE}.make_precise (25.481481481481524, 37.333333333333371)) + Result.extend_point (create {EV_COORDINATE}.make_precise (28.148148148148152, 34.666666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (31.111111111111086, 34.666666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (26.962962962963047, 33.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (24, 34.370370370370324)) + Result.extend_point (create {EV_COORDINATE}.make_precise (17.481481481481524, 34.074074074074019)) + Result.extend_point (create {EV_COORDINATE}.make_precise (16.592592592592609, 36.148148148148152)) + Result.extend_point (create {EV_COORDINATE}.make_precise (14.814814814814781, 35.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (14.814814814814781, 37.333333333333371)) + Result.extend_point (create {EV_COORDINATE}.make_precise (10.370370370370438, 36.740740740740762)) + Result.extend_point (create {EV_COORDINATE}.make_precise (10.666666666666742, 34.370370370370324)) + Result.extend_point (create {EV_COORDINATE}.make_precise (7.4074074074076179, 30.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (5.9259259259259807, 25.777777777777715)) + Result.extend_point (create {EV_COORDINATE}.make_precise (3.8518518518519613, 24.296296296296305)) + Result.extend_point (create {EV_COORDINATE}.make_precise (3.8518518518519613, 15.407407407407391)) + Result.extend_point (create {EV_COORDINATE}.make_precise (3.8518518518519613, 9.1851851851852189)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1.7777777777777146, 4.4444444444444571)) + end + + malekula_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (29.03703703703718, 58.962962962962933)) + Result.extend_point (create {EV_COORDINATE}.make_precise (29.62962962962979, 54.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (28.444444444444343, 50.074074074074019)) + Result.extend_point (create {EV_COORDINATE}.make_precise (32, 46.814814814814781)) + Result.extend_point (create {EV_COORDINATE}.make_precise (34.370370370370438, 49.777777777777715)) + Result.extend_point (create {EV_COORDINATE}.make_precise (35.555555555555543, 48.296296296296305)) + Result.extend_point (create {EV_COORDINATE}.make_precise (37.925925925925981, 53.037037037036953)) + Result.extend_point (create {EV_COORDINATE}.make_precise (39.703703703703809, 52.148148148148152)) + Result.extend_point (create {EV_COORDINATE}.make_precise (39.703703703703809, 55.703703703703582)) + Result.extend_point (create {EV_COORDINATE}.make_precise (42.962962962963047, 61.037037037036953)) + Result.extend_point (create {EV_COORDINATE}.make_precise (44.740740740740875, 57.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (45.333333333333371, 61.629629629629562)) + Result.extend_point (create {EV_COORDINATE}.make_precise (51.555555555555543, 66.074074074074019)) + Result.extend_point (create {EV_COORDINATE}.make_precise (57.185185185185219, 70.814814814814781)) + Result.extend_point (create {EV_COORDINATE}.make_precise (60.148148148148152, 74.666666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (59.555555555555543, 77.925925925925753)) + Result.extend_point (create {EV_COORDINATE}.make_precise (57.481481481481524, 76.444444444444343)) + Result.extend_point (create {EV_COORDINATE}.make_precise (57.481481481481524, 78.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (53.925925925925981, 78.222222222222172)) + Result.extend_point (create {EV_COORDINATE}.make_precise (51.851851851851961, 76.444444444444343)) + Result.extend_point (create {EV_COORDINATE}.make_precise (48, 77.333333333333371)) + Result.extend_point (create {EV_COORDINATE}.make_precise (49.185185185185219, 79.703703703703582)) + Result.extend_point (create {EV_COORDINATE}.make_precise (43.259259259259352, 81.777777777777715)) + Result.extend_point (create {EV_COORDINATE}.make_precise (40.296296296296418, 78.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (42.074074074074247, 75.851851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (37.925925925925981, 70.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (39.407407407407618, 63.407407407407391)) + Result.extend_point (create {EV_COORDINATE}.make_precise (36.148148148148152, 59.851851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (34.074074074074247, 61.037037037036953)) + end + + ambrym_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (63.407407407407618, 64.296296296296191)) + Result.extend_point (create {EV_COORDINATE}.make_precise (66.962962962963047, 62.814814814814781)) + Result.extend_point (create {EV_COORDINATE}.make_precise (69.333333333333371, 61.925925925925753)) + Result.extend_point (create {EV_COORDINATE}.make_precise (75.259259259259352, 56.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (77.03703703703718, 62.814814814814781)) + Result.extend_point (create {EV_COORDINATE}.make_precise (81.185185185185219, 66.666666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (81.777777777777715, 69.037037037036953)) + Result.extend_point (create {EV_COORDINATE}.make_precise (78.814814814814781, 70.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (75.851851851851961, 70.222222222222172)) + Result.extend_point (create {EV_COORDINATE}.make_precise (73.185185185185219, 72)) + Result.extend_point (create {EV_COORDINATE}.make_precise (68.444444444444343, 70.222222222222172)) + Result.extend_point (create {EV_COORDINATE}.make_precise (65.481481481481524, 67.555555555555543)) + end + + pentecost_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (73.481481481481524, 28.444444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (75.555555555555543, 27.259259259259238)) + Result.extend_point (create {EV_COORDINATE}.make_precise (76.740740740740875, 31.407407407407391)) + Result.extend_point (create {EV_COORDINATE}.make_precise (77.03703703703718, 36.444444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (79.111111111111086, 46.222222222222172)) + Result.extend_point (create {EV_COORDINATE}.make_precise (81.185185185185219, 50.370370370370324)) + Result.extend_point (create {EV_COORDINATE}.make_precise (76.740740740740875, 54.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (74.666666666666742, 53.629629629629562)) + Result.extend_point (create {EV_COORDINATE}.make_precise (75.555555555555543, 48.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (73.777777777777715, 43.851851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (73.481481481481524, 41.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (71.111111111111086, 38.814814814814781)) + Result.extend_point (create {EV_COORDINATE}.make_precise (72.888888888888914, 33.185185185185219)) + end + + maewo_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (67.851851851851961, 1.7777777777777146)) + Result.extend_point (create {EV_COORDINATE}.make_precise (71.111111111111086, 0.59259259259249575)) + Result.extend_point (create {EV_COORDINATE}.make_precise (73.777777777777715, 7.7037037037035816)) + Result.extend_point (create {EV_COORDINATE}.make_precise (74.074074074074247, 13.629629629629676)) + Result.extend_point (create {EV_COORDINATE}.make_precise (76.740740740740875, 16)) + Result.extend_point (create {EV_COORDINATE}.make_precise (75.259259259259352, 18.074074074074019)) + Result.extend_point (create {EV_COORDINATE}.make_precise (76.740740740740875, 21.333333333333371)) + Result.extend_point (create {EV_COORDINATE}.make_precise (75.555555555555543, 24.296296296296305)) + Result.extend_point (create {EV_COORDINATE}.make_precise (72, 24.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (71.407407407407618, 20.148148148148152)) + Result.extend_point (create {EV_COORDINATE}.make_precise (72, 16.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (69.62962962962979, 8.5925925925924957)) + Result.extend_point (create {EV_COORDINATE}.make_precise (69.03703703703718, 4.7407407407407618)) + end + + ambae_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (52.148148148148152, 26.666666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (55.111111111111086, 23.111111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (60.444444444444343, 20.444444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (65.185185185185219, 18.962962962962933)) + Result.extend_point (create {EV_COORDINATE}.make_precise (68.444444444444343, 19.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (66.074074074074247, 21.925925925925867)) + Result.extend_point (create {EV_COORDINATE}.make_precise (63.407407407407618, 24.592592592592496)) + Result.extend_point (create {EV_COORDINATE}.make_precise (60.740740740740875, 28.740740740740762)) + Result.extend_point (create {EV_COORDINATE}.make_precise (56.592592592592609, 28.148148148148152)) + Result.extend_point (create {EV_COORDINATE}.make_precise (54.222222222222172, 28.740740740740762)) + end + +feature {NONE} -- Implementation + + rotation_amount: REAL_64 = -90.0 + -- Make the arrow point north-east + +end diff --git a/jj_vitp/Interface/widgets/port_widgets/okinawa_widget.e b/jj_vitp/Interface/widgets/port_widgets/okinawa_widget.e new file mode 100644 index 0000000..64b3fda --- /dev/null +++ b/jj_vitp/Interface/widgets/port_widgets/okinawa_widget.e @@ -0,0 +1,387 @@ +note + description: "[ + The widget representing this port + ]" + author: "Jimmy J. Johnson" + +class + OKINAWA_WIDGET + +inherit + +-- GREEN_PORT_WIDGET +-- undefine +-- paint +-- redefine +-- create_interface_objects, +-- initialize, +-- position_widgets, +-- build_land +-- end + + ISLAND_PORT_WIDGET + redefine + create_interface_objects, +-- initialize, + position_widgets, + build_land, + rotation_amount + end + +create + make + +feature {NONE} -- Initialization + + create_interface_objects + -- Initialize attributes + do + mainland := mainland_imp + Precursor {ISLAND_PORT_WIDGET} +-- Precursor {GREEN_PORT_WIDGET} + end + +-- initialize +-- -- Set up the widgets in Current. +-- do +-- Precursor {ISLAND_PORT_WIDGET} +---- Precursor {GREEN_PORT_WIDGET} +-- end + + position_widgets + -- Move Current and contained widgets to correct + -- location and set their their sizes + do + Precursor {ISLAND_PORT_WIDGET} +-- Precursor {GREEN_PORT_WIDGET} + center_on (295, 174) + translate_widget (land, 28, -80) + translate_widget (name_mt, 0, 0) +-- translate_widget (dot, -30, -30) +-- marker.center_on_dot (dot) + marker.set_x_y (dot.x, dot.y) + translate_widget (marker, 2, 5) + scale_widget (land, 0.04) + rotate_widget (land, 13.0) + bring_to_front (marker) + end + + build_land + -- Add widgets to Current + do + Precursor {ISLAND_PORT_WIDGET} + land.extend (mainland) + end + +feature -- Status report + + is_red: BOOLEAN = False + -- Does Current represent a red (i.e. major) port? + +feature {NONE} -- Implementation + + mainland: EV_MODEL_POLYGON + +feature {NONE} -- Implementation + + mainland_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (0, 0)) + Result.extend_point (create {EV_COORDINATE}.make_precise (8, 1)) + Result.extend_point (create {EV_COORDINATE}.make_precise (6, 7)) + Result.extend_point (create {EV_COORDINATE}.make_precise (19, 15)) + Result.extend_point (create {EV_COORDINATE}.make_precise (18, 21)) + Result.extend_point (create {EV_COORDINATE}.make_precise (24, 22)) + Result.extend_point (create {EV_COORDINATE}.make_precise (26, 29)) + Result.extend_point (create {EV_COORDINATE}.make_precise (32, 23)) + Result.extend_point (create {EV_COORDINATE}.make_precise (37, 25)) + Result.extend_point (create {EV_COORDINATE}.make_precise (39, 37)) + Result.extend_point (create {EV_COORDINATE}.make_precise (48, 52)) + Result.extend_point (create {EV_COORDINATE}.make_precise (47, 66)) + Result.extend_point (create {EV_COORDINATE}.make_precise (53, 77)) + Result.extend_point (create {EV_COORDINATE}.make_precise (51, 85)) + Result.extend_point (create {EV_COORDINATE}.make_precise (49, 96)) + Result.extend_point (create {EV_COORDINATE}.make_precise (53, 101)) + Result.extend_point (create {EV_COORDINATE}.make_precise (47, 105)) + Result.extend_point (create {EV_COORDINATE}.make_precise (49, 114)) + Result.extend_point (create {EV_COORDINATE}.make_precise (39, 117)) + Result.extend_point (create {EV_COORDINATE}.make_precise (37, 124)) + Result.extend_point (create {EV_COORDINATE}.make_precise (31, 124)) + Result.extend_point (create {EV_COORDINATE}.make_precise (32, 133)) + Result.extend_point (create {EV_COORDINATE}.make_precise (29, 135)) + Result.extend_point (create {EV_COORDINATE}.make_precise (28, 142)) + Result.extend_point (create {EV_COORDINATE}.make_precise (22, 147)) + Result.extend_point (create {EV_COORDINATE}.make_precise (19, 161)) + Result.extend_point (create {EV_COORDINATE}.make_precise (10, 167)) + Result.extend_point (create {EV_COORDINATE}.make_precise (9, 175)) + Result.extend_point (create {EV_COORDINATE}.make_precise (3, 176)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1, 181)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1, 186)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-4, 189)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-14, 199)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-21, 199)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-37, 202)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-53, 203)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-65, 200)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-76, 200)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-75, 207)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-71, 217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-75, 227)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-85, 224)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-91, 223)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-89, 233)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-83, 237)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-80, 247)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-75, 249)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-83, 251)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-82, 261)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-88, 260)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-103, 263)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-110, 273)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-117, 274)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-112, 281)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-123, 276)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-129, 270)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-138, 264)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-148, 267)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-155, 263)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-157, 267)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-152, 276)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-147, 288)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-159, 289)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-160, 295)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-164, 296)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-175, 295)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-181, 295)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-182, 301)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-186, 299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-191, 301)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-185, 310)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-188, 321)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-199, 329)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-209, 331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-213, 325)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-223, 326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-220, 330)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-224, 335)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-222, 341)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-227, 345)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-223, 355)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-233, 353)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-241, 355)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-248, 351)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-256, 348)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-264, 346)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-276, 343)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-285, 344)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-296, 354)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-299, 364)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-307, 363)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-310, 369)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-302, 371)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-300, 378)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-290, 386)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-280, 396)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-274, 398)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-274, 407)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-275, 415)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-269, 431)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-255, 442)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-246, 450)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-240, 450)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-234, 458)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-242, 454)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-244, 457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-239, 464)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-245, 473)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-252, 468)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-259, 467)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-269, 454)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-278, 446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-291, 447)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-303, 444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-304, 449)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-296, 453)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-302, 457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-309, 458)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-310, 465)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-317, 464)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-321, 473)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-318, 481)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-321, 489)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-329, 495)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-333, 504)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-339, 510)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-340, 527)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-352, 545)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-350, 554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-348, 568)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-339, 571)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-339, 565)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-336, 559)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-315, 554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-315, 563)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-307, 568)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-307, 577)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-315, 579)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-325, 588)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-331, 595)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-338, 605)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-351, 608)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-365, 614)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-371, 623)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-381, 634)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-387, 640)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-398, 640)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-410, 643)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-418, 652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-423, 650)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-435, 646)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-435, 627)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-432, 621)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-431, 614)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-428, 605)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-432, 604)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-435, 602)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-438, 608)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-442, 605)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-440, 597)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-442, 592)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-429, 588)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-440, 585)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-442, 576)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-438, 568)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-445, 571)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-445, 565)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-447, 557)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-450, 550)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-446, 546)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-441, 535)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-436, 534)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-424, 521)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-424, 510)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-412, 503)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-399, 491)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-392, 486)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-389, 491)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-380, 483)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-368, 474)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-361, 457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-367, 455)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-375, 443)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-373, 433)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-382, 408)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-389, 395)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-396, 375)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-394, 361)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-392, 353)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-386, 353)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-378, 364)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-374, 368)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-370, 362)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-358, 357)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-350, 347)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-341, 351)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-329, 350)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-330, 342)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-325, 334)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-312, 328)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-307, 320)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-299, 317)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-302, 312)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-302, 306)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-297, 299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-291, 303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-284, 297)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-276, 294)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-267, 297)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-258, 291)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-246, 290)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-244, 282)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-234, 273)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-228, 273)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-220, 267)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-211, 265)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-202, 249)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-200, 235)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-207, 231)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-219, 228)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-225, 222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-231, 222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-237, 219)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-243, 216)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-248, 223)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-255, 223)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-264, 218)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-269, 202)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-274, 187)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-274, 178)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-269, 170)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-269, 163)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-277, 153)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-275, 142)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-273, 133)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-256, 141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-252, 138)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-244, 139)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-229, 138)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-224, 134)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-205, 138)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-207, 142)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-181, 150)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-178, 145)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-182, 131)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-167, 133)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-166, 140)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-164, 146)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-172, 148)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-181, 156)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-190, 164)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-175, 159)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-168, 161)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-166, 169)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-164, 180)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-179, 180)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-190, 180)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-189, 174)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-195, 175)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-187, 185)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-178, 194)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-168, 197)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-162, 192)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-147, 191)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-135, 185)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-120, 178)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-112, 164)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-114, 159)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-103, 135)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-84, 134)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-82, 130)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-71, 126)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-68, 117)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-73, 111)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-75, 105)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-68, 105)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-57, 100)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-50, 96)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-48, 89)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-38, 86)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-25, 65)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-18, 59)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-18, 54)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-10, 41)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-11, 36)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-3, 19)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-7, 14)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-7, 4)) + end + +feature {NONE} -- Implementation + + rotation_amount: REAL_64 = 180.0 + -- Make the arrow point north-east + +end diff --git a/jj_vitp/Interface/widgets/port_widgets/pearl_harbor_widget.e b/jj_vitp/Interface/widgets/port_widgets/pearl_harbor_widget.e new file mode 100644 index 0000000..e02b8b6 --- /dev/null +++ b/jj_vitp/Interface/widgets/port_widgets/pearl_harbor_widget.e @@ -0,0 +1,513 @@ +note + description: "[ + The widget representing this port + ]" + author: "Jimmy J. Johnson" + +class + PEARL_HARBOR_WIDGET + +inherit + +-- RED_PORT_WIDGET +-- undefine +-- paint +-- redefine +-- create_interface_objects, +-- initialize, +-- extend_widgets, +-- position_widgets, +-- build_land +-- end + + ISLAND_PORT_WIDGET + redefine + create_interface_objects, + extend_widgets, + set_fonts_and_colors, + position_widgets, + build_land, + rotation_amount + end + +create + make + +feature {NONE} -- Initialization + + create_interface_objects + -- Initialize attributes + do + oahu := oahu_imp + kauai := kauai_imp + molokai := molokai_imp + maui := maui_imp + hawaii := hawaii_imp + lanai := lanai_imp + niihau := niihau_imp + create not_allowed_text.make_with_text ("(No British Allowed%Nexcept Victorious)") + create reinforcements_text.make_with_text ("U.S. Reinforcements%Nand the Victorious") + -- Make objects non-Void before calling Precursor, + -- because a qualified call is made in an EV_xx class. + Precursor {ISLAND_PORT_WIDGET} +-- Precursor {RED_PORT_WIDGET} + end + + set_fonts_and_colors + -- Set the default fonts for any text widgets and set + -- the default colors for any contained widgets. + do + Precursor {ISLAND_PORT_WIDGET} +-- Precursor {RED_PORT_WIDGET} + reinforcements_text.set_font (Subtext_font) + not_allowed_text.set_font (Subtext_font) + dot.show + dot.set_foreground_color (Silver) + end + + extend_widgets + -- Put widgets into Current. This cannot be done + -- in `create_interface_object', because cannot call + -- `extend' feature until all objects [in descendants] + -- are also created. + do + Precursor {ISLAND_PORT_WIDGET} +-- Precursor {RED_PORT_WIDGET} + extend (not_allowed_text) + extend (reinforcements_text) + end + + position_widgets + -- Move Current and contained widgets to correct + -- location and set their their sizes + do + Precursor {ISLAND_PORT_WIDGET} +-- Precursor {RED_PORT_WIDGET} + center_widget_on_other (land, dot) + center_widget_on_other (marker, dot) + scale_widget (land, 0.13) + rotate_widget (land, 13.0) + translate_widget (land, 10, -10) +-- name_mt.center_on_dot (dot) + translate_widget (name_mt, 3, -3) + translate_widget (anchor, -2, -8) + translate_widget (marker, 8, 5) + translate_widget (not_allowed_text, 45, 118) + translate_widget (reinforcements_text, 15, 85) + center_on (670, 315) + end + + build_land + -- Add widgets to Current + do + Precursor {ISLAND_PORT_WIDGET} + land.extend (oahu) + land.extend (kauai) + land.extend (molokai) + land.extend (maui) + land.extend (hawaii) + land.extend (lanai) + land.extend (niihau) + end + + not_allowed_text: EV_MODEL_TEXT + -- Extra text on some Red ports (e.g. "No British Allowed"). + + reinforcements_text: EV_MODEL_TEXT + -- Extra text about reinforcement placement + +feature -- Status report + + is_red: BOOLEAN = True + -- Does Current represent a red (i.e. major) port? + +feature {NONE} -- Implementation + + oahu: EV_MODEL_POLYGON + kauai: EV_MODEL_POLYGON + molokai: EV_MODEL_POLYGON + maui: EV_MODEL_POLYGON + hawaii: EV_MODEL_POLYGON + lanai: EV_MODEL_POLYGON + niihau: EV_MODEL_POLYGON + + +feature {NONE} -- Implementation + + oahu_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (0, 0)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-2.6666666666666856, 2.2222222222222285)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-7.1111111111110858, 0.88888888888891415)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-10.222222222222285, -1.7777777777777715)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-21.333333333333428, -4.4444444444444287)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-25.777777777777771, -4.4444444444444287)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-30.222222222222285, -3.5555555555555429)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-47.111111111111086, -1.7777777777777715)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-51.5555555555556, -8.4444444444444287)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-52.888888888888914, -16.444444444444429)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-59.111111111111086, -23.111111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-61.777777777777771, -30.666666666666686)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-68.888888888888914, -36.444444444444429)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-72, -47.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-77.333333333333428, -53.7777777777778)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-80, -56.888888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-70.666666666666686, -58.666666666666686)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-62.222222222222285, -58.666666666666686)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-53.333333333333428, -58.666666666666686)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-44.888888888888914, -62.222222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-40, -72.444444444444429)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-36, -78.666666666666686)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-28.444444444444457, -82.222222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-20.888888888888914, -84)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-17.333333333333428, -81.7777777777778)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-13.777777777777771, -73.333333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-11.111111111111086, -69.333333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-9.7777777777777715, -63.111111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-5.7777777777777715, -59.111111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-4, -54.222222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-0.44444444444445708, -54.222222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (4.8888888888889142, -46.222222222222257)) + Result.extend_point (create {EV_COORDINATE}.make_precise (5.3333333333333144, -39.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (4, -36.444444444444429)) + Result.extend_point (create {EV_COORDINATE}.make_precise (7.5555555555555429, -33.777777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (11.111111111111086, -31.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (12, -35.111111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (16, -36)) + Result.extend_point (create {EV_COORDINATE}.make_precise (23.111111111111086, -33.333333333333343)) + Result.extend_point (create {EV_COORDINATE}.make_precise (20.888888888888914, -27.111111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (15.111111111111086, -26.666666666666686)) + Result.extend_point (create {EV_COORDINATE}.make_precise (18.222222222222229, -24)) + Result.extend_point (create {EV_COORDINATE}.make_precise (22.666666666666572, -21.333333333333343)) + Result.extend_point (create {EV_COORDINATE}.make_precise (25.777777777777715, -21.333333333333343)) + Result.extend_point (create {EV_COORDINATE}.make_precise (28.888888888888914, -16.888888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (28.888888888888914, -13.333333333333343)) + Result.extend_point (create {EV_COORDINATE}.make_precise (37.333333333333314, -3.5555555555555429)) + Result.extend_point (create {EV_COORDINATE}.make_precise (33.333333333333314, 0.44444444444445708)) + Result.extend_point (create {EV_COORDINATE}.make_precise (28.4444444444444, 4.8888888888889142)) + Result.extend_point (create {EV_COORDINATE}.make_precise (26.666666666666572, 2.2222222222222285)) + Result.extend_point (create {EV_COORDINATE}.make_precise (17.777777777777715, 2.2222222222222285)) + Result.extend_point (create {EV_COORDINATE}.make_precise (12.888888888888914, 4.8888888888889142)) + Result.extend_point (create {EV_COORDINATE}.make_precise (8.8888888888889142, 3.5555555555555713)) + Result.extend_point (create {EV_COORDINATE}.make_precise (5.3333333333333144, 0.44444444444445708)) + Result.extend_point (create {EV_COORDINATE}.make_precise (2.6666666666665719, 2.6666666666666572)) + end + + kauai_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-311.11111111111109, -186.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-300.44444444444446, -180.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-300.44444444444446, -184)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-293.77777777777783, -186.2222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-287.55555555555554, -183.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-282.66666666666669, -184.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-275.55555555555554, -182.2222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-272, -180.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-263.55555555555554, -171.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-262.66666666666669, -160.44444444444443)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-265.77777777777777, -155.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-266.66666666666669, -150.2222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-269.33333333333337, -149.77777777777777)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-268.88888888888891, -132)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-272.88888888888891, -131.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-270.22222222222229, -128.44444444444443)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-276, -126.22222222222221)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-280.44444444444446, -119.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-289.77777777777783, -113.77777777777776)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-302.22222222222223, -117.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-316.88888888888891, -119.99999999999999)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-318.66666666666669, -116.88888888888889)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-323.11111111111109, -120.44444444444443)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-329.33333333333331, -129.77777777777777)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-337.77777777777777, -130.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-348.88888888888891, -135.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-349.33333333333331, -138.66666666666666)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-352.44444444444446, -140.88888888888889)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-352.88888888888891, -151.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-351.11111111111109, -154.66666666666666)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-346.66666666666669, -163.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-343.11111111111109, -171.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-335.55555555555554, -174.2222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-332.44444444444446, -171.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-328.88888888888891, -174.2222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-324.44444444444446, -179.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-320, -178.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-318.66666666666669, -182.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-316.44444444444446, -185.77777777777777)) + end + + molokai_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (109.33333333333326, 12)) + Result.extend_point (create {EV_COORDINATE}.make_precise (121.77777777777771, 12)) + Result.extend_point (create {EV_COORDINATE}.make_precise (139.11111111111109, 14.222222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (158.66666666666652, 15.555555555555571)) + Result.extend_point (create {EV_COORDINATE}.make_precise (172.44444444444434, 24)) + Result.extend_point (create {EV_COORDINATE}.make_precise (182.66666666666652, 23.555555555555571)) + Result.extend_point (create {EV_COORDINATE}.make_precise (188.44444444444434, 20.888888888888914)) + Result.extend_point (create {EV_COORDINATE}.make_precise (202.22222222222206, 20.888888888888914)) + Result.extend_point (create {EV_COORDINATE}.make_precise (204, 25.333333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (207.11111111111109, 24.888888888888914)) + Result.extend_point (create {EV_COORDINATE}.make_precise (207.11111111111109, 28.444444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (202.66666666666652, 36.888888888888914)) + Result.extend_point (create {EV_COORDINATE}.make_precise (200, 39.111111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (192, 44.444444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (184.88888888888891, 48)) + Result.extend_point (create {EV_COORDINATE}.make_precise (176.88888888888891, 49.777777777777715)) + Result.extend_point (create {EV_COORDINATE}.make_precise (162.66666666666652, 45.777777777777715)) + Result.extend_point (create {EV_COORDINATE}.make_precise (148.88888888888891, 40.888888888888914)) + Result.extend_point (create {EV_COORDINATE}.make_precise (136.44444444444434, 39.111111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (121.33333333333326, 39.111111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (108, 40.888888888888914)) + Result.extend_point (create {EV_COORDINATE}.make_precise (101.33333333333326, 37.777777777777715)) + Result.extend_point (create {EV_COORDINATE}.make_precise (95.555555555555543, 37.777777777777715)) + Result.extend_point (create {EV_COORDINATE}.make_precise (92.888888888888914, 34.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (96.444444444444343, 28.888888888888914)) + Result.extend_point (create {EV_COORDINATE}.make_precise (96.444444444444343, 24.444444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (104, 21.777777777777743)) + Result.extend_point (create {EV_COORDINATE}.make_precise (107.55555555555554, 17.333333333333314)) + end + + maui_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (222.66666666666652, 49.777777777777715)) + Result.extend_point (create {EV_COORDINATE}.make_precise (231.99999999999989, 49.777777777777715)) + Result.extend_point (create {EV_COORDINATE}.make_precise (237.33333333333326, 52)) + Result.extend_point (create {EV_COORDINATE}.make_precise (243.11111111111109, 56.444444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (246.22222222222217, 64.444444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (247.11111111111109, 71.555555555555486)) + Result.extend_point (create {EV_COORDINATE}.make_precise (253.33333333333326, 75.111111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (263.55555555555554, 72)) + Result.extend_point (create {EV_COORDINATE}.make_precise (267.55555555555554, 66.222222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (272.88888888888891, 66.222222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (274.22222222222217, 63.555555555555486)) + Result.extend_point (create {EV_COORDINATE}.make_precise (282.66666666666652, 65.333333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (283.99999999999989, 63.555555555555486)) + Result.extend_point (create {EV_COORDINATE}.make_precise (289.77777777777771, 66.222222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (297.77777777777771, 68.888888888888914)) + Result.extend_point (create {EV_COORDINATE}.make_precise (295.99999999999989, 74.222222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (311.99999999999989, 81.333333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (315.99999999999989, 86.222222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (331.11111111111109, 89.777777777777715)) + Result.extend_point (create {EV_COORDINATE}.make_precise (335.55555555555554, 93.777777777777715)) + Result.extend_point (create {EV_COORDINATE}.make_precise (342.66666666666652, 97.333333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (341.33333333333326, 106.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (337.33333333333326, 115.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (331.55555555555554, 120.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (329.33333333333326, 124.4444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (322.22222222222217, 125.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (315.99999999999989, 129.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (307.55555555555554, 131.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (302.22222222222217, 129.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (287.99999999999989, 136.4444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (284.88888888888891, 132)) + Result.extend_point (create {EV_COORDINATE}.make_precise (284.88888888888891, 138.66666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (274.22222222222217, 137.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (263.11111111111109, 139.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (259.11111111111109, 136.4444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (255.99999999999989, 130.22222222222223)) + Result.extend_point (create {EV_COORDINATE}.make_precise (253.33333333333326, 124.4444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (253.33333333333326, 108.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (247.99999999999989, 103.55555555555549)) + Result.extend_point (create {EV_COORDINATE}.make_precise (247.11111111111109, 98.222222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (244.88888888888891, 95.111111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (241.77777777777771, 99.555555555555486)) + Result.extend_point (create {EV_COORDINATE}.make_precise (232.44444444444423, 99.111111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (221.77777777777771, 93.333333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (216, 84.444444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (213.33333333333326, 78.222222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (210.66666666666652, 72)) + Result.extend_point (create {EV_COORDINATE}.make_precise (212.44444444444434, 58.666666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (216.44444444444434, 51.111111111111086)) + end + + hawaii_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (357.77777777777771, 200)) + Result.extend_point (create {EV_COORDINATE}.make_precise (366.22222222222217, 198.22222222222223)) + Result.extend_point (create {EV_COORDINATE}.make_precise (379.55555555555554, 202.22222222222223)) + Result.extend_point (create {EV_COORDINATE}.make_precise (384.44444444444423, 206.22222222222223)) + Result.extend_point (create {EV_COORDINATE}.make_precise (389.77777777777771, 211.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (399.11111111111109, 214.66666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (406.22222222222217, 222.66666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (413.77777777777771, 225.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (420.44444444444423, 224)) + Result.extend_point (create {EV_COORDINATE}.make_precise (425.33333333333326, 226.22222222222223)) + Result.extend_point (create {EV_COORDINATE}.make_precise (444.44444444444423, 234.66666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (467.99999999999989, 246.66666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (490.22222222222217, 262.22222222222223)) + Result.extend_point (create {EV_COORDINATE}.make_precise (498.66666666666652, 272.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (503.99999999999989, 276.4444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (505.77777777777771, 284.4444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (501.33333333333326, 288.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (503.55555555555554, 297.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (505.77777777777771, 303.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (512.44444444444423, 300.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (515.55555555555554, 301.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (519.55555555555554, 300.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (524.44444444444423, 311.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (523.11111111111109, 319.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (529.33333333333326, 323.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (529.77777777777771, 328)) + Result.extend_point (create {EV_COORDINATE}.make_precise (538.66666666666652, 334.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (550.66666666666652, 340)) + Result.extend_point (create {EV_COORDINATE}.make_precise (554.22222222222217, 345.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (551.55555555555554, 353.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (545.33333333333326, 360)) + Result.extend_point (create {EV_COORDINATE}.make_precise (537.33333333333326, 367.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (532.88888888888891, 370.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (527.55555555555554, 373.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (525.33333333333326, 376)) + Result.extend_point (create {EV_COORDINATE}.make_precise (517.33333333333326, 381.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (507.11111111111109, 384.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (503.11111111111109, 388)) + Result.extend_point (create {EV_COORDINATE}.make_precise (496.88888888888891, 390.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (490.66666666666652, 390.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (483.99999999999989, 396)) + Result.extend_point (create {EV_COORDINATE}.make_precise (478.66666666666652, 396)) + Result.extend_point (create {EV_COORDINATE}.make_precise (475.99999999999989, 393.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (468.44444444444423, 393.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (462.22222222222217, 396)) + Result.extend_point (create {EV_COORDINATE}.make_precise (453.77777777777771, 400)) + Result.extend_point (create {EV_COORDINATE}.make_precise (447.55555555555554, 405.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (442.66666666666652, 403.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (440.88888888888891, 409.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (439.55555555555554, 416)) + Result.extend_point (create {EV_COORDINATE}.make_precise (432.88888888888891, 417.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (422.22222222222217, 423.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (417.77777777777771, 431.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (416.44444444444423, 439.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (412.44444444444423, 443.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (411.99999999999989, 450.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (406.22222222222217, 452)) + Result.extend_point (create {EV_COORDINATE}.make_precise (403.55555555555554, 456.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (396.88888888888891, 462.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (390.66666666666652, 456.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (387.11111111111109, 452)) + Result.extend_point (create {EV_COORDINATE}.make_precise (379.55555555555554, 452)) + Result.extend_point (create {EV_COORDINATE}.make_precise (377.77777777777771, 448.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (373.33333333333326, 444.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (361.33333333333326, 440.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (356.88888888888891, 434.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (352.88888888888891, 421.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (353.77777777777771, 404)) + Result.extend_point (create {EV_COORDINATE}.make_precise (355.99999999999989, 392.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (356.44444444444423, 375.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (354.22222222222217, 366.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (350.22222222222217, 355.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (349.77777777777771, 348.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (346.22222222222217, 349.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (343.99999999999989, 337.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (340.88888888888891, 325.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (330.22222222222217, 318.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (327.55555555555554, 309.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (325.77777777777771, 301.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (327.55555555555554, 300)) + Result.extend_point (create {EV_COORDINATE}.make_precise (327.55555555555554, 295.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (330.22222222222217, 293.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (329.77777777777771, 291.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (336.88888888888891, 287.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (337.77777777777771, 281.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (347.55555555555554, 279.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (350.66666666666652, 277.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (353.77777777777771, 277.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (354.66666666666652, 274.22222222222223)) + Result.extend_point (create {EV_COORDINATE}.make_precise (352.44444444444423, 272)) + Result.extend_point (create {EV_COORDINATE}.make_precise (355.11111111111109, 268)) + Result.extend_point (create {EV_COORDINATE}.make_precise (359.11111111111109, 268.4444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (355.55555555555554, 264.4444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (359.99999999999989, 260.4444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (361.77777777777771, 256.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (368.44444444444423, 254.66666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (367.55555555555554, 245.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (365.77777777777771, 242.22222222222223)) + Result.extend_point (create {EV_COORDINATE}.make_precise (363.11111111111109, 235.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (358.22222222222217, 231.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (355.99999999999989, 224)) + Result.extend_point (create {EV_COORDINATE}.make_precise (355.11111111111109, 211.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (354.66666666666652, 204.4444444444444)) + end + + lanai_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (144.44444444444434, 72.888888888888914)) + Result.extend_point (create {EV_COORDINATE}.make_precise (149.33333333333326, 68.888888888888914)) + Result.extend_point (create {EV_COORDINATE}.make_precise (158.66666666666652, 68)) + Result.extend_point (create {EV_COORDINATE}.make_precise (173.33333333333326, 69.777777777777715)) + Result.extend_point (create {EV_COORDINATE}.make_precise (181.77777777777771, 76.888888888888914)) + Result.extend_point (create {EV_COORDINATE}.make_precise (182.22222222222206, 81.777777777777715)) + Result.extend_point (create {EV_COORDINATE}.make_precise (190.66666666666652, 87.111111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (191.55555555555554, 93.777777777777715)) + Result.extend_point (create {EV_COORDINATE}.make_precise (188.88888888888891, 97.777777777777715)) + Result.extend_point (create {EV_COORDINATE}.make_precise (186.66666666666652, 103.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (180.88888888888891, 104.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (176.44444444444434, 108.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (170.66666666666652, 108.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (163.11111111111109, 108.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (157.77777777777771, 104.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (155.55555555555554, 98.222222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (156.88888888888891, 91.555555555555486)) + Result.extend_point (create {EV_COORDINATE}.make_precise (154.66666666666652, 91.555555555555486)) + Result.extend_point (create {EV_COORDINATE}.make_precise (154.22222222222206, 87.111111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (146.66666666666652, 86.222222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (142.66666666666652, 80.888888888888914)) + end + + niihau_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-409.77777777777777, -141.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-402.66666666666663, -140)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-399.11111111111109, -135.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-402.66666666666663, -132.88888888888889)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-405.77777777777777, -126.66666666666666)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-402.22222222222217, -119.99999999999999)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-408, -115.99999999999999)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-408.88888888888886, -113.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-411.55555555555554, -115.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-419.11111111111109, -113.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-421.33333333333331, -107.99999999999999)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-424.88888888888886, -102.66666666666666)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-424, -95.999999999999986)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-429.77777777777777, -96.444444444444429)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-436.4444444444444, -101.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-437.33333333333331, -108.88888888888889)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-435.11111111111109, -112.44444444444443)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-434.22222222222217, -119.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-430.22222222222217, -121.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-427.55555555555554, -126.22222222222221)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-420.88888888888886, -127.99999999999999)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-412.88888888888886, -132)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-412.4444444444444, -137.77777777777777)) + end + +feature {NONE} -- Implementation + + rotation_amount: REAL_64 = -60.0 + -- Make the arrow point north-east + +invariant + + correct_location: attached target_imp implies port = game.pearl_harbor + +end diff --git a/jj_vitp/Interface/widgets/port_widgets/philippines_widget.e b/jj_vitp/Interface/widgets/port_widgets/philippines_widget.e new file mode 100644 index 0000000..6cba3a4 --- /dev/null +++ b/jj_vitp/Interface/widgets/port_widgets/philippines_widget.e @@ -0,0 +1,1103 @@ +note + description: "[ + Widget representing a {PORT}. + ]" + author: "Jimmy J. Johnson" + +class + PHILIPPINES_WIDGET + +inherit + + GREEN_PORT_WIDGET + redefine + create_interface_objects, + set_fonts_and_colors, + position_widgets, + build_land + end + +create + make + +feature {NONE} -- Initialization + + create_interface_objects + -- Initialize attributes + do + Precursor {GREEN_PORT_WIDGET} + luzon := luzon_imp + mindoro := mindoro_imp + panay := panay_imp + negros := negros_imp + cebu := cebu_imp + bohol := bohol_imp + leyte := leyte_imp + samar := samar_imp + masbate := masbate_imp + catanduanes := catanduanes_imp + mindanao := mindanao_imp + end + + set_fonts_and_colors + -- Set the default fonts for any text widgets and set + -- the default colors for any contained widgets. + do + Precursor {GREEN_PORT_WIDGET} + dot.set_foreground_color (Yellow) + end + + position_widgets + -- Move Current and contained widgets to correct + -- location and set their their sizes + do + Precursor {GREEN_PORT_WIDGET} + -- make adjustments + scale_widget (land, 0.07) + rotate_widget (land, 5.0) +-- text_widget.set_point_position (190, 585) + text_group.set_point_position (190, 585) + dot.set_point_position (200, 600) +-- marker.center_on_dot (dot) + marker.set_x_y (dot.x, dot.y) + translate_widget (Current, 11, -350) + end + + build_land + -- Add widgets to Current + do + Precursor {GREEN_PORT_WIDGET} + -- Initialize attributes + land.extend (luzon) + land.extend (mindoro) + land.extend (panay) + land.extend (negros) + land.extend (cebu) + land.extend (bohol) + land.extend (leyte) + land.extend (samar) + land.extend (masbate) + land.extend (catanduanes) + land.extend (mindanao) + end + +feature -- Access + + luzon: EV_MODEL_POLYGON + mindoro: EV_MODEL_POLYGON + panay: EV_MODEL_POLYGON + negros: EV_MODEL_POLYGON + cebu: EV_MODEL_POLYGON + bohol: EV_MODEL_POLYGON + leyte: EV_MODEL_POLYGON + samar: EV_MODEL_POLYGON + masbate: EV_MODEL_POLYGON + catanduanes: EV_MODEL_POLYGON + mindanao: EV_MODEL_POLYGON + +feature -- Status report + + is_red: BOOLEAN = False + -- Does Current represent a red (i.e. major) port? + +feature {NONE} -- Implementation + + luzon_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (0, 0)) + Result.extend_point (create {EV_COORDINATE}.make_precise (9.3333333333333428, 9.3333333333333321)) + Result.extend_point (create {EV_COORDINATE}.make_precise (18.666666666666686, 1.9999999999999998)) + Result.extend_point (create {EV_COORDINATE}.make_precise (30.666666666666686, 2.666666666666667)) + Result.extend_point (create {EV_COORDINATE}.make_precise (89.333333333333314, 33.999999999999993)) + Result.extend_point (create {EV_COORDINATE}.make_precise (105.33333333333331, 34.666666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (116.66666666666669, 24.666666666666661)) + Result.extend_point (create {EV_COORDINATE}.make_precise (119.33333333333326, 12.666666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (128.66666666666663, 13.333333333333329)) + Result.extend_point (create {EV_COORDINATE}.make_precise (130, 22.666666666666668)) + Result.extend_point (create {EV_COORDINATE}.make_precise (133.99999999999994, 26)) + Result.extend_point (create {EV_COORDINATE}.make_precise (134.66666666666669, 39.333333333333321)) + Result.extend_point (create {EV_COORDINATE}.make_precise (120.66666666666663, 53.333333333333329)) + Result.extend_point (create {EV_COORDINATE}.make_precise (121.33333333333331, 72.666666666666671)) + Result.extend_point (create {EV_COORDINATE}.make_precise (116.66666666666669, 77.999999999999986)) + Result.extend_point (create {EV_COORDINATE}.make_precise (127.33333333333326, 121.33333333333333)) + Result.extend_point (create {EV_COORDINATE}.make_precise (132.66666666666669, 125.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (142.66666666666663, 124.66666666666667)) + Result.extend_point (create {EV_COORDINATE}.make_precise (141.99999999999994, 141.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (146.66666666666663, 147.33333333333329)) + Result.extend_point (create {EV_COORDINATE}.make_precise (153.33333333333326, 143.99999999999997)) + Result.extend_point (create {EV_COORDINATE}.make_precise (151.99999999999994, 153.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (148, 161.33333333333329)) + Result.extend_point (create {EV_COORDINATE}.make_precise (123.99999999999994, 211.99999999999997)) + Result.extend_point (create {EV_COORDINATE}.make_precise (124.66666666666663, 221.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (122.66666666666669, 229.99999999999997)) + Result.extend_point (create {EV_COORDINATE}.make_precise (117.33333333333326, 234.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (105.33333333333331, 249.99999999999997)) + Result.extend_point (create {EV_COORDINATE}.make_precise (116.66666666666669, 228.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (111.33333333333331, 229.99999999999997)) + Result.extend_point (create {EV_COORDINATE}.make_precise (102.66666666666669, 238.66666666666666)) + Result.extend_point (create {EV_COORDINATE}.make_precise (84.666666666666686, 244.66666666666666)) + Result.extend_point (create {EV_COORDINATE}.make_precise (63.333333333333343, 266.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (65.333333333333314, 274.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (72, 275.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (72, 280)) + Result.extend_point (create {EV_COORDINATE}.make_precise (67.999999999999972, 282.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (60.666666666666686, 297.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (50.666666666666657, 311.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (50.666666666666657, 325.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (56.666666666666657, 328)) + Result.extend_point (create {EV_COORDINATE}.make_precise (68.666666666666657, 361.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (79.999999999999943, 374.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (69.333333333333343, 376.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (73.333333333333286, 404.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (81.333333333333258, 413.3333333333332)) + Result.extend_point (create {EV_COORDINATE}.make_precise (81.333333333333258, 422.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (99.999999999999943, 442)) + Result.extend_point (create {EV_COORDINATE}.make_precise (125.33333333333331, 448)) + Result.extend_point (create {EV_COORDINATE}.make_precise (122.66666666666669, 442)) + Result.extend_point (create {EV_COORDINATE}.make_precise (97.333333333333314, 421.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (100.66666666666663, 419.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (130.66666666666669, 444.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (132, 437.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (120.66666666666663, 425.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (129.33333333333331, 418)) + Result.extend_point (create {EV_COORDINATE}.make_precise (130, 425.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (135.33333333333326, 430)) + Result.extend_point (create {EV_COORDINATE}.make_precise (138.66666666666663, 416.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (150.66666666666669, 407.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (159.99999999999994, 412.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (173.33333333333326, 411.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (184, 415.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (200.66666666666663, 431.3333333333332)) + Result.extend_point (create {EV_COORDINATE}.make_precise (204.66666666666669, 449.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (202, 461.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (216, 465.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (225.99999999999994, 458.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (223.99999999999994, 445.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (216.66666666666669, 439.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (227.33333333333331, 431.3333333333332)) + Result.extend_point (create {EV_COORDINATE}.make_precise (235.3333333333332, 446.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (261.99999999999994, 449.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (285.99999999999994, 463.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (275.33333333333331, 465.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (268.66666666666663, 469.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (249.99999999999994, 466.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (245.33333333333331, 475.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (265.33333333333331, 500.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (279.99999999999994, 511.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (265.99999999999994, 512.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (265.99999999999994, 525.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (271.3333333333332, 528.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (274.66666666666663, 522.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (277.33333333333331, 515.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (282, 521.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (294, 531.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (300, 527.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (305.33333333333331, 529.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (301.33333333333331, 535.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (301.33333333333331, 547.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (298.66666666666663, 567.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (291.33333333333326, 577.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (281.33333333333331, 568.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (273.99999999999994, 563.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (273.99999999999994, 551.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (253.99999999999989, 543.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (234, 529.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (225.33333333333326, 533.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (222.66666666666669, 523.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (225.99999999999994, 513.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (214.66666666666663, 505.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (213.33333333333326, 494.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (193.99999999999994, 485.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (181.33333333333326, 474.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (181.33333333333326, 465.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (169.99999999999994, 456.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (166, 460.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (162.66666666666669, 451.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (144, 447.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (158.66666666666669, 464.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (155.33333333333326, 470.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (162, 484.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (168.66666666666669, 513.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (160.66666666666663, 517.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (152.66666666666669, 512.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (153.33333333333326, 502.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (136.66666666666663, 479.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (122.66666666666669, 478.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (112.66666666666669, 461.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (103.99999999999994, 460)) + Result.extend_point (create {EV_COORDINATE}.make_precise (99.999999999999943, 454)) + Result.extend_point (create {EV_COORDINATE}.make_precise (90.666666666666686, 450.66666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (85.333333333333314, 444.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (78, 443.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (78, 448)) + Result.extend_point (create {EV_COORDINATE}.make_precise (57.333333333333343, 454.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (53.333333333333314, 461.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (56.666666666666657, 467.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (52, 472)) + Result.extend_point (create {EV_COORDINATE}.make_precise (42, 473.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (25.333333333333314, 477.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (17.333333333333314, 470.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (13.333333333333314, 460.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (3.3333333333333428, 470.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (5.9999999999999716, 460)) + Result.extend_point (create {EV_COORDINATE}.make_precise (5.9999999999999716, 450.66666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-12.000000000000028, 448.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-17.333333333333314, 459.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-20, 430)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-25.333333333333343, 428.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-24, 415.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-11.333333333333343, 412.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (2.6666666666666856, 396.66666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (9.3333333333333428, 395.3333333333332)) + Result.extend_point (create {EV_COORDINATE}.make_precise (7.9999999999999716, 377.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1.3333333333333144, 369.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-16.666666666666686, 365.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-24, 358.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-24, 366.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-26.666666666666657, 371.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-22.000000000000028, 387.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-23.333333333333314, 398.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-41.333333333333314, 397.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-42, 384.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-54.666666666666657, 373.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-51.999999999999986, 361.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-58.666666666666671, 359.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-58.666666666666671, 370.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-67.333333333333329, 371.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-70.666666666666671, 359.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-71.333333333333314, 341.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-78, 318.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-85.333333333333329, 309.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-81.999999999999986, 296.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-82.666666666666671, 281.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-88.666666666666657, 278.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-84.666666666666671, 272.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-86.666666666666671, 259.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-92, 254.66666666666666)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-94.666666666666671, 259.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-99.333333333333314, 259.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-99.333333333333314, 244.66666666666666)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-96, 218.66666666666666)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-83.999999999999986, 215.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-78.666666666666657, 235.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-67.333333333333329, 237.33333333333329)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-66.666666666666686, 245.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-52.666666666666671, 245.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-37.333333333333314, 235.99999999999997)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-44, 222.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-46, 211.99999999999997)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-46, 200.66666666666666)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-48.666666666666686, 189.99999999999997)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-43.333333333333314, 173.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-36.666666666666657, 164.66666666666666)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-38.666666666666657, 138.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-38, 125.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-35.333333333333314, 110.66666666666666)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-45.333333333333314, 102.66666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-43.333333333333314, 92.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-36.666666666666657, 83.333333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-40.666666666666686, 78.666666666666671)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-36, 76)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-38, 67.333333333333329)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-33.333333333333314, 61.999999999999986)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-32.666666666666657, 52.666666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-29.333333333333343, 46.666666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-28.000000000000028, 39.333333333333321)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-22.000000000000028, 29.333333333333332)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-26.000000000000028, 14.666666666666666)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-19.333333333333314, 10.666666666666666)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-12.000000000000028, 11.999999999999998)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-8.6666666666666572, 9.3333333333333321)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-5.3333333333333144, 11.33333333333333)) + end + + mindoro_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-42, 484)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-8.0000000000000284, 490.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (7.9999999999999716, 485.3333333333332)) + Result.extend_point (create {EV_COORDINATE}.make_precise (19.333333333333286, 495.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (24, 491.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (19.999999999999972, 481.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (46.666666666666629, 508.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (52.666666666666686, 509.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (55.999999999999972, 520.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (61.333333333333314, 519.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (63.999999999999943, 525.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (58.666666666666686, 530.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (59.333333333333314, 552.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (66, 565.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (63.999999999999943, 572.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (58.666666666666686, 575.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (52, 580.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (53.333333333333314, 591.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (48.666666666666686, 591.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (44.666666666666657, 599.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (36, 603.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (24.666666666666686, 602.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (25.999999999999972, 613.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (17.333333333333314, 609.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (11.333333333333343, 600.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (19.999999999999972, 599.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (20.666666666666657, 594.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (5.3333333333333144, 577.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (7.3333333333333144, 571.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (0.66666666666668561, 560.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-4.6666666666666856, 558.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-7.3333333333333428, 548.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-7.3333333333333428, 534.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-18.666666666666686, 515.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-28.666666666666686, 513.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-33.333333333333314, 507.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-35.333333333333314, 496)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-41.333333333333314, 496)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-40.666666666666686, 500.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-44.666666666666657, 499.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-48.666666666666686, 492.66666666666669)) + end + + panay_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (99.999999999999943, 631.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (114, 643.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (121.99999999999994, 643.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (142.66666666666663, 658.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (148.66666666666669, 667.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (165.33333333333331, 668.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (175.33333333333331, 657.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (183.33333333333331, 668.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (188.66666666666669, 670.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (185.33333333333331, 677.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (193.33333333333331, 675.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (211.33333333333331, 664.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (209.33333333333331, 675.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (213.33333333333326, 676.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (207.99999999999994, 679.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (210, 686.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (206.66666666666669, 688.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (206.66666666666669, 695.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (208.66666666666663, 703.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (204, 705.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (199.99999999999994, 705.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (199.99999999999994, 709.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (185.33333333333331, 719.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (175.33333333333331, 721.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (178.66666666666663, 730.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (168.66666666666669, 741.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (172.66666666666663, 747.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (170.66666666666669, 761.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (175.99999999999994, 766.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (168.66666666666669, 770.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (159.99999999999994, 771.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (160.66666666666663, 775.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (152.66666666666669, 773.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (149.33333333333331, 768.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (150, 757.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (154.66666666666663, 755.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (163.99999999999994, 743.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (157.99999999999994, 742.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (155.99999999999994, 747.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (126, 752.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (118.66666666666663, 757.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (112.66666666666669, 761.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (107.33333333333331, 769.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (101.33333333333331, 773.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (97.999999999999943, 771.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (97.999999999999943, 765.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (101.33333333333331, 761.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (103.99999999999994, 750.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (99.333333333333258, 743.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (99.333333333333258, 735.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (110.66666666666663, 717.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (108.66666666666669, 705.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (109.99999999999994, 696.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (107.33333333333331, 691.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (110.66666666666663, 686.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (109.33333333333326, 678.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (112.66666666666669, 673.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (113.33333333333331, 657.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (103.33333333333331, 659.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (103.33333333333331, 652.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (100.66666666666663, 648.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (91.999999999999943, 649.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (94.666666666666686, 637.33333333333314)) + end + + negros_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (196.66666666666663, 729.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (205.99999999999994, 728.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (213.99999999999994, 719.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (217.99999999999989, 714.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (223.99999999999994, 723.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (244.66666666666663, 727.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (247.99999999999994, 735.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (242.66666666666669, 745.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (241.99999999999994, 757.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (229.33333333333331, 772.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (223.99999999999994, 791.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (217.3333333333332, 812.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (208.66666666666663, 821.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (205.99999999999994, 844.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (210, 853.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (222, 865.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (224.66666666666669, 881.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (213.99999999999994, 891.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (213.99999999999994, 897.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (210, 896.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (205.99999999999994, 900.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (202.66666666666669, 897.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (195.33333333333326, 899.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (189.33333333333326, 895.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (182.66666666666663, 885.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (177.99999999999994, 872.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (163.33333333333326, 869.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (153.33333333333326, 859.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (148.66666666666669, 852.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (145.33333333333326, 843.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (141.33333333333326, 843.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (138.66666666666663, 827.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (145.33333333333326, 820.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (147.33333333333331, 814.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (166, 813.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (174.66666666666663, 805.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (180.66666666666669, 805.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (184, 801.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (181.33333333333326, 791.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (184.66666666666669, 777.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (178.66666666666663, 769.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (181.99999999999994, 762.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (188.66666666666669, 758.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (193.33333333333331, 739.99999999999977)) + end + + cebu_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (293.33333333333331, 687.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (294, 697.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (288.66666666666669, 711.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (291.99999999999994, 719.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (289.99999999999989, 726.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (291.99999999999994, 730.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (288, 741.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (289.99999999999989, 766.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (288.66666666666669, 777.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (278.66666666666669, 783.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (276, 789.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (270.66666666666669, 789.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (258.66666666666669, 799.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (258.66666666666669, 805.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (253.99999999999989, 803.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (251.33333333333331, 825.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (246.66666666666669, 826.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (246.66666666666669, 836.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (242.66666666666669, 836.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (238.66666666666663, 852.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (232.66666666666663, 862.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (228.66666666666669, 868.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (223.99999999999994, 862.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (227.33333333333331, 833.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (233.33333333333331, 821.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (231.33333333333326, 818.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (238.66666666666663, 801.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (249.33333333333326, 789.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (248.66666666666669, 781.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (256.66666666666663, 776.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (262.66666666666663, 766.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (260.66666666666669, 761.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (262.66666666666663, 753.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (270.66666666666669, 745.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (280.66666666666663, 721.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (278.66666666666669, 717.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (282, 711.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (281.33333333333331, 704.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (289.3333333333332, 695.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (289.99999999999989, 689.33333333333326)) + end + + bohol_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (301.99999999999994, 795.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (314.66666666666669, 795.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (320.66666666666669, 802.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (334.66666666666669, 805.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (337.33333333333331, 799.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (343.99999999999994, 798.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (342.66666666666669, 805.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (337.33333333333331, 807.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (338.66666666666669, 819.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (339.99999999999994, 823.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (335.33333333333331, 826.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (341.33333333333331, 831.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (340.66666666666669, 836.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (333.3333333333332, 837.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (330.66666666666669, 834.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (324, 839.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (324, 846.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (300.66666666666669, 849.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (297.33333333333326, 851.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (276, 847.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (266.66666666666669, 856.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (264, 852.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (261.99999999999994, 849.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (274.66666666666663, 843.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (275.33333333333331, 837.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (270, 837.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (267.99999999999994, 833.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (271.3333333333332, 823.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (279.99999999999994, 819.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (282, 814.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (289.99999999999989, 814.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (292.66666666666663, 806.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (297.33333333333326, 804.66666666666652)) + end + + leyte_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (318.66666666666669, 657.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (327.33333333333326, 653.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (337.33333333333331, 658.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (343.3333333333332, 669.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (341.33333333333331, 675.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (331.99999999999994, 677.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (335.99999999999994, 679.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (340.66666666666669, 691.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (351.99999999999994, 691.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (355.33333333333331, 684.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (355.33333333333331, 681.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (375.3333333333332, 681.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (375.99999999999994, 694.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (380.66666666666657, 699.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (378.66666666666669, 706.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (383.99999999999994, 719.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (379.99999999999994, 728.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (381.99999999999994, 743.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (389.33333333333331, 749.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (391.99999999999994, 753.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (395.33333333333331, 760.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (395.99999999999983, 777.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (400.66666666666657, 777.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (403.99999999999994, 781.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (401.3333333333332, 789.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (391.99999999999994, 786.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (390.66666666666669, 790.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (391.33333333333331, 798.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (397.99999999999983, 800.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (406.66666666666669, 818.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (403.33333333333331, 821.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (396.66666666666669, 807.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (392.66666666666669, 807.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (389.33333333333331, 801.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (388.66666666666669, 794.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (381.3333333333332, 777.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (377.33333333333331, 777.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (377.99999999999983, 788.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (375.99999999999994, 791.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (379.3333333333332, 799.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (381.3333333333332, 811.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (373.99999999999994, 806.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (370.66666666666669, 805.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (369.99999999999994, 800.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (361.3333333333332, 801.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (357.3333333333332, 795.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (359.33333333333331, 785.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (358.66666666666669, 779.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (353.99999999999994, 776.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (353.33333333333331, 765.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (356.66666666666669, 761.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (359.33333333333331, 749.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (357.3333333333332, 739.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (351.3333333333332, 732.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (348.66666666666669, 726.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (341.33333333333331, 719.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (337.33333333333331, 721.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (336.66666666666669, 732.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (330, 733.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (325.99999999999989, 727.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (321.33333333333326, 727.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (324, 721.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (321.99999999999994, 713.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (324, 708.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (323.33333333333331, 697.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (322.66666666666663, 688.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (315.99999999999994, 683.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (313.33333333333331, 670.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (316.66666666666663, 665.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (323.33333333333331, 675.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (330, 685.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (328.66666666666663, 673.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (324, 667.99999999999977)) + end + + samar_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (312, 571.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (319.33333333333331, 575.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (320.66666666666669, 567.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (326.66666666666657, 573.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (337.99999999999994, 578.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (366.66666666666669, 576.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (364.66666666666669, 571.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (374.66666666666669, 573.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (379.3333333333332, 575.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (376.66666666666669, 564.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (385.33333333333331, 563.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (388.66666666666669, 573.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (394.66666666666669, 573.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (404.66666666666669, 584.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (406.66666666666669, 597.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (417.99999999999983, 598.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (427.3333333333332, 609.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (419.3333333333332, 611.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (417.99999999999983, 617.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (422.66666666666669, 617.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (425.33333333333331, 623.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (419.99999999999994, 629.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (419.3333333333332, 640.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (421.33333333333331, 647.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (415.99999999999983, 650.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (420.66666666666657, 661.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (423.99999999999994, 666.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (419.3333333333332, 669.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (425.33333333333331, 673.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (423.99999999999994, 678.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (428.66666666666657, 682.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (435.99999999999983, 685.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (436.66666666666657, 691.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (429.3333333333332, 694.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (428.66666666666657, 701.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (433.99999999999983, 699.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (438.66666666666657, 699.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (441.99999999999994, 708.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (455.3333333333332, 725.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (447.3333333333332, 719.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (439.99999999999994, 715.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (437.3333333333332, 707.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (429.99999999999994, 710.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (428.66666666666657, 705.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (424.66666666666669, 711.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (418.66666666666657, 707.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (416.66666666666657, 711.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (403.99999999999994, 706.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (400.66666666666657, 712.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (395.33333333333331, 703.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (390.66666666666669, 692.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (386.66666666666669, 695.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (377.33333333333331, 691.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (376.66666666666669, 685.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (374.66666666666669, 677.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (369.99999999999994, 673.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (365.99999999999994, 677.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (360.66666666666669, 669.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (351.99999999999994, 655.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (353.33333333333331, 653.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (357.99999999999994, 655.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (364.66666666666669, 667.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (369.3333333333332, 666.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (377.33333333333331, 661.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (373.99999999999994, 657.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (379.3333333333332, 652.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (375.99999999999994, 648.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (368.66666666666669, 652.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (361.99999999999994, 644.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (349.33333333333331, 631.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (349.99999999999994, 625.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (339.3333333333332, 623.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (326.66666666666657, 617.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (318.66666666666669, 602.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (316.66666666666663, 586.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (312, 585.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (312.66666666666669, 578.66666666666652)) + end + + masbate_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (217.99999999999989, 570.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (226.66666666666663, 571.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (229.33333333333331, 580.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (234.66666666666669, 578.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (246, 581.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (249.33333333333326, 592.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (259.33333333333331, 596.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (267.99999999999994, 605.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (277.33333333333331, 606.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (292.66666666666663, 629.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (285.33333333333326, 627.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (294, 641.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (294, 653.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (282, 641.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (271.3333333333332, 635.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (262.66666666666663, 635.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (261.99999999999994, 627.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (251.33333333333331, 618.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (243.99999999999994, 607.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (233.33333333333331, 608.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (232.66666666666663, 617.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (227.33333333333331, 619.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (223.33333333333331, 627.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (217.3333333333332, 631.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (211.99999999999994, 637.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (209.33333333333331, 634.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (212.66666666666669, 625.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (213.99999999999994, 615.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (217.3333333333332, 614.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (222.66666666666669, 607.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (216, 606.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (217.99999999999989, 594.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (222.66666666666669, 587.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (217.99999999999989, 578.66666666666652)) + end + + catanduanes_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (298.66666666666663, 436)) + Result.extend_point (create {EV_COORDINATE}.make_precise (303.99999999999994, 436)) + Result.extend_point (create {EV_COORDINATE}.make_precise (306, 429.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (313.33333333333331, 438.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (315.33333333333326, 448)) + Result.extend_point (create {EV_COORDINATE}.make_precise (319.99999999999994, 444.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (321.99999999999994, 450.66666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (325.99999999999989, 454.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (329.33333333333331, 463.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (324, 465.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (325.99999999999989, 472)) + Result.extend_point (create {EV_COORDINATE}.make_precise (319.33333333333331, 472.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (318, 484)) + Result.extend_point (create {EV_COORDINATE}.make_precise (315.33333333333326, 478.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (308.66666666666657, 478.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (308.66666666666657, 489.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (299.33333333333331, 479.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (292.66666666666663, 478.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (289.3333333333332, 471.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (296.66666666666669, 467.3333333333332)) + Result.extend_point (create {EV_COORDINATE}.make_precise (301.33333333333331, 446.66666666666663)) + end + + mindanao_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (416.66666666666657, 829.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (421.33333333333331, 819.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (435.3333333333332, 820.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (429.3333333333332, 813.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (431.99999999999983, 805.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (422.66666666666669, 805.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (422.66666666666669, 795.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (428.66666666666657, 791.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (425.99999999999983, 781.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (431.33333333333331, 779.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (435.99999999999983, 767.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (441.99999999999994, 774.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (439.33333333333331, 789.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (441.3333333333332, 793.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (437.99999999999994, 799.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (441.99999999999994, 806.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (439.99999999999994, 812.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (441.3333333333332, 821.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (448.66666666666669, 827.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (442.66666666666669, 835.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (433.3333333333332, 835.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (436.66666666666657, 846.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (455.99999999999994, 853.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (464.66666666666657, 863.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (461.33333333333331, 869.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (469.99999999999983, 867.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (465.3333333333332, 871.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (473.99999999999994, 882.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (484.66666666666669, 875.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (490.66666666666657, 875.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (486.66666666666669, 881.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (483.99999999999994, 894.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (498.66666666666669, 910.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (499.99999999999994, 921.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (487.3333333333332, 935.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (479.33333333333331, 938.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (483.99999999999994, 946.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (488.66666666666657, 945.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (503.33333333333331, 945.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (507.99999999999983, 952.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (501.99999999999994, 957.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (506.66666666666657, 959.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (499.3333333333332, 963.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (502.66666666666669, 967.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (507.99999999999983, 964.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (503.99999999999983, 971.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (496.66666666666669, 975.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (500.66666666666657, 978.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (510.66666666666657, 972.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (510.66666666666657, 977.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (512.66666666666674, 994.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (507.99999999999983, 994.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (509.3333333333332, 1001.3333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (502.66666666666669, 1001.3333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (503.33333333333331, 1008.6666666666665)) + Result.extend_point (create {EV_COORDINATE}.make_precise (513.33333333333326, 1013.3333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (514.66666666666674, 1017.9999999999998)) + Result.extend_point (create {EV_COORDINATE}.make_precise (520.66666666666674, 1020.6666666666665)) + Result.extend_point (create {EV_COORDINATE}.make_precise (520, 1034.6666666666667)) + Result.extend_point (create {EV_COORDINATE}.make_precise (523.99999999999977, 1036.6666666666667)) + Result.extend_point (create {EV_COORDINATE}.make_precise (523.99999999999977, 1047.9999999999998)) + Result.extend_point (create {EV_COORDINATE}.make_precise (520, 1047.9999999999998)) + Result.extend_point (create {EV_COORDINATE}.make_precise (520, 1061.9999999999998)) + Result.extend_point (create {EV_COORDINATE}.make_precise (524.66666666666652, 1061.3333333333333)) + Result.extend_point (create {EV_COORDINATE}.make_precise (523.33333333333326, 1068.6666666666667)) + Result.extend_point (create {EV_COORDINATE}.make_precise (518.66666666666652, 1068.6666666666667)) + Result.extend_point (create {EV_COORDINATE}.make_precise (518, 1077.333333333333)) + Result.extend_point (create {EV_COORDINATE}.make_precise (514, 1077.9999999999998)) + Result.extend_point (create {EV_COORDINATE}.make_precise (509.99999999999994, 1086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (511.99999999999994, 1092)) + Result.extend_point (create {EV_COORDINATE}.make_precise (507.99999999999983, 1089.3333333333333)) + Result.extend_point (create {EV_COORDINATE}.make_precise (499.99999999999994, 1089.9999999999998)) + Result.extend_point (create {EV_COORDINATE}.make_precise (496.66666666666669, 1097.3333333333333)) + Result.extend_point (create {EV_COORDINATE}.make_precise (501.99999999999994, 1102.6666666666667)) + Result.extend_point (create {EV_COORDINATE}.make_precise (500.66666666666657, 1107.9999999999998)) + Result.extend_point (create {EV_COORDINATE}.make_precise (495.3333333333332, 1106)) + Result.extend_point (create {EV_COORDINATE}.make_precise (496.66666666666669, 1102.6666666666667)) + Result.extend_point (create {EV_COORDINATE}.make_precise (492.66666666666657, 1094)) + Result.extend_point (create {EV_COORDINATE}.make_precise (487.3333333333332, 1095.333333333333)) + Result.extend_point (create {EV_COORDINATE}.make_precise (488.66666666666657, 1102.6666666666667)) + Result.extend_point (create {EV_COORDINATE}.make_precise (493.99999999999994, 1112.6666666666667)) + Result.extend_point (create {EV_COORDINATE}.make_precise (491.99999999999994, 1120.6666666666667)) + Result.extend_point (create {EV_COORDINATE}.make_precise (488.66666666666657, 1133.9999999999998)) + Result.extend_point (create {EV_COORDINATE}.make_precise (490.66666666666657, 1140.6666666666667)) + Result.extend_point (create {EV_COORDINATE}.make_precise (486.66666666666669, 1142.6666666666667)) + Result.extend_point (create {EV_COORDINATE}.make_precise (486.66666666666669, 1155.9999999999998)) + Result.extend_point (create {EV_COORDINATE}.make_precise (485.99999999999983, 1148)) + Result.extend_point (create {EV_COORDINATE}.make_precise (481.99999999999994, 1146)) + Result.extend_point (create {EV_COORDINATE}.make_precise (483.3333333333332, 1143.3333333333333)) + Result.extend_point (create {EV_COORDINATE}.make_precise (476.66666666666669, 1136)) + Result.extend_point (create {EV_COORDINATE}.make_precise (475.33333333333331, 1122)) + Result.extend_point (create {EV_COORDINATE}.make_precise (477.99999999999994, 1119.3333333333333)) + Result.extend_point (create {EV_COORDINATE}.make_precise (478.66666666666669, 1113.9999999999998)) + Result.extend_point (create {EV_COORDINATE}.make_precise (475.99999999999994, 1112.6666666666667)) + Result.extend_point (create {EV_COORDINATE}.make_precise (475.33333333333331, 1104)) + Result.extend_point (create {EV_COORDINATE}.make_precise (470.66666666666657, 1101.3333333333333)) + Result.extend_point (create {EV_COORDINATE}.make_precise (465.99999999999994, 1094)) + Result.extend_point (create {EV_COORDINATE}.make_precise (467.33333333333331, 1088.6666666666667)) + Result.extend_point (create {EV_COORDINATE}.make_precise (464.66666666666657, 1082)) + Result.extend_point (create {EV_COORDINATE}.make_precise (460.66666666666669, 1082.6666666666665)) + Result.extend_point (create {EV_COORDINATE}.make_precise (457.99999999999994, 1077.333333333333)) + Result.extend_point (create {EV_COORDINATE}.make_precise (459.3333333333332, 1072.6666666666667)) + Result.extend_point (create {EV_COORDINATE}.make_precise (451.99999999999983, 1063.3333333333333)) + Result.extend_point (create {EV_COORDINATE}.make_precise (445.3333333333332, 1066.6666666666667)) + Result.extend_point (create {EV_COORDINATE}.make_precise (441.99999999999994, 1064)) + Result.extend_point (create {EV_COORDINATE}.make_precise (437.99999999999994, 1071.3333333333333)) + Result.extend_point (create {EV_COORDINATE}.make_precise (439.99999999999994, 1076.6666666666667)) + Result.extend_point (create {EV_COORDINATE}.make_precise (443.99999999999983, 1071.3333333333333)) + Result.extend_point (create {EV_COORDINATE}.make_precise (449.99999999999983, 1077.333333333333)) + Result.extend_point (create {EV_COORDINATE}.make_precise (449.99999999999983, 1086.6666666666667)) + Result.extend_point (create {EV_COORDINATE}.make_precise (449.99999999999983, 1094)) + Result.extend_point (create {EV_COORDINATE}.make_precise (444.66666666666669, 1089.9999999999998)) + Result.extend_point (create {EV_COORDINATE}.make_precise (443.33333333333331, 1082.6666666666665)) + Result.extend_point (create {EV_COORDINATE}.make_precise (436.66666666666657, 1081.3333333333333)) + Result.extend_point (create {EV_COORDINATE}.make_precise (425.99999999999983, 1086.6666666666667)) + Result.extend_point (create {EV_COORDINATE}.make_precise (424.66666666666669, 1098.6666666666667)) + Result.extend_point (create {EV_COORDINATE}.make_precise (415.3333333333332, 1106.6666666666667)) + Result.extend_point (create {EV_COORDINATE}.make_precise (413.99999999999983, 1114.6666666666667)) + Result.extend_point (create {EV_COORDINATE}.make_precise (414.66666666666669, 1126.6666666666667)) + Result.extend_point (create {EV_COORDINATE}.make_precise (419.99999999999994, 1124.6666666666667)) + Result.extend_point (create {EV_COORDINATE}.make_precise (426.66666666666669, 1133.3333333333333)) + Result.extend_point (create {EV_COORDINATE}.make_precise (429.99999999999994, 1131.9999999999998)) + Result.extend_point (create {EV_COORDINATE}.make_precise (433.3333333333332, 1136.6666666666665)) + Result.extend_point (create {EV_COORDINATE}.make_precise (429.99999999999994, 1140)) + Result.extend_point (create {EV_COORDINATE}.make_precise (439.33333333333331, 1147.3333333333333)) + Result.extend_point (create {EV_COORDINATE}.make_precise (439.99999999999994, 1156.6666666666667)) + Result.extend_point (create {EV_COORDINATE}.make_precise (444.66666666666669, 1167.9999999999998)) + Result.extend_point (create {EV_COORDINATE}.make_precise (441.3333333333332, 1182.6666666666667)) + Result.extend_point (create {EV_COORDINATE}.make_precise (425.33333333333331, 1204.6666666666667)) + Result.extend_point (create {EV_COORDINATE}.make_precise (424.66666666666669, 1209.333333333333)) + Result.extend_point (create {EV_COORDINATE}.make_precise (416.66666666666657, 1221.333333333333)) + Result.extend_point (create {EV_COORDINATE}.make_precise (411.3333333333332, 1220)) + Result.extend_point (create {EV_COORDINATE}.make_precise (405.99999999999994, 1210.6666666666667)) + Result.extend_point (create {EV_COORDINATE}.make_precise (397.99999999999983, 1203.333333333333)) + Result.extend_point (create {EV_COORDINATE}.make_precise (396.66666666666669, 1191.9999999999998)) + Result.extend_point (create {EV_COORDINATE}.make_precise (401.99999999999994, 1185.9999999999998)) + Result.extend_point (create {EV_COORDINATE}.make_precise (403.33333333333331, 1177.3333333333333)) + Result.extend_point (create {EV_COORDINATE}.make_precise (394.66666666666669, 1173.333333333333)) + Result.extend_point (create {EV_COORDINATE}.make_precise (386.66666666666669, 1192.6666666666667)) + Result.extend_point (create {EV_COORDINATE}.make_precise (377.99999999999983, 1194.6666666666665)) + Result.extend_point (create {EV_COORDINATE}.make_precise (355.33333333333331, 1188.6666666666667)) + Result.extend_point (create {EV_COORDINATE}.make_precise (320.66666666666669, 1171.333333333333)) + Result.extend_point (create {EV_COORDINATE}.make_precise (302.66666666666669, 1160.6666666666665)) + Result.extend_point (create {EV_COORDINATE}.make_precise (303.33333333333326, 1155.333333333333)) + Result.extend_point (create {EV_COORDINATE}.make_precise (298.66666666666663, 1153.333333333333)) + Result.extend_point (create {EV_COORDINATE}.make_precise (291.99999999999994, 1146)) + Result.extend_point (create {EV_COORDINATE}.make_precise (287.33333333333331, 1130)) + Result.extend_point (create {EV_COORDINATE}.make_precise (291.99999999999994, 1130.6666666666667)) + Result.extend_point (create {EV_COORDINATE}.make_precise (288.66666666666669, 1116.6666666666667)) + Result.extend_point (create {EV_COORDINATE}.make_precise (291.33333333333326, 1111.3333333333333)) + Result.extend_point (create {EV_COORDINATE}.make_precise (288, 1107.3333333333333)) + Result.extend_point (create {EV_COORDINATE}.make_precise (285.33333333333326, 1112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (283.33333333333331, 1101.9999999999998)) + Result.extend_point (create {EV_COORDINATE}.make_precise (290.66666666666657, 1076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (300, 1072.6666666666667)) + Result.extend_point (create {EV_COORDINATE}.make_precise (310.66666666666663, 1057.3333333333333)) + Result.extend_point (create {EV_COORDINATE}.make_precise (308.66666666666657, 1049.3333333333333)) + Result.extend_point (create {EV_COORDINATE}.make_precise (301.33333333333331, 1052)) + Result.extend_point (create {EV_COORDINATE}.make_precise (289.3333333333332, 1032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (277.33333333333331, 1025.3333333333333)) + Result.extend_point (create {EV_COORDINATE}.make_precise (263.33333333333331, 1022.6666666666666)) + Result.extend_point (create {EV_COORDINATE}.make_precise (259.33333333333331, 1015.3333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (247.33333333333331, 1011.3333333333333)) + Result.extend_point (create {EV_COORDINATE}.make_precise (236.66666666666657, 1014.6666666666665)) + Result.extend_point (create {EV_COORDINATE}.make_precise (243.99999999999994, 1016.6666666666666)) + Result.extend_point (create {EV_COORDINATE}.make_precise (240, 1020.6666666666665)) + Result.extend_point (create {EV_COORDINATE}.make_precise (240, 1028.6666666666665)) + Result.extend_point (create {EV_COORDINATE}.make_precise (228, 1036.6666666666667)) + Result.extend_point (create {EV_COORDINATE}.make_precise (230.66666666666669, 1043.9999999999998)) + Result.extend_point (create {EV_COORDINATE}.make_precise (236.66666666666657, 1047.3333333333333)) + Result.extend_point (create {EV_COORDINATE}.make_precise (237.33333333333326, 1054.6666666666667)) + Result.extend_point (create {EV_COORDINATE}.make_precise (231.99999999999994, 1055.3333333333333)) + Result.extend_point (create {EV_COORDINATE}.make_precise (227.33333333333331, 1050.6666666666667)) + Result.extend_point (create {EV_COORDINATE}.make_precise (220.66666666666663, 1046)) + Result.extend_point (create {EV_COORDINATE}.make_precise (222.66666666666669, 1040)) + Result.extend_point (create {EV_COORDINATE}.make_precise (217.3333333333332, 1040)) + Result.extend_point (create {EV_COORDINATE}.make_precise (213.33333333333326, 1046)) + Result.extend_point (create {EV_COORDINATE}.make_precise (205.33333333333331, 1038.6666666666667)) + Result.extend_point (create {EV_COORDINATE}.make_precise (212.66666666666669, 1032.6666666666667)) + Result.extend_point (create {EV_COORDINATE}.make_precise (206.66666666666669, 1022.6666666666666)) + Result.extend_point (create {EV_COORDINATE}.make_precise (198.66666666666669, 1028)) + Result.extend_point (create {EV_COORDINATE}.make_precise (201.33333333333331, 1034.6666666666667)) + Result.extend_point (create {EV_COORDINATE}.make_precise (196.66666666666663, 1046)) + Result.extend_point (create {EV_COORDINATE}.make_precise (186.66666666666669, 1040)) + Result.extend_point (create {EV_COORDINATE}.make_precise (181.33333333333326, 1048.6666666666667)) + Result.extend_point (create {EV_COORDINATE}.make_precise (186.66666666666669, 1052)) + Result.extend_point (create {EV_COORDINATE}.make_precise (188.66666666666669, 1048.6666666666667)) + Result.extend_point (create {EV_COORDINATE}.make_precise (192.66666666666663, 1056)) + Result.extend_point (create {EV_COORDINATE}.make_precise (187.99999999999994, 1059.333333333333)) + Result.extend_point (create {EV_COORDINATE}.make_precise (179.33333333333331, 1062.6666666666667)) + Result.extend_point (create {EV_COORDINATE}.make_precise (177.99999999999994, 1056.6666666666667)) + Result.extend_point (create {EV_COORDINATE}.make_precise (179.33333333333331, 1043.3333333333333)) + Result.extend_point (create {EV_COORDINATE}.make_precise (175.99999999999994, 1043.9999999999998)) + Result.extend_point (create {EV_COORDINATE}.make_precise (177.99999999999994, 1020.6666666666665)) + Result.extend_point (create {EV_COORDINATE}.make_precise (172.66666666666663, 1020.6666666666665)) + Result.extend_point (create {EV_COORDINATE}.make_precise (169.33333333333331, 1015.9999999999999)) + Result.extend_point (create {EV_COORDINATE}.make_precise (158.66666666666669, 1019.9999999999999)) + Result.extend_point (create {EV_COORDINATE}.make_precise (145.33333333333326, 1033.3333333333333)) + Result.extend_point (create {EV_COORDINATE}.make_precise (149.33333333333331, 1038.6666666666667)) + Result.extend_point (create {EV_COORDINATE}.make_precise (137.99999999999994, 1044.6666666666667)) + Result.extend_point (create {EV_COORDINATE}.make_precise (131.33333333333331, 1069.3333333333333)) + Result.extend_point (create {EV_COORDINATE}.make_precise (126, 1074)) + Result.extend_point (create {EV_COORDINATE}.make_precise (128.66666666666663, 1079.9999999999998)) + Result.extend_point (create {EV_COORDINATE}.make_precise (122.66666666666669, 1087.3333333333333)) + Result.extend_point (create {EV_COORDINATE}.make_precise (129.33333333333331, 1089.3333333333333)) + Result.extend_point (create {EV_COORDINATE}.make_precise (131.33333333333331, 1092.6666666666667)) + Result.extend_point (create {EV_COORDINATE}.make_precise (121.99999999999994, 1100)) + Result.extend_point (create {EV_COORDINATE}.make_precise (108, 1097.3333333333333)) + Result.extend_point (create {EV_COORDINATE}.make_precise (101.33333333333331, 1093.3333333333333)) + Result.extend_point (create {EV_COORDINATE}.make_precise (94, 1075.3333333333333)) + Result.extend_point (create {EV_COORDINATE}.make_precise (100.66666666666663, 1065.3333333333333)) + Result.extend_point (create {EV_COORDINATE}.make_precise (111.33333333333331, 1061.9999999999998)) + Result.extend_point (create {EV_COORDINATE}.make_precise (107.33333333333331, 1058)) + Result.extend_point (create {EV_COORDINATE}.make_precise (112, 1042.6666666666667)) + Result.extend_point (create {EV_COORDINATE}.make_precise (116.66666666666669, 1035.3333333333333)) + Result.extend_point (create {EV_COORDINATE}.make_precise (113.33333333333331, 1034)) + Result.extend_point (create {EV_COORDINATE}.make_precise (117.33333333333326, 1027.3333333333333)) + Result.extend_point (create {EV_COORDINATE}.make_precise (112.66666666666669, 1021.9999999999999)) + Result.extend_point (create {EV_COORDINATE}.make_precise (115.99999999999994, 1017.9999999999998)) + Result.extend_point (create {EV_COORDINATE}.make_precise (119.99999999999994, 1009.333333333333)) + Result.extend_point (create {EV_COORDINATE}.make_precise (126, 1005.3333333333333)) + Result.extend_point (create {EV_COORDINATE}.make_precise (125.33333333333331, 999.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (139.33333333333331, 991.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (161.33333333333331, 987.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (166.66666666666669, 980.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (169.33333333333331, 984.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (187.99999999999994, 982.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (195.33333333333326, 974.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (188.66666666666669, 969.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (195.33333333333326, 963.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (191.99999999999994, 958.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (198.66666666666669, 955.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (199.99999999999994, 949.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (211.99999999999994, 947.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (222, 948.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (228, 935.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (237.33333333333326, 930.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (241.33333333333331, 937.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (246.66666666666669, 943.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (249.99999999999994, 934.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (258.66666666666669, 937.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (264, 945.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (269.33333333333331, 948.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (274.66666666666663, 960.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (274.66666666666663, 974.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (274.66666666666663, 982.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (264, 991.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (258, 991.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (253.3333333333332, 995.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (257.33333333333331, 1001.3333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (264, 995.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (270, 989.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (279.33333333333326, 985.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (282, 980.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (289.99999999999989, 979.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (303.33333333333326, 977.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (309.99999999999994, 972.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (307.3333333333332, 964.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (313.33333333333331, 958.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (314.66666666666669, 945.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (329.33333333333331, 937.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (334.66666666666669, 943.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (341.33333333333331, 946.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (351.3333333333332, 953.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (354.66666666666669, 945.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (357.3333333333332, 939.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (351.3333333333332, 932.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (352.66666666666669, 926.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (358.66666666666669, 925.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (357.99999999999994, 906.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (365.33333333333331, 901.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (377.33333333333331, 909.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (385.33333333333331, 917.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (391.99999999999994, 917.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (395.33333333333331, 909.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (393.3333333333332, 901.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (393.99999999999994, 896.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (399.99999999999983, 893.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (401.99999999999994, 903.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (411.3333333333332, 904.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (424.66666666666669, 899.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (423.3333333333332, 891.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (425.99999999999983, 885.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (423.99999999999994, 874.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (418.66666666666657, 870.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (414.66666666666669, 839.33333333333314)) + end + +invariant + + correct_port: attached target_imp implies port = game.philippines + +end diff --git a/jj_vitp/Interface/widgets/port_widgets/port_moresby_widget.e b/jj_vitp/Interface/widgets/port_widgets/port_moresby_widget.e new file mode 100644 index 0000000..b175514 --- /dev/null +++ b/jj_vitp/Interface/widgets/port_widgets/port_moresby_widget.e @@ -0,0 +1,649 @@ +note + description: "[ + Widget representing a {PORT}. + ]" + author: "Jimmy J. Johnson" + +class + PORT_MORESBY_WIDGET + +inherit + + GREEN_PORT_WIDGET + redefine + create_interface_objects, + position_widgets, + build_land + end + +create + make + +feature {NONE} -- Initialization + + create_interface_objects + -- Initialize attributes + do + Precursor {GREEN_PORT_WIDGET} + mainland := mainland_imp + dot.set_foreground_color (Chrome) + end + + position_widgets + -- Move Current and contained widgets to correct + -- location and set their their sizes + do + Precursor {GREEN_PORT_WIDGET} + center_widget_on_other (land, dot) + scale_widget (land, 0.07) + rotate_widget (land, 15) + translate_widget (Current, 311, 399) + translate_widget (name_mt, -7, -1) + translate_widget (marker, -120, -110) + + bring_to_front (dot) + end + + build_land + -- Add widgets to Current + do + Precursor {GREEN_PORT_WIDGET} + -- Initialize attributes + land.extend (mainland) + end + +feature -- Access + + defining_figure: EV_MODEL + -- The figure to be used to determine if other figures + -- overlap this one or for capturing mouse events + do + Result := mainland + end + + mainland: EV_MODEL_POLYGON + -- The Port Moresby half of the green island + +feature -- Status report + + is_red: BOOLEAN = False + -- Does Current represent a red (i.e. major) port? + +feature {NONE} -- Implementation + + mainland_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (0, 0)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-48, -41)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-214.99999999999977, -117)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-357.99999999999977, -275)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-627.99999999999977, -424)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-779.99999999999977, -513)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1006.9999999999999, -597)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1225.9999999999998, -628)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1436.9999999999998, -599)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1429.4444444444443, -591)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1421.4444444444443, -587.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1414.7777777777776, -587.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1411.6666666666665, -582.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1399.6666666666665, -575)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1387.6666666666665, -567.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1382.7777777777776, -569.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1372.5555555555554, -570.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1366.3333333333333, -571.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1350.333333333333, -567)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1340.1111111111109, -566.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1321.8888888888887, -566.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1312.5555555555554, -558.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1298.333333333333, -550.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1287.2222222222222, -548.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1285.4444444444443, -550.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1269.8888888888887, -543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1266.333333333333, -538.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1257.4444444444443, -536.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1243.6666666666665, -527.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1236.1111111111111, -528.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1231.6666666666665, -532.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1226.7777777777776, -532.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1230.7777777777776, -528.33333333333348)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1224.9999999999998, -525.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1221.8888888888887, -527)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1218.333333333333, -530.11111111111131)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1217.8888888888887, -527)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1217.8888888888887, -523.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1215.6666666666665, -522.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1212.5555555555554, -525.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1212.1111111111111, -521.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1208.9999999999998, -521.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1205.4444444444443, -519)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1204.1111111111109, -524.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1201.8888888888887, -523.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1201.4444444444443, -519.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1197.8888888888887, -516.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1197.8888888888887, -521.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1195.6666666666665, -517.2222222222224)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1192.1111111111109, -513.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1184.9999999999998, -507.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1183.6666666666665, -511.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1180.9999999999998, -508.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1178.333333333333, -505.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1176.5555555555554, -507.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1174.3333333333333, -511.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1173.4444444444443, -508.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1168.9999999999998, -507.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1172.5555555555554, -505.22222222222234)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1173.4444444444443, -503.00000000000006)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1164.5555555555554, -500.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1160.1111111111109, -504.33333333333343)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1159.2222222222222, -501.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1160.9999999999998, -501.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1161.4444444444443, -498.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1158.7777777777776, -492.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1154.7777777777776, -493.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1154.7777777777776, -491)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1158.333333333333, -488.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1156.9999999999998, -484.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1153.8888888888889, -488.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1152.1111111111111, -485.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1147.2222222222222, -485.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1138.3333333333333, -479)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1130.7777777777776, -475)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1124.9999999999998, -471)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1128.1111111111111, -467.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1126.3333333333333, -454.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1126.3333333333333, -450.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1122.7777777777776, -452.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1119.2222222222222, -454.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1115.2222222222222, -453.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1117.8888888888889, -449.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1116.5555555555554, -445.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1107.2222222222222, -441.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1096.9999999999998, -444.33333333333348)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1096.9999999999998, -442.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1109.4444444444443, -439.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1109.8888888888887, -435.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1103.6666666666665, -430.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1102.3333333333333, -419.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1096.9999999999998, -411.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1097.4444444444443, -407.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1095.2222222222222, -397.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1092.9999999999998, -392.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1085, -386.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1077.8888888888889, -378.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1074.3333333333333, -374.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1069.8888888888889, -371.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1057.4444444444443, -363.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1060.5555555555554, -364.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1071.6666666666665, -369.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1072.1111111111109, -366.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1071.6666666666665, -362.11111111111131)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1064.1111111111111, -358.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1057.8888888888889, -352.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1050.3333333333333, -352.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1043.2222222222222, -351.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1037.4444444444443, -346.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1032.1111111111111, -342.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1027.6666666666665, -340.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1029.4444444444443, -339)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1034.7777777777776, -343)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1041.8888888888889, -347.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1045.8888888888889, -350.11111111111131)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1052.5555555555557, -350.11111111111131)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1059.2222222222222, -349.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1061.8888888888887, -353.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1068.1111111111111, -358.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1071.6666666666665, -358.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1075.6666666666665, -360.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1077.8888888888889, -358.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1073, -352.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1071.2222222222222, -348.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1065.8888888888889, -347.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1062.7777777777778, -350.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1060.5555555555554, -348.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1064.1111111111111, -346.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1067.6666666666665, -345.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1072.5555555555554, -345.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1075.2222222222222, -346.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1081.4444444444443, -343.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1081.8888888888889, -339.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1078.3333333333333, -335)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1075.6666666666665, -334.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1064.9999999999998, -325.2222222222224)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1057.4444444444443, -322.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1048.5555555555554, -322.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1039.2222222222222, -317.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1029.4444444444443, -316.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1025, -316.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1021.8888888888889, -323)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1018.3333333333333, -321.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1020.5555555555554, -319.88888888888903)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1022.7777777777776, -316.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1025.4444444444443, -314.11111111111131)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1031.6666666666665, -314.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1038.3333333333333, -314.11111111111131)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1044.1111111111111, -315)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1048.5555555555554, -319)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1054.3333333333333, -316.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1063.6666666666665, -316.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1072.1111111111109, -317.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1072.1111111111109, -315)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1062.3333333333333, -312.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1059.2222222222222, -308.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1053.8888888888889, -307)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1048.5555555555554, -298.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1044.9999999999998, -288.33333333333348)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1037.8888888888887, -288.33333333333348)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1032.1111111111111, -287)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1031.2222222222222, -282.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1035.6666666666665, -277.2222222222224)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1037.4444444444443, -272.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1038.7777777777778, -268.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1040.1111111111111, -264.33333333333348)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1039.6666666666665, -258.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1044.9999999999998, -254.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1049.4444444444443, -251)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1051.6666666666665, -247.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1051.6666666666665, -253.2222222222224)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1048.1111111111109, -256.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1042.3333333333333, -259)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1042.3333333333333, -266.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1040.1111111111111, -271.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1039.2222222222222, -277.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1034.333333333333, -283.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1047.6666666666665, -286.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1051.6666666666665, -289.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1054.3333333333333, -296.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1063.2222222222222, -301.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1073, -302.11111111111131)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1081.4444444444443, -301.2222222222224)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1105.4444444444443, -295.88888888888903)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1118.333333333333, -289.2222222222224)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1128.1111111111111, -279.88888888888914)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1136.9999999999998, -269.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1148.1111111111109, -251.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1150.7777777777776, -241.22222222222251)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1156.1111111111109, -233.2222222222224)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1162.3333333333333, -220.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1165.4444444444443, -203.88888888888914)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1162.7777777777776, -203.88888888888914)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1156.5555555555554, -207.88888888888914)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1146.333333333333, -210.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1129.8888888888889, -209.2222222222224)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1116.1111111111111, -209.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1110.333333333333, -208.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1108.9999999999998, -204.33333333333348)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1100.5555555555554, -206.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1091.6666666666665, -211.88888888888903)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1085, -217.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1076.1111111111111, -223.00000000000011)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1071.6666666666665, -232.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1066.3333333333333, -232.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1060.5555555555554, -234.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1057.8888888888889, -238.55555555555577)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1052.9999999999998, -239)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1052.5555555555557, -242.11111111111131)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1052.5555555555557, -244.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1049, -246.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1049.8888888888887, -242.11111111111131)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1049, -239)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1051.6666666666665, -236.77777777777794)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1055.6666666666665, -236.33333333333348)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1056.5555555555554, -232.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1060.5555555555554, -231)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1066.3333333333333, -228.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1069.4444444444443, -229.22222222222251)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1072.1111111111109, -224.77777777777794)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1077.4444444444443, -219.88888888888914)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1081.4444444444443, -215.88888888888914)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1081.4444444444443, -213.2222222222224)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1078.3333333333333, -211.00000000000011)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1071.6666666666665, -211.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1064.1111111111111, -209.2222222222224)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1057.8888888888889, -210.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1050.3333333333333, -209.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1047.6666666666665, -211.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1044.5555555555554, -212.77777777777794)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1041.8888888888889, -214.55555555555577)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1041.8888888888889, -218.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1044.5555555555554, -220.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1047.2222222222222, -218.11111111111131)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1048.5555555555554, -215)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1049.8888888888887, -219)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1052.9999999999998, -223.00000000000011)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1055.6666666666665, -227)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1055.2222222222222, -229.22222222222251)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1052.9999999999998, -225.2222222222224)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1050.3333333333333, -221.2222222222224)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1046.333333333333, -223.00000000000011)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1043.6666666666665, -225.2222222222224)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1037.8888888888887, -231.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1022.3333333333331, -236.77777777777794)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1020.9999999999998, -242.11111111111131)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1020.9999999999998, -234.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1016.1111111111111, -228.33333333333348)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1010.3333333333331, -226.11111111111131)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-995.66666666666652, -227.88888888888914)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-988.99999999999989, -231.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-976.11111111111097, -234.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-961.88888888888891, -233.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-956.55555555555554, -233.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-952.55555555555543, -237.66666666666686)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-947.66666666666652, -238.11111111111131)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-944.99999999999977, -238.55555555555577)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-945.44444444444446, -235.88888888888903)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-949.44444444444434, -235.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-953.44444444444434, -234.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-955.66666666666663, -230.11111111111131)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-954.77777777777771, -226.55555555555577)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-937.44444444444434, -213.2222222222224)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-928.99999999999989, -206.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-920.55555555555554, -200.33333333333348)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-916.99999999999989, -193.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-907.22222222222217, -187.88888888888903)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-903.22222222222217, -177.2222222222224)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-894.33333333333326, -165.2222222222224)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-879.66666666666652, -152.77777777777794)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-874.33333333333326, -146.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-869.44444444444434, -143.88888888888914)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-858.33333333333326, -139.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-852.11111111111109, -136.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-848.55555555555554, -130.55555555555577)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-841.44444444444434, -130.55555555555577)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-833.44444444444434, -134.11111111111131)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-828.55555555555543, -139.00000000000011)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-820.99999999999977, -140.33333333333348)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-816.11111111111109, -137.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-812.99999999999977, -134.11111111111131)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-805.88888888888891, -134.11111111111131)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-803.66666666666652, -131.88888888888914)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-796.11111111111109, -135)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-787.22222222222217, -135.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-776.55555555555543, -133.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-771.66666666666652, -135.88888888888914)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-773.44444444444434, -133.22222222222251)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-765.44444444444457, -135)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-752.11111111111109, -139.88888888888903)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-749.88888888888891, -149.2222222222224)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-747.22222222222217, -154.11111111111131)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-747.22222222222217, -151.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-748.55555555555543, -145.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-748.55555555555543, -141.2222222222224)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-748.55555555555543, -137.2222222222224)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-742.7777777777776, -132.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-735.66666666666652, -133.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-728.55555555555543, -131.44444444444468)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-719.66666666666652, -122.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-710.7777777777776, -121.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-702.33333333333326, -125.2222222222224)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-694.7777777777776, -131)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-684.99999999999977, -135.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-682.7777777777776, -139.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-672.55555555555543, -145.22222222222251)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-663.22222222222217, -146.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-660.99999999999977, -149.2222222222224)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-647.2222222222224, -147.88888888888914)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-644.99999999999977, -151.00000000000011)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-641.88888888888891, -150.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-638.7777777777776, -149.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-637.44444444444434, -152.77777777777794)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-637.44444444444434, -155)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-640.55555555555543, -155)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-640.11111111111109, -166.11111111111131)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-641.88888888888891, -167.88888888888914)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-640.55555555555543, -175.00000000000011)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-648.99999999999977, -185.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-655.22222222222217, -192.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-664.99999999999977, -199.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-671.2222222222224, -203.88888888888914)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-683.66666666666652, -206.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-694.33333333333326, -212.33333333333348)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-701.88888888888891, -215.44444444444468)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-709.44444444444434, -215.44444444444468)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-715.66666666666674, -214.55555555555577)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-720.55555555555543, -211.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-724.11111111111109, -210.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-729.88888888888891, -212.77777777777794)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-732.11111111111109, -217.22222222222251)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-734.33333333333326, -223.00000000000011)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-736.55555555555543, -227)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-742.7777777777776, -227.44444444444468)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-739.22222222222217, -230.11111111111131)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-733.88888888888891, -229.22222222222251)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-731.66666666666652, -225.2222222222224)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-731.2222222222224, -220.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-729.44444444444457, -215)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-723.66666666666652, -214.55555555555577)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-720.55555555555543, -215)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-715.66666666666674, -218.11111111111131)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-712.11111111111109, -218.11111111111131)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-706.33333333333326, -220.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-697.44444444444434, -218.11111111111131)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-690.33333333333326, -214.55555555555577)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-686.7777777777776, -216.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-681.44444444444457, -212.77777777777794)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-673.44444444444434, -214.11111111111131)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-664.55555555555543, -217.22222222222251)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-652.99999999999977, -220.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-646.7777777777776, -222.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-626.7777777777776, -222.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-623.2222222222224, -222.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-614.7777777777776, -224.77777777777794)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-613.44444444444434, -228.33333333333348)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-618.33333333333326, -227)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-624.11111111111109, -229.22222222222251)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-620.55555555555543, -230.11111111111131)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-616.11111111111109, -230.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-616.11111111111109, -234.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-620.55555555555543, -236.77777777777794)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-613.88888888888891, -236.33333333333348)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-616.99999999999977, -240.33333333333348)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-624.11111111111109, -243)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-618.7777777777776, -244.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-612.99999999999977, -240.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-607.22222222222217, -241.22222222222251)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-599.2222222222224, -240.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-598.7777777777776, -244.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-594.7777777777776, -243.88888888888914)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-595.22222222222217, -251.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-598.7777777777776, -256.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-600.11111111111109, -265.2222222222224)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-599.2222222222224, -268.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-593.88888888888891, -261.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-588.55555555555543, -259.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-590.7777777777776, -265.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-595.66666666666674, -268.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-600.99999999999977, -274.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-590.7777777777776, -269.2222222222224)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-585.44444444444457, -266.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-580.11111111111109, -265.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-579.66666666666652, -269.2222222222224)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-576.99999999999977, -264.33333333333348)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-572.55555555555543, -262.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-572.11111111111109, -267)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-570.33333333333326, -262.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-563.66666666666652, -264.33333333333348)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-565.44444444444434, -267)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-563.66666666666652, -271.88888888888903)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-567.22222222222217, -274.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-561.88888888888891, -275.88888888888903)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-559.22222222222217, -270.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-556.55555555555543, -270.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-558.33333333333326, -275.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-557.88888888888891, -278.11111111111131)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-554.7777777777776, -274.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-553.44444444444434, -270.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-552.55555555555543, -266.11111111111131)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-549.88888888888891, -266.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-547.22222222222217, -268.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-544.99999999999977, -263.88888888888903)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-540.11111111111109, -263)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-544.55555555555543, -268.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-545.44444444444434, -271.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-545.44444444444434, -275)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-548.11111111111109, -281.2222222222224)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-548.55555555555543, -284.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-545.44444444444434, -282.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-540.99999999999977, -276.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-539.2222222222224, -272.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-536.99999999999977, -275)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-540.55555555555543, -279.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-539.2222222222224, -281.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-540.11111111111109, -287.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-536.99999999999977, -291.88888888888914)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-536.99999999999977, -286.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-535.22222222222217, -279.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-530.33333333333326, -276.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-525.88888888888891, -276.33333333333348)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-527.66666666666652, -283.88888888888903)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-527.66666666666652, -287.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-525.88888888888891, -285.2222222222224)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-523.22222222222217, -287)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-523.22222222222217, -281.2222222222224)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-518.33333333333326, -278.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-518.7777777777776, -275.88888888888903)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-512.11111111111109, -275.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-510.7777777777776, -280.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-512.11111111111109, -284.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-508.55555555555543, -282.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-508.99999999999977, -279.88888888888914)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-508.11111111111109, -276.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-508.11111111111109, -272.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-508.55555555555543, -268.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-512.11111111111109, -270.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-507.66666666666652, -265.2222222222224)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-498.7777777777776, -263)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-493.88888888888891, -259)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-488.55555555555543, -261.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-481.88888888888891, -259)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-473.44444444444457, -258.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-466.33333333333326, -257.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-461.88888888888891, -254.11111111111131)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-457.44444444444457, -249.2222222222224)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-438.77777777777783, -251)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-425.44444444444457, -247)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-420.11111111111109, -241.22222222222251)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-406.33333333333326, -238.55555555555577)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-399.22222222222217, -235.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-395.2222222222224, -229.22222222222251)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-392.11111111111109, -223.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-383.2222222222224, -220.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-380.55555555555543, -211.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-380.99999999999977, -206.11111111111131)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-373.44444444444457, -193.22222222222251)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-366.33333333333326, -187.88888888888903)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-360.55555555555543, -183)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-357.44444444444457, -175.00000000000011)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-355.66666666666674, -170.11111111111131)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-352.99999999999977, -157.22222222222251)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-348.99999999999977, -150.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-338.33333333333326, -147)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-331.22222222222217, -145.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-324.11111111111109, -140.77777777777794)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-317.44444444444457, -146.11111111111131)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-315.2222222222224, -149.2222222222224)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-316.99999999999977, -143.44444444444468)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-320.55555555555543, -141.2222222222224)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-322.33333333333326, -137.2222222222224)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-321.88888888888891, -132.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-320.55555555555543, -125.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-314.77777777777806, -125.2222222222224)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-311.2222222222224, -113.2222222222224)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-303.2222222222224, -108.33333333333348)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-304.55555555555543, -113.2222222222224)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-301.88888888888891, -114.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-299.66666666666674, -110.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-295.66666666666674, -103.88888888888903)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-290.77777777777806, -103.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-292.11111111111131, -108.33333333333348)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-288.11111111111109, -107.88888888888914)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-286.33333333333326, -100.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-278.33333333333348, -94.111111111111313)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-274.33333333333326, -86.111111111111313)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-268.99999999999977, -80.777777777777942)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-266.77777777777806, -73.222222222222513)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-261.4444444444448, -67.000000000000114)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-259.22222222222217, -62.555555555555657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-252.99999999999977, -58.55555555555577)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-249, -58.55555555555577)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-247.66666666666674, -50.111111111111313)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-244.99999999999977, -52.777777777777828)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-239.66666666666674, -55.444444444444571)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-235.22222222222217, -52.333333333333371)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-229.44444444444457, -52.777777777777828)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-225.4444444444448, -43.888888888889028)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-220.11111111111131, -47)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-213.88888888888891, -47.444444444444684)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-208.55555555555543, -51.444444444444571)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-203.2222222222224, -58.111111111111313)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-204.55555555555566, -54.555555555555657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-204.11111111111109, -51.444444444444571)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-200.55555555555543, -51)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-197.44444444444457, -47)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-193.88888888888891, -48.333333333333485)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-190.77777777777783, -43.444444444444571)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-186.33333333333326, -41.222222222222399)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-173.44444444444457, -43.888888888889028)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-164.11111111111109, -43.444444444444571)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-159.66666666666652, -47.444444444444684)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-156.55555555555566, -45.666666666666856)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-158.33333333333348, -43.444444444444571)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-151.22222222222217, -42.555555555555657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-155.2222222222224, -40.777777777777828)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-150.33333333333326, -38.111111111111313)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-142.33333333333326, -39)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-136.11111111111131, -36.333333333333485)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-133.88888888888891, -31.888888888889028)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-129.4444444444448, -36.333333333333485)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-122.77777777777806, -38.111111111111313)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-115.22222222222217, -36.777777777777828)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-107.2222222222224, -33.666666666666856)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-100.99999999999977, -30.555555555555657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-98.333333333333485, -34.55555555555577)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-92.555555555555429, -31.000000000000114)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-90.777777777778056, -27.444444444444571)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-83.222222222222399, -27)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-75.666666666666515, -28.333333333333371)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-63.222222222222399, -28.777777777777828)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-53.888888888889142, -23.444444444444684)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-48.111111111111086, -14.555555555555657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-45.444444444444798, -19.888888888889028)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-40.555555555555429, -17.666666666666742)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-36.555555555555657, -17.666666666666742)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-32.111111111111086, -17.222222222222399)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-29.444444444444571, -19.444444444444571)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-29.444444444444571, -15)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-33, -15.888888888889142)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-35.666666666666742, -14.555555555555657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-39.666666666666515, -12.333333333333485)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-43.666666666666742, -12.333333333333485)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-45.888888888888914, -12.777777777777828)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-48.999999999999773, -11.444444444444684)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-52.111111111111313, -14.111111111111313)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-55.222222222222172, -15.888888888889142)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-55.666666666666742, -12.777777777777828)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-52.111111111111313, -10.55555555555577)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-49.444444444444571, -8.3333333333334849)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-44.111111111111086, -8.777777777777942)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-42.777777777778056, -5.6666666666667425)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-38.777777777778056, -6.1111111111111995)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-38.333333333333485, -3.4444444444445708)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-29.888888888889142, 2.3333333333331439)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-27.666666666666515, -0.77777777777782831)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-23.222222222222399, 0.11111111111085847)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-24.111111111111086, 2.7777777777776009)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-19.222222222222172, 4.9999999999998863)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-16.555555555555429, 2.7777777777776009)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-13.888888888888914, 2.7777777777776009)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-9.8888888888889142, -0.77777777777782831)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-8.5555555555554292, 2.7777777777776009)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-3.2222222222223991, 3.222222222222058)) + end + +invariant + + correct_port: attached target_imp implies port = game.port_moresby + +end diff --git a/jj_vitp/Interface/widgets/port_widgets/port_widget.e b/jj_vitp/Interface/widgets/port_widgets/port_widget.e new file mode 100644 index 0000000..0b8bb6a --- /dev/null +++ b/jj_vitp/Interface/widgets/port_widgets/port_widget.e @@ -0,0 +1,228 @@ +note + description: "[ + Represents a port in VITP. + ]" + author: "Jimmy J. Johnson" + +deferred class + PORT_WIDGET + +inherit + + LOCATION_WIDGET + rename + location as port + redefine + create_interface_objects, +-- initialize, + extend_widgets, +-- build_widgets, + set_fonts_and_colors, + position_widgets, + set_widget_order, + add_actions, + set_target, + paint, + on_button_released, +-- on_pointer_leave, +-- on_pointer_motion, + target_imp + end + +feature {NONE} -- Initialization + + create_interface_objects + -- Initialize attributes + do +print ("PORT_WIDGET.create_interface_objects %N") + Precursor {LOCATION_WIDGET} + create anchor + create marker.make (port) + create saved_point + end + + extend_widgets + -- Put widgets into Current. This cannot be done + -- in `create_interface_object', because cannot call + -- `extend' feature until all objects [in descendants] + -- are also created. + do + Precursor {LOCATION_WIDGET} + extend (anchor) + extend (marker) + end + +-- build_widgets +-- -- Now that widgets were created in `create_interface_objects' +-- -- and added to Current in `extend_widgets', build up the +-- -- widgets by adding internal structure to each widget. +-- do +-- Precursor {LOCATION_WIDGET} +-- build_land +-- end + + set_fonts_and_colors + -- Set the default fonts for any text widgets and set + -- the default colors for any contained widgets. + do + Precursor {LOCATION_WIDGET} + if is_red then + name_mt.set_font (Major_port_font) + land_color := Red_port_color + else + name_mt.set_font (Port_font) + land_color := Green_port_color + end + end + + position_widgets + -- Move Current and contained widgets to correct + -- location and set their their sizes + do + Precursor {LOCATION_WIDGET} + marker.set_x_y (x, y) + anchor.set_x_y (x, y) + if not is_red then + anchor.hide + marker.hide_anchor + end + end + + set_widget_order + -- Ensure the widgets are ordered properly + -- (i.e. whose on top?) + do + Precursor {LOCATION_WIDGET} + bring_to_front (land) + bring_to_front (anchor) + bring_to_front (marker) + bring_to_front (text_group) + bring_to_front (dot) + end + + add_actions + -- Add actions to the port (really just the marker) + do + Precursor {LOCATION_WIDGET} + pointer_motion_actions.extend (agent on_pointer_motion) + marker.pointer_button_press_actions.extend (agent on_marker_pressed) +-- pointer_leave_actions.extend (agent on_pointer_leave) + jj_defining_figure.pointer_leave_actions.extend (agent on_leave_defining_figure) + end + +feature -- Status report + +feature -- Status report + + is_red: BOOLEAN + -- Does Current represent a red (i.e. major) port? + deferred + end + +-- is_port_widget_initialized: BOOLEAN +-- -- Have the initialization rouines been called for Current +-- -- Current through this interface? +-- -- A check statment guards each initialization routine, preventing +-- -- any attempt to call these features a second time. A second call +-- -- could happen in the case of muliple inheritance, which is used +-- -- for descendants that inherit multiply from ISLAND_PORT_WIDGET +-- -- and one of RED_PORT_WIDGET and GREEN_PORT_WIDGET (e.g. ATTU_WIDGET, +-- -- and TRUK_WIDGET). + +feature -- Basic operations + + set_target (a_target: like port) + -- Change the `port'. + do + Precursor {LOCATION_WIDGET} (a_target) + marker.set_location (port) + end + + paint + -- Set the colors for the land and other areas + local + bc, c: EV_COLOR + do + Precursor {LOCATION_WIDGET} + marker.paint + anchor.set_foreground_color (adjusted_color (Black)) + anchor.set_background_color (adjusted_color (Black)) + end + +feature {NONE} -- Implementation (actions) + + on_marker_pressed (ax: INTEGER; ay: INTEGER; a_button: INTEGER; x_tilt: DOUBLE; y_tilt: DOUBLE; + pressure: DOUBLE; a_screen_x: INTEGER; a_screen_y: INTEGER) + -- The `marker' was pressed + do + io.put_string ("PORT_WIDGET.on_marker_pressed %N") + is_dragging_marker := True + enable_capture + end + + on_button_released (ax: INTEGER; ay: INTEGER; a_button: INTEGER; x_tilt: DOUBLE; y_tilt: DOUBLE; + pressure: DOUBLE; a_screen_x: INTEGER; a_screen_y: INTEGER) + -- React to button release by dropping the `marker' if + -- was `is_dragging_marker'. + local + c: detachable EV_COORDINATE + do + Precursor {LOCATION_WIDGET} (ax, ay, a_button, x_tilt, y_tilt, pressure, a_screen_x, a_screen_y) + if is_dragging_marker then +-- create c.make (ax, ay) +-- marker.center_on_point (c) + marker.set_x_y (ax, ay) +-- disable_capture + end + is_dragging_marker := False +-- Precursor {LOCATION_WIDGET} (ax, ay, a_button, x_tilt, y_tilt, pressure, a_screen_x, a_screen_y) + end + + on_leave_defining_figure + -- If pointer leaves `defining_figure', then release the + -- capture and drop the marker + do + io.put_string ("PORT_WIDGET.on_leave_defining_figure %N") + if is_dragging_marker then +-- marker.center_on_point (saved_point) + marker.set_x_y (saved_point.x, saved_point.y) +-- disable_capture + end + is_dragging_marker := False + end + + on_pointer_motion (ax: INTEGER; ay: INTEGER; x_tilt: DOUBLE; y_tilt: DOUBLE; + pressure: DOUBLE; a_screen_x: INTEGER; a_screen_y: INTEGER) + -- The pointer is moving + do + io.put_string ("PORT_WIDGET.on_pointer_motion -- is_dragging_marker = " + is_dragging_marker.out + "%N") + saved_point.set (ax, ay) + if is_dragging_marker then + if jj_defining_figure.position_on_figure (ax, ay) then +-- marker.center_on_point (saved_point) + marker.set_x_y (saved_point.x, saved_point.y) + else +-- disable_capture + is_dragging_marker := false + end + end + end + +feature {NONE} -- Implementation + + target_imp: detachable PORT + -- Anchor for the `target' represented by Current + + is_dragging_marker: BOOLEAN + -- Is the marker being moved? + + saved_point: EV_COORDINATE + -- The location within Current to where the mouse last moved + + marker: CONTROL_MARKER + -- The marker associated with this port + + anchor: ANCHOR + -- Image of an anchor for display on some ports + +end diff --git a/jj_vitp/Interface/widgets/port_widgets/red_port_widget.e b/jj_vitp/Interface/widgets/port_widgets/red_port_widget.e new file mode 100644 index 0000000..b0385c1 --- /dev/null +++ b/jj_vitp/Interface/widgets/port_widgets/red_port_widget.e @@ -0,0 +1,31 @@ +note + description: "[ + Widget representing a major port. + ]" + author: "Jimmy J. Johnson" + date: "$Date$" + revision: "$Revision$" + +deferred class + RED_PORT_WIDGET + +inherit + + PORT_WIDGET + redefine + position_widgets + end + +feature {NONE} -- Initialization + + position_widgets + -- Move Current and contained widgets to correct + -- location and set their their sizes + do + Precursor {PORT_WIDGET} + scale_widget (marker, 0.08) + anchor.scale (0.07) + anchor.set_x_y (x, y) + end + +end diff --git a/jj_vitp/Interface/widgets/port_widgets/saigon_widget.e b/jj_vitp/Interface/widgets/port_widgets/saigon_widget.e new file mode 100644 index 0000000..c7fcd9a --- /dev/null +++ b/jj_vitp/Interface/widgets/port_widgets/saigon_widget.e @@ -0,0 +1,325 @@ +note + description: "[ + Widget representing a {PORT}. + ]" + author: "Jimmy J. Johnson" + +class + SAIGON_WIDGET + +inherit + + RED_PORT_WIDGET + redefine + create_interface_objects, + position_widgets, + build_land + end + +create + make + +feature {NONE} -- Initialization + + create_interface_objects + -- Initialize attributes + do + Precursor {RED_PORT_WIDGET} + mainland := mainland_imp + end + + position_widgets + -- Move Current and contained widgets to correct + -- location and set their their sizes + do + Precursor {RED_PORT_WIDGET} + -- make adjustments + scale_widget (land, 0.27) + rotate_widget (land, 13.0) + translate_widget (Current, 70, 46) + marker.set_x_y (x + 8, y + 65) + text_group.set_x_y (x, y + 80) + anchor.set_x_y (x + 10, y + 88) + + dot.set_x_y (x - 5 , y + 90) + end + + build_land + -- Add widgets to Current + do + Precursor {RED_PORT_WIDGET} + -- Initialize attributes + land.extend (mainland) + end + +feature -- Access + + mainland: EV_MODEL_POLYGON + +feature -- Status report + + is_red: BOOLEAN = True + -- Does Current represent a red (i.e. major) port? + +feature {NONE} -- Implementation + + mainland_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (0, 0)) + Result.extend_point (create {EV_COORDINATE}.make_precise (14.222222222222172, 8.4444444444445708)) + Result.extend_point (create {EV_COORDINATE}.make_precise (20, 0.44444444444457076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (24.4444444444444, 4)) + Result.extend_point (create {EV_COORDINATE}.make_precise (27.111111111111086, 0)) + Result.extend_point (create {EV_COORDINATE}.make_precise (33.777777777777715, 7.1111111111111995)) + Result.extend_point (create {EV_COORDINATE}.make_precise (36.8888888888888, 0)) + Result.extend_point (create {EV_COORDINATE}.make_precise (42.222222222222172, -2.2222222222221717)) + Result.extend_point (create {EV_COORDINATE}.make_precise (42.666666666666629, 2.2222222222223991)) + Result.extend_point (create {EV_COORDINATE}.make_precise (47.555555555555486, -1.7777777777776009)) + Result.extend_point (create {EV_COORDINATE}.make_precise (52.4444444444444, -0.44444444444434339)) + Result.extend_point (create {EV_COORDINATE}.make_precise (53.777777777777715, -3.5555555555554292)) + Result.extend_point (create {EV_COORDINATE}.make_precise (53.777777777777715, -7.5555555555554292)) + Result.extend_point (create {EV_COORDINATE}.make_precise (63.555555555555486, -12)) + Result.extend_point (create {EV_COORDINATE}.make_precise (64.8888888888888, -14.666666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (69.333333333333314, -10.666666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (70.666666666666629, -7.5555555555554292)) + Result.extend_point (create {EV_COORDINATE}.make_precise (75.111111111111086, -6.6666666666666288)) + Result.extend_point (create {EV_COORDINATE}.make_precise (77.333333333333258, -4)) + Result.extend_point (create {EV_COORDINATE}.make_precise (84.444444444444343, -5.7777777777776009)) + Result.extend_point (create {EV_COORDINATE}.make_precise (88, -3.1111111111109722)) + Result.extend_point (create {EV_COORDINATE}.make_precise (93.777777777777715, -4)) + Result.extend_point (create {EV_COORDINATE}.make_precise (99.111111111111086, -0.44444444444434339)) + Result.extend_point (create {EV_COORDINATE}.make_precise (98.222222222222172, 5.3333333333333712)) + Result.extend_point (create {EV_COORDINATE}.make_precise (94.666666666666629, 6.2222222222223991)) + Result.extend_point (create {EV_COORDINATE}.make_precise (93.777777777777715, 10.666666666666742)) + Result.extend_point (create {EV_COORDINATE}.make_precise (96, 12)) + Result.extend_point (create {EV_COORDINATE}.make_precise (96, 20.888888888889028)) + Result.extend_point (create {EV_COORDINATE}.make_precise (97.333333333333258, 19.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (104.44444444444434, 20.444444444444571)) + Result.extend_point (create {EV_COORDINATE}.make_precise (104.8888888888888, 23.555555555555657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (111.55555555555543, 25.333333333333371)) + Result.extend_point (create {EV_COORDINATE}.make_precise (111.55555555555543, 29.333333333333371)) + Result.extend_point (create {EV_COORDINATE}.make_precise (114.22222222222217, 27.555555555555657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (117.33333333333326, 30.222222222222399)) + Result.extend_point (create {EV_COORDINATE}.make_precise (123.11111111111109, 27.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (128, 31.555555555555657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (125.77777777777771, 32.888888888889028)) + Result.extend_point (create {EV_COORDINATE}.make_precise (121.77777777777771, 32.888888888889028)) + Result.extend_point (create {EV_COORDINATE}.make_precise (118.66666666666663, 36.888888888889028)) + Result.extend_point (create {EV_COORDINATE}.make_precise (116.44444444444434, 40.444444444444571)) + Result.extend_point (create {EV_COORDINATE}.make_precise (112, 44.888888888889028)) + Result.extend_point (create {EV_COORDINATE}.make_precise (106.66666666666663, 46.222222222222399)) + Result.extend_point (create {EV_COORDINATE}.make_precise (102.22222222222217, 47.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (101.33333333333326, 51.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (100.8888888888888, 56)) + Result.extend_point (create {EV_COORDINATE}.make_precise (96.8888888888888, 64.444444444444571)) + Result.extend_point (create {EV_COORDINATE}.make_precise (92.8888888888888, 65.333333333333371)) + Result.extend_point (create {EV_COORDINATE}.make_precise (88.8888888888888, 65.777777777777828)) + Result.extend_point (create {EV_COORDINATE}.make_precise (86.222222222222172, 68.444444444444571)) + Result.extend_point (create {EV_COORDINATE}.make_precise (82.666666666666629, 70.222222222222399)) + Result.extend_point (create {EV_COORDINATE}.make_precise (80.444444444444343, 75.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (77.777777777777715, 79.555555555555657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (77.777777777777715, 85.333333333333371)) + Result.extend_point (create {EV_COORDINATE}.make_precise (76, 90.666666666666742)) + Result.extend_point (create {EV_COORDINATE}.make_precise (74.222222222222172, 92)) + Result.extend_point (create {EV_COORDINATE}.make_precise (75.555555555555429, 95.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (77.333333333333258, 98.222222222222399)) + Result.extend_point (create {EV_COORDINATE}.make_precise (79.111111111111086, 104)) + Result.extend_point (create {EV_COORDINATE}.make_precise (84.444444444444343, 110.2222222222224)) + Result.extend_point (create {EV_COORDINATE}.make_precise (89.777777777777715, 113.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (92.444444444444343, 117.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (92, 121.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (99.111111111111086, 131.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (105.33333333333326, 137.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (113.33333333333326, 147.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (124.44444444444434, 154.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (129.77777777777771, 158.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (134.66666666666663, 164.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (138.66666666666663, 170.2222222222224)) + Result.extend_point (create {EV_COORDINATE}.make_precise (145.33333333333326, 177.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (147.55555555555543, 184.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (150.22222222222217, 192.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (153.77777777777771, 196.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (155.11111111111109, 207.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (156.8888888888888, 216.88888888888903)) + Result.extend_point (create {EV_COORDINATE}.make_precise (156, 220.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (157.33333333333326, 224.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (155.55555555555543, 226.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (158.22222222222217, 234.2222222222224)) + Result.extend_point (create {EV_COORDINATE}.make_precise (160.8888888888888, 237.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (156.44444444444434, 243.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (156.8888888888888, 248.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (154.66666666666663, 250.2222222222224)) + Result.extend_point (create {EV_COORDINATE}.make_precise (156, 255.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (156.8888888888888, 259.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (155.11111111111109, 261.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (155.55555555555543, 264.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (153.33333333333326, 268.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (151.11111111111109, 268.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (149.33333333333326, 273.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (146.66666666666663, 273.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (142.22222222222217, 278.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (136.8888888888888, 281.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (130.22222222222217, 283.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (126.66666666666663, 289.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (115.55555555555543, 293.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (111.55555555555543, 293.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (102.22222222222217, 296.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (99.111111111111086, 292.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (100, 298.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (96.8888888888888, 304.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (97.333333333333258, 308.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (96, 312)) + Result.extend_point (create {EV_COORDINATE}.make_precise (92.444444444444343, 315.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (88, 317.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (83.111111111111086, 320)) + Result.extend_point (create {EV_COORDINATE}.make_precise (75.555555555555429, 323.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (69.777777777777715, 327.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (66.222222222222172, 333.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (60.8888888888888, 336.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (52.8888888888888, 337.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (52.4444444444444, 320)) + Result.extend_point (create {EV_COORDINATE}.make_precise (53.777777777777715, 308.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (57.777777777777715, 305.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (57.777777777777715, 302.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (54.666666666666629, 304)) + Result.extend_point (create {EV_COORDINATE}.make_precise (52.8888888888888, 301.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (48.8888888888888, 304)) + Result.extend_point (create {EV_COORDINATE}.make_precise (46.666666666666629, 299.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (42.666666666666629, 299.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (39.555555555555486, 293.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (33.777777777777715, 292.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (32.8888888888888, 295.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (36.4444444444444, 295.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (37.777777777777715, 301.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (36, 305.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (33.777777777777715, 300)) + Result.extend_point (create {EV_COORDINATE}.make_precise (30.222222222222172, 295.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (25.777777777777715, 293.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (22.666666666666629, 290.2222222222224)) + Result.extend_point (create {EV_COORDINATE}.make_precise (24.8888888888888, 287.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (27.111111111111086, 286.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (26.222222222222172, 282.2222222222224)) + Result.extend_point (create {EV_COORDINATE}.make_precise (24.8888888888888, 279.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (22.222222222222172, 285.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (18.666666666666629, 284.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (16.8888888888888, 288.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (14.222222222222172, 284.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (13.333333333333314, 278.2222222222224)) + Result.extend_point (create {EV_COORDINATE}.make_precise (9.7777777777777146, 272.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (12, 270.2222222222224)) + Result.extend_point (create {EV_COORDINATE}.make_precise (9.3333333333333144, 267.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (6.2222222222221717, 258.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (5.7777777777777146, 253.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (6.2222222222221717, 248)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1.3333333333333144, 244.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (0.44444444444440023, 234.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-3.5555555555555998, 230.2222222222224)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-2.6666666666666856, 221.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (4.4444444444444002, 221.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (2.6666666666666288, 219.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (9.7777777777777146, 210.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (11.111111111111086, 206.2222222222224)) + Result.extend_point (create {EV_COORDINATE}.make_precise (18.222222222222172, 201.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (27.555555555555486, 200.88888888888903)) + Result.extend_point (create {EV_COORDINATE}.make_precise (34.666666666666629, 204)) + Result.extend_point (create {EV_COORDINATE}.make_precise (39.555555555555486, 200.88888888888903)) + Result.extend_point (create {EV_COORDINATE}.make_precise (45.777777777777715, 202.2222222222224)) + Result.extend_point (create {EV_COORDINATE}.make_precise (50.222222222222172, 201.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (56.4444444444444, 201.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (59.111111111111086, 205.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (61.333333333333314, 202.2222222222224)) + Result.extend_point (create {EV_COORDINATE}.make_precise (68.8888888888888, 199.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (70.666666666666629, 195.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (69.777777777777715, 192.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (69.333333333333314, 187.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (68, 183.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (70.666666666666629, 176)) + Result.extend_point (create {EV_COORDINATE}.make_precise (70.666666666666629, 171.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (68, 170.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (65.333333333333314, 168)) + Result.extend_point (create {EV_COORDINATE}.make_precise (66.666666666666629, 163.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (59.111111111111086, 162.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (58.666666666666629, 159.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (52.4444444444444, 153.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (51.555555555555486, 137.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (52.8888888888888, 130.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (44.4444444444444, 124.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (39.111111111111086, 117.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (34.666666666666629, 108.88888888888903)) + Result.extend_point (create {EV_COORDINATE}.make_precise (32.8888888888888, 110.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (26.222222222222172, 107.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (20.4444444444444, 106.2222222222224)) + Result.extend_point (create {EV_COORDINATE}.make_precise (17.777777777777715, 107.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (19.555555555555486, 109.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (15.555555555555486, 110.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (15.111111111111086, 114.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (14.666666666666629, 116.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (9.3333333333333144, 116.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (5.3333333333333144, 121.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (3.1111111111110858, 120.88888888888903)) + Result.extend_point (create {EV_COORDINATE}.make_precise (3.1111111111110858, 117.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-0.44444444444451392, 117.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-7.5555555555555998, 111.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-11.5555555555556, 116.44444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-14.666666666666686, 115.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-16, 118.2222222222224)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-19.5555555555556, 118.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-19.5555555555556, 121.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-24, 123.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-29.777777777777828, 129.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-33.333333333333371, 127.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-32.888888888888914, 119.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-28.888888888888914, 115.55555555555566)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-28.444444444444514, 109.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-31.5555555555556, 106.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-27.1111111111112, 100)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-28, 95.555555555555657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-25.333333333333371, 91.555555555555657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-27.1111111111112, 88.444444444444571)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-28.444444444444514, 83.555555555555657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-26.222222222222285, 77.777777777777828)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-34.666666666666686, 76.888888888889028)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-37.333333333333371, 81.777777777777828)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-39.5555555555556, 78.666666666666742)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-42.666666666666686, 80.888888888889028)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-46.666666666666686, 78.222222222222399)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-47.1111111111112, 74.666666666666742)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-44, 72)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-42.666666666666686, 65.333333333333371)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-48, 59.1111111111112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-51.5555555555556, 61.333333333333371)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-54.222222222222285, 61.333333333333371)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-52.888888888888914, 56.444444444444571)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-49.777777777777828, 48.888888888889028)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-43.5555555555556, 45.777777777777828)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-40.444444444444514, 36.444444444444571)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-34.666666666666686, 36)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-29.777777777777828, 30.666666666666742)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-27.1111111111112, 32)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-28.888888888888914, 34.222222222222399)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-26.222222222222285, 34.666666666666742)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-28.444444444444514, 38.222222222222399)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-26.666666666666686, 40)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-21.333333333333371, 37.333333333333371)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-16.888888888888914, 40.444444444444571)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-14.666666666666686, 38.222222222222399)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-16.888888888888914, 36.444444444444571)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-15.1111111111112, 24.888888888889028)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-17.777777777777828, 20.444444444444571)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-20.888888888888914, 14.666666666666742)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-18.666666666666686, 12)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-18.222222222222285, 8.4444444444445708)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-15.5555555555556, 8)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-12.888888888888914, 10.666666666666742)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-10.666666666666686, 8.4444444444445708)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-4.4444444444445139, 9.7777777777778283)) + end + +invariant + + correct_port: attached target_imp implies port = game.saigon + +end diff --git a/jj_vitp/Interface/widgets/port_widgets/saipan_widget.e b/jj_vitp/Interface/widgets/port_widgets/saipan_widget.e new file mode 100644 index 0000000..e34d27b --- /dev/null +++ b/jj_vitp/Interface/widgets/port_widgets/saipan_widget.e @@ -0,0 +1,115 @@ +note + description: "[ + The widget representing this port + ]" + author: "Jimmy J. Johnson" + +class + SAIPAN_WIDGET + +inherit + +-- GREEN_PORT_WIDGET +-- undefine +-- paint +-- redefine +-- create_interface_objects, +-- initialize, +-- position_widgets, +-- build_land +-- end + + ISLAND_PORT_WIDGET + redefine + create_interface_objects, + position_widgets, + build_land, + rotation_amount + end + +create + make + +feature {NONE} -- Initialization + + create_interface_objects + -- Initialize attributes + do + mainland := mainland_imp + Precursor {ISLAND_PORT_WIDGET} +-- Precursor {GREEN_PORT_WIDGET} + end + +-- initialize +-- -- Set up the widgets in Current. +-- do +-- Precursor {ISLAND_PORT_WIDGET} +---- Precursor {GREEN_PORT_WIDGET} +-- end + + position_widgets + -- Move Current and contained widgets to correct + -- location and set their their sizes + do + Precursor {ISLAND_PORT_WIDGET} +-- Precursor {GREEN_PORT_WIDGET} +-- scale_widget (land, 0.95) + scale_widget (land, 0.7) + rotate_widget (land, 10.0) + translate_widget (land, -16, 8) +-- name_mt.center_on_dot (dot) +-- translate_widget (name_mt, 0, 0) +-- marker.center_on_dot (dot) + marker.set_x_y (dot.x, dot.y) + translate_widget (marker, 2, 4) + center_on (382, 263) + -- This scaling is slightly bigger than the scale of the other islands + -- in the Marianas islands. There is brown land to scale under this. + dot.show + dot.set_foreground_color (Cyan) + bring_to_front (dot) + end + + build_land + -- Add widgets to Current + do + Precursor {ISLAND_PORT_WIDGET} + land.extend (mainland) + end + +feature -- Status report + + is_red: BOOLEAN = False + -- Does Current represent a red (i.e. major) port? + +feature {NONE} -- Implementation + + mainland: EV_MODEL_POLYGON + +feature {NONE} -- Implementation + + mainland_imp: EV_MODEL_POLYGON + -- Build the island poygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (0.0, 0.0)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-3.8518518518519613, -0.8888888888889142)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-7.407407407407504, -4.148148148148152)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-6.51851851851859, -6.814814814814781)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-4.7407407407408755, -9.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-3.5555555555556566, -11.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1.1851851851852189, -10.370370370370324)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1.4814814814816373, -7.111111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (0.5925925925924957, -5.629629629629562)) + Result.extend_point (create {EV_COORDINATE}.make_precise (0.5925925925924957, -3.8518518518518476)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1.4814814814816373, -4.740740740740648)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1.4814814814816373, -2.9629629629629335)) + end + +feature {NONE} -- Implementation + + rotation_amount: REAL_64 = 160.0 + -- Make the arrow point north-east + +end diff --git a/jj_vitp/Interface/widgets/port_widgets/samoa_widget.e b/jj_vitp/Interface/widgets/port_widgets/samoa_widget.e new file mode 100644 index 0000000..7eaf5ba --- /dev/null +++ b/jj_vitp/Interface/widgets/port_widgets/samoa_widget.e @@ -0,0 +1,446 @@ +note + description: "[ + The widget representing this port + ]" + author: "Jimmy J. Johnson" + +class + SAMOA_WIDGET + +inherit + +-- RED_PORT_WIDGET +-- undefine +-- paint +-- redefine +-- create_interface_objects, +-- initialize, +-- extend_widgets, +-- position_widgets, +-- build_land +-- end + + ISLAND_PORT_WIDGET + redefine + create_interface_objects, +-- initialize, + extend_widgets, + set_fonts_and_colors, + position_widgets, + build_land, + rotation_amount + end + +create + make + +feature {NONE} -- Initialization + + create_interface_objects + -- Initialize attributes + do + create not_allowed_text.make_with_text ("(No British Allowed%Nexcept Victorious)") + mainland := mainland_imp + upolu := upolu_imp + Precursor {ISLAND_PORT_WIDGET} +-- Precursor {RED_PORT_WIDGET} + end + + extend_widgets + -- Put widgets into Current. This cannot be done + -- in `create_interface_object', because cannot call + -- `extend' feature until all objects [in descendants] + -- are also created. + do + Precursor {ISLAND_PORT_WIDGET} +-- Precursor {RED_PORT_WIDGET} + extend (not_allowed_text) + end + + set_fonts_and_colors + -- Set the default fonts for any text widgets and set + -- the default colors for any contained widgets. + do + Precursor {ISLAND_PORT_WIDGET} +-- Precursor {RED_PORT_WIDGET} + not_allowed_text.set_font (Subtext_font) + end + + position_widgets + -- Move Current and contained widgets to correct + -- location and set their their sizes + do + Precursor {ISLAND_PORT_WIDGET} +-- Precursor {RED_PORT_WIDGET} + scale_widget (land, 0.06) + rotate_widget (land, 10.0) + translate_widget (land, -65, -70) + translate_widget (name_mt, -1, -1) + center_on (587, 512) + center_widget_on_other (marker, dot) + center_widget_on_other (anchor, dot) + translate_widget (not_allowed_text, 121, 162) + translate_widget (marker, -7, 5) + translate_widget (anchor, 0, 5) + bring_to_front (anchor) + bring_to_front (marker) + dot.set_foreground_color (Cyan) + dot.show + bring_to_front (dot) + end + + build_land + -- Add widgets to Current + do + Precursor {ISLAND_PORT_WIDGET} + land.extend (mainland) + land.extend (upolu) + end + + not_allowed_text: EV_MODEL_TEXT + -- Extra text on some Red ports (e.g. "No British Allowed"). + +feature -- Status report + + is_red: BOOLEAN = True + -- Does Current represent a red (i.e. major) port? + +feature {NONE} -- Implementation + + mainland: EV_MODEL_POLYGON + upolu: EV_MODEL_POLYGON + +feature {NONE} -- Implementation + + mainland_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (0, 0)) + Result.extend_point (create {EV_COORDINATE}.make_precise (20, 8)) + Result.extend_point (create {EV_COORDINATE}.make_precise (22, 4)) + Result.extend_point (create {EV_COORDINATE}.make_precise (34, 8)) + Result.extend_point (create {EV_COORDINATE}.make_precise (46, 27)) + Result.extend_point (create {EV_COORDINATE}.make_precise (55, 43)) + Result.extend_point (create {EV_COORDINATE}.make_precise (68, 50)) + Result.extend_point (create {EV_COORDINATE}.make_precise (71, 60)) + Result.extend_point (create {EV_COORDINATE}.make_precise (86, 76)) + Result.extend_point (create {EV_COORDINATE}.make_precise (91, 87)) + Result.extend_point (create {EV_COORDINATE}.make_precise (95, 91)) + Result.extend_point (create {EV_COORDINATE}.make_precise (95, 98)) + Result.extend_point (create {EV_COORDINATE}.make_precise (108, 104)) + Result.extend_point (create {EV_COORDINATE}.make_precise (104, 110)) + Result.extend_point (create {EV_COORDINATE}.make_precise (111, 114)) + Result.extend_point (create {EV_COORDINATE}.make_precise (117, 134)) + Result.extend_point (create {EV_COORDINATE}.make_precise (121, 138)) + Result.extend_point (create {EV_COORDINATE}.make_precise (118, 142)) + Result.extend_point (create {EV_COORDINATE}.make_precise (126, 164)) + Result.extend_point (create {EV_COORDINATE}.make_precise (134, 171)) + Result.extend_point (create {EV_COORDINATE}.make_precise (125, 184)) + Result.extend_point (create {EV_COORDINATE}.make_precise (115, 199)) + Result.extend_point (create {EV_COORDINATE}.make_precise (118, 209)) + Result.extend_point (create {EV_COORDINATE}.make_precise (114, 214)) + Result.extend_point (create {EV_COORDINATE}.make_precise (105, 220)) + Result.extend_point (create {EV_COORDINATE}.make_precise (101, 224)) + Result.extend_point (create {EV_COORDINATE}.make_precise (102, 229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (99, 232)) + Result.extend_point (create {EV_COORDINATE}.make_precise (105, 243)) + Result.extend_point (create {EV_COORDINATE}.make_precise (105, 258)) + Result.extend_point (create {EV_COORDINATE}.make_precise (101, 266)) + Result.extend_point (create {EV_COORDINATE}.make_precise (88.333333333333314, 269.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (81.666666666666629, 265.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (78.333333333333314, 263.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (72.333333333333314, 264.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (64.333333333333314, 256)) + Result.extend_point (create {EV_COORDINATE}.make_precise (55.666666666666629, 247.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (55.666666666666629, 243.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (53, 238.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (42.333333333333314, 240)) + Result.extend_point (create {EV_COORDINATE}.make_precise (37, 238.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (29, 240)) + Result.extend_point (create {EV_COORDINATE}.make_precise (25.666666666666629, 245.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (23, 250.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (17, 251.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (13, 250.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (9, 252.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (3.6666666666666288, 250)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-15, 254)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-18.333333333333371, 252)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-19, 255.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-32.333333333333371, 256.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-35.666666666666686, 253.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-51, 260.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-65.666666666666686, 264)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-70.333333333333371, 262.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-85, 261.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-93.666666666666686, 268)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-111, 269.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-121.66666666666669, 272.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-133.66666666666669, 266)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-139, 254.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-141, 249.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-147.66666666666669, 245.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-155.66666666666669, 244)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-161.66666666666669, 227.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-165.66666666666669, 226)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-169.66666666666669, 225.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-172.33333333333334, 221.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-170.33333333333334, 212)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-183, 196.66666666666666)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-189.66666666666669, 187.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-196.33333333333334, 185.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-201, 174.66666666666666)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-208.33333333333334, 168.66666666666666)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-207.66666666666669, 161.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-235, 140)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-235.66666666666669, 130)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-238.33333333333334, 126)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-243.66666666666669, 126)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-251, 126)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-260.33333333333337, 116.66666666666666)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-271, 104)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-286.33333333333331, 92)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-297.66666666666669, 88)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-309, 78)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-313, 67.333333333333329)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-320.33333333333331, 56.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-322.33333333333331, 52.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-317.66666666666669, 48)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-314.33333333333331, 40.666666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-311, 38)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-305.66666666666669, 36.666666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-295.66666666666669, 43.333333333333329)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-295, 38.666666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-291.66666666666669, 36.666666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-288.33333333333331, 38)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-286.33333333333331, 43.333333333333329)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-279.66666666666669, 42)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-277, 46)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-267.66666666666669, 54)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-255.66666666666669, 57.333333333333329)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-251, 59.333333333333329)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-247.66666666666669, 54.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-242.33333333333334, 54.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-239.66666666666669, 51.333333333333329)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-235.66666666666669, 51.333333333333329)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-235, 55.333333333333329)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-230.33333333333334, 54.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-227, 51.333333333333329)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-222.33333333333334, 49.333333333333329)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-217.66666666666669, 52.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-215, 58)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-205.66666666666669, 57.333333333333329)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-198.33333333333334, 52)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-200.33333333333334, 48.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-201, 44.666666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-193, 43.333333333333329)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-186.33333333333334, 36.666666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-179, 40.666666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-177, 38)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-167.66666666666669, 40.666666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-155, 34)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-144.33333333333334, 30)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-136.33333333333334, 24.666666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-127, 22.666666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-115.66666666666669, 25.333333333333329)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-109.66666666666669, 23.333333333333329)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-103.66666666666669, 26)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-99.666666666666686, 19.333333333333329)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-95.666666666666686, 20.666666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-93, 16)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-87, 14.666666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-81, 20.666666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-72.333333333333371, 18.666666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-69, 22)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-49, 22)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-41.666666666666686, 6.6666666666666643)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-35.666666666666686, 8.6666666666666643)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-19.666666666666686, 2.6666666666666643)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-6.3333333333333712, 4.6666666666666643)) + end + + upolu_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (249.66666666666663, 288)) + Result.extend_point (create {EV_COORDINATE}.make_precise (253, 291.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (282.33333333333326, 290)) + Result.extend_point (create {EV_COORDINATE}.make_precise (292.33333333333326, 281.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (296.33333333333326, 281.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (302.33333333333326, 276.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (308.33333333333326, 276.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (315, 272.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (323, 272)) + Result.extend_point (create {EV_COORDINATE}.make_precise (325.66666666666663, 268)) + Result.extend_point (create {EV_COORDINATE}.make_precise (331, 268)) + Result.extend_point (create {EV_COORDINATE}.make_precise (333, 270)) + Result.extend_point (create {EV_COORDINATE}.make_precise (340.33333333333326, 270)) + Result.extend_point (create {EV_COORDINATE}.make_precise (347, 266.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (355.66666666666663, 267.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (357.66666666666663, 265.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (363, 268.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (367.66666666666663, 265.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (369, 270)) + Result.extend_point (create {EV_COORDINATE}.make_precise (377, 267.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (383.66666666666663, 263.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (386.33333333333326, 268)) + Result.extend_point (create {EV_COORDINATE}.make_precise (395, 272)) + Result.extend_point (create {EV_COORDINATE}.make_precise (400.33333333333326, 274.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (399.66666666666663, 280.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (408.33333333333326, 284)) + Result.extend_point (create {EV_COORDINATE}.make_precise (410.33333333333326, 288.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (421.66666666666663, 291.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (423.66666666666663, 288)) + Result.extend_point (create {EV_COORDINATE}.make_precise (419, 282.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (422.33333333333326, 281.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (430.33333333333326, 291.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (433.66666666666663, 286.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (439, 292)) + Result.extend_point (create {EV_COORDINATE}.make_precise (443.66666666666663, 291.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (446.33333333333326, 298)) + Result.extend_point (create {EV_COORDINATE}.make_precise (453.66666666666663, 302)) + Result.extend_point (create {EV_COORDINATE}.make_precise (459, 299.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (463.66666666666663, 302)) + Result.extend_point (create {EV_COORDINATE}.make_precise (464.33333333333326, 306)) + Result.extend_point (create {EV_COORDINATE}.make_precise (471, 308)) + Result.extend_point (create {EV_COORDINATE}.make_precise (473.66666666666663, 317.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (479.66666666666663, 312.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (489.66666666666663, 317.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (492.33333333333326, 314.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (503.66666666666663, 314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (517, 324)) + Result.extend_point (create {EV_COORDINATE}.make_precise (521, 322.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (529, 323.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (535.66666666666663, 331.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (546.33333333333326, 322.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (557.66666666666663, 324)) + Result.extend_point (create {EV_COORDINATE}.make_precise (564.33333333333326, 329.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (560.33333333333326, 334)) + Result.extend_point (create {EV_COORDINATE}.make_precise (563, 338.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (571.66666666666663, 337.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (573.66666666666663, 335.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (575.66666666666663, 346.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (581, 344.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (578.33333333333326, 349.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (580.33333333333326, 352.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (585.66666666666663, 353.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (589.66666666666663, 350.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (592.33333333333326, 354.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (598.33333333333326, 354)) + Result.extend_point (create {EV_COORDINATE}.make_precise (591.66666666666663, 362)) + Result.extend_point (create {EV_COORDINATE}.make_precise (581.66666666666663, 368)) + Result.extend_point (create {EV_COORDINATE}.make_precise (573.66666666666663, 376)) + Result.extend_point (create {EV_COORDINATE}.make_precise (586.33333333333326, 376)) + Result.extend_point (create {EV_COORDINATE}.make_precise (591.66666666666663, 376.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (592.33333333333326, 373.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (599, 370.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (603, 366)) + Result.extend_point (create {EV_COORDINATE}.make_precise (608.33333333333326, 365.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (607.66666666666663, 370.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (614.33333333333326, 381.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (628.33333333333326, 382.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (634.33333333333326, 386.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (637.66666666666663, 384.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (639, 388)) + Result.extend_point (create {EV_COORDINATE}.make_precise (657, 400)) + Result.extend_point (create {EV_COORDINATE}.make_precise (657, 405.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (661, 399.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (663.66666666666663, 397.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (670.33333333333326, 402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (673.66666666666663, 411.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (679, 414)) + Result.extend_point (create {EV_COORDINATE}.make_precise (681, 424)) + Result.extend_point (create {EV_COORDINATE}.make_precise (677.66666666666652, 440)) + Result.extend_point (create {EV_COORDINATE}.make_precise (673, 451.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (665.66666666666663, 450)) + Result.extend_point (create {EV_COORDINATE}.make_precise (655, 450)) + Result.extend_point (create {EV_COORDINATE}.make_precise (637, 445.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (631.66666666666663, 448.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (619, 451.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (603.66666666666663, 450)) + Result.extend_point (create {EV_COORDINATE}.make_precise (597.66666666666663, 453.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (591.66666666666663, 453.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (587.66666666666663, 454)) + Result.extend_point (create {EV_COORDINATE}.make_precise (585, 448.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (552.33333333333326, 448)) + Result.extend_point (create {EV_COORDINATE}.make_precise (547, 444.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (544.33333333333326, 447.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (545, 442)) + Result.extend_point (create {EV_COORDINATE}.make_precise (538.33333333333326, 443.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (524.33333333333326, 446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (520.33333333333326, 449.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (513, 448.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (511, 446.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (500.33333333333326, 449.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (480.33333333333326, 440)) + Result.extend_point (create {EV_COORDINATE}.make_precise (471, 443.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (463.66666666666663, 448)) + Result.extend_point (create {EV_COORDINATE}.make_precise (455.66666666666663, 450)) + Result.extend_point (create {EV_COORDINATE}.make_precise (452.33333333333326, 447.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (451, 450.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (445.66666666666663, 450.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (443, 447.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (435.66666666666663, 451.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (431.66666666666663, 447.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (430.33333333333326, 440.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (422.33333333333326, 428)) + Result.extend_point (create {EV_COORDINATE}.make_precise (409, 424.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (387, 422)) + Result.extend_point (create {EV_COORDINATE}.make_precise (382.33333333333326, 420)) + Result.extend_point (create {EV_COORDINATE}.make_precise (381.66666666666663, 415.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (389, 417.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (386.33333333333326, 414)) + Result.extend_point (create {EV_COORDINATE}.make_precise (387, 409.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (382.33333333333326, 409.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (379.66666666666663, 413.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (376.33333333333326, 409.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (365, 407.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (355.66666666666663, 411.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (349.66666666666663, 416.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (343.66666666666663, 420.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (335.66666666666663, 421.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (331.66666666666663, 424.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (320.33333333333326, 424.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (315, 416)) + Result.extend_point (create {EV_COORDINATE}.make_precise (311, 416)) + Result.extend_point (create {EV_COORDINATE}.make_precise (309, 411.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (305.66666666666663, 410.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (299, 406.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (295, 400)) + Result.extend_point (create {EV_COORDINATE}.make_precise (292.33333333333326, 394.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (288.33333333333326, 390)) + Result.extend_point (create {EV_COORDINATE}.make_precise (290.33333333333326, 381.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (283.66666666666663, 376.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (281.66666666666663, 371.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (277, 369.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (275, 373.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (276.33333333333326, 379.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (271.66666666666663, 382.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (267, 382)) + Result.extend_point (create {EV_COORDINATE}.make_precise (268.33333333333326, 375.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (263, 372)) + Result.extend_point (create {EV_COORDINATE}.make_precise (259, 372)) + Result.extend_point (create {EV_COORDINATE}.make_precise (257.66666666666663, 369.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (254.33333333333326, 365.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (257, 360.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (235.66666666666663, 352)) + Result.extend_point (create {EV_COORDINATE}.make_precise (239.66666666666663, 345.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (231.66666666666663, 340)) + Result.extend_point (create {EV_COORDINATE}.make_precise (225.66666666666663, 334)) + Result.extend_point (create {EV_COORDINATE}.make_precise (225, 326.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (220.33333333333326, 319.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (220.33333333333326, 314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (227.66666666666663, 308.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (236.33333333333326, 298)) + Result.extend_point (create {EV_COORDINATE}.make_precise (242.33333333333326, 292)) + end + +feature {NONE} -- Implementation + + rotation_amount: REAL_64 = -150.0 + -- Make the arrow point north-east + +end diff --git a/jj_vitp/Interface/widgets/port_widgets/singapore_widget.e b/jj_vitp/Interface/widgets/port_widgets/singapore_widget.e new file mode 100644 index 0000000..cb6ab1b --- /dev/null +++ b/jj_vitp/Interface/widgets/port_widgets/singapore_widget.e @@ -0,0 +1,401 @@ +note + description: "[ + Widget representing a {PORT}. + ]" + author: "Jimmy J. Johnson" + +class + SINGAPORE_WIDGET + +inherit + + RED_PORT_WIDGET + redefine + create_interface_objects, + position_widgets, + build_land + end + +create + make + +feature {NONE} -- Initialization + + create_interface_objects + -- Initialize attributes + do + Precursor {RED_PORT_WIDGET} + mainland := mainland_imp + nongsa := nongsa_imp + end + + position_widgets + -- Move Current and contained widgets to correct + -- location and set their their sizes + do + Precursor {RED_PORT_WIDGET} + scale_widget (land, 0.06) + rotate_widget (land, 13.0) + translate_widget (Current, -129, -8) +-- marker.set_x_y (x + 105, y + 125) +-- text_group.set_x_y (x + 100, y + 140) +-- anchor.set_x_y (x + 115, y + 148) + + marker.set_x_y (x + 15, y - 8) + text_group.set_x_y (x + 98, y + 143) + anchor.set_x_y (text_group.x + 10, text_group.y + 5) + + dot.set_x_y (x, y) + bring_to_front (dot) + end + + build_land + -- Add widgets to Current + do + Precursor {RED_PORT_WIDGET} + -- Initialize attributes + land.extend (mainland) + land.extend (nongsa) + end + +feature -- Status report + + is_red: BOOLEAN = True + -- Does Current represent a red (i.e. major) port? + +feature {NONE} -- Implementation + + mainland: EV_MODEL_POLYGON + nongsa: EV_MODEL_POLYGON + +feature {NONE} -- Implementation + + mainland_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (0, 0)) + Result.extend_point (create {EV_COORDINATE}.make_precise (7.333333333333286, -1.3333333333333144)) + Result.extend_point (create {EV_COORDINATE}.make_precise (16, -7.3333333333333144)) + Result.extend_point (create {EV_COORDINATE}.make_precise (26.666666666666657, 2.6666666666666856)) + Result.extend_point (create {EV_COORDINATE}.make_precise (30, -2.6666666666666572)) + Result.extend_point (create {EV_COORDINATE}.make_precise (40.666666666666657, -4.6666666666666572)) + Result.extend_point (create {EV_COORDINATE}.make_precise (51.333333333333314, -8)) + Result.extend_point (create {EV_COORDINATE}.make_precise (59.333333333333314, -16)) + Result.extend_point (create {EV_COORDINATE}.make_precise (72, -16.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (79.333333333333314, -8)) + Result.extend_point (create {EV_COORDINATE}.make_precise (91.333333333333314, 10.666666666666686)) + Result.extend_point (create {EV_COORDINATE}.make_precise (98.666666666666572, 16.666666666666686)) + Result.extend_point (create {EV_COORDINATE}.make_precise (103.33333333333331, 14.666666666666686)) + Result.extend_point (create {EV_COORDINATE}.make_precise (110.66666666666657, 22.666666666666686)) + Result.extend_point (create {EV_COORDINATE}.make_precise (119.33333333333331, 26)) + Result.extend_point (create {EV_COORDINATE}.make_precise (136, 22)) + Result.extend_point (create {EV_COORDINATE}.make_precise (146, 20.666666666666686)) + Result.extend_point (create {EV_COORDINATE}.make_precise (167.33333333333331, 26)) + Result.extend_point (create {EV_COORDINATE}.make_precise (178.66666666666657, 44.666666666666686)) + Result.extend_point (create {EV_COORDINATE}.make_precise (194, 61.333333333333258)) + Result.extend_point (create {EV_COORDINATE}.make_precise (213.33333333333331, 80)) + Result.extend_point (create {EV_COORDINATE}.make_precise (226.66666666666663, 83.333333333333258)) + Result.extend_point (create {EV_COORDINATE}.make_precise (239.33333333333331, 88.666666666666686)) + Result.extend_point (create {EV_COORDINATE}.make_precise (242.66666666666663, 96.666666666666686)) + Result.extend_point (create {EV_COORDINATE}.make_precise (247.33333333333331, 105.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (252.66666666666663, 116)) + Result.extend_point (create {EV_COORDINATE}.make_precise (262.66666666666663, 122)) + Result.extend_point (create {EV_COORDINATE}.make_precise (276.66666666666663, 136)) + Result.extend_point (create {EV_COORDINATE}.make_precise (286.66666666666663, 144.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (292.66666666666663, 144.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (307.33333333333331, 155.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (314.66666666666663, 170)) + Result.extend_point (create {EV_COORDINATE}.make_precise (326, 193.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (338, 211.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (340, 227.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (342, 237.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (337.33333333333331, 240)) + Result.extend_point (create {EV_COORDINATE}.make_precise (341.33333333333331, 250.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (344, 256)) + Result.extend_point (create {EV_COORDINATE}.make_precise (336, 270)) + Result.extend_point (create {EV_COORDINATE}.make_precise (334.66666666666663, 283.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (339.33333333333331, 287.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (334, 296.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (334, 301.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (329.33333333333331, 306.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (333.33333333333331, 315.99999999999983)) + Result.extend_point (create {EV_COORDINATE}.make_precise (338.66666666666663, 321.99999999999983)) + Result.extend_point (create {EV_COORDINATE}.make_precise (343.33333333333331, 329.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (339.33333333333331, 335.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (337.33333333333331, 340.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (338, 353.99999999999983)) + Result.extend_point (create {EV_COORDINATE}.make_precise (339.33333333333331, 363.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (338, 384.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (355.33333333333314, 406.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (362, 407.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (370.66666666666663, 411.99999999999983)) + Result.extend_point (create {EV_COORDINATE}.make_precise (372.66666666666663, 421.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (380.66666666666663, 433.99999999999983)) + Result.extend_point (create {EV_COORDINATE}.make_precise (386.66666666666663, 443.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (386, 447.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (396, 465.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (402.66666666666663, 476.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (399.33333333333314, 475.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (405.33333333333314, 481.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (412, 498.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (414.66666666666663, 513.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (416, 527.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (411.33333333333314, 533.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (400.66666666666663, 532.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (390, 532)) + Result.extend_point (create {EV_COORDINATE}.make_precise (381.33333333333314, 533.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (375.33333333333314, 538.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (363.33333333333314, 540)) + Result.extend_point (create {EV_COORDINATE}.make_precise (356.66666666666663, 538)) + Result.extend_point (create {EV_COORDINATE}.make_precise (353.33333333333314, 533.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (351.33333333333314, 528.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (348.66666666666663, 530)) + Result.extend_point (create {EV_COORDINATE}.make_precise (349.33333333333331, 534)) + Result.extend_point (create {EV_COORDINATE}.make_precise (346.66666666666663, 536.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (340.66666666666663, 536.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (334.66666666666663, 532.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (332.66666666666663, 524)) + Result.extend_point (create {EV_COORDINATE}.make_precise (334, 518.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (329.33333333333331, 511.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (318, 505.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (307.33333333333331, 501.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (300, 495.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (296, 493.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (291.33333333333331, 491.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (286.66666666666663, 485.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (283.33333333333331, 482.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (271.33333333333331, 483.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (263.33333333333331, 473.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (256, 467.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (256, 464.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (248.66666666666663, 460.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (224, 451.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (221.33333333333331, 451.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (216, 444.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (212.66666666666663, 443.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (208.66666666666663, 437.99999999999983)) + Result.extend_point (create {EV_COORDINATE}.make_precise (203.33333333333331, 435.99999999999983)) + Result.extend_point (create {EV_COORDINATE}.make_precise (202.66666666666663, 433.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (198, 431.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (195.33333333333331, 433.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (192.66666666666663, 425.99999999999983)) + Result.extend_point (create {EV_COORDINATE}.make_precise (190.66666666666663, 423.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (187.33333333333331, 423.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (188.66666666666663, 419.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (185.33333333333331, 414.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (176.66666666666657, 414.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (168.66666666666657, 411.99999999999983)) + Result.extend_point (create {EV_COORDINATE}.make_precise (159.33333333333331, 413.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (156.66666666666657, 409.99999999999983)) + Result.extend_point (create {EV_COORDINATE}.make_precise (155.33333333333331, 401.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (152, 396.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (147.33333333333331, 395.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (142.66666666666657, 393.99999999999983)) + Result.extend_point (create {EV_COORDINATE}.make_precise (140.66666666666657, 389.99999999999983)) + Result.extend_point (create {EV_COORDINATE}.make_precise (136, 383.99999999999983)) + Result.extend_point (create {EV_COORDINATE}.make_precise (132, 375.99999999999983)) + Result.extend_point (create {EV_COORDINATE}.make_precise (135.33333333333331, 371.99999999999983)) + Result.extend_point (create {EV_COORDINATE}.make_precise (142.66666666666657, 370.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (144.66666666666657, 368.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (141.33333333333331, 361.99999999999983)) + Result.extend_point (create {EV_COORDINATE}.make_precise (136.66666666666657, 345.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (134, 347.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (128, 340.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (124.66666666666657, 337.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (120, 323.99999999999983)) + Result.extend_point (create {EV_COORDINATE}.make_precise (116.66666666666657, 319.99999999999983)) + Result.extend_point (create {EV_COORDINATE}.make_precise (108, 319.99999999999983)) + Result.extend_point (create {EV_COORDINATE}.make_precise (106, 311.99999999999983)) + Result.extend_point (create {EV_COORDINATE}.make_precise (99.333333333333314, 307.99999999999983)) + Result.extend_point (create {EV_COORDINATE}.make_precise (98, 302.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (108.66666666666657, 298.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (94.666666666666572, 300.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (87.333333333333314, 298.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (87.333333333333314, 286.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (94, 287.99999999999983)) + Result.extend_point (create {EV_COORDINATE}.make_precise (102, 282.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (94, 284.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (92, 278.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (85.333333333333314, 270)) + Result.extend_point (create {EV_COORDINATE}.make_precise (81.333333333333314, 272.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (76.666666666666657, 266.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (76.666666666666657, 260)) + Result.extend_point (create {EV_COORDINATE}.make_precise (74, 258.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (76, 247.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (80.666666666666657, 248.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (79.333333333333314, 239.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (85.333333333333314, 231.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (79.333333333333314, 235.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (75.333333333333314, 235.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (77.333333333333314, 229.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (86, 218.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (77.333333333333314, 224)) + Result.extend_point (create {EV_COORDINATE}.make_precise (74.666666666666657, 214.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (72.666666666666657, 204)) + Result.extend_point (create {EV_COORDINATE}.make_precise (69.333333333333314, 208.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (68, 201.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (64.666666666666657, 203.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (63.333333333333314, 196)) + Result.extend_point (create {EV_COORDINATE}.make_precise (56.666666666666657, 186)) + Result.extend_point (create {EV_COORDINATE}.make_precise (59.333333333333314, 178)) + Result.extend_point (create {EV_COORDINATE}.make_precise (61.333333333333314, 170.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (59.333333333333314, 162.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (55.333333333333314, 165.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (50, 172)) + Result.extend_point (create {EV_COORDINATE}.make_precise (46.666666666666657, 169.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (41.333333333333314, 169.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (38.666666666666657, 162.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (40, 156)) + Result.extend_point (create {EV_COORDINATE}.make_precise (39.333333333333314, 150.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (47.333333333333314, 152.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (53.333333333333314, 154.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (56, 159.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (58, 156.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (58.666666666666657, 149.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (54, 134.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (59.333333333333314, 134.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (54.666666666666657, 129.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (56, 118.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (54, 103.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (50.666666666666657, 96)) + Result.extend_point (create {EV_COORDINATE}.make_precise (45.333333333333314, 88)) + Result.extend_point (create {EV_COORDINATE}.make_precise (36.666666666666657, 82.666666666666686)) + Result.extend_point (create {EV_COORDINATE}.make_precise (33.333333333333314, 66)) + Result.extend_point (create {EV_COORDINATE}.make_precise (28, 55.333333333333258)) + Result.extend_point (create {EV_COORDINATE}.make_precise (22.666666666666657, 50)) + Result.extend_point (create {EV_COORDINATE}.make_precise (20, 51.333333333333258)) + Result.extend_point (create {EV_COORDINATE}.make_precise (21.333333333333314, 47.333333333333258)) + Result.extend_point (create {EV_COORDINATE}.make_precise (20, 43.333333333333258)) + Result.extend_point (create {EV_COORDINATE}.make_precise (12.666666666666657, 36.666666666666686)) + Result.extend_point (create {EV_COORDINATE}.make_precise (9.3333333333333144, 32)) + Result.extend_point (create {EV_COORDINATE}.make_precise (6.6666666666666572, 33.333333333333258)) + Result.extend_point (create {EV_COORDINATE}.make_precise (4.6666666666666572, 26.666666666666686)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-4.666666666666714, 24)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-6.666666666666714, 6)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-2.666666666666714, 4)) + end + + nongsa_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (409.11111111111109, 556.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (407.33333333333326, 554.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (405.55555555555543, 548.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (415.77777777777771, 545.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (415.33333333333326, 542.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (422.8888888888888, 539.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (430.44444444444434, 541.7777777777776)) + Result.extend_point (create {EV_COORDINATE}.make_precise (434.8888888888888, 542.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (439.77777777777771, 537.7777777777776)) + Result.extend_point (create {EV_COORDINATE}.make_precise (442.8888888888888, 540)) + Result.extend_point (create {EV_COORDINATE}.make_precise (444.22222222222217, 544.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (447.77777777777771, 546.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (448.66666666666663, 552.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (450, 558.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (448.66666666666663, 560)) + Result.extend_point (create {EV_COORDINATE}.make_precise (450.44444444444434, 564.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (452.66666666666663, 568.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (452.22222222222217, 573.7777777777776)) + Result.extend_point (create {EV_COORDINATE}.make_precise (447.77777777777771, 576.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (454, 578.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (455.33333333333326, 584.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (448.66666666666663, 580.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (446.8888888888888, 583.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (444.22222222222217, 581.7777777777776)) + Result.extend_point (create {EV_COORDINATE}.make_precise (439.33333333333326, 581.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (434.8888888888888, 581.7777777777776)) + Result.extend_point (create {EV_COORDINATE}.make_precise (434.44444444444434, 578.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (441.11111111111109, 578.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (439.77777777777771, 576)) + Result.extend_point (create {EV_COORDINATE}.make_precise (430.8888888888888, 572.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (426.8888888888888, 571.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (430, 568.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (426.44444444444434, 566.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (428.66666666666663, 563.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (427.33333333333326, 561.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (428.66666666666663, 558.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (431.33333333333326, 557.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (426.8888888888888, 556.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (425.55555555555543, 559.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (422, 560.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (420.22222222222217, 559.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (418.8888888888888, 561.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (413.55555555555543, 562.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (411.33333333333326, 566.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (413.11111111111109, 571.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (412.66666666666663, 576.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (409.11111111111109, 577.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (413.11111111111109, 579.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (414.44444444444434, 583.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (415.77777777777771, 587.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (414.44444444444434, 594.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (410.8888888888888, 590.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (405.55555555555543, 582.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (400.22222222222217, 572)) + Result.extend_point (create {EV_COORDINATE}.make_precise (388.66666666666663, 571.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (381.55555555555543, 566.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (378, 566.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (378.44444444444434, 571.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (382, 576)) + Result.extend_point (create {EV_COORDINATE}.make_precise (382.8888888888888, 581.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (378, 580)) + Result.extend_point (create {EV_COORDINATE}.make_precise (375.33333333333326, 575.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (370.44444444444434, 570.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (366.8888888888888, 570.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (370.44444444444434, 573.7777777777776)) + Result.extend_point (create {EV_COORDINATE}.make_precise (373.55555555555543, 579.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (372.66666666666663, 582.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (369.11111111111109, 580)) + Result.extend_point (create {EV_COORDINATE}.make_precise (363.77777777777771, 577.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (359.33333333333326, 573.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (359.33333333333326, 567.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (364.22222222222217, 560.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (366, 557.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (369.11111111111109, 556)) + Result.extend_point (create {EV_COORDINATE}.make_precise (371.33333333333326, 560.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (372.66666666666663, 558.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (374.8888888888888, 558.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (373.11111111111109, 552.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (376.22222222222217, 554.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (379.33333333333326, 558.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (379.33333333333326, 554.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (378, 551.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (381.11111111111109, 552.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (381.55555555555543, 549.7777777777776)) + Result.extend_point (create {EV_COORDINATE}.make_precise (380.66666666666663, 546.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (386, 546.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (387.33333333333326, 542.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (390, 542.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (392.66666666666663, 546.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (395.33333333333326, 547.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (395.33333333333326, 544.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (394, 543.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (396.66666666666663, 541.7777777777776)) + Result.extend_point (create {EV_COORDINATE}.make_precise (401.55555555555543, 543.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (401.11111111111109, 548)) + Result.extend_point (create {EV_COORDINATE}.make_precise (402, 552)) + Result.extend_point (create {EV_COORDINATE}.make_precise (400.66666666666663, 555.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (394.8888888888888, 556)) + Result.extend_point (create {EV_COORDINATE}.make_precise (397.11111111111109, 558.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (396.66666666666663, 560.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (392.22222222222217, 561.7777777777776)) + Result.extend_point (create {EV_COORDINATE}.make_precise (388.66666666666663, 563.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (389.11111111111109, 567.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (394.44444444444434, 565.7777777777776)) + Result.extend_point (create {EV_COORDINATE}.make_precise (397.55555555555543, 562.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (401.55555555555543, 562.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (403.33333333333326, 555.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (404.22222222222217, 558.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (406, 561.7777777777776)) + Result.extend_point (create {EV_COORDINATE}.make_precise (408.66666666666663, 559.55555555555543)) + end + +invariant + + correct_port: attached target_imp implies port = game.singapore + +end diff --git a/jj_vitp/Interface/widgets/port_widgets/truk_widget.e b/jj_vitp/Interface/widgets/port_widgets/truk_widget.e new file mode 100644 index 0000000..5377f80 --- /dev/null +++ b/jj_vitp/Interface/widgets/port_widgets/truk_widget.e @@ -0,0 +1,118 @@ +note + description: "[ + The widget representing this port + ]" + author: "Jimmy J. Johnson" + +class + TRUK_WIDGET + +inherit + +-- RED_PORT_WIDGET +-- undefine +-- paint +-- redefine +-- create_interface_objects, +-- initialize, +-- extend_widgets, +-- position_widgets, +-- build_land +-- end + + ISLAND_PORT_WIDGET + redefine + create_interface_objects, +-- initialize, + extend_widgets, + build_widgets, + position_widgets, + build_land + end + +create + make + +feature {NONE} -- Initialization + + create_interface_objects + -- Initialize attributes + do + mainland := mainland_imp + create not_allowed_text.make_with_text ("(No British Allowed)") + Precursor {ISLAND_PORT_WIDGET} +-- Precursor {RED_PORT_WIDGET} + dot.show + end + + build_widgets + -- Now that widgets were created in `create_interface_objects' + -- and added to Current in `extend_widgets', build up the + -- widgets by adding internal structure to each widget. + do + Precursor {ISLAND_PORT_WIDGET} +-- Precursor {RED_PORT_WIDGET} + hide_arrow + end + + extend_widgets + -- Put widgets into Current. This cannot be done + -- in `create_interface_object', because cannot call + -- `extend' feature until all objects [in descendants] + -- are also created. + do + Precursor {ISLAND_PORT_WIDGET} +-- Precursor {RED_PORT_WIDGET} + extend (not_allowed_text) + end + + position_widgets + -- Move Current and contained widgets to correct + -- location and set their their sizes + do + Precursor {ISLAND_PORT_WIDGET} +-- Precursor {RED_PORT_WIDGET} + -- make adjustments + translate_widget (Current, 330, 260) +-- marker.set_x_y (dot.x, dot.y) +-- anchor.set_x_y (dot.x, dot.y) + +-- translate_widget (name_mt, 0, 4) +-- translate_widget (marker, -6, -6) +-- translate_widget (anchor, -1, -3) +-- translate_widget (not_allowed_text, 48, 72) + end + + build_land + -- Add widgets to Current + do + Precursor {ISLAND_PORT_WIDGET} +-- land.extend (mainland) + end + + not_allowed_text: EV_MODEL_TEXT + -- Extra text on some Red ports (e.g. "No British Allowed"). + +feature -- Status report + + is_red: BOOLEAN = True + -- Does Current represent a red (i.e. major) port? + +feature {NONE} -- Implementation + + mainland: EV_MODEL_POLYGON + +feature {NONE} -- Implementation + + mainland_imp: EV_MODEL_POLYGON + -- Put something in the `land' so it can be better positioned, otherwise + -- clicking in unrelated locations seems to pull up this widget. + -- This triangle is hidden under the port circle. + do + create Result + Result.extend_point (create {EV_COORDINATE}.make_precise (0.0, 0.0)) + Result.extend_point (create {EV_COORDINATE}.make_precise (2.0, 2.0)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-2.0, -2.0)) + end + +end diff --git a/jj_vitp/Interface/widgets/port_widgets/yokosuka_navy_yard_widget.e b/jj_vitp/Interface/widgets/port_widgets/yokosuka_navy_yard_widget.e new file mode 100644 index 0000000..f0b03d3 --- /dev/null +++ b/jj_vitp/Interface/widgets/port_widgets/yokosuka_navy_yard_widget.e @@ -0,0 +1,1409 @@ +note + description: "[ + Widget representing a {PORT}. + ]" + author: "Jimmy J. Johnson" + +class + YOKOSUKA_NAVY_YARD_WIDGET + +inherit + + RED_PORT_WIDGET + redefine + create_interface_objects, + set_fonts_and_colors, + position_widgets, + build_land + end + +create + make + +feature {NONE} -- Initialization + + create_interface_objects + -- Initialize attributes + do + Precursor {RED_PORT_WIDGET} + hokkaido := hokkaido_imp + honshu := honshu_imp + shikoku := shikoku_imp + kyushu := kyushu_imp + kunashir := kunashir_imp + shikotan := shikotan_imp + iturup := iturup_imp + urup := urup_imp + create reinforcements_text.make_with_text ("Japanese Reinforcements") + create title_text.make_with_text ("VICTORY PACIFIC") + create in_the_text.make_with_text (" in%Nthe") + create copyright_text.make_with_text ("% + % Copyright 2020 Jimmy J. Johnson Boone, CO %N % + % Based on the game of same name %N % + % Copyright 1977 The Avalon Hill Game Company, Balto MD") + extend (reinforcements_text) + extend (title_text) + extend (in_the_text) + extend (copyright_text) + end + + set_fonts_and_colors + -- Set the default fonts for any text widgets and set + -- the default colors for any contained widgets. + local + f: EV_FONT + do + Precursor {RED_PORT_WIDGET} + reinforcements_text.set_font (Subtext_font) + -- Set up the `copyright_text' + create f + f.set_height (3) +-- f.set_shape ({EV_FONT_CONSTANTS}.shape_italic) +-- f.set_family ({EV_FONT_CONSTANTS}.family_sans) + copyright_text.set_font (f) + -- Set up the `title_text', leaving room with + -- spaces for placement of the `in_the_text' + create f + f.set_height (25) + f.set_shape ({EV_FONT_CONSTANTS}.shape_italic) + f.set_family ({EV_FONT_CONSTANTS}.family_sans) + title_text.set_font (f) + -- Set up the `in_the_text' + create f + f.set_height (12) + f.set_shape ({EV_FONT_CONSTANTS}.shape_italic) + f.set_family ({EV_FONT_CONSTANTS}.family_sans) + in_the_text.set_font (f) + end + + position_widgets + -- Move Current and contained widgets to correct + -- location and set their their sizes + do + Precursor {RED_PORT_WIDGET} + -- position widets + translate_widget (Current, 453, -295) + + set_x_y (367, 105) + name_mt.set_x_y (328, 143) + anchor.set_x_y (335, 130) + marker.set_x_y (360, 120) + reinforcements_text.set_x_y (318, 117) + -- These texts are placed on top of Asia + title_text.set_x_y (135, 35) +-- in_the_text.set_x_y (110, 35) + in_the_text.set_x_y (title_text.x + 5, title_text.y - 2) + copyright_text.set_x_y (50, 55) + +-- translate_widget (name_mt, -127, 437) +-- translate_widget (dot, -120, 420) +-- translate_widget (reinforcements_text, -150, 410) +-- translate_widget (title_text, -440, 320) +-- translate_widget (in_the_text, -325, 318) +-- translate_widget (copyright_text, -430, 345) +---- marker.center_on_dot (dot) +-- marker.set_x_y (dot.x, dot.y) +---- anchor.center_on_dot (dot) +-- anchor.set_x_y (dot.x, dot.y) +-- translate_widget (marker, 20, -3) +-- translate_widget (anchor, 0, 3) + scale_widget (land, 0.13) + rotate_widget (land, 13.0) + end + + build_land + -- Add widgets to Current + do + Precursor {RED_PORT_WIDGET} + -- Initialize attributes + land.extend (hokkaido) + land.extend (honshu) + land.extend (shikoku) + land.extend (kyushu) + land.extend (kunashir) + land.extend (shikotan) + land.extend (iturup) + land.extend (urup) + end + + reinforcements_text: EV_MODEL_TEXT + -- Extra text about reinforcement placement + + title_text: EV_MODEL_TEXT + -- The name of game at top left of board. + + in_the_text: EV_MODEL_TEXT + -- Part of the title text + + copyright_text: EV_MODEL_TEXT + -- Small text under the `title_text' + +feature -- Access + +-- defining_figure: EV_MODEL +-- -- The figure to be used to determine if other figures +-- -- overlap this one or for capturing mouse events +-- do +-- Result := honshu +-- end + +feature -- Status report + + is_red: BOOLEAN = True + -- Does Current represent a red (i.e. major) port? + +feature {NONE} -- Implementation + + hokkaido: EV_MODEL_POLYGON + honshu: EV_MODEL_POLYGON + shikoku: EV_MODEL_POLYGON + kyushu: EV_MODEL_POLYGON + kunashir: EV_MODEL_POLYGON + shikotan: EV_MODEL_POLYGON + iturup: EV_MODEL_POLYGON + urup: EV_MODEL_POLYGON + +feature {NONE} -- Implementation + + hokkaido_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (0, 0)) + Result.extend_point (create {EV_COORDINATE}.make_precise (3.1111111111111995, 2.2222222222222001)) + Result.extend_point (create {EV_COORDINATE}.make_precise (5.3333333333333712, 7.1111111111111143)) + Result.extend_point (create {EV_COORDINATE}.make_precise (9.7777777777778283, 9.3333333333333144)) + Result.extend_point (create {EV_COORDINATE}.make_precise (15.555555555555543, 17.777777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (22.666666666666629, 26.2222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (30.222222222222172, 35.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (30.222222222222172, 38.2222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (38.222222222222172, 49.333333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (46.666666666666629, 58.2222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (48.444444444444457, 61.333333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (64, 73.333333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (66.666666666666629, 76.888888888888857)) + Result.extend_point (create {EV_COORDINATE}.make_precise (81.777777777777828, 84)) + Result.extend_point (create {EV_COORDINATE}.make_precise (79.555555555555543, 85.777777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (82.222222222222172, 89.777777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (89.333333333333371, 90.222222222222172)) + Result.extend_point (create {EV_COORDINATE}.make_precise (92.8888888888888, 92)) + Result.extend_point (create {EV_COORDINATE}.make_precise (93.333333333333371, 89.333333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (100.8888888888888, 89.333333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (97.333333333333371, 94.666666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (100.8888888888888, 95.111111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (102.66666666666663, 91.111111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (105.77777777777783, 90.222222222222172)) + Result.extend_point (create {EV_COORDINATE}.make_precise (106.22222222222217, 95.111111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (110.22222222222217, 100.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (114.22222222222217, 100.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (129.33333333333337, 101.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (132.8888888888888, 98.666666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (136.44444444444446, 96)) + Result.extend_point (create {EV_COORDINATE}.make_precise (139.55555555555554, 92)) + Result.extend_point (create {EV_COORDINATE}.make_precise (144.44444444444446, 85.333333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (148.8888888888888, 84.444444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (149.33333333333337, 81.777777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (152, 79.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (153.77777777777783, 75.111111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (156, 77.333333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (157.33333333333337, 80)) + Result.extend_point (create {EV_COORDINATE}.make_precise (155.55555555555554, 84.888888888888857)) + Result.extend_point (create {EV_COORDINATE}.make_precise (152.8888888888888, 88.888888888888857)) + Result.extend_point (create {EV_COORDINATE}.make_precise (150.66666666666663, 90.666666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (151.1111111111112, 93.777777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (148.44444444444446, 95.111111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (146.22222222222217, 99.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (144.8888888888888, 106.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (144, 108.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (143.1111111111112, 113.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (145.33333333333337, 115.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (146.22222222222217, 119.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (149.33333333333337, 120.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (151.55555555555554, 127.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (152.8888888888888, 134.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (153.77777777777783, 138.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (153.77777777777783, 141.77777777777777)) + Result.extend_point (create {EV_COORDINATE}.make_precise (156.8888888888888, 141.77777777777777)) + Result.extend_point (create {EV_COORDINATE}.make_precise (163.1111111111112, 140.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (168, 136.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (169.33333333333337, 135.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (172.44444444444446, 135.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (176.8888888888888, 135.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (176, 137.77777777777777)) + Result.extend_point (create {EV_COORDINATE}.make_precise (172, 139.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (167.55555555555554, 140.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (165.33333333333337, 144.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (164, 147.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (160.44444444444446, 148)) + Result.extend_point (create {EV_COORDINATE}.make_precise (153.33333333333337, 148)) + Result.extend_point (create {EV_COORDINATE}.make_precise (149.77777777777783, 151.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (146.66666666666663, 151.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (145.33333333333337, 155.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (142.66666666666663, 158.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (137.77777777777783, 160.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (133.77777777777783, 159.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (133.77777777777783, 156.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (130.22222222222217, 158.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (128.44444444444446, 160.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (130.66666666666663, 162.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (126.66666666666663, 163.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (120.44444444444446, 162.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (116.44444444444446, 163.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (109.77777777777783, 161.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (105.33333333333337, 160.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (96.444444444444457, 164.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (86.666666666666629, 172.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (79.555555555555543, 179.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (71.555555555555543, 188.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (65.333333333333371, 199.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (63.555555555555543, 205.77777777777777)) + Result.extend_point (create {EV_COORDINATE}.make_precise (64.444444444444457, 208.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (64, 214.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (62.666666666666629, 219.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (60.444444444444457, 220.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (60.444444444444457, 224.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (56.444444444444457, 223.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (54.222222222222172, 219.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (48, 216.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (46.222222222222172, 214.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (42.222222222222172, 213.77777777777777)) + Result.extend_point (create {EV_COORDINATE}.make_precise (37.777777777777828, 211.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (29.333333333333371, 206.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (25.777777777777828, 206.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (24, 203.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (17.777777777777828, 199.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (13.777777777777828, 196.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (11.555555555555543, 192.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (5.7777777777778283, 193.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-0.88888888888880047, 187.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-8.8888888888888005, 183.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-17.333333333333371, 183.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-24.8888888888888, 187.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-29.777777777777715, 191.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-34.666666666666629, 195.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-42.666666666666629, 203.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-46.666666666666629, 197.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-50.222222222222172, 191.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-56.444444444444457, 186.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-60.444444444444457, 187.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-63.555555555555543, 185.77777777777777)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-66.666666666666629, 187.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-69.333333333333371, 192.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-71.555555555555543, 198.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-73.777777777777715, 203.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-72.444444444444457, 206.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-68.444444444444457, 208.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-64, 211.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-61.777777777777715, 215.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-57.777777777777715, 213.77777777777777)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-54.222222222222172, 213.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-52, 216.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-48.444444444444457, 219.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-45.777777777777715, 221.77777777777777)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-43.555555555555543, 227.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-39.555555555555543, 227.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-36, 229.77777777777777)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-33.777777777777715, 233.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-36, 234.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-38.222222222222172, 236.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-41.777777777777715, 239.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-45.777777777777715, 237.77777777777777)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-50.222222222222172, 236.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-54.666666666666629, 236.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-55.111111111111086, 234.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-59.111111111111086, 233.77777777777777)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-59.111111111111086, 236.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-62.666666666666629, 239.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-65.333333333333371, 239.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-67.555555555555543, 243.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-67.555555555555543, 248.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-71.555555555555543, 251.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-76.444444444444457, 252.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-76.8888888888888, 256.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-78.666666666666629, 259.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-80.444444444444457, 256.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-83.555555555555543, 256.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-86.666666666666629, 250.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-88.444444444444457, 243.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-84.8888888888888, 237.77777777777777)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-84.8888888888888, 232.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-81.777777777777715, 232.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-80.8888888888888, 224.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-82.222222222222172, 219.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-86.666666666666629, 213.77777777777777)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-89.333333333333371, 213.77777777777777)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-92, 211.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-93.777777777777715, 207.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-96.444444444444457, 208.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-96.8888888888888, 204.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-98.222222222222172, 199.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-95.111111111111086, 197.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-93.777777777777715, 192.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-95.555555555555543, 185.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-92.8888888888888, 179.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-84.8888888888888, 179.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-83.555555555555543, 175.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-80, 174.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-79.555555555555543, 171.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-76.444444444444457, 173.77777777777777)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-73.777777777777715, 172.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-74.222222222222172, 170.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-70.666666666666629, 166.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-69.777777777777715, 163.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-64, 160.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-63.555555555555543, 155.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-66.222222222222172, 153.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-67.111111111111086, 150.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-69.777777777777715, 148.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-72.444444444444457, 144.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-71.555555555555543, 139.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-67.555555555555543, 139.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-66.222222222222172, 136.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-61.777777777777715, 140.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-58.222222222222172, 141.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-57.777777777777715, 144.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-54.222222222222172, 144)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-51.111111111111086, 147.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-43.111111111111086, 144)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-36.8888888888888, 144.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-30.666666666666629, 145.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-24.8888888888888, 142.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-22.666666666666629, 135.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-22.666666666666629, 129.77777777777777)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-24.8888888888888, 126.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-24, 121.77777777777777)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-26.222222222222172, 120.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-26.666666666666629, 115.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-24.8888888888888, 109.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-17.777777777777715, 107.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-12.444444444444457, 100.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-12, 85.777777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-12.8888888888888, 79.111111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-9.3333333333333712, 70.666666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-6.6666666666666288, 62.2222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-5.3333333333333712, 60.888888888888857)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-5.7777777777777146, 50.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-8.4444444444444571, 38.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-12.8888888888888, 27.111111111111114)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-15.111111111111086, 23.111111111111114)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-16, 18.2222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-13.333333333333371, 14.2222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-12, 10.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-13.777777777777715, 7.1111111111111143)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-12.8888888888888, 4.4444444444444571)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-10.666666666666629, 7.1111111111111143)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-8.4444444444444571, 8)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-3.1111111111110858, 5.7777777777777715)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-2.2222222222221717, 2.2222222222222001)) + end + + honshu_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-71.555555555555543, 267.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-69.777777777777715, 267.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-66.666666666666629, 271.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-63.111111111111086, 268.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-59.111111111111086, 270.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-58.222222222222172, 274.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-59.111111111111086, 280.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-56.444444444444457, 290.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-51.111111111111086, 291.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-49.333333333333371, 286.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-44.444444444444457, 283.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-38.666666666666629, 286.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-35.555555555555543, 287.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-31.111111111111086, 281.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-32, 276.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-29.333333333333371, 271.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-34.222222222222172, 263.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-36, 267.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-39.555555555555543, 270.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-43.555555555555543, 269.77777777777777)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-47.111111111111086, 271.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-50.666666666666629, 273.77777777777777)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-53.333333333333371, 272.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-51.111111111111086, 262.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-46.666666666666629, 252.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-46.222222222222172, 248.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-43.111111111111086, 252.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-38.666666666666629, 252.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-33.333333333333371, 257.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-30.222222222222172, 260.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-26.222222222222172, 259.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-21.333333333333371, 256.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-20.8888888888888, 259.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-22.222222222222172, 263.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-24.444444444444457, 279.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-24.444444444444457, 284.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-26.222222222222172, 283.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-24.8888888888888, 287.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-23.111111111111086, 295.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-21.333333333333371, 306.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-19.111111111111086, 310.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-15.555555555555543, 310.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-10.666666666666629, 314.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-4, 327.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-4.4444444444444571, 331.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1.3333333333333712, 333.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-3.5555555555555429, 333.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-0.88888888888880047, 340.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1.7777777777778283, 343.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (0.44444444444445708, 347.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (3.1111111111111995, 350.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (3.5555555555555429, 362.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (5.3333333333333712, 366.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (4, 370.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (6.2222222222222854, 372.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (2.2222222222222854, 376.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (2.2222222222222854, 381.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (0, 382.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (0.44444444444445708, 387.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1.7777777777777146, 389.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1.7777777777777146, 392.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-3.5555555555555429, 396.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-3.5555555555555429, 400.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-8, 398.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-9.3333333333333712, 401.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-12, 401.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-12, 404.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-12.8888888888888, 407.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-16.444444444444457, 412.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-16, 417.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-20.8888888888888, 419.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-17.777777777777715, 421.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-20.444444444444457, 426.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-17.777777777777715, 427.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-19.555555555555543, 431.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-20.8888888888888, 433.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-18.666666666666629, 437.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-17.777777777777715, 440.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-15.111111111111086, 442.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-17.333333333333371, 443.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-20.444444444444457, 439.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-22.666666666666629, 436.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-28, 435.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-29.777777777777715, 438.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-36.444444444444457, 439.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-41.777777777777715, 446.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-44.444444444444457, 454.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-45.333333333333371, 461.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-43.111111111111086, 471.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-41.333333333333371, 476.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-39.111111111111086, 486.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-40, 497.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-40.444444444444457, 510.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-42.222222222222172, 512.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-43.111111111111086, 519.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-50.666666666666629, 521.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-52.8888888888888, 531.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-57.777777777777715, 542.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-58.666666666666629, 550.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-61.777777777777715, 551.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-60.8888888888888, 560.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-58.222222222222172, 569.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-53.333333333333371, 580.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-47.111111111111086, 587.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-52, 590.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-58.666666666666629, 591.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-64.444444444444457, 597.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-68.8888888888888, 604.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-68.444444444444457, 613.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-69.777777777777715, 618.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-75.111111111111086, 622.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-80.8888888888888, 623.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-83.555555555555543, 625.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-87.111111111111086, 626.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-88.8888888888888, 630.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-89.777777777777715, 634.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-93.777777777777715, 635.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-96, 632.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-98.222222222222172, 631.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-94.666666666666629, 629.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-93.333333333333371, 627.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-94.666666666666629, 621.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-96.8888888888888, 619.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-98.666666666666629, 615.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-98.666666666666629, 611.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-93.777777777777715, 607.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-88.444444444444457, 602.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-84.444444444444457, 598.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-84.8888888888888, 594.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-89.777777777777715, 592.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-91.555555555555543, 594.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-95.555555555555543, 594.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-95.111111111111086, 597.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-96.8888888888888, 602.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-100.8888888888888, 603.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-104.8888888888888, 607.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-102.66666666666663, 610.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-100, 615.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-100, 619.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-103.11111111111109, 619.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-106.66666666666663, 618.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-111.11111111111109, 615.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-120.44444444444446, 616.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-125.77777777777771, 619.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-129.33333333333337, 624.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-128, 626.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-128.8888888888888, 628.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-125.77777777777771, 630.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-125.77777777777771, 634.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-128.8888888888888, 635.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-129.33333333333337, 641.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-133.77777777777771, 643.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-134.22222222222217, 647.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-137.33333333333337, 650.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-142.22222222222217, 650.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-143.55555555555554, 647.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-145.33333333333337, 645.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-142.66666666666663, 642.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-144.44444444444446, 640.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-144, 634.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-141.77777777777771, 634.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-144.44444444444446, 629.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-142.66666666666663, 627.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-140, 627.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-137.33333333333337, 624.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-144, 625.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-154.22222222222217, 626.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-155.11111111111109, 629.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-161.33333333333331, 633.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-163.55555555555549, 635.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-162.66666666666663, 639.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-165.77777777777771, 642.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-169.33333333333331, 646.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-169.33333333333331, 651.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-175.11111111111109, 649.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-183.11111111111109, 647.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-191.11111111111109, 648.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-200.4444444444444, 647.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-206.66666666666663, 649.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-216.8888888888888, 651.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-222.22222222222217, 653.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-221.33333333333331, 647.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-220.4444444444444, 649.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-214.22222222222217, 647.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-213.33333333333331, 644.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-210.22222222222217, 644.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-209.77777777777771, 639.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-214.22222222222217, 639.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-215.11111111111109, 642.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-217.33333333333331, 640.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-222.22222222222217, 641.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-225.77777777777771, 638.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-225.33333333333331, 635.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-228, 641.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-225.33333333333331, 644.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-225.77777777777771, 646.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-230.22222222222217, 643.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-230.66666666666663, 638.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-234.22222222222217, 636.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-241.33333333333331, 635.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-246.22222222222217, 643.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-244, 650.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-238.66666666666663, 651.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-236.8888888888888, 656.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-229.77777777777771, 656.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-227.11111111111109, 661.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-228, 663.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-230.66666666666663, 663.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-228.4444444444444, 667.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-232.4444444444444, 667.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-232.4444444444444, 671.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-234.22222222222217, 668.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-237.33333333333331, 667.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-238.22222222222217, 665.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-240, 667.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-241.33333333333331, 669.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-244, 668.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-247.11111111111109, 670.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-253.77777777777771, 673.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-257.77777777777771, 678.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-262.66666666666663, 686.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-263.55555555555549, 689.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-267.11111111111109, 695.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-271.11111111111109, 705.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-274.22222222222217, 710.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-279.55555555555549, 711.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-279.55555555555549, 715.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-282.22222222222217, 711.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-291.55555555555549, 712.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-299.11111111111109, 706.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-297.33333333333331, 700.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-300, 696.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-305.77777777777771, 695.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-308.4444444444444, 691.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-311.55555555555549, 691.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-310.66666666666663, 684.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-308.8888888888888, 683.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-311.55555555555549, 678.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-308.4444444444444, 677.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-307.11111111111109, 674.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-309.77777777777771, 671.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-314.66666666666663, 668.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-309.33333333333331, 665.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-304, 662.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-300.4444444444444, 656.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-299.55555555555549, 651.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-296.4444444444444, 650.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-296.4444444444444, 647.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-300.8888888888888, 646.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-304.8888888888888, 646.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-304.8888888888888, 648.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-312.4444444444444, 651.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-315.55555555555549, 655.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-319.55555555555549, 662.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-317.77777777777771, 667.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-318.22222222222217, 670.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-321.77777777777771, 671.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-328.4444444444444, 673.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-331.55555555555549, 671.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-330.66666666666663, 666.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-326.66666666666663, 663.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-324, 659.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-320.8888888888888, 654.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-318.22222222222217, 651.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-316.4444444444444, 648.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-320.8888888888888, 646.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-326.22222222222217, 641.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-338.22222222222217, 641.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-342.22222222222217, 644.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-348.4444444444444, 646.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-352.4444444444444, 649.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-358.22222222222217, 651.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-358.22222222222217, 656.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-352.8888888888888, 656.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-345.33333333333326, 653.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-345.33333333333326, 658.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-350.66666666666663, 658.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-355.99999999999994, 657.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-360.8888888888888, 657.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-365.77777777777771, 659.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-371.11111111111109, 658.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-375.55555555555549, 656.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-379.99999999999994, 658.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-384.8888888888888, 659.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-387.99999999999994, 663.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-393.77777777777771, 665.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-394.66666666666663, 662.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-399.11111111111109, 664.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-396.8888888888888, 667.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-400.8888888888888, 671.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-402.22222222222217, 666.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-409.77777777777771, 666.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-414.66666666666663, 667.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-415.11111111111109, 671.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-415.55555555555549, 677.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-431.11111111111109, 677.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-431.55555555555549, 670.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-427.99999999999994, 666.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-431.11111111111109, 665.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-436.4444444444444, 666.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-437.77777777777771, 669.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-438.66666666666663, 675.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-442.22222222222217, 678.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-441.77777777777771, 684.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-445.77777777777771, 686.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-443.11111111111109, 687.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-440.4444444444444, 686.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-436.4444444444444, 687.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-435.55555555555549, 690.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-439.99999999999994, 690.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-444.8888888888888, 691.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-450.22222222222217, 688.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-455.11111111111109, 686.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-458.66666666666663, 683.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-463.99999999999994, 682.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-469.33333333333326, 682.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-470.66666666666663, 684.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-474.22222222222217, 682.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-476.4444444444444, 684.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-479.11111111111109, 682.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-481.33333333333326, 685.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-481.33333333333326, 688.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-484.8888888888888, 689.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-486.22222222222217, 686.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-489.77777777777771, 686.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-489.33333333333326, 683.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-485.77777777777771, 681.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-491.55555555555549, 680.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-495.99999999999994, 679.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-498.66666666666663, 683.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-500.8888888888888, 686.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-502.22222222222217, 677.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-503.55555555555549, 673.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-502.22222222222217, 669.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-501.77777777777771, 664.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-495.55555555555549, 663.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-495.99999999999994, 661.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-492.4444444444444, 661.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-489.77777777777771, 663.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-479.11111111111109, 660.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-475.99999999999994, 655.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-471.55555555555549, 651.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-470.22222222222217, 646.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-468.8888888888888, 647.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-461.33333333333326, 646.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-451.55555555555549, 638.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-440.4444444444444, 626.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-431.99999999999994, 615.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-421.77777777777771, 610.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-423.55555555555549, 606.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-418.22222222222217, 603.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-415.11111111111109, 601.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-408.8888888888888, 599.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-406.22222222222217, 593.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-402.22222222222217, 593.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-397.33333333333326, 594.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-393.77777777777771, 599.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-391.55555555555549, 603.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-388.8888888888888, 603.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-383.55555555555549, 599.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-377.33333333333326, 599.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-363.99999999999994, 599.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-360.4444444444444, 596.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-354.22222222222217, 597.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-347.55555555555549, 595.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-342.22222222222217, 591.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-334.66666666666663, 587.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-331.11111111111109, 591.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-324, 590.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-320.8888888888888, 592.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-316.4444444444444, 591.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-310.22222222222217, 587.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-304, 585.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-300, 590.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-303.55555555555549, 594.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-302.66666666666663, 599.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-297.77777777777771, 597.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-293.77777777777771, 596.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-291.55555555555549, 599.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-289.77777777777771, 601.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-285.77777777777771, 599.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-285.77777777777771, 601.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-282.22222222222217, 600.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-282.22222222222217, 598.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-278.22222222222217, 598.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-276, 595.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-278.22222222222217, 593.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-273.77777777777771, 594.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-271.55555555555549, 593.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-271.55555555555549, 587.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-268, 587.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-267.11111111111109, 591.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-264, 591.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-264.4444444444444, 586.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-264.4444444444444, 583.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-267.11111111111109, 582.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-270.66666666666663, 580.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-272, 584.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-272.8888888888888, 578.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-273.33333333333331, 573.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-270.22222222222217, 571.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-266.66666666666663, 562.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-264, 561.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-264.4444444444444, 558.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-260, 555.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-256.4444444444444, 551.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-252.4444444444444, 546.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-248, 544.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-244.4444444444444, 539.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-239.11111111111109, 533.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-236, 523.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-236, 519.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-235.11111111111109, 517.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-236, 514.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-236, 508.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-238.66666666666663, 508.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-237.77777777777771, 502.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-235.55555555555549, 501.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-236, 495.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-229.33333333333331, 492.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-225.77777777777771, 493.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-220.4444444444444, 489.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-216, 487.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-210.22222222222217, 486.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-208, 488.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-208.4444444444444, 491.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-212, 491.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-212.4444444444444, 495.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-211.11111111111109, 497.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-216, 499.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-219.11111111111109, 499.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-222.22222222222217, 505.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-225.33333333333331, 505.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-227.11111111111109, 502.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-228.8888888888888, 506.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-229.77777777777771, 511.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-224.8888888888888, 513.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-223.55555555555549, 510.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-225.77777777777771, 510.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-221.33333333333331, 508.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-221.33333333333331, 513.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-221.33333333333331, 518.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-220.8888888888888, 526.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-216.8888888888888, 528.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-209.77777777777771, 527.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-205.77777777777771, 521.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-200.4444444444444, 516.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-192, 515.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-180.8888888888888, 510.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-174.22222222222217, 505.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-167.55555555555549, 504.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-157.33333333333331, 495.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-153.33333333333337, 494.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-151.11111111111109, 491.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-151.11111111111109, 488.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-146.22222222222217, 484.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-144, 478.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-142.22222222222217, 468.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-136.8888888888888, 466.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-132.8888888888888, 461.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-123.55555555555554, 459.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-116, 452.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-112.44444444444446, 445.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-112.44444444444446, 434.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-110.22222222222217, 427.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-102.66666666666663, 415.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-99.111111111111086, 414.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-96.444444444444457, 403.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-92.8888888888888, 387.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-91.555555555555543, 383.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-87.555555555555543, 378.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-85.333333333333371, 362.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-85.777777777777715, 354.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-88, 354.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-91.111111111111086, 351.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-93.777777777777715, 353.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-96.8888888888888, 353.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-97.777777777777715, 349.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-102.22222222222217, 342.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-98.222222222222172, 343.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-96, 344.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-91.555555555555543, 340.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-87.555555555555543, 327.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-86.666666666666629, 320.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-88.8888888888888, 317.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-89.777777777777715, 309.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-92.8888888888888, 306.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-91.555555555555543, 303.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-86.666666666666629, 296.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-84, 295.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-82.222222222222172, 297.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-77.777777777777715, 294.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-74.666666666666629, 291.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-73.333333333333371, 279.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-72.8888888888888, 275.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-75.111111111111086, 274.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-72.444444444444457, 273.33333333333326)) + end + + shikoku_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-407.55555555555549, 677.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-407.99999999999994, 680.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-404.4444444444444, 682.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-403.11111111111109, 687.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-394.66666666666663, 685.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-388.8888888888888, 683.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-384.8888888888888, 685.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-378.66666666666663, 680.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-384.8888888888888, 679.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-383.55555555555549, 669.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-377.33333333333326, 670.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-369.77777777777771, 665.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-364.4444444444444, 662.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-357.77777777777771, 663.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-352.8888888888888, 662.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-353.77777777777771, 665.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-343.99999999999994, 668.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-343.11111111111109, 672.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-335.55555555555549, 670.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-331.55555555555549, 675.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-331.99999999999994, 679.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-334.66666666666663, 682.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-331.11111111111109, 685.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-327.99999999999994, 690.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-330.66666666666663, 693.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-335.11111111111109, 700.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-340.4444444444444, 702.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-344.8888888888888, 709.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-352.4444444444444, 725.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-359.99999999999994, 715.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-362.66666666666663, 715.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-364.8888888888888, 711.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-370.22222222222217, 711.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-375.11111111111109, 710.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-383.55555555555549, 712.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-386.66666666666663, 716.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-391.99999999999994, 718.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-394.22222222222217, 721.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-395.11111111111109, 727.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-399.55555555555549, 732.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-401.33333333333326, 737.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-404.8888888888888, 738.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-405.33333333333326, 744.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-408.8888888888888, 745.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-406.66666666666663, 748.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-404.8888888888888, 753.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-407.55555555555549, 753.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-409.33333333333326, 751.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-412.8888888888888, 751.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-416.4444444444444, 752.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-419.11111111111109, 750.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-423.11111111111109, 751.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-421.77777777777771, 746.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-418.22222222222217, 745.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-420.8888888888888, 742.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-424.8888888888888, 743.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-428.8888888888888, 743.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-428.8888888888888, 739.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-431.99999999999994, 736.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-430.66666666666663, 734.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-430.22222222222217, 731.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-432.8888888888888, 730.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-428.4444444444444, 728.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-428.4444444444444, 725.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-429.77777777777771, 723.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-428.4444444444444, 721.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-433.33333333333326, 721.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-433.33333333333326, 719.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-435.11111111111109, 718.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-432.4444444444444, 713.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-435.11111111111109, 712.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-440.8888888888888, 715.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-445.77777777777771, 718.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-450.66666666666663, 719.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-446.66666666666663, 715.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-443.11111111111109, 714.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-438.22222222222217, 711.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-433.77777777777771, 708.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-431.11111111111109, 705.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-423.99999999999994, 701.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-419.99999999999994, 693.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-416.8888888888888, 687.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-416.4444444444444, 683.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-411.55555555555549, 680.44444444444446)) + end + + kyushu_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-502.66666666666663, 687.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-496.4444444444444, 686.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-496.8888888888888, 692.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-496.8888888888888, 699.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-491.55555555555549, 703.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-486.66666666666663, 704.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-484.4444444444444, 706.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-477.77777777777771, 706.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-474.66666666666663, 703.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-472.4444444444444, 701.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-467.11111111111109, 701.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-463.55555555555549, 705.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-463.55555555555549, 713.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-466.66666666666663, 719.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-472.4444444444444, 719.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-475.99999999999994, 717.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-472.4444444444444, 722.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-467.11111111111109, 723.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-461.77777777777771, 725.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-455.55555555555549, 723.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-458.66666666666663, 730.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-455.99999999999994, 733.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-451.11111111111109, 733.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-451.99999999999994, 736.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-455.11111111111109, 737.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-455.11111111111109, 740.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-450.66666666666663, 740.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-451.55555555555549, 744.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-452.4444444444444, 748.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-457.77777777777771, 748.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-456.8888888888888, 751.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-458.22222222222217, 756.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-459.99999999999994, 755.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-462.66666666666663, 759.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-465.77777777777771, 760.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-463.55555555555549, 765.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-465.33333333333326, 770.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-467.11111111111109, 774.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-471.11111111111109, 782.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-474.66666666666663, 794.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-475.99999999999994, 800.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-474.66666666666663, 803.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-476.8888888888888, 808.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-475.99999999999994, 811.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-476.8888888888888, 814.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-478.66666666666663, 815.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-479.11111111111109, 820.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-480.8888888888888, 824.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-485.33333333333326, 826.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-487.55555555555549, 823.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-491.55555555555549, 821.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-495.55555555555549, 822.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-495.11111111111109, 827.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-492.4444444444444, 828.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-493.33333333333326, 830.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-491.11111111111109, 831.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-493.33333333333326, 834.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-496.8888888888888, 834.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-497.77777777777771, 837.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-501.77777777777771, 840.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-506.66666666666663, 842.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-512.44444444444434, 847.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-511.99999999999994, 843.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-513.77777777777771, 841.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-509.77777777777771, 839.55555555555532)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-508.44444444444434, 837.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-507.99999999999994, 832.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-506.22222222222217, 831.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-507.11111111111103, 826.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-508.8888888888888, 822.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-511.55555555555549, 821.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-509.77777777777771, 816.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-507.55555555555549, 815.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-505.77777777777771, 810.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-509.33333333333326, 806.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-512.44444444444434, 809.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-509.77777777777771, 813.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-511.99999999999994, 817.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-515.11111111111109, 817.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-518.22222222222217, 818.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-518.22222222222217, 823.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-516, 830.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-512.44444444444434, 831.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-513.77777777777771, 837.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-520, 837.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-519.55555555555543, 834.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-523.55555555555543, 832.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-532.44444444444434, 832.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-533.77777777777771, 827.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-536, 823.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-533.33333333333326, 824.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-531.11111111111109, 823.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-528, 819.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-528.8888888888888, 811.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-533.77777777777771, 808.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-533.77777777777771, 800.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-533.33333333333326, 795.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-534.66666666666663, 789.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-536.8888888888888, 785.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-537.77777777777771, 781.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-535.11111111111109, 780.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-532.8888888888888, 785.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-529.33333333333326, 786.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-524, 778.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-520.8888888888888, 775.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-519.11111111111109, 768.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-517.77777777777771, 764.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-514.22222222222217, 759.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-517.77777777777771, 759.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-520.8888888888888, 756.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-515.55555555555543, 754.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-515.55555555555543, 749.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-518.66666666666663, 747.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-520.44444444444434, 743.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-523.55555555555543, 743.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-524.8888888888888, 738.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-523.55555555555543, 735.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-527.11111111111109, 731.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-526.66666666666663, 724.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-529.33333333333326, 730.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-531.11111111111109, 728.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-535.55555555555543, 732.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-531.11111111111109, 734.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-532.44444444444434, 739.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-536.44444444444434, 745.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-535.11111111111109, 748.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-530.66666666666663, 745.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-528, 746.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-526.66666666666663, 751.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-527.11111111111109, 758.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-523.11111111111109, 758.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-521.77777777777771, 763.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-523.11111111111109, 768.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-524.44444444444434, 771.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-529.77777777777771, 771.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-532.8888888888888, 770.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-532.8888888888888, 775.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-536.44444444444434, 775.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-537.33333333333326, 778.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-541.33333333333326, 782.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-543.55555555555543, 777.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-543.11111111111109, 772.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-540, 762.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-537.33333333333326, 755.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-535.11111111111109, 754.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-535.11111111111109, 750.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-539.55555555555543, 750.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-544.44444444444434, 751.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-547.11111111111109, 755.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-549.77777777777771, 759.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-550.66666666666663, 763.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-552.44444444444434, 761.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-551.11111111111109, 755.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-552.44444444444434, 750.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-554.66666666666663, 748.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-559.11111111111109, 743.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-559.11111111111109, 738.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-557.77777777777771, 733.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-554.22222222222217, 736.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-551.11111111111109, 739.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-551.55555555555543, 743.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-549.77777777777771, 747.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-545.33333333333326, 745.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-546.22222222222217, 740.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-548.44444444444434, 735.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-552.8888888888888, 735.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-556.8888888888888, 731.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-559.11111111111109, 728.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-563.11111111111109, 727.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-560.8888888888888, 722.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-562.66666666666663, 720.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-565.33333333333326, 723.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-571.11111111111109, 729.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-569.77777777777771, 725.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-567.99999999999989, 719.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-563.99999999999989, 716.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-559.99999999999989, 719.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-556.8888888888888, 719.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-552.8888888888888, 719.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-551.11111111111109, 721.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-548.8888888888888, 715.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-555.55555555555543, 713.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-550.22222222222217, 713.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-548.44444444444434, 709.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-544.8888888888888, 709.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-544.44444444444434, 713.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-539.55555555555543, 713.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-540, 711.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-536.8888888888888, 710.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-536.44444444444434, 708.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-539.11111111111109, 706.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-535.55555555555543, 705.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-532.44444444444434, 702.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-530.22222222222217, 704.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-526.22222222222217, 703.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-524, 699.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-522.66666666666663, 692.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-517.33333333333326, 689.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-515.55555555555543, 691.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-511.11111111111103, 687.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-508.8888888888888, 688.8888888888888)) + end + + kunashir_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (191.1111111111112, 64.888888888888857)) + Result.extend_point (create {EV_COORDINATE}.make_precise (193.77777777777783, 64.888888888888857)) + Result.extend_point (create {EV_COORDINATE}.make_precise (197.77777777777783, 68.888888888888857)) + Result.extend_point (create {EV_COORDINATE}.make_precise (201.33333333333337, 70.222222222222172)) + Result.extend_point (create {EV_COORDINATE}.make_precise (205.33333333333337, 69.777777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (212, 68.888888888888857)) + Result.extend_point (create {EV_COORDINATE}.make_precise (210.22222222222217, 70.666666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (209.77777777777783, 74.222222222222172)) + Result.extend_point (create {EV_COORDINATE}.make_precise (204.8888888888888, 73.333333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (202.66666666666663, 75.111111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (199.1111111111112, 79.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (191.1111111111112, 80)) + Result.extend_point (create {EV_COORDINATE}.make_precise (189.33333333333337, 82.222222222222172)) + Result.extend_point (create {EV_COORDINATE}.make_precise (188.8888888888888, 84.888888888888857)) + Result.extend_point (create {EV_COORDINATE}.make_precise (183.1111111111112, 87.111111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (181.33333333333337, 90.222222222222172)) + Result.extend_point (create {EV_COORDINATE}.make_precise (180.44444444444446, 93.333333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (180, 95.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (177.33333333333337, 95.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (176, 101.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (170.22222222222217, 103.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (166.22222222222217, 106.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (166.22222222222217, 112.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (165.33333333333337, 119.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (164, 114.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (159.55555555555554, 116)) + Result.extend_point (create {EV_COORDINATE}.make_precise (157.77777777777783, 107.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (160, 107.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (160, 104.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (166.66666666666663, 100)) + Result.extend_point (create {EV_COORDINATE}.make_precise (173.33333333333337, 92.888888888888857)) + Result.extend_point (create {EV_COORDINATE}.make_precise (173.33333333333337, 90.666666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (179.55555555555554, 81.777777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (182.66666666666663, 80)) + Result.extend_point (create {EV_COORDINATE}.make_precise (185.33333333333337, 74.666666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (187.55555555555554, 69.777777777777771)) + end + + shikotan_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (212, 109.77777777777777)) + Result.extend_point (create {EV_COORDINATE}.make_precise (216.44444444444446, 108)) + Result.extend_point (create {EV_COORDINATE}.make_precise (224, 103.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (225.33333333333337, 106.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (227.1111111111112, 108.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (224, 109.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (221.33333333333337, 110.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (219.55555555555554, 113.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (217.33333333333337, 113.77777777777777)) + Result.extend_point (create {EV_COORDINATE}.make_precise (215.55555555555554, 116.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (213.77777777777783, 114.22222222222217)) + end + + iturup_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (274.22222222222217, 4.4444444444444571)) + Result.extend_point (create {EV_COORDINATE}.make_precise (275.55555555555554, 9.3333333333333144)) + Result.extend_point (create {EV_COORDINATE}.make_precise (277.33333333333337, 11.111111111111114)) + Result.extend_point (create {EV_COORDINATE}.make_precise (277.77777777777783, 15.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (283.55555555555554, 16.888888888888857)) + Result.extend_point (create {EV_COORDINATE}.make_precise (287.55555555555554, 15.111111111111114)) + Result.extend_point (create {EV_COORDINATE}.make_precise (290.66666666666663, 15.111111111111114)) + Result.extend_point (create {EV_COORDINATE}.make_precise (292.8888888888888, 12)) + Result.extend_point (create {EV_COORDINATE}.make_precise (297.33333333333337, 9.3333333333333144)) + Result.extend_point (create {EV_COORDINATE}.make_precise (297.77777777777783, 6.6666666666666572)) + Result.extend_point (create {EV_COORDINATE}.make_precise (302.22222222222217, 1.7777777777777715)) + Result.extend_point (create {EV_COORDINATE}.make_precise (305.77777777777783, 0.88888888888885731)) + Result.extend_point (create {EV_COORDINATE}.make_precise (306.22222222222217, -1.7777777777777999)) + Result.extend_point (create {EV_COORDINATE}.make_precise (314.22222222222217, -3.1111111111111427)) + Result.extend_point (create {EV_COORDINATE}.make_precise (317.33333333333337, -1.3333333333333428)) + Result.extend_point (create {EV_COORDINATE}.make_precise (317.33333333333337, 2.2222222222222001)) + Result.extend_point (create {EV_COORDINATE}.make_precise (314.66666666666663, 3.5555555555555429)) + Result.extend_point (create {EV_COORDINATE}.make_precise (316, 8)) + Result.extend_point (create {EV_COORDINATE}.make_precise (315.1111111111112, 10.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (313.33333333333337, 12.444444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (310.22222222222217, 12)) + Result.extend_point (create {EV_COORDINATE}.make_precise (306.66666666666663, 11.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (304.8888888888888, 12.444444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (301.77777777777783, 14.2222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (299.1111111111112, 16.444444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (294.66666666666663, 18.2222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (290.66666666666663, 18.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (287.1111111111112, 22.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (284.8888888888888, 24.888888888888857)) + Result.extend_point (create {EV_COORDINATE}.make_precise (281.77777777777783, 25.333333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (280.8888888888888, 27.111111111111114)) + Result.extend_point (create {EV_COORDINATE}.make_precise (278.22222222222217, 29.777777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (273.77777777777783, 34.2222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (273.77777777777783, 36.444444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (272, 35.111111111111114)) + Result.extend_point (create {EV_COORDINATE}.make_precise (267.55555555555554, 36)) + Result.extend_point (create {EV_COORDINATE}.make_precise (265.33333333333337, 36)) + Result.extend_point (create {EV_COORDINATE}.make_precise (264, 32.888888888888857)) + Result.extend_point (create {EV_COORDINATE}.make_precise (259.55555555555554, 35.111111111111114)) + Result.extend_point (create {EV_COORDINATE}.make_precise (260.8888888888888, 38.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (259.55555555555554, 40.888888888888857)) + Result.extend_point (create {EV_COORDINATE}.make_precise (256.8888888888888, 43.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (254.22222222222217, 45.777777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (252.8888888888888, 48)) + Result.extend_point (create {EV_COORDINATE}.make_precise (248.8888888888888, 48.888888888888857)) + Result.extend_point (create {EV_COORDINATE}.make_precise (245.33333333333337, 53.777777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (244, 56.888888888888857)) + Result.extend_point (create {EV_COORDINATE}.make_precise (242.22222222222217, 59.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (239.55555555555554, 61.333333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (236, 61.333333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (232.8888888888888, 62.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (232, 66.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (230.22222222222217, 69.333333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (226.66666666666663, 68.888888888888857)) + Result.extend_point (create {EV_COORDINATE}.make_precise (224.8888888888888, 68)) + Result.extend_point (create {EV_COORDINATE}.make_precise (226.22222222222217, 64)) + Result.extend_point (create {EV_COORDINATE}.make_precise (228.44444444444446, 62.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (228, 56.888888888888857)) + Result.extend_point (create {EV_COORDINATE}.make_precise (230.22222222222217, 60.444444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (232.44444444444446, 58.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (232.44444444444446, 56)) + Result.extend_point (create {EV_COORDINATE}.make_precise (231.55555555555554, 54.2222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (234.66666666666663, 55.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (238.66666666666663, 53.777777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (240.44444444444446, 49.333333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (236.8888888888888, 48)) + Result.extend_point (create {EV_COORDINATE}.make_precise (236, 45.333333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (237.77777777777783, 44)) + Result.extend_point (create {EV_COORDINATE}.make_precise (239.1111111111112, 46.2222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (242.66666666666663, 44.888888888888857)) + Result.extend_point (create {EV_COORDINATE}.make_precise (242.66666666666663, 42.2222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (245.33333333333337, 40)) + Result.extend_point (create {EV_COORDINATE}.make_precise (246.66666666666663, 41.777777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (250.66666666666663, 37.333333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (251.1111111111112, 33.777777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (254.66666666666663, 32.888888888888857)) + Result.extend_point (create {EV_COORDINATE}.make_precise (254.66666666666663, 29.333333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (255.55555555555554, 27.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (253.77777777777783, 25.333333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (258.22222222222217, 28)) + Result.extend_point (create {EV_COORDINATE}.make_precise (262.66666666666663, 26.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (263.1111111111112, 23.111111111111114)) + Result.extend_point (create {EV_COORDINATE}.make_precise (264.8888888888888, 20)) + Result.extend_point (create {EV_COORDINATE}.make_precise (269.33333333333337, 19.111111111111114)) + Result.extend_point (create {EV_COORDINATE}.make_precise (270.66666666666663, 16.444444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (269.33333333333337, 13.333333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (270.22222222222217, 8)) + Result.extend_point (create {EV_COORDINATE}.make_precise (272, 7.1111111111111143)) + end + + urup_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (380.8888888888888, -46.222222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (387.55555555555554, -47.111111111111114)) + Result.extend_point (create {EV_COORDINATE}.make_precise (388.44444444444446, -45.333333333333343)) + Result.extend_point (create {EV_COORDINATE}.make_precise (394.66666666666663, -46.666666666666686)) + Result.extend_point (create {EV_COORDINATE}.make_precise (392.44444444444446, -44.444444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (384.8888888888888, -38.222222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (378.22222222222206, -33.333333333333343)) + Result.extend_point (create {EV_COORDINATE}.make_precise (377.77777777777771, -28)) + Result.extend_point (create {EV_COORDINATE}.make_precise (375.55555555555554, -28)) + Result.extend_point (create {EV_COORDINATE}.make_precise (370.22222222222206, -20.888888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (367.55555555555554, -19.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (365.77777777777771, -20.444444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (359.1111111111112, -14.666666666666686)) + Result.extend_point (create {EV_COORDINATE}.make_precise (355.1111111111112, -8.8888888888888857)) + Result.extend_point (create {EV_COORDINATE}.make_precise (351.55555555555554, -5.7777777777777999)) + Result.extend_point (create {EV_COORDINATE}.make_precise (349.33333333333337, -5.3333333333333428)) + Result.extend_point (create {EV_COORDINATE}.make_precise (348.44444444444446, -3.5555555555555429)) + Result.extend_point (create {EV_COORDINATE}.make_precise (345.77777777777783, -4.4444444444444571)) + Result.extend_point (create {EV_COORDINATE}.make_precise (340.44444444444446, -4.4444444444444571)) + Result.extend_point (create {EV_COORDINATE}.make_precise (342.66666666666663, -7.1111111111111427)) + Result.extend_point (create {EV_COORDINATE}.make_precise (344, -11.111111111111143)) + Result.extend_point (create {EV_COORDINATE}.make_precise (347.1111111111112, -13.333333333333343)) + Result.extend_point (create {EV_COORDINATE}.make_precise (347.55555555555554, -15.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (350.66666666666663, -19.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (351.55555555555554, -22.222222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (356.8888888888888, -22.666666666666686)) + Result.extend_point (create {EV_COORDINATE}.make_precise (360.44444444444446, -25.333333333333343)) + Result.extend_point (create {EV_COORDINATE}.make_precise (360.44444444444446, -28)) + Result.extend_point (create {EV_COORDINATE}.make_precise (363.1111111111112, -29.333333333333343)) + Result.extend_point (create {EV_COORDINATE}.make_precise (362.66666666666663, -31.111111111111114)) + Result.extend_point (create {EV_COORDINATE}.make_precise (364.44444444444446, -32)) + Result.extend_point (create {EV_COORDINATE}.make_precise (366.66666666666663, -33.333333333333343)) + Result.extend_point (create {EV_COORDINATE}.make_precise (367.1111111111112, -35.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (369.77777777777771, -36.888888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (374.22222222222206, -37.777777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (375.55555555555554, -39.111111111111114)) + Result.extend_point (create {EV_COORDINATE}.make_precise (375.55555555555554, -42.222222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (377.33333333333337, -45.777777777777771)) + end + +invariant + + correct_port: attached target_imp implies port = game.yokosuka_navy_yard + +end diff --git a/jj_vitp/Interface/widgets/sea_area_widgets/aleutian_islands_widget.e b/jj_vitp/Interface/widgets/sea_area_widgets/aleutian_islands_widget.e new file mode 100644 index 0000000..650d61a --- /dev/null +++ b/jj_vitp/Interface/widgets/sea_area_widgets/aleutian_islands_widget.e @@ -0,0 +1,1390 @@ +note + description: "[ + Widget that represents this VITP sea area + ]" + author: "Jimmy J. Johnson" + +class + ALEUTIAN_ISLANDS_WIDGET + +inherit + + SEA_AREA_WIDGET + redefine + create_interface_objects, + position_widgets, + build_land, + build_ocean +-- build_bounding_figure + end + +create + make + +feature {NONE} -- Initialization + + create_interface_objects + -- Initialize attributes + do + Precursor {SEA_AREA_WIDGET} + unimak := unimak_imp + umnak := umnak_imp + chuginadak := chuginadak_imp + kagamil := kagamil_imp + carlisle := carlisle_imp + herbert := herbert_imp + yunaska := yunaska_imp + amukta := amukta_imp + seguam := seguam_imp + amilia := amilia_imp + atka := atka_imp + great_sitkin := great_sitkin_imp + little_tanaga := little_tanaga_imp + kagalaska := kagalaska_imp + adak := adak_imp + kanaga := kanaga_imp + tanaga := tanaga_imp + semisopochnoi := semisopochnoi_imp + amchitka := amchitka_imp + kiska := kiska_imp + agattu := agattu_imp + end + + position_widgets + -- Move Current and contained widgets to correct + -- location and set their their sizes + do + Precursor {SEA_AREA_WIDGET} + translate_widget (name_mt, -150, 50) + translate_widget (dot, -100, 40) +-- flag.center_on_dot (dot) + flag.set_x_y (dot.x, dot.y) +-- translate_widget (flag, -20, -5) + translate_widget (Current, 704, -2) + end + + build_land + -- Add `land' to Current and create the polygons. + do + Precursor {SEA_AREA_WIDGET} + -- Put polygons representing land into the `land' + land.extend (unimak) + land.extend (umnak) + land.extend (chuginadak) + land.extend (kagamil) + land.extend (carlisle) + land.extend (herbert) + land.extend (yunaska) + land.extend (amukta) + land.extend (seguam) + land.extend (amilia) + land.extend (atka) + land.extend (great_sitkin) + land.extend (little_tanaga) + land.extend (kagalaska) + land.extend (adak) + land.extend (kanaga) + land.extend (tanaga) + land.extend (semisopochnoi) + land.extend (amchitka) + land.extend (kiska) + land.extend (agattu) + unimak.transform (aleutians_transform) + umnak.transform (aleutians_transform) + chuginadak.transform (aleutians_transform) + kagamil.transform (aleutians_transform) + carlisle.transform (aleutians_transform) + herbert.transform (aleutians_transform) + yunaska.transform (aleutians_transform) + amukta.transform (aleutians_transform) + seguam.transform (aleutians_transform) + amilia.transform (aleutians_transform) + atka.transform (aleutians_transform) + great_sitkin.transform (aleutians_transform) + little_tanaga.transform (aleutians_transform) + kagalaska.transform (aleutians_transform) + adak.transform (aleutians_transform) + kanaga.transform (aleutians_transform) + tanaga.transform (aleutians_transform) + semisopochnoi.transform (aleutians_transform) + amchitka.transform (aleutians_transform) + kiska.transform (aleutians_transform) + agattu.transform (aleutians_transform) + end + + build_ocean + -- Create the polygon representing the `ocean' here + -- Redefined to add the points + do + Precursor {SEA_AREA_WIDGET} + -- start at top-right corder of board + ocean.extend_point (create {EV_COORDINATE}.make (0, 0)) + ocean.extend_point (create {EV_COORDINATE}.make (0, 21)) + ocean.extend_point (create {EV_COORDINATE}.make (-99,130)) + ocean.extend_point (create {EV_COORDINATE}.make (-177, 98)) + ocean.extend_point (create {EV_COORDINATE}.make (-204, 0)) + end + +-- build_bounding_figure +-- -- Add points to the `jj_bounding_figure'. +-- -- Redefined to use the tile edges as the bounding area +-- do +-- if has (jj_bounding_figure) then +-- prune_all (jj_bounding_figure) +-- end +-- create jj_bounding_figure +-- extend (jj_bounding_figure) +-- jj_bounding_figure.extend_point (create {EV_COORDINATE}.make (0, 0)) +-- jj_bounding_figure.extend_point (create {EV_COORDINATE}.make (0, 21)) +-- jj_bounding_figure.extend_point (create {EV_COORDINATE}.make (-99,130)) +-- jj_bounding_figure.extend_point (create {EV_COORDINATE}.make (-177, 98)) +-- jj_bounding_figure.extend_point (create {EV_COORDINATE}.make (-204, 0)) +-- jj_bounding_figure.enable_closed +-- -- Adjust `jj_bounding_figure' +-- jj_bounding_figure.set_line_width (2) +-- translate_widget (jj_bounding_figure, 704, 0) +-- end + +feature -- Access + + unimak: EV_MODEL_POLYGON + umnak: EV_MODEL_POLYGON + chuginadak: EV_MODEL_POLYGON + kagamil: EV_MODEL_POLYGON + carlisle: EV_MODEL_POLYGON + herbert: EV_MODEL_POLYGON + yunaska: EV_MODEL_POLYGON + amukta: EV_MODEL_POLYGON + seguam: EV_MODEL_POLYGON + amilia: EV_MODEL_POLYGON + atka: EV_MODEL_POLYGON + great_sitkin: EV_MODEL_POLYGON + little_tanaga: EV_MODEL_POLYGON + kagalaska: EV_MODEL_POLYGON + adak: EV_MODEL_POLYGON + kanaga: EV_MODEL_POLYGON + tanaga: EV_MODEL_POLYGON + semisopochnoi: EV_MODEL_POLYGON + amchitka: EV_MODEL_POLYGON + kiska: EV_MODEL_POLYGON + agattu: EV_MODEL_POLYGON + +feature {NONE} -- Implementation + + aleutians_point: EV_COORDINATE + -- Reference point for transformations of the Asia + -- polygons (i.e. `asia', `hainan', & `taiwan'). + local + bb: EV_RECTANGLE + mid_x: REAL_64 + mid_y: REAL_64 + once + create Result.make_precise (0.0, 0.0) + -- Estimate the mid_point +--3 create Result.make_precise (721.0, 176.0) + end + + aleutians_move: EV_COORDINATE + -- Distance in x- and y-directions to move the asia polygons. + once + create Result.make_precise (-34.0, 50.0) +-- create Result.make_precise (672.0, 38.0) + end + + aleutians_scale: REAL_64 = 0.07 + -- Scale factor for Asia polygons. + + aleutians_angle: REAL_64 = 16.0 + -- Number of degrees to rotate the Asia polygons + + aleutians_transform: EV_MODEL_TRANSFORMATION + -- Matrix to scale, rotate, and translate polygons + -- depicting `asia', `hainan', and `taiwan'. + local + r, s, t: EV_MODEL_TRANSFORMATION + once + create r.make_zero + create s.make_zero + create t.make_zero + t.translate (aleutians_move.x_precise, aleutians_move.y_precise) +-- s.scale (aleutians_scale, aleutians_scale, aleutians_point.x_precise, aleutians_point.y_precise, 0.0) + s.scale (aleutians_scale, aleutians_scale, 0.0, 0.0, 0.0) + r.rotate (degrees_to_radians (aleutians_angle), aleutians_point.x_precise, aleutians_point.y_precise) + Result := t * r * s +-- Result := r * s * t +-- Result := s * t * r + end + +feature {none} -- Implementation + + unimak_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (380.74074074074042, -269.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (381.62962962962956, -266.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (385.4814814814813, -268.4444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (389.03703703703695, -266.96296296296288)) + Result.extend_point (create {EV_COORDINATE}.make_precise (389.03703703703695, -269.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (394.66666666666652, -271.11111111111103)) + Result.extend_point (create {EV_COORDINATE}.make_precise (393.18518518518476, -269.62962962962956)) + Result.extend_point (create {EV_COORDINATE}.make_precise (393.18518518518476, -266.96296296296288)) + Result.extend_point (create {EV_COORDINATE}.make_precise (396.74074074074042, -262.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (401.77777777777783, -256.5925925925925)) + Result.extend_point (create {EV_COORDINATE}.make_precise (404.14814814814827, -249.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (405.92592592592564, -247.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (404.4444444444448, -242.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (406.81481481481478, -236.1481481481481)) + Result.extend_point (create {EV_COORDINATE}.make_precise (407.70370370370392, -229.33333333333329)) + Result.extend_point (create {EV_COORDINATE}.make_precise (411.55555555555566, -223.70370370370364)) + Result.extend_point (create {EV_COORDINATE}.make_precise (421.03703703703695, -224.59259259259255)) + Result.extend_point (create {EV_COORDINATE}.make_precise (427.25925925925912, -226.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (432.88888888888914, -218.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (432.59259259259261, -214.81481481481475)) + Result.extend_point (create {EV_COORDINATE}.make_precise (437.33333333333348, -213.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (437.33333333333348, -211.25925925925921)) + Result.extend_point (create {EV_COORDINATE}.make_precise (432.88888888888914, -210.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (427.85185185185173, -211.55555555555551)) + Result.extend_point (create {EV_COORDINATE}.make_precise (430.81481481481478, -214.81481481481475)) + Result.extend_point (create {EV_COORDINATE}.make_precise (426.37037037037044, -215.11111111111106)) + Result.extend_point (create {EV_COORDINATE}.make_precise (422.81481481481478, -215.11111111111106)) + Result.extend_point (create {EV_COORDINATE}.make_precise (421.62962962962956, -212.7407407407407)) + Result.extend_point (create {EV_COORDINATE}.make_precise (420.4444444444448, -216.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (418.07407407407391, -217.18518518518513)) + Result.extend_point (create {EV_COORDINATE}.make_precise (416.29629629629608, -215.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (412.14814814814827, -218.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (412.74074074074042, -222.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (408.29629629629608, -223.40740740740736)) + Result.extend_point (create {EV_COORDINATE}.make_precise (405.92592592592564, -221.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (403.25925925925912, -218.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (404.74074074074042, -216.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (403.85185185185173, -209.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (402.07407407407391, -207.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (396.14814814814827, -207.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (396.14814814814827, -206.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (391.11111111111131, -204.4444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (388.4444444444448, -206.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (389.62962962962956, -202.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (381.92592592592564, -203.85185185185179)) + Result.extend_point (create {EV_COORDINATE}.make_precise (373.33333333333348, -205.33333333333329)) + Result.extend_point (create {EV_COORDINATE}.make_precise (362.07407407407391, -205.62962962962956)) + Result.extend_point (create {EV_COORDINATE}.make_precise (350.22222222222217, -204.7407407407407)) + Result.extend_point (create {EV_COORDINATE}.make_precise (341.62962962962956, -202.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (332.4444444444448, -199.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (325.92592592592564, -194.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (321.18518518518476, -190.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (319.40740740740739, -186.96296296296293)) + Result.extend_point (create {EV_COORDINATE}.make_precise (320.88888888888914, -185.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (320, -183.70370370370364)) + Result.extend_point (create {EV_COORDINATE}.make_precise (320, -181.03703703703698)) + Result.extend_point (create {EV_COORDINATE}.make_precise (317.92592592592564, -178.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (314.96296296296305, -175.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (312.88888888888914, -173.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (309.92592592592564, -172.1481481481481)) + Result.extend_point (create {EV_COORDINATE}.make_precise (306.07407407407391, -170.96296296296293)) + Result.extend_point (create {EV_COORDINATE}.make_precise (301.92592592592564, -170.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (299.85185185185173, -169.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (296.29629629629608, -169.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (295.40740740740739, -167.70370370370364)) + Result.extend_point (create {EV_COORDINATE}.make_precise (293.33333333333348, -167.70370370370364)) + Result.extend_point (create {EV_COORDINATE}.make_precise (290.96296296296305, -166.81481481481475)) + Result.extend_point (create {EV_COORDINATE}.make_precise (289.18518518518476, -167.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (286.22222222222217, -168.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (284.14814814814827, -167.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (281.77777777777783, -167.40740740740736)) + Result.extend_point (create {EV_COORDINATE}.make_precise (280, -168.59259259259255)) + Result.extend_point (create {EV_COORDINATE}.make_precise (277.03703703703695, -169.18518518518516)) + Result.extend_point (create {EV_COORDINATE}.make_precise (276.4444444444448, -170.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (274.07407407407391, -170.96296296296293)) + Result.extend_point (create {EV_COORDINATE}.make_precise (273.4814814814813, -173.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (271.11111111111131, -175.11111111111106)) + Result.extend_point (create {EV_COORDINATE}.make_precise (271.40740740740739, -178.96296296296293)) + Result.extend_point (create {EV_COORDINATE}.make_precise (269.62962962962956, -179.85185185185182)) + Result.extend_point (create {EV_COORDINATE}.make_precise (268.14814814814827, -180.4444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (268.14814814814827, -182.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (268.4444444444448, -185.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (265.4814814814813, -186.96296296296293)) + Result.extend_point (create {EV_COORDINATE}.make_precise (265.4814814814813, -194.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (263.70370370370392, -195.55555555555551)) + Result.extend_point (create {EV_COORDINATE}.make_precise (266.66666666666652, -200.29629629629625)) + Result.extend_point (create {EV_COORDINATE}.make_precise (269.92592592592564, -199.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (273.18518518518476, -203.55555555555551)) + Result.extend_point (create {EV_COORDINATE}.make_precise (272.88888888888914, -205.03703703703698)) + Result.extend_point (create {EV_COORDINATE}.make_precise (274.37037037037044, -204.1481481481481)) + Result.extend_point (create {EV_COORDINATE}.make_precise (277.62962962962956, -206.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (280.59259259259261, -205.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (285.33333333333348, -209.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (290.66666666666652, -218.96296296296291)) + Result.extend_point (create {EV_COORDINATE}.make_precise (293.33333333333348, -224.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (294.51851851851825, -227.25925925925921)) + Result.extend_point (create {EV_COORDINATE}.make_precise (294.22222222222217, -229.03703703703698)) + Result.extend_point (create {EV_COORDINATE}.make_precise (297.77777777777783, -229.33333333333329)) + Result.extend_point (create {EV_COORDINATE}.make_precise (298.96296296296305, -228.74074074074068)) + Result.extend_point (create {EV_COORDINATE}.make_precise (298.96296296296305, -231.40740740740733)) + Result.extend_point (create {EV_COORDINATE}.make_precise (296.59259259259261, -231.40740740740733)) + Result.extend_point (create {EV_COORDINATE}.make_precise (298.66666666666652, -236.74074074074068)) + Result.extend_point (create {EV_COORDINATE}.make_precise (300.14814814814827, -238.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (299.25925925925912, -243.85185185185179)) + Result.extend_point (create {EV_COORDINATE}.make_precise (303.11111111111131, -245.33333333333329)) + Result.extend_point (create {EV_COORDINATE}.make_precise (303.40740740740739, -247.70370370370364)) + Result.extend_point (create {EV_COORDINATE}.make_precise (307.25925925925912, -250.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (311.11111111111131, -253.03703703703698)) + Result.extend_point (create {EV_COORDINATE}.make_precise (317.03703703703695, -249.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (318.81481481481478, -246.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (322.37037037037044, -245.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (324.4444444444448, -247.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (326.81481481481478, -245.62962962962956)) + Result.extend_point (create {EV_COORDINATE}.make_precise (329.18518518518476, -246.81481481481475)) + Result.extend_point (create {EV_COORDINATE}.make_precise (330.66666666666652, -245.03703703703698)) + Result.extend_point (create {EV_COORDINATE}.make_precise (330.66666666666652, -248.29629629629625)) + Result.extend_point (create {EV_COORDINATE}.make_precise (328.88888888888914, -249.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (331.25925925925912, -251.85185185185179)) + Result.extend_point (create {EV_COORDINATE}.make_precise (333.33333333333348, -250.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (334.81481481481478, -252.74074074074068)) + Result.extend_point (create {EV_COORDINATE}.make_precise (333.92592592592564, -254.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (335.70370370370392, -256.29629629629625)) + Result.extend_point (create {EV_COORDINATE}.make_precise (338.96296296296305, -258.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (341.03703703703695, -256.5925925925925)) + Result.extend_point (create {EV_COORDINATE}.make_precise (345.4814814814813, -256.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (350.22222222222217, -259.55555555555549)) + Result.extend_point (create {EV_COORDINATE}.make_precise (354.37037037037044, -262.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (360.29629629629608, -269.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (363.25925925925912, -268.4444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (366.81481481481478, -269.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (369.77777777777783, -271.70370370370364)) + Result.extend_point (create {EV_COORDINATE}.make_precise (375.11111111111131, -269.92592592592587)) + end + + umnak_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-34.074074074074133, -32.888888888888914)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-29.629629629629562, -35.851851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-27.555555555555202, -34.962962962962933)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-21.333333333333258, -37.629629629629619)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-20.444444444444343, -36.148148148148096)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-16.888888888888687, -37.333333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-14.222222222221944, -38.814814814814781)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-10.96296296296282, -37.925925925925867)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-10.666666666666515, -34.666666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1.4814814814812962, -31.111111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (5.925925925925867, -31.703703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (6.518518518518249, -27.851851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (2.0740740740739056, -21.925925925925867)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-0.88888888888868678, -19.259259259259238)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1.1851851851849915, -16)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-0.29629629629607734, -10.666666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-4.1481481481480387, -7.4074074074073906)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-11.555555555555202, -3.2592592592592382)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-13.92592592592564, -0.88888888888891415)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-19.851851851851734, 2.6666666666666856)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-23.111111111110858, 4.7407407407407618)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-33.185185185185219, 8.2962962962963047)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-40.296296296296077, 12.740740740740762)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-43.851851851851734, 17.185185185185219)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-42.96296296296282, 18.666666666666686)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-44.444444444444343, 19.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-44.444444444444343, 23.703703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-47.703703703703695, 21.629629629629676)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-46.814814814814781, 27.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-50.074074074074133, 29.629629629629676)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-53.92592592592564, 34.074074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-56, 36.148148148148152)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-55.407407407407391, 38.814814814814781)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-58.666666666666515, 41.777777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-61.037037037036953, 40.296296296296305)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-61.333333333333258, 42.370370370370381)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-66.074074074074133, 42.370370370370381)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-69.92592592592564, 45.925925925925981)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-72.592592592592382, 51.259259259259295)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-74.96296296296282, 51.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-75.555555555555202, 54.814814814814781)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-77.629629629629562, 52.148148148148152)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-78.518518518518476, 54.814814814814781)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-80.592592592592382, 55.407407407407391)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-83.259259259259125, 54.814814814814781)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-85.333333333333258, 56.888888888888857)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-83.259259259259125, 58.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-83.555555555555202, 61.925925925925981)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-87.703703703703695, 58.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-92.148148148148039, 61.333333333333371)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-98.074074074074133, 65.481481481481467)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-103.11111111111086, 68.740740740740762)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-106.37037037037044, 68.148148148148152)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-108.44444444444434, 70.814814814814781)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-110.81481481481478, 72.888888888888857)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-113.7777777777776, 74.074074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-112.88888888888869, 72)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-109.33333333333326, 69.629629629629676)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-110.51851851851848, 67.851851851851904)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-102.22222222222194, 65.777777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-100.14814814814804, 62.222222222222172)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-101.62962962962956, 60.740740740740762)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-100.74074074074088, 58.074074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-97.185185185185219, 57.481481481481467)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-92.740740740740875, 56.296296296296305)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-92.148148148148039, 53.333333333333371)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-91.555555555555202, 49.481481481481467)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-93.629629629629562, 49.185185185185219)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-93.037037037036953, 44.740740740740762)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-89.185185185185219, 44.444444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-85.333333333333258, 40.888888888888857)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-83.851851851851734, 36.444444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-83.851851851851734, 33.481481481481467)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-86.518518518518476, 30.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-86.814814814814781, 25.481481481481524)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-83.851851851851734, 22.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-83.555555555555202, 18.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-80.296296296296077, 18.074074074074133)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-75.851851851851734, 15.111111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-76.740740740740875, 13.629629629629676)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-73.481481481481296, 13.037037037037067)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-70.222222222221944, 8.5925925925926094)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-69.629629629629562, 6.2222222222222285)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-65.185185185185219, 8.8888888888889142)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-60.740740740740875, 9.4814814814815236)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-57.777777777777601, 6.814814814814838)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-56, 6.2222222222222285)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-53.333333333333258, 8.8888888888889142)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-51.555555555555202, 8.5925925925926094)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-48.888888888888687, 8.2962962962963047)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-46.518518518518476, 9.4814814814815236)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-44.740740740740875, 4.7407407407407618)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-45.333333333333258, 3.259259259259295)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-47.111111111110858, 3.259259259259295)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-48, -0.88888888888891415)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-51.259259259259125, -0.88888888888891415)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-52.740740740740875, -2.0740740740740193)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-52.444444444444343, -3.5555555555555429)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-50.370370370370438, -5.3333333333333144)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-48.296296296296077, -10.666666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-50.074074074074133, -12.740740740740705)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-50.666666666666515, -16.296296296296305)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-45.629629629629562, -23.407407407407391)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-44.148148148148039, -26.370370370370324)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-42.370370370370438, -25.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-37.92592592592564, -29.03703703703701)) + end + + chuginadak_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-195.85185185185173, 74.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-196.14814814814804, 70.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-191.40740740740739, 68.148148148148152)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-186.96296296296282, 69.629629629629676)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-183.7037037037037, 68.740740740740762)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-183.7037037037037, 66.074074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-178.37037037037044, 65.185185185185219)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-176.29629629629608, 63.703703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-172.74074074074088, 63.407407407407391)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-170.96296296296282, 64.888888888888857)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-168.88888888888869, 64.888888888888857)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-166.22222222222194, 68.444444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-167.40740740740739, 73.185185185185219)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-166.22222222222194, 74.666666666666686)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-169.4814814814813, 75.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-167.7037037037037, 80.296296296296305)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-170.66666666666652, 80.592592592592609)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-173.33333333333326, 79.111111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-175.7037037037037, 76.148148148148152)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-178.37037037037044, 77.333333333333371)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-179.85185185185173, 75.259259259259295)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-182.22222222222194, 75.259259259259295)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-183.11111111111086, 72.888888888888857)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-185.18518518518522, 75.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-187.85185185185173, 77.333333333333371)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-188.14814814814804, 79.407407407407391)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-193.7777777777776, 78.814814814814781)) + end + + kagamil_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-170.37037037037044, 42.370370370370381)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-166.22222222222194, 42.370370370370381)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-165.92592592592564, 46.222222222222172)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-164.14814814814804, 47.407407407407391)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-166.81481481481478, 48.888888888888857)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-167.40740740740739, 51.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-167.40740740740739, 53.925925925925981)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-171.85185185185173, 55.111111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-171.85185185185173, 53.333333333333371)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-174.51851851851848, 51.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-173.33333333333326, 46.814814814814781)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-173.33333333333326, 43.555555555555543)) + end + + carlisle_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-207.40740740740739, 63.407407407407391)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-203.85185185185173, 59.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-198.81481481481478, 59.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-195.25925925925912, 61.037037037037067)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-195.25925925925912, 65.777777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-198.81481481481478, 69.037037037037067)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-204.74074074074088, 67.851851851851904)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-204.14814814814804, 65.185185185185219)) + end + + herbert_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-210.37037037037044, 80)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-208.59259259259238, 80.592592592592609)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-207.40740740740739, 79.407407407407391)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-204.14814814814804, 81.185185185185219)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-200.59259259259238, 80.888888888888857)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-200.59259259259238, 86.814814814814781)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-205.33333333333326, 91.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-208.59259259259238, 90.074074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-211.85185185185173, 90.666666666666686)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-212.74074074074088, 88.592592592592609)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-211.85185185185173, 86.814814814814781)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-212.14814814814804, 84.444444444444457)) + end + + yunaska_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-257.18518518518522, 93.333333333333371)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-250.96296296296282, 93.333333333333371)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-246.22222222222194, 97.481481481481467)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-247.11111111111086, 102.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-250.07407407407413, 107.2592592592593)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-254.51851851851848, 108.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-258.07407407407413, 107.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-260.14814814814804, 109.03703703703707)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-261.92592592592564, 109.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-267.85185185185173, 116.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-269.33333333333326, 114.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-272, 114.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-272.59259259259238, 107.8518518518519)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-270.22222222222194, 105.48148148148147)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-270.51851851851848, 102.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-265.7777777777776, 101.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-262.22222222222194, 98.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-264.59259259259238, 96.296296296296305)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-259.5555555555552, 95.111111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-257.7777777777776, 96.296296296296305)) + end + + amukta_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-314.66666666666652, 123.2592592592593)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-307.85185185185173, 117.92592592592598)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-306.96296296296282, 120.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-303.40740740740739, 122.07407407407408)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-303.7037037037037, 126.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-306.96296296296282, 131.8518518518519)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-311.7037037037037, 128.59259259259261)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-313.7777777777776, 130.07407407407408)) + end + + seguam_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-419.85185185185173, 138.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-414.51851851851848, 138.37037037037038)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-412.44444444444434, 141.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-408.29629629629608, 141.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-404.44444444444434, 145.18518518518522)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-403.85185185185173, 147.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-408.29629629629608, 151.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-414.81481481481478, 155.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-417.4814814814813, 154.07407407407408)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-418.96296296296282, 156.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-422.81481481481478, 156.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-426.07407407407413, 160)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-428.44444444444434, 157.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-434.66666666666652, 157.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-435.85185185185173, 152.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-430.81481481481478, 148.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-430.51851851851848, 145.77777777777777)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-426.96296296296282, 142.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-423.40740740740739, 141.92592592592587)) + end + + amilia_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-538.37037037037021, 175.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-533.92592592592564, 177.48148148148147)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-529.7777777777776, 176.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-528.88888888888869, 175.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-524.74074074074065, 173.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-521.7777777777776, 174.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-521.4814814814813, 176.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-516.44444444444434, 173.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-514.66666666666652, 175.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-517.33333333333303, 177.77777777777777)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-515.5555555555552, 179.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-514.37037037037021, 182.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-512.88888888888869, 180.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-510.81481481481478, 178.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-509.92592592592564, 179.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-507.25925925925912, 178.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-505.18518518518522, 180.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-501.92592592592564, 179.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-500.44444444444434, 182.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-496.29629629629608, 181.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-495.70370370370347, 178.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-490.96296296296282, 179.8518518518519)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-489.7777777777776, 182.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-487.70370370370347, 181.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-486.22222222222194, 180.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-482.66666666666652, 180.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-480.59259259259238, 181.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-479.11111111111086, 179.8518518518519)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-476.14814814814804, 181.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-474.66666666666652, 182.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-473.18518518518522, 181.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-468.44444444444434, 180.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-468.44444444444434, 182.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-464.88888888888869, 181.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-466.07407407407391, 183.70370370370364)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-469.62962962962956, 184)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-471.11111111111086, 185.18518518518522)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-476.44444444444434, 185.48148148148147)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-477.62962962962956, 184.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-482.37037037037021, 186.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-487.70370370370347, 184.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-489.4814814814813, 186.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-493.62962962962956, 186.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-494.51851851851848, 188.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-498.07407407407391, 187.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-502.22222222222194, 190.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-503.99999999999977, 186.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-504.59259259259238, 190.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-510.22222222222194, 189.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-510.81481481481478, 187.8518518518519)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-512.88888888888869, 190.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-511.40740740740739, 192.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-513.7777777777776, 192.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-515.25925925925912, 190.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-517.92592592592564, 191.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-519.99999999999977, 189.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-518.22222222222194, 187.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-523.25925925925912, 187.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-522.96296296296282, 189.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-525.92592592592564, 189.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-527.11111111111086, 187.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-528.29629629629608, 188.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-530.37037037037021, 189.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-530.96296296296282, 185.48148148148147)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-534.81481481481478, 188.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-541.62962962962956, 188.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-543.40740740740739, 190.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-547.25925925925912, 188.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-548.74074074074065, 189.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-551.40740740740739, 187.8518518518519)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-554.37037037037021, 186.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-553.4814814814813, 182.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-555.5555555555552, 183.70370370370364)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-557.03703703703695, 180.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-558.51851851851848, 181.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-563.25925925925912, 177.77777777777777)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-563.25925925925912, 176)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-558.51851851851848, 176.59259259259255)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-553.7777777777776, 177.77777777777777)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-549.03703703703695, 175.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-549.92592592592564, 178.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-546.96296296296282, 179.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-544.29629629629608, 176.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-544.29629629629608, 180.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-540.74074074074065, 182.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-540.74074074074065, 179.55555555555554)) + end + + atka_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-583.40740740740739, 140.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-583.70370370370347, 136)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-579.5555555555552, 136.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-577.18518518518522, 134.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-571.5555555555552, 133.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-570.66666666666652, 136.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-564.14814814814804, 138.37037037037038)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-564.14814814814804, 141.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-558.81481481481478, 142.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-560.88888888888869, 145.18518518518522)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-557.33333333333303, 149.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-558.51851851851848, 155.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-562.07407407407391, 156.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-561.18518518518522, 159.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-564.14814814814804, 163.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-571.85185185185173, 163.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-575.11111111111086, 161.77777777777777)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-577.18518518518522, 164.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-575.40740740740739, 168.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-570.96296296296282, 170.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-570.96296296296282, 173.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-568.29629629629608, 173.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-566.51851851851848, 175.70370370370364)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-567.11111111111086, 181.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-569.18518518518522, 179.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-571.5555555555552, 177.48148148148147)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-574.22222222222194, 179.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-578.07407407407391, 177.77777777777777)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-578.37037037037021, 181.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-583.99999999999977, 181.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-583.40740740740739, 178.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-586.66666666666652, 179.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-586.96296296296282, 176.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-591.99999999999977, 181.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-594.07407407407391, 186.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-596.14814814814804, 187.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-595.85185185185173, 191.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-599.40740740740739, 189.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-600.88888888888869, 184)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-602.37037037037021, 184.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-604.74074074074065, 185.48148148148147)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-607.11111111111086, 182.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-605.62962962962956, 187.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-603.5555555555552, 190.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-610.07407407407391, 185.77777777777777)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-608.29629629629608, 189.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-610.07407407407391, 190.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-611.5555555555552, 189.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-613.92592592592564, 189.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-615.11111111111086, 191.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-618.07407407407391, 191.70370370370364)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-621.62962962962956, 187.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-621.92592592592564, 190.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-623.11111111111086, 191.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-621.03703703703695, 193.77777777777777)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-626.66666666666652, 194.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-629.33333333333303, 192.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-634.37037037037021, 192.59259259259255)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-637.92592592592564, 190.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-640.29629629629608, 189.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-641.18518518518522, 191.70370370370364)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-646.51851851851848, 191.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-647.70370370370347, 193.48148148148147)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-651.85185185185173, 192)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-650.96296296296282, 194.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-657.7777777777776, 194.07407407407408)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-658.37037037037021, 196.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-662.22222222222194, 196.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-662.51851851851848, 194.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-668.74074074074065, 194.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-669.33333333333303, 195.8518518518519)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-671.99999999999977, 195.8518518518519)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-671.40740740740739, 194.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-675.25925925925912, 194.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-678.51851851851848, 195.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-679.40740740740739, 194.07407407407408)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-681.18518518518522, 192.59259259259255)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-677.33333333333303, 192.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-674.66666666666652, 189.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-672.88888888888869, 189.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-672.59259259259238, 191.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-669.03703703703695, 191.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-668.44444444444434, 187.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-660.14814814814804, 187.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-661.92592592592564, 190.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-658.96296296296282, 191.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-657.4814814814813, 188.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-653.92592592592564, 190.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-654.81481481481478, 185.48148148148147)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-652.44444444444434, 183.70370370370364)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-650.37037037037021, 184.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-649.4814814814813, 186.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-647.11111111111086, 185.77777777777777)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-646.22222222222194, 183.70370370370364)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-642.66666666666652, 184.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-643.25925925925912, 181.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-640.29629629629608, 178.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-640.29629629629608, 183.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-638.81481481481478, 181.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-636.44444444444434, 180.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-635.85185185185173, 182.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-631.11111111111086, 182.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-630.22222222222194, 184)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-629.03703703703695, 182.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-626.96296296296282, 181.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-626.96296296296282, 178.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-623.70370370370347, 178.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-623.11111111111086, 181.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-618.37037037037021, 180.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-617.7777777777776, 182.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-616.29629629629608, 180.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-612.14814814814804, 181.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-613.62962962962956, 178.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-613.92592592592564, 174.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-610.37037037037021, 176.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-607.70370370370347, 175.70370370370364)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-603.85185185185173, 176.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-605.03703703703695, 174.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-609.4814814814813, 173.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-609.18518518518522, 171.8518518518519)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-610.66666666666652, 170.07407407407408)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-608.88888888888869, 168.59259259259255)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-606.51851851851848, 170.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-604.44444444444434, 170.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-604.14814814814804, 168.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-601.4814814814813, 168.59259259259255)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-599.99999999999977, 169.77777777777777)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-598.51851851851848, 171.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-596.14814814814804, 168.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-598.51851851851848, 167.70370370370364)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-600.59259259259238, 165.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-600.59259259259238, 163.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-596.44444444444434, 163.8518518518519)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-594.07407407407391, 163.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-590.51851851851848, 165.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-587.25925925925912, 165.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-586.07407407407391, 161.77777777777777)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-583.70370370370347, 162.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-583.70370370370347, 160.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-580.44444444444434, 158.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-581.03703703703695, 155.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-586.37037037037021, 154.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-583.11111111111086, 152.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-586.96296296296282, 152.59259259259255)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-588.44444444444434, 149.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-585.4814814814813, 147.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-585.7777777777776, 146.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-590.51851851851848, 149.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-587.85185185185173, 154.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-591.99999999999977, 154.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-593.7777777777776, 152)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-597.92592592592564, 152.59259259259255)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-599.99999999999977, 151.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-600.29629629629608, 148.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-598.22222222222194, 148.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-593.7777777777776, 148.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-589.33333333333303, 147.8518518518519)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-588.44444444444434, 144)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-588.74074074074065, 141.03703703703707)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-585.18518518518522, 139.2592592592593)) + end + + great_sitkin_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-753.7777777777776, 178.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-746.07407407407391, 180.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-743.70370370370347, 184.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-741.03703703703695, 185.48148148148147)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-741.33333333333303, 189.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-737.4814814814813, 190.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-739.85185185185173, 192.59259259259255)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-743.11111111111086, 192)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-745.4814814814813, 195.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-743.99999999999977, 196.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-743.70370370370347, 200.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-748.74074074074065, 200.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-749.92592592592564, 197.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-752.88888888888869, 196.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-757.62962962962956, 196.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-757.03703703703695, 192.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-759.70370370370347, 189.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-759.70370370370347, 184.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-757.03703703703695, 183.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-756.14814814814804, 180.74074074074076)) + end + + little_tanaga_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-760.59259259259238, 214.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-756.44444444444434, 213.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-752.29629629629608, 217.18518518518522)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-753.7777777777776, 219.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-750.51851851851848, 219.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-749.62962962962956, 217.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-747.85185185185173, 217.18518518518522)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-745.7777777777776, 218.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-743.70370370370347, 218.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-741.62962962962956, 223.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-740.44444444444434, 225.18518518518522)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-743.99999999999977, 224.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-743.99999999999977, 221.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-745.4814814814813, 222.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-751.40740740740739, 223.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-748.44444444444434, 225.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-751.40740740740739, 225.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-753.4814814814813, 225.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-753.7777777777776, 221.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-755.25925925925912, 224)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-755.85185185185173, 227.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-754.07407407407391, 230.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-757.92592592592564, 228.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-757.33333333333303, 224.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-759.99999999999977, 224.5925925925925)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-763.25925925925912, 222.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-762.07407407407391, 220.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-759.40740740740739, 218.96296296296293)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-760.88888888888869, 216.2962962962963)) + end + + kagalaska_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-778.96296296296282, 219.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-777.7777777777776, 215.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-773.62962962962956, 215.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-770.96296296296282, 216.5925925925925)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-769.4814814814813, 215.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-765.92592592592564, 215.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-767.40740740740739, 220.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-773.33333333333303, 221.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-769.18518518518522, 221.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-768.88888888888869, 223.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-767.11111111111086, 222.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-765.03703703703695, 223.70370370370358)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-765.03703703703695, 226.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-767.70370370370347, 226.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-765.33333333333303, 228.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-767.11111111111086, 230.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-767.11111111111086, 234.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-770.07407407407391, 231.70370370370358)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-768.88888888888869, 235.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-771.85185185185173, 235.85185185185185)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-774.51851851851848, 234.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-777.18518518518522, 234.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-777.18518518518522, 228.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-778.37037037037021, 227.25925925925924)) + end + + adak_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-797.03703703703684, 197.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-794.37037037037021, 195.8518518518519)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-791.70370370370347, 196.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-790.51851851851848, 200.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-792.59259259259238, 203.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-790.22222222222194, 206.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-790.51851851851848, 209.18518518518522)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-796.44444444444423, 210.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-797.33333333333303, 215.70370370370358)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-800.29629629629608, 217.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-798.22222222222194, 217.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-793.7777777777776, 217.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-797.62962962962945, 220.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-792.88888888888869, 219.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-787.85185185185173, 221.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-788.14814814814804, 218.96296296296293)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-783.70370370370347, 217.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-782.51851851851848, 220.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-780.74074074074065, 218.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-779.25925925925912, 222.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-780.14814814814804, 227.85185185185185)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-779.5555555555552, 231.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-779.5555555555552, 234.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-781.33333333333303, 234.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-783.11111111111086, 236.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-784.29629629629608, 233.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-787.25925925925912, 231.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-789.62962962962956, 234.96296296296293)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-787.5555555555552, 235.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-787.85185185185173, 237.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-789.03703703703695, 240.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-790.51851851851848, 237.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-791.11111111111086, 240)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-794.07407407407391, 240.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-794.96296296296282, 238.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-796.44444444444423, 239.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-796.14814814814804, 241.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-799.40740740740728, 241.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-799.99999999999977, 238.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-800.88888888888857, 242.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-802.96296296296282, 243.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-805.33333333333303, 242.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-807.11111111111086, 244.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-806.81481481481467, 247.70370370370358)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-806.22222222222194, 250.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-810.37037037037021, 249.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-812.14814814814804, 252.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-816.88888888888857, 249.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-815.40740740740728, 247.70370370370358)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-815.40740740740728, 243.85185185185185)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-817.18518518518511, 242.96296296296293)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-815.70370370370347, 240.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-816.29629629629608, 237.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-817.4814814814813, 237.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-817.7777777777776, 240.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-819.85185185185173, 241.18518518518522)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-818.6666666666664, 244.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-821.92592592592564, 247.70370370370358)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-823.11111111111086, 250.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-824.59259259259238, 253.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-827.25925925925901, 256.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-829.33333333333303, 255.70370370370358)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-831.40740740740728, 254.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-831.99999999999977, 250.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-829.62962962962945, 248.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-830.81481481481467, 246.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-828.74074074074065, 243.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-825.4814814814813, 240)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-823.11111111111086, 240.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-820.44444444444423, 236.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-821.62962962962945, 234.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-820.44444444444423, 233.18518518518522)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-816.59259259259238, 234.96296296296293)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-818.37037037037021, 232.5925925925925)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-815.99999999999977, 230.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-819.85185185185173, 230.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-823.40740740740728, 230.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-824.29629629629608, 224.5925925925925)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-820.44444444444423, 224.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-820.44444444444423, 221.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-818.07407407407391, 222.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-817.4814814814813, 226.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-814.81481481481467, 226.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-814.51851851851848, 228.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-810.37037037037021, 227.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-807.70370370370347, 228.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-806.22222222222194, 227.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-807.99999999999977, 224.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-809.7777777777776, 224.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-812.44444444444423, 223.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-812.14814814814804, 218.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-809.7777777777776, 216.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-805.92592592592564, 218.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-807.11111111111086, 214.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-808.88888888888857, 213.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-810.07407407407391, 214.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-811.25925925925901, 212.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-813.33333333333303, 210.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-814.22222222222194, 206.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-812.14814814814804, 202.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-808.59259259259238, 200)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-804.14814814814804, 201.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-799.11111111111086, 202.37037037037032)) + end + + kanaga_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-848.29629629629608, 204.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-843.25925925925901, 204.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-842.07407407407391, 206.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-839.70370370370347, 206.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-836.14814814814804, 210.96296296296293)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-839.11111111111086, 212.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-838.51851851851848, 215.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-837.33333333333303, 217.18518518518522)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-841.4814814814813, 219.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-843.85185185185173, 222.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-843.5555555555552, 226.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-842.07407407407391, 229.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-844.14814814814804, 231.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-844.14814814814804, 238.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-849.4814814814813, 240)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-849.7777777777776, 236.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-851.25925925925901, 240.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-853.92592592592564, 239.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-855.70370370370347, 242.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-859.5555555555552, 242.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-862.22222222222194, 240.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-865.4814814814813, 236.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-872.29629629629608, 237.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-877.62962962962945, 240.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-882.07407407407391, 240.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-888.29629629629608, 240.5925925925925)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-890.07407407407391, 242.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-889.7777777777776, 246.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-893.33333333333303, 246.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-893.92592592592564, 242.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-895.40740740740728, 239.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-893.33333333333303, 237.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-889.7777777777776, 233.18518518518522)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-886.51851851851848, 236.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-882.07407407407391, 236.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-878.81481481481467, 234.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-875.5555555555552, 233.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-874.37037037037021, 232)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-870.81481481481467, 231.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-869.92592592592564, 232.5925925925925)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-868.14814814814804, 230.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-859.5555555555552, 227.85185185185185)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-854.51851851851848, 226.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-851.5555555555552, 222.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-850.6666666666664, 213.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-850.37037037037021, 207.40740740740739)) + end + + tanaga_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-936.29629629629608, 208.5925925925925)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-927.40740740740716, 208.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-922.6666666666664, 209.18518518518522)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-920.88888888888857, 208)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-918.22222222222194, 208.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-917.92592592592564, 211.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-914.96296296296282, 212.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-914.37037037037021, 215.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-917.03703703703684, 216.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-913.7777777777776, 218.96296296296293)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-912.59259259259238, 217.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-909.92592592592564, 218.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-910.51851851851825, 221.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-906.37037037037021, 221.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-906.07407407407391, 219.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-901.62962962962945, 218.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-901.33333333333303, 221.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-896.29629629629608, 220.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-893.03703703703684, 218.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-887.99999999999977, 218.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-887.99999999999977, 221.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-889.7777777777776, 221.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-890.96296296296282, 223.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-898.37037037037021, 223.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-903.40740740740728, 226.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-907.25925925925901, 227.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-904.59259259259238, 229.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-903.99999999999977, 231.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-905.7777777777776, 232.5925925925925)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-908.74074074074065, 234.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-908.14814814814804, 237.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-906.37037037037021, 238.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-910.22222222222194, 243.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-913.18518518518499, 241.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-914.37037037037021, 243.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-916.14814814814804, 246.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-915.25925925925901, 250.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-914.07407407407379, 255.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-919.11111111111086, 253.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-919.11111111111086, 248.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-920.88888888888857, 248)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-923.25925925925901, 249.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-926.51851851851825, 245.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-930.37037037037021, 245.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-933.62962962962945, 244.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-933.33333333333303, 240.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-933.62962962962945, 238.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-925.62962962962945, 239.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-925.03703703703684, 237.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-921.7777777777776, 237.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-919.40740740740716, 236.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-919.11111111111086, 230.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-920.88888888888857, 229.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-922.96296296296282, 228.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-925.03703703703684, 226.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-926.51851851851825, 227.85185185185185)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-928.88888888888857, 228.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-930.96296296296282, 226.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-930.96296296296282, 222.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-934.51851851851825, 222.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-938.96296296296282, 220.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-943.11111111111086, 216.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-944.59259259259238, 213.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-941.62962962962945, 208.8888888888888)) + end + + semisopochnoi_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-1143.4074074074072, 193.77777777777777)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1138.9629629629626, 191.70370370370364)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1133.037037037037, 194.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1129.7777777777776, 199.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1125.333333333333, 200.5925925925925)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1125.333333333333, 204.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1129.7777777777776, 205.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1127.9999999999998, 208.5925925925925)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1134.2222222222219, 212.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1135.9999999999998, 214.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1141.037037037037, 215.70370370370358)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1143.7037037037035, 212.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1146.9629629629626, 212.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1150.2222222222219, 209.18518518518522)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1152.2962962962961, 208.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1153.185185185185, 205.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1151.9999999999998, 202.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1152.8888888888887, 198.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1147.5555555555552, 197.62962962962968)) + end + + amchitka_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-1229.6296296296293, 246.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1224.8888888888887, 245.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1223.9999999999998, 249.18518518518522)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1218.6666666666665, 248)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1204.1481481481478, 252.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1203.5555555555552, 256.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1199.7037037037035, 258.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1198.5185185185182, 256.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1196.1481481481478, 258.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1195.5555555555552, 262.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1190.5185185185182, 264.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1186.6666666666665, 271.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1178.3703703703702, 274.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1177.7777777777774, 278.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1173.037037037037, 282.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1168.2962962962961, 280.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1170.6666666666665, 284.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1165.9259259259256, 283.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1159.1111111111109, 282.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1159.1111111111109, 285.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1152.8888888888887, 288)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1155.2592592592591, 289.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1162.0740740740739, 290.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1162.9629629629626, 288.5925925925925)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1166.2222222222219, 290.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1170.9629629629626, 289.18518518518522)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1174.8148148148146, 292.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1178.6666666666665, 289.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1177.185185185185, 286.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1181.9259259259256, 285.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1182.5185185185182, 282.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1186.9629629629626, 280.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1191.4074074074072, 276.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1196.7407407407404, 268.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1199.4074074074072, 268.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1199.7037037037035, 265.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1202.0740740740739, 263.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1205.037037037037, 263.70370370370358)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1207.7037037037035, 260.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1210.9629629629626, 261.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1212.7407407407404, 258.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1215.7037037037035, 259.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1222.8148148148146, 257.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1228.4444444444441, 252.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1231.7037037037035, 253.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1231.4074074074072, 249.48148148148141)) + end + + kiska_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-1323.8518518518517, 176)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1321.7777777777774, 178.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1317.9259259259256, 178.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1315.8518518518517, 183.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1317.6296296296293, 186.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1319.9999999999998, 186.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1319.7037037037035, 190.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1323.8518518518517, 195.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1327.4074074074072, 195.8518518518519)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1325.333333333333, 198.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1328.5925925925924, 199.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1329.4814814814813, 201.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1326.2222222222219, 203.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1322.3703703703702, 202.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1319.9999999999998, 199.70370370370358)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1318.8148148148146, 202.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1314.0740740740739, 203.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1317.9259259259256, 205.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1321.7777777777774, 204.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1322.6666666666665, 207.70370370370358)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1327.9999999999998, 208.5925925925925)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1330.9629629629626, 207.70370370370358)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1331.5555555555552, 205.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1333.9259259259256, 205.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1334.8148148148146, 206.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1334.2222222222219, 210.96296296296293)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1337.4814814814813, 208)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1336.8888888888887, 204.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1339.2592592592591, 206.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1343.1111111111109, 208)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1346.0740740740739, 211.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1347.8518518518517, 213.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1347.5555555555552, 217.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1348.4444444444441, 221.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1351.4074074074072, 222.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1352.2962962962961, 219.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1356.4444444444441, 214.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1359.1111111111109, 215.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1359.7037037037035, 211.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1352.8888888888887, 207.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1348.1481481481478, 205.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1347.5555555555552, 200.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1339.5555555555552, 198.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1334.5185185185182, 197.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1332.7407407407404, 188.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1329.4814814814813, 184.59259259259255)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1328.8888888888887, 180.74074074074076)) + end + + agattu_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-1687.9999999999995, 119.7037037037037)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1685.0370370370367, 122.07407407407408)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1680.5925925925922, 119.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1670.8148148148146, 120.59259259259261)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1672.5925925925922, 123.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1679.1111111111109, 127.7037037037037)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1677.333333333333, 133.92592592592598)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1675.5555555555552, 144)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1680.5925925925922, 142.51851851851859)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1683.8518518518515, 144.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1685.0370370370367, 141.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1687.7037037037035, 140.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1687.1111111111109, 137.18518518518522)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1688.8888888888885, 139.2592592592593)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1689.7777777777774, 137.18518518518522)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1691.2592592592589, 137.48148148148147)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1694.2222222222219, 139.2592592592593)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1696.8888888888885, 140.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1700.7407407407404, 140.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1705.1851851851848, 138.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1706.0740740740737, 136.59259259259261)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1711.4074074074072, 136.88888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1709.0370370370367, 131.8518518518519)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1704.5925925925922, 130.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1702.5185185185182, 127.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1700.1481481481478, 130.07407407407408)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1696.8888888888885, 129.77777777777777)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1693.6296296296293, 126.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1693.0370370370367, 124.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1689.4814814814811, 125.03703703703707)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1689.1851851851848, 122.07407407407408)) + end + +invariant + + is_valid_sea_area: attached target_imp implies sea_area = game.aleutian_islands + +end diff --git a/jj_vitp/Interface/widgets/sea_area_widgets/bay_of_bengal_widget.e b/jj_vitp/Interface/widgets/sea_area_widgets/bay_of_bengal_widget.e new file mode 100644 index 0000000..bfcc3c8 --- /dev/null +++ b/jj_vitp/Interface/widgets/sea_area_widgets/bay_of_bengal_widget.e @@ -0,0 +1,82 @@ +note + description: "[ + Widget that represents the Bay of Bengal in VITP + ]" + author: "Jimmy J. Johnson" + +class + BAY_OF_BENGAL_WIDGET + +inherit + + SEA_AREA_WIDGET + redefine + position_widgets, + build_ocean +-- build_bounding_figure + end + +create + make + +feature {NONE} -- Initialization + + position_widgets + -- Move Current and contained widgets to correct + -- location and set their their sizes + do + Precursor {SEA_AREA_WIDGET} +-- translate_widget (text_widget, -10, 150) +-- text_widget.set_x_y (70, 150) +-- translate_widget (dot, -20, 80) +-- name_mt.set_point_position (15, 345) + text_group.set_x_y (15, 345) + flag.set_point_position (20, 320) + dot.set_point_position (20, 310) + end + + build_ocean + -- Create the polygon representing the `ocean' here + -- Redefined to add the points + do + Precursor {SEA_AREA_WIDGET} + -- Start at top left of board, going to point north of Saigon + ocean.extend_point (create {EV_COORDINATE}.make (0, 0)) + ocean.extend_point (create {EV_COORDINATE}.make (98, 190)) -- measured to west point of Siagon + ocean.extend_point (create {EV_COORDINATE}.make (72, 244)) -- estimated + ocean.extend_point (create {EV_COORDINATE}.make (40, 257)) + ocean.extend_point (create {EV_COORDINATE}.make (83, 355)) + ocean.extend_point (create {EV_COORDINATE}.make (0, 392)) + end + +-- build_bounding_figure +-- -- Add points to the `jj_bounding_figure'. +-- -- Redefined to use the tile edges as the bounding area +-- do +-- if has (jj_bounding_figure) then +-- prune_all (jj_bounding_figure) +-- end +-- create jj_bounding_figure +-- extend (jj_bounding_figure) +---- bounding_figure.extend_point (ocean.point_array.item (0)) +---- bounding_figure.extend_point (create {EV_COORDINATE}.make (0, 167)) +---- bounding_figure.extend_point (create {EV_COORDINATE}.make (20, 155)) +---- bounding_figure.extend_point (create {EV_COORDINATE}.make (50, 152)) +---- bounding_figure.extend_point (create {EV_COORDINATE}.make (60, 190)) +---- bounding_figure.extend_point (create {EV_COORDINATE}.make (77, 195)) +-- jj_bounding_figure.extend_point (ocean.point_array.item (1)) +-- jj_bounding_figure.extend_point (ocean.point_array.item (2)) +-- jj_bounding_figure.extend_point (ocean.point_array.item (3)) +-- jj_bounding_figure.extend_point (ocean.point_array.item (4)) +-- jj_bounding_figure.extend_point (ocean.point_array.item (5)) +-- jj_bounding_figure.extend_point (ocean.point_array.item (0)) +-- jj_bounding_figure.enable_closed +-- jj_bounding_figure.set_line_width (2) +---- show_bounding_figure +-- end + +invariant + + is_valid_sea_area: attached target_imp implies sea_area = game.bay_of_bengal + +end diff --git a/jj_vitp/Interface/widgets/sea_area_widgets/central_pacific_ocean_widget.e b/jj_vitp/Interface/widgets/sea_area_widgets/central_pacific_ocean_widget.e new file mode 100644 index 0000000..0383787 --- /dev/null +++ b/jj_vitp/Interface/widgets/sea_area_widgets/central_pacific_ocean_widget.e @@ -0,0 +1,79 @@ +note + description: "[ + Widget that represents this VITP sea area + ]" + author: "Jimmy J. Johnson" + +class + CENTRAL_PACIFIC_OCEAN_WIDGET + +inherit + + SEA_AREA_WIDGET + redefine + position_widgets, + build_ocean +-- build_bounding_figure + end + +create + make + +feature {NONE} -- Initialization + + position_widgets + -- Move Current and contained widgets to correct + -- location and set their their sizes + do + Precursor {SEA_AREA_WIDGET} + translate_widget (text_group, -30, 50) + translate_widget (dot, 20, 80) +-- flag.center_on_dot (dot) + flag.set_x_y (dot.x, dot.y) + translate_widget (flag, -10, -2) + translate_widget (dot, -20, 30) + translate_widget (Current, 526, 101) + end + + build_ocean + -- Create the polygon representing the `ocean' here + -- Redefined to add the points + do + Precursor {SEA_AREA_WIDGET} + -- start at northern most point + ocean.extend_point (create {EV_COORDINATE}.make (0, 0)) + ocean.extend_point (create {EV_COORDINATE}.make (79, 32)) + ocean.extend_point (create {EV_COORDINATE}.make (112, 136)) + ocean.extend_point (create {EV_COORDINATE}.make (74, 200)) + ocean.extend_point (create {EV_COORDINATE}.make (-41, 146)) -- x may be off + ocean.extend_point (create {EV_COORDINATE}.make (-77, 81)) + end + +-- build_bounding_figure +-- -- Add points to the `jj_bounding_figure'. +-- -- Redefined to use the tile edges as the bounding area +-- do +-- if has (jj_bounding_figure) then +-- prune_all (jj_bounding_figure) +-- end +-- create jj_bounding_figure +-- extend (jj_bounding_figure) +-- jj_bounding_figure.extend_point (create {EV_COORDINATE}.make (0, 0)) +-- jj_bounding_figure.extend_point (create {EV_COORDINATE}.make (79, 32)) +-- jj_bounding_figure.extend_point (create {EV_COORDINATE}.make (112, 136)) +-- jj_bounding_figure.extend_point (create {EV_COORDINATE}.make (74, 200)) +-- jj_bounding_figure.extend_point (create {EV_COORDINATE}.make (-41, 146)) -- x may be off +-- jj_bounding_figure.extend_point (create {EV_COORDINATE}.make (-77, 81)) +-- jj_bounding_figure.enable_closed +-- -- Make adjustments +-- jj_bounding_figure.set_line_width (2) +-- translate_widget (jj_bounding_figure, 526, 101) +---- show_bounding_figure +-- end + +invariant + + is_valid_sea_area: attached target_imp implies sea_area = game.central_pacific_ocean + has_no_land: land.is_empty + +end diff --git a/jj_vitp/Interface/widgets/sea_area_widgets/coral_sea_widget.e b/jj_vitp/Interface/widgets/sea_area_widgets/coral_sea_widget.e new file mode 100644 index 0000000..a6dd347 --- /dev/null +++ b/jj_vitp/Interface/widgets/sea_area_widgets/coral_sea_widget.e @@ -0,0 +1,148 @@ +note + description: "[ + Widget that represents this VITP sea area + ]" + author: "Jimmy J. Johnson" + +class + CORAL_SEA_WIDGET + +inherit + + SEA_AREA_WIDGET + redefine + create_interface_objects, + position_widgets, + build_land, + build_ocean +-- build_bounding_figure + end + +create + make + +feature {NONE} -- Initialization + + create_interface_objects + -- Initialize attributes + do + Precursor {SEA_AREA_WIDGET} + new_caledonia := new_caledonia_imp + end + + position_widgets + -- Move Current and contained widgets to correct + -- location and set their their sizes + do + Precursor {SEA_AREA_WIDGET} + translate_widget (Current, 284, 554) + translate_widget (dot, 100, -45) + translate_widget (text_group, 85, -75) + translate_widget (land, 5, 0) +-- flag.center_on_dot (dot) + flag.set_x_y (dot.x, dot.y) + end + + build_land + -- Add `land' to Current + do + Precursor {SEA_AREA_WIDGET} + -- This land was used to help position the + -- brown land in the {SOLOMANS_WIDGET} or + -- [or SOUTH_PACIFIC_OCEAN_WIDGET if fixed]. +-- land.extend (new_caledonia) + end + + build_ocean + -- Create the polygon representing the `ocean' here + -- Redefined to add the points + do + Precursor {SEA_AREA_WIDGET} + + -- start at bottom edge of board at west end measuring from bottom + -- The first two points are hidden by Australia, but should still be + -- close to those points, 3mm away. + ocean.extend_point (create {EV_COORDINATE}.make (0, 0)) + -- Under Lae + ocean.extend_point (create {EV_COORDINATE}.make (28, -165)) -- estimated + ocean.extend_point (create {EV_COORDINATE}.make (66, -123)) -- + -- Under Guadalcanale + ocean.extend_point (create {EV_COORDINATE}.make (114, -100)) -- estimated + -- x is 39 left of bottom (measured from right) + ocean.extend_point (create {EV_COORDINATE}.make (123, -109)) -- estimate + -- x is 5 more than bottom (measured from right) + ocean.extend_point (create {EV_COORDINATE}.make (167, -112)) + -- 704, board width, - 258 measured from bottom/right = 446 + -- 446 - (281, Indian Ocean point, + 3) = 162 + ocean.extend_point (create {EV_COORDINATE}.make (162, 1)) --0)) + end + +-- build_bounding_figure +-- -- Add points to the `jj_bounding_figure'. +-- -- Redefined to use the tile edges as the bounding area +-- local +-- t: EV_MODEL_TRANSFORMATION +-- do +-- if has (jj_bounding_figure) then +-- prune_all (jj_bounding_figure) +-- end +-- create jj_bounding_figure +-- extend (jj_bounding_figure) +-- jj_bounding_figure.extend_point (create {EV_COORDINATE}.make (60, 0)) +-- jj_bounding_figure.extend_point (create {EV_COORDINATE}.make (65, -40)) +-- jj_bounding_figure.extend_point (create {EV_COORDINATE}.make (30, -90)) +-- jj_bounding_figure.extend_point (create {EV_COORDINATE}.make (23, -140)) +-- jj_bounding_figure.extend_point (create {EV_COORDINATE}.make (120, -80)) +-- jj_bounding_figure.extend_point (create {EV_COORDINATE}.make (167, -112)) +-- jj_bounding_figure.extend_point (create {EV_COORDINATE}.make (162, 0)) +-- jj_bounding_figure.enable_closed +-- jj_bounding_figure.set_line_width (2) +-- -- Make adjustments +-- translate_widget (jj_bounding_figure, 284, 553) +---- show_bounding_figure +-- end + +feature -- Access + + new_caledonia: EV_MODEL_POLYGON + -- Island (brown on the board) south-west of New Heberdies + +feature {NONE} -- Implementation + + new_caledonia_imp: EV_MODEL_POLYGON + -- Create the polygon island north of Australia + + local + t: EV_MODEL_TRANSFORMATION + do + create Result + -- Start at north-west tip + Result.extend_point (create {EV_COORDINATE}.make_precise (0, 0)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1, 0.5)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1.5, 1)) + Result.extend_point (create {EV_COORDINATE}.make_precise (5, 3)) + Result.extend_point (create {EV_COORDINATE}.make_precise (5.5, 5)) + Result.extend_point (create {EV_COORDINATE}.make_precise (7, 5.5)) + Result.extend_point (create {EV_COORDINATE}.make_precise (9, 9)) + Result.extend_point (create {EV_COORDINATE}.make_precise (12.5, 11)) + -- South-east tip + Result.extend_point (create {EV_COORDINATE}.make_precise (17, 19)) + Result.extend_point (create {EV_COORDINATE}.make_precise (16, 19.5)) + Result.extend_point (create {EV_COORDINATE}.make_precise (14, 19)) + Result.extend_point (create {EV_COORDINATE}.make_precise (10, 16)) + Result.extend_point (create {EV_COORDINATE}.make_precise (7, 15)) + Result.extend_point (create {EV_COORDINATE}.make_precise (6, 16)) + Result.extend_point (create {EV_COORDINATE}.make_precise (6, 15)) + Result.extend_point (create {EV_COORDINATE}.make_precise (2, 8)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1, 3)) + Result.extend_point (create {EV_COORDINATE}.make_precise (0, 2)) + create t.make_zero + t.translate (130, -48) -- 553 is the board height (not including black boarder) + Result.transform (t) + end + +invariant + + is_valid_sea_area: attached target_imp implies sea_area = game.coral_sea + +end diff --git a/jj_vitp/Interface/widgets/sea_area_widgets/hawaiian_islands_widget.e b/jj_vitp/Interface/widgets/sea_area_widgets/hawaiian_islands_widget.e new file mode 100644 index 0000000..1c9cbed --- /dev/null +++ b/jj_vitp/Interface/widgets/sea_area_widgets/hawaiian_islands_widget.e @@ -0,0 +1,77 @@ +note + description: "[ + Widget that represents this VITP sea area + ]" + author: "Jimmy J. Johnson" + +class + HAWAIIAN_ISLANDS_WIDGET + +inherit + + SEA_AREA_WIDGET + redefine + position_widgets, + build_ocean +-- build_bounding_figure + end + +create + make + +feature {NONE} -- Initialization + + position_widgets + -- Move Current and contained widgets to correct + -- location and set their their sizes + do + Precursor {SEA_AREA_WIDGET} + translate_widget (name_mt, -75, -85) + translate_widget (dot, -45, -60) +-- flag.center_on_dot (dot) +-- flag.set_x_y (dot.x, dot.y) + flag.set_x_y (-45, -60) + translate_widget (dot, -60, -40) + translate_widget (Current, 704, 553 - 72) + end + + build_ocean + -- Create the polygon representing the `ocean' here + -- Redefined to add the points + do + Precursor {SEA_AREA_WIDGET} + -- start at bottom south-west corner + ocean.extend_point (create {EV_COORDINATE}.make (0, 0)) + ocean.extend_point (create {EV_COORDINATE}.make (-150, -95)) + ocean.extend_point (create {EV_COORDINATE}.make (-62, -244)) + ocean.extend_point (create {EV_COORDINATE}.make (0, -242)) + end + +-- build_bounding_figure +-- -- Add points to the `jj_bounding_figure'. +-- -- Redefined to use the tile edges as the bounding area +-- local +-- t: EV_MODEL_TRANSFORMATION +-- do +-- if has (jj_bounding_figure) then +-- prune_all (jj_bounding_figure) +-- end +-- create jj_bounding_figure +-- extend (jj_bounding_figure) +-- jj_bounding_figure.extend_point (create {EV_COORDINATE}.make (0, 0)) +-- jj_bounding_figure.extend_point (create {EV_COORDINATE}.make (-150, -95)) +-- jj_bounding_figure.extend_point (create {EV_COORDINATE}.make (-62, -244)) +-- jj_bounding_figure.extend_point (create {EV_COORDINATE}.make (0, -242)) +-- jj_bounding_figure.enable_closed +-- -- Make adjustments +-- translate_widget (jj_bounding_figure, 704, 553 - 72) +-- jj_bounding_figure.set_line_width (2) +---- show_bounding_figure +-- end + +invariant + + is_valid_sea_area: attached target_imp implies sea_area = game.hawaiian_islands + no_land: land.is_empty + +end diff --git a/jj_vitp/Interface/widgets/sea_area_widgets/indian_ocean_widget.e b/jj_vitp/Interface/widgets/sea_area_widgets/indian_ocean_widget.e new file mode 100644 index 0000000..2f305d1 --- /dev/null +++ b/jj_vitp/Interface/widgets/sea_area_widgets/indian_ocean_widget.e @@ -0,0 +1,342 @@ +note + description: "[ + Widget that represents the Indian Ocean in VITP + ]" + author: "Jimmy J. Johnson" + +class + INDIAN_OCEAN_WIDGET + +inherit + + SEA_AREA_WIDGET + redefine + create_interface_objects, + position_widgets, + build_land, + build_ocean +-- build_bounding_figure + end + +create + make + +feature {NONE} -- Initialization + + create_interface_objects + -- Initialize attributes + do + Precursor {SEA_AREA_WIDGET} + yamdena := yamdena_imp + pulau := pulau_imp + end + + position_widgets + -- Move Current and contained widgets to correct + -- location and set their their sizes + do + Precursor {SEA_AREA_WIDGET} + -- make adjustments + scale_widget (land, 0.04) + rotate_widget (land, 13.0) +-- translate_widget (Current, 0, 553) +-- translate_widget (land, 10, -20) +-- translate_widget (text_widget, -80, -20) +-- translate_widget (dot, -75, 50) +-- flag.center_on_dot (dot) + land.set_point_position (240, -165) + dot.set_point_position (80, -100) + set_point_position (0, 553) + flag.set_point_position (60, 410) + name_mt.set_point_position (30, 440) + end + + build_land + -- Build any land in Current + do + Precursor {SEA_AREA_WIDGET} + land.extend (yamdena) + land.extend (Pulau) + end + + build_ocean + -- Create the polygon representing the `ocean' here + -- Redefined to add the points + do + Precursor {SEA_AREA_WIDGET} + -- start at bottom-left edge of board, measuring from bottom + ocean.extend_point (create {EV_COORDINATE}.make (0, 0)) + ocean.extend_point (create {EV_COORDINATE}.make (0, -158)) + ocean.extend_point (create {EV_COORDINATE}.make (84, -195)) + ocean.extend_point (create {EV_COORDINATE}.make (195, -151)) + ocean.extend_point (create {EV_COORDINATE}.make (278, -185)) -- estimated + ocean.extend_point (create {EV_COORDINATE}.make (308, -161)) + ocean.extend_point (create {EV_COORDINATE}.make (281, 0)) + end + +-- build_bounding_figure +-- -- Add points to the `jj_bounding_figure'. +-- -- Redefined to use the tile edges as the bounding area +-- local +-- t: EV_MODEL_TRANSFORMATION +-- do +-- if has (jj_bounding_figure) then +-- prune_all (jj_bounding_figure) +-- end +-- create jj_bounding_figure +-- extend (jj_bounding_figure) +-- jj_bounding_figure.extend_point (create {EV_COORDINATE}.make (0, 0)) +-- jj_bounding_figure.extend_point (create {EV_COORDINATE}.make (0, -158)) +-- jj_bounding_figure.extend_point (create {EV_COORDINATE}.make (84, -195)) +-- jj_bounding_figure.extend_point (create {EV_COORDINATE}.make (195, -151)) +---- bounding_figure.extend_point (create {EV_COORDINATE}.make (278, -185)) +---- bounding_figure.extend_point (create {EV_COORDINATE}.make (308, -161)) +---- bounding_figure.extend_point (create {EV_COORDINATE}.make (281, 0)) +-- jj_bounding_figure.extend_point (create {EV_COORDINATE}.make (130, -90)) +-- jj_bounding_figure.extend_point (create {EV_COORDINATE}.make (130, 0)) +-- jj_bounding_figure.enable_closed +-- jj_bounding_figure.set_line_width (2) +-- create t.make_zero +-- t.translate (0, 553) -- 553 is the board height (not including black boarder) +-- jj_bounding_figure.transform (t) +---- show_bounding_figure +-- end + +feature -- Access + + yamdena: EV_MODEL_POLYGON + pulau: EV_MODEL_POLYGON + +feature {NONE} -- Implementatio + + yamdena_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (0, 0)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1, -11)) + Result.extend_point (create {EV_COORDINATE}.make_precise (8, -14)) + Result.extend_point (create {EV_COORDINATE}.make_precise (14, -18)) + Result.extend_point (create {EV_COORDINATE}.make_precise (25, -18)) + Result.extend_point (create {EV_COORDINATE}.make_precise (27, -12)) + Result.extend_point (create {EV_COORDINATE}.make_precise (39, -19)) + Result.extend_point (create {EV_COORDINATE}.make_precise (51, -19)) + Result.extend_point (create {EV_COORDINATE}.make_precise (68, -21)) + Result.extend_point (create {EV_COORDINATE}.make_precise (87, -43)) + Result.extend_point (create {EV_COORDINATE}.make_precise (83, -32)) + Result.extend_point (create {EV_COORDINATE}.make_precise (74, -19)) + Result.extend_point (create {EV_COORDINATE}.make_precise (83, -8)) + Result.extend_point (create {EV_COORDINATE}.make_precise (83, 3)) + Result.extend_point (create {EV_COORDINATE}.make_precise (69, 3)) + Result.extend_point (create {EV_COORDINATE}.make_precise (68, -5)) + Result.extend_point (create {EV_COORDINATE}.make_precise (39, -8)) + Result.extend_point (create {EV_COORDINATE}.make_precise (39, -1)) + Result.extend_point (create {EV_COORDINATE}.make_precise (23, 3)) + Result.extend_point (create {EV_COORDINATE}.make_precise (21, 11)) + Result.extend_point (create {EV_COORDINATE}.make_precise (27, 32)) + Result.extend_point (create {EV_COORDINATE}.make_precise (31, 36)) + Result.extend_point (create {EV_COORDINATE}.make_precise (30, 41)) + Result.extend_point (create {EV_COORDINATE}.make_precise (24, 61)) + Result.extend_point (create {EV_COORDINATE}.make_precise (18, 80)) + Result.extend_point (create {EV_COORDINATE}.make_precise (3, 95)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-6, 95)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-6, 103)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-15, 110)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-27, 119)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-26, 127)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-31, 132)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-31, 143)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-43, 153)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-40, 137)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-41, 130)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-47, 138)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-53, 148)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-60, 144)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-67, 144)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-74, 144)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-72, 128)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-78, 125)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-79, 118)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-76, 112)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-72, 114)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-68, 109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-72, 105)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-71, 99)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-79, 95)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-75, 86)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-82, 91)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-84, 86)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-89, 87)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-88, 94)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-100, 96)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-100, 86)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-75, 78)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-71, 89)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-64, 93)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-54, 93)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-60, 89)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-67, 82)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-63, 76)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-62, 70)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-56, 62)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-53, 50)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-40, 40)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-36, 33)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-32, 42)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-28, 35)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-27, 29)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-24, 21)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-14, 22)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-15, 17)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-11, 8)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-12, 4)) + end + + pulau_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (537, -323)) + Result.extend_point (create {EV_COORDINATE}.make_precise (547, -339)) + Result.extend_point (create {EV_COORDINATE}.make_precise (558, -345)) + Result.extend_point (create {EV_COORDINATE}.make_precise (563, -337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (570, -328)) + Result.extend_point (create {EV_COORDINATE}.make_precise (582, -311)) + Result.extend_point (create {EV_COORDINATE}.make_precise (577, -307)) + Result.extend_point (create {EV_COORDINATE}.make_precise (581, -294)) + Result.extend_point (create {EV_COORDINATE}.make_precise (586, -291)) + Result.extend_point (create {EV_COORDINATE}.make_precise (591, -280)) + Result.extend_point (create {EV_COORDINATE}.make_precise (585, -279)) + Result.extend_point (create {EV_COORDINATE}.make_precise (587, -268)) + Result.extend_point (create {EV_COORDINATE}.make_precise (592, -257)) + Result.extend_point (create {EV_COORDINATE}.make_precise (582, -257)) + Result.extend_point (create {EV_COORDINATE}.make_precise (593, -249)) + Result.extend_point (create {EV_COORDINATE}.make_precise (594, -241)) + Result.extend_point (create {EV_COORDINATE}.make_precise (588, -240)) + Result.extend_point (create {EV_COORDINATE}.make_precise (583, -241)) + Result.extend_point (create {EV_COORDINATE}.make_precise (589, -234)) + Result.extend_point (create {EV_COORDINATE}.make_precise (589, -227)) + Result.extend_point (create {EV_COORDINATE}.make_precise (585, -223)) + Result.extend_point (create {EV_COORDINATE}.make_precise (585, -216)) + Result.extend_point (create {EV_COORDINATE}.make_precise (590, -209)) + Result.extend_point (create {EV_COORDINATE}.make_precise (596, -206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (590, -197)) + Result.extend_point (create {EV_COORDINATE}.make_precise (592, -191)) + Result.extend_point (create {EV_COORDINATE}.make_precise (585, -168)) + Result.extend_point (create {EV_COORDINATE}.make_precise (579, -160)) + Result.extend_point (create {EV_COORDINATE}.make_precise (567, -157)) + Result.extend_point (create {EV_COORDINATE}.make_precise (564, -152)) + Result.extend_point (create {EV_COORDINATE}.make_precise (564, -141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (558, -133)) + Result.extend_point (create {EV_COORDINATE}.make_precise (567, -138)) + Result.extend_point (create {EV_COORDINATE}.make_precise (577, -141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (587, -136)) + Result.extend_point (create {EV_COORDINATE}.make_precise (592, -130)) + Result.extend_point (create {EV_COORDINATE}.make_precise (597, -138)) + Result.extend_point (create {EV_COORDINATE}.make_precise (597, -148)) + Result.extend_point (create {EV_COORDINATE}.make_precise (594, -157)) + Result.extend_point (create {EV_COORDINATE}.make_precise (601, -167)) + Result.extend_point (create {EV_COORDINATE}.make_precise (607, -171)) + Result.extend_point (create {EV_COORDINATE}.make_precise (614, -169)) + Result.extend_point (create {EV_COORDINATE}.make_precise (617, -159)) + Result.extend_point (create {EV_COORDINATE}.make_precise (610, -150)) + Result.extend_point (create {EV_COORDINATE}.make_precise (609, -139)) + Result.extend_point (create {EV_COORDINATE}.make_precise (604, -135)) + Result.extend_point (create {EV_COORDINATE}.make_precise (599, -122)) + Result.extend_point (create {EV_COORDINATE}.make_precise (592, -123)) + Result.extend_point (create {EV_COORDINATE}.make_precise (588, -118)) + Result.extend_point (create {EV_COORDINATE}.make_precise (589, -111)) + Result.extend_point (create {EV_COORDINATE}.make_precise (597, -105)) + Result.extend_point (create {EV_COORDINATE}.make_precise (589, -103)) + Result.extend_point (create {EV_COORDINATE}.make_precise (586, -92)) + Result.extend_point (create {EV_COORDINATE}.make_precise (575, -79)) + Result.extend_point (create {EV_COORDINATE}.make_precise (569, -82)) + Result.extend_point (create {EV_COORDINATE}.make_precise (566, -84)) + Result.extend_point (create {EV_COORDINATE}.make_precise (568, -90)) + Result.extend_point (create {EV_COORDINATE}.make_precise (566, -93)) + Result.extend_point (create {EV_COORDINATE}.make_precise (573, -95)) + Result.extend_point (create {EV_COORDINATE}.make_precise (574, -103)) + Result.extend_point (create {EV_COORDINATE}.make_precise (577, -115)) + Result.extend_point (create {EV_COORDINATE}.make_precise (581, -117)) + Result.extend_point (create {EV_COORDINATE}.make_precise (575, -118)) + Result.extend_point (create {EV_COORDINATE}.make_precise (572, -127)) + Result.extend_point (create {EV_COORDINATE}.make_precise (567, -131)) + Result.extend_point (create {EV_COORDINATE}.make_precise (556, -121)) + Result.extend_point (create {EV_COORDINATE}.make_precise (545, -125)) + Result.extend_point (create {EV_COORDINATE}.make_precise (539, -123)) + Result.extend_point (create {EV_COORDINATE}.make_precise (542, -120)) + Result.extend_point (create {EV_COORDINATE}.make_precise (541, -114)) + Result.extend_point (create {EV_COORDINATE}.make_precise (546, -117)) + Result.extend_point (create {EV_COORDINATE}.make_precise (549, -108)) + Result.extend_point (create {EV_COORDINATE}.make_precise (545, -105)) + Result.extend_point (create {EV_COORDINATE}.make_precise (537, -99)) + Result.extend_point (create {EV_COORDINATE}.make_precise (532, -101)) + Result.extend_point (create {EV_COORDINATE}.make_precise (535, -94)) + Result.extend_point (create {EV_COORDINATE}.make_precise (527, -87)) + Result.extend_point (create {EV_COORDINATE}.make_precise (526, -83)) + Result.extend_point (create {EV_COORDINATE}.make_precise (518, -77)) + Result.extend_point (create {EV_COORDINATE}.make_precise (522, -73)) + Result.extend_point (create {EV_COORDINATE}.make_precise (510, -65)) + Result.extend_point (create {EV_COORDINATE}.make_precise (490, -53)) + Result.extend_point (create {EV_COORDINATE}.make_precise (490, -47)) + Result.extend_point (create {EV_COORDINATE}.make_precise (485, -52)) + Result.extend_point (create {EV_COORDINATE}.make_precise (478, -66)) + Result.extend_point (create {EV_COORDINATE}.make_precise (470, -65)) + Result.extend_point (create {EV_COORDINATE}.make_precise (463, -70)) + Result.extend_point (create {EV_COORDINATE}.make_precise (460, -80)) + Result.extend_point (create {EV_COORDINATE}.make_precise (465, -92)) + Result.extend_point (create {EV_COORDINATE}.make_precise (469, -136)) + Result.extend_point (create {EV_COORDINATE}.make_precise (473, -144)) + Result.extend_point (create {EV_COORDINATE}.make_precise (472, -151)) + Result.extend_point (create {EV_COORDINATE}.make_precise (475, -164)) + Result.extend_point (create {EV_COORDINATE}.make_precise (474, -177)) + Result.extend_point (create {EV_COORDINATE}.make_precise (468, -189)) + Result.extend_point (create {EV_COORDINATE}.make_precise (469, -194)) + Result.extend_point (create {EV_COORDINATE}.make_precise (476, -191)) + Result.extend_point (create {EV_COORDINATE}.make_precise (488, -196)) + Result.extend_point (create {EV_COORDINATE}.make_precise (486, -199)) + Result.extend_point (create {EV_COORDINATE}.make_precise (479, -196)) + Result.extend_point (create {EV_COORDINATE}.make_precise (473, -204)) + Result.extend_point (create {EV_COORDINATE}.make_precise (474, -209)) + Result.extend_point (create {EV_COORDINATE}.make_precise (474, -215)) + Result.extend_point (create {EV_COORDINATE}.make_precise (481, -223)) + Result.extend_point (create {EV_COORDINATE}.make_precise (485, -215)) + Result.extend_point (create {EV_COORDINATE}.make_precise (490, -218)) + Result.extend_point (create {EV_COORDINATE}.make_precise (495, -212)) + Result.extend_point (create {EV_COORDINATE}.make_precise (505, -217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (509, -230)) + Result.extend_point (create {EV_COORDINATE}.make_precise (505, -236)) + Result.extend_point (create {EV_COORDINATE}.make_precise (503, -239)) + Result.extend_point (create {EV_COORDINATE}.make_precise (511, -245)) + Result.extend_point (create {EV_COORDINATE}.make_precise (508, -250)) + Result.extend_point (create {EV_COORDINATE}.make_precise (516, -251)) + Result.extend_point (create {EV_COORDINATE}.make_precise (517, -256)) + Result.extend_point (create {EV_COORDINATE}.make_precise (521, -260)) + Result.extend_point (create {EV_COORDINATE}.make_precise (519, -263)) + Result.extend_point (create {EV_COORDINATE}.make_precise (512, -260)) + Result.extend_point (create {EV_COORDINATE}.make_precise (509, -266)) + Result.extend_point (create {EV_COORDINATE}.make_precise (501, -265)) + Result.extend_point (create {EV_COORDINATE}.make_precise (497, -258)) + Result.extend_point (create {EV_COORDINATE}.make_precise (494, -253)) + Result.extend_point (create {EV_COORDINATE}.make_precise (489, -252)) + Result.extend_point (create {EV_COORDINATE}.make_precise (488, -266)) + Result.extend_point (create {EV_COORDINATE}.make_precise (496, -264)) + Result.extend_point (create {EV_COORDINATE}.make_precise (498, -268)) + Result.extend_point (create {EV_COORDINATE}.make_precise (489, -276)) + Result.extend_point (create {EV_COORDINATE}.make_precise (497, -284)) + Result.extend_point (create {EV_COORDINATE}.make_precise (509, -278)) + Result.extend_point (create {EV_COORDINATE}.make_precise (514, -274)) + Result.extend_point (create {EV_COORDINATE}.make_precise (515, -282)) + Result.extend_point (create {EV_COORDINATE}.make_precise (527, -295)) + Result.extend_point (create {EV_COORDINATE}.make_precise (530, -307)) + Result.extend_point (create {EV_COORDINATE}.make_precise (540, -302)) + Result.extend_point (create {EV_COORDINATE}.make_precise (543, -309)) + end + +invariant + + is_valid_sea_area: attached target_imp implies sea_area = game.indian_ocean + +end diff --git a/jj_vitp/Interface/widgets/sea_area_widgets/indonesia_widget.e b/jj_vitp/Interface/widgets/sea_area_widgets/indonesia_widget.e new file mode 100644 index 0000000..a9b1a41 --- /dev/null +++ b/jj_vitp/Interface/widgets/sea_area_widgets/indonesia_widget.e @@ -0,0 +1,1959 @@ +note + description: "[ + Widget that represents this VITP sea area + ]" + author: "Jimmy J. Johnson" + +class + INDONESIA_WIDGET + +inherit + + SEA_AREA_WIDGET + redefine + create_interface_objects, + position_widgets, + build_land, + build_ocean +-- build_bounding_figure + end + +create + make + +feature {NONE} -- Initialization + + create_interface_objects + -- Initialize attributes + do + Precursor {SEA_AREA_WIDGET} + sumatra := sumatra_imp + kalimantan := kalimantan_imp + java := java_imp + sulawesi := sulawesi_imp + maluka_utara := maluka_utara_imp + maluku := maluku_imp + timor := timor_imp + wetar := wetar_imp + not_named := not_named_imp + nusa_tenggara_timor := nusa_tenggara_timor_imp + sumba := sumba_imp + nusa_tenggara_barat := nusa_tenggara_barat_imp + praya_barat :=praya_barat_imp + puerto_princesa := puerto_princesa_imp + end + + position_widgets + -- Move Current and contained widgets to correct + -- location and set their their sizes + do + Precursor {SEA_AREA_WIDGET} + rotate_widget (land, 15.0) + scale_widget (land, 0.13) +-- translate_widget (land, 105, 55) +-- translate_widget (text_widget, 80, 0) +-- translate_widget (flag, 0, -80) +-- translate_widget (Current, 44, 259) + land.set_point_position (8, 0) + name_mt.set_point_position (80, 0) + dot.set_point_position (100, 30) +-- flag.center_on_dot (dot) + flag.set_x_y (dot.x, dot.y) + set_point_position (44, 259) + translate_widget (dot, 0, 30) + dot.set_foreground_color (Cyan) + end + + build_land + -- Add widgets to Current + do + Precursor {SEA_AREA_WIDGET} + -- Initialize attributes + land.extend (sumatra) + land.extend (kalimantan) + land.extend (java) + land.extend (sulawesi) + land.extend (maluka_utara) + land.extend (maluku) + land.extend (timor) + land.extend (wetar) + land.extend (not_named) + land.extend (nusa_tenggara_timor) + land.extend (sumba) + land.extend (nusa_tenggara_barat) + land.extend (praya_barat) + land.extend (puerto_princesa) + end + + build_ocean + -- Create the polygon representing the `ocean' here + -- Redefined to add the points + do + Precursor {SEA_AREA_WIDGET} + -- start at west-most point west of Singapore + ocean.extend_point (create {EV_COORDINATE}.make (0, 0)) + ocean.extend_point (create {EV_COORDINATE}.make (30, -13)) + ocean.extend_point (create {EV_COORDINATE}.make (75, -104)) -- under Asia + ocean.extend_point (create {EV_COORDINATE}.make (156, -81)) + ocean.extend_point (create {EV_COORDINATE}.make (178, -58)) + ocean.extend_point (create {EV_COORDINATE}.make (169, -8)) -- under Philippines + ocean.extend_point (create {EV_COORDINATE}.make (172, 20)) + ocean.extend_point (create {EV_COORDINATE}.make (244, 102)) + ocean.extend_point (create {EV_COORDINATE}.make (151, 140)) -- x +/- 1 + ocean.extend_point (create {EV_COORDINATE}.make (42, 96)) + end + +-- build_bounding_figure +-- -- Add points to the `jj_bounding_figure'. +-- -- Redefined to use the ocean edges as the bounding area +-- local +-- t: EV_MODEL_TRANSFORMATION +-- do +-- if has (jj_bounding_figure) then +-- prune_all (jj_bounding_figure) +-- end +-- create jj_bounding_figure +-- extend (jj_bounding_figure) +-- -- start at west-most point west of Singapore +-- jj_bounding_figure.extend_point (create {EV_COORDINATE}.make (0, 0)) +-- jj_bounding_figure.extend_point (create {EV_COORDINATE}.make (30, -13)) +-- jj_bounding_figure.extend_point (create {EV_COORDINATE}.make (75, -5)) -- south tip of Saigon +-- jj_bounding_figure.extend_point (create {EV_COORDINATE}.make (156, -81)) +-- jj_bounding_figure.extend_point (create {EV_COORDINATE}.make (178, -58)) +-- jj_bounding_figure.extend_point (create {EV_COORDINATE}.make (169, -8)) -- under Philippines +-- jj_bounding_figure.extend_point (create {EV_COORDINATE}.make (172, 20)) +-- jj_bounding_figure.extend_point (create {EV_COORDINATE}.make (244, 102)) +-- jj_bounding_figure.extend_point (create {EV_COORDINATE}.make (151, 140)) -- x +/- 1 +-- jj_bounding_figure.extend_point (create {EV_COORDINATE}.make (42, 96)) +-- jj_bounding_figure.enable_closed +-- -- make adjustments +-- translate_widget (jj_bounding_figure, 44, 259) +-- jj_bounding_figure.set_line_width (2) +---- show_bounding_figure +-- end + +feature -- Access + + sumatra: EV_MODEL_POLYGON + kalimantan: EV_MODEL_POLYGON + java: EV_MODEL_POLYGON + sulawesi: EV_MODEL_POLYGON + maluka_utara: EV_MODEL_POLYGON + maluku: EV_MODEL_POLYGON + timor: EV_MODEL_POLYGON + wetar: EV_MODEL_POLYGON + not_named: EV_MODEL_POLYGON + nusa_tenggara_timor: EV_MODEL_POLYGON + sumba: EV_MODEL_POLYGON + nusa_tenggara_barat: EV_MODEL_POLYGON + praya_barat: EV_MODEL_POLYGON + puerto_princesa: EV_MODEL_POLYGON + +feature {NONE} -- Implementation + + sumatra_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (0, 0)) + Result.extend_point (create {EV_COORDINATE}.make_precise (7.9999999999999787, -4.0000000000001137)) + Result.extend_point (create {EV_COORDINATE}.make_precise (17.999999999999957, -3.3333333333332575)) + Result.extend_point (create {EV_COORDINATE}.make_precise (29.999999999999986, 0.66666666666662877)) + Result.extend_point (create {EV_COORDINATE}.make_precise (30.666666666666622, 5.9999999999998863)) + Result.extend_point (create {EV_COORDINATE}.make_precise (36.666666666666636, 9.9999999999998863)) + Result.extend_point (create {EV_COORDINATE}.make_precise (37.333333333333279, 15.333333333333485)) + Result.extend_point (create {EV_COORDINATE}.make_precise (47.333333333333307, 12.666666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (59.333333333333272, 15.333333333333485)) + Result.extend_point (create {EV_COORDINATE}.make_precise (71.333333333333272, 13.333333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (87.333333333333229, 14.666666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (87.999999999999915, 19.333333333333371)) + Result.extend_point (create {EV_COORDINATE}.make_precise (104.66666666666659, 12.666666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (106.66666666666664, 18)) + Result.extend_point (create {EV_COORDINATE}.make_precise (110.66666666666656, 18.666666666666742)) + Result.extend_point (create {EV_COORDINATE}.make_precise (113.99999999999987, 23.999999999999773)) + Result.extend_point (create {EV_COORDINATE}.make_precise (117.99999999999982, 27.999999999999886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (121.9999999999999, 29.999999999999716)) + Result.extend_point (create {EV_COORDINATE}.make_precise (124.6666666666665, 35.999999999999659)) + Result.extend_point (create {EV_COORDINATE}.make_precise (126.66666666666656, 41.333333333333201)) + Result.extend_point (create {EV_COORDINATE}.make_precise (124.6666666666665, 45.333333333333201)) + Result.extend_point (create {EV_COORDINATE}.make_precise (129.99999999999994, 48.666666666666401)) + Result.extend_point (create {EV_COORDINATE}.make_precise (132.66666666666669, 47.333333333333258)) + Result.extend_point (create {EV_COORDINATE}.make_precise (139.33333333333331, 51.333333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (137.33333333333326, 56.666666666666742)) + Result.extend_point (create {EV_COORDINATE}.make_precise (136.66666666666657, 62.666666666666515)) + Result.extend_point (create {EV_COORDINATE}.make_precise (138.66666666666657, 65.999999999999943)) + Result.extend_point (create {EV_COORDINATE}.make_precise (146.66666666666669, 68.666666666666799)) + Result.extend_point (create {EV_COORDINATE}.make_precise (151.99999999999983, 69.999999999999773)) + Result.extend_point (create {EV_COORDINATE}.make_precise (149.99999999999983, 73.999999999999943)) + Result.extend_point (create {EV_COORDINATE}.make_precise (157.33333333333331, 73.999999999999943)) + Result.extend_point (create {EV_COORDINATE}.make_precise (154.66666666666657, 80.666666666666515)) + Result.extend_point (create {EV_COORDINATE}.make_precise (161.99999999999994, 81.999999999999886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (171.33333333333314, 84.666666666666572)) + Result.extend_point (create {EV_COORDINATE}.make_precise (180, 90.000000000000057)) + Result.extend_point (create {EV_COORDINATE}.make_precise (186.66666666666652, 94.666666666666345)) + Result.extend_point (create {EV_COORDINATE}.make_precise (192.66666666666652, 98.666666666666458)) + Result.extend_point (create {EV_COORDINATE}.make_precise (196.6666666666664, 104.6666666666668)) + Result.extend_point (create {EV_COORDINATE}.make_precise (205.33333333333314, 107.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (211.99999999999983, 115.33333333333309)) + Result.extend_point (create {EV_COORDINATE}.make_precise (217.99999999999989, 119.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (217.99999999999989, 125.3333333333332)) + Result.extend_point (create {EV_COORDINATE}.make_precise (215.99999999999977, 129.33333333333297)) + Result.extend_point (create {EV_COORDINATE}.make_precise (221.3333333333332, 128.6666666666668)) + Result.extend_point (create {EV_COORDINATE}.make_precise (218.66666666666652, 135.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (223.33333333333303, 133.33333333333292)) + Result.extend_point (create {EV_COORDINATE}.make_precise (224.66666666666652, 138.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (225.33333333333309, 131.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (228.66666666666663, 130.00000000000011)) + Result.extend_point (create {EV_COORDINATE}.make_precise (232.66666666666646, 137.3333333333332)) + Result.extend_point (create {EV_COORDINATE}.make_precise (237.3333333333332, 149.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (242, 154)) + Result.extend_point (create {EV_COORDINATE}.make_precise (251.33333333333297, 157.33333333333309)) + Result.extend_point (create {EV_COORDINATE}.make_precise (257.3333333333332, 161.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (259.33333333333314, 169.33333333333309)) + Result.extend_point (create {EV_COORDINATE}.make_precise (256.66666666666669, 159.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (252.66666666666657, 152.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (257.3333333333332, 147.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (262.66666666666646, 147.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (265.99999999999983, 152.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (271.33333333333309, 155.99999999999972)) + Result.extend_point (create {EV_COORDINATE}.make_precise (277.33333333333297, 159.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (278.66666666666646, 167.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (280.66666666666669, 173.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (288.66666666666652, 177.99999999999983)) + Result.extend_point (create {EV_COORDINATE}.make_precise (297.33333333333292, 176.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (303.33333333333309, 181.33333333333292)) + Result.extend_point (create {EV_COORDINATE}.make_precise (308.66666666666669, 186.66666666666623)) + Result.extend_point (create {EV_COORDINATE}.make_precise (315.99999999999972, 190.66666666666634)) + Result.extend_point (create {EV_COORDINATE}.make_precise (316.6666666666664, 201.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (320.6666666666664, 208.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (329.3333333333332, 215.99999999999972)) + Result.extend_point (create {EV_COORDINATE}.make_precise (339.3333333333332, 218.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (347.99999999999983, 220.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (355.33333333333303, 227.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (359.33333333333286, 232.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (350.66666666666657, 236.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (339.9999999999996, 240.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (335.33333333333309, 244.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (344, 238.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (347.3333333333332, 239.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (355.33333333333303, 237.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (363.99999999999966, 231.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (367.33333333333309, 229.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (372.66666666666612, 228.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (379.33333333333314, 232.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (381.33333333333303, 239.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (388.6666666666664, 244.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (391.33333333333297, 251.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (383.9999999999996, 254)) + Result.extend_point (create {EV_COORDINATE}.make_precise (378.66666666666646, 254)) + Result.extend_point (create {EV_COORDINATE}.make_precise (376.6666666666664, 259.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (371.99999999999977, 263.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (377.99999999999943, 263.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (383.9999999999996, 263.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (390.66666666666629, 267.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (382.66666666666634, 269.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (380, 274.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (374.66666666666646, 275.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (372.66666666666612, 281.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (371.99999999999977, 287.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (377.33333333333292, 288.66666666666572)) + Result.extend_point (create {EV_COORDINATE}.make_precise (380, 293.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (392.66666666666669, 299.99999999999932)) + Result.extend_point (create {EV_COORDINATE}.make_precise (395.9999999999996, 298)) + Result.extend_point (create {EV_COORDINATE}.make_precise (407.33333333333275, 301.33333333333348)) + Result.extend_point (create {EV_COORDINATE}.make_precise (413.9999999999996, 300.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (415.99999999999972, 298)) + Result.extend_point (create {EV_COORDINATE}.make_precise (418.66666666666646, 303.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (418.66666666666646, 309.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (421.99999999999966, 315.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (419.33333333333292, 323.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (423.33333333333309, 328)) + Result.extend_point (create {EV_COORDINATE}.make_precise (421.99999999999966, 334.66666666666595)) + Result.extend_point (create {EV_COORDINATE}.make_precise (418.66666666666646, 337.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (425.9999999999996, 337.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (428.66666666666669, 344.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (433.99999999999983, 343.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (439.33333333333297, 346.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (439.99999999999983, 353.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (433.99999999999983, 357.33333333333348)) + Result.extend_point (create {EV_COORDINATE}.make_precise (433.33333333333297, 363.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (437.99999999999949, 360.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (439.99999999999983, 357.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (445.99999999999983, 359.3333333333328)) + Result.extend_point (create {EV_COORDINATE}.make_precise (453.99999999999937, 358.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (461.33333333333292, 360.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (471.99999999999937, 361.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (473.9999999999996, 370)) + Result.extend_point (create {EV_COORDINATE}.make_precise (477.99999999999955, 373.99999999999932)) + Result.extend_point (create {EV_COORDINATE}.make_precise (480.66666666666623, 379.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (481.99999999999966, 385.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (486.66666666666623, 387.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (492.66666666666612, 387.99999999999932)) + Result.extend_point (create {EV_COORDINATE}.make_precise (493.99999999999983, 393.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (495.33333333333286, 400)) + Result.extend_point (create {EV_COORDINATE}.make_precise (492.66666666666612, 401.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (487.33333333333314, 407.33333333333269)) + Result.extend_point (create {EV_COORDINATE}.make_precise (483.99999999999937, 413.99999999999898)) + Result.extend_point (create {EV_COORDINATE}.make_precise (483.99999999999937, 422.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (487.99999999999983, 429.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (483.99999999999937, 437.99999999999932)) + Result.extend_point (create {EV_COORDINATE}.make_precise (481.99999999999966, 448.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (482.66666666666652, 454.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (486.66666666666623, 455.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (485.99999999999977, 461.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (486.66666666666623, 465.99999999999943)) + Result.extend_point (create {EV_COORDINATE}.make_precise (484.66666666666634, 469.3333333333328)) + Result.extend_point (create {EV_COORDINATE}.make_precise (485.99999999999977, 475.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (484.66666666666634, 481.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (485.33333333333275, 494)) + Result.extend_point (create {EV_COORDINATE}.make_precise (481.99999999999966, 497.99999999999932)) + Result.extend_point (create {EV_COORDINATE}.make_precise (482.66666666666652, 508.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (480.66666666666623, 513.99999999999932)) + Result.extend_point (create {EV_COORDINATE}.make_precise (478.66666666666623, 521.33333333333269)) + Result.extend_point (create {EV_COORDINATE}.make_precise (477.33333333333309, 517.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (473.33333333333275, 519.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (471.33333333333297, 512.66666666666595)) + Result.extend_point (create {EV_COORDINATE}.make_precise (467.99999999999926, 511.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (461.33333333333292, 506)) + Result.extend_point (create {EV_COORDINATE}.make_precise (457.99999999999972, 500.00000000000011)) + Result.extend_point (create {EV_COORDINATE}.make_precise (455.99999999999972, 506)) + Result.extend_point (create {EV_COORDINATE}.make_precise (451.99999999999983, 507.99999999999932)) + Result.extend_point (create {EV_COORDINATE}.make_precise (455.33333333333286, 510.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (453.99999999999937, 517.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (443.99999999999943, 513.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (435.99999999999972, 508.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (433.33333333333297, 505.3333333333328)) + Result.extend_point (create {EV_COORDINATE}.make_precise (430.6666666666664, 503.99999999999886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (425.33333333333292, 503.99999999999886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (425.9999999999996, 507.99999999999932)) + Result.extend_point (create {EV_COORDINATE}.make_precise (429.3333333333332, 513.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (432.66666666666629, 518.66666666666595)) + Result.extend_point (create {EV_COORDINATE}.make_precise (431.33333333333292, 523.33333333333292)) + Result.extend_point (create {EV_COORDINATE}.make_precise (425.33333333333292, 523.33333333333292)) + Result.extend_point (create {EV_COORDINATE}.make_precise (422.66666666666652, 516.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (418.66666666666646, 511.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (414.66666666666629, 510.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (414.66666666666629, 505.3333333333328)) + Result.extend_point (create {EV_COORDINATE}.make_precise (408.66666666666612, 503.99999999999886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (403.33333333333297, 499.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (399.33333333333309, 494)) + Result.extend_point (create {EV_COORDINATE}.make_precise (395.9999999999996, 488.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (389.9999999999996, 483.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (387.99999999999955, 479.9999999999992)) + Result.extend_point (create {EV_COORDINATE}.make_precise (382.66666666666634, 477.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (377.99999999999943, 475.3333333333328)) + Result.extend_point (create {EV_COORDINATE}.make_precise (373.99999999999966, 473.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (369.33333333333309, 471.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (364.66666666666634, 465.3333333333328)) + Result.extend_point (create {EV_COORDINATE}.make_precise (361.33333333333309, 459.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (351.33333333333314, 458.66666666666583)) + Result.extend_point (create {EV_COORDINATE}.make_precise (342.66666666666623, 449.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (333.9999999999996, 442.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (322.66666666666646, 433.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (322.66666666666646, 427.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (320.6666666666664, 419.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (313.33333333333297, 414.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (304.66666666666646, 410.00000000000011)) + Result.extend_point (create {EV_COORDINATE}.make_precise (293.3333333333332, 402.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (287.99999999999983, 395.99999999999943)) + Result.extend_point (create {EV_COORDINATE}.make_precise (281.33333333333309, 384.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (277.99999999999994, 375.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (270.66666666666663, 373.33333333333292)) + Result.extend_point (create {EV_COORDINATE}.make_precise (262.66666666666646, 363.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (257.99999999999989, 357.33333333333348)) + Result.extend_point (create {EV_COORDINATE}.make_precise (257.99999999999989, 353.99999999999932)) + Result.extend_point (create {EV_COORDINATE}.make_precise (255.33333333333309, 350.66666666666595)) + Result.extend_point (create {EV_COORDINATE}.make_precise (257.99999999999989, 347.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (255.99999999999983, 335.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (251.99999999999983, 332.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (247.99999999999994, 326.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (246.66666666666646, 321.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (243.99999999999983, 318.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (239.99999999999977, 309.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (235.3333333333332, 304.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (236.66666666666646, 298.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (231.99999999999977, 291.33333333333292)) + Result.extend_point (create {EV_COORDINATE}.make_precise (223.33333333333303, 281.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (219.99999999999977, 275.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (215.33333333333326, 271.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (211.99999999999983, 267.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (209.33333333333326, 264.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (206.66666666666669, 259.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (206.66666666666669, 254)) + Result.extend_point (create {EV_COORDINATE}.make_precise (200, 249.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (191.99999999999989, 247.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (189.33333333333309, 241.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (185.33333333333331, 241.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (183.33333333333303, 245.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (178.6666666666664, 238.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (177.99999999999977, 235.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (178.6666666666664, 231.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (175.3333333333332, 220.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (171.33333333333314, 213.99999999999983)) + Result.extend_point (create {EV_COORDINATE}.make_precise (166.66666666666663, 201.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (165.99999999999994, 192.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (159.33333333333314, 181.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (163.99999999999989, 179.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (163.99999999999989, 175.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (161.99999999999994, 173.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (157.33333333333331, 172.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (153.3333333333332, 167.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (149.3333333333332, 163.33333333333292)) + Result.extend_point (create {EV_COORDINATE}.make_precise (144.66666666666657, 160.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (138.66666666666657, 159.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (132.66666666666669, 153.33333333333348)) + Result.extend_point (create {EV_COORDINATE}.make_precise (127.33333333333324, 149.99999999999972)) + Result.extend_point (create {EV_COORDINATE}.make_precise (121.33333333333327, 149.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (118.66666666666661, 151.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (111.33333333333323, 145.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (111.33333333333323, 135.99999999999983)) + Result.extend_point (create {EV_COORDINATE}.make_precise (108.66666666666656, 125.3333333333332)) + Result.extend_point (create {EV_COORDINATE}.make_precise (102.66666666666653, 117.99999999999983)) + Result.extend_point (create {EV_COORDINATE}.make_precise (97.333333333333215, 115.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (94.666666666666643, 111.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (93.333333333333229, 104.6666666666668)) + Result.extend_point (create {EV_COORDINATE}.make_precise (88.6666666666666, 105.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (83.999999999999844, 95.333333333333485)) + Result.extend_point (create {EV_COORDINATE}.make_precise (81.999999999999915, 92.666666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (76.666666666666572, 88.666666666666458)) + Result.extend_point (create {EV_COORDINATE}.make_precise (73.999999999999929, 83.333333333333258)) + Result.extend_point (create {EV_COORDINATE}.make_precise (68.6666666666666, 81.999999999999886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (59.333333333333272, 81.333333333333201)) + Result.extend_point (create {EV_COORDINATE}.make_precise (55.333333333333243, 78.666666666666572)) + Result.extend_point (create {EV_COORDINATE}.make_precise (45.999999999999986, 67.999999999999886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (40.666666666666622, 64)) + Result.extend_point (create {EV_COORDINATE}.make_precise (35.99999999999995, 59.333333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (30.666666666666622, 54)) + Result.extend_point (create {EV_COORDINATE}.make_precise (23.999999999999957, 46.666666666666515)) + Result.extend_point (create {EV_COORDINATE}.make_precise (16.666666666666657, 41.333333333333201)) + Result.extend_point (create {EV_COORDINATE}.make_precise (12.666666666666647, 35.333333333333371)) + Result.extend_point (create {EV_COORDINATE}.make_precise (9.333333333333325, 33.333333333333485)) + Result.extend_point (create {EV_COORDINATE}.make_precise (7.3333333333333286, 26.666666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (4, 19.333333333333371)) + Result.extend_point (create {EV_COORDINATE}.make_precise (4, 15.333333333333485)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1.3333333333333144, 12.666666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1.3333333333333144, 6.6666666666666288)) + end + + kalimantan_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (685.99999999999943, 387.99999999999932)) + Result.extend_point (create {EV_COORDINATE}.make_precise (685.33333333333326, 378.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (679.99999999999955, 371.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (681.99999999999943, 365.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (678.66666666666617, 358.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (676.6666666666664, 351.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (677.99999999999943, 344.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (673.33333333333246, 338.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (669.33333333333269, 333.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (672.66666666666595, 325.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (675.33333333333314, 318.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (674.66666666666606, 311.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (669.99999999999932, 306.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (670.66666666666617, 301.33333333333348)) + Result.extend_point (create {EV_COORDINATE}.make_precise (663.99999999999909, 299.99999999999932)) + Result.extend_point (create {EV_COORDINATE}.make_precise (661.9999999999992, 304.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (656.66666666666606, 308.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (648.66666666666606, 310.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (645.99999999999932, 307.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (647.99999999999943, 298)) + Result.extend_point (create {EV_COORDINATE}.make_precise (654.66666666666617, 295.33333333333348)) + Result.extend_point (create {EV_COORDINATE}.make_precise (646.66666666666629, 291.33333333333292)) + Result.extend_point (create {EV_COORDINATE}.make_precise (645.33333333333314, 293.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (638.66666666666629, 290)) + Result.extend_point (create {EV_COORDINATE}.make_precise (639.99999999999943, 281.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (643.99999999999943, 281.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (643.33333333333269, 277.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (635.33333333333212, 277.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (631.9999999999992, 269.3333333333328)) + Result.extend_point (create {EV_COORDINATE}.make_precise (630.66666666666663, 262.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (636.6666666666664, 251.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (635.33333333333212, 243.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (628.66666666666617, 238.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (623.33333333333235, 237.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (623.99999999999943, 227.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (621.33333333333292, 220.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (619.99999999999932, 215.99999999999972)) + Result.extend_point (create {EV_COORDINATE}.make_precise (626.66666666666617, 209.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (623.33333333333235, 200.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (627.33333333333292, 195.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (629.33333333333246, 187.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (629.33333333333246, 182.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (634.66666666666595, 179.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (639.99999999999943, 175.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (641.9999999999992, 164.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (647.99999999999943, 163.33333333333292)) + Result.extend_point (create {EV_COORDINATE}.make_precise (655.99999999999909, 160.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (653.99999999999932, 163.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (659.33333333333269, 171.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (670.66666666666617, 171.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (680.6666666666664, 173.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (691.99999999999966, 175.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (695.33333333333246, 178.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (705.3333333333328, 181.33333333333292)) + Result.extend_point (create {EV_COORDINATE}.make_precise (713.33333333333246, 179.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (717.33333333333314, 183.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (719.33333333333246, 176.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (721.9999999999992, 187.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (726.66666666666617, 189.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (731.33333333333246, 187.33333333333309)) + Result.extend_point (create {EV_COORDINATE}.make_precise (721.33333333333258, 179.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (723.99999999999943, 168.66666666666623)) + Result.extend_point (create {EV_COORDINATE}.make_precise (728.66666666666606, 156.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (726.66666666666617, 150.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (729.33333333333314, 141.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (733.33333333333326, 140.00000000000011)) + Result.extend_point (create {EV_COORDINATE}.make_precise (731.33333333333246, 126.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (736.66666666666652, 129.33333333333297)) + Result.extend_point (create {EV_COORDINATE}.make_precise (747.99999999999932, 123.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (757.33333333333269, 121.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (777.33333333333246, 117.99999999999983)) + Result.extend_point (create {EV_COORDINATE}.make_precise (786.66666666666617, 115.33333333333309)) + Result.extend_point (create {EV_COORDINATE}.make_precise (805.33333333333269, 108.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (813.99999999999943, 105.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (818.66666666666595, 95.333333333333485)) + Result.extend_point (create {EV_COORDINATE}.make_precise (827.33333333333235, 85.333333333333428)) + Result.extend_point (create {EV_COORDINATE}.make_precise (833.33333333333201, 77.999999999999773)) + Result.extend_point (create {EV_COORDINATE}.make_precise (843.99999999999898, 67.999999999999886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (851.33333333333235, 58.666666666666401)) + Result.extend_point (create {EV_COORDINATE}.make_precise (855.33333333333212, 50)) + Result.extend_point (create {EV_COORDINATE}.make_precise (853.33333333333269, 44.666666666666515)) + Result.extend_point (create {EV_COORDINATE}.make_precise (859.99999999999909, 42.666666666666572)) + Result.extend_point (create {EV_COORDINATE}.make_precise (870.66666666666572, 41.333333333333201)) + Result.extend_point (create {EV_COORDINATE}.make_precise (879.99999999999966, 35.333333333333371)) + Result.extend_point (create {EV_COORDINATE}.make_precise (888.66666666666606, 28.666666666666345)) + Result.extend_point (create {EV_COORDINATE}.make_precise (897.99999999999932, 18.666666666666742)) + Result.extend_point (create {EV_COORDINATE}.make_precise (902.66666666666663, 25.333333333333371)) + Result.extend_point (create {EV_COORDINATE}.make_precise (901.99999999999909, 31.999999999999773)) + Result.extend_point (create {EV_COORDINATE}.make_precise (905.99999999999955, 29.333333333333258)) + Result.extend_point (create {EV_COORDINATE}.make_precise (911.33333333333246, 27.333333333333258)) + Result.extend_point (create {EV_COORDINATE}.make_precise (921.33333333333246, 22.666666666666515)) + Result.extend_point (create {EV_COORDINATE}.make_precise (925.33333333333258, 15.333333333333485)) + Result.extend_point (create {EV_COORDINATE}.make_precise (919.33333333333292, 10.666666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (913.33333333333292, 7.3333333333333712)) + Result.extend_point (create {EV_COORDINATE}.make_precise (919.99999999999898, 3.3333333333332575)) + Result.extend_point (create {EV_COORDINATE}.make_precise (925.99999999999898, -2.0000000000001137)) + Result.extend_point (create {EV_COORDINATE}.make_precise (933.9999999999992, -0.66666666666674246)) + Result.extend_point (create {EV_COORDINATE}.make_precise (939.99999999999898, -4.0000000000001137)) + Result.extend_point (create {EV_COORDINATE}.make_precise (941.99999999999943, -10.000000000000284)) + Result.extend_point (create {EV_COORDINATE}.make_precise (947.33333333333235, -16.000000000000057)) + Result.extend_point (create {EV_COORDINATE}.make_precise (949.99999999999898, -24.000000000000227)) + Result.extend_point (create {EV_COORDINATE}.make_precise (953.99999999999943, -33.333333333333201)) + Result.extend_point (create {EV_COORDINATE}.make_precise (961.33333333333269, -35.999999999999943)) + Result.extend_point (create {EV_COORDINATE}.make_precise (965.99999999999966, -43.333333333333428)) + Result.extend_point (create {EV_COORDINATE}.make_precise (970.66666666666549, -50.666666666666686)) + Result.extend_point (create {EV_COORDINATE}.make_precise (974.66666666666629, -57.333333333333286)) + Result.extend_point (create {EV_COORDINATE}.make_precise (976.66666666666572, -63.333333333333371)) + Result.extend_point (create {EV_COORDINATE}.make_precise (979.99999999999898, -68.666666666666515)) + Result.extend_point (create {EV_COORDINATE}.make_precise (983.99999999999989, -64.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (983.99999999999989, -56.666666666666686)) + Result.extend_point (create {EV_COORDINATE}.make_precise (981.99999999999932, -48.666666666666714)) + Result.extend_point (create {EV_COORDINATE}.make_precise (988.66666666666572, -52.000000000000142)) + Result.extend_point (create {EV_COORDINATE}.make_precise (993.99999999999932, -59.999999999999943)) + Result.extend_point (create {EV_COORDINATE}.make_precise (993.99999999999932, -65.333333333333428)) + Result.extend_point (create {EV_COORDINATE}.make_precise (999.9999999999992, -65.333333333333428)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1001.9999999999995, -62.000000000000114)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1003.9999999999991, -52.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1009.3333333333322, -53.333333333333371)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1015.333333333332, -52.000000000000142)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1017.9999999999992, -44.000000000000085)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1023.9999999999999, -39.999999999999972)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1021.9999999999992, -32.666666666666686)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1019.9999999999987, -24.666666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1019.3333333333322, -19.333333333333371)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1024.6666666666658, -19.333333333333371)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1029.3333333333323, -25.333333333333428)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1036.6666666666658, -25.333333333333428)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1039.3333333333319, -18)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1036.6666666666658, -13.333333333333485)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1034.6666666666663, -8.6666666666665719)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1039.9999999999989, -8.6666666666665719)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1043.9999999999995, -12.666666666666742)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1049.3333333333323, -14.000000000000171)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1057.9999999999993, -10.666666666666856)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1065.3333333333323, -5.3333333333333712)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1069.9999999999993, -0.66666666666674246)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1077.9999999999995, 2.6666666666667425)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1085.9999999999993, 4.6666666666664014)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1093.3333333333328, 2.6666666666667425)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1095.3333333333321, 7.9999999999998863)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1096.6666666666658, 13.333333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1091.3333333333321, 19.333333333333371)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1083.9999999999993, 20.666666666666572)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1078.6666666666663, 21.333333333333258)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1073.9999999999998, 25.333333333333371)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1066.6666666666663, 25.333333333333371)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1056.6666666666663, 25.333333333333371)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1049.3333333333323, 24.666666666666572)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1043.3333333333323, 30.666666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1048.6666666666663, 39.333333333333371)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1060.6666666666663, 44.666666666666515)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1070.6666666666661, 48.666666666666401)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1061.3333333333321, 51.999999999999829)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1051.3333333333319, 55.333333333333371)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1036, 57.999999999999886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1021.9999999999992, 53.333333333333144)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1021.3333333333318, 56.666666666666742)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1032.6666666666658, 62.666666666666515)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1030.6666666666661, 70.666666666666458)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1024.6666666666658, 75.999999999999943)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1028.6666666666663, 83.999999999999659)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1019.9999999999987, 85.999999999999886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1021.3333333333318, 90.666666666666572)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1015.9999999999987, 91.999999999999886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1017.9999999999992, 97.333333333332916)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1015.9999999999987, 100.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1008.6666666666662, 104.6666666666668)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1011.9999999999992, 109.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1018.6666666666662, 113.3333333333332)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1023.3333333333322, 117.99999999999983)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1023.9999999999999, 125.3333333333332)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1027.9999999999993, 128.6666666666668)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1028.6666666666663, 134.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1036, 140.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1041.9999999999993, 148.66666666666634)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1037.9999999999998, 152.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1028.6666666666663, 153.33333333333348)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1029.9999999999993, 159.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1031.3333333333319, 167.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1036, 170.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1041.3333333333326, 171.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1042.6666666666658, 176.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1055.9999999999993, 185.3333333333332)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1065.3333333333323, 192.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1071.3333333333321, 198.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1076.6666666666663, 204.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1082.6666666666661, 205.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1081.3333333333319, 209.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1075.3333333333328, 214.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1067.9999999999998, 214.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1055.9999999999993, 214.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1043.3333333333323, 210.66666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1037.3333333333323, 205.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1033.3333333333323, 201.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1037.3333333333323, 211.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1039.3333333333319, 218.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1031.9999999999998, 214.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1024.6666666666658, 220.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1020.6666666666664, 228.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1015.9999999999987, 238.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1012.6666666666657, 243.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1015.333333333332, 252.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1011.9999999999992, 261.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1012.6666666666657, 287.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1008.6666666666662, 293.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1001.9999999999995, 287.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1002.6666666666661, 293.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (997.99999999999909, 300.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (991.99999999999909, 306.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (983.33333333333201, 309.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (970.66666666666549, 317.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (971.33333333333235, 324.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (958.66666666666549, 330.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (959.9999999999992, 333.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (966.66666666666606, 333.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (966.66666666666606, 346.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (973.33333333333269, 350.66666666666595)) + Result.extend_point (create {EV_COORDINATE}.make_precise (969.33333333333223, 368.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (964.66666666666572, 366.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (959.33333333333201, 366.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (963.99999999999932, 370.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (962.66666666666629, 378.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (957.9999999999992, 388.66666666666595)) + Result.extend_point (create {EV_COORDINATE}.make_precise (951.99999999999932, 379.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (952.66666666666583, 385.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (949.33333333333292, 390.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (953.99999999999943, 390.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (955.33333333333292, 397.3333333333328)) + Result.extend_point (create {EV_COORDINATE}.make_precise (959.9999999999992, 400)) + Result.extend_point (create {EV_COORDINATE}.make_precise (959.9999999999992, 405.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (962.66666666666629, 413.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (959.33333333333201, 420.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (959.33333333333201, 429.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (948.66666666666606, 436.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (949.33333333333292, 425.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (947.9999999999992, 415.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (941.33333333333223, 415.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (931.99999999999875, 421.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (915.99999999999989, 428.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (901.99999999999909, 434.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (884.66666666666595, 442.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (883.33333333333292, 433.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (882.66666666666606, 425.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (883.99999999999898, 419.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (875.99999999999989, 411.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (863.99999999999955, 405.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (853.33333333333269, 404.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (847.99999999999909, 407.99999999999932)) + Result.extend_point (create {EV_COORDINATE}.make_precise (841.33333333333258, 410.00000000000011)) + Result.extend_point (create {EV_COORDINATE}.make_precise (835.33333333333292, 407.99999999999932)) + Result.extend_point (create {EV_COORDINATE}.make_precise (837.99999999999932, 400.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (837.33333333333246, 395.99999999999943)) + Result.extend_point (create {EV_COORDINATE}.make_precise (830.66666666666629, 395.99999999999943)) + Result.extend_point (create {EV_COORDINATE}.make_precise (827.33333333333235, 402.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (820.66666666666583, 394.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (809.99999999999989, 387.99999999999932)) + Result.extend_point (create {EV_COORDINATE}.make_precise (805.99999999999909, 391.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (810.66666666666606, 395.99999999999943)) + Result.extend_point (create {EV_COORDINATE}.make_precise (789.33333333333246, 410.00000000000011)) + Result.extend_point (create {EV_COORDINATE}.make_precise (780.66666666666595, 404)) + Result.extend_point (create {EV_COORDINATE}.make_precise (773.33333333333246, 402.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (764.66666666666617, 407.99999999999932)) + Result.extend_point (create {EV_COORDINATE}.make_precise (757.99999999999909, 414.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (753.99999999999943, 411.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (755.99999999999955, 408.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (755.99999999999955, 400.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (757.33333333333269, 391.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (751.99999999999955, 385.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (744.66666666666595, 390.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (737.99999999999943, 383.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (725.99999999999932, 387.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (717.33333333333314, 391.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (707.33333333333258, 386.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (703.33333333333326, 390.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (701.33333333333292, 384.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (698.66666666666617, 381.33333333333292)) + Result.extend_point (create {EV_COORDINATE}.make_precise (691.99999999999966, 382.66666666666629)) + end + + java_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (513.99999999999943, 527.9999999999992)) + Result.extend_point (create {EV_COORDINATE}.make_precise (518.6666666666664, 526.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (523.9999999999992, 529.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (529.33333333333314, 531.99999999999932)) + Result.extend_point (create {EV_COORDINATE}.make_precise (534.66666666666629, 529.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (536.6666666666664, 527.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (537.33333333333292, 522.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (545.99999999999909, 527.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (551.33333333333292, 525.99999999999909)) + Result.extend_point (create {EV_COORDINATE}.make_precise (557.99999999999943, 532.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (563.99999999999886, 535.33333333333292)) + Result.extend_point (create {EV_COORDINATE}.make_precise (569.9999999999992, 533.9999999999992)) + Result.extend_point (create {EV_COORDINATE}.make_precise (575.33333333333246, 533.3333333333328)) + Result.extend_point (create {EV_COORDINATE}.make_precise (579.9999999999992, 537.99999999999898)) + Result.extend_point (create {EV_COORDINATE}.make_precise (587.33333333333292, 539.33333333333269)) + Result.extend_point (create {EV_COORDINATE}.make_precise (590.6666666666664, 535.99999999999943)) + Result.extend_point (create {EV_COORDINATE}.make_precise (596.66666666666663, 537.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (601.33333333333269, 541.33333333333292)) + Result.extend_point (create {EV_COORDINATE}.make_precise (606.66666666666617, 544.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (605.33333333333246, 552.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (611.33333333333269, 561.99999999999932)) + Result.extend_point (create {EV_COORDINATE}.make_precise (619.99999999999932, 561.99999999999932)) + Result.extend_point (create {EV_COORDINATE}.make_precise (625.99999999999909, 563.3333333333328)) + Result.extend_point (create {EV_COORDINATE}.make_precise (629.9999999999992, 560.66666666666595)) + Result.extend_point (create {EV_COORDINATE}.make_precise (631.9999999999992, 563.99999999999909)) + Result.extend_point (create {EV_COORDINATE}.make_precise (641.9999999999992, 564.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (648.66666666666606, 559.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (655.33333333333269, 563.99999999999909)) + Result.extend_point (create {EV_COORDINATE}.make_precise (663.99999999999909, 566.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (671.33333333333258, 566.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (676.6666666666664, 567.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (678.66666666666617, 563.3333333333328)) + Result.extend_point (create {EV_COORDINATE}.make_precise (685.33333333333326, 567.99999999999932)) + Result.extend_point (create {EV_COORDINATE}.make_precise (691.33333333333269, 570.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (693.99999999999966, 566.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (700.66666666666572, 561.3333333333328)) + Result.extend_point (create {EV_COORDINATE}.make_precise (703.33333333333326, 552.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (703.99999999999966, 548.00000000000011)) + Result.extend_point (create {EV_COORDINATE}.make_precise (713.33333333333246, 544.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (719.99999999999943, 543.99999999999909)) + Result.extend_point (create {EV_COORDINATE}.make_precise (721.33333333333258, 549.33333333333246)) + Result.extend_point (create {EV_COORDINATE}.make_precise (725.33333333333235, 555.99999999999909)) + Result.extend_point (create {EV_COORDINATE}.make_precise (731.33333333333246, 557.33333333333235)) + Result.extend_point (create {EV_COORDINATE}.make_precise (737.99999999999943, 557.33333333333235)) + Result.extend_point (create {EV_COORDINATE}.make_precise (741.33333333333258, 553.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (747.3333333333328, 557.99999999999886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (750.66666666666595, 561.3333333333328)) + Result.extend_point (create {EV_COORDINATE}.make_precise (755.99999999999955, 561.99999999999932)) + Result.extend_point (create {EV_COORDINATE}.make_precise (761.99999999999955, 559.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (766.66666666666595, 567.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (774.6666666666664, 565.33333333333292)) + Result.extend_point (create {EV_COORDINATE}.make_precise (782.66666666666629, 565.99999999999943)) + Result.extend_point (create {EV_COORDINATE}.make_precise (787.33333333333326, 566.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (790.66666666666583, 568.66666666666583)) + Result.extend_point (create {EV_COORDINATE}.make_precise (794.66666666666629, 577.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (797.9999999999992, 582.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (802.66666666666617, 584.66666666666595)) + Result.extend_point (create {EV_COORDINATE}.make_precise (802.66666666666617, 593.33333333333258)) + Result.extend_point (create {EV_COORDINATE}.make_precise (804.66666666666617, 600.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (811.33333333333258, 601.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (816.66666666666606, 605.99999999999886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (823.33333333333326, 607.33333333333292)) + Result.extend_point (create {EV_COORDINATE}.make_precise (830.66666666666629, 604.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (841.33333333333258, 603.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (847.99999999999909, 601.33333333333292)) + Result.extend_point (create {EV_COORDINATE}.make_precise (853.33333333333269, 603.3333333333328)) + Result.extend_point (create {EV_COORDINATE}.make_precise (855.99999999999932, 599.9999999999992)) + Result.extend_point (create {EV_COORDINATE}.make_precise (859.99999999999909, 604.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (865.99999999999909, 603.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (871.33333333333292, 607.33333333333292)) + Result.extend_point (create {EV_COORDINATE}.make_precise (876.66666666666606, 607.33333333333292)) + Result.extend_point (create {EV_COORDINATE}.make_precise (875.33333333333235, 613.99999999999943)) + Result.extend_point (create {EV_COORDINATE}.make_precise (874.66666666666617, 621.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (875.33333333333235, 625.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (885.33333333333223, 623.99999999999909)) + Result.extend_point (create {EV_COORDINATE}.make_precise (892.66666666666549, 625.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (898.66666666666595, 625.99999999999943)) + Result.extend_point (create {EV_COORDINATE}.make_precise (903.99999999999932, 624.66666666666583)) + Result.extend_point (create {EV_COORDINATE}.make_precise (906.6666666666664, 620.66666666666595)) + Result.extend_point (create {EV_COORDINATE}.make_precise (918.66666666666595, 623.99999999999909)) + Result.extend_point (create {EV_COORDINATE}.make_precise (925.33333333333258, 627.99999999999898)) + Result.extend_point (create {EV_COORDINATE}.make_precise (931.99999999999875, 634.66666666666583)) + Result.extend_point (create {EV_COORDINATE}.make_precise (932.66666666666629, 639.99999999999909)) + Result.extend_point (create {EV_COORDINATE}.make_precise (927.33333333333269, 639.99999999999909)) + Result.extend_point (create {EV_COORDINATE}.make_precise (918.66666666666595, 641.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (914.66666666666629, 645.99999999999932)) + Result.extend_point (create {EV_COORDINATE}.make_precise (911.33333333333246, 651.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (911.33333333333246, 655.3333333333328)) + Result.extend_point (create {EV_COORDINATE}.make_precise (905.33333333333235, 655.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (907.33333333333292, 648.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (902.66666666666663, 641.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (895.33333333333292, 638.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (891.99999999999932, 635.99999999999932)) + Result.extend_point (create {EV_COORDINATE}.make_precise (887.33333333333269, 633.99999999999898)) + Result.extend_point (create {EV_COORDINATE}.make_precise (883.33333333333292, 637.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (877.33333333333292, 629.33333333333269)) + Result.extend_point (create {EV_COORDINATE}.make_precise (873.33333333333212, 627.99999999999898)) + Result.extend_point (create {EV_COORDINATE}.make_precise (871.99999999999898, 634.66666666666583)) + Result.extend_point (create {EV_COORDINATE}.make_precise (871.99999999999898, 641.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (875.99999999999989, 645.3333333333328)) + Result.extend_point (create {EV_COORDINATE}.make_precise (881.9999999999992, 647.99999999999886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (881.9999999999992, 651.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (878.66666666666595, 653.9999999999992)) + Result.extend_point (create {EV_COORDINATE}.make_precise (871.33333333333292, 651.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (871.33333333333292, 647.99999999999886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (867.99999999999932, 644.66666666666583)) + Result.extend_point (create {EV_COORDINATE}.make_precise (859.99999999999909, 641.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (853.33333333333269, 644.66666666666583)) + Result.extend_point (create {EV_COORDINATE}.make_precise (845.33333333333235, 643.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (839.99999999999955, 639.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (832.66666666666549, 636.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (827.99999999999943, 635.99999999999932)) + Result.extend_point (create {EV_COORDINATE}.make_precise (823.99999999999909, 631.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (815.99999999999955, 629.9999999999992)) + Result.extend_point (create {EV_COORDINATE}.make_precise (809.33333333333235, 630.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (807.33333333333246, 633.99999999999898)) + Result.extend_point (create {EV_COORDINATE}.make_precise (801.99999999999932, 635.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (796.66666666666583, 636.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (787.99999999999909, 636.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (781.99999999999943, 634.66666666666583)) + Result.extend_point (create {EV_COORDINATE}.make_precise (772.66666666666617, 633.3333333333328)) + Result.extend_point (create {EV_COORDINATE}.make_precise (765.33333333333246, 633.3333333333328)) + Result.extend_point (create {EV_COORDINATE}.make_precise (759.99999999999943, 630.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (753.99999999999943, 627.99999999999898)) + Result.extend_point (create {EV_COORDINATE}.make_precise (753.33333333333269, 630.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (749.3333333333328, 635.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (743.33333333333258, 631.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (738.66666666666629, 631.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (735.3333333333328, 628.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (729.99999999999943, 629.33333333333269)) + Result.extend_point (create {EV_COORDINATE}.make_precise (726.66666666666617, 629.33333333333269)) + Result.extend_point (create {EV_COORDINATE}.make_precise (718.66666666666595, 628.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (711.33333333333292, 626.66666666666595)) + Result.extend_point (create {EV_COORDINATE}.make_precise (700.66666666666572, 624.66666666666583)) + Result.extend_point (create {EV_COORDINATE}.make_precise (691.33333333333269, 621.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (681.33333333333269, 615.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (671.33333333333258, 609.3333333333328)) + Result.extend_point (create {EV_COORDINATE}.make_precise (656.66666666666606, 606.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (647.33333333333269, 605.33333333333269)) + Result.extend_point (create {EV_COORDINATE}.make_precise (637.99999999999898, 602.66666666666595)) + Result.extend_point (create {EV_COORDINATE}.make_precise (630.66666666666663, 602.66666666666595)) + Result.extend_point (create {EV_COORDINATE}.make_precise (626.66666666666617, 605.33333333333269)) + Result.extend_point (create {EV_COORDINATE}.make_precise (618.66666666666617, 604.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (620.66666666666617, 601.33333333333292)) + Result.extend_point (create {EV_COORDINATE}.make_precise (617.99999999999932, 601.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (612.66666666666629, 603.3333333333328)) + Result.extend_point (create {EV_COORDINATE}.make_precise (606.66666666666617, 602.66666666666595)) + Result.extend_point (create {EV_COORDINATE}.make_precise (603.33333333333314, 607.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (597.33333333333292, 608.66666666666583)) + Result.extend_point (create {EV_COORDINATE}.make_precise (589.9999999999992, 607.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (583.33333333333269, 606.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (579.33333333333292, 605.33333333333269)) + Result.extend_point (create {EV_COORDINATE}.make_precise (575.33333333333246, 606.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (568.6666666666664, 601.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (565.33333333333314, 597.33333333333348)) + Result.extend_point (create {EV_COORDINATE}.make_precise (557.33333333333292, 593.99999999999886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (547.33333333333292, 593.99999999999886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (537.33333333333292, 593.33333333333258)) + Result.extend_point (create {EV_COORDINATE}.make_precise (530.6666666666664, 591.99999999999932)) + Result.extend_point (create {EV_COORDINATE}.make_precise (520.6666666666664, 591.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (517.33333333333292, 591.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (512.6666666666664, 587.33333333333235)) + Result.extend_point (create {EV_COORDINATE}.make_precise (509.33333333333309, 588.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (509.33333333333309, 581.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (511.99999999999926, 579.99999999999898)) + Result.extend_point (create {EV_COORDINATE}.make_precise (513.99999999999943, 575.33333333333235)) + Result.extend_point (create {EV_COORDINATE}.make_precise (514.66666666666617, 570.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (509.33333333333309, 568.66666666666583)) + Result.extend_point (create {EV_COORDINATE}.make_precise (507.33333333333297, 571.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (503.99999999999949, 569.33333333333269)) + Result.extend_point (create {EV_COORDINATE}.make_precise (497.99999999999937, 566.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (491.99999999999949, 562.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (485.99999999999977, 563.3333333333328)) + Result.extend_point (create {EV_COORDINATE}.make_precise (476.66666666666652, 563.99999999999909)) + Result.extend_point (create {EV_COORDINATE}.make_precise (471.33333333333297, 565.99999999999943)) + Result.extend_point (create {EV_COORDINATE}.make_precise (463.33333333333309, 562.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (456.66666666666612, 563.3333333333328)) + Result.extend_point (create {EV_COORDINATE}.make_precise (455.33333333333286, 559.33333333333292)) + Result.extend_point (create {EV_COORDINATE}.make_precise (461.99999999999943, 555.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (466.6666666666664, 559.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (472.66666666666657, 553.33333333333258)) + Result.extend_point (create {EV_COORDINATE}.make_precise (475.3333333333332, 547.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (481.33333333333297, 548.66666666666595)) + Result.extend_point (create {EV_COORDINATE}.make_precise (482.66666666666652, 539.33333333333269)) + Result.extend_point (create {EV_COORDINATE}.make_precise (484.66666666666634, 529.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (489.99999999999972, 525.33333333333348)) + Result.extend_point (create {EV_COORDINATE}.make_precise (491.33333333333292, 520.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (495.33333333333286, 520.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (496.66666666666646, 525.99999999999909)) + Result.extend_point (create {EV_COORDINATE}.make_precise (501.99999999999949, 523.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (506.66666666666646, 523.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (509.99999999999972, 527.33333333333303)) + end + + sulawesi_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (1099.3333333333323, 500.00000000000011)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1100.6666666666658, 490.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1101.9999999999993, 483.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1106.6666666666663, 477.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1105.3333333333319, 473.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1103.9999999999991, 470.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1107.3333333333317, 465.99999999999943)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1110.6666666666661, 462.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1110.6666666666661, 452.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1111.3333333333319, 445.33333333333269)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1111.3333333333319, 437.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1107.9999999999989, 429.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1104.6666666666654, 422.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1103.9999999999991, 419.99999999999932)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1105.9999999999993, 416.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1105.9999999999993, 411.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1098.6666666666665, 407.99999999999932)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1093.3333333333328, 410.00000000000011)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1088.6666666666663, 412.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1085.3333333333326, 411.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1082.6666666666661, 413.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1078.6666666666663, 413.99999999999898)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1075.9999999999986, 404)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1075.9999999999986, 398.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1073.3333333333323, 390.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1075.3333333333328, 392.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1077.3333333333323, 384.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1077.3333333333323, 381.33333333333292)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1073.3333333333323, 381.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1071.9999999999998, 379.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1073.9999999999998, 372.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1077.9999999999995, 373.99999999999932)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1081.3333333333319, 372.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1083.9999999999993, 370.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1083.9999999999993, 366.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1088.6666666666663, 364.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1089.3333333333323, 359.99999999999898)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1091.3333333333321, 349.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1092.6666666666663, 343.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1096.6666666666658, 341.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1099.3333333333323, 336.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1097.3333333333321, 333.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1096.6666666666658, 329.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1096.6666666666658, 323.99999999999943)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1097.3333333333321, 320.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1095.3333333333321, 317.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1098.6666666666665, 312.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1096.6666666666658, 309.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1097.3333333333321, 306.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1101.3333333333319, 303.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1105.9999999999993, 296.66666666666595)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1108.6666666666663, 290)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1111.9999999999993, 289.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1113.9999999999993, 285.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1114.6666666666663, 281.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1118.6666666666663, 279.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1117.9999999999993, 275.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1117.9999999999993, 269.3333333333328)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1119.3333333333314, 264.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1119.3333333333314, 261.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1119.9999999999993, 257.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1123.3333333333326, 254.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1123.3333333333326, 249.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1119.3333333333314, 243.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1123.3333333333326, 241.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1120.6666666666658, 237.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1122.6666666666665, 230.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1129.3333333333323, 227.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1129.3333333333323, 224.00000000000011)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1129.3333333333323, 217.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1137.3333333333319, 217.33333333333292)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1139.3333333333323, 208.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1143.3333333333312, 207.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1143.3333333333312, 213.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1145.9999999999998, 214.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1148.6666666666656, 216.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1151.9999999999998, 215.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1154.6666666666663, 217.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1156.6666666666667, 211.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1157.9999999999998, 207.70370370370347)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1161.9999999999998, 207.99999999999983)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1165.3333333333321, 205.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1163.9999999999993, 201.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1163.3333333333321, 199.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1166.6666666666661, 197.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1165.9999999999984, 191.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1171.9999999999991, 190.66666666666634)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1177.5555555555554, 195.65432098765405)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1181.1111111111102, 192.49382716049371)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1183.4814814814808, 196.24691358024683)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1188.4197530864192, 195.65432098765405)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1191.9999999999993, 191.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1195.3333333333319, 196.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1193.3333333333321, 203.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1200.6666666666661, 203.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1207.3333333333323, 203.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1215.3333333333321, 201.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1216.6666666666658, 205.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1222.6666666666667, 201.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1225.9999999999984, 205.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1233.3333333333323, 205.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1236.6666666666661, 204.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1241.3333333333321, 206.66666666666646)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1247.3333333333319, 207.99999999999983)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1253.3333333333321, 209.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1259.3333333333323, 209.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1263.3333333333323, 208.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1269.3333333333321, 211.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1273.9999999999984, 209.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1278.6666666666658, 209.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1285.9999999999977, 211.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1295.3333333333323, 211.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1302.6666666666658, 213.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1309.3333333333317, 211.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1314.6666666666663, 209.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1317.3333333333319, 207.99999999999983)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1323.3333333333321, 206.66666666666646)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1324.6666666666658, 200.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1327.3333333333317, 198.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1332.6666666666663, 197.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1337.3333333333319, 198.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1338.6666666666663, 195.33333333333348)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1334.6666666666658, 193.33333333333309)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1334.6666666666658, 189.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1335.3333333333323, 185.99999999999972)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1336.6666666666658, 181.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1341.3333333333321, 180.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1345.3333333333321, 183.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1347.3333333333328, 180.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1351.3333333333319, 177.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1355.3333333333321, 173.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1357.3333333333326, 175.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1363.9999999999984, 176.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1365.9999999999998, 181.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1368.6666666666663, 186.66666666666623)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1363.3333333333328, 187.33333333333309)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1359.3333333333321, 190.66666666666634)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1359.3333333333321, 195.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1356.6666666666658, 198.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1352.6666666666661, 204.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1349.3333333333321, 208.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1345.3333333333321, 208.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1340.6666666666658, 214.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1340.6666666666658, 219.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1337.3333333333319, 219.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1333.3333333333328, 225.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1333.3333333333328, 231.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1323.3333333333321, 231.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1317.3333333333319, 233.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1309.3333333333317, 234.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1301.9999999999989, 236)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1296.6666666666663, 237.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1290.6666666666661, 237.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1282.6666666666658, 237.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1273.9999999999984, 234.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1268.6666666666658, 228.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1262.6666666666658, 228.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1251.9999999999989, 230.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1249.9999999999989, 228.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1247.3333333333319, 230)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1238.6666666666661, 229.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1230.6666666666658, 230.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1225.3333333333319, 230)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1217.3333333333323, 230.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1209.9999999999993, 232.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1207.3333333333323, 227.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1197.9999999999993, 226.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1197.3333333333323, 230)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1191.3333333333323, 230.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1186.6666666666652, 230)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1182.6666666666663, 230.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1179.3333333333323, 234.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1175.3333333333319, 232.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1170.6666666666667, 233.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1164.6666666666661, 230.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1159.3333333333317, 229.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1151.9999999999998, 229.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1146.6666666666661, 230.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1141.9999999999995, 233.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1139.9999999999991, 236.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1135.3333333333319, 241.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1133.3333333333323, 245.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1133.3333333333323, 249.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1132.6666666666658, 253.33333333333348)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1131.3333333333323, 255.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1129.9999999999993, 258.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1129.3333333333323, 265.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1131.3333333333323, 270.66666666666595)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1131.9999999999995, 273.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1130.6666666666667, 278.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1131.9999999999995, 285.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1134.6666666666663, 287.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1137.9999999999991, 290.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1141.3333333333319, 296.66666666666595)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1146.6666666666661, 294.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1149.9999999999993, 298)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1153.9999999999995, 301.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1153.9999999999995, 306.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1153.9999999999995, 310.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1159.9999999999993, 316.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1166.6666666666661, 313.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1166.6666666666661, 317.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1171.3333333333323, 315.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1176, 318.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1179.9999999999993, 315.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1181.3333333333317, 311.33333333333348)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1185.9999999999993, 307.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1187.3333333333323, 303.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1192.6666666666663, 299.99999999999932)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1193.9999999999993, 296)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1197.3333333333323, 293.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1203.9999999999993, 290)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1203.9999999999993, 293.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1207.3333333333323, 295.33333333333348)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1214.6666666666663, 298.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1219.3333333333328, 293.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1223.9999999999989, 294.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1226.6666666666663, 290)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1231.9999999999986, 288.66666666666572)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1238.6666666666661, 287.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1241.9999999999995, 290)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1245.9999999999991, 287.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1248.6666666666663, 289.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1261.9999999999982, 285.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1252.6666666666658, 282.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1259.3333333333323, 280.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1267.9999999999986, 279.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1273.3333333333328, 279.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1280.6666666666667, 280.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1283.9999999999993, 284)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1283.9999999999993, 287.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1283.3333333333319, 291.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1281.3333333333319, 293.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1280.6666666666667, 298)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1277.9999999999995, 299.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1271.3333333333321, 296)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1268.6666666666658, 290.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1266.6666666666658, 293.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1261.3333333333319, 293.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1255.9999999999984, 295.33333333333348)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1255.3333333333321, 299.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1251.9999999999989, 303.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1247.9999999999993, 304.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1243.3333333333319, 311.33333333333348)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1242.6666666666667, 313.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1235.9999999999989, 319.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1233.3333333333323, 320.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1229.9999999999991, 323.99999999999943)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1224.6666666666663, 325.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1218.6666666666661, 325.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1216.6666666666658, 329.99999999999932)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1212.6666666666663, 328.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1209.9999999999993, 334.66666666666595)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1206.6666666666665, 339.33333333333269)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1200.6666666666661, 340.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1197.3333333333323, 338.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1193.9999999999993, 335.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1189.3333333333319, 333.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1187.3333333333323, 337.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1189.9999999999993, 339.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1193.9999999999993, 339.33333333333269)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1195.9999999999993, 343.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1197.9999999999993, 348.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1199.3333333333319, 352.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1207.3333333333323, 352.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1210.6666666666658, 357.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1215.3333333333321, 361.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1219.3333333333328, 367.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1218.6666666666661, 373.99999999999932)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1222.6666666666667, 377.99999999999943)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1225.3333333333319, 379.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1228.6666666666658, 383.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1234.6666666666663, 385.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1231.3333333333319, 389.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1235.3333333333317, 395.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1241.9999999999995, 397.3333333333328)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1237.9999999999989, 401.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1233.3333333333323, 398.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1231.9999999999986, 404)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1231.3333333333319, 407.99999999999932)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1229.9999999999991, 410.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1227.9999999999991, 413.99999999999898)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1230.6666666666658, 419.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1233.3333333333323, 421.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1237.9999999999989, 421.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1240.6666666666661, 425.33333333333258)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1243.9999999999984, 425.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1245.3333333333323, 430.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1249.3333333333319, 429.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1248.6666666666663, 435.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1249.9999999999989, 442)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1256.6666666666658, 440.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1260.6666666666663, 443.3333333333328)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1261.3333333333319, 449.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1257.9999999999993, 455.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1251.3333333333321, 455.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1247.3333333333319, 451.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1241.3333333333321, 454)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1231.9999999999986, 455.99999999999932)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1227.9999999999991, 455.99999999999932)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1222.6666666666667, 457.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1221.3333333333323, 462.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1220.6666666666658, 465.99999999999943)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1225.3333333333319, 471.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1217.3333333333323, 475.3333333333328)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1213.3333333333319, 472.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1209.9999999999993, 471.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1205.9999999999993, 473.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1201.9999999999989, 470.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1197.3333333333323, 469.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1194.6666666666658, 461.99999999999932)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1196.6666666666663, 458.66666666666583)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1198.6666666666658, 447.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1202.6666666666661, 439.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1194.6666666666658, 435.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1190.6666666666663, 434.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1186.6666666666652, 429.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1185.3333333333328, 426.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1179.3333333333323, 426.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1178.6666666666658, 422.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1174.6666666666658, 424.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1174.6666666666658, 421.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1171.3333333333323, 415.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1167.9999999999998, 410.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1167.9999999999998, 406.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1171.9999999999991, 402.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1177.9999999999993, 397.99999999999932)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1176, 396.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1175.3333333333319, 391.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1177.3333333333323, 389.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1175.3333333333319, 381.33333333333292)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1175.3333333333319, 377.99999999999943)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1176.6666666666663, 374.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1173.9999999999993, 371.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1169.9999999999995, 373.33333333333292)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1165.3333333333321, 371.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1159.3333333333317, 371.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1153.3333333333328, 373.99999999999932)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1151.9999999999998, 377.99999999999943)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1145.3333333333323, 381.33333333333292)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1142.6666666666667, 383.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1138.6666666666663, 385.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1138.6666666666663, 391.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1141.3333333333319, 393.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1143.3333333333312, 399.33333333333292)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1147.3333333333328, 400.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1148.6666666666656, 404.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1145.3333333333323, 407.33333333333269)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1146.6666666666661, 415.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1147.9999999999989, 425.33333333333258)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1143.9999999999993, 427.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1144.6666666666658, 434.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1143.3333333333312, 442)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1145.3333333333323, 449.9999999999992)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1140.6666666666658, 446.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1144.6666666666658, 454.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1145.9999999999998, 463.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1149.9999999999993, 465.3333333333328)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1146.6666666666661, 466.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1142.6666666666667, 471.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1140.6666666666658, 479.9999999999992)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1141.3333333333319, 490.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1147.3333333333328, 490.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1147.3333333333328, 495.99999999999898)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1149.3333333333319, 508.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1143.9999999999993, 501.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1137.9999999999991, 503.99999999999886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1129.9999999999993, 506.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1125.3333333333323, 503.33333333333269)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1122.6666666666665, 506)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1120.6666666666658, 511.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1115.3333333333319, 512.00000000000011)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1112.6666666666665, 509.33333333333235)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1107.3333333333317, 507.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1103.3333333333323, 506)) + end + + maluka_utara_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (1465.3333333333323, 198.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1471.9999999999989, 183.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1469.9999999999989, 181.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1472.6666666666656, 175.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1471.9999999999989, 171.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1476.6666666666663, 168.66666666666623)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1480.6666666666658, 163.33333333333292)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1486.6666666666656, 157.33333333333309)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1489.9999999999984, 150.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1495.9999999999984, 151.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1492.6666666666661, 157.33333333333309)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1489.333333333333, 162.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1486.6666666666656, 164.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1487.3333333333328, 170.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1493.9999999999986, 173.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1493.9999999999986, 177.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1495.3333333333328, 179.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1492.6666666666661, 185.3333333333332)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1492.6666666666661, 190.66666666666634)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1489.333333333333, 195.33333333333348)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1488.6666666666665, 199.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1483.9999999999986, 200)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1479.3333333333319, 203.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1477.9999999999984, 209.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1481.3333333333323, 213.99999999999983)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1487.3333333333328, 214.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1489.333333333333, 211.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1489.9999999999984, 207.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1493.3333333333328, 201.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1499.9999999999991, 201.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1501.3333333333326, 197.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1497.3333333333323, 194.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1499.9999999999991, 190.66666666666634)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1508.6666666666661, 185.3333333333332)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1513.9999999999991, 181.33333333333292)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1514.6666666666652, 184.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1520.6666666666661, 180.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1524.6666666666652, 180.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1523.9999999999986, 183.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1523.9999999999986, 187.33333333333309)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1527.3333333333326, 188.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1523.9999999999986, 193.33333333333309)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1524.6666666666652, 200.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1524.6666666666652, 204.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1521.3333333333326, 203.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1517.3333333333319, 207.99999999999983)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1511.3333333333321, 209.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1505.9999999999989, 211.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1503.9999999999984, 215.99999999999972)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1502.6666666666661, 218.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1505.9999999999989, 222.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1512.6666666666663, 224.00000000000011)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1519.3333333333326, 225.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1524.6666666666652, 227.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1523.9999999999986, 235.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1527.999999999998, 237.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1531.3333333333317, 239.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1533.3333333333328, 243.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1527.999999999998, 240.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1520.6666666666661, 239.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1516.6666666666654, 237.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1514.6666666666652, 234.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1505.9999999999989, 234.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1499.9999999999991, 230.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1493.9999999999986, 230.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1489.333333333333, 231.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1487.9999999999998, 235.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1486.6666666666656, 238.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1489.333333333333, 241.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1489.333333333333, 246.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1487.3333333333328, 249.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1488.6666666666665, 254)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1490.6666666666654, 259.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1492.6666666666661, 267.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1497.3333333333323, 275.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1499.9999999999991, 279.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1503.3333333333321, 285.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1513.1604938271587, 293.03703703703673)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1502.6913580246896, 290.86419753086398)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1504.2716049382705, 289.08641975308626)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1499.3333333333321, 286.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1494.6666666666663, 285.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1491.3333333333323, 278.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1487.9999999999998, 270.66666666666595)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1482.6666666666658, 267.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1478.6666666666663, 263.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1478.6666666666663, 255.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1479.3333333333319, 248.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1480.6666666666658, 237.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1476.6666666666663, 236)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1474.6666666666652, 234.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1471.9999999999989, 228.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1471.3333333333323, 224.00000000000011)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1471.3333333333323, 220.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1474.6666666666652, 218.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1474.6666666666652, 214.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1473.9999999999998, 211.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1468.6666666666658, 212.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1468.6666666666658, 205.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1459.4320987654307, 204.54320987654307)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1465.5555555555538, 202.56790123456767)) + end + + maluku_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (1479.9999999999989, 395.99999999999943)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1485.9999999999991, 397.3333333333328)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1494.6666666666663, 391.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1499.9999999999991, 382.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1508.6666666666661, 383.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1515.9999999999989, 380.66666666666595)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1526.6666666666654, 382.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1534.6666666666656, 381.33333333333292)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1540.6666666666656, 378.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1541.3333333333314, 384.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1545.3333333333326, 387.99999999999932)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1549.9999999999984, 385.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1552.6666666666656, 383.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1554.6666666666652, 379.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1562.6666666666654, 378.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1573.9999999999975, 381.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1581.9999999999984, 387.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1587.3333333333323, 388.66666666666595)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1590.6666666666652, 390.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1595.9999999999989, 389.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1600.6666666666656, 391.33333333333292)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1603.9999999999982, 391.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1606.6666666666656, 394.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1612.6666666666656, 399.33333333333292)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1613.3333333333328, 407.33333333333269)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1617.3333333333326, 407.99999999999932)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1620.6666666666658, 412.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1623.9999999999984, 415.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1620.6666666666658, 419.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1621.3333333333314, 425.33333333333258)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1622.6666666666661, 429.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1615.3333333333314, 426.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1611.3333333333319, 424.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1608.6666666666652, 421.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1605.3333333333326, 421.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1599.9999999999991, 417.33333333333258)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1594.6666666666656, 414.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1591.9999999999989, 413.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1581.9999999999984, 411.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1581.9999999999984, 406.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1578.6666666666645, 403.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1573.9999999999975, 402.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1566, 402.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1563.3333333333326, 401.99999999999932)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1559.9999999999993, 402.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1563.9999999999984, 407.33333333333269)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1563.3333333333326, 410.00000000000011)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1556.6666666666661, 408.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1553.3333333333328, 407.33333333333269)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1551.3333333333323, 408.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1543.3333333333328, 404.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1536.6666666666645, 405.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1537.999999999998, 400)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1532.6666666666654, 398.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1530.6666666666649, 400)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1524.6666666666652, 404.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1523.9999999999986, 407.33333333333269)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1518.6666666666654, 407.99999999999932)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1509.9999999999991, 407.33333333333269)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1504.6666666666654, 398.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1500.6666666666663, 400)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1499.9999999999991, 397.3333333333328)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1500.6666666666663, 392.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1495.9999999999984, 396.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1494.6666666666663, 404)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1490.6666666666654, 407.33333333333269)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1489.9999999999984, 412.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1488.6666666666665, 404)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1487.3333333333328, 401.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1483.9999999999986, 399.33333333333292)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1479.3333333333319, 401.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1475.3333333333323, 399.33333333333292)) + end + + timor_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (1287.3333333333326, 727.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1287.9999999999998, 717.99999999999898)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1294.6666666666656, 715.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1299.9999999999995, 711.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1295.9999999999986, 709.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1291.3333333333314, 711.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1290.6666666666661, 705.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1295.3333333333323, 703.99999999999943)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1292.6666666666661, 699.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1295.9999999999986, 698.66666666666583)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1293.9999999999993, 692.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1309.3333333333317, 679.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1316.6666666666667, 678.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1318.6666666666663, 674.66666666666583)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1330.6666666666658, 671.9999999999992)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1338.6666666666663, 670.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1340.6666666666658, 665.99999999999909)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1353.3333333333323, 661.33333333333292)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1359.9999999999982, 652.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1359.9999999999982, 648.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1363.9999999999984, 645.3333333333328)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1371.9999999999986, 641.33333333333235)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1377.9999999999989, 644.66666666666583)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1395.3333333333321, 638.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1402, 641.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1408.6666666666663, 640.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1415.9999999999993, 638.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1419.3333333333323, 636.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1424.6666666666658, 639.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1432.6666666666658, 635.99999999999932)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1437.3333333333317, 635.99999999999932)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1444.6666666666656, 631.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1449.9999999999998, 635.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1454.6666666666656, 633.99999999999898)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1461.9999999999991, 637.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1455.3333333333323, 641.33333333333235)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1453.9999999999984, 644.66666666666583)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1449.9999999999998, 644.66666666666583)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1449.3333333333328, 648.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1443.9999999999995, 648.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1439.3333333333319, 651.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1435.9999999999984, 650.66666666666583)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1427.9999999999991, 653.33333333333235)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1424.6666666666658, 657.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1423.9999999999984, 662.66666666666595)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1409.3333333333323, 662.00000000000011)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1403.9999999999995, 664.66666666666583)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1397.3333333333326, 670.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1394.6666666666658, 669.3333333333328)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1389.3333333333323, 670.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1383.9999999999993, 670.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1375.3333333333326, 675.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1370.6666666666658, 676.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1360.6666666666654, 682.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1356.6666666666658, 685.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1355.9999999999991, 691.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1351.3333333333319, 697.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1344.6666666666661, 703.99999999999943)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1337.9999999999991, 707.33333333333269)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1334.6666666666658, 711.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1327.9999999999984, 716.66666666666595)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1321.3333333333314, 716.66666666666595)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1315.9999999999984, 716.66666666666595)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1312, 721.99999999999943)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1303.9999999999986, 723.3333333333328)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1298.6666666666663, 726.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1293.3333333333323, 729.33333333333303)) + end + + wetar_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (1392.6666666666663, 615.99999999999909)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1393.3333333333326, 610.66666666666583)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1395.9999999999991, 608.66666666666583)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1398.6666666666658, 602.66666666666595)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1409.3333333333323, 605.33333333333269)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1415.9999999999993, 602.66666666666595)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1422, 599.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1429.3333333333326, 597.99999999999898)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1431.9999999999998, 601.33333333333292)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1438.6666666666658, 601.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1439.3333333333319, 605.99999999999886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1435.3333333333328, 605.99999999999886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1428.6666666666654, 607.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1425.9999999999991, 609.99999999999909)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1423.3333333333328, 615.99999999999909)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1419.9999999999993, 614.66666666666561)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1413.9999999999989, 614.66666666666561)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1409.9999999999993, 614.66666666666561)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1405.3333333333323, 611.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1400.6666666666649, 612.6666666666664)) + end + + not_named_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (1312, 636.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1307.3333333333321, 637.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1309.3333333333317, 633.3333333333328)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1314.6666666666663, 631.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1315.3333333333319, 634.66666666666583)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1324.6666666666658, 626.66666666666595)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1328.6666666666656, 627.99999999999898)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1330.6666666666658, 623.99999999999909)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1337.3333333333319, 622.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1339.3333333333319, 627.33333333333348)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1343.3333333333317, 624.66666666666583)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1349.3333333333321, 625.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1358.6666666666661, 623.99999999999909)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1361.9999999999984, 627.99999999999898)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1361.3333333333321, 633.99999999999898)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1351.3333333333319, 634.66666666666583)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1347.3333333333328, 637.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1341.9999999999984, 634.66666666666583)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1336.6666666666658, 638.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1335.3333333333323, 636.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1326.6666666666665, 637.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1327.9999999999984, 633.3333333333328)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1325.3333333333314, 631.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1321.3333333333314, 635.99999999999932)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1319.9999999999998, 639.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1313.3333333333323, 642.6666666666664)) + end + + nusa_tenggara_timor_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (1123.3333333333326, 638.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1129.3333333333323, 635.99999999999932)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1133.3333333333323, 637.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1135.9999999999984, 633.3333333333328)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1146.6666666666661, 629.33333333333269)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1150.6666666666661, 631.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1155.9999999999989, 629.9999999999992)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1163.9999999999993, 633.3333333333328)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1171.9999999999991, 633.99999999999898)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1180.6666666666658, 635.99999999999932)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1184.6666666666658, 640.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1189.3333333333319, 643.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1195.9999999999993, 645.99999999999932)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1201.9999999999989, 639.99999999999909)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1206.6666666666665, 639.99999999999909)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1208.6666666666667, 637.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1211.3333333333323, 638.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1217.3333333333323, 638.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1223.9999999999989, 641.33333333333235)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1231.3333333333319, 645.3333333333328)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1239.3333333333326, 645.3333333333328)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1242.6666666666667, 641.33333333333235)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1239.9999999999993, 637.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1243.9999999999984, 635.99999999999932)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1250.6666666666663, 635.99999999999932)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1257.3333333333323, 632.66666666666561)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1259.9999999999995, 629.9999999999992)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1260.6666666666663, 626.66666666666595)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1256.6666666666658, 626.66666666666595)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1254.6666666666658, 627.99999999999898)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1252.6666666666658, 626.66666666666595)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1253.9999999999993, 623.3333333333328)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1257.9999999999993, 619.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1261.9999999999982, 622.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1263.9999999999986, 627.99999999999898)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1267.3333333333317, 631.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1271.3333333333321, 629.33333333333269)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1277.9999999999995, 629.33333333333269)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1281.3333333333319, 630.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1288.6666666666663, 629.33333333333269)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1289.9999999999989, 631.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1293.9999999999993, 628.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1299.9999999999995, 625.99999999999943)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1305.3333333333314, 628.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1299.9999999999995, 631.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1296.6666666666663, 636.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1290.6666666666661, 637.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1291.3333333333314, 642.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1287.3333333333326, 640.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1281.9999999999991, 644.66666666666583)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1280.6666666666667, 641.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1275.3333333333319, 642.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1278.6666666666658, 638.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1285.3333333333314, 633.99999999999898)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1277.9999999999995, 633.99999999999898)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1271.9999999999989, 635.99999999999932)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1269.9999999999993, 640.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1265.3333333333321, 640.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1261.9999999999982, 645.99999999999932)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1257.3333333333323, 643.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1249.9999999999989, 646.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1242.6666666666667, 649.33333333333258)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1233.3333333333323, 651.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1225.9999999999984, 651.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1223.3333333333323, 653.33333333333235)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1216.6666666666658, 654.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1209.9999999999993, 658.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1201.9999999999989, 657.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1190.6666666666663, 654.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1189.9999999999993, 658.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1187.3333333333323, 659.99999999999886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1183.3333333333321, 659.33333333333258)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1175.3333333333319, 662.00000000000011)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1171.3333333333323, 662.00000000000011)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1167.9999999999998, 658.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1165.9999999999984, 654.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1163.3333333333321, 657.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1158.6666666666658, 657.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1155.9999999999989, 654.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1148.6666666666656, 653.9999999999992)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1145.3333333333323, 654.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1143.3333333333312, 656.66666666666561)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1140.6666666666658, 657.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1136.6666666666663, 652.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1126.6666666666665, 655.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1125.3333333333323, 657.99999999999932)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1123.9999999999993, 654.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1119.3333333333314, 653.33333333333235)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1118.6666666666663, 645.3333333333328)) + end + + sumba_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (1080.6666666666665, 691.33333333333292)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1081.9999999999991, 686.66666666666561)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1091.3333333333321, 681.99999999999909)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1095.9999999999993, 681.33333333333348)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1100.6666666666658, 681.99999999999909)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1104.6666666666654, 679.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1109.9999999999993, 679.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1114.6666666666663, 681.33333333333348)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1117.3333333333319, 682.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1125.3333333333323, 677.99999999999909)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1132.6666666666658, 683.33333333333235)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1135.9999999999984, 687.99999999999932)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1138.6666666666663, 685.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1140.6666666666658, 687.99999999999932)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1139.3333333333323, 692.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1141.9999999999995, 695.33333333333235)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1147.3333333333328, 691.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1151.3333333333321, 697.33333333333258)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1153.9999999999995, 695.33333333333235)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1157.9999999999998, 703.33333333333258)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1160.6666666666658, 707.33333333333269)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1164.6666666666661, 709.3333333333328)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1166.6666666666661, 711.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1164.6666666666661, 714.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1161.3333333333321, 718.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1157.3333333333323, 721.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1155.3333333333319, 718.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1151.3333333333321, 719.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1149.9999999999993, 724.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1145.3333333333323, 720.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1140.6666666666658, 721.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1135.9999999999984, 721.99999999999943)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1129.9999999999993, 717.99999999999898)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1128.6666666666665, 714.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1125.9999999999993, 709.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1121.3333333333321, 707.99999999999886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1116.6666666666665, 705.99999999999898)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1113.9999999999993, 702.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1111.3333333333319, 699.99999999999909)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1107.9999999999989, 699.99999999999909)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1104.6666666666654, 698.66666666666583)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1101.9999999999993, 700.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1098.6666666666665, 699.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1093.9999999999989, 699.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1088.6666666666663, 697.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1085.3333333333326, 696.66666666666629)) + end + + nusa_tenggara_barat_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (980.66666666666629, 664.66666666666583)) + Result.extend_point (create {EV_COORDINATE}.make_precise (979.99999999999898, 656.66666666666561)) + Result.extend_point (create {EV_COORDINATE}.make_precise (983.99999999999989, 655.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (981.33333333333212, 648.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (985.33333333333292, 642.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (991.33333333333292, 641.33333333333235)) + Result.extend_point (create {EV_COORDINATE}.make_precise (997.33333333333258, 634.66666666666583)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1008.6666666666662, 639.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1010.6666666666662, 637.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1013.9999999999999, 636.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1013.9999999999999, 625.99999999999943)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1021.3333333333318, 625.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1021.3333333333318, 628.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1017.9999999999992, 629.9999999999992)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1016.6666666666659, 634.66666666666583)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1021.9999999999992, 639.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1019.3333333333322, 643.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1026.6666666666665, 643.3333333333328)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1027.3333333333326, 651.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1035.3333333333328, 651.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1039.9999999999989, 647.99999999999886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1045.3333333333328, 647.99999999999886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1048.6666666666663, 646.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1044.6666666666658, 643.3333333333328)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1041.3333333333326, 637.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1036.6666666666658, 639.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1031.9999999999998, 635.99999999999932)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1025.3333333333323, 631.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1025.3333333333323, 624.66666666666583)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1033.9999999999995, 621.99999999999932)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1042.6666666666658, 622.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1043.3333333333323, 627.99999999999898)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1048.6666666666663, 633.99999999999898)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1053.3333333333323, 633.99999999999898)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1059.3333333333323, 629.33333333333269)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1071.3333333333321, 634.66666666666583)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1075.3333333333328, 630.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1080.6666666666665, 631.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1084.6666666666661, 636.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1085.3333333333326, 641.33333333333235)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1083.3333333333326, 645.99999999999932)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1087.3333333333326, 647.99999999999886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1088.6666666666663, 644.04938271604863)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1092.0246913580233, 645.62962962962911)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1090.2469135802464, 647.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1090.6666666666656, 651.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1082.6666666666661, 651.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1077.3333333333323, 647.99999999999886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1074.6666666666663, 651.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1079.9999999999995, 654.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1077.9999999999995, 656.66666666666561)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1069.9999999999993, 655.3333333333328)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1066.6666666666663, 652.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1063.9999999999995, 655.3333333333328)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1057.9999999999993, 657.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1054.6666666666661, 655.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1055.9999999999993, 653.33333333333235)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1055.3333333333323, 647.99999999999886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1050.6666666666663, 651.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1048.6666666666663, 654.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1043.9999999999995, 656.66666666666561)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1036.6666666666658, 657.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1030.6666666666661, 661.33333333333292)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1025.9999999999998, 658.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1021.3333333333318, 662.00000000000011)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1016.6666666666659, 660.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1011.333333333332, 662.00000000000011)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1007.333333333332, 661.33333333333292)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1003.3333333333329, 663.3333333333328)) + Result.extend_point (create {EV_COORDINATE}.make_precise (999.9999999999992, 667.3333333333328)) + Result.extend_point (create {EV_COORDINATE}.make_precise (994.66666666666617, 667.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (988.66666666666572, 665.99999999999909)) + end + + praya_barat_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (921.33333333333246, 652.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (926.66666666666629, 647.99999999999886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (930.66666666666595, 653.9999999999992)) + Result.extend_point (create {EV_COORDINATE}.make_precise (939.33333333333212, 651.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (946.66666666666549, 652.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (949.99999999999898, 645.99999999999932)) + Result.extend_point (create {EV_COORDINATE}.make_precise (947.33333333333235, 637.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (955.33333333333292, 633.3333333333328)) + Result.extend_point (create {EV_COORDINATE}.make_precise (963.33333333333246, 626.66666666666595)) + Result.extend_point (create {EV_COORDINATE}.make_precise (969.99999999999943, 630.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (975.33333333333223, 631.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (979.33333333333258, 634.66666666666583)) + Result.extend_point (create {EV_COORDINATE}.make_precise (975.33333333333223, 643.3333333333328)) + Result.extend_point (create {EV_COORDINATE}.make_precise (970.66666666666549, 651.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (973.33333333333269, 655.3333333333328)) + Result.extend_point (create {EV_COORDINATE}.make_precise (969.99999999999943, 658.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (963.99999999999932, 660.66666666666674)) + Result.extend_point (create {EV_COORDINATE}.make_precise (955.99999999999909, 658.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (951.33333333333178, 655.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (945.33333333333223, 657.99999999999932)) + Result.extend_point (create {EV_COORDINATE}.make_precise (940.66666666666583, 657.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (933.9999999999992, 657.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (926.66666666666629, 655.99999999999955)) + end + + puerto_princesa_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (999.9999999999992, -129.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1002.6666666666661, -139.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1008.6666666666662, -147.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1011.9999999999992, -153.99999999999991)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1019.3333333333322, -157.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1021.3333333333318, -161.99999999999986)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1025.3333333333323, -161.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1029.3333333333323, -169.33333333333323)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1033.3333333333323, -173.33333333333334)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1037.3333333333323, -171.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1044.6666666666658, -179.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1049.3333333333323, -184.66666666666666)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1051.9999999999989, -189.99999999999997)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1057.9999999999993, -191.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1064.6666666666661, -200.66666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1070.6666666666661, -209.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1073.9999999999998, -210.66666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1075.3333333333328, -215.99999999999991)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1079.3333333333323, -215.99999999999991)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1083.3333333333326, -221.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1079.9999999999995, -223.3333333333332)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1083.3333333333326, -230.66666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1091.9999999999998, -231.33333333333323)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1096.6666666666658, -233.33333333333323)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1097.9999999999998, -238.66666666666654)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1093.3333333333328, -247.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1095.9999999999993, -255.33333333333323)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1099.3333333333323, -253.3333333333332)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1099.9999999999993, -259.3333333333332)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1102.6666666666663, -267.3333333333332)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1105.3333333333319, -270.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1106.6666666666663, -266.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1107.9999999999989, -260.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1108.6666666666663, -255.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1112.6666666666665, -253.99999999999986)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1108.6666666666663, -248.66666666666654)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1109.3333333333319, -243.33333333333323)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1111.9999999999993, -235.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1115.3333333333319, -231.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1120.6666666666658, -235.33333333333323)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1127.9999999999998, -231.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1117.9999999999993, -225.99999999999991)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1111.9999999999993, -227.33333333333323)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1107.9999999999989, -222.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1102.6666666666663, -221.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1094.6666666666663, -215.99999999999991)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1094.6666666666663, -208.66666666666654)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1075.9999999999986, -203.99999999999991)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1071.9999999999998, -201.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1069.9999999999993, -197.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1072.6666666666667, -193.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1068.6666666666663, -186.66666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1063.9999999999995, -179.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1059.9999999999991, -179.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1057.9999999999993, -172.66666666666666)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1049.3333333333323, -166.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1043.9999999999995, -165.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1039.9999999999989, -158.66666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1032.6666666666658, -156.66666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1031.3333333333319, -151.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1026.6666666666665, -148.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1023.3333333333322, -144.66666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1015.9999999999987, -145.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1012.6666666666657, -137.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1007.333333333332, -135.99999999999989)) + end + +invariant + + is_valid_sea_area: attached target_imp implies sea_area = game.indonesia + +end diff --git a/jj_vitp/Interface/widgets/sea_area_widgets/japanese_islands_widget.e b/jj_vitp/Interface/widgets/sea_area_widgets/japanese_islands_widget.e new file mode 100644 index 0000000..405e387 --- /dev/null +++ b/jj_vitp/Interface/widgets/sea_area_widgets/japanese_islands_widget.e @@ -0,0 +1,1878 @@ +note + description: "[ + Widget that represents this VITP sea area. + The points for land areas were obtained using the Grabber program, + which allows one to trace a picture, say from Google Earth. + The "Asia polygons" and the "Kamchatka polygons" were traced + seperately, so they require different transformations. + ]" + author: "Jimmy J. Johnson" + +class + JAPANESE_ISLANDS_WIDGET + +inherit + + SEA_AREA_WIDGET + redefine + create_interface_objects, + position_widgets, + build_land, + build_ocean +-- build_bounding_figure + end + +create + make + +feature {NONE} -- Initialization + + create_interface_objects + -- Initialize attributes + do + Precursor {SEA_AREA_WIDGET} + asia := asia_imp + hainan := hainan_imp + taiwan := taiwan_imp + kamchatsky := kamchatsky_imp + shumshu := shumshu_imp + paramushir := paramushir_imp + atlasov := atlasov_imp + onekotan := onekotan_imp + makanrushi := makanrushi_imp + kharimkotan := kharimkotan_imp + shiashkotan := shiashkotan_imp + ekarma := ekarma_imp + matua := matua_imp + rasshua := rasshua_imp + ketoy := ketoy_imp + simushir := simushir_imp + sakhalin := sakhalin_imp + end + + position_widgets + -- Move Current and contained widgets to correct + -- location and set their their sizes + do + Precursor {SEA_AREA_WIDGET} + name_mt.set_point_position (-75, 90) + dot.set_point_position (-40, 80) +-- flag.center_on_dot (dot) + flag.set_x_y (dot.x, dot.y) + set_point_position (497, 0) + end + + build_land + -- Add any brown land to Current + do + Precursor {SEA_AREA_WIDGET} + -- Add Asia polygons and tranform to match other widgets + land.extend (asia) + land.extend (hainan) + land.extend (taiwan) + asia.transform (asia_transform) + hainan.transform (asia_transform) + taiwan.transform (asia_transform) + -- Add Kamchatka polygons and tranform to match other widgets + land.extend (kamchatsky) + land.extend (shumshu) + land.extend (paramushir) + land.extend (atlasov) + land.extend (onekotan) + land.extend (makanrushi) + land.extend (kharimkotan) + land.extend (shiashkotan) + land.extend (ekarma) + land.extend (matua) + land.extend (rasshua) + land.extend (ketoy) + land.extend (simushir) + land.extend (sakhalin) + kamchatsky.transform (kamchatka_transform) + shumshu.transform (kamchatka_transform) + paramushir.transform (kamchatka_transform) + atlasov.transform (kamchatka_transform) + onekotan.transform (kamchatka_transform) + makanrushi.transform (kamchatka_transform) + kharimkotan.transform (kamchatka_transform) + shiashkotan.transform (kamchatka_transform) + ekarma.transform (kamchatka_transform) + matua.transform (kamchatka_transform) + rasshua.transform (kamchatka_transform) + ketoy.transform (kamchatka_transform) + simushir.transform (kamchatka_transform) + sakhalin.transform (kamchatka_transform) + end + + build_ocean + -- Create the polygon representing the `ocean' here + -- Redefined to add the points + do + Precursor {SEA_AREA_WIDGET} + -- start at north-east corner + ocean.extend_point (create {EV_COORDINATE}.make (0, 0)) + ocean.extend_point (create {EV_COORDINATE}.make (27, 98)) + ocean.extend_point (create {EV_COORDINATE}.make (-50, 180)) + ocean.extend_point (create {EV_COORDINATE}.make (-271, 200)) + ocean.extend_point (create {EV_COORDINATE}.make (-313, 159)) + ocean.extend_point (create {EV_COORDINATE}.make (-310, 0)) -- x is estimated + end + +-- build_bounding_figure +-- -- Add points to the `jj_bounding_figure'. +-- -- Redefined to use the tile edges as the bounding area +-- do +-- if has (jj_bounding_figure) then +-- prune_all (jj_bounding_figure) +-- end +-- create jj_bounding_figure +-- extend (jj_bounding_figure) +-- -- start at west-most point west of Singapore +-- -- start at north-east corner +-- jj_bounding_figure.extend_point (create {EV_COORDINATE}.make (0, 0)) +-- jj_bounding_figure.extend_point (create {EV_COORDINATE}.make (27, 98)) +-- jj_bounding_figure.extend_point (create {EV_COORDINATE}.make (-50, 180)) +-- jj_bounding_figure.extend_point (create {EV_COORDINATE}.make (-271, 200)) +-- jj_bounding_figure.extend_point (create {EV_COORDINATE}.make (-313, 159)) +-- jj_bounding_figure.extend_point (create {EV_COORDINATE}.make (-310, 0)) -- x is estimated +-- -- Make adjustments +-- jj_bounding_figure.enable_closed +-- jj_bounding_figure.set_line_width (2) +-- translate_widget (jj_bounding_figure, 497, 0) +---- show_bounding_figure +-- end + +feature -- Access + + asia: EV_MODEL_POLYGON + hainan: EV_MODEL_POLYGON + taiwan: EV_MODEL_POLYGON + +feature -- Access + + kamchatsky: EV_MODEL_POLYGON + shumshu: EV_MODEL_POLYGON + paramushir: EV_MODEL_POLYGON + atlasov: EV_MODEL_POLYGON + onekotan: EV_MODEL_POLYGON + makanrushi: EV_MODEL_POLYGON + kharimkotan: EV_MODEL_POLYGON + shiashkotan: EV_MODEL_POLYGON + ekarma: EV_MODEL_POLYGON + matua: EV_MODEL_POLYGON + rasshua: EV_MODEL_POLYGON + ketoy: EV_MODEL_POLYGON + simushir: EV_MODEL_POLYGON + sakhalin: EV_MODEL_POLYGON + +feature {NONE} -- Implementation + + asia_point: EV_COORDINATE + -- Reference point for transformations of the Asia + -- polygons (i.e. `asia', `hainan', & `taiwan'). + local + bb: EV_RECTANGLE + mid_x: REAL_64 + mid_y: REAL_64 + once + create Result.make_precise (0.0, 0.0) + -- Estimate the mid_point +--3 create Result.make_precise (721.0, 176.0) + end + + asia_move: EV_COORDINATE + -- Distance in x- and y-directions to move the asia polygons. + once +-- create Result.make ((-497 * (1/asia_scale)).rounded, 1) +-- create Result.make (-1838, 348) +-- create Result.make (-497, -11) + create Result.make (-504, -12) + end + + asia_scale: REAL_64 = 0.27 + -- Scale factor for Asia polygons. + + asia_angle: REAL_64 = 12.0 + -- Number of degrees to rotate the Asia polygons + + asia_transform: EV_MODEL_TRANSFORMATION + -- Matrix to scale, rotate, and translate polygons + -- depicting `asia', `hainan', and `taiwan'. + local + r, s, t: EV_MODEL_TRANSFORMATION + once + create r.make_zero + create s.make_zero + create t.make_zero + t.translate (asia_move.x_precise, asia_move.y_precise) +-- s.scale (asia_scale, asia_scale, asia_point.x_precise, asia_point.y_precise, 0.0) + s.scale (asia_scale, asia_scale, 0.0, 0.0, 0.0) + r.rotate (degrees_to_radians (asia_angle), asia_point.x_precise, asia_point.y_precise) + Result := t * r * s +-- Result := r * s * t +-- Result := s * t * r + end + + kamchatka_point: EV_COORDINATE + -- Reference point for transformations of the Kamchatka + -- polygons (i.e. `kamchatsky', `shumshu', `paramushir', + -- `atlasov', etc.). + once + create Result.make_precise (0.0, 0.0) + end + + kamchatka_move: EV_COORDINATE + -- Distance in x- and y-directions to move the kamchatka polygons. + once + create Result.make (-6, -2) +-- create Result.make (-118, 38) + end + + kamchatka_scale: REAL_64 = 0.07 + -- Scale factor for Kamchatka polygons + + kamchatka_angle: REAL_64 = 12.0 + -- Number of degrees to rotate the Kamchatka polygons + + kamchatka_transform: EV_MODEL_TRANSFORMATION + -- Matrix to scale, rotate, and translate polygons + -- depicting `asia', `hainan', and `taiwan'. + local + r, s, t: EV_MODEL_TRANSFORMATION + once + create r.make_zero + create s.make_zero + create t.make_zero + t.translate (kamchatka_move.x_precise, kamchatka_move.y_precise) +-- s.scale (kamchatka_scale, kamchatka_scale, kamchatka_point.x_precise, kamchatka_point.y_precise, 0.0) + s.scale (kamchatka_scale, kamchatka_scale, 0.0, 0.0, 0.0) + r.rotate (degrees_to_radians (kamchatka_angle), kamchatka_point.x_precise, kamchatka_point.y_precise) + Result := t * r * s +-- Result := r * s * t +-- Result := s * t * r + end + +feature {NONE} -- Implmenetation (Asia polygons) + + polygon_from_file (a_name: STRING): EV_MODEL_POLYGON + -- Create a polygon from the file beginning with `a_name'. + local + f: PLAIN_TEXT_FILE + p: PATH + x_loc, y_loc: REAL_64 + do + -- Use the current "working directory" + -- See execution parameters in EiffelStudio. + create p.make_current + p := p.appended ("/xy_land_files/" + a_name + ".txt") + create f.make_with_path (p) + f.open_read +-- create f.make_open_read ("~/jj_source/jj_vitp/xy_land_files/" + a_name + ".txt") +-- create f.make_open_read ("./xy_land_files/asia.txt") + create Result + from f.start + until f.exhausted or f.end_of_file + loop + f.read_real + x_loc := f.last_real + f.forth + f.read_real + y_loc := f.last_real + Result.extend_point (create {EV_COORDINATE}.make_precise (x_loc, y_loc)) + f.forth + end + end + + asia_imp: EV_MODEL_POLYGON + -- The brown land at top left of board + do +-- Result := polygon_from_file ("asia") + -- The first few points and the last point were modified or commented + -- out so that the land would not go too far outside the boarde. + create Result + -- Clockwise from top-left corner + Result.extend_point (create {EV_COORDINATE}.make_precise (25, 32)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1442.25, -262)) + -- Points generated by Grabber application +-- Result.extend_point (create {EV_COORDINATE}.make_precise (0, 0)) +-- Result.extend_point (create {EV_COORDINATE}.make_precise (1442.25, -307)) +-- Result.extend_point (create {EV_COORDINATE}.make_precise (1441.2499999999993, -296)) +-- Result.extend_point (create {EV_COORDINATE}.make_precise (1443.2499999999993, -270)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1443.2499999999993, -257)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1448.25, -255)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1441.2499999999993, -249)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1444.25, -236)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1439.2499999999993, -228.00000000000003)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1440.25, -215)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1436.2499999999993, -211.00000000000003)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1437.2499999999993, -202)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1427.2499999999993, -191.00000000000006)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1419.2499999999993, -183)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1415.25, -177.00000000000006)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1412.3611111111104, -169.11111111111117)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1411.25, -162)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1402.25, -157.00000000000006)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1398.2499999999993, -147)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1393.25, -136.00000000000006)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1388.3611111111104, -126.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1386.25, -123)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1380.2499999999993, -110)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1371.2499999999993, -104)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1364.2499999999993, -93.000000000000085)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1358.2499999999993, -90)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1349.25, -77)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1346.5833333333328, -74.000000000000085)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1345.6944444444443, -66)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1338.2499999999995, -67.000000000000114)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1334.25, -55.000000000000114)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1327.2499999999995, -42.000000000000114)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1318.25, -34.000000000000114)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1299.2499999999995, -23)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1294.5833333333328, -17.111111111111256)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1292.3611111111106, -18.000000000000114)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1290.1388888888882, -16.222222222222342)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1286.1388888888882, -16.222222222222342)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1282.1388888888882, -14.444444444444571)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1274.2499999999995, -13.000000000000114)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1271.9166666666661, -16.666666666666799)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1269.25, -13.555555555555657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1266.1388888888882, -18.000000000000114)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1263.4722222222222, -15.333333333333343)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1259.9166666666661, -19.333333333333456)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1257.2499999999995, -17.000000000000114)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1257.2499999999995, -27)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1254.5833333333328, -26.888888888888914)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1251.9166666666661, -26.000000000000114)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1247.2499999999995, -19.000000000000171)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1243.9166666666661, -18.888888888888999)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1247.0277777777776, -24.222222222222342)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1249.2499999999995, -30)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1243.2499999999995, -29.000000000000114)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1241.6944444444439, -23.777777777777914)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1236.805555555555, -18.444444444444571)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1232.25, -10)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1217.25, -11)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1223.2499999999995, -7.0000000000001137)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1221.2499999999995, 2)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1218.5833333333328, -0.22222222222234222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1214.25, 2)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1211.0277777777774, 4.222222222222058)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1207.4722222222222, 8.222222222222058)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1204.805555555555, 8.6666666666665151)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1202.5833333333333, 15.333333333333201)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1197.2499999999995, 18.999999999999886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1197.2499999999995, 27)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1199.9166666666661, 30.444444444444343)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1197.6944444444439, 34.888888888888687)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1199.0277777777776, 42.44444444444423)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1198.1388888888882, 46.44444444444423)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1195.4722222222217, 45.111111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1185.2499999999995, 50)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1184.2499999999995, 56.999999999999829)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1181.6944444444443, 56.222222222222058)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1177.6944444444443, 59.777777777777601)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1173.25, 59)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1174.25, 64.999999999999829)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1168.3611111111106, 67.333333333333144)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1163.0277777777774, 68.666666666666515)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1157.2499999999995, 67)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1152.3611111111106, 74.44444444444423)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1147.2499999999995, 77)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1148.805555555555, 82.4444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1147.0277777777774, 87.777777777777601)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1144.805555555555, 87.777777777777601)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1145.6944444444439, 93.555555555555316)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1153.2499999999993, 98)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1167.2499999999995, 110.99999999999983)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1173.25, 126.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1179.4722222222222, 136.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1184.805555555555, 136.222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1190.1388888888882, 141.11111111111092)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1189.6944444444443, 146.88888888888869)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1189.2499999999995, 152.222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1191.2499999999995, 156.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1191.2499999999995, 171.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1188.25, 184.99999999999983)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1195.2499999999995, 183.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1193.2499999999995, 198)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1184.2499999999995, 208.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1178.25, 212.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1174.1388888888882, 210.88888888888869)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1172.3611111111106, 208.222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1172.3611111111106, 212.222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1164.2499999999995, 213.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1162.1388888888882, 216.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1159.4722222222217, 213.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1157.2499999999995, 213.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1161.25, 220.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1156.3611111111106, 220.222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1154.5833333333328, 215.77777777777749)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1149.6944444444439, 216.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1152.805555555555, 217.55555555555532)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1154.1388888888882, 222.88888888888869)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1149.2499999999995, 222.44444444444417)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1148.3611111111106, 219.33333333333309)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1145.2499999999995, 218.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1147.0277777777774, 223.33333333333309)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1139.9166666666661, 229.55555555555532)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1140.805555555555, 225.55555555555532)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1143.9166666666665, 221.55555555555532)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1136.805555555555, 222.88888888888869)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1135.0277777777774, 228.222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1131.9166666666665, 228.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1130.5833333333328, 225.11111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1128.3611111111106, 229.55555555555532)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1128.2499999999995, 232.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1124.3611111111106, 233.11111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1124.805555555555, 226.4444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1121.25, 226.4444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1120.805555555555, 230.44444444444417)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1116.805555555555, 231.77777777777749)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1114.2499999999993, 228.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1117.6944444444439, 226.88888888888869)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1119.4722222222217, 221.11111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1121.6944444444443, 222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1124.805555555555, 222.88888888888869)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1125.6944444444439, 217.55555555555532)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1122.2499999999995, 216.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1120.805555555555, 213.11111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1122.5833333333333, 211.33333333333309)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1120.2499999999995, 204.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1123.9166666666661, 195.77777777777749)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1128.2499999999995, 191.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1131.4722222222217, 188.222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1126.5833333333328, 189.11111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1128.2499999999995, 185.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1124.3611111111106, 181.99999999999983)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1124.3611111111106, 168.222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1119.4722222222217, 166.4444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1115.2499999999995, 163.99999999999983)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1119.0277777777774, 159.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1120.805555555555, 161.55555555555532)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1121.6944444444443, 157.55555555555532)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1123.9166666666661, 158.88888888888869)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1124.3611111111106, 156.222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1128.2499999999995, 156.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1132.805555555555, 161.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1131.4722222222217, 156.222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1131.4722222222217, 153.11111111111092)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1127.9166666666661, 151.7777777777776)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1132.3611111111106, 148.222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1127.0277777777776, 145.99999999999983)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1127.25, 140)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1119.25, 134)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1116.3611111111109, 136.222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1114.5833333333328, 133.11111111111092)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1110.2499999999995, 132.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1108.3611111111106, 127.7777777777776)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1105.6944444444439, 129.55555555555532)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1105.6944444444439, 132.222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1104.2499999999995, 138.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1100.805555555555, 136.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1097.6944444444439, 137.55555555555532)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1100.805555555555, 131.77777777777749)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1095.4722222222222, 132.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1089.6944444444439, 130.88888888888869)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1094.5833333333333, 127.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1095.9166666666661, 125.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1083.9166666666661, 125.55555555555532)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1088.2499999999995, 117)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1095.4722222222222, 98)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1099.9166666666661, 91.777777777777601)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1098.5833333333328, 86.444444444444173)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1101.6944444444439, 81.555555555555316)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1097.25, 83.777777777777601)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1096.2499999999993, 81)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1082.25, 78)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1079.4722222222217, 74.888888888888687)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1075.9166666666661, 75.333333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1074.5833333333328, 70.44444444444423)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1072.3611111111106, 76.222222222222001)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1051.2499999999995, 77)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1030.2499999999995, 89)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1024.805555555555, 93.555555555555316)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1018.583333333333, 99.777777777777601)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1015.0277777777774, 104.222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1009.2499999999997, 103.77777777777749)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1004.2499999999997, 108)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1003.2499999999995, 99.999999999999829)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1012.2499999999995, 95.999999999999829)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1014.2499999999997, 87.999999999999829)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1004.2499999999997, 87.999999999999829)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1009.694444444444, 84.222222222222001)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1005.694444444444, 82.888888888888687)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1009.2499999999995, 78.999999999999829)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1010.2499999999997, 72.999999999999829)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1016.805555555555, 72.222222222222001)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1020.2499999999997, 63.999999999999829)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1026.25, 58)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1027.0277777777774, 53.555555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1021.2499999999993, 45.999999999999829)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1002.2499999999997, 42.999999999999829)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1000.2499999999995, 50)) + Result.extend_point (create {EV_COORDINATE}.make_precise (994.13888888888846, 50.44444444444423)) + Result.extend_point (create {EV_COORDINATE}.make_precise (991.24999999999955, 60)) + Result.extend_point (create {EV_COORDINATE}.make_precise (988.24999999999932, 64.999999999999829)) + Result.extend_point (create {EV_COORDINATE}.make_precise (966.25, 72)) + Result.extend_point (create {EV_COORDINATE}.make_precise (960.24999999999966, 83.999999999999829)) + Result.extend_point (create {EV_COORDINATE}.make_precise (957.25, 94)) + Result.extend_point (create {EV_COORDINATE}.make_precise (947.02777777777737, 94)) + Result.extend_point (create {EV_COORDINATE}.make_precise (939.25, 98)) + Result.extend_point (create {EV_COORDINATE}.make_precise (933.24999999999966, 92.999999999999829)) + Result.extend_point (create {EV_COORDINATE}.make_precise (924.24999999999966, 99)) + Result.extend_point (create {EV_COORDINATE}.make_precise (922.13888888888846, 107.7777777777776)) + Result.extend_point (create {EV_COORDINATE}.make_precise (928.24999999999955, 120.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (942.24999999999966, 127.99999999999983)) + Result.extend_point (create {EV_COORDINATE}.make_precise (947.25, 125)) + Result.extend_point (create {EV_COORDINATE}.make_precise (953.25, 127.99999999999983)) + Result.extend_point (create {EV_COORDINATE}.make_precise (958.24999999999955, 136.99999999999983)) + Result.extend_point (create {EV_COORDINATE}.make_precise (954.25, 141.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (956.25, 150.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (965.25, 154.99999999999983)) + Result.extend_point (create {EV_COORDINATE}.make_precise (973.24999999999955, 149.99999999999983)) + Result.extend_point (create {EV_COORDINATE}.make_precise (981.25, 141.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (984.36111111111063, 137.55555555555532)) + Result.extend_point (create {EV_COORDINATE}.make_precise (996.24999999999966, 134)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1005.2499999999997, 140)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1010.1388888888888, 143.77777777777749)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1022.2499999999997, 143)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1036.2499999999995, 147)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1035.4722222222217, 152.222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1032.3611111111106, 153.55555555555532)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1034.2499999999995, 159)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1029.6944444444439, 161.55555555555532)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1021.2499999999993, 159.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1000.8055555555552, 168.222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (998.1388888888888, 174.44444444444423)) + Result.extend_point (create {EV_COORDINATE}.make_precise (995.02777777777737, 172.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (991.24999999999955, 180.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (984.36111111111063, 183.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (983.91666666666629, 179.33333333333331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (978.58333333333326, 180.222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (982.13888888888823, 185.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (977.24999999999966, 188.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (974.25, 192.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (972.36111111111063, 197.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (968.36111111111063, 197.55555555555532)) + Result.extend_point (create {EV_COORDINATE}.make_precise (966.58333333333303, 203.77777777777749)) + Result.extend_point (create {EV_COORDINATE}.make_precise (961.24999999999932, 212.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (959.47222222222183, 216.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (959.02777777777737, 220.222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (962.58333333333326, 220.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (965.25, 225)) + Result.extend_point (create {EV_COORDINATE}.make_precise (973.694444444444, 228.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (983.25, 235.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1001.25, 280)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1008.2499999999997, 283.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1010.2499999999997, 295)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1016.25, 293.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1022.2499999999997, 307.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1016.25, 314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1022.2499999999997, 324.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1008.2499999999997, 326.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1000.2499999999995, 336)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1006.2499999999993, 337.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1017.25, 346.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1024.3611111111106, 344.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1030.583333333333, 348.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1021.694444444444, 348.22222222222183)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1023.9166666666666, 351.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1027.4722222222222, 355.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1022.1388888888888, 354.88888888888846)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1017.25, 359)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1009.2499999999997, 361.11111111111074)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1021.2499999999997, 359.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1021.2499999999997, 365.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1021.694444444444, 373.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1016.805555555555, 369.55555555555509)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1013.25, 372.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1015.0277777777774, 378)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1014.1388888888883, 381.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1010.583333333333, 382.44444444444412)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1013.25, 388.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1014.5833333333333, 394)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1010.583333333333, 392.22222222222183)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1007.0277777777774, 396.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1003.4722222222218, 398.44444444444412)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1003.9166666666663, 392.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1000.2499999999995, 400.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (996.36111111111063, 402.44444444444412)) + Result.extend_point (create {EV_COORDINATE}.make_precise (992.8055555555552, 409.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (991.24999999999955, 415.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (980.25, 427.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (978.58333333333326, 435.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (974.1388888888888, 437.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (976.36111111111063, 432.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (971.91666666666629, 433.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (968.36111111111063, 432.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (968.8055555555552, 436.22222222222183)) + Result.extend_point (create {EV_COORDINATE}.make_precise (972.36111111111063, 439.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (974.1388888888888, 443.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (969.24999999999966, 445.5555555555552)) + Result.extend_point (create {EV_COORDINATE}.make_precise (967.47222222222217, 451.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (969.694444444444, 452.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (967.91666666666629, 456.22222222222183)) + Result.extend_point (create {EV_COORDINATE}.make_precise (967.91666666666629, 459.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (964.80555555555497, 460.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (971.02777777777737, 461.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (972.8055555555552, 464.22222222222183)) + Result.extend_point (create {EV_COORDINATE}.make_precise (968.8055555555552, 467.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (965.25, 468.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (963.02777777777737, 464.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (957.25, 466)) + Result.extend_point (create {EV_COORDINATE}.make_precise (960.8055555555552, 470.88888888888846)) + Result.extend_point (create {EV_COORDINATE}.make_precise (955.47222222222217, 471.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (953.25, 477)) + Result.extend_point (create {EV_COORDINATE}.make_precise (950.58333333333326, 481.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (944.8055555555552, 481.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (948.36111111111063, 483.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (944.36111111111063, 488.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (941.694444444444, 486.444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (942.13888888888835, 491.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (936.8055555555552, 490.444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (935.47222222222183, 486.88888888888846)) + Result.extend_point (create {EV_COORDINATE}.make_precise (930.58333333333303, 490.444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (934.13888888888846, 494.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (930.13888888888835, 497.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (928.36111111111063, 502.88888888888846)) + Result.extend_point (create {EV_COORDINATE}.make_precise (924.8055555555552, 500.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (923.02777777777737, 505.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (919.91666666666629, 505.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (917.694444444444, 511.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (915.02777777777737, 509.5555555555552)) + Result.extend_point (create {EV_COORDINATE}.make_precise (908.36111111111063, 513.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (903.02777777777737, 518.444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (898.58333333333326, 523.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (896.36111111111063, 527.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (891.91666666666663, 527.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (879.47222222222217, 531.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (874.25, 529.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (875.91666666666629, 535.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (869.694444444444, 534)) + Result.extend_point (create {EV_COORDINATE}.make_precise (867.02777777777737, 531.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (862.13888888888846, 534)) + Result.extend_point (create {EV_COORDINATE}.make_precise (859.02777777777737, 538)) + Result.extend_point (create {EV_COORDINATE}.make_precise (856.36111111111063, 532.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (853.694444444444, 533.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (852.24999999999966, 537)) + Result.extend_point (create {EV_COORDINATE}.make_precise (846.13888888888846, 537.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (847.47222222222217, 542.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (844.8055555555552, 546.444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (840.24999999999966, 547)) + Result.extend_point (create {EV_COORDINATE}.make_precise (838.58333333333303, 541.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (835.02777777777737, 537.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (832.24999999999966, 532)) + Result.extend_point (create {EV_COORDINATE}.make_precise (831.91666666666663, 543.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (828.25, 550.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (823.47222222222217, 550)) + Result.extend_point (create {EV_COORDINATE}.make_precise (823.02777777777737, 553.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (819.47222222222183, 546.88888888888846)) + Result.extend_point (create {EV_COORDINATE}.make_precise (817.69444444444412, 551.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (815.02777777777737, 554.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (812.36111111111074, 551.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (808.8055555555552, 557.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (803.91666666666629, 555.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (794.58333333333303, 556.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (795.02777777777737, 559.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (789.69444444444412, 562.444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (788.36111111111109, 556.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (787.47222222222183, 562.88888888888846)) + Result.extend_point (create {EV_COORDINATE}.make_precise (778.58333333333303, 564.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (765.25, 565.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (762.13888888888846, 573.5555555555552)) + Result.extend_point (create {EV_COORDINATE}.make_precise (763.91666666666629, 578.444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (756.8055555555552, 575.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (759.02777777777737, 571.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (754.58333333333303, 574.444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (753.24999999999966, 578.88888888888846)) + Result.extend_point (create {EV_COORDINATE}.make_precise (757.25, 579.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (757.25, 581.5555555555552)) + Result.extend_point (create {EV_COORDINATE}.make_precise (758.58333333333303, 584.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (761.24999999999966, 586.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (756.25, 594)) + Result.extend_point (create {EV_COORDINATE}.make_precise (746.24999999999966, 592.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (746.13888888888846, 587.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (740.25, 583)) + Result.extend_point (create {EV_COORDINATE}.make_precise (743.02777777777749, 580.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (740.25, 574)) + Result.extend_point (create {EV_COORDINATE}.make_precise (743.9166666666664, 568.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (746.13888888888846, 564.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (741.25, 564)) + Result.extend_point (create {EV_COORDINATE}.make_precise (728.36111111111109, 565.5555555555552)) + Result.extend_point (create {EV_COORDINATE}.make_precise (729.25, 561.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (718.24999999999977, 559.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (716.80555555555532, 553.5555555555552)) + Result.extend_point (create {EV_COORDINATE}.make_precise (715.9166666666664, 561.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (697.24999999999977, 564)) + Result.extend_point (create {EV_COORDINATE}.make_precise (695.9166666666664, 568.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (690.13888888888869, 569.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (694.58333333333303, 570.88888888888835)) + Result.extend_point (create {EV_COORDINATE}.make_precise (693.24999999999977, 574)) + Result.extend_point (create {EV_COORDINATE}.make_precise (683.02777777777749, 577.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (678.13888888888869, 579.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (675.02777777777749, 583.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (675.25, 592)) + Result.extend_point (create {EV_COORDINATE}.make_precise (660.25, 598.99999999999932)) + Result.extend_point (create {EV_COORDINATE}.make_precise (653.24999999999977, 608.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (650.58333333333303, 624.66666666666629)) + Result.extend_point (create {EV_COORDINATE}.make_precise (655.47222222222217, 635.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (666.24999999999977, 643.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (668.24999999999977, 655.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (682.25, 670.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (687.25, 678.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (704.25, 691.99999999999932)) + Result.extend_point (create {EV_COORDINATE}.make_precise (714.13888888888846, 704.22222222222172)) + Result.extend_point (create {EV_COORDINATE}.make_precise (730.25, 741)) + Result.extend_point (create {EV_COORDINATE}.make_precise (729.25, 793.55555555555497)) + Result.extend_point (create {EV_COORDINATE}.make_precise (620.80555555555543, 818.59259259259238)) + Result.extend_point (create {EV_COORDINATE}.make_precise (584.06481481481478, 788.07407407407391)) + Result.extend_point (create {EV_COORDINATE}.make_precise (576.36111111111109, 786.29629629629608)) + Result.extend_point (create {EV_COORDINATE}.make_precise (576.65740740740739, 790.74074074074042)) + Result.extend_point (create {EV_COORDINATE}.make_precise (573.99074074074065, 791.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (574.25, 784.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (566.58333333333314, 777.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (559.25, 774.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (548.36111111111086, 774)) + Result.extend_point (create {EV_COORDINATE}.make_precise (540.24999999999977, 776)) + Result.extend_point (create {EV_COORDINATE}.make_precise (543.0277777777776, 756.22222222222172)) + Result.extend_point (create {EV_COORDINATE}.make_precise (536.80555555555532, 754.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (527.91666666666663, 754.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (521.25, 758.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (523.02777777777749, 766)) + Result.extend_point (create {EV_COORDINATE}.make_precise (520.80555555555532, 774)) + Result.extend_point (create {EV_COORDINATE}.make_precise (519.91666666666663, 784.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (518.13888888888869, 790.88888888888823)) + Result.extend_point (create {EV_COORDINATE}.make_precise (515.47222222222194, 795.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (511.472222222222, 804.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (510.58333333333309, 813.55555555555475)) + Result.extend_point (create {EV_COORDINATE}.make_precise (509.24999999999983, 817.55555555555475)) + Result.extend_point (create {EV_COORDINATE}.make_precise (504.80555555555532, 822.88888888888823)) + Result.extend_point (create {EV_COORDINATE}.make_precise (502.13888888888869, 839.33333333333235)) + Result.extend_point (create {EV_COORDINATE}.make_precise (502.58333333333331, 845.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (506.13888888888869, 849.55555555555497)) + Result.extend_point (create {EV_COORDINATE}.make_precise (504.36111111111092, 851.7777777777776)) + Result.extend_point (create {EV_COORDINATE}.make_precise (506.58333333333314, 854.88888888888823)) + Result.extend_point (create {EV_COORDINATE}.make_precise (511.472222222222, 853.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (515.47222222222194, 851.7777777777776)) + Result.extend_point (create {EV_COORDINATE}.make_precise (519.02777777777749, 853.55555555555497)) + Result.extend_point (create {EV_COORDINATE}.make_precise (520.36111111111109, 862)) + Result.extend_point (create {EV_COORDINATE}.make_precise (521.25, 868.22222222222172)) + Result.extend_point (create {EV_COORDINATE}.make_precise (524.80555555555532, 873.55555555555475)) + Result.extend_point (create {EV_COORDINATE}.make_precise (527.02777777777749, 872.22222222222172)) + Result.extend_point (create {EV_COORDINATE}.make_precise (527.91666666666663, 878)) + Result.extend_point (create {EV_COORDINATE}.make_precise (531.02777777777749, 890.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (534.58333333333314, 900.22222222222172)) + Result.extend_point (create {EV_COORDINATE}.make_precise (543.91666666666663, 907.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (551.02777777777749, 908.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (556.36111111111109, 907.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (561.24999999999977, 916.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (570.13888888888869, 922.88888888888823)) + Result.extend_point (create {EV_COORDINATE}.make_precise (564.80555555555532, 930.44444444444389)) + Result.extend_point (create {EV_COORDINATE}.make_precise (563.02777777777749, 934.88888888888823)) + Result.extend_point (create {EV_COORDINATE}.make_precise (557.24999999999977, 930.44444444444389)) + Result.extend_point (create {EV_COORDINATE}.make_precise (551.91666666666652, 931.77777777777692)) + Result.extend_point (create {EV_COORDINATE}.make_precise (547.0277777777776, 928.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (546.58333333333303, 923.7777777777776)) + Result.extend_point (create {EV_COORDINATE}.make_precise (542.13888888888869, 922.44444444444366)) + Result.extend_point (create {EV_COORDINATE}.make_precise (538.13888888888869, 916.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (532.80555555555532, 916.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (527.02777777777749, 911.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (524.36111111111086, 918.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (519.91666666666663, 911.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (515.02777777777749, 909.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (514.58333333333326, 904.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (510.58333333333309, 898)) + Result.extend_point (create {EV_COORDINATE}.make_precise (507.91666666666652, 899.33333333333258)) + Result.extend_point (create {EV_COORDINATE}.make_precise (505.6944444444444, 890.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (506.13888888888869, 886.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (503.0277777777776, 890.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (500.80555555555532, 894.88888888888823)) + Result.extend_point (create {EV_COORDINATE}.make_precise (499.472222222222, 885.55555555555475)) + Result.extend_point (create {EV_COORDINATE}.make_precise (497.25, 882.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (492.80555555555532, 881.55555555555475)) + Result.extend_point (create {EV_COORDINATE}.make_precise (489.6944444444444, 875.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (491.02777777777749, 869.55555555555475)) + Result.extend_point (create {EV_COORDINATE}.make_precise (486.13888888888869, 875.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (486.58333333333303, 879.7777777777776)) + Result.extend_point (create {EV_COORDINATE}.make_precise (486.58333333333303, 884.22222222222172)) + Result.extend_point (create {EV_COORDINATE}.make_precise (483.91666666666652, 886.88888888888823)) + Result.extend_point (create {EV_COORDINATE}.make_precise (482.13888888888869, 879.7777777777776)) + Result.extend_point (create {EV_COORDINATE}.make_precise (480.80555555555532, 869.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (481.24999999999983, 856.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (484.80555555555532, 851.7777777777776)) + Result.extend_point (create {EV_COORDINATE}.make_precise (488.36111111111109, 837.55555555555497)) + Result.extend_point (create {EV_COORDINATE}.make_precise (487.472222222222, 831.3333333333328)) + Result.extend_point (create {EV_COORDINATE}.make_precise (487.472222222222, 827.33333333333258)) + Result.extend_point (create {EV_COORDINATE}.make_precise (486.13888888888869, 820.22222222222172)) + Result.extend_point (create {EV_COORDINATE}.make_precise (489.6944444444444, 816.22222222222172)) + Result.extend_point (create {EV_COORDINATE}.make_precise (491.91666666666663, 815.33333333333235)) + Result.extend_point (create {EV_COORDINATE}.make_precise (491.02777777777749, 809.55555555555475)) + Result.extend_point (create {EV_COORDINATE}.make_precise (492.80555555555532, 807.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (492.80555555555532, 802.88888888888823)) + Result.extend_point (create {EV_COORDINATE}.make_precise (492.36111111111109, 796.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (489.24999999999983, 796.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (489.24999999999983, 794)) + Result.extend_point (create {EV_COORDINATE}.make_precise (487.0277777777776, 794)) + Result.extend_point (create {EV_COORDINATE}.make_precise (485.69444444444423, 788.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (487.91666666666652, 790.44444444444389)) + Result.extend_point (create {EV_COORDINATE}.make_precise (491.472222222222, 790.44444444444389)) + Result.extend_point (create {EV_COORDINATE}.make_precise (488.36111111111109, 785.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (487.472222222222, 781.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (483.472222222222, 782.88888888888823)) + Result.extend_point (create {EV_COORDINATE}.make_precise (483.02777777777749, 778.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (483.472222222222, 774)) + Result.extend_point (create {EV_COORDINATE}.make_precise (485.69444444444423, 776.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (488.36111111111109, 778.88888888888823)) + Result.extend_point (create {EV_COORDINATE}.make_precise (490.13888888888869, 775.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (491.02777777777749, 772.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (489.24999999999983, 762.88888888888823)) + Result.extend_point (create {EV_COORDINATE}.make_precise (485.25, 755.33333333333258)) + Result.extend_point (create {EV_COORDINATE}.make_precise (482.13888888888869, 750.444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (480.36111111111109, 754.88888888888823)) + Result.extend_point (create {EV_COORDINATE}.make_precise (478.13888888888869, 750.444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (478.58333333333331, 742.88888888888835)) + Result.extend_point (create {EV_COORDINATE}.make_precise (477.69444444444423, 738.444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (475.47222222222206, 733.55555555555497)) + Result.extend_point (create {EV_COORDINATE}.make_precise (472.80555555555554, 725.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (470.58333333333314, 713.55555555555497)) + Result.extend_point (create {EV_COORDINATE}.make_precise (469.25, 706.88888888888835)) + Result.extend_point (create {EV_COORDINATE}.make_precise (469.25, 700.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (467.0277777777776, 697.55555555555497)) + Result.extend_point (create {EV_COORDINATE}.make_precise (465.25, 690.88888888888835)) + Result.extend_point (create {EV_COORDINATE}.make_precise (461.25, 684.22222222222172)) + Result.extend_point (create {EV_COORDINATE}.make_precise (459.0277777777776, 680.22222222222172)) + Result.extend_point (create {EV_COORDINATE}.make_precise (456.36111111111109, 672.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (456.80555555555537, 669.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (453.69444444444423, 672.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (450.58333333333309, 671.3333333333328)) + Result.extend_point (create {EV_COORDINATE}.make_precise (450.58333333333309, 673.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (448.36111111111109, 674.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (448.36111111111109, 678.88888888888835)) + Result.extend_point (create {EV_COORDINATE}.make_precise (444.36111111111109, 682.88888888888835)) + Result.extend_point (create {EV_COORDINATE}.make_precise (439.91666666666652, 684.22222222222172)) + Result.extend_point (create {EV_COORDINATE}.make_precise (436.36111111111092, 678.444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (439.02777777777766, 685.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (432.80555555555554, 687.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (431.91666666666652, 690.444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (426.13888888888869, 691.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (424.80555555555554, 694.44444444444355)) + Result.extend_point (create {EV_COORDINATE}.make_precise (419.91666666666652, 700.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (416.36111111111097, 701.55555555555497)) + Result.extend_point (create {EV_COORDINATE}.make_precise (412.80555555555543, 701.55555555555497)) + Result.extend_point (create {EV_COORDINATE}.make_precise (410.58333333333331, 698.444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (411.02777777777766, 692.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (408.36111111111097, 701.55555555555497)) + Result.extend_point (create {EV_COORDINATE}.make_precise (404.36111111111097, 702)) + Result.extend_point (create {EV_COORDINATE}.make_precise (400.36111111111109, 700.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (397.6944444444444, 696.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (395.02777777777766, 698.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (393.69444444444434, 696.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (399.91666666666652, 690.444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (400.36111111111109, 683.7777777777776)) + Result.extend_point (create {EV_COORDINATE}.make_precise (398.13888888888869, 688.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (390.13888888888874, 697.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (389.69444444444434, 690.444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (393.69444444444434, 678.88888888888835)) + Result.extend_point (create {EV_COORDINATE}.make_precise (396.80555555555554, 662.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (394.58333333333331, 644.22222222222172)) + Result.extend_point (create {EV_COORDINATE}.make_precise (387.02777777777766, 629.55555555555497)) + Result.extend_point (create {EV_COORDINATE}.make_precise (386.13888888888874, 620.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (383.91666666666652, 622.44444444444366)) + Result.extend_point (create {EV_COORDINATE}.make_precise (383.47222222222206, 627.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (379.02777777777771, 625.55555555555486)) + Result.extend_point (create {EV_COORDINATE}.make_precise (375.91666666666652, 620.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (373.24999999999989, 614.444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (374.58333333333331, 613.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (378.13888888888874, 615.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (380.80555555555543, 618.444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (381.24999999999989, 615.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (377.69444444444434, 610.44444444444366)) + Result.extend_point (create {EV_COORDINATE}.make_precise (378.58333333333314, 604.22222222222183)) + Result.extend_point (create {EV_COORDINATE}.make_precise (373.24999999999989, 601.55555555555486)) + Result.extend_point (create {EV_COORDINATE}.make_precise (375.47222222222206, 606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (371.91666666666652, 606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (369.25, 599.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (365.69444444444434, 600.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (360.80555555555543, 597.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (362.58333333333326, 593.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (359.47222222222206, 597.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (356.80555555555543, 595.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (356.80555555555543, 586.44444444444366)) + Result.extend_point (create {EV_COORDINATE}.make_precise (355.02777777777766, 594)) + Result.extend_point (create {EV_COORDINATE}.make_precise (351.47222222222211, 586.88888888888846)) + Result.extend_point (create {EV_COORDINATE}.make_precise (345.69444444444434, 579.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (338.13888888888874, 569.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (335.91666666666657, 554.444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (337.24999999999989, 552.22222222222183)) + Result.extend_point (create {EV_COORDINATE}.make_precise (333.24999999999989, 542.444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (331.47222222222217, 536.22222222222183)) + Result.extend_point (create {EV_COORDINATE}.make_precise (326.58333333333326, 533.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (327.02777777777766, 536.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (329.69444444444434, 540.22222222222183)) + Result.extend_point (create {EV_COORDINATE}.make_precise (328.36111111111097, 542.444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (325.24999999999989, 538.44444444444366)) + Result.extend_point (create {EV_COORDINATE}.make_precise (322.13888888888874, 539.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (320.36111111111097, 542.444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (320.80555555555543, 546)) + Result.extend_point (create {EV_COORDINATE}.make_precise (316.36111111111097, 550)) + Result.extend_point (create {EV_COORDINATE}.make_precise (316.36111111111097, 543.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (315.91666666666657, 535.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (309.24999999999989, 525.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (307.47222222222211, 516.22222222222183)) + Result.extend_point (create {EV_COORDINATE}.make_precise (306.1388888888888, 517.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (307.02777777777777, 526.44444444444366)) + Result.extend_point (create {EV_COORDINATE}.make_precise (310.13888888888874, 528.22222222222149)) + Result.extend_point (create {EV_COORDINATE}.make_precise (311.02777777777766, 532.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (313.24999999999989, 538.88888888888846)) + Result.extend_point (create {EV_COORDINATE}.make_precise (312.80555555555554, 545.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (309.69444444444434, 550.44444444444366)) + Result.extend_point (create {EV_COORDINATE}.make_precise (304.36111111111103, 554.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (297.25, 555.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (294.1388888888888, 552.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (291.02777777777777, 549.5555555555552)) + Result.extend_point (create {EV_COORDINATE}.make_precise (290.58333333333326, 555.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (283.91666666666663, 558.444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (278.58333333333326, 557.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (278.58333333333326, 559.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (273.25, 559.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (270.1388888888888, 557.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (269.24999999999994, 561.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (266.1388888888888, 561.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (264.80555555555549, 555.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (263.02777777777771, 563.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (259.47222222222217, 562.44444444444366)) + Result.extend_point (create {EV_COORDINATE}.make_precise (260.80555555555543, 556.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (257.69444444444434, 561.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (255.02777777777771, 561.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (254.58333333333326, 557.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (251.02777777777777, 560.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (248.80555555555546, 559.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (251.02777777777777, 553.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (254.58333333333326, 547.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (252.36111111111103, 546.88888888888835)) + Result.extend_point (create {EV_COORDINATE}.make_precise (247.91666666666663, 553.99999999999932)) + Result.extend_point (create {EV_COORDINATE}.make_precise (244.80555555555549, 559.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (236.80555555555546, 560.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (231.47222222222217, 561.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (224.36111111111106, 565.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (222.58333333333331, 573.5555555555552)) + Result.extend_point (create {EV_COORDINATE}.make_precise (223.47222222222217, 581.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (227.47222222222217, 581.55555555555497)) + Result.extend_point (create {EV_COORDINATE}.make_precise (223.02777777777777, 585.5555555555552)) + Result.extend_point (create {EV_COORDINATE}.make_precise (220.80555555555551, 589.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (225.24999999999994, 587.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (219.9166666666666, 592.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (214.13888888888889, 598.88888888888846)) + Result.extend_point (create {EV_COORDINATE}.make_precise (205.6944444444444, 603.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (190.13888888888886, 609.55555555555497)) + Result.extend_point (create {EV_COORDINATE}.make_precise (175.02777777777777, 621.99999999999966)) + -- Modified from grabber points to stay within boarder +-- Result.extend_point (create {EV_COORDINATE}.make_precise (157.25, 643.3333333333328)) +-- Result.extend_point (create {EV_COORDINATE}.make_precise (146.58333333333331, 652.22222222222172)) +-- Result.extend_point (create {EV_COORDINATE}.make_precise (137.69444444444446, 658.44444444444366)) + -- new modified point (at bottom left of Asia + Result.extend_point (create {EV_COORDINATE}.make_precise (162, 650)) + end + + hainan_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (763.02777777777737, 601.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (760.8055555555552, 598.88888888888846)) + Result.extend_point (create {EV_COORDINATE}.make_precise (764.8055555555552, 596.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (767.47222222222217, 599.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (770.5833333333328, 599.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (771.47222222222217, 608.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (765.25, 615.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (763.91666666666617, 618.88888888888835)) + Result.extend_point (create {EV_COORDINATE}.make_precise (763.02777777777737, 625.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (759.91666666666663, 628.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (761.69444444444412, 630.444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (759.02777777777737, 631.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (756.36111111111074, 631.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (751.02777777777737, 634.88888888888823)) + Result.extend_point (create {EV_COORDINATE}.make_precise (751.47222222222217, 638.444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (749.25, 639.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (746.58333333333303, 637.99999999999932)) + Result.extend_point (create {EV_COORDINATE}.make_precise (742.58333333333303, 640.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (743.9166666666664, 642.444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (738.13888888888846, 643.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (735.9166666666664, 641.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (731.02777777777737, 641.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (724.80555555555532, 639.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (721.69444444444412, 637.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (719.02777777777715, 636.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (718.58333333333303, 631.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (717.69444444444412, 627.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (718.13888888888869, 620.66666666666606)) + Result.extend_point (create {EV_COORDINATE}.make_precise (718.13888888888869, 616.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (724.36111111111086, 611.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (729.69444444444412, 607.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (729.25, 605.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (732.80555555555532, 603.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (737.24999999999977, 604.22222222222183)) + Result.extend_point (create {EV_COORDINATE}.make_precise (738.13888888888846, 600.22222222222149)) + Result.extend_point (create {EV_COORDINATE}.make_precise (741.25, 600.22222222222149)) + Result.extend_point (create {EV_COORDINATE}.make_precise (744.8055555555552, 600.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (749.69444444444412, 600.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (753.24999999999966, 598.88888888888846)) + Result.extend_point (create {EV_COORDINATE}.make_precise (757.25, 597.5555555555552)) + end + + taiwan_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (1009.2499999999995, 473.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1009.694444444444, 469.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1012.8055555555549, 469.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1015.0277777777774, 472.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1019.0277777777774, 473.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1023.0277777777774, 477.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1020.3611111111106, 478.88888888888846)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1017.6944444444437, 483.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1019.4722222222218, 488.22222222222183)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1019.4722222222218, 494.444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1014.1388888888883, 499.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1013.25, 501.55555555555497)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1012.8055555555549, 512.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1009.694444444444, 520.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1007.4722222222215, 527.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1000.805555555555, 533.55555555555497)) + Result.extend_point (create {EV_COORDINATE}.make_precise (998.1388888888888, 539.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (997.694444444444, 544.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (997.694444444444, 550.44444444444366)) + Result.extend_point (create {EV_COORDINATE}.make_precise (995.47222222222149, 553.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (993.25, 553.11111111111063)) + Result.extend_point (create {EV_COORDINATE}.make_precise (992.36111111111063, 550)) + Result.extend_point (create {EV_COORDINATE}.make_precise (992.36111111111063, 547.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (989.694444444444, 542.444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (987.02777777777737, 540.22222222222183)) + Result.extend_point (create {EV_COORDINATE}.make_precise (983.02777777777737, 538.88888888888846)) + Result.extend_point (create {EV_COORDINATE}.make_precise (980.8055555555552, 528.66666666666617)) + Result.extend_point (create {EV_COORDINATE}.make_precise (978.13888888888823, 524.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (979.47222222222183, 518.444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (980.36111111111063, 506.444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (983.02777777777737, 505.99999999999955)) + Result.extend_point (create {EV_COORDINATE}.make_precise (985.694444444444, 498)) + Result.extend_point (create {EV_COORDINATE}.make_precise (990.58333333333303, 491.77777777777737)) + Result.extend_point (create {EV_COORDINATE}.make_precise (991.91666666666606, 487.33333333333303)) + Result.extend_point (create {EV_COORDINATE}.make_precise (994.58333333333269, 484.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (998.1388888888888, 478.444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1003.0277777777774, 474.88888888888835)) + end + +feature {NONE} -- Implmenetation (Kamchatka polygons) + + kamchatsky_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points modified after grabber to fit in boarder +-- Result.extend_point (create {EV_COORDINATE}.make_precise (-150, -200)) + -- Points generated by Grabber application +-- Result.extend_point (create {EV_COORDINATE}.make_precise (0, 0)) +-- Result.extend_point (create {EV_COORDINATE}.make_precise (-6.6666666666667425, -48)) +-- Result.extend_point (create {EV_COORDINATE}.make_precise (-13.333333333333712, -83.333333333333329)) +-- Result.extend_point (create {EV_COORDINATE}.make_precise (355.33333333333326, -132)) + -- modified point + Result.extend_point (create {EV_COORDINATE}.make_precise (-10, 20)) +-- Result.extend_point (create {EV_COORDINATE}.make_precise (355.33333333333326, -10)) + +-- Result.extend_point (create {EV_COORDINATE}.make_precise (353.33333333333326, -120)) +-- Result.extend_point (create {EV_COORDINATE}.make_precise (348, -106.66666666666666)) +-- Result.extend_point (create {EV_COORDINATE}.make_precise (343.33333333333326, -93.333333333333329)) +-- Result.extend_point (create {EV_COORDINATE}.make_precise (342.66666666666652, -74.666666666666657)) +-- Result.extend_point (create {EV_COORDINATE}.make_precise (345.33333333333326, -65.333333333333329)) +-- Result.extend_point (create {EV_COORDINATE}.make_precise (348.66666666666652, -68)) +-- Result.extend_point (create {EV_COORDINATE}.make_precise (347.33333333333326, -59.333333333333329)) + Result.extend_point (create {EV_COORDINATE}.make_precise (353.33333333333326, -52)) + Result.extend_point (create {EV_COORDINATE}.make_precise (352.66666666666652, -34.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (346.66666666666652, -36.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (342, -40)) + Result.extend_point (create {EV_COORDINATE}.make_precise (342.66666666666652, -34)) + Result.extend_point (create {EV_COORDINATE}.make_precise (342.66666666666652, -24)) + Result.extend_point (create {EV_COORDINATE}.make_precise (344.66666666666652, -22)) + Result.extend_point (create {EV_COORDINATE}.make_precise (349.33333333333326, -22.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (350, -18.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (346.66666666666652, -12)) + Result.extend_point (create {EV_COORDINATE}.make_precise (354, -14)) + Result.extend_point (create {EV_COORDINATE}.make_precise (352.66666666666652, -8.6666666666666572)) + Result.extend_point (create {EV_COORDINATE}.make_precise (348, -2.6666666666666572)) + Result.extend_point (create {EV_COORDINATE}.make_precise (351.33333333333326, 4)) + Result.extend_point (create {EV_COORDINATE}.make_precise (353.33333333333326, -0.66666666666665719)) + Result.extend_point (create {EV_COORDINATE}.make_precise (358, -2.6666666666666572)) + Result.extend_point (create {EV_COORDINATE}.make_precise (356.66666666666652, 4)) + Result.extend_point (create {EV_COORDINATE}.make_precise (361.33333333333326, 4)) + Result.extend_point (create {EV_COORDINATE}.make_precise (360.66666666666652, 10.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (361.33333333333326, 16.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (358.66666666666652, 23.333333333333343)) + Result.extend_point (create {EV_COORDINATE}.make_precise (350.66666666666652, 18)) + Result.extend_point (create {EV_COORDINATE}.make_precise (333.33333333333326, 7.3333333333333428)) + Result.extend_point (create {EV_COORDINATE}.make_precise (336.66666666666652, 0.66666666666665719)) + Result.extend_point (create {EV_COORDINATE}.make_precise (341.33333333333326, -4)) + Result.extend_point (create {EV_COORDINATE}.make_precise (338, -4)) + Result.extend_point (create {EV_COORDINATE}.make_precise (330.66666666666652, 4)) + Result.extend_point (create {EV_COORDINATE}.make_precise (326, 1.3333333333333428)) + Result.extend_point (create {EV_COORDINATE}.make_precise (323.33333333333326, -1.3333333333333428)) + Result.extend_point (create {EV_COORDINATE}.make_precise (315.33333333333326, 0.66666666666665719)) + Result.extend_point (create {EV_COORDINATE}.make_precise (308.66666666666652, 4)) + Result.extend_point (create {EV_COORDINATE}.make_precise (301.33333333333326, 14)) + Result.extend_point (create {EV_COORDINATE}.make_precise (297.33333333333326, 12)) + Result.extend_point (create {EV_COORDINATE}.make_precise (290.66666666666652, 12)) + Result.extend_point (create {EV_COORDINATE}.make_precise (278, 18)) + Result.extend_point (create {EV_COORDINATE}.make_precise (263.33333333333326, 28)) + Result.extend_point (create {EV_COORDINATE}.make_precise (255.33333333333326, 34.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (244.66666666666652, 47.333333333333343)) + Result.extend_point (create {EV_COORDINATE}.make_precise (241.33333333333326, 44.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (244, 50.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (239.33333333333326, 53.333333333333343)) + Result.extend_point (create {EV_COORDINATE}.make_precise (237.33333333333326, 46.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (234.66666666666652, 45.333333333333343)) + Result.extend_point (create {EV_COORDINATE}.make_precise (234.66666666666652, 40)) + Result.extend_point (create {EV_COORDINATE}.make_precise (232.66666666666652, 31.333333333333343)) + Result.extend_point (create {EV_COORDINATE}.make_precise (228.66666666666652, 29.333333333333343)) + Result.extend_point (create {EV_COORDINATE}.make_precise (224.66666666666652, 28.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (222.66666666666652, 25.333333333333343)) + Result.extend_point (create {EV_COORDINATE}.make_precise (222.66666666666652, 30)) + Result.extend_point (create {EV_COORDINATE}.make_precise (212.66666666666652, 34.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (213.33333333333326, 38.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (217.33333333333326, 40)) + Result.extend_point (create {EV_COORDINATE}.make_precise (216.66666666666652, 43.333333333333343)) + Result.extend_point (create {EV_COORDINATE}.make_precise (213.33333333333326, 44.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (214.66666666666652, 50.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (222, 52.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (222, 49.333333333333343)) + Result.extend_point (create {EV_COORDINATE}.make_precise (226.66666666666652, 49.333333333333343)) + Result.extend_point (create {EV_COORDINATE}.make_precise (231.33333333333326, 49.333333333333343)) + Result.extend_point (create {EV_COORDINATE}.make_precise (230.66666666666652, 56.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (233.33333333333326, 60)) + Result.extend_point (create {EV_COORDINATE}.make_precise (227.33333333333326, 63.333333333333343)) + Result.extend_point (create {EV_COORDINATE}.make_precise (226.66666666666652, 70.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (222.66666666666652, 68.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (219.33333333333326, 72)) + Result.extend_point (create {EV_COORDINATE}.make_precise (219.33333333333326, 76)) + Result.extend_point (create {EV_COORDINATE}.make_precise (224.66666666666652, 76.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (228, 81.333333333333343)) + Result.extend_point (create {EV_COORDINATE}.make_precise (228, 88.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (225.33333333333326, 92.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (219.33333333333326, 94.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (218, 91.333333333333343)) + Result.extend_point (create {EV_COORDINATE}.make_precise (211.33333333333326, 88.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (214, 94.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (217.33333333333326, 101.99999999999991)) + Result.extend_point (create {EV_COORDINATE}.make_precise (220.66666666666652, 101.33333333333334)) + Result.extend_point (create {EV_COORDINATE}.make_precise (223.33333333333326, 108.66666666666666)) + Result.extend_point (create {EV_COORDINATE}.make_precise (219.33333333333326, 111.33333333333334)) + Result.extend_point (create {EV_COORDINATE}.make_precise (222, 115.99999999999991)) + Result.extend_point (create {EV_COORDINATE}.make_precise (220.66666666666652, 118.66666666666666)) + Result.extend_point (create {EV_COORDINATE}.make_precise (216.66666666666652, 118.66666666666666)) + Result.extend_point (create {EV_COORDINATE}.make_precise (216.66666666666652, 123.33333333333334)) + Result.extend_point (create {EV_COORDINATE}.make_precise (212.66666666666652, 127.33333333333334)) + Result.extend_point (create {EV_COORDINATE}.make_precise (221.33333333333326, 122.66666666666666)) + Result.extend_point (create {EV_COORDINATE}.make_precise (225.33333333333326, 130.66666666666666)) + Result.extend_point (create {EV_COORDINATE}.make_precise (220, 134.66666666666666)) + Result.extend_point (create {EV_COORDINATE}.make_precise (220, 137.99999999999991)) + Result.extend_point (create {EV_COORDINATE}.make_precise (225.33333333333326, 135.99999999999991)) + Result.extend_point (create {EV_COORDINATE}.make_precise (226, 142.66666666666666)) + Result.extend_point (create {EV_COORDINATE}.make_precise (219.33333333333326, 146.66666666666666)) + Result.extend_point (create {EV_COORDINATE}.make_precise (214.66666666666652, 145.33333333333334)) + Result.extend_point (create {EV_COORDINATE}.make_precise (214.66666666666652, 149.99999999999991)) + Result.extend_point (create {EV_COORDINATE}.make_precise (210.66666666666652, 155.33333333333334)) + Result.extend_point (create {EV_COORDINATE}.make_precise (212, 159.99999999999991)) + Result.extend_point (create {EV_COORDINATE}.make_precise (208.66666666666652, 167.99999999999991)) + Result.extend_point (create {EV_COORDINATE}.make_precise (205.33333333333326, 163.99999999999991)) + Result.extend_point (create {EV_COORDINATE}.make_precise (201.33333333333326, 169.33333333333334)) + Result.extend_point (create {EV_COORDINATE}.make_precise (204, 176.66666666666666)) + Result.extend_point (create {EV_COORDINATE}.make_precise (200, 181.33333333333334)) + Result.extend_point (create {EV_COORDINATE}.make_precise (201.33333333333326, 191.33333333333334)) + Result.extend_point (create {EV_COORDINATE}.make_precise (194, 197.99999999999997)) + Result.extend_point (create {EV_COORDINATE}.make_precise (189.33333333333326, 205.99999999999997)) + Result.extend_point (create {EV_COORDINATE}.make_precise (184, 213.99999999999997)) + Result.extend_point (create {EV_COORDINATE}.make_precise (178, 215.99999999999997)) + Result.extend_point (create {EV_COORDINATE}.make_precise (173.33333333333326, 225.33333333333334)) + Result.extend_point (create {EV_COORDINATE}.make_precise (168.66666666666652, 235.33333333333334)) + Result.extend_point (create {EV_COORDINATE}.make_precise (166.66666666666652, 240.66666666666666)) + Result.extend_point (create {EV_COORDINATE}.make_precise (162.66666666666652, 240.66666666666666)) + Result.extend_point (create {EV_COORDINATE}.make_precise (159.33333333333326, 245.99999999999997)) + Result.extend_point (create {EV_COORDINATE}.make_precise (156, 245.33333333333334)) + Result.extend_point (create {EV_COORDINATE}.make_precise (154.66666666666652, 250.66666666666666)) + Result.extend_point (create {EV_COORDINATE}.make_precise (146, 251.33333333333334)) + Result.extend_point (create {EV_COORDINATE}.make_precise (143.33333333333326, 253.99999999999997)) + Result.extend_point (create {EV_COORDINATE}.make_precise (139.33333333333326, 253.33333333333334)) + Result.extend_point (create {EV_COORDINATE}.make_precise (137.33333333333326, 255.99999999999997)) + Result.extend_point (create {EV_COORDINATE}.make_precise (132.66666666666652, 262.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (129.33333333333326, 268)) + Result.extend_point (create {EV_COORDINATE}.make_precise (126.66666666666652, 276)) + Result.extend_point (create {EV_COORDINATE}.make_precise (127.33333333333326, 281.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (118.66666666666652, 281.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (114, 287.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (104.66666666666652, 302.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (100, 303.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (92, 308.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (90.666666666666515, 314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (79.333333333333258, 324.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (74.666666666666515, 328)) + Result.extend_point (create {EV_COORDINATE}.make_precise (69.333333333333258, 331.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (62, 342.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (53.333333333333258, 350.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (51.333333333333258, 348)) + Result.extend_point (create {EV_COORDINATE}.make_precise (60.666666666666515, 336)) + Result.extend_point (create {EV_COORDINATE}.make_precise (61.333333333333258, 323.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (60.666666666666515, 319.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (57.333333333333258, 320.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (58, 309.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (56.666666666666515, 302.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (51.333333333333258, 295.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (46, 295.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (43.333333333333258, 291.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (41.333333333333258, 284.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (39.333333333333258, 271.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (36, 252.66666666666666)) + Result.extend_point (create {EV_COORDINATE}.make_precise (37.333333333333258, 235.99999999999997)) + Result.extend_point (create {EV_COORDINATE}.make_precise (36.666666666666515, 221.33333333333334)) + Result.extend_point (create {EV_COORDINATE}.make_precise (34.666666666666515, 194.66666666666666)) + Result.extend_point (create {EV_COORDINATE}.make_precise (36, 171.33333333333334)) + Result.extend_point (create {EV_COORDINATE}.make_precise (31.333333333333258, 148.66666666666666)) + Result.extend_point (create {EV_COORDINATE}.make_precise (26, 123.33333333333334)) + Result.extend_point (create {EV_COORDINATE}.make_precise (16.666666666666288, 100.66666666666666)) + Result.extend_point (create {EV_COORDINATE}.make_precise (13.333333333333258, 89.333333333333343)) + Result.extend_point (create {EV_COORDINATE}.make_precise (6.6666666666662877, 70.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (2.6666666666662877, 38.666666666666657)) + end + + shumshu_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (37.333333333333258, 350.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (40, 365.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (34, 376)) + Result.extend_point (create {EV_COORDINATE}.make_precise (30.666666666666515, 378)) + Result.extend_point (create {EV_COORDINATE}.make_precise (30.666666666666515, 384)) + Result.extend_point (create {EV_COORDINATE}.make_precise (22.666666666666515, 384.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (18.666666666666288, 384.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (13.333333333333258, 379.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (8.6666666666662877, 378)) + Result.extend_point (create {EV_COORDINATE}.make_precise (8, 373.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (10, 364)) + Result.extend_point (create {EV_COORDINATE}.make_precise (14, 363.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (24.666666666666515, 353.33333333333337)) + end + + paramushir_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-4.6666666666667425, 364.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (2, 366.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (5.1111111111108585, 366)) + Result.extend_point (create {EV_COORDINATE}.make_precise (6, 370.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (4.2222222222221717, 377.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (4.6666666666662877, 383.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (6.8888888888886868, 386.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (7.7777777777776009, 391.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (5.5555555555552019, 392.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (7.7777777777776009, 401.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (5.1111111111108585, 405.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1.5555555555552019, 404.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-2.8888888888891415, 406.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-6.4444444444447981, 412.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-4.6666666666667425, 417.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-6.8888888888891415, 419.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-9.5555555555556566, 422)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-10, 426.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-13.111111111111313, 430)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-14.888888888889142, 434.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-18, 440.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-22, 440.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-28.222222222222399, 449.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-31.777777777777828, 447.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-43.333333333333712, 449.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-47.333333333333712, 453.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-49.555555555555657, 453.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-54.444444444444798, 457.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-57.555555555555657, 465.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-62.444444444444798, 475.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-63.333333333333712, 470.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-66.888888888889142, 466.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-71.777777777777828, 466.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-78, 467.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-80.222222222222399, 462.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-77.555555555555657, 461.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-74.888888888889142, 454.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-74.888888888889142, 447.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-75.333333333333712, 442.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-78, 442)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-79.777777777777828, 437.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-78.888888888889142, 431.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-76.666666666666742, 430.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-72.666666666666742, 430.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-68.666666666666742, 433.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-66, 433.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-63.333333333333712, 429.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-59.777777777777828, 422.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-53.111111111111313, 423.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-48.666666666666742, 422)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-46.444444444444798, 419.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-42.888888888889142, 421.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-36.222222222222399, 418)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-30, 406)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-27.333333333333712, 401.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-24.222222222222399, 397.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-23.777777777777828, 390.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-21.555555555555657, 387.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-21.111111111111313, 382.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-18.444444444444798, 378.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-14.888888888889142, 372.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-9.5555555555556566, 367.33333333333337)) + end + + atlasov_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-55.777777777777828, 343.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-45.555555555555657, 342.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-42.888888888889142, 345.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-41.555555555555657, 343.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-38.444444444444798, 346)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-36.222222222222399, 350)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-37.555555555555657, 351.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-36.222222222222399, 354.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-38.888888888889142, 358.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-42.444444444444798, 360.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-46.444444444444798, 359.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-49.555555555555657, 359.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-53.555555555555657, 355.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-56.222222222222399, 349.11111111111097)) + end + + onekotan_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-114.88888888888914, 527.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-111.77777777777783, 526)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-111.33333333333371, 528.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-105.55555555555566, 529.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-107.77777777777783, 530.88888888888869)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-106.88888888888914, 536.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-108.2222222222224, 539.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-112.66666666666674, 542.88888888888869)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-114, 548.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-115.77777777777783, 550)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-116.2222222222224, 557.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-112.66666666666674, 561.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-112.66666666666674, 569.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-114.88888888888914, 573.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-118.4444444444448, 574.88888888888869)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-122.88888888888914, 578)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-126.88888888888914, 577.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-130.4444444444448, 577.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-133.55555555555566, 574)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-133.11111111111131, 564.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-129.55555555555566, 556.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-125.55555555555566, 550.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-125.55555555555566, 548.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-122, 542)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-119.77777777777783, 536.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-119.33333333333371, 532.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-115.77777777777783, 530.88888888888869)) + end + + makanrushi_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-155.33333333333371, 510)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-153.11111111111131, 508.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-154.88888888888914, 506)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-152.2222222222224, 501.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-147.77777777777783, 499.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-145.55555555555566, 503.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-146.88888888888914, 506.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-146.4444444444448, 509.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-148.2222222222224, 510.88888888888869)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-152.66666666666674, 511.33333333333337)) + end + + kharimkotan_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-147.77777777777783, 590.88888888888869)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-146, 593.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-142.88888888888914, 592.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-138.88888888888914, 592.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-137.11111111111131, 595.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-134.4444444444448, 596.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-134.4444444444448, 600.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-137.55555555555566, 604.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-139.77777777777783, 603.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-142, 605.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-145.11111111111131, 602)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-146.88888888888914, 597.55555555555554)) + end + + shiashkotan_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-180.66666666666674, 630.88888888888869)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-178, 630)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-176.66666666666674, 627.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-173.55555555555566, 627.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-170.88888888888914, 630.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-168.66666666666674, 631.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-170, 632.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-170.4444444444448, 636.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-174, 637.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-174, 641.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-178.4444444444448, 642)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-181.55555555555566, 643.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-183.33333333333371, 647.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-183.33333333333371, 650.88888888888869)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-186.88888888888914, 652.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-190.4444444444448, 652.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-191.33333333333371, 649.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-190.88888888888914, 645.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-187.77777777777783, 644.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-185.55555555555566, 645.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-181.55555555555566, 640.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-182, 636.22222222222217)) + end + + ekarma_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-195.77777777777783, 618.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-194, 620.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-190, 619.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-188.66666666666674, 623.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-191.77777777777783, 626)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-197.11111111111131, 626)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-197.11111111111131, 623.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-198.88888888888914, 620.22222222222217)) + end + + matua_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-263.33333333333371, 734.88888888888869)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-258.88888888888914, 739.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-254, 741.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-256.2222222222224, 742)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-255.77777777777783, 748.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-258, 746)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-260.66666666666674, 747.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-262, 745.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-265.11111111111131, 743.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-266.4444444444448, 736.22222222222217)) + end + + rasshua_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-277.11111111111131, 777.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-274, 781.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-273.11111111111131, 785.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-274.88888888888914, 789.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-276.2222222222224, 791.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-279.77777777777783, 793.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-280.2222222222224, 795.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-283.33333333333371, 795.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-284.2222222222224, 789.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-282.4444444444448, 788.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-283.33333333333371, 784.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-280.2222222222224, 778.88888888888869)) + end + + ketoy_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-333.55555555555566, 837.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-329.1111111111112, 834.88888888888869)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-328.66666666666674, 837.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-324.2222222222224, 836.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-322, 841.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-320.66666666666674, 843.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-322.88888888888903, 846.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-327.77777777777783, 847.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-332.2222222222224, 847.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-332.66666666666674, 845.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-334, 842.44444444444434)) + end + + simushir_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-353.55555555555566, 863.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-349.1111111111112, 864.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-343.77777777777783, 866.44444444444423)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-345.1111111111112, 869.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-346.88888888888903, 872.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-351.33333333333337, 875.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-353.1111111111112, 875.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-355.33333333333337, 879.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-355.33333333333337, 885.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-356.2222222222224, 888.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-361.55555555555566, 889.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-362.88888888888903, 893.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-365.55555555555566, 896.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-368.2222222222224, 901.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-371.77777777777783, 902.88888888888857)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-374, 905.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-377.1111111111112, 905.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-381.1111111111112, 908.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-383.77777777777783, 913.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-386.44444444444468, 917.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-390.88888888888903, 918.44444444444423)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-392.2222222222224, 917.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-395.33333333333337, 916.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-396.2222222222224, 913.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-398, 907.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-395.77777777777783, 905.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-389.1111111111112, 904.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-386.88888888888903, 905.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-383.77777777777783, 904.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-383.33333333333337, 900.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-380.66666666666674, 899.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-380.66666666666674, 895.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-374.44444444444468, 892.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-371.77777777777783, 888.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-367.77777777777783, 887.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-364.2222222222224, 881.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-360.2222222222224, 873.99999999999966)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-356.2222222222224, 867.77777777777771)) + end + + sakhalin_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + + -- Clockwise from north-east corner. + -- Points modified from Grabber so fit inside boarder. + Result.extend_point (create {EV_COORDINATE}.make_precise (-1155, 270)) + -- Points generated by Grabber application +-- Result.extend_point (create {EV_COORDINATE}.make_precise (-1275, 263.33333333333337)) +-- Result.extend_point (create {EV_COORDINATE}.make_precise (-1155, 243.33333333333334)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1148, 282.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1133, 338.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1129.5555555555557, 360.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1126.8888888888889, 377.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1127.7777777777778, 389.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1121.1111111111111, 421.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1108.6666666666667, 455.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1099.3333333333333, 471.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1101.1111111111111, 475.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1089.1111111111111, 507.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1086.8888888888889, 511.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1088.6666666666667, 513.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1088.6666666666667, 525.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1078, 543.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1079.7777777777778, 546)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1078.8888888888889, 555.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1077.5555555555557, 562.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1075.7777777777778, 569.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1067.3333333333335, 593.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1068.2222222222222, 594.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1063.7777777777778, 610)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1053.5555555555557, 618.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1049.5555555555557, 622.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1045.1111111111111, 625.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1037.1111111111111, 633.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1038.4444444444443, 636.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1037.1111111111111, 640.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1035.7777777777778, 644.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1036.2222222222222, 646.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1038, 649.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1036.6666666666667, 655.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1034, 660.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1030.4444444444443, 662.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1032.2222222222222, 664.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1034.8888888888889, 663.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1037.5555555555557, 663.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1038.4444444444443, 658.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1041.5555555555557, 654)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1040.2222222222222, 646.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1042.8888888888889, 643.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1043.7777777777778, 640.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1044.2222222222222, 638.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1046.4444444444443, 636.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1049.1111111111111, 630)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1051.3333333333335, 627.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1053.1111111111111, 623.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1055.3333333333335, 622.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1059.3333333333335, 616.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1062.8888888888889, 613.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1069.5555555555557, 610.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1071.3333333333335, 604.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1073.5555555555557, 605.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1078.4444444444443, 595.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1080.6666666666667, 594)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1084.2222222222222, 589.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1086.8888888888889, 585.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1091.7777777777778, 582)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1102, 578)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1112.6666666666667, 574.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1126.4444444444443, 572.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1123.3333333333333, 570.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1124.6666666666667, 568.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1137.1111111111111, 566.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1140.2222222222222, 564.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1145.1111111111111, 566.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1149.1111111111111, 564.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1153.1111111111111, 558.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1160.6666666666667, 558)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1162, 556.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1168.6666666666667, 560.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1165.5555555555557, 566.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1162.8888888888889, 565.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1160.6666666666667, 567.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1163.3333333333333, 569.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1159.3333333333333, 569.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1154, 570.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1151.7777777777778, 569.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1142, 569.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1142.8888888888889, 570.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1150.4444444444443, 571.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1160.6666666666667, 573.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1174, 579.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1187.7777777777778, 591.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1193.5555555555557, 598.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1196.6666666666667, 610.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1193.1111111111111, 617.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1192.2222222222222, 627.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1194, 633.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1205.1111111111111, 655.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1213.1111111111111, 679.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1217.5555555555557, 697.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1220.2222222222222, 703.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1220.2222222222222, 707.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1223.7777777777778, 714)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1226.8888888888889, 729.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1232.2222222222222, 750.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1232.2222222222222, 762.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1234, 767.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1232.6666666666667, 770)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1233.5555555555557, 774.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1231.7777777777778, 788.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1224.6666666666667, 808.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1216.6666666666667, 821.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1208.2222222222222, 831.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1206, 830.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1201.5555555555557, 836.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1198.8888888888889, 836.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1192.6666666666667, 845.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1190, 850.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1186.8888888888889, 863.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1186, 868.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1188.2222222222222, 874.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1181.5555555555557, 888.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1181.5555555555557, 897.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1175.3333333333333, 905.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1177.1111111111111, 909.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1183.3333333333333, 905.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1183.7777777777778, 911.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1178.8888888888889, 913.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1178.8888888888889, 920.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1176.2222222222222, 921.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1175.7777777777778, 925.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1170.4444444444443, 923.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1164.2222222222222, 924.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1160.6666666666667, 927.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1157.1111111111111, 926.44444444444423)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1156.2222222222222, 921.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1158.8888888888889, 919.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1162, 918.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1166.4444444444443, 916.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1174.4444444444443, 914.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1175.7777777777778, 912.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1173.5555555555557, 908.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1168.2222222222222, 911.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1161.5555555555557, 913.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1155.3333333333333, 913.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1152.6666666666667, 911.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1152.6666666666667, 908.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1150.8888888888889, 907.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1147.7777777777778, 910.44444444444423)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1145.1111111111111, 924.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1144.6666666666667, 940.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1141.1111111111111, 952.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1138, 966.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1134.8888888888889, 969.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1135.7777777777778, 972.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1138.4444444444443, 973.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1139.3333333333333, 976.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1138, 980.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1142, 981.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1145.1111111111111, 989.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1147.3333333333333, 993.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1149.5555555555557, 1000.6666666666666)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1148.2222222222222, 1004.2222222222221)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1148.6666666666667, 1008.2222222222221)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1151.3333333333333, 1009.9999999999999)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1151.3333333333333, 1014.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1153.5555555555557, 1016.2222222222221)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1155.7777777777778, 1007.3333333333334)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1154.4444444444443, 1003.3333333333334)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1153.1111111111111, 997.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1152.2222222222222, 988.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1155.7777777777778, 980.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1157.5555555555557, 974.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1159.7777777777778, 970.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1161.1111111111111, 962.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1160.6666666666667, 957.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1164.2222222222222, 952.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1172.2222222222222, 943.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1176.6666666666667, 940.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1181.5555555555557, 940.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1188.6666666666667, 941.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1191.7777777777778, 939.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1200.2222222222222, 936.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1203.3333333333333, 938.44444444444423)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1207.3333333333333, 940.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1210.4444444444443, 940.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1212.6666666666667, 936.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1215.3333333333333, 927.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1215.3333333333333, 922.44444444444423)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1219.7777777777778, 920.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1219.3333333333333, 922.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1227.3333333333333, 924.22222222222206)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1234.4444444444443, 928.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1239.3333333333333, 933.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1244.6666666666667, 945.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1247.7777777777778, 954.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1254, 971.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1258, 982.44444444444423)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1258.4444444444443, 993.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1261.1111111111111, 1001.5555555555555)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1263.3333333333333, 1005.5555555555555)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1263.7777777777778, 1013.5555555555555)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1266.4444444444443, 1017.111111111111)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1270.8888888888889, 1017.9999999999999)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1273.5555555555557, 1022.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1273.5555555555557, 1033.9999999999998)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1276.6666666666667, 1031.3333333333333)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1278.8888888888889, 1029.1111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1282, 1023.3333333333334)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1284.2222222222222, 1017.111111111111)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1290.4444444444443, 1012.6666666666666)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1288.2222222222222, 1011.7777777777777)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1288.6666666666667, 1001.5555555555555)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1291.3333333333333, 983.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1293.5555555555557, 969.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1298, 954.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1299.7777777777778, 947.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1299.7777777777778, 939.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1296.6666666666667, 939.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1296.2222222222222, 934.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1296.6666666666667, 926.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1294, 925.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1290.4444444444443, 915.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1287.3333333333333, 905.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1282.4444444444443, 893.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1278.8888888888889, 879.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1276.6666666666667, 865.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1278.8888888888889, 857.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1283.7777777777778, 849.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1285.5555555555557, 845.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1282.4444444444443, 838.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1284.6666666666667, 830)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1286, 816.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1286.4444444444443, 805.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1282.8888888888889, 798.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1282, 790)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1275.3333333333333, 775.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1274, 770.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1267.7777777777778, 761.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1264.2222222222222, 755.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1265.5555555555557, 751.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1267.3333333333333, 731.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1266.8888888888889, 720.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1268.2222222222222, 717.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1267.7777777777778, 711.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1271.3333333333333, 705.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1274.8888888888889, 694)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1284.6666666666667, 679.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1293.5555555555557, 662.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1295.3333333333333, 647.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1293.1111111111111, 639.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1289.1111111111111, 636.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1285.5555555555557, 630.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1286.8888888888889, 625.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1282, 622)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1282, 612.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1279.7777777777778, 609.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1280.6666666666667, 597.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1277.5555555555557, 590.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1274.4444444444443, 582.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1275.7777777777778, 579.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1275.7777777777778, 562)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1272.6666666666667, 555.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1270.4444444444443, 550)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1269.1111111111111, 526)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1268.2222222222222, 521.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1267.3333333333333, 502.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1269.1111111111111, 501.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1270.8888888888889, 488.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1268.2222222222222, 485.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1269.5555555555557, 481.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1268.2222222222222, 472.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1266.4444444444443, 461.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1268.6666666666667, 436.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1271.3333333333333, 431.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1268.2222222222222, 429.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1269.1111111111111, 421.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1274.4444444444443, 411.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1275.7777777777778, 403.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1277.5555555555557, 400.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1278.4444444444443, 389.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1275.7777777777778, 376.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1273.5555555555557, 370.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1273.5555555555557, 358.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1271.7777777777778, 350.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1272.2222222222222, 345.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1265.1111111111111, 339.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1260.6666666666667, 329.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1259.3333333333333, 318.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1258.4444444444443, 309.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1261.5555555555557, 304.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1265.1111111111111, 299.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1266.8888888888889, 291.33333333333337)) + -- Removed to fix land inside border +-- Result.extend_point (create {EV_COORDINATE}.make_precise (-1265.5555555555557, 288.22222222222217)) +-- Result.extend_point (create {EV_COORDINATE}.make_precise (-1268.2222222222222, 283.33333333333337)) +-- Result.extend_point (create {EV_COORDINATE}.make_precise (-1271.3333333333333, 280.22222222222217)) +-- Result.extend_point (create {EV_COORDINATE}.make_precise (-1273.5555555555557, 272.66666666666663)) +-- Result.extend_point (create {EV_COORDINATE}.make_precise (-1275.3333333333333, 268.22222222222217)) + end + + +invariant + + is_valid_sea_area: attached target_imp implies sea_area = game.japanese_islands + +end diff --git a/jj_vitp/Interface/widgets/sea_area_widgets/marianas_islands_widget.e b/jj_vitp/Interface/widgets/sea_area_widgets/marianas_islands_widget.e new file mode 100644 index 0000000..2d7317b --- /dev/null +++ b/jj_vitp/Interface/widgets/sea_area_widgets/marianas_islands_widget.e @@ -0,0 +1,281 @@ +note + description: "[ + Widget that represents this VITP sea area + ]" + author: "Jimmy J. Johnson" + +class + MARIANAS_ISLANDS_WIDGET + +inherit + + SEA_AREA_WIDGET + redefine + create_interface_objects, + position_widgets, + build_land, + build_ocean +-- build_bounding_figure + end + +create + make + +feature {NONE} -- Initialization + + create_interface_objects + -- Initialize attributes + do + Precursor {SEA_AREA_WIDGET} + iwo_jima := iwo_jima_imp + tinian := tinian_imp + saipan_mainland := saipan_mainland_imp + rota := rota_imp + guam := guam_imp + colonia := colonia_imp + palau := palau_imp + end + + position_widgets + -- Move Current and contained widgets to correct + -- location and set their their sizes + do + Precursor {SEA_AREA_WIDGET} + scale_widget (land, 0.15) + rotate_widget (land, 13.0) +-- translate_widget (Current, 446, 183) +-- translate_widget (text_widget, 0, -20) +-- translate_widget (dot, 0, 30) +-- translate_widget (land, -21, 2) + set_point_position (446, 183) + land.set_point_position (351, 195) + name_mt.set_point_position (285, 220) + dot.set_point_position (315, 247) +-- flag.center_on_dot (dot) + flag.set_x_y (dot.x, dot.y) + dot.set_point_position (310, 270) + + dot.set_foreground_color (Yellow) + dot.show + end + + build_land + -- Add widgets to Current + do + Precursor {SEA_AREA_WIDGET} + -- Initialize attributes + land.extend (iwo_jima) + land.extend (tinian) + land.extend (saipan_mainland) + land.extend (rota) + land.extend (guam) + land.extend (colonia) + land.extend (palau) + end + + build_ocean + -- Create the polygon representing the `ocean' here + -- Redefined to add the points + do + Precursor {SEA_AREA_WIDGET} + -- start at north-east point + ocean.extend_point (create {EV_COORDINATE}.make (0, 0)) + ocean.extend_point (create {EV_COORDINATE}.make (36, 66)) + ocean.extend_point (create {EV_COORDINATE}.make (-57, 132)) -- under Truk + ocean.extend_point (create {EV_COORDINATE}.make (-193, 132)) + ocean.extend_point (create {EV_COORDINATE}.make (-226, 95)) -- under Philippines + ocean.extend_point (create {EV_COORDINATE}.make (-229, 68)) -- under Philippines + ocean.extend_point (create {EV_COORDINATE}.make (-221, 20)) + end + +-- build_bounding_figure +-- -- Add points to the `jj_bounding_figure'. +-- -- Redefined to use the tile edges as the bounding area +-- local +-- t: EV_MODEL_TRANSFORMATION +-- do +-- if has (jj_bounding_figure) then +-- prune_all (jj_bounding_figure) +-- end +-- create jj_bounding_figure +-- extend (jj_bounding_figure) +-- jj_bounding_figure.extend_point (create {EV_COORDINATE}.make (0, 0)) +-- jj_bounding_figure.extend_point (create {EV_COORDINATE}.make (36, 66)) +-- jj_bounding_figure.extend_point (create {EV_COORDINATE}.make (-57, 132)) -- under Truk +-- jj_bounding_figure.extend_point (create {EV_COORDINATE}.make (-193, 132)) +---- bounding_figure.extend_point (create {EV_COORDINATE}.make (-226, 95)) -- under Philippines +---- bounding_figure.extend_point (create {EV_COORDINATE}.make (-229, 68)) -- under Philippines +-- jj_bounding_figure.extend_point (create {EV_COORDINATE}.make (-221, 20)) +-- jj_bounding_figure.enable_closed +-- create t.make_zero +-- t.translate (446, 183) +-- jj_bounding_figure.transform (t) +-- jj_bounding_figure.set_line_width (2) +---- show_bounding_figure +-- end + +feature -- Access + + iwo_jima: EV_MODEL_POLYGON + tinian: EV_MODEL_POLYGON + saipan_mainland: EV_MODEL_POLYGON + rota: EV_MODEL_POLYGON + guam: EV_MODEL_POLYGON + colonia: EV_MODEL_POLYGON + palau: EV_MODEL_POLYGON + +feature {NONE} -- Implementation + + iwo_jima_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (0, 0)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1.1851851851852189, -5.3333333333333286)) + Result.extend_point (create {EV_COORDINATE}.make_precise (0.59259259259260944, -8.8888888888888928)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1.7777777777778283, -10.962962962962976)) + Result.extend_point (create {EV_COORDINATE}.make_precise (2.3703703703703241, -11.259259259259252)) + Result.extend_point (create {EV_COORDINATE}.make_precise (5.9259259259259807, -8.8888888888888928)) + Result.extend_point (create {EV_COORDINATE}.make_precise (8.296296296296191, -8.8888888888888928)) + Result.extend_point (create {EV_COORDINATE}.make_precise (8.296296296296191, -5.9259259259259309)) + Result.extend_point (create {EV_COORDINATE}.make_precise (5.6296296296296759, -5.3333333333333286)) + Result.extend_point (create {EV_COORDINATE}.make_precise (3.259259259259295, -2.0740740740740762)) + end + + tinian_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (198.81481481481478, 481.48148148148147)) + Result.extend_point (create {EV_COORDINATE}.make_precise (198.22222222222217, 478.51851851851842)) + Result.extend_point (create {EV_COORDINATE}.make_precise (196.14814814814815, 477.03703703703701)) + Result.extend_point (create {EV_COORDINATE}.make_precise (196.14814814814815, 474.66666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (194.37037037037032, 474.66666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (194.96296296296293, 472.29629629629625)) + Result.extend_point (create {EV_COORDINATE}.make_precise (196.74074074074076, 468.7407407407407)) + Result.extend_point (create {EV_COORDINATE}.make_precise (197.92592592592587, 471.11111111111103)) + Result.extend_point (create {EV_COORDINATE}.make_precise (198.22222222222217, 473.48148148148147)) + Result.extend_point (create {EV_COORDINATE}.make_precise (200.2962962962963, 476.7407407407407)) + end + + saipan_mainland_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (206.51851851851859, 470.22222222222211)) + Result.extend_point (create {EV_COORDINATE}.make_precise (202.66666666666663, 469.3333333333332)) + Result.extend_point (create {EV_COORDINATE}.make_precise (199.11111111111109, 466.07407407407396)) + Result.extend_point (create {EV_COORDINATE}.make_precise (200, 463.40740740740733)) + Result.extend_point (create {EV_COORDINATE}.make_precise (201.77777777777771, 460.7407407407407)) + Result.extend_point (create {EV_COORDINATE}.make_precise (202.96296296296293, 458.66666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (205.33333333333337, 459.85185185185179)) + Result.extend_point (create {EV_COORDINATE}.make_precise (205.03703703703695, 463.11111111111103)) + Result.extend_point (create {EV_COORDINATE}.make_precise (207.11111111111109, 464.59259259259255)) + Result.extend_point (create {EV_COORDINATE}.make_precise (207.11111111111109, 466.37037037037027)) + Result.extend_point (create {EV_COORDINATE}.make_precise (205.03703703703695, 465.48148148148147)) + Result.extend_point (create {EV_COORDINATE}.make_precise (205.03703703703695, 467.25925925925918)) + end + + rota_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (175.11111111111109, 515.25925925925912)) + Result.extend_point (create {EV_COORDINATE}.make_precise (174.51851851851859, 512.5925925925925)) + Result.extend_point (create {EV_COORDINATE}.make_precise (176.8888888888888, 511.99999999999983)) + Result.extend_point (create {EV_COORDINATE}.make_precise (178.37037037037032, 510.51851851851842)) + Result.extend_point (create {EV_COORDINATE}.make_precise (181.33333333333337, 510.81481481481484)) + Result.extend_point (create {EV_COORDINATE}.make_precise (181.92592592592587, 512.5925925925925)) + Result.extend_point (create {EV_COORDINATE}.make_precise (179.85185185185185, 512.5925925925925)) + Result.extend_point (create {EV_COORDINATE}.make_precise (180.14814814814815, 514.07407407407391)) + Result.extend_point (create {EV_COORDINATE}.make_precise (177.77777777777771, 514.96296296296282)) + end + + guam_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (160.8888888888888, 538.07407407407391)) + Result.extend_point (create {EV_COORDINATE}.make_precise (162.96296296296293, 536.29629629629619)) + Result.extend_point (create {EV_COORDINATE}.make_precise (164.74074074074076, 538.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (166.51851851851859, 539.25925925925912)) + Result.extend_point (create {EV_COORDINATE}.make_precise (165.33333333333337, 542.51851851851836)) + Result.extend_point (create {EV_COORDINATE}.make_precise (166.22222222222217, 546.07407407407391)) + Result.extend_point (create {EV_COORDINATE}.make_precise (163.85185185185185, 547.85185185185173)) + Result.extend_point (create {EV_COORDINATE}.make_precise (163.55555555555554, 549.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (159.11111111111109, 551.40740740740728)) + Result.extend_point (create {EV_COORDINATE}.make_precise (158.22222222222217, 553.7777777777776)) + Result.extend_point (create {EV_COORDINATE}.make_precise (157.62962962962968, 555.25925925925912)) + Result.extend_point (create {EV_COORDINATE}.make_precise (154.96296296296293, 555.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (153.18518518518522, 554.07407407407391)) + Result.extend_point (create {EV_COORDINATE}.make_precise (152.2962962962963, 551.40740740740728)) + Result.extend_point (create {EV_COORDINATE}.make_precise (153.77777777777771, 548.74074074074065)) + Result.extend_point (create {EV_COORDINATE}.make_precise (151.70370370370358, 548.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (153.77777777777771, 546.96296296296282)) + Result.extend_point (create {EV_COORDINATE}.make_precise (157.03703703703695, 545.18518518518499)) + Result.extend_point (create {EV_COORDINATE}.make_precise (159.70370370370358, 543.70370370370358)) + Result.extend_point (create {EV_COORDINATE}.make_precise (159.11111111111109, 540.44444444444434)) + end + + colonia_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-147.25925925925921, 733.62962962962956)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-147.55555555555554, 730.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-146.37037037037032, 726.51851851851836)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-144.29629629629628, 725.62962962962956)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-143.11111111111109, 722.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-142.51851851851848, 724.74074074074053)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-140.1481481481481, 726.51851851851836)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-142.22222222222223, 728.88888888888869)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-143.70370370370367, 728.29629629629619)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-145.18518518518516, 730.37037037037021)) + end + + palau_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-306.37037037037032, 811.25925925925912)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-304.29629629629625, 809.7777777777776)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-303.11111111111109, 811.25925925925912)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-302.51851851851848, 813.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-302.51851851851848, 817.18518518518499)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-301.03703703703695, 818.37037037037021)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-302.22222222222217, 819.85185185185173)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-301.62962962962956, 823.40740740740716)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-304.29629629629625, 826.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-305.48148148148141, 827.85185185185173)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-308.1481481481481, 829.62962962962956)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-309.92592592592587, 831.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-311.40740740740733, 832.59259259259238)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-312.8888888888888, 832.88888888888869)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-313.77777777777771, 834.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-313.48148148148141, 837.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-316.4444444444444, 837.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-314.96296296296288, 832.59259259259238)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-312.29629629629625, 831.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-311.40740740740733, 828.14814814814804)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-309.03703703703695, 826.37037037037021)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-309.62962962962956, 823.70370370370358)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-310.51851851851848, 821.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-308.74074074074065, 821.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-309.03703703703695, 818.96296296296282)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-306.96296296296293, 816.29629629629619)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-304.5925925925925, 815.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-304.5925925925925, 812.14814814814804)) + end + +invariant + + is_valid_sea_area: attached target_imp implies sea_area = game.Marianas_islands + +end diff --git a/jj_vitp/Interface/widgets/sea_area_widgets/marshall_islands_widget.e b/jj_vitp/Interface/widgets/sea_area_widgets/marshall_islands_widget.e new file mode 100644 index 0000000..3b0b0ec --- /dev/null +++ b/jj_vitp/Interface/widgets/sea_area_widgets/marshall_islands_widget.e @@ -0,0 +1,1054 @@ +note + description: "[ + Widget that represents this VITP sea area + ]" + author: "Jimmy J. Johnson" + +class + MARSHALL_ISLANDS_WIDGET + +inherit + + SEA_AREA_WIDGET + redefine + create_interface_objects, + position_widgets, + build_ocean, + build_land +-- build_bounding_figure + end + +create + make + +feature {NONE} -- Initialization + + create_interface_objects + -- Initialize attributes + do + Precursor {SEA_AREA_WIDGET} + wake := wake_imp + taongi_atoll := taongi_atoll_imp + bikar_atoll := bikar_atoll_imp + utrik_atoll := utrik_atoll_imp + taka_atoll := taka_atoll_imp + ailuk_atoll := ailuk_atoll_imp + likiep_atoll := likiep_atoll_imp + wotje_atoll := wotje_atoll_imp + erikub_atoll := erikub_atoll_imp + kwajalein_atoll := kwajalein_atoll_imp + namu_atoll := namu_atoll_imp + ailinglaplap_atoll :=ailinglaplap_atoll_imp + maloelap_atoll := maloelap_atoll_imp + aur_atoll := aur_atoll_imp + majuro_atoll := majuro_atoll_imp + amo_atoll := amo_atoll_imp + ujae_atoll := ujae_atoll_imp + wotho_atoll := wotho_atoll_imp + ailinginae_atoll := ailinginae_atoll_imp + rongelap_atoll := rongelap_atoll_imp + rongerik_atoll := rongerik_atoll_imp + bikini_atoll := bikini_atoll_imp + enewetak_atoll := enewetak_atoll_imp + -- South Marshall Islands + kajalein_south := kajalein_south_imp + maloelap_south := maloelap_south_imp + mili_atoll := mili_atoll_imp + butaritari_atoll := butaritari_atoll_imp + abalng_island := abalng_island_imp + tarawa_island := tarawa_island_imp + majana_island := majana_island_imp + kuna_island := kuna_island_imp + aranuka_island := aranuka_island_imp + abemama_island := abemama_island_imp + nonouti_island := nonouti_island_imp + tabiteuea_island := tabiteuea_island_imp + onotoa_island := onotoa_island_imp + beru_island := beru_island_imp + jaluit_atoll := jaluit_atoll_imp + end + + position_widgets + -- Move Current and contained widgets to correct + -- location and set their their sizes + do + Precursor {SEA_AREA_WIDGET} + translate_widget (Current, 485, 251) + translate_widget (name_mt, -30, 30) + translate_widget (dot, 0, 55) +-- flag.center_on_dot (dot) + flag.set_x_y (dot.x, dot.y) + translate_widget (dot, 40, 0) + end + + build_ocean + -- Create the polygon representing the `ocean' here + -- Redefined to add the points + do + Precursor {SEA_AREA_WIDGET} + -- start at northern most point + ocean.extend_point (create {EV_COORDINATE}.make (0, 0)) + ocean.extend_point (create {EV_COORDINATE}.make (113, 53)) + ocean.extend_point (create {EV_COORDINATE}.make (38, 182)) + ocean.extend_point (create {EV_COORDINATE}.make (-93, 66)) -- under Truk + end + +-- build_bounding_figure +-- -- Add points to the `jj_bounding_figure'. +-- -- Redefined to use the tile edges as the bounding area +-- local +-- t: EV_MODEL_TRANSFORMATION +-- do +-- if has (jj_bounding_figure) then +-- prune_all (jj_bounding_figure) +-- end +-- create jj_bounding_figure +-- extend (jj_bounding_figure) +-- jj_bounding_figure.extend_point (create {EV_COORDINATE}.make (0, 0)) +-- jj_bounding_figure.extend_point (create {EV_COORDINATE}.make (113, 53)) +-- jj_bounding_figure.extend_point (create {EV_COORDINATE}.make (38, 182)) +-- jj_bounding_figure.extend_point (create {EV_COORDINATE}.make (-93, 66)) -- under Truk +-- jj_bounding_figure.enable_closed +-- create t.make_zero +-- t.translate (485, 251) -- 553 is the board height (not including black boarder) +-- jj_bounding_figure.transform (t) +-- jj_bounding_figure.set_line_width (2) +---- show_bounding_figure +-- end + + build_land + -- Add any brown land to Current + do + Precursor {SEA_AREA_WIDGET} + -- Add North Marshall Islands polygons and tranform + -- to match other widgets + land.extend (wake) + land.extend (taongi_atoll) + land.extend (bikar_atoll) + land.extend (utrik_atoll) + land.extend (taka_atoll) + land.extend (ailuk_atoll) + land.extend (likiep_atoll) + land.extend (wotje_atoll) + land.extend (erikub_atoll) +-- land.extend (kwajalein_atoll) + land.extend (namu_atoll) + land.extend (ailinglaplap_atoll) +-- land.extend (maloelap_atoll) + land.extend (aur_atoll) + land.extend (majuro_atoll) + land.extend (amo_atoll) + land.extend (ujae_atoll) + land.extend (wotho_atoll) + land.extend (ailinginae_atoll) + land.extend (rongelap_atoll) + land.extend (rongerik_atoll) + land.extend (bikini_atoll) + land.extend (enewetak_atoll) + wake.transform (north_transform) + taongi_atoll.transform (north_transform) + bikar_atoll.transform (north_transform) + utrik_atoll.transform (north_transform) + taka_atoll.transform (north_transform) + ailuk_atoll.transform (north_transform) + likiep_atoll.transform (north_transform) + wotje_atoll.transform (north_transform) + erikub_atoll.transform (north_transform) + kwajalein_atoll.transform (north_transform) + namu_atoll.transform (north_transform) + ailinglaplap_atoll.transform (north_transform) + maloelap_atoll.transform (north_transform) + aur_atoll.transform (north_transform) + majuro_atoll.transform (north_transform) + amo_atoll.transform (north_transform) + ujae_atoll.transform (north_transform) + wotho_atoll.transform (north_transform) + ailinginae_atoll.transform (north_transform) + rongelap_atoll.transform (north_transform) + rongerik_atoll.transform (north_transform) + bikini_atoll.transform (north_transform) + enewetak_atoll.transform (north_transform) + -- Add South Marshall Islands polygons and tranform + -- to match other widgets +-- land.extend (kajalein_south) +-- land.extend (maloelap_south) + land.extend (mili_atoll) + land.extend (butaritari_atoll) + land.extend (abalng_island) + land.extend (tarawa_island) + land.extend (majana_island) + land.extend (kuna_island) + land.extend (aranuka_island) + land.extend (abemama_island) + land.extend (nonouti_island) + land.extend (tabiteuea_island) + land.extend (onotoa_island) + land.extend (beru_island) + land.extend (jaluit_atoll) + kajalein_south.transform (south_transform) + maloelap_south.transform (south_transform) + mili_atoll.transform (south_transform) + butaritari_atoll.transform (south_transform) + abalng_island.transform (south_transform) + tarawa_island.transform (south_transform) + majana_island.transform (south_transform) + kuna_island.transform (south_transform) + aranuka_island.transform (south_transform) + abemama_island.transform (south_transform) + nonouti_island.transform (south_transform) + tabiteuea_island.transform (south_transform) + onotoa_island.transform (south_transform) + beru_island.transform (south_transform) + jaluit_atoll.transform (south_transform) + end + +feature -- Access (North Marshall Islands) + + wake: EV_MODEL_POLYGON + taongi_atoll: EV_MODEL_POLYGON + bikar_atoll: EV_MODEL_POLYGON + utrik_atoll: EV_MODEL_POLYGON + taka_atoll: EV_MODEL_POLYGON + ailuk_atoll: EV_MODEL_POLYGON + likiep_atoll: EV_MODEL_POLYGON + wotje_atoll: EV_MODEL_POLYGON + erikub_atoll: EV_MODEL_POLYGON + kwajalein_atoll: EV_MODEL_POLYGON + namu_atoll: EV_MODEL_POLYGON + ailinglaplap_atoll: EV_MODEL_POLYGON + maloelap_atoll: EV_MODEL_POLYGON + aur_atoll: EV_MODEL_POLYGON + majuro_atoll: EV_MODEL_POLYGON + amo_atoll: EV_MODEL_POLYGON + ujae_atoll: EV_MODEL_POLYGON + wotho_atoll: EV_MODEL_POLYGON + ailinginae_atoll: EV_MODEL_POLYGON + rongelap_atoll: EV_MODEL_POLYGON + rongerik_atoll: EV_MODEL_POLYGON + bikini_atoll: EV_MODEL_POLYGON + enewetak_atoll: EV_MODEL_POLYGON + +feature -- Access (South Marshall Islands) + + kajalein_south: EV_MODEL_POLYGON + maloelap_south: EV_MODEL_POLYGON + mili_atoll: EV_MODEL_POLYGON + butaritari_atoll: EV_MODEL_POLYGON + abalng_island: EV_MODEL_POLYGON + tarawa_island: EV_MODEL_POLYGON + majana_island: EV_MODEL_POLYGON + kuna_island: EV_MODEL_POLYGON + aranuka_island: EV_MODEL_POLYGON + abemama_island: EV_MODEL_POLYGON + nonouti_island: EV_MODEL_POLYGON + tabiteuea_island: EV_MODEL_POLYGON + onotoa_island: EV_MODEL_POLYGON + beru_island: EV_MODEL_POLYGON + jaluit_atoll: EV_MODEL_POLYGON + +feature {NONE} -- Implementation + + north_point: EV_COORDINATE + -- Reference point for transformations of the north + -- polygons (i.e. `north', `hainan', & `taiwan'). + local + bb: EV_RECTANGLE + mid_x: REAL_64 + mid_y: REAL_64 + once + create Result.make_precise (0.0, 0.0) + -- Estimate the mid_point +--3 create Result.make_precise (721.0, 176.0) + end + + north_move: EV_COORDINATE + -- Distance in x- and y-directions to move the north polygons. + once + create Result.make_precise (5.0, 19.0) + end + + north_scale: REAL_64 = 0.07 + -- Scale factor for north polygons. + + north_angle: REAL_64 = 13.0 + -- Number of degrees to rotate the north polygons + + north_transform: EV_MODEL_TRANSFORMATION + -- Matrix to scale, rotate, and translate polygons + -- depicting `north', `hainan', and `taiwan'. + local + r, s, t: EV_MODEL_TRANSFORMATION + once + create r.make_zero + create s.make_zero + create t.make_zero + t.translate (north_move.x_precise, north_move.y_precise) +-- s.scale (north_scale, north_scale, north_point.x_precise, north_point.y_precise, 0.0) + s.scale (north_scale, north_scale, 0.0, 0.0, 0.0) + r.rotate (degrees_to_radians (north_angle), north_point.x_precise, north_point.y_precise) + Result := t * r * s +-- Result := r * s * t +-- Result := s * t * r + end + + south_point: EV_COORDINATE + -- Reference point for transformations of the south + -- polygons (i.e. `kamchatsky', `shumshu', `paramushir', + -- `atlasov', etc.). + once + create Result.make_precise (0.0, 200.0) + end + + south_move: EV_COORDINATE + -- Distance in x- and y-directions to move the south polygons. + once + create Result.make_precise (-54.0, 77.0) + end + + south_scale: REAL_64 = 0.07 + -- Scale factor for south polygons + + south_angle: REAL_64 = 13.0 + -- Number of degrees to rotate the south polygons + + south_transform: EV_MODEL_TRANSFORMATION + -- Matrix to scale, rotate, and translate polygons + -- depicting `north', `hainan', and `taiwan'. + local + r, s, t: EV_MODEL_TRANSFORMATION + once + create r.make_zero + create s.make_zero + create t.make_zero + t.translate (south_move.x_precise, south_move.y_precise) +-- s.scale (south_scale, south_scale, south_point.x_precise, south_point.y_precise, 0.0) + s.scale (south_scale, south_scale, 0.0, 0.0, 0.0) + r.rotate (degrees_to_radians (south_angle), south_point.x_precise, south_point.y_precise) + Result := t * r * s +-- Result := r * s * t +-- Result := s * t * r + end + +feature {NONE} -- Implmenetation (North Marshallls) + + wake_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (0, 0)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-2.3703703703703241, -1.7777777777777768)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-2.074074074074133, -5.0370370370370345)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1.1851851851852189, -7.1111111111111072)) + Result.extend_point (create {EV_COORDINATE}.make_precise (3.5555555555555429, -5.3333333333333321)) + Result.extend_point (create {EV_COORDINATE}.make_precise (3.2592592592592382, -1.1851851851851833)) + end + + taongi_atoll_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (205.33333333333337, 433.18518518518511)) + Result.extend_point (create {EV_COORDINATE}.make_precise (210.37037037037032, 432.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (216.5925925925925, 436.1481481481481)) + Result.extend_point (create {EV_COORDINATE}.make_precise (220.14814814814815, 443.55555555555549)) + Result.extend_point (create {EV_COORDINATE}.make_precise (217.48148148148141, 446.81481481481467)) + Result.extend_point (create {EV_COORDINATE}.make_precise (211.55555555555554, 450.96296296296288)) + Result.extend_point (create {EV_COORDINATE}.make_precise (209.77777777777771, 448.59259259259244)) + Result.extend_point (create {EV_COORDINATE}.make_precise (210.96296296296293, 445.62962962962956)) + Result.extend_point (create {EV_COORDINATE}.make_precise (210.07407407407402, 441.18518518518511)) + Result.extend_point (create {EV_COORDINATE}.make_precise (207.70370370370358, 435.85185185185179)) + end + + bikar_atoll_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (314.07407407407402, 661.92592592592575)) + Result.extend_point (create {EV_COORDINATE}.make_precise (315.25925925925912, 659.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (317.92592592592575, 661.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (320, 661.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (322.66666666666663, 665.18518518518511)) + Result.extend_point (create {EV_COORDINATE}.make_precise (320.29629629629619, 669.92592592592575)) + Result.extend_point (create {EV_COORDINATE}.make_precise (318.51851851851859, 672.29629629629619)) + Result.extend_point (create {EV_COORDINATE}.make_precise (317.33333333333337, 670.81481481481455)) + Result.extend_point (create {EV_COORDINATE}.make_precise (315.55555555555554, 670.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (313.77777777777771, 666.96296296296282)) + Result.extend_point (create {EV_COORDINATE}.make_precise (314.96296296296293, 664.29629629629619)) + end + + utrik_atoll_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (289.77777777777771, 748.74074074074065)) + Result.extend_point (create {EV_COORDINATE}.make_precise (291.25925925925912, 752.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (298.07407407407402, 759.70370370370358)) + Result.extend_point (create {EV_COORDINATE}.make_precise (290.66666666666663, 762.96296296296282)) + Result.extend_point (create {EV_COORDINATE}.make_precise (287.40740740740739, 764.14814814814792)) + Result.extend_point (create {EV_COORDINATE}.make_precise (284.44444444444434, 760.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (284.44444444444434, 752.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (285.62962962962956, 749.92592592592575)) + end + + taka_atoll_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (266.07407407407402, 762.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (272.29629629629619, 762.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (278.81481481481478, 760.59259259259238)) + Result.extend_point (create {EV_COORDINATE}.make_precise (281.48148148148141, 761.4814814814813)) + Result.extend_point (create {EV_COORDINATE}.make_precise (279.70370370370358, 763.85185185185173)) + Result.extend_point (create {EV_COORDINATE}.make_precise (279.70370370370358, 771.85185185185173)) + Result.extend_point (create {EV_COORDINATE}.make_precise (275.55555555555554, 773.92592592592575)) + Result.extend_point (create {EV_COORDINATE}.make_precise (271.40740740740739, 773.92592592592575)) + Result.extend_point (create {EV_COORDINATE}.make_precise (268.74074074074076, 769.18518518518499)) + end + + ailuk_atoll_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (293.03703703703695, 846.51851851851836)) + Result.extend_point (create {EV_COORDINATE}.make_precise (297.77777777777771, 843.85185185185173)) + Result.extend_point (create {EV_COORDINATE}.make_precise (300.14814814814815, 830.51851851851836)) + Result.extend_point (create {EV_COORDINATE}.make_precise (304.5925925925925, 829.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (307.25925925925912, 836.74074074074065)) + Result.extend_point (create {EV_COORDINATE}.make_precise (306.07407407407402, 844.14814814814792)) + Result.extend_point (create {EV_COORDINATE}.make_precise (307.25925925925912, 854.51851851851836)) + Result.extend_point (create {EV_COORDINATE}.make_precise (304, 853.62962962962956)) + Result.extend_point (create {EV_COORDINATE}.make_precise (297.77777777777771, 854.81481481481455)) + end + + likiep_Atoll_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (217.18518518518522, 883.25925925925912)) + Result.extend_point (create {EV_COORDINATE}.make_precise (216.5925925925925, 880.29629629629619)) + Result.extend_point (create {EV_COORDINATE}.make_precise (217.77777777777771, 878.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (217.77777777777771, 873.4814814814813)) + Result.extend_point (create {EV_COORDINATE}.make_precise (215.40740740740739, 868.74074074074065)) + Result.extend_point (create {EV_COORDINATE}.make_precise (220.44444444444434, 869.92592592592575)) + Result.extend_point (create {EV_COORDINATE}.make_precise (225.18518518518522, 869.92592592592575)) + Result.extend_point (create {EV_COORDINATE}.make_precise (229.62962962962956, 875.25925925925912)) + Result.extend_point (create {EV_COORDINATE}.make_precise (243.25925925925912, 881.7777777777776)) + Result.extend_point (create {EV_COORDINATE}.make_precise (247.11111111111097, 890.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (236.14814814814815, 890.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (235.25925925925912, 893.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (227.25925925925912, 893.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (226.37037037037032, 889.18518518518499)) + end + + wotje_atoll_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (300.14814814814815, 936.88888888888869)) + Result.extend_point (create {EV_COORDINATE}.make_precise (293.92592592592575, 927.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (290.66666666666663, 927.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (290.07407407407402, 920.88888888888869)) + Result.extend_point (create {EV_COORDINATE}.make_precise (292.14814814814815, 917.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (315.55555555555554, 917.62962962962956)) + Result.extend_point (create {EV_COORDINATE}.make_precise (322.37037037037032, 913.4814814814813)) + Result.extend_point (create {EV_COORDINATE}.make_precise (331.55555555555554, 921.4814814814813)) + Result.extend_point (create {EV_COORDINATE}.make_precise (329.48148148148141, 930.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (316.44444444444434, 931.55555555555532)) + Result.extend_point (create {EV_COORDINATE}.make_precise (312.5925925925925, 934.51851851851836)) + end + + erikub_atoll_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (298.96296296296293, 952.29629629629619)) + Result.extend_point (create {EV_COORDINATE}.make_precise (299.85185185185185, 941.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (305.77777777777771, 940.74074074074065)) + Result.extend_point (create {EV_COORDINATE}.make_precise (313.77777777777771, 946.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (319.70370370370358, 956.74074074074065)) + Result.extend_point (create {EV_COORDINATE}.make_precise (319.11111111111097, 964.74074074074065)) + Result.extend_point (create {EV_COORDINATE}.make_precise (312.5925925925925, 966.51851851851836)) + Result.extend_point (create {EV_COORDINATE}.make_precise (309.92592592592575, 959.70370370370358)) + Result.extend_point (create {EV_COORDINATE}.make_precise (305.18518518518522, 958.22222222222194)) + Result.extend_point (create {EV_COORDINATE}.make_precise (303.11111111111097, 955.25925925925912)) + end + + kwajalein_atoll_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (18.96296296296299, 935.11111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (33.185185185185219, 935.70370370370358)) + Result.extend_point (create {EV_COORDINATE}.make_precise (43.851851851851904, 932.14814814814792)) + Result.extend_point (create {EV_COORDINATE}.make_precise (62.222222222222172, 937.18518518518499)) + Result.extend_point (create {EV_COORDINATE}.make_precise (71.111111111111086, 934.22222222222194)) + Result.extend_point (create {EV_COORDINATE}.make_precise (74.370370370370324, 934.51851851851836)) + Result.extend_point (create {EV_COORDINATE}.make_precise (81.185185185185219, 928.29629629629619)) + Result.extend_point (create {EV_COORDINATE}.make_precise (83.259259259259238, 937.18518518518499)) + Result.extend_point (create {EV_COORDINATE}.make_precise (94.51851851851859, 948.44444444444412)) + Result.extend_point (create {EV_COORDINATE}.make_precise (104.8888888888888, 958.22222222222194)) + Result.extend_point (create {EV_COORDINATE}.make_precise (102.81481481481478, 963.55555555555532)) + Result.extend_point (create {EV_COORDINATE}.make_precise (106.96296296296293, 974.81481481481455)) + Result.extend_point (create {EV_COORDINATE}.make_precise (102.81481481481478, 979.85185185185173)) + Result.extend_point (create {EV_COORDINATE}.make_precise (103.11111111111109, 993.4814814814813)) + Result.extend_point (create {EV_COORDINATE}.make_precise (91.259259259259238, 986.37037037037021)) + Result.extend_point (create {EV_COORDINATE}.make_precise (85.629629629629676, 979.25925925925912)) + Result.extend_point (create {EV_COORDINATE}.make_precise (84.148148148148152, 970.96296296296282)) + Result.extend_point (create {EV_COORDINATE}.make_precise (86.51851851851859, 966.22222222222194)) + Result.extend_point (create {EV_COORDINATE}.make_precise (78.51851851851859, 959.70370370370358)) + Result.extend_point (create {EV_COORDINATE}.make_precise (69.333333333333371, 956.74074074074065)) + Result.extend_point (create {EV_COORDINATE}.make_precise (58.666666666666629, 959.11111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (51.851851851851848, 954.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (46.222222222222172, 955.85185185185173)) + Result.extend_point (create {EV_COORDINATE}.make_precise (34.370370370370324, 946.37037037037021)) + Result.extend_point (create {EV_COORDINATE}.make_precise (27.555555555555543, 942.51851851851836)) + Result.extend_point (create {EV_COORDINATE}.make_precise (21.925925925925867, 939.55555555555532)) + end + + namu_atoll_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (123.55555555555554, 1042.3703703703702)) + Result.extend_point (create {EV_COORDINATE}.make_precise (123.25925925925924, 1039.1111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (126.81481481481478, 1038.2222222222219)) + Result.extend_point (create {EV_COORDINATE}.make_precise (130.66666666666663, 1039.9999999999998)) + Result.extend_point (create {EV_COORDINATE}.make_precise (144.2962962962963, 1041.185185185185)) + Result.extend_point (create {EV_COORDINATE}.make_precise (144, 1051.5555555555552)) + Result.extend_point (create {EV_COORDINATE}.make_precise (144.8888888888888, 1057.4814814814813)) + Result.extend_point (create {EV_COORDINATE}.make_precise (152, 1068.1481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (156.74074074074076, 1073.7777777777774)) + Result.extend_point (create {EV_COORDINATE}.make_precise (154.66666666666663, 1079.9999999999998)) + Result.extend_point (create {EV_COORDINATE}.make_precise (145.77777777777771, 1082.0740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (141.03703703703695, 1071.4074074074074)) + Result.extend_point (create {EV_COORDINATE}.make_precise (142.81481481481478, 1067.2592592592591)) + Result.extend_point (create {EV_COORDINATE}.make_precise (138.07407407407402, 1061.9259259259256)) + Result.extend_point (create {EV_COORDINATE}.make_precise (135.11111111111109, 1051.8518518518517)) + Result.extend_point (create {EV_COORDINATE}.make_precise (127.11111111111109, 1048.8888888888887)) + end + + ailinglaplap_atoll_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (176.5925925925925, 1108.4444444444441)) + Result.extend_point (create {EV_COORDINATE}.make_precise (181.62962962962968, 1104.5925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (188.74074074074076, 1104.2962962962961)) + Result.extend_point (create {EV_COORDINATE}.make_precise (194.96296296296293, 1101.6296296296296)) + Result.extend_point (create {EV_COORDINATE}.make_precise (201.18518518518522, 1101.333333333333)) + Result.extend_point (create {EV_COORDINATE}.make_precise (205.62962962962968, 1097.4814814814813)) + Result.extend_point (create {EV_COORDINATE}.make_precise (210.07407407407402, 1093.6296296296296)) + Result.extend_point (create {EV_COORDINATE}.make_precise (216.5925925925925, 1094.2222222222219)) + Result.extend_point (create {EV_COORDINATE}.make_precise (213.03703703703695, 1099.8518518518517)) + Result.extend_point (create {EV_COORDINATE}.make_precise (213.62962962962968, 1107.8518518518517)) + Result.extend_point (create {EV_COORDINATE}.make_precise (207.11111111111109, 1114.0740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (208, 1120.5925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (201.18518518518522, 1125.9259259259256)) + Result.extend_point (create {EV_COORDINATE}.make_precise (198.22222222222217, 1129.185185185185)) + Result.extend_point (create {EV_COORDINATE}.make_precise (191.70370370370358, 1126.2222222222219)) + Result.extend_point (create {EV_COORDINATE}.make_precise (189.62962962962968, 1122.6666666666665)) + Result.extend_point (create {EV_COORDINATE}.make_precise (180.14814814814815, 1116.1481481481478)) + end + + maloelap_atoll_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (380.74074074074076, 974.81481481481455)) + Result.extend_point (create {EV_COORDINATE}.make_precise (394.07407407407402, 973.92592592592575)) + Result.extend_point (create {EV_COORDINATE}.make_precise (404.14814814814815, 976.59259259259238)) + Result.extend_point (create {EV_COORDINATE}.make_precise (412.44444444444434, 984.29629629629619)) + Result.extend_point (create {EV_COORDINATE}.make_precise (417.48148148148141, 985.77777777777749)) + Result.extend_point (create {EV_COORDINATE}.make_precise (421.62962962962956, 992.88888888888869)) + Result.extend_point (create {EV_COORDINATE}.make_precise (416.29629629629619, 1000.8888888888887)) + Result.extend_point (create {EV_COORDINATE}.make_precise (415.70370370370358, 1009.4814814814813)) + Result.extend_point (create {EV_COORDINATE}.make_precise (416.8888888888888, 1013.037037037037)) + Result.extend_point (create {EV_COORDINATE}.make_precise (412.74074074074076, 1014.2222222222219)) + Result.extend_point (create {EV_COORDINATE}.make_precise (404.14814814814815, 1013.037037037037)) + Result.extend_point (create {EV_COORDINATE}.make_precise (400.29629629629619, 1007.1111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (399.40740740740739, 1002.074074074074)) + Result.extend_point (create {EV_COORDINATE}.make_precise (392, 988.74074074074065)) + Result.extend_point (create {EV_COORDINATE}.make_precise (386.96296296296293, 984.29629629629619)) + end + + aur_atoll_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (400.29629629629619, 1039.4074074074074)) + Result.extend_point (create {EV_COORDINATE}.make_precise (402.66666666666663, 1023.9999999999998)) + Result.extend_point (create {EV_COORDINATE}.make_precise (413.33333333333337, 1029.037037037037)) + Result.extend_point (create {EV_COORDINATE}.make_precise (413.03703703703695, 1038.2222222222219)) + Result.extend_point (create {EV_COORDINATE}.make_precise (415.70370370370358, 1041.4814814814813)) + Result.extend_point (create {EV_COORDINATE}.make_precise (415.11111111111097, 1047.1111111111109)) + end + + majuro_atoll_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (401.18518518518522, 1136.8888888888887)) + Result.extend_point (create {EV_COORDINATE}.make_precise (404.44444444444434, 1129.4814814814813)) + Result.extend_point (create {EV_COORDINATE}.make_precise (416.5925925925925, 1135.4074074074074)) + Result.extend_point (create {EV_COORDINATE}.make_precise (423.11111111111097, 1134.5185185185182)) + Result.extend_point (create {EV_COORDINATE}.make_precise (432.29629629629619, 1137.7777777777774)) + Result.extend_point (create {EV_COORDINATE}.make_precise (434.96296296296293, 1141.6296296296296)) + Result.extend_point (create {EV_COORDINATE}.make_precise (418.96296296296293, 1146.6666666666665)) + end + + amo_atoll_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (449.48148148148141, 1142.2222222222219)) + Result.extend_point (create {EV_COORDINATE}.make_precise (456.88888888888869, 1129.7777777777774)) + Result.extend_point (create {EV_COORDINATE}.make_precise (459.55555555555532, 1136.2962962962961)) + Result.extend_point (create {EV_COORDINATE}.make_precise (462.81481481481478, 1136.8888888888887)) + Result.extend_point (create {EV_COORDINATE}.make_precise (469.33333333333314, 1141.037037037037)) + Result.extend_point (create {EV_COORDINATE}.make_precise (478.22222222222206, 1141.037037037037)) + Result.extend_point (create {EV_COORDINATE}.make_precise (483.55555555555532, 1138.3703703703702)) + Result.extend_point (create {EV_COORDINATE}.make_precise (483.85185185185185, 1141.6296296296296)) + Result.extend_point (create {EV_COORDINATE}.make_precise (477.92592592592575, 1143.9999999999998)) + Result.extend_point (create {EV_COORDINATE}.make_precise (470.81481481481478, 1149.9259259259256)) + Result.extend_point (create {EV_COORDINATE}.make_precise (469.33333333333314, 1157.037037037037)) + Result.extend_point (create {EV_COORDINATE}.make_precise (460.74074074074076, 1150.8148148148146)) + Result.extend_point (create {EV_COORDINATE}.make_precise (454.51851851851859, 1151.7037037037035)) + end + + ujae_atoll_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-100.44444444444446, 944.88888888888869)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-98.370370370370324, 943.70370370370358)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-93.333333333333314, 949.92592592592575)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-86.814814814814781, 951.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-77.03703703703701, 972.74074074074065)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-88.296296296296305, 968.59259259259238)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-95.407407407407391, 962.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-97.777777777777828, 952.88888888888869)) + end + + wotho_atoll_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-63.703703703703695, 854.81481481481455)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-53.925925925925924, 856.59259259259238)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-53.925925925925924, 860.14814814814792)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-56, 862.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-51.851851851851848, 869.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-53.629629629629619, 872.59259259259238)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-60.740740740740705, 868.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-62.518518518518533, 862.51851851851836)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-64.296296296296305, 860.44444444444434)) + end + + ailinginae_atoll_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-29.03703703703701, 764.14814814814792)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-18.666666666666629, 765.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-10.074074074074133, 763.85185185185173)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-7.1111111111111427, 765.92592592592575)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-6.8148148148147811, 771.25925925925912)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-9.4814814814814099, 772.74074074074065)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-12.148148148148096, 771.25925925925912)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-21.629629629629619, 771.85185185185173)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-28.740740740740705, 769.7777777777776)) + end + + rongelap_atoll_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (0.88888888888885731, 758.81481481481455)) + Result.extend_point (create {EV_COORDINATE}.make_precise (0.59259259259255259, 747.25925925925912)) + Result.extend_point (create {EV_COORDINATE}.make_precise (5.925925925925867, 737.4814814814813)) + Result.extend_point (create {EV_COORDINATE}.make_precise (16, 737.7777777777776)) + Result.extend_point (create {EV_COORDINATE}.make_precise (21.925925925925867, 733.92592592592575)) + Result.extend_point (create {EV_COORDINATE}.make_precise (30.51851851851859, 739.85185185185173)) + Result.extend_point (create {EV_COORDINATE}.make_precise (37.333333333333371, 736.29629629629619)) + Result.extend_point (create {EV_COORDINATE}.make_precise (41.777777777777771, 738.96296296296282)) + Result.extend_point (create {EV_COORDINATE}.make_precise (38.814814814814781, 742.51851851851836)) + Result.extend_point (create {EV_COORDINATE}.make_precise (36.444444444444457, 747.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (30.51851851851859, 748.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (25.481481481481467, 754.96296296296282)) + Result.extend_point (create {EV_COORDINATE}.make_precise (27.259259259259238, 767.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (20.148148148148152, 768.59259259259238)) + Result.extend_point (create {EV_COORDINATE}.make_precise (12.148148148148152, 767.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (6.8148148148147811, 762.37037037037021)) + end + + rongerik_atoll_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (68.148148148148152, 746.37037037037021)) + Result.extend_point (create {EV_COORDINATE}.make_precise (70.222222222222172, 741.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (83.555555555555543, 742.81481481481455)) + Result.extend_point (create {EV_COORDINATE}.make_precise (84.444444444444457, 746.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (82.370370370370324, 747.85185185185173)) + Result.extend_point (create {EV_COORDINATE}.make_precise (81.185185185185219, 755.85185185185173)) + Result.extend_point (create {EV_COORDINATE}.make_precise (77.629629629629676, 755.25925925925912)) + Result.extend_point (create {EV_COORDINATE}.make_precise (72.592592592592496, 757.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (72.592592592592496, 751.11111111111097)) + end + + bikini_atoll_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-129.48148148148141, 722.96296296296282)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-120.88888888888891, 714.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-114.96296296296293, 716.14814814814792)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-109.92592592592592, 713.7777777777776)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-102.81481481481478, 719.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-94.518518518518533, 720.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-93.03703703703701, 733.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-96.592592592592609, 734.81481481481455)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-106.66666666666663, 735.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-118.81481481481478, 737.18518518518499)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-120, 733.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-128.2962962962963, 727.70370370370358)) + end + + enewetak_atoll_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-416.29629629629625, 731.25925925925912)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-409.18518518518511, 719.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-401.77777777777771, 717.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-397.92592592592587, 717.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-394.66666666666663, 721.4814814814813)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-390.22222222222217, 722.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-389.62962962962956, 728.29629629629619)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-383.11111111111109, 735.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-385.18518518518511, 745.7777777777776)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-390.51851851851848, 751.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-401.18518518518511, 750.81481481481455)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-410.37037037037032, 745.7777777777776)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-413.03703703703695, 735.11111111111097)) + end + +feature {NONE} -- Implementation (South Marshalls) + + kajalein_south_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (0, 0)) + Result.extend_point (create {EV_COORDINATE}.make_precise (13.333333333333343, 0.59259259259259522)) + Result.extend_point (create {EV_COORDINATE}.make_precise (25.18518518518519, -2.3703703703703667)) + Result.extend_point (create {EV_COORDINATE}.make_precise (45.925925925925895, 2.0740740740740762)) + Result.extend_point (create {EV_COORDINATE}.make_precise (63.407407407407391, 1.7777777777777786)) + Result.extend_point (create {EV_COORDINATE}.make_precise (82.962962962962933, 20.148148148148138)) + Result.extend_point (create {EV_COORDINATE}.make_precise (83.555555555555543, 29.925925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (88, 40.888888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (84.444444444444457, 46.222222222222214)) + Result.extend_point (create {EV_COORDINATE}.make_precise (84.148148148148152, 57.481481481481467)) + Result.extend_point (create {EV_COORDINATE}.make_precise (67.851851851851848, 47.407407407407405)) + Result.extend_point (create {EV_COORDINATE}.make_precise (68.148148148148152, 34.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (61.333333333333343, 26.074074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (51.851851851851848, 21.629629629629626)) + Result.extend_point (create {EV_COORDINATE}.make_precise (40, 23.703703703703702)) + Result.extend_point (create {EV_COORDINATE}.make_precise (32.296296296296276, 19.555555555555557)) + Result.extend_point (create {EV_COORDINATE}.make_precise (20.444444444444457, 17.18518518518519)) + Result.extend_point (create {EV_COORDINATE}.make_precise (11.851851851851848, 8)) + end + + maloelap_south_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (362.07407407407402, 38.81481481481481)) + Result.extend_point (create {EV_COORDINATE}.make_precise (375.7037037037037, 38.81481481481481)) + Result.extend_point (create {EV_COORDINATE}.make_precise (390.81481481481478, 45.037037037037038)) + Result.extend_point (create {EV_COORDINATE}.make_precise (397.92592592592587, 50.370370370370367)) + Result.extend_point (create {EV_COORDINATE}.make_precise (403.55555555555554, 56.888888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (396.74074074074065, 63.999999999999986)) + Result.extend_point (create {EV_COORDINATE}.make_precise (396.74074074074065, 78.81481481481481)) + Result.extend_point (create {EV_COORDINATE}.make_precise (382.81481481481478, 69.629629629629619)) + Result.extend_point (create {EV_COORDINATE}.make_precise (373.03703703703695, 54.81481481481481)) + end + + mili_atoll_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (445.03703703703695, 285.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (455.7037037037037, 283.85185185185185)) + Result.extend_point (create {EV_COORDINATE}.make_precise (464.88888888888891, 281.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (468.44444444444446, 285.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (480.59259259259261, 285.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (484.44444444444446, 292.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (483.55555555555554, 305.18518518518522)) + Result.extend_point (create {EV_COORDINATE}.make_precise (488.59259259259261, 316.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (488, 319.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (482.66666666666663, 311.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (478.22222222222217, 307.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (470.81481481481478, 304.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (464.88888888888891, 305.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (461.92592592592587, 301.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (458.07407407407402, 302.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (454.22222222222217, 299.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (450.96296296296282, 302.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (446.22222222222217, 301.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (446.81481481481478, 291.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (445.03703703703695, 291.55555555555554)) + end + + butaritari_atoll_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (534.51851851851848, 553.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (540.74074074074065, 558.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (553.77777777777783, 559.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (557.33333333333326, 557.62962962962956)) + Result.extend_point (create {EV_COORDINATE}.make_precise (560, 545.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (561.48148148148141, 543.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (564.44444444444446, 544)) + Result.extend_point (create {EV_COORDINATE}.make_precise (564.74074074074065, 546.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (562.37037037037021, 547.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (561.18518518518499, 555.25925925925912)) + Result.extend_point (create {EV_COORDINATE}.make_precise (557.62962962962956, 559.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (560.8888888888888, 560.5925925925925)) + Result.extend_point (create {EV_COORDINATE}.make_precise (561.18518518518499, 565.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (554.96296296296282, 568.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (555.25925925925924, 573.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (549.33333333333326, 573.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (545.18518518518499, 575.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (541.62962962962956, 579.25925925925912)) + Result.extend_point (create {EV_COORDINATE}.make_precise (538.37037037037032, 577.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (538.37037037037032, 571.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (536.29629629629619, 569.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (535.40740740740739, 564.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (533.03703703703695, 557.33333333333326)) + end + + abalng_island_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (542.22222222222217, 679.70370370370358)) + Result.extend_point (create {EV_COORDINATE}.make_precise (549.92592592592587, 672.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (555.25925925925924, 674.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (566.81481481481478, 688)) + Result.extend_point (create {EV_COORDINATE}.make_precise (567.11111111111109, 692.14814814814804)) + Result.extend_point (create {EV_COORDINATE}.make_precise (561.48148148148141, 695.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (554.07407407407402, 691.55555555555543)) + Result.extend_point (create {EV_COORDINATE}.make_precise (552.8888888888888, 686.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (548.44444444444446, 682.96296296296282)) + Result.extend_point (create {EV_COORDINATE}.make_precise (544.29629629629619, 682.96296296296282)) + end + + tarawa_island_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (560, 704.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (560.8888888888888, 711.70370370370358)) + Result.extend_point (create {EV_COORDINATE}.make_precise (577.77777777777783, 728)) + Result.extend_point (create {EV_COORDINATE}.make_precise (566.81481481481478, 731.25925925925912)) + Result.extend_point (create {EV_COORDINATE}.make_precise (562.37037037037021, 734.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (557.33333333333326, 731.85185185185185)) + Result.extend_point (create {EV_COORDINATE}.make_precise (553.48148148148141, 732.14814814814804)) + Result.extend_point (create {EV_COORDINATE}.make_precise (553.77777777777783, 725.92592592592575)) + Result.extend_point (create {EV_COORDINATE}.make_precise (552.59259259259261, 717.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (555.25925925925924, 707.85185185185185)) + end + + majana_island_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (563.25925925925924, 759.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (569.77777777777783, 766.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (566.81481481481478, 768)) + Result.extend_point (create {EV_COORDINATE}.make_precise (565.03703703703695, 775.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (562.07407407407402, 778.37037037037021)) + Result.extend_point (create {EV_COORDINATE}.make_precise (556.14814814814804, 772.74074074074065)) + Result.extend_point (create {EV_COORDINATE}.make_precise (560.59259259259261, 763.55555555555543)) + end + + kuna_island_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (595.25925925925924, 827.85185185185185)) + Result.extend_point (create {EV_COORDINATE}.make_precise (599.11111111111109, 828.74074074074065)) + Result.extend_point (create {EV_COORDINATE}.make_precise (601.48148148148141, 831.70370370370358)) + Result.extend_point (create {EV_COORDINATE}.make_precise (605.33333333333326, 833.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (599.70370370370358, 836.14814814814804)) + Result.extend_point (create {EV_COORDINATE}.make_precise (597.92592592592587, 832.29629629629619)) + end + + aranuka_island_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (609.48148148148141, 835.85185185185185)) + Result.extend_point (create {EV_COORDINATE}.make_precise (615.40740740740739, 835.85185185185185)) + Result.extend_point (create {EV_COORDINATE}.make_precise (619.85185185185173, 833.7777777777776)) + Result.extend_point (create {EV_COORDINATE}.make_precise (622.81481481481478, 838.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (619.85185185185173, 844.14814814814804)) + Result.extend_point (create {EV_COORDINATE}.make_precise (616.59259259259261, 843.85185185185185)) + Result.extend_point (create {EV_COORDINATE}.make_precise (615.70370370370358, 840.59259259259238)) + end + + abemama_island_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (631.11111111111109, 816.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (633.77777777777783, 815.11111111111097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (635.25925925925924, 810.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (641.18518518518499, 808.59259259259238)) + Result.extend_point (create {EV_COORDINATE}.make_precise (645.92592592592587, 813.92592592592575)) + Result.extend_point (create {EV_COORDINATE}.make_precise (649.18518518518499, 821.62962962962956)) + Result.extend_point (create {EV_COORDINATE}.make_precise (648.59259259259261, 826.96296296296282)) + Result.extend_point (create {EV_COORDINATE}.make_precise (642.07407407407402, 826.37037037037021)) + Result.extend_point (create {EV_COORDINATE}.make_precise (637.92592592592587, 822.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (636.74074074074065, 820.14814814814804)) + Result.extend_point (create {EV_COORDINATE}.make_precise (632.59259259259261, 819.85185185185185)) + end + + nonouti_island_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (665.48148148148141, 911.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (672, 898.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (675.85185185185173, 902.22222222222194)) + Result.extend_point (create {EV_COORDINATE}.make_precise (683.55555555555543, 902.22222222222194)) + Result.extend_point (create {EV_COORDINATE}.make_precise (693.33333333333326, 908.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (695.11111111111109, 914.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (696.8888888888888, 928.29629629629619)) + Result.extend_point (create {EV_COORDINATE}.make_precise (691.25925925925924, 924.74074074074065)) + Result.extend_point (create {EV_COORDINATE}.make_precise (685.62962962962956, 925.62962962962956)) + Result.extend_point (create {EV_COORDINATE}.make_precise (682.07407407407402, 927.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (679.70370370370358, 924.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (672.8888888888888, 919.99999999999977)) + Result.extend_point (create {EV_COORDINATE}.make_precise (671.40740740740739, 916.74074074074065)) + end + + tabiteuea_island_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (711.40740740740739, 954.96296296296282)) + Result.extend_point (create {EV_COORDINATE}.make_precise (715.25925925925924, 953.7777777777776)) + Result.extend_point (create {EV_COORDINATE}.make_precise (718.81481481481478, 956.14814814814804)) + Result.extend_point (create {EV_COORDINATE}.make_precise (725.33333333333326, 965.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (727.40740740740739, 968.59259259259238)) + Result.extend_point (create {EV_COORDINATE}.make_precise (726.81481481481478, 973.03703703703695)) + Result.extend_point (create {EV_COORDINATE}.make_precise (732.14814814814804, 974.22222222222194)) + Result.extend_point (create {EV_COORDINATE}.make_precise (735.70370370370358, 978.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (751.70370370370358, 986.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (753.18518518518499, 994.96296296296282)) + Result.extend_point (create {EV_COORDINATE}.make_precise (744, 994.66666666666652)) + Result.extend_point (create {EV_COORDINATE}.make_precise (737.77777777777783, 995.55555555555532)) + Result.extend_point (create {EV_COORDINATE}.make_precise (729.18518518518499, 989.92592592592575)) + Result.extend_point (create {EV_COORDINATE}.make_precise (728, 982.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (721.77777777777783, 979.55555555555532)) + Result.extend_point (create {EV_COORDINATE}.make_precise (720.59259259259261, 972.74074074074065)) + Result.extend_point (create {EV_COORDINATE}.make_precise (714.66666666666663, 963.85185185185185)) + Result.extend_point (create {EV_COORDINATE}.make_precise (712.29629629629619, 961.18518518518522)) + end + + onotoa_island_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (789.92592592592575, 1015.7037037037035)) + Result.extend_point (create {EV_COORDINATE}.make_precise (796.14814814814792, 1016.2962962962961)) + Result.extend_point (create {EV_COORDINATE}.make_precise (795.55555555555543, 1020.4444444444443)) + Result.extend_point (create {EV_COORDINATE}.make_precise (800.59259259259238, 1024.5925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (801.4814814814813, 1029.333333333333)) + Result.extend_point (create {EV_COORDINATE}.make_precise (796.74074074074065, 1032.5925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (794.07407407407402, 1026.6666666666665)) + Result.extend_point (create {EV_COORDINATE}.make_precise (789.33333333333326, 1025.1851851851852)) + Result.extend_point (create {EV_COORDINATE}.make_precise (790.81481481481455, 1020.4444444444443)) + end + + beru_island_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (829.62962962962956, 970.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (831.40740740740739, 968.29629629629619)) + Result.extend_point (create {EV_COORDINATE}.make_precise (839.70370370370358, 978.37037037037021)) + Result.extend_point (create {EV_COORDINATE}.make_precise (839.40740740740739, 979.85185185185185)) + Result.extend_point (create {EV_COORDINATE}.make_precise (837.03703703703695, 977.7777777777776)) + Result.extend_point (create {EV_COORDINATE}.make_precise (832.59259259259238, 978.07407407407402)) + end + + jaluit_atoll_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (234.96296296296291, 283.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (237.03703703703698, 278.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (242.6666666666666, 277.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (248.29629629629628, 287.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (254.81481481481475, 299.85185185185185)) + Result.extend_point (create {EV_COORDINATE}.make_precise (261.92592592592587, 300.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (265.77777777777783, 308.74074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (261.03703703703695, 311.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (259.55555555555554, 321.18518518518522)) + Result.extend_point (create {EV_COORDINATE}.make_precise (253.9259259259259, 327.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (246.81481481481475, 324.14814814814804)) + Result.extend_point (create {EV_COORDINATE}.make_precise (244.74074074074068, 317.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (236.14814814814807, 310.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (237.9259259259259, 305.18518518518522)) + Result.extend_point (create {EV_COORDINATE}.make_precise (237.9259259259259, 299.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (239.70370370370367, 292.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (238.5185185185185, 287.11111111111109)) + end + +invariant + + is_valid_sea_area: attached target_imp implies sea_area = game.marshall_islands + +end diff --git a/jj_vitp/Interface/widgets/sea_area_widgets/north_pacific_ocean_widget.e b/jj_vitp/Interface/widgets/sea_area_widgets/north_pacific_ocean_widget.e new file mode 100644 index 0000000..a532968 --- /dev/null +++ b/jj_vitp/Interface/widgets/sea_area_widgets/north_pacific_ocean_widget.e @@ -0,0 +1,117 @@ +note + description: "[ + Widget that represents this VITP sea area + ]" + author: "Jimmy J. Johnson" + +class + NORTH_PACIFIC_OCEAN_WIDGET + +inherit + + SEA_AREA_WIDGET + redefine + create_interface_objects, + position_widgets, + build_land, + build_ocean +-- build_bounding_figure + end + +create + make + +feature {NONE} -- Initialization + + create_interface_objects + -- Initialize attributes + do + Precursor {SEA_AREA_WIDGET} + aleutians_east := aleutians_east_imp + end + + position_widgets + -- Move Current and contained widgets to correct + -- location and set their their sizes + do + Precursor {SEA_AREA_WIDGET} + translate_widget (Current, 704, 236) + translate_widget (name_mt, -80, -110) + translate_widget (dot, -40, -80) +-- flag.center_on_dot (dot) + flag.set_x_y (dot.x, dot.y) + end + + build_land + -- Build the `land' + do + Precursor {SEA_AREA_WIDGET} + -- Initialize attributes + land.extend (aleutians_east) + end + + build_ocean + -- Create the polygon representing the `ocean' here + -- Redefined to add the points + do + Precursor {SEA_AREA_WIDGET} + -- start at bottom south-west corner + ocean.extend_point (create {EV_COORDINATE}.make (0, 0)) + ocean.extend_point (create {EV_COORDINATE}.make (-63, -2)) + ocean.extend_point (create {EV_COORDINATE}.make (-96, -105)) + ocean.extend_point (create {EV_COORDINATE}.make (0, -210)) + end + +-- build_bounding_figure +-- -- Add points to the `jj_bounding_figure'. +-- -- Redefined to use the tile edges as the bounding area +-- do +-- if has (jj_bounding_figure) then +-- prune_all (jj_bounding_figure) +-- end +-- create jj_bounding_figure +-- extend (jj_bounding_figure) +-- jj_bounding_figure.extend_point (create {EV_COORDINATE}.make (0, 0)) +-- jj_bounding_figure.extend_point (create {EV_COORDINATE}.make (-63, -2)) +-- jj_bounding_figure.extend_point (create {EV_COORDINATE}.make (-96, -105)) +-- jj_bounding_figure.extend_point (create {EV_COORDINATE}.make (0, -210)) +-- jj_bounding_figure.enable_closed +-- translate_widget (jj_bounding_figure, 704, 236) +-- jj_bounding_figure.set_line_width (2) +-- end + +feature -- Access + + aleutians_east: EV_MODEL_POLYGON + -- The one brown island in the {NORTH_PACIFIC_OCEAN_WIDGET}. + +feature {NONE} -- Implementation + + aleutians_east_imp: EV_MODEL_POLYGON + -- Create the polygon for theisland north of Australia + + local + t: EV_MODEL_TRANSFORMATION + do + create Result + -- Start at north point + Result.extend_point (create {EV_COORDINATE}.make_precise (0, 0)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1, 0.5)) + Result.extend_point (create {EV_COORDINATE}.make_precise (2, 1)) + Result.extend_point (create {EV_COORDINATE}.make_precise (2, 5)) + Result.extend_point (create {EV_COORDINATE}.make_precise (1.5, 5.5)) + Result.extend_point (create {EV_COORDINATE}.make_precise (0.5, 5)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-0.5, 6)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-4, 4)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-5, 3)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-7, 3)) + create t.make_zero + t.translate (-2, -200) + Result.transform (t) + end + +invariant + + is_valid_sea_area: attached target_imp implies sea_area = game.north_pacific_ocean + +end diff --git a/jj_vitp/Interface/widgets/sea_area_widgets/sea_area_widget.e b/jj_vitp/Interface/widgets/sea_area_widgets/sea_area_widget.e new file mode 100644 index 0000000..56d2265 --- /dev/null +++ b/jj_vitp/Interface/widgets/sea_area_widgets/sea_area_widget.e @@ -0,0 +1,367 @@ +note + description: "[ + Widget representing a {SEA_AREA}. + ]" + author: "Jimmy J. Johnson" + +deferred class + SEA_AREA_WIDGET + +inherit + + LOCATION_WIDGET + rename + location as sea_area + redefine + create_interface_objects, +-- initialize, + extend_widgets, + build_widgets, + set_fonts_and_colors, + position_widgets, + set_widget_order, + add_actions, + set_target, + set_dimming_level, +-- set_font, + paint, + on_button_released, +-- on_pointer_motion, + target_imp + end + +feature {NONE} -- Initialization + + create_interface_objects + -- Set up the widgets in Current. + do + Precursor {LOCATION_WIDGET} + create ships_to_mt + create japan_poc_mt + create allies_poc_mt + create ocean + create flag.make (sea_area) + create saved_point + end + + extend_widgets + -- Put widgets into Current. This cannot be done + -- in `create_interface_object', because cannot call + -- `extend' feature until all objects [in descendants] + -- are also created. + do + text_group.extend (ships_to_mt) + text_group.extend (japan_poc_mt) + text_group.extend (allies_poc_mt) + extend (ocean) + extend (flag) + Precursor {LOCATION_WIDGET} + end + + build_widgets + -- Now that widgets were created in `create_interface_objects' + -- and added to Current in `extend_widgets', build up the + -- widgets by adding internal structure to each widget. + do + Precursor {LOCATION_WIDGET} + build_ocean + end + + set_fonts_and_colors + -- Set the default fonts for any text widgets and set + -- the default colors for any contained widgets. + do + Precursor {LOCATION_WIDGET} + background_color := Sea_area_color + name_mt.set_font (Sea_area_font) + ships_to_mt.set_font (Subtext_font) + japan_poc_mt.set_font (POC_font) + allies_poc_mt.set_font (POC_font) + end + + position_widgets + -- Move Current and contained widgets to correct + -- location and set their their sizes + local + px, py: INTEGER + do + Precursor {LOCATION_WIDGET} + -- Use the first point in the sea area as the reference + -- The sea area was centered on the dot which is at 0, 0 + -- We now need to move the sea area so its reference point (the zero-zero + -- point that was the starting point measured on the map) is at the + -- origin instead of the `dot' at the origin. + -- We can't really physically measure the center point of the ocean + -- on the game board, because it is determined by the computer; there + -- is no physical point on the actual game board that marks the center. + check + ocean_was_defined: ocean.point_count >= 1 + -- because of the call to `build_ocean' + end + px := ocean.i_th_point_x (1) + py := ocean.i_th_point_y (1) + translate_widget (Current, -px, -py) +-- translate_widget (flag, 40, 180) +-- translate_widget (text_widget, 20, 150) + end + + set_widget_order + -- Ensure the widgets are ordered properly + -- (i.e. whose on top?) + do + Precursor {LOCATION_WIDGET} + -- Bring all the text to front +-- bring_to_front (name_mt) +-- bring_to_front (ships_to_mt) +-- bring_to_front (japan_poc_mt) +-- bring_to_front (allies_poc_mt) + -- Set order for other widgets + bring_to_front (ocean) + bring_to_front (land) + bring_to_front (text_group) + bring_to_front (flag) + bring_to_front (dot) + end + + build_ocean + -- Add defining points to the `ocean'. + do + end + + add_actions + -- Add actions to the port (really just the marker) + do + Precursor {LOCATION_WIDGET} +-- drop_actions.extend (agent on_drop_unit) + flag.pointer_button_press_actions.extend (agent on_flag_pressed) +-- pointer_button_release_actions.extend (agent on_button_released) +-- pointer_motion_actions.extend (agent on_pointer_moved) + jj_defining_figure.pointer_leave_actions.extend (agent on_leave_bounding_figure) + end + + position_text + -- Set the position of the text inside Current + local + nh: REAL_64 + n_mid: REAL_64 + x_mid: REAL_64 + ax, ay: INTEGER + d: REAL_64 + t: EV_MODEL_TRANSFORMATION + do + nh := name_mt.height + ships_to_mt.set_x_y (name_mt.x, name_mt.y + name_mt.height // 2) + japan_poc_mt.set_y (ships_to_mt.y + ships_to_mt.height) + allies_poc_mt.set_y (ships_to_mt.y + ships_to_mt.height) + + japan_poc_mt.set_x (name_mt.x - japan_poc_mt.width) + allies_poc_mt.set_x (name_mt.x + allies_poc_mt.width) + end + +feature -- Element change + + set_target (a_target: like sea_area) + -- Change the `target'. + local + s, s1, s2: STRING + pos: INTEGER + do + Precursor {LOCATION_WIDGET} (a_target) + flag.set_location (sea_area) + ships_to_mt.set_text (ships_to_text) + japan_poc_mt.set_text (japan_poc_text) + allies_poc_mt.set_text (allies_poc_text) + position_text + end + + set_dimming_level (a_level: like dimming_level) + -- Change the `dimming_level' + do + Precursor {LOCATION_WIDGET} (a_level) + flag.set_dimming_level (a_level) + paint + end + +-- set_font (a_font: EV_FONT) +-- -- Change the appearance of the `font' from which +-- -- the fonts (height, weight, etc.) of any text +-- -- widgets in Current can be based. +-- local +-- f: EV_FONT +-- do +-- font := a_font +-- name_mt.set_font (font) +-- -- Set the other text models based on `font' +-- f := font.twin +-- f.set_height (f.height // 2) +-- ships_to_mt.set_font (f) +-- f := font.twin +-- f.set_height (f.height // 2) +-- japan_poc_mt.set_font (f) +-- allies_poc_mt.set_font (f) +-- end + +feature -- Basic operations + +-- on_drop_unit (a_unit: ATTACK_UNIT) +-- -- React to `a_unit' dropped into Current +-- do +-- io.put_string ("SEA_AREA_WIDGET.on_drop_unit: " + a_unit.name + " dropped on " + Current.sea_area.name + "%N") +-- end + + restore_flag_position + -- Reset the `flag' to its default position (i.e. centered on `dot') + do + flag.set_x_y (dot.x, dot.y) + end + + paint + -- Set the colors for all widgets in Current + do + Precursor {LOCATION_WIDGET} + print ("SEA_AREA_WIDGET.paint: dimming level = " + dimming_level.out + "%N") + ships_to_mt.set_foreground_color (adjusted_color (foreground_color)) + japan_poc_mt.set_foreground_color (adjusted_color (foreground_color)) + allies_poc_mt.set_foreground_color (adjusted_color (foreground_color)) + ocean.set_foreground_color (adjusted_color (background_color)) + ocean.set_background_color (adjusted_color (background_color)) + flag.paint + end + +feature {NONE} -- Implementation (actions) + + on_flag_pressed (ax: INTEGER; ay: INTEGER; a_button: INTEGER; x_tilt: DOUBLE; y_tilt: DOUBLE; + pressure: DOUBLE; a_screen_x: INTEGER; a_screen_y: INTEGER) + -- The `flag' was pressed + do + io.put_string ("SEA_AREA_WIDGET.on_flag_pressed: button " + a_button.out + " released at (" + ax.out + ", " + ay.out + ") %N") + is_dragging_flag := True + saved_point.set (ax, ay) + enable_capture + end + + on_button_released (ax: INTEGER; ay: INTEGER; a_button: INTEGER; x_tilt: DOUBLE; y_tilt: DOUBLE; + pressure: DOUBLE; a_screen_x: INTEGER; a_screen_y: INTEGER) + local + c: detachable EV_COORDINATE + do + Precursor {LOCATION_WIDGET} (ax, ay, a_button, x_tilt, y_tilt, pressure, a_screen_x, a_screen_y) + io.put_string ("SEA_AREA_WIDGET.on_button_release: button " + a_button.out + " released at (" + ax.out + ", " + ay.out + ") %N") +-- Precursor {LOCATION_WIDGET} (ax, ay, a_button, x_tilt, y_tilt, pressure, a_screen_x, a_screen_y) + if is_dragging_flag then + create c.make (ax, ay) +-- flag.center_on_point (c) + flag.set_x_y (c.x, c.y) + disable_capture + end + is_dragging_flag := False + end + + on_leave_bounding_figure + -- If pointer leaves `jj_bounding_figure', then release the capture and drop the flag + do + if is_dragging_flag then +-- flag.center_on_point (saved_point) + flag.set_x_y (saved_point.x, saved_point.y) + disable_capture + end + is_dragging_flag := False + end + + on_pointer_motion (ax: INTEGER; ay: INTEGER; x_tilt: DOUBLE; y_tilt: DOUBLE; + pressure: DOUBLE; a_screen_x: INTEGER; a_screen_y: INTEGER) + -- The pointer is moving + do +-- Precursor {LOCATION_WIDGET} (ax, ay, x_tilt, y_tilt, pressure, a_screen_x, a_screen_y) + saved_point.set (ax, ay) + if is_dragging_flag then +-- flag.center_on_point (saved_point) + flag.set_x_y (saved_point.x, saved_point.y) + end + end + +feature {NONE} -- Implementation + + ships_to_text: STRING + -- The line of text that is under the sea area name, begining with "Ships to..." + do + Result := "Ships to (if friendly) " + adjacent_ports_text + " or any RED port" + -- Look up the list of adjacent ports in the game graph? + end + + japan_poc_text: STRING + -- The line of text for the Japanese POC + do + Result := "JAPAN " + sea_area.japanese_poc.out + " POC" + end + + allies_poc_text: STRING + -- The line of text for the Japanese POC + do + Result := "ALLIES " + sea_area.allied_poc.out + " POC" + end + + adjacent_ports_text: STRING + -- The names of green ports touching this sea area. + local + lin: LINEAR [PORT] + i, n: INTEGER + p: PORT + do + Result := "" + lin := sea_area.adjoining_ports + -- Count green ports + from lin.start + until lin.exhausted + loop + if attached {GREEN_PORT} lin.item then + n := n + 1 + end + lin.forth + end + from lin.start + until lin.exhausted + loop + p := lin.item + lin.forth + if attached {GREEN_PORT} p then + Result := Result + p.name + i := i + 1 + if n >= 3 and i < n then + Result := Result + ", " + elseif n >= 2 and i < n then + Result := Result + " or " + end + end + end + end + +feature {NONE} -- Implementation + + ships_to_mt: EV_MODEL_TEXT + -- Displays the "Ships to ..." text + + japan_poc_mt: EV_MODEL_TEXT + -- Displays the Japanese poc text + + allies_poc_mt: EV_MODEL_TEXT + -- Displays the Allies poc text + + ocean: EV_MODEL_POLYGON + -- To draw the blue sea + + flag: FLAG + -- The control marker for this sea area + + is_dragging_flag: BOOLEAN + -- Is the `flag' being moved? + + saved_point: EV_COORDINATE + -- The location withing Currenty to where the mouse last moved + + target_imp: detachable SEA_AREA + -- Anchor for the `target' represented by Current + +invariant + +end diff --git a/jj_vitp/Interface/widgets/sea_area_widgets/south_pacific_ocean_widget.e b/jj_vitp/Interface/widgets/sea_area_widgets/south_pacific_ocean_widget.e new file mode 100644 index 0000000..b07d5ac --- /dev/null +++ b/jj_vitp/Interface/widgets/sea_area_widgets/south_pacific_ocean_widget.e @@ -0,0 +1,1179 @@ +note + description: "[ + Widget that represents this VITP sea area + ]" + author: "Jimmy J. Johnson" + +class + SOUTH_PACIFIC_OCEAN_WIDGET + +inherit + + SEA_AREA_WIDGET + redefine + create_interface_objects, + position_widgets, + build_ocean, + build_land +-- build_bounding_figure + end + +create + make + +feature {NONE} -- Initialization + + create_interface_objects + -- Initialize attributes + do + Precursor {SEA_AREA_WIDGET} + new_britain := new_britain_imp + new_ireland := new_ireland_imp + new_hanover := new_hanover_imp + umboi := umboi_imp + bougainville := bougainville_imp + choiseul := choiseul_imp + vella_lavella := vella_lavella_imp + kolombangara := kolombangara_imp + new_georgia := new_georgia_imp + santa_isabel := santa_isabel_imp + malaita := malaita_imp + san_cristobal := san_cristobal_imp + nendo := nendo_imp + new_caledonia := new_caledonia_imp + manus := manus_imp + end + + position_widgets + -- Move Current and contained widgets to correct + -- location and set their their sizes + do + Precursor {SEA_AREA_WIDGET} + translate_widget (Current, 255, 319) + translate_widget (name_mt, 90, 40) + translate_widget (dot, 120, 65) +-- flag.center_on_dot (dot) + flag.set_x_y (dot.x, dot.y) + translate_widget (dot, 40, 20) + end + + build_ocean + -- Create the polygon representing the `ocean' here + -- Redefined to add the points + do + Precursor {SEA_AREA_WIDGET} + -- start at west-most point + ocean.extend_point (create {EV_COORDINATE}.make (0, 0)) + ocean.extend_point (create {EV_COORDINATE}.make (133, 0)) -- under Truk + ocean.extend_point (create {EV_COORDINATE}.make (262, 115)) -- x is +/- 1 + ocean.extend_point (create {EV_COORDINATE}.make (163, 121)) -- at end of white line, east of Guadalcanal + ocean.extend_point (create {EV_COORDINATE}.make (159, 138)) + ocean.extend_point (create {EV_COORDINATE}.make (96, 107)) + end + + build_land + -- Add any brown land to Current + do + Precursor {SEA_AREA_WIDGET} + -- Add Soloman Islands polygons and tranform to + -- match other widgets + land.extend (new_britain) + land.extend (new_ireland) + land.extend (new_hanover) + land.extend (umboi) + land.extend (bougainville) + land.extend (choiseul) + land.extend (vella_lavella) + land.extend (kolombangara) + land.extend (new_georgia) + land.extend (santa_isabel) + land.extend (malaita) + land.extend (san_cristobal) + land.extend (nendo) + land.extend (new_caledonia) + land.extend (manus) + new_britain.transform (solomans_transform) + new_ireland.transform (solomans_transform) + new_hanover.transform (solomans_transform) + umboi.transform (solomans_transform) + bougainville.transform (solomans_transform) + choiseul.transform (solomans_transform) + vella_lavella.transform (solomans_transform) + kolombangara.transform (solomans_transform) + new_georgia.transform (solomans_transform) + santa_isabel.transform (solomans_transform) + malaita.transform (solomans_transform) + san_cristobal.transform (solomans_transform) + nendo.transform (solomans_transform) + new_caledonia.transform (solomans_transform) + manus.transform (solomans_transform) + end + +-- build_bounding_figure +-- -- Add points to the `jj_bounding_figure'. +-- -- Redefined to use the tile edges as the bounding area +-- do +-- if has (jj_bounding_figure) then +-- prune_all (jj_bounding_figure) +-- end +-- create jj_bounding_figure +-- extend (jj_bounding_figure) +-- -- start at west-most point +-- jj_bounding_figure.extend_point (create {EV_COORDINATE}.make (0, 0)) +-- jj_bounding_figure.extend_point (create {EV_COORDINATE}.make (133, 0)) -- under Truk +-- jj_bounding_figure.extend_point (create {EV_COORDINATE}.make (262, 115)) -- x is +/- 1 +-- jj_bounding_figure.extend_point (create {EV_COORDINATE}.make (163, 121)) -- at end of white line, east of Guadalcanal +-- jj_bounding_figure.extend_point (create {EV_COORDINATE}.make (159, 138)) +---- bounding_figure.extend_point (create {EV_COORDINATE}.make (96, 107)) +-- jj_bounding_figure.enable_closed +-- translate_widget (jj_bounding_figure, 255, 319) +-- jj_bounding_figure.set_line_width (2) +-- end + +feature -- Access + + new_britain: EV_MODEL_POLYGON + new_ireland: EV_MODEL_POLYGON + new_hanover: EV_MODEL_POLYGON + umboi: EV_MODEL_POLYGON + bougainville: EV_MODEL_POLYGON + choiseul: EV_MODEL_POLYGON + vella_lavella: EV_MODEL_POLYGON + kolombangara: EV_MODEL_POLYGON + new_georgia: EV_MODEL_POLYGON + santa_isabel: EV_MODEL_POLYGON + malaita: EV_MODEL_POLYGON + san_cristobal: EV_MODEL_POLYGON + nendo: EV_MODEL_POLYGON + new_caledonia: EV_MODEL_POLYGON + manus: EV_MODEL_POLYGON + +feature {NONE} -- Implementation + + solomans_point: EV_COORDINATE + -- Reference point for transformations of the Asia + -- polygons (i.e. `asia', `hainan', & `taiwan'). + local + bb: EV_RECTANGLE + mid_x: REAL_64 + mid_y: REAL_64 + once + create Result.make_precise (0.0, 0.0) + end + + solomans_move: EV_COORDINATE + -- Distance in x- and y-directions to move the asia polygons. + once + create Result.make_precise (97, 81) + end + + solomans_scale: REAL_64 = 0.13 + -- Scale factor for Asia polygons. + + solomans_angle: REAL_64 = 13.0 + -- Number of degrees to rotate the Asia polygons + + solomans_transform: EV_MODEL_TRANSFORMATION + -- Matrix to scale, rotate, and translate polygons + -- depicting `asia', `hainan', and `taiwan'. + local + r, s, t: EV_MODEL_TRANSFORMATION + once + create r.make_zero + create s.make_zero + create t.make_zero + t.translate (solomans_move.x_precise, solomans_move.y_precise) +-- s.scale (solomans_scale, solomansa_scale, solomans_point.x_precise, solomans_point.y_precise, 0.0) + s.scale (solomans_scale, solomans_scale, 0.0, 0.0, 0.0) + r.rotate (degrees_to_radians (solomans_angle), solomans_point.x_precise, solomans_point.y_precise) + Result := t * r * s + end + +feature {NONE} -- Implementaion + + new_britain_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (0, 0)) + Result.extend_point (create {EV_COORDINATE}.make_precise (3.5555555555555571, -0.88888888888891415)) + Result.extend_point (create {EV_COORDINATE}.make_precise (6.6666666666666288, 1.3333333333333144)) + Result.extend_point (create {EV_COORDINATE}.make_precise (7.5555555555555571, 4)) + Result.extend_point (create {EV_COORDINATE}.make_precise (9.777777777777743, 3.5555555555555998)) + Result.extend_point (create {EV_COORDINATE}.make_precise (11.111111111111086, 1.3333333333333144)) + Result.extend_point (create {EV_COORDINATE}.make_precise (16.444444444444429, 1.3333333333333144)) + Result.extend_point (create {EV_COORDINATE}.make_precise (19.703703703703695, 3.407407407407419)) + Result.extend_point (create {EV_COORDINATE}.make_precise (22.6666666666666, 2.2222222222222854)) + Result.extend_point (create {EV_COORDINATE}.make_precise (25.333333333333329, 0.4444444444444855)) + Result.extend_point (create {EV_COORDINATE}.make_precise (28.296296296296276, -0.14814814814812394)) + Result.extend_point (create {EV_COORDINATE}.make_precise (32.148148148148096, 1.3333333333333144)) + Result.extend_point (create {EV_COORDINATE}.make_precise (38.370370370370324, 3.7037037037037237)) + Result.extend_point (create {EV_COORDINATE}.make_precise (38.370370370370324, 5.4814814814814667)) + Result.extend_point (create {EV_COORDINATE}.make_precise (41.333333333333258, 5.4814814814814667)) + Result.extend_point (create {EV_COORDINATE}.make_precise (41.925925925925924, 4)) + Result.extend_point (create {EV_COORDINATE}.make_precise (43.407407407407391, 4.8888888888889426)) + Result.extend_point (create {EV_COORDINATE}.make_precise (45.185185185185162, 4.2962962962963331)) + Result.extend_point (create {EV_COORDINATE}.make_precise (47.555555555555486, 2.2222222222222854)) + Result.extend_point (create {EV_COORDINATE}.make_precise (51.407407407407391, 4)) + Result.extend_point (create {EV_COORDINATE}.make_precise (52.888888888888886, 3.1111111111110858)) + Result.extend_point (create {EV_COORDINATE}.make_precise (54.074074074074019, 4.5925925925926379)) + Result.extend_point (create {EV_COORDINATE}.make_precise (62.962962962962905, 3.1111111111110858)) + Result.extend_point (create {EV_COORDINATE}.make_precise (65.333333333333258, 1.6296296296296759)) + Result.extend_point (create {EV_COORDINATE}.make_precise (68, 1.9259259259259807)) + Result.extend_point (create {EV_COORDINATE}.make_precise (72.148148148148096, 0.14814814814815236)) + Result.extend_point (create {EV_COORDINATE}.make_precise (72.740740740740705, -2.5185185185185333)) + Result.extend_point (create {EV_COORDINATE}.make_precise (71.259259259259238, -3.1111111111110574)) + Result.extend_point (create {EV_COORDINATE}.make_precise (69.777777777777771, -5.1851851851852189)) + Result.extend_point (create {EV_COORDINATE}.make_precise (73.629629629629619, -9.3333333333333428)) + Result.extend_point (create {EV_COORDINATE}.make_precise (75.703703703703667, -11.703703703703667)) + Result.extend_point (create {EV_COORDINATE}.make_precise (74.518518518518448, -12.592592592592581)) + Result.extend_point (create {EV_COORDINATE}.make_precise (75.111111111111029, -15.851851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (75.407407407407362, -19.111111111111057)) + Result.extend_point (create {EV_COORDINATE}.make_precise (77.185185185185162, -21.185185185185219)) + Result.extend_point (create {EV_COORDINATE}.make_precise (81.629629629629619, -20.888888888888914)) + Result.extend_point (create {EV_COORDINATE}.make_precise (83.703703703703667, -17.925925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (81.03703703703701, -15.555555555555515)) + Result.extend_point (create {EV_COORDINATE}.make_precise (78.6666666666666, -14.666666666666686)) + Result.extend_point (create {EV_COORDINATE}.make_precise (78.370370370370324, -9.0370370370370097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (76.592592592592581, -8.740740740740705)) + Result.extend_point (create {EV_COORDINATE}.make_precise (77.777777777777771, -7.5555555555555145)) + Result.extend_point (create {EV_COORDINATE}.make_precise (78.6666666666666, -2.5185185185185333)) + Result.extend_point (create {EV_COORDINATE}.make_precise (79.259259259259238, 1.3333333333333144)) + Result.extend_point (create {EV_COORDINATE}.make_precise (82.814814814814724, 4.5925925925926379)) + Result.extend_point (create {EV_COORDINATE}.make_precise (87.555555555555543, 4.8888888888889426)) + Result.extend_point (create {EV_COORDINATE}.make_precise (90.222222222222229, 1.6296296296296759)) + Result.extend_point (create {EV_COORDINATE}.make_precise (94.962962962962933, -2.5185185185185333)) + Result.extend_point (create {EV_COORDINATE}.make_precise (100.59259259259258, 0.4444444444444855)) + Result.extend_point (create {EV_COORDINATE}.make_precise (102.37037037037032, 3.7037037037037237)) + Result.extend_point (create {EV_COORDINATE}.make_precise (106.51851851851845, 3.1111111111110858)) + Result.extend_point (create {EV_COORDINATE}.make_precise (107.99999999999994, 1.9259259259259807)) + Result.extend_point (create {EV_COORDINATE}.make_precise (107.40740740740736, 0.4444444444444855)) + Result.extend_point (create {EV_COORDINATE}.make_precise (110.96296296296293, -1.0370370370370097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (113.92592592592592, 1.0370370370370665)) + Result.extend_point (create {EV_COORDINATE}.make_precise (115.99999999999994, 0.14814814814815236)) + Result.extend_point (create {EV_COORDINATE}.make_precise (119.55555555555554, -2.8148148148147811)) + Result.extend_point (create {EV_COORDINATE}.make_precise (120.1481481481481, -5.7777777777777146)) + Result.extend_point (create {EV_COORDINATE}.make_precise (123.99999999999994, -14.074074074074019)) + Result.extend_point (create {EV_COORDINATE}.make_precise (128.74074074074065, -17.925925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (129.33333333333331, -21.185185185185219)) + Result.extend_point (create {EV_COORDINATE}.make_precise (127.25925925925921, -22.666666666666686)) + Result.extend_point (create {EV_COORDINATE}.make_precise (125.77777777777777, -24.4444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (127.85185185185182, -26.222222222222172)) + Result.extend_point (create {EV_COORDINATE}.make_precise (130.22222222222223, -25.629629629629619)) + Result.extend_point (create {EV_COORDINATE}.make_precise (129.33333333333331, -23.259259259259238)) + Result.extend_point (create {EV_COORDINATE}.make_precise (131.11111111111097, -21.481481481481495)) + Result.extend_point (create {EV_COORDINATE}.make_precise (135.55555555555554, -23.555555555555515)) + Result.extend_point (create {EV_COORDINATE}.make_precise (137.03703703703701, -25.629629629629619)) + Result.extend_point (create {EV_COORDINATE}.make_precise (137.92592592592584, -23.851851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (141.77777777777777, -23.851851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (142.96296296296293, -25.03703703703701)) + Result.extend_point (create {EV_COORDINATE}.make_precise (145.62962962962962, -24.148148148148124)) + Result.extend_point (create {EV_COORDINATE}.make_precise (148.29629629629628, -23.851851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (150.66666666666663, -25.925925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (151.55555555555554, -30.666666666666686)) + Result.extend_point (create {EV_COORDINATE}.make_precise (150.37037037037032, -30.370370370370324)) + Result.extend_point (create {EV_COORDINATE}.make_precise (150.37037037037032, -34.814814814814781)) + Result.extend_point (create {EV_COORDINATE}.make_precise (148.59259259259255, -40.444444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (148.59259259259255, -44.296296296296248)) + Result.extend_point (create {EV_COORDINATE}.make_precise (145.33333333333331, -47.851851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (144.44444444444443, -52.592592592592553)) + Result.extend_point (create {EV_COORDINATE}.make_precise (143.25925925925921, -51.407407407407362)) + Result.extend_point (create {EV_COORDINATE}.make_precise (142.37037037037032, -56.148148148148124)) + Result.extend_point (create {EV_COORDINATE}.make_precise (144.44444444444443, -58.518518518518505)) + Result.extend_point (create {EV_COORDINATE}.make_precise (146.51851851851845, -57.925925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (151.55555555555554, -58.518518518518505)) + Result.extend_point (create {EV_COORDINATE}.make_precise (151.85185185185182, -56.740740740740733)) + Result.extend_point (create {EV_COORDINATE}.make_precise (158.96296296296293, -57.333333333333343)) + Result.extend_point (create {EV_COORDINATE}.make_precise (159.25925925925918, -53.777777777777715)) + Result.extend_point (create {EV_COORDINATE}.make_precise (162.51851851851842, -51.407407407407362)) + Result.extend_point (create {EV_COORDINATE}.make_precise (164.88888888888874, -51.999999999999943)) + Result.extend_point (create {EV_COORDINATE}.make_precise (166.96296296296293, -55.259259259259238)) + Result.extend_point (create {EV_COORDINATE}.make_precise (164.88888888888874, -57.333333333333343)) + Result.extend_point (create {EV_COORDINATE}.make_precise (171.11111111111097, -57.333333333333343)) + Result.extend_point (create {EV_COORDINATE}.make_precise (171.40740740740733, -59.999999999999943)) + Result.extend_point (create {EV_COORDINATE}.make_precise (173.77777777777777, -60.888888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (176.74074074074065, -56.444444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (175.25925925925918, -55.259259259259238)) + Result.extend_point (create {EV_COORDINATE}.make_precise (173.48148148148141, -56.740740740740733)) + Result.extend_point (create {EV_COORDINATE}.make_precise (173.48148148148141, -54.074074074074019)) + Result.extend_point (create {EV_COORDINATE}.make_precise (178.22222222222223, -51.111111111111057)) + Result.extend_point (create {EV_COORDINATE}.make_precise (183.85185185185179, -52.296296296296248)) + Result.extend_point (create {EV_COORDINATE}.make_precise (185.03703703703701, -49.629629629629619)) + Result.extend_point (create {EV_COORDINATE}.make_precise (181.48148148148141, -44.888888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (177.33333333333331, -46.370370370370324)) + Result.extend_point (create {EV_COORDINATE}.make_precise (174.66666666666663, -44.888888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (176.74074074074065, -44.888888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (180.29629629629619, -44.296296296296248)) + Result.extend_point (create {EV_COORDINATE}.make_precise (182.37037037037032, -41.629629629629619)) + Result.extend_point (create {EV_COORDINATE}.make_precise (183.25925925925918, -34.814814814814781)) + Result.extend_point (create {EV_COORDINATE}.make_precise (181.18518518518516, -29.185185185185162)) + Result.extend_point (create {EV_COORDINATE}.make_precise (177.03703703703701, -23.555555555555515)) + Result.extend_point (create {EV_COORDINATE}.make_precise (173.77777777777777, -21.777777777777715)) + Result.extend_point (create {EV_COORDINATE}.make_precise (168.74074074074065, -22.370370370370324)) + Result.extend_point (create {EV_COORDINATE}.make_precise (164.59259259259255, -21.481481481481495)) + Result.extend_point (create {EV_COORDINATE}.make_precise (165.18518518518516, -19.111111111111057)) + Result.extend_point (create {EV_COORDINATE}.make_precise (163.70370370370358, -17.333333333333343)) + Result.extend_point (create {EV_COORDINATE}.make_precise (164.29629629629619, -13.777777777777715)) + Result.extend_point (create {EV_COORDINATE}.make_precise (168.44444444444429, -11.111111111111057)) + Result.extend_point (create {EV_COORDINATE}.make_precise (171.11111111111097, -6.9629629629629335)) + Result.extend_point (create {EV_COORDINATE}.make_precise (172.29629629629619, -4)) + Result.extend_point (create {EV_COORDINATE}.make_precise (169.33333333333331, 0.4444444444444855)) + Result.extend_point (create {EV_COORDINATE}.make_precise (162.81481481481472, 3.407407407407419)) + Result.extend_point (create {EV_COORDINATE}.make_precise (156.88888888888874, 6.0740740740740762)) + Result.extend_point (create {EV_COORDINATE}.make_precise (154.51851851851842, 3.407407407407419)) + Result.extend_point (create {EV_COORDINATE}.make_precise (149.48148148148141, 2.2222222222222854)) + Result.extend_point (create {EV_COORDINATE}.make_precise (150.07407407407399, 5.4814814814814667)) + Result.extend_point (create {EV_COORDINATE}.make_precise (147.40740740740733, 3.7037037037037237)) + Result.extend_point (create {EV_COORDINATE}.make_precise (141.77777777777777, 2.5185185185185048)) + Result.extend_point (create {EV_COORDINATE}.make_precise (140.29629629629628, 6.3703703703703809)) + Result.extend_point (create {EV_COORDINATE}.make_precise (144.1481481481481, 8.4444444444444855)) + Result.extend_point (create {EV_COORDINATE}.make_precise (143.85185185185182, 10.222222222222285)) + Result.extend_point (create {EV_COORDINATE}.make_precise (139.99999999999997, 12)) + Result.extend_point (create {EV_COORDINATE}.make_precise (138.51851851851845, 14.370370370370381)) + Result.extend_point (create {EV_COORDINATE}.make_precise (140.88888888888889, 14.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (135.25925925925921, 16.444444444444485)) + Result.extend_point (create {EV_COORDINATE}.make_precise (130.81481481481475, 20.888888888888943)) + Result.extend_point (create {EV_COORDINATE}.make_precise (128.44444444444443, 22.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (125.48148148148141, 22.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (120.7407407407407, 26.518518518518505)) + Result.extend_point (create {EV_COORDINATE}.make_precise (118.37037037037032, 25.037037037037067)) + Result.extend_point (create {EV_COORDINATE}.make_precise (114.51851851851845, 25.333333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (113.62962962962962, 27.111111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (111.85185185185182, 25.925925925925981)) + Result.extend_point (create {EV_COORDINATE}.make_precise (110.37037037037032, 25.925925925925981)) + Result.extend_point (create {EV_COORDINATE}.make_precise (110.37037037037032, 28.592592592592638)) + Result.extend_point (create {EV_COORDINATE}.make_precise (108.88888888888889, 30.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (103.25925925925924, 30.666666666666686)) + Result.extend_point (create {EV_COORDINATE}.make_precise (99.999999999999943, 32.444444444444485)) + Result.extend_point (create {EV_COORDINATE}.make_precise (95.851851851851819, 36.296296296296333)) + Result.extend_point (create {EV_COORDINATE}.make_precise (91.111111111111029, 37.481481481481467)) + Result.extend_point (create {EV_COORDINATE}.make_precise (85.48148148148141, 37.481481481481467)) + Result.extend_point (create {EV_COORDINATE}.make_precise (82.814814814814724, 34.81481481481481)) + Result.extend_point (create {EV_COORDINATE}.make_precise (78.6666666666666, 38.074074074074048)) + Result.extend_point (create {EV_COORDINATE}.make_precise (76.888888888888886, 35.703703703703724)) + Result.extend_point (create {EV_COORDINATE}.make_precise (75.703703703703667, 38.370370370370381)) + Result.extend_point (create {EV_COORDINATE}.make_precise (72.740740740740705, 36.000000000000028)) + Result.extend_point (create {EV_COORDINATE}.make_precise (70.962962962962933, 37.777777777777828)) + Result.extend_point (create {EV_COORDINATE}.make_precise (68.296296296296276, 36.592592592592609)) + Result.extend_point (create {EV_COORDINATE}.make_precise (67.407407407407391, 37.481481481481467)) + Result.extend_point (create {EV_COORDINATE}.make_precise (61.481481481481438, 37.481481481481467)) + Result.extend_point (create {EV_COORDINATE}.make_precise (60.888888888888886, 38.666666666666686)) + Result.extend_point (create {EV_COORDINATE}.make_precise (54.074074074074019, 38.666666666666686)) + Result.extend_point (create {EV_COORDINATE}.make_precise (52.888888888888886, 34.81481481481481)) + Result.extend_point (create {EV_COORDINATE}.make_precise (50.222222222222229, 29.777777777777828)) + Result.extend_point (create {EV_COORDINATE}.make_precise (44.296296296296276, 28.296296296296333)) + Result.extend_point (create {EV_COORDINATE}.make_precise (36.592592592592581, 29.185185185185219)) + Result.extend_point (create {EV_COORDINATE}.make_precise (35.407407407407391, 30.370370370370381)) + Result.extend_point (create {EV_COORDINATE}.make_precise (32.444444444444429, 31.259259259259267)) + Result.extend_point (create {EV_COORDINATE}.make_precise (31.851851851851819, 32.740740740740705)) + Result.extend_point (create {EV_COORDINATE}.make_precise (25.629629629629619, 32.740740740740705)) + Result.extend_point (create {EV_COORDINATE}.make_precise (27.407407407407391, 29.777777777777828)) + Result.extend_point (create {EV_COORDINATE}.make_precise (26.222222222222229, 29.185185185185219)) + Result.extend_point (create {EV_COORDINATE}.make_precise (26.518518518518476, 27.111111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (21.777777777777771, 25.037037037037067)) + Result.extend_point (create {EV_COORDINATE}.make_precise (22.370370370370338, 22.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (20, 20.592592592592638)) + Result.extend_point (create {EV_COORDINATE}.make_precise (18.518518518518491, 21.777777777777828)) + Result.extend_point (create {EV_COORDINATE}.make_precise (17.629629629629619, 19.703703703703724)) + Result.extend_point (create {EV_COORDINATE}.make_precise (14.962962962962948, 18.222222222222285)) + Result.extend_point (create {EV_COORDINATE}.make_precise (12, 16.148148148148152)) + Result.extend_point (create {EV_COORDINATE}.make_precise (9.3333333333333286, 17.629629629629676)) + Result.extend_point (create {EV_COORDINATE}.make_precise (7.2592592592592524, 15.851851851851876)) + Result.extend_point (create {EV_COORDINATE}.make_precise (0.14814814814812394, 13.185185185185219)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-1.9259259259259238, 10.518518518518505)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-2.222222222222257, 4.5925925925926379)) + end + + new_ireland_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (110.07407407407402, -132.88888888888883)) + Result.extend_point (create {EV_COORDINATE}.make_precise (112.1481481481481, -132.59259259259255)) + Result.extend_point (create {EV_COORDINATE}.make_precise (114.51851851851845, -130.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (121.62962962962962, -127.85185185185182)) + Result.extend_point (create {EV_COORDINATE}.make_precise (122.22222222222223, -124.29629629629625)) + Result.extend_point (create {EV_COORDINATE}.make_precise (127.25925925925921, -123.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (130.22222222222223, -119.85185185185182)) + Result.extend_point (create {EV_COORDINATE}.make_precise (136.44444444444443, -118.96296296296292)) + Result.extend_point (create {EV_COORDINATE}.make_precise (146.51851851851845, -113.03703703703698)) + Result.extend_point (create {EV_COORDINATE}.make_precise (149.48148148148141, -111.55555555555553)) + Result.extend_point (create {EV_COORDINATE}.make_precise (158.07407407407396, -104.14814814814812)) + Result.extend_point (create {EV_COORDINATE}.make_precise (160.74074074074065, -104.74074074074069)) + Result.extend_point (create {EV_COORDINATE}.make_precise (163.40740740740733, -102.96296296296292)) + Result.extend_point (create {EV_COORDINATE}.make_precise (167.85185185185179, -102.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (177.62962962962962, -90.2222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (181.18518518518516, -89.629629629629605)) + Result.extend_point (create {EV_COORDINATE}.make_precise (185.33333333333331, -82.222222222222172)) + Result.extend_point (create {EV_COORDINATE}.make_precise (187.11111111111097, -83.703703703703667)) + Result.extend_point (create {EV_COORDINATE}.make_precise (189.18518518518516, -82.814814814814781)) + Result.extend_point (create {EV_COORDINATE}.make_precise (191.25925925925918, -75.407407407407362)) + Result.extend_point (create {EV_COORDINATE}.make_precise (193.92592592592581, -75.703703703703667)) + Result.extend_point (create {EV_COORDINATE}.make_precise (196.88888888888874, -73.037037037036995)) + Result.extend_point (create {EV_COORDINATE}.make_precise (200.44444444444429, -72.444444444444386)) + Result.extend_point (create {EV_COORDINATE}.make_precise (201.33333333333331, -73.92592592592591)) + Result.extend_point (create {EV_COORDINATE}.make_precise (203.99999999999989, -71.851851851851833)) + Result.extend_point (create {EV_COORDINATE}.make_precise (203.99999999999989, -68.592592592592553)) + Result.extend_point (create {EV_COORDINATE}.make_precise (208.44444444444429, -68.592592592592553)) + Result.extend_point (create {EV_COORDINATE}.make_precise (210.51851851851842, -65.037037037037038)) + Result.extend_point (create {EV_COORDINATE}.make_precise (214.37037037037032, -57.629629629629619)) + Result.extend_point (create {EV_COORDINATE}.make_precise (217.62962962962962, -49.629629629629619)) + Result.extend_point (create {EV_COORDINATE}.make_precise (213.18518518518516, -44.592592592592553)) + Result.extend_point (create {EV_COORDINATE}.make_precise (214.66666666666663, -38.962962962962933)) + Result.extend_point (create {EV_COORDINATE}.make_precise (212.59259259259255, -38.370370370370324)) + Result.extend_point (create {EV_COORDINATE}.make_precise (212.59259259259255, -35.703703703703667)) + Result.extend_point (create {EV_COORDINATE}.make_precise (210.51851851851842, -34.814814814814781)) + Result.extend_point (create {EV_COORDINATE}.make_precise (210.51851851851842, -31.555555555555515)) + Result.extend_point (create {EV_COORDINATE}.make_precise (207.25925925925918, -30.074074074074019)) + Result.extend_point (create {EV_COORDINATE}.make_precise (206.66666666666663, -27.999999999999943)) + Result.extend_point (create {EV_COORDINATE}.make_precise (204.88888888888874, -30.370370370370324)) + Result.extend_point (create {EV_COORDINATE}.make_precise (201.62962962962962, -33.037037037037038)) + Result.extend_point (create {EV_COORDINATE}.make_precise (200.1481481481481, -35.703703703703667)) + Result.extend_point (create {EV_COORDINATE}.make_precise (198.37037037037032, -35.407407407407362)) + Result.extend_point (create {EV_COORDINATE}.make_precise (198.37037037037032, -39.851851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (196.29629629629619, -40.148148148148124)) + Result.extend_point (create {EV_COORDINATE}.make_precise (195.99999999999989, -43.407407407407362)) + Result.extend_point (create {EV_COORDINATE}.make_precise (194.51851851851842, -45.777777777777715)) + Result.extend_point (create {EV_COORDINATE}.make_precise (196.88888888888874, -48.444444444444457)) + Result.extend_point (create {EV_COORDINATE}.make_precise (196.88888888888874, -58.222222222222172)) + Result.extend_point (create {EV_COORDINATE}.make_precise (193.62962962962962, -60.888888888888886)) + Result.extend_point (create {EV_COORDINATE}.make_precise (192.74074074074065, -65.629629629629619)) + Result.extend_point (create {EV_COORDINATE}.make_precise (187.99999999999989, -71.851851851851833)) + Result.extend_point (create {EV_COORDINATE}.make_precise (185.03703703703701, -73.629629629629605)) + Result.extend_point (create {EV_COORDINATE}.make_precise (185.03703703703701, -75.407407407407362)) + Result.extend_point (create {EV_COORDINATE}.make_precise (181.18518518518516, -79.555555555555515)) + Result.extend_point (create {EV_COORDINATE}.make_precise (178.22222222222223, -84.592592592592538)) + Result.extend_point (create {EV_COORDINATE}.make_precise (172.59259259259255, -88.740740740740691)) + Result.extend_point (create {EV_COORDINATE}.make_precise (167.25925925925918, -90.2222222222222)) + Result.extend_point (create {EV_COORDINATE}.make_precise (161.62962962962962, -91.407407407407362)) + Result.extend_point (create {EV_COORDINATE}.make_precise (153.33333333333331, -96.740740740740691)) + Result.extend_point (create {EV_COORDINATE}.make_precise (146.51851851851845, -104.14814814814812)) + Result.extend_point (create {EV_COORDINATE}.make_precise (142.96296296296293, -105.6296296296296)) + Result.extend_point (create {EV_COORDINATE}.make_precise (139.40740740740733, -108.59259259259254)) + Result.extend_point (create {EV_COORDINATE}.make_precise (135.55555555555554, -110.66666666666661)) + Result.extend_point (create {EV_COORDINATE}.make_precise (132.88888888888889, -112.44444444444439)) + Result.extend_point (create {EV_COORDINATE}.make_precise (129.03703703703701, -113.62962962962959)) + Result.extend_point (create {EV_COORDINATE}.make_precise (127.25925925925921, -115.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (124.59259259259258, -118.96296296296292)) + Result.extend_point (create {EV_COORDINATE}.make_precise (120.44444444444443, -119.55555555555553)) + Result.extend_point (create {EV_COORDINATE}.make_precise (119.55555555555554, -121.62962962962959)) + Result.extend_point (create {EV_COORDINATE}.make_precise (114.51851851851845, -121.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (113.03703703703701, -120.74074074074069)) + Result.extend_point (create {EV_COORDINATE}.make_precise (109.48148148148141, -120.14814814814811)) + Result.extend_point (create {EV_COORDINATE}.make_precise (107.99999999999994, -123.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (104.44444444444443, -123.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (101.77777777777777, -125.18518518518513)) + Result.extend_point (create {EV_COORDINATE}.make_precise (100.59259259259258, -127.85185185185182)) + Result.extend_point (create {EV_COORDINATE}.make_precise (102.96296296296293, -127.85185185185182)) + Result.extend_point (create {EV_COORDINATE}.make_precise (104.44444444444443, -126.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (107.11111111111103, -126.66666666666661)) + Result.extend_point (create {EV_COORDINATE}.make_precise (108.29629629629628, -125.48148148148144)) + Result.extend_point (create {EV_COORDINATE}.make_precise (111.25925925925924, -125.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (113.33333333333326, -126.66666666666661)) + Result.extend_point (create {EV_COORDINATE}.make_precise (112.1481481481481, -128.1481481481481)) + Result.extend_point (create {EV_COORDINATE}.make_precise (110.37037037037032, -129.92592592592587)) + end + + new_hanover_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (71.851851851851819, -136.7407407407407)) + Result.extend_point (create {EV_COORDINATE}.make_precise (75.111111111111029, -137.03703703703698)) + Result.extend_point (create {EV_COORDINATE}.make_precise (76.888888888888886, -139.70370370370367)) + Result.extend_point (create {EV_COORDINATE}.make_precise (78.962962962962933, -139.11111111111106)) + Result.extend_point (create {EV_COORDINATE}.make_precise (80.740740740740705, -140.29629629629625)) + Result.extend_point (create {EV_COORDINATE}.make_precise (82.222222222222229, -141.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (87.555555555555543, -139.70370370370367)) + Result.extend_point (create {EV_COORDINATE}.make_precise (89.333333333333258, -139.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (89.629629629629619, -138.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (94.6666666666666, -136.7407407407407)) + Result.extend_point (create {EV_COORDINATE}.make_precise (97.03703703703701, -132.88888888888883)) + Result.extend_point (create {EV_COORDINATE}.make_precise (95.259259259259238, -131.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (96.148148148148096, -127.25925925925922)) + Result.extend_point (create {EV_COORDINATE}.make_precise (92.296296296296276, -127.55555555555553)) + Result.extend_point (create {EV_COORDINATE}.make_precise (89.925925925925924, -126.66666666666661)) + Result.extend_point (create {EV_COORDINATE}.make_precise (88.148148148148096, -126.96296296296292)) + Result.extend_point (create {EV_COORDINATE}.make_precise (82.222222222222229, -126.66666666666661)) + Result.extend_point (create {EV_COORDINATE}.make_precise (78.6666666666666, -128.4444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (78.6666666666666, -131.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (76.296296296296276, -134.37037037037032)) + Result.extend_point (create {EV_COORDINATE}.make_precise (72.740740740740705, -134.66666666666663)) + end + + umboi_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-27.407407407407433, 0.4444444444444855)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-24.444444444444443, -0.74074074074070495)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-21.481481481481495, 1.6296296296296759)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-17.925925925925924, 1.9259259259259807)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-12.888888888888914, 6.6666666666666572)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-13.481481481481524, 15.5555555555556)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-17.333333333333357, 17.629629629629676)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-18.518518518518533, 14.666666666666657)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-22.074074074074076, 14.074074074074076)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-22.370370370370381, 11.111111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-25.333333333333357, 10.814814814814781)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-28, 6.0740740740740762)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-28.296296296296305, 3.1111111111110858)) + end + + bougainville_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (281.03703703703701, -16.740740740740705)) + Result.extend_point (create {EV_COORDINATE}.make_precise (284.5925925925925, -20.592592592592581)) + Result.extend_point (create {EV_COORDINATE}.make_precise (287.85185185185179, -19.703703703703667)) + Result.extend_point (create {EV_COORDINATE}.make_precise (288.74074074074059, -14.370370370370324)) + Result.extend_point (create {EV_COORDINATE}.make_precise (289.03703703703701, -6.3703703703703241)) + Result.extend_point (create {EV_COORDINATE}.make_precise (287.85185185185179, -2.8148148148147811)) + Result.extend_point (create {EV_COORDINATE}.make_precise (291.11111111111097, -1.3333333333333428)) + Result.extend_point (create {EV_COORDINATE}.make_precise (295.55555555555554, 2.8148148148147811)) + Result.extend_point (create {EV_COORDINATE}.make_precise (299.99999999999983, 2.5185185185185048)) + Result.extend_point (create {EV_COORDINATE}.make_precise (308.29629629629625, 6.3703703703703809)) + Result.extend_point (create {EV_COORDINATE}.make_precise (308.29629629629625, 10.222222222222285)) + Result.extend_point (create {EV_COORDINATE}.make_precise (310.37037037037032, 11.703703703703724)) + Result.extend_point (create {EV_COORDINATE}.make_precise (310.96296296296293, 17.925925925925981)) + Result.extend_point (create {EV_COORDINATE}.make_precise (314.22222222222223, 17.925925925925981)) + Result.extend_point (create {EV_COORDINATE}.make_precise (316.5925925925925, 21.777777777777828)) + Result.extend_point (create {EV_COORDINATE}.make_precise (319.25925925925918, 21.777777777777828)) + Result.extend_point (create {EV_COORDINATE}.make_precise (321.92592592592581, 25.037037037037067)) + Result.extend_point (create {EV_COORDINATE}.make_precise (321.33333333333331, 29.777777777777828)) + Result.extend_point (create {EV_COORDINATE}.make_precise (323.70370370370364, 31.851851851851876)) + Result.extend_point (create {EV_COORDINATE}.make_precise (326.66666666666663, 31.259259259259267)) + Result.extend_point (create {EV_COORDINATE}.make_precise (327.25925925925918, 33.629629629629676)) + Result.extend_point (create {EV_COORDINATE}.make_precise (329.33333333333331, 34.222222222222285)) + Result.extend_point (create {EV_COORDINATE}.make_precise (330.22222222222223, 32.444444444444485)) + Result.extend_point (create {EV_COORDINATE}.make_precise (333.18518518518511, 32.444444444444485)) + Result.extend_point (create {EV_COORDINATE}.make_precise (333.18518518518511, 35.111111111111029)) + Result.extend_point (create {EV_COORDINATE}.make_precise (339.99999999999983, 40.740740740740705)) + Result.extend_point (create {EV_COORDINATE}.make_precise (342.07407407407396, 46.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (344.1481481481481, 47.259259259259267)) + Result.extend_point (create {EV_COORDINATE}.make_precise (345.33333333333331, 50.518518518518505)) + Result.extend_point (create {EV_COORDINATE}.make_precise (344.44444444444429, 52.000000000000028)) + Result.extend_point (create {EV_COORDINATE}.make_precise (346.51851851851842, 57.037037037037067)) + Result.extend_point (create {EV_COORDINATE}.make_precise (345.33333333333331, 60.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (339.99999999999983, 60.296296296296248)) + Result.extend_point (create {EV_COORDINATE}.make_precise (336.74074074074059, 62.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (335.55555555555554, 65.333333333333371)) + Result.extend_point (create {EV_COORDINATE}.make_precise (332.5925925925925, 64.148148148148152)) + Result.extend_point (create {EV_COORDINATE}.make_precise (330.22222222222223, 64.740740740740705)) + Result.extend_point (create {EV_COORDINATE}.make_precise (322.81481481481467, 62.370370370370381)) + Result.extend_point (create {EV_COORDINATE}.make_precise (318.07407407407396, 59.111111111111029)) + Result.extend_point (create {EV_COORDINATE}.make_precise (315.99999999999983, 56.148148148148152)) + Result.extend_point (create {EV_COORDINATE}.make_precise (312.44444444444429, 54.370370370370381)) + Result.extend_point (create {EV_COORDINATE}.make_precise (308.88888888888886, 48.444444444444485)) + Result.extend_point (create {EV_COORDINATE}.make_precise (311.85185185185179, 48.148148148148152)) + Result.extend_point (create {EV_COORDINATE}.make_precise (312.44444444444429, 45.185185185185219)) + Result.extend_point (create {EV_COORDINATE}.make_precise (310.96296296296293, 43.111111111111029)) + Result.extend_point (create {EV_COORDINATE}.make_precise (312.44444444444429, 41.925925925925895)) + Result.extend_point (create {EV_COORDINATE}.make_precise (311.25925925925918, 38.074074074074048)) + Result.extend_point (create {EV_COORDINATE}.make_precise (307.70370370370364, 37.777777777777828)) + Result.extend_point (create {EV_COORDINATE}.make_precise (303.25925925925918, 35.407407407407391)) + Result.extend_point (create {EV_COORDINATE}.make_precise (299.70370370370364, 32.740740740740705)) + Result.extend_point (create {EV_COORDINATE}.make_precise (299.99999999999983, 29.777777777777828)) + Result.extend_point (create {EV_COORDINATE}.make_precise (295.85185185185179, 27.407407407407419)) + Result.extend_point (create {EV_COORDINATE}.make_precise (293.48148148148141, 24.740740740740762)) + Result.extend_point (create {EV_COORDINATE}.make_precise (290.81481481481467, 23.259259259259295)) + Result.extend_point (create {EV_COORDINATE}.make_precise (290.22222222222223, 19.703703703703724)) + Result.extend_point (create {EV_COORDINATE}.make_precise (291.70370370370364, 19.111111111111086)) + Result.extend_point (create {EV_COORDINATE}.make_precise (290.22222222222223, 16.444444444444485)) + Result.extend_point (create {EV_COORDINATE}.make_precise (287.85185185185179, 13.481481481481467)) + Result.extend_point (create {EV_COORDINATE}.make_precise (289.92592592592581, 10.518518518518505)) + Result.extend_point (create {EV_COORDINATE}.make_precise (289.33333333333331, 8.4444444444444855)) + Result.extend_point (create {EV_COORDINATE}.make_precise (289.92592592592581, 6.6666666666666572)) + Result.extend_point (create {EV_COORDINATE}.make_precise (288.44444444444429, 4.8888888888889426)) + Result.extend_point (create {EV_COORDINATE}.make_precise (290.81481481481467, 4.5925925925926379)) + Result.extend_point (create {EV_COORDINATE}.make_precise (290.81481481481467, 2.8148148148147811)) + Result.extend_point (create {EV_COORDINATE}.make_precise (288.44444444444429, 0.74074074074076179)) + Result.extend_point (create {EV_COORDINATE}.make_precise (286.07407407407396, -1.0370370370370097)) + Result.extend_point (create {EV_COORDINATE}.make_precise (284.88888888888886, -0.14814814814812394)) + Result.extend_point (create {EV_COORDINATE}.make_precise (283.99999999999983, -2.8148148148147811)) + Result.extend_point (create {EV_COORDINATE}.make_precise (281.92592592592581, -6.6666666666666856)) + Result.extend_point (create {EV_COORDINATE}.make_precise (282.22222222222223, -11.703703703703667)) + end + + choiseul_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (365.48148148148141, 53.777777777777828)) + Result.extend_point (create {EV_COORDINATE}.make_precise (366.96296296296288, 51.703703703703724)) + Result.extend_point (create {EV_COORDINATE}.make_precise (370.51851851851842, 51.703703703703724)) + Result.extend_point (create {EV_COORDINATE}.make_precise (372.59259259259244, 53.777777777777828)) + Result.extend_point (create {EV_COORDINATE}.make_precise (375.85185185185179, 53.777777777777828)) + Result.extend_point (create {EV_COORDINATE}.make_precise (377.33333333333331, 56.740740740740705)) + Result.extend_point (create {EV_COORDINATE}.make_precise (378.81481481481467, 59.407407407407391)) + Result.extend_point (create {EV_COORDINATE}.make_precise (384.4444444444444, 59.407407407407391)) + Result.extend_point (create {EV_COORDINATE}.make_precise (387.11111111111103, 61.185185185185219)) + Result.extend_point (create {EV_COORDINATE}.make_precise (389.77777777777771, 63.259259259259238)) + Result.extend_point (create {EV_COORDINATE}.make_precise (398.37037037037032, 67.703703703703638)) + Result.extend_point (create {EV_COORDINATE}.make_precise (398.66666666666663, 71.259259259259238)) + Result.extend_point (create {EV_COORDINATE}.make_precise (398.37037037037032, 75.703703703703638)) + Result.extend_point (create {EV_COORDINATE}.make_precise (400.74074074074059, 75.999999999999943)) + Result.extend_point (create {EV_COORDINATE}.make_precise (402.81481481481467, 78.666666666666686)) + Result.extend_point (create {EV_COORDINATE}.make_precise (405.18518518518511, 78.370370370370381)) + Result.extend_point (create {EV_COORDINATE}.make_precise (407.85185185185179, 82.222222222222285)) + Result.extend_point (create {EV_COORDINATE}.make_precise (411.99999999999972, 84.592592592592609)) + Result.extend_point (create {EV_COORDINATE}.make_precise (414.07407407407396, 84.592592592592609)) + Result.extend_point (create {EV_COORDINATE}.make_precise (415.25925925925907, 82.814814814814781)) + Result.extend_point (create {EV_COORDINATE}.make_precise (417.62962962962939, 82.814814814814781)) + Result.extend_point (create {EV_COORDINATE}.make_precise (419.40740740740722, 85.777777777777828)) + Result.extend_point (create {EV_COORDINATE}.make_precise (419.11111111111103, 88.444444444444343)) + Result.extend_point (create {EV_COORDINATE}.make_precise (422.66666666666634, 89.333333333333371)) + Result.extend_point (create {EV_COORDINATE}.make_precise (422.07407407407396, 91.407407407407391)) + Result.extend_point (create {EV_COORDINATE}.make_precise (415.55555555555526, 89.629629629629676)) + Result.extend_point (create {EV_COORDINATE}.make_precise (414.66666666666634, 91.407407407407391)) + Result.extend_point (create {EV_COORDINATE}.make_precise (407.85185185185179, 89.925925925925867)) + Result.extend_point (create {EV_COORDINATE}.make_precise (407.55555555555554, 86.666666666666686)) + Result.extend_point (create {EV_COORDINATE}.make_precise (400.4444444444444, 86.370370370370381)) + Result.extend_point (create {EV_COORDINATE}.make_precise (398.96296296296288, 88.148148148148152)) + Result.extend_point (create {EV_COORDINATE}.make_precise (396.88888888888886, 83.407407407407391)) + Result.extend_point (create {EV_COORDINATE}.make_precise (393.62962962962945, 85.185185185185219)) + Result.extend_point (create {EV_COORDINATE}.make_precise (393.33333333333331, 81.925925925925867)) + Result.extend_point (create {EV_COORDINATE}.make_precise (391.25925925925907, 81.925925925925867)) + Result.extend_point (create {EV_COORDINATE}.make_precise (381.48148148148141, 72.740740740740705)) + Result.extend_point (create {EV_COORDINATE}.make_precise (381.18518518518511, 70.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (376.1481481481481, 65.333333333333371)) + Result.extend_point (create {EV_COORDINATE}.make_precise (374.37037037037032, 65.629629629629676)) + Result.extend_point (create {EV_COORDINATE}.make_precise (371.40740740740728, 62.074074074074019)) + Result.extend_point (create {EV_COORDINATE}.make_precise (366.37037037037032, 59.999999999999943)) + end + + vella_lavella_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (371.40740740740728, 99.111111111111029)) + Result.extend_point (create {EV_COORDINATE}.make_precise (374.37037037037032, 96.148148148148152)) + Result.extend_point (create {EV_COORDINATE}.make_precise (379.70370370370364, 101.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (383.55555555555554, 103.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (383.55555555555554, 105.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (380.29629629629619, 108.29629629629625)) + Result.extend_point (create {EV_COORDINATE}.make_precise (380.29629629629619, 113.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (377.33333333333331, 113.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (377.03703703703701, 110.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (373.77777777777771, 110.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (374.66666666666663, 106.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (372.59259259259244, 105.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (371.99999999999972, 102.66666666666669)) + end + + kolombangara_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (395.70370370370364, 122.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (392.1481481481481, 120.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (390.37037037037032, 117.18518518518522)) + Result.extend_point (create {EV_COORDINATE}.make_precise (390.37037037037032, 113.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (393.62962962962945, 109.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (397.18518518518511, 108.59259259259261)) + Result.extend_point (create {EV_COORDINATE}.make_precise (400.4444444444444, 109.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (402.51851851851842, 113.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (401.62962962962945, 117.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (402.22222222222223, 118.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (400.1481481481481, 121.92592592592587)) + end + + new_georgia_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (401.62962962962945, 127.85185185185185)) + Result.extend_point (create {EV_COORDINATE}.make_precise (403.11111111111103, 125.18518518518522)) + Result.extend_point (create {EV_COORDINATE}.make_precise (405.48148148148141, 125.18518518518522)) + Result.extend_point (create {EV_COORDINATE}.make_precise (408.74074074074059, 120.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (411.11111111111103, 115.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (415.55555555555526, 114.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (420.88888888888886, 118.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (420.88888888888886, 121.03703703703707)) + Result.extend_point (create {EV_COORDINATE}.make_precise (420.59259259259244, 123.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (422.37037037037015, 126.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (422.96296296296288, 127.5555555555556)) + Result.extend_point (create {EV_COORDINATE}.make_precise (425.62962962962939, 126.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (427.99999999999972, 126.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (428.59259259259244, 129.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (430.96296296296288, 129.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (431.55555555555526, 133.18518518518522)) + Result.extend_point (create {EV_COORDINATE}.make_precise (433.33333333333331, 135.5555555555556)) + Result.extend_point (create {EV_COORDINATE}.make_precise (434.22222222222223, 137.03703703703707)) + Result.extend_point (create {EV_COORDINATE}.make_precise (433.62962962962939, 140.59259259259261)) + Result.extend_point (create {EV_COORDINATE}.make_precise (433.62962962962939, 143.5555555555556)) + Result.extend_point (create {EV_COORDINATE}.make_precise (435.70370370370364, 142.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (436.29629629629613, 140.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (439.55555555555526, 138.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (438.96296296296288, 141.48148148148147)) + Result.extend_point (create {EV_COORDINATE}.make_precise (440.4444444444444, 142.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (441.33333333333331, 140.59259259259261)) + Result.extend_point (create {EV_COORDINATE}.make_precise (444.88888888888886, 142.37037037037038)) + Result.extend_point (create {EV_COORDINATE}.make_precise (443.99999999999972, 144.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (441.9259259259257, 144.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (441.9259259259257, 145.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (443.70370370370364, 145.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (443.99999999999972, 148.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (442.81481481481461, 150.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (444.29629629629613, 150.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (446.96296296296288, 149.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (449.33333333333331, 150.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (448.74074074074059, 153.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (446.37037037037015, 155.11111111111103)) + Result.extend_point (create {EV_COORDINATE}.make_precise (444.29629629629613, 152.74074074074065)) + Result.extend_point (create {EV_COORDINATE}.make_precise (441.03703703703701, 150.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (441.03703703703701, 152.14814814814815)) + Result.extend_point (create {EV_COORDINATE}.make_precise (437.48148148148135, 151.5555555555556)) + Result.extend_point (create {EV_COORDINATE}.make_precise (433.33333333333331, 148.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (433.62962962962939, 145.03703703703707)) + Result.extend_point (create {EV_COORDINATE}.make_precise (432.4444444444444, 142.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (430.66666666666634, 142.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (430.37037037037015, 144.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (427.99999999999972, 141.48148148148147)) + Result.extend_point (create {EV_COORDINATE}.make_precise (425.9259259259257, 139.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (425.03703703703701, 140.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (419.70370370370364, 138.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (419.99999999999972, 136.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (417.33333333333331, 135.5555555555556)) + Result.extend_point (create {EV_COORDINATE}.make_precise (417.9259259259257, 133.18518518518522)) + Result.extend_point (create {EV_COORDINATE}.make_precise (421.77777777777754, 134.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (420.29629629629613, 133.18518518518522)) + Result.extend_point (create {EV_COORDINATE}.make_precise (419.40740740740722, 130.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (417.03703703703701, 127.85185185185185)) + Result.extend_point (create {EV_COORDINATE}.make_precise (416.4444444444444, 129.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (414.66666666666634, 129.03703703703707)) + Result.extend_point (create {EV_COORDINATE}.make_precise (412.59259259259244, 129.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (409.92592592592575, 128.7407407407407)) + Result.extend_point (create {EV_COORDINATE}.make_precise (408.1481481481481, 130.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (409.33333333333331, 132.29629629629625)) + Result.extend_point (create {EV_COORDINATE}.make_precise (410.22222222222223, 135.5555555555556)) + Result.extend_point (create {EV_COORDINATE}.make_precise (411.70370370370364, 138.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (409.62962962962945, 143.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (409.33333333333331, 146.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (411.70370370370364, 149.18518518518516)) + Result.extend_point (create {EV_COORDINATE}.make_precise (415.55555555555526, 149.18518518518516)) + Result.extend_point (create {EV_COORDINATE}.make_precise (417.62962962962939, 147.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (421.18518518518493, 149.48148148148147)) + Result.extend_point (create {EV_COORDINATE}.make_precise (423.55555555555526, 153.03703703703707)) + Result.extend_point (create {EV_COORDINATE}.make_precise (420.88888888888886, 153.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (417.33333333333331, 151.85185185185185)) + Result.extend_point (create {EV_COORDINATE}.make_precise (413.48148148148135, 150.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (409.92592592592575, 149.18518518518516)) + Result.extend_point (create {EV_COORDINATE}.make_precise (407.55555555555554, 149.48148148148147)) + Result.extend_point (create {EV_COORDINATE}.make_precise (406.66666666666663, 146.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (401.62962962962945, 143.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (406.96296296296288, 137.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (409.03703703703701, 134.37037037037038)) + Result.extend_point (create {EV_COORDINATE}.make_precise (406.96296296296288, 132.59259259259261)) + Result.extend_point (create {EV_COORDINATE}.make_precise (403.70370370370364, 130.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (402.51851851851842, 129.03703703703707)) + Result.extend_point (create {EV_COORDINATE}.make_precise (399.55555555555554, 128.7407407407407)) + Result.extend_point (create {EV_COORDINATE}.make_precise (400.74074074074059, 131.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (398.66666666666663, 132.29629629629625)) + Result.extend_point (create {EV_COORDINATE}.make_precise (397.18518518518511, 129.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (394.22222222222223, 127.5555555555556)) + Result.extend_point (create {EV_COORDINATE}.make_precise (392.4444444444444, 126.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (394.81481481481467, 124.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (397.18518518518511, 125.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (397.48148148148141, 123.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (399.85185185185179, 123.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (400.4444444444444, 126.37037037037038)) + end + + santa_isabel_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (447.85185185185179, 91.111111111111029)) + Result.extend_point (create {EV_COORDINATE}.make_precise (447.55555555555526, 88.740740740740705)) + Result.extend_point (create {EV_COORDINATE}.make_precise (451.40740740740722, 89.037037037037067)) + Result.extend_point (create {EV_COORDINATE}.make_precise (451.70370370370364, 90.814814814814781)) + Result.extend_point (create {EV_COORDINATE}.make_precise (455.55555555555526, 93.481481481481467)) + Result.extend_point (create {EV_COORDINATE}.make_precise (459.40740740740722, 93.185185185185219)) + Result.extend_point (create {EV_COORDINATE}.make_precise (461.48148148148135, 96.148148148148152)) + Result.extend_point (create {EV_COORDINATE}.make_precise (465.03703703703701, 96.148148148148152)) + Result.extend_point (create {EV_COORDINATE}.make_precise (467.99999999999972, 95.5555555555556)) + Result.extend_point (create {EV_COORDINATE}.make_precise (470.37037037037015, 98.222222222222285)) + Result.extend_point (create {EV_COORDINATE}.make_precise (471.55555555555526, 96.148148148148152)) + Result.extend_point (create {EV_COORDINATE}.make_precise (477.48148148148135, 102.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (481.62962962962939, 104.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (483.70370370370364, 107.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (485.77777777777754, 107.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (487.85185185185179, 111.5555555555556)) + Result.extend_point (create {EV_COORDINATE}.make_precise (491.99999999999972, 111.5555555555556)) + Result.extend_point (create {EV_COORDINATE}.make_precise (494.37037037037015, 113.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (495.55555555555526, 112.7407407407407)) + Result.extend_point (create {EV_COORDINATE}.make_precise (497.62962962962939, 115.70370370370364)) + Result.extend_point (create {EV_COORDINATE}.make_precise (500.59259259259244, 114.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (507.11111111111103, 119.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (509.18518518518493, 122.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (510.96296296296288, 120.7407407407407)) + Result.extend_point (create {EV_COORDINATE}.make_precise (515.99999999999977, 126.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (523.7037037037037, 132.29629629629625)) + Result.extend_point (create {EV_COORDINATE}.make_precise (520.74074074074065, 134.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (518.96296296296282, 134.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (521.62962962962933, 137.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (523.99999999999977, 137.03703703703707)) + Result.extend_point (create {EV_COORDINATE}.make_precise (525.18518518518499, 142.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (519.25925925925912, 140.59259259259261)) + Result.extend_point (create {EV_COORDINATE}.make_precise (516.88888888888891, 137.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (515.99999999999977, 135.5555555555556)) + Result.extend_point (create {EV_COORDINATE}.make_precise (513.03703703703695, 134.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (513.33333333333326, 137.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (516.29629629629608, 140.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (511.85185185185179, 141.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (512.44444444444434, 139.70370370370364)) + Result.extend_point (create {EV_COORDINATE}.make_precise (508.59259259259244, 139.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (506.81481481481461, 135.85185185185185)) + Result.extend_point (create {EV_COORDINATE}.make_precise (509.48148148148135, 133.18518518518522)) + Result.extend_point (create {EV_COORDINATE}.make_precise (502.37037037037015, 130.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (496.1481481481481, 127.85185185185185)) + Result.extend_point (create {EV_COORDINATE}.make_precise (492.59259259259244, 123.70370370370364)) + Result.extend_point (create {EV_COORDINATE}.make_precise (483.70370370370364, 119.85185185185185)) + Result.extend_point (create {EV_COORDINATE}.make_precise (480.1481481481481, 115.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (477.18518518518493, 115.11111111111103)) + Result.extend_point (create {EV_COORDINATE}.make_precise (474.22222222222223, 111.5555555555556)) + Result.extend_point (create {EV_COORDINATE}.make_precise (472.1481481481481, 111.85185185185185)) + Result.extend_point (create {EV_COORDINATE}.make_precise (471.55555555555526, 108.8888888888888)) + Result.extend_point (create {EV_COORDINATE}.make_precise (467.40740740740722, 105.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (464.74074074074059, 106.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (465.62962962962939, 103.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (462.66666666666634, 102.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (463.25925925925907, 100.29629629629625)) + Result.extend_point (create {EV_COORDINATE}.make_precise (459.70370370370364, 100.29629629629625)) + Result.extend_point (create {EV_COORDINATE}.make_precise (457.33333333333331, 99.111111111111029)) + Result.extend_point (create {EV_COORDINATE}.make_precise (455.25925925925907, 99.999999999999943)) + Result.extend_point (create {EV_COORDINATE}.make_precise (452.88888888888886, 97.925925925925867)) + Result.extend_point (create {EV_COORDINATE}.make_precise (453.77777777777754, 95.259259259259238)) + Result.extend_point (create {EV_COORDINATE}.make_precise (451.11111111111103, 94.074074074074019)) + end + + malaita_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (553.92592592592564, 131.40740740740739)) + Result.extend_point (create {EV_COORDINATE}.make_precise (556.29629629629608, 130.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (561.92592592592564, 132.59259259259261)) + Result.extend_point (create {EV_COORDINATE}.make_precise (561.92592592592564, 130.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (563.99999999999977, 130.81481481481478)) + Result.extend_point (create {EV_COORDINATE}.make_precise (568.44444444444434, 138.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (575.85185185185173, 145.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (574.96296296296282, 148.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (573.18518518518499, 148.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (573.18518518518499, 154.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (576.74074074074065, 155.7037037037037)) + Result.extend_point (create {EV_COORDINATE}.make_precise (582.37037037037021, 159.5555555555556)) + Result.extend_point (create {EV_COORDINATE}.make_precise (582.37037037037021, 162.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (584.74074074074065, 163.7037037037037)) + Result.extend_point (create {EV_COORDINATE}.make_precise (583.85185185185173, 166.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (585.62962962962933, 167.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (585.62962962962933, 170.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (588.59259259259215, 169.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (586.51851851851848, 172.59259259259255)) + Result.extend_point (create {EV_COORDINATE}.make_precise (587.11111111111109, 174.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (585.03703703703695, 174.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (588.59259259259215, 178.81481481481472)) + Result.extend_point (create {EV_COORDINATE}.make_precise (591.2592592592589, 183.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (594.22222222222217, 182.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (591.55555555555543, 180.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (591.55555555555543, 177.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (593.92592592592564, 179.7037037037037)) + Result.extend_point (create {EV_COORDINATE}.make_precise (595.40740740740716, 179.40740740740728)) + Result.extend_point (create {EV_COORDINATE}.make_precise (596.88888888888891, 183.85185185185185)) + Result.extend_point (create {EV_COORDINATE}.make_precise (601.62962962962933, 188.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (601.62962962962933, 192.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (602.51851851851848, 196.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (599.2592592592589, 194.81481481481472)) + Result.extend_point (create {EV_COORDINATE}.make_precise (598.07407407407391, 192.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (595.11111111111109, 194.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (594.22222222222217, 191.85185185185185)) + Result.extend_point (create {EV_COORDINATE}.make_precise (589.77777777777737, 187.7037037037037)) + Result.extend_point (create {EV_COORDINATE}.make_precise (584.44444444444434, 184.74074074074065)) + Result.extend_point (create {EV_COORDINATE}.make_precise (585.92592592592564, 182.37037037037038)) + Result.extend_point (create {EV_COORDINATE}.make_precise (582.96296296296282, 180.59259259259255)) + Result.extend_point (create {EV_COORDINATE}.make_precise (581.18518518518499, 181.18518518518516)) + Result.extend_point (create {EV_COORDINATE}.make_precise (579.40740740740716, 176.74074074074065)) + Result.extend_point (create {EV_COORDINATE}.make_precise (575.5555555555552, 176.74074074074065)) + Result.extend_point (create {EV_COORDINATE}.make_precise (575.5555555555552, 173.18518518518516)) + Result.extend_point (create {EV_COORDINATE}.make_precise (573.7777777777776, 172.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (571.99999999999977, 169.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (570.51851851851848, 171.40740740740728)) + Result.extend_point (create {EV_COORDINATE}.make_precise (565.4814814814813, 165.18518518518516)) + Result.extend_point (create {EV_COORDINATE}.make_precise (564.29629629629608, 158.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (564.29629629629608, 156.59259259259255)) + Result.extend_point (create {EV_COORDINATE}.make_precise (560.14814814814804, 150.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (561.03703703703695, 148.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (558.96296296296282, 145.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (560.44444444444434, 143.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (563.11111111111109, 141.77777777777783)) + Result.extend_point (create {EV_COORDINATE}.make_precise (560.74074074074065, 138.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (555.99999999999977, 135.5555555555556)) + Result.extend_point (create {EV_COORDINATE}.make_precise (555.99999999999977, 133.18518518518522)) + end + + san_cristobal_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (588.29629629629608, 218.81481481481472)) + Result.extend_point (create {EV_COORDINATE}.make_precise (591.2592592592589, 217.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (600.14814814814804, 221.18518518518516)) + Result.extend_point (create {EV_COORDINATE}.make_precise (607.55555555555543, 227.40740740740728)) + Result.extend_point (create {EV_COORDINATE}.make_precise (610.51851851851848, 227.40740740740728)) + Result.extend_point (create {EV_COORDINATE}.make_precise (611.7037037037037, 229.18518518518516)) + Result.extend_point (create {EV_COORDINATE}.make_precise (617.92592592592564, 229.18518518518516)) + Result.extend_point (create {EV_COORDINATE}.make_precise (621.77777777777737, 233.03703703703707)) + Result.extend_point (create {EV_COORDINATE}.make_precise (623.2592592592589, 230.37037037037038)) + Result.extend_point (create {EV_COORDINATE}.make_precise (625.92592592592564, 230.37037037037038)) + Result.extend_point (create {EV_COORDINATE}.make_precise (630.66666666666629, 241.03703703703707)) + Result.extend_point (create {EV_COORDINATE}.make_precise (632.14814814814804, 239.85185185185185)) + Result.extend_point (create {EV_COORDINATE}.make_precise (633.92592592592564, 244.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (631.85185185185173, 246.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (637.77777777777737, 246.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (638.96296296296282, 248.44444444444434)) + Result.extend_point (create {EV_COORDINATE}.make_precise (633.03703703703695, 247.85185185185185)) + Result.extend_point (create {EV_COORDINATE}.make_precise (629.18518518518499, 247.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (623.85185185185173, 247.5555555555556)) + Result.extend_point (create {EV_COORDINATE}.make_precise (622.37037037037021, 246.37037037037038)) + Result.extend_point (create {EV_COORDINATE}.make_precise (614.66666666666629, 244.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (609.62962962962933, 241.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (606.96296296296282, 241.62962962962968)) + Result.extend_point (create {EV_COORDINATE}.make_precise (606.37037037037021, 238.96296296296299)) + Result.extend_point (create {EV_COORDINATE}.make_precise (602.51851851851848, 238.66666666666669)) + Result.extend_point (create {EV_COORDINATE}.make_precise (601.03703703703695, 235.40740740740728)) + Result.extend_point (create {EV_COORDINATE}.make_precise (598.66666666666629, 235.11111111111103)) + Result.extend_point (create {EV_COORDINATE}.make_precise (598.96296296296282, 231.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (597.18518518518499, 231.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (596.88888888888891, 225.92592592592587)) + Result.extend_point (create {EV_COORDINATE}.make_precise (593.33333333333303, 225.33333333333337)) + Result.extend_point (create {EV_COORDINATE}.make_precise (587.7037037037037, 224.44444444444434)) + end + + nendo_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (785.62962962962933, 244.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (787.11111111111109, 241.03703703703707)) + Result.extend_point (create {EV_COORDINATE}.make_precise (788.29629629629608, 238.37037037037038)) + Result.extend_point (create {EV_COORDINATE}.make_precise (789.18518518518499, 242.81481481481472)) + Result.extend_point (create {EV_COORDINATE}.make_precise (790.07407407407391, 239.5555555555556)) + Result.extend_point (create {EV_COORDINATE}.make_precise (792.74074074074065, 237.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (794.51851851851848, 236.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (796.59259259259215, 237.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (798.66666666666629, 236.59259259259255)) + Result.extend_point (create {EV_COORDINATE}.make_precise (803.99999999999977, 238.37037037037038)) + Result.extend_point (create {EV_COORDINATE}.make_precise (800.44444444444434, 242.81481481481472)) + Result.extend_point (create {EV_COORDINATE}.make_precise (802.22222222222217, 243.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (798.96296296296282, 245.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (798.07407407407391, 243.11111111111103)) + Result.extend_point (create {EV_COORDINATE}.make_precise (795.11111111111109, 242.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (793.03703703703695, 244.2962962962963)) + Result.extend_point (create {EV_COORDINATE}.make_precise (791.85185185185173, 247.25925925925924)) + Result.extend_point (create {EV_COORDINATE}.make_precise (790.96296296296282, 243.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (788.59259259259215, 246.66666666666669)) + end + + new_caledonia_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (711.85185185185173, 688.14814814814804)) + Result.extend_point (create {EV_COORDINATE}.make_precise (708.88888888888891, 684.59259259259227)) + Result.extend_point (create {EV_COORDINATE}.make_precise (708.88888888888891, 681.92592592592575)) + Result.extend_point (create {EV_COORDINATE}.make_precise (710.66666666666629, 680.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (710.96296296296282, 683.40740740740716)) + Result.extend_point (create {EV_COORDINATE}.make_precise (713.92592592592564, 684.59259259259227)) + Result.extend_point (create {EV_COORDINATE}.make_precise (717.4814814814813, 688.14814814814804)) + Result.extend_point (create {EV_COORDINATE}.make_precise (721.33333333333303, 693.18518518518511)) + Result.extend_point (create {EV_COORDINATE}.make_precise (724.29629629629608, 693.77777777777749)) + Result.extend_point (create {EV_COORDINATE}.make_precise (724.29629629629608, 691.7037037037037)) + Result.extend_point (create {EV_COORDINATE}.make_precise (726.96296296296282, 690.81481481481467)) + Result.extend_point (create {EV_COORDINATE}.make_precise (729.03703703703695, 692.29629629629619)) + Result.extend_point (create {EV_COORDINATE}.make_precise (732.88888888888891, 692.59259259259227)) + Result.extend_point (create {EV_COORDINATE}.make_precise (738.51851851851848, 697.33333333333314)) + Result.extend_point (create {EV_COORDINATE}.make_precise (743.85185185185173, 702.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (745.92592592592564, 702.6666666666664)) + Result.extend_point (create {EV_COORDINATE}.make_precise (750.66666666666629, 709.77777777777749)) + Result.extend_point (create {EV_COORDINATE}.make_precise (757.4814814814813, 713.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (764.59259259259215, 717.18518518518511)) + Result.extend_point (create {EV_COORDINATE}.make_precise (768.14814814814804, 716.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (770.81481481481455, 719.25925925925901)) + Result.extend_point (create {EV_COORDINATE}.make_precise (769.62962962962933, 721.62962962962933)) + Result.extend_point (create {EV_COORDINATE}.make_precise (771.40740740740716, 723.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (772.29629629629608, 724.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (775.55555555555543, 725.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (776.74074074074065, 728.14814814814804)) + Result.extend_point (create {EV_COORDINATE}.make_precise (777.92592592592564, 733.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (781.4814814814813, 735.25925925925901)) + Result.extend_point (create {EV_COORDINATE}.make_precise (782.96296296296282, 739.40740740740716)) + Result.extend_point (create {EV_COORDINATE}.make_precise (788.59259259259215, 740.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (791.55555555555543, 743.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (794.81481481481455, 745.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (795.7037037037037, 747.40740740740716)) + Result.extend_point (create {EV_COORDINATE}.make_precise (801.62962962962933, 745.92592592592575)) + Result.extend_point (create {EV_COORDINATE}.make_precise (803.40740740740716, 751.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (809.33333333333326, 753.92592592592575)) + Result.extend_point (create {EV_COORDINATE}.make_precise (810.22222222222217, 756.59259259259238)) + Result.extend_point (create {EV_COORDINATE}.make_precise (813.18518518518499, 756.59259259259238)) + Result.extend_point (create {EV_COORDINATE}.make_precise (814.37037037037021, 759.25925925925901)) + Result.extend_point (create {EV_COORDINATE}.make_precise (817.62962962962933, 760.14814814814804)) + Result.extend_point (create {EV_COORDINATE}.make_precise (819.40740740740716, 762.81481481481467)) + Result.extend_point (create {EV_COORDINATE}.make_precise (822.96296296296259, 762.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (822.96296296296259, 764.59259259259238)) + Result.extend_point (create {EV_COORDINATE}.make_precise (829.18518518518499, 771.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (830.96296296296259, 770.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (829.77777777777715, 772.59259259259238)) + Result.extend_point (create {EV_COORDINATE}.make_precise (834.22222222222217, 774.96296296296271)) + Result.extend_point (create {EV_COORDINATE}.make_precise (835.70370370370347, 777.03703703703673)) + Result.extend_point (create {EV_COORDINATE}.make_precise (837.18518518518499, 776.14814814814804)) + Result.extend_point (create {EV_COORDINATE}.make_precise (839.55555555555543, 778.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (843.40740740740716, 778.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (845.4814814814813, 781.18518518518511)) + Result.extend_point (create {EV_COORDINATE}.make_precise (846.96296296296259, 785.92592592592575)) + Result.extend_point (create {EV_COORDINATE}.make_precise (849.92592592592564, 790.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (849.33333333333326, 794.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (847.85185185185173, 795.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (847.85185185185173, 798.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (844.59259259259238, 798.37037037037021)) + Result.extend_point (create {EV_COORDINATE}.make_precise (843.40740740740716, 796.59259259259238)) + Result.extend_point (create {EV_COORDINATE}.make_precise (842.51851851851848, 794.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (840.14814814814804, 793.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (839.85185185185173, 795.99999999999989)) + Result.extend_point (create {EV_COORDINATE}.make_precise (841.92592592592564, 798.37037037037021)) + Result.extend_point (create {EV_COORDINATE}.make_precise (839.85185185185173, 801.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (838.37037037037021, 798.37037037037021)) + Result.extend_point (create {EV_COORDINATE}.make_precise (835.40740740740716, 796.29629629629596)) + Result.extend_point (create {EV_COORDINATE}.make_precise (836.29629629629585, 794.81481481481467)) + Result.extend_point (create {EV_COORDINATE}.make_precise (834.51851851851848, 794.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (831.85185185185173, 792.74074074074065)) + Result.extend_point (create {EV_COORDINATE}.make_precise (826.81481481481455, 793.03703703703673)) + Result.extend_point (create {EV_COORDINATE}.make_precise (821.77777777777715, 788.59259259259238)) + Result.extend_point (create {EV_COORDINATE}.make_precise (819.40740740740716, 789.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (816.44444444444434, 789.18518518518511)) + Result.extend_point (create {EV_COORDINATE}.make_precise (816.14814814814804, 787.40740740740716)) + Result.extend_point (create {EV_COORDINATE}.make_precise (812.29629629629585, 784.74074074074065)) + Result.extend_point (create {EV_COORDINATE}.make_precise (809.92592592592564, 780.29629629629596)) + Result.extend_point (create {EV_COORDINATE}.make_precise (809.62962962962933, 777.33333333333326)) + Result.extend_point (create {EV_COORDINATE}.make_precise (808.14814814814804, 775.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (806.07407407407391, 775.85185185185185)) + Result.extend_point (create {EV_COORDINATE}.make_precise (805.4814814814813, 773.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (804.29629629629608, 775.25925925925901)) + Result.extend_point (create {EV_COORDINATE}.make_precise (801.33333333333303, 775.25925925925901)) + Result.extend_point (create {EV_COORDINATE}.make_precise (798.07407407407391, 773.18518518518511)) + Result.extend_point (create {EV_COORDINATE}.make_precise (795.40740740740716, 772.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (794.81481481481455, 768.74074074074065)) + Result.extend_point (create {EV_COORDINATE}.make_precise (792.74074074074065, 769.92592592592575)) + Result.extend_point (create {EV_COORDINATE}.make_precise (792.44444444444434, 766.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (790.07407407407391, 764.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (791.2592592592589, 767.85185185185185)) + Result.extend_point (create {EV_COORDINATE}.make_precise (788.88888888888891, 767.55555555555554)) + Result.extend_point (create {EV_COORDINATE}.make_precise (787.40740740740716, 765.18518518518511)) + Result.extend_point (create {EV_COORDINATE}.make_precise (785.92592592592564, 765.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (782.07407407407391, 762.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (778.81481481481455, 763.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (778.51851851851848, 758.96296296296271)) + Result.extend_point (create {EV_COORDINATE}.make_precise (774.37037037037021, 760.14814814814804)) + Result.extend_point (create {EV_COORDINATE}.make_precise (771.99999999999977, 758.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (769.03703703703695, 756.59259259259238)) + Result.extend_point (create {EV_COORDINATE}.make_precise (768.14814814814804, 758.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (764.59259259259215, 754.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (762.81481481481455, 748.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (759.2592592592589, 746.81481481481467)) + Result.extend_point (create {EV_COORDINATE}.make_precise (752.44444444444434, 742.37037037037021)) + Result.extend_point (create {EV_COORDINATE}.make_precise (749.18518518518499, 736.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (745.33333333333303, 734.96296296296271)) + Result.extend_point (create {EV_COORDINATE}.make_precise (745.03703703703695, 732.59259259259238)) + Result.extend_point (create {EV_COORDINATE}.make_precise (742.96296296296282, 732.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (742.37037037037021, 728.44444444444446)) + Result.extend_point (create {EV_COORDINATE}.make_precise (740.59259259259215, 728.14814814814804)) + Result.extend_point (create {EV_COORDINATE}.make_precise (741.18518518518499, 726.66666666666663)) + Result.extend_point (create {EV_COORDINATE}.make_precise (739.7037037037037, 725.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (737.62962962962933, 726.37037037037021)) + Result.extend_point (create {EV_COORDINATE}.make_precise (733.4814814814813, 723.70370370370358)) + Result.extend_point (create {EV_COORDINATE}.make_precise (733.77777777777737, 721.92592592592575)) + Result.extend_point (create {EV_COORDINATE}.make_precise (730.81481481481455, 721.03703703703673)) + Result.extend_point (create {EV_COORDINATE}.make_precise (727.55555555555543, 718.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (730.51851851851848, 716.29629629629596)) + Result.extend_point (create {EV_COORDINATE}.make_precise (728.14814814814804, 714.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (723.7037037037037, 709.18518518518511)) + Result.extend_point (create {EV_COORDINATE}.make_precise (720.44444444444434, 708.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (721.92592592592564, 706.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (719.2592592592589, 705.03703703703707)) + Result.extend_point (create {EV_COORDINATE}.make_precise (719.2592592592589, 701.77777777777749)) + Result.extend_point (create {EV_COORDINATE}.make_precise (716.29629629629608, 700.88888888888891)) + Result.extend_point (create {EV_COORDINATE}.make_precise (715.11111111111109, 698.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (717.4814814814813, 698.22222222222229)) + Result.extend_point (create {EV_COORDINATE}.make_precise (719.85185185185173, 699.11111111111109)) + Result.extend_point (create {EV_COORDINATE}.make_precise (719.2592592592589, 695.85185185185185)) + Result.extend_point (create {EV_COORDINATE}.make_precise (716.59259259259215, 695.25925925925901)) + Result.extend_point (create {EV_COORDINATE}.make_precise (714.81481481481455, 696.14814814814804)) + Result.extend_point (create {EV_COORDINATE}.make_precise (714.81481481481455, 693.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (713.03703703703695, 695.85185185185185)) + Result.extend_point (create {EV_COORDINATE}.make_precise (711.2592592592589, 692.29629629629619)) + Result.extend_point (create {EV_COORDINATE}.make_precise (713.03703703703695, 690.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (713.62962962962933, 688.44444444444446)) + end + + manus_imp: EV_MODEL_POLYGON + -- Make the polygon + do + create Result + -- Points generated by Grabber application + Result.extend_point (create {EV_COORDINATE}.make_precise (-81.629629629629619, -157.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-79.555555555555557, -157.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-78.962962962962962, -159.25925925925921)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-76.592592592592595, -159.25925925925921)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-72.740740740740733, -158.6666666666666)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-70.370370370370381, -159.85185185185179)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-65.333333333333329, -159.55555555555549)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-57.925925925925924, -159.55555555555549)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-49.629629629629633, -156.88888888888883)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-44.592592592592595, -155.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-44.296296296296305, -157.48148148148141)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-46.370370370370374, -159.25925925925921)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-41.925925925925924, -157.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-42.518518518518526, -154.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-48.148148148148152, -154.51851851851848)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-49.925925925925924, -152.1481481481481)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-53.777777777777771, -147.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-57.629629629629633, -149.77777777777771)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-59.703703703703709, -147.99999999999994)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-61.777777777777771, -149.48148148148144)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-63.555555555555557, -148.29629629629625)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-69.481481481481481, -148.88888888888883)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-72.148148148148152, -150.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-75.111111111111114, -152.1481481481481)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-77.18518518518519, -151.85185185185179)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-75.111111111111114, -150.07407407407402)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-76.296296296296305, -148.59259259259255)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-80.444444444444443, -149.18518518518513)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-81.333333333333329, -147.11111111111106)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-83.407407407407405, -147.40740740740736)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-84.296296296296291, -151.55555555555549)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-81.333333333333329, -152.4444444444444)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-81.037037037037038, -154.22222222222217)) + Result.extend_point (create {EV_COORDINATE}.make_precise (-82.222222222222214, -155.11111111111106)) + end + +invariant + + is_valid_sea_area: attached target_imp implies sea_area = game.south_pacific_ocean + +end diff --git a/jj_vitp/Interface/widgets/sea_area_widgets/us_mandate_widget.e b/jj_vitp/Interface/widgets/sea_area_widgets/us_mandate_widget.e new file mode 100644 index 0000000..428f65b --- /dev/null +++ b/jj_vitp/Interface/widgets/sea_area_widgets/us_mandate_widget.e @@ -0,0 +1,81 @@ +note + description: "[ + Widget that represents this VITP sea area + ]" + author: "Jimmy J. Johnson" + +class + US_MANDATE_WIDGET + +inherit + + SEA_AREA_WIDGET + redefine + position_widgets, + build_ocean +-- build_bounding_figure + end + +create + make + +feature {NONE} -- Initialization + + position_widgets + -- Move Current and contained widgets to correct + -- location and set their their sizes + do + Precursor {SEA_AREA_WIDGET} + translate_widget (Current, 449, 553) + translate_widget (name_mt, 50, -95) + translate_widget (dot, 70, -70) +-- flag.center_on_dot (dot) + flag.set_x_y (dot.x, dot.y) + translate_widget (dot, 40, -40) + end + + build_ocean + -- Create the polygon representing the `ocean' here + -- Redefined to add the points + do + Precursor {SEA_AREA_WIDGET} + -- start at bottom south-west corner + ocean.extend_point (create {EV_COORDINATE}.make (0, 0)) + ocean.extend_point (create {EV_COORDINATE}.make (5, -112)) + ocean.extend_point (create {EV_COORDINATE}.make (77, -116)) -- y ~116 + ocean.extend_point (create {EV_COORDINATE}.make (104, -164)) + ocean.extend_point (create {EV_COORDINATE}.make (255, -69)) + ocean.extend_point (create {EV_COORDINATE}.make (255, 0)) + end + +-- build_bounding_figure +-- -- Add points to the `jj_bounding_figure'. +-- -- Redefined to use the tile edges as the bounding area +-- local +-- t: EV_MODEL_TRANSFORMATION +-- do +-- if has (jj_bounding_figure) then +-- prune_all (jj_bounding_figure) +-- end +-- create jj_bounding_figure +-- extend (jj_bounding_figure) +-- jj_bounding_figure.extend_point (create {EV_COORDINATE}.make (0, 0)) +-- jj_bounding_figure.extend_point (create {EV_COORDINATE}.make (5, -112)) +-- jj_bounding_figure.extend_point (create {EV_COORDINATE}.make (77, -116)) -- y ~116 +-- jj_bounding_figure.extend_point (create {EV_COORDINATE}.make (104, -164)) +-- jj_bounding_figure.extend_point (create {EV_COORDINATE}.make (255, -69)) +-- jj_bounding_figure.extend_point (create {EV_COORDINATE}.make (255, 0)) +-- jj_bounding_figure.enable_closed +-- create t.make_zero +-- t.translate (449, 553) -- 553 is the board height (not including black boarder) +-- jj_bounding_figure.transform (t) +-- jj_bounding_figure.set_line_width (2) +---- show_bounding_figure +-- end + +invariant + + is_valid_sea_area: attached target_imp implies sea_area = game.us_mandate + no_land: land.is_empty + +end diff --git a/jj_vitp/Interface/widgets/unit_widgets/air_unit_widget.e b/jj_vitp/Interface/widgets/unit_widgets/air_unit_widget.e new file mode 100644 index 0000000..1fb8345 --- /dev/null +++ b/jj_vitp/Interface/widgets/unit_widgets/air_unit_widget.e @@ -0,0 +1,56 @@ + +note + description: "[ + A widget connecting interface to an AIR_UNIT for use in Victory in the Pacific. + ]" + author: "Jimmy J. Johnson" + +class + AIR_UNIT_WIDGET + +inherit + + ATTACK_UNIT_WIDGET + redefine + position_widgets, + unit_color, + target_imp + end + +create + make + +feature {NONE} -- Initialization + + position_widgets + -- Redefined to make smaller than the attack widget + do + Precursor {ATTACK_UNIT_WIDGET} + scale (0.7) + end + +feature -- Access + +feature {NONE} -- Implementation + + unit_color: EV_COLOR + -- Get the color to paint the tile based on the unit's nationality + do + if unit.nationality = {NATIONALITY_CONSTANTS}.Japanese then + Result := Japanese_air_unit_color + elseif unit.nationality = {NATIONALITY_CONSTANTS}.us then + Result := US_air_unit_color + else + check + should_not_happen: False + end + Result := Green + end + end + +feature {NONE} -- Implementation + + target_imp: detachable AIR_UNIT + -- Anchor for the `target' represented by Current + +end diff --git a/jj_vitp/Interface/widgets/unit_widgets/allied_air_unit_widget.e b/jj_vitp/Interface/widgets/unit_widgets/allied_air_unit_widget.e new file mode 100644 index 0000000..52ba2bc --- /dev/null +++ b/jj_vitp/Interface/widgets/unit_widgets/allied_air_unit_widget.e @@ -0,0 +1,111 @@ +note + description: "[ + An {VITP_WIDGET} representing the Allied air units. + Redefined from {AIR_UNIT_WIDGET} in order to add, color, + and position the pictures for the other aircraft + on the tile. + ]" + author: "Jimmy J. Johnson" + date: "3/3/24" + copyright: "Copyright (c) 2021, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +class + ALLIED_AIR_UNIT_WIDGET + +inherit + + AIR_UNIT_WIDGET + redefine + create_interface_objects, + extend_widgets, + position_widgets, + set_widget_order, + paint + end + +create + make + +feature {NONE} -- Initialization + + create_interface_objects + -- Create attributes + do + Precursor {AIR_UNIT_WIDGET} + -- create empty polygons for the extra plane + create picture_2 + end + + extend_widgets + -- Put widgets into Current. This cannot be done + -- in `create_interface_object', because cannot call + -- `extend' feature until all objects [in descendants] + -- are also created. + local + list: ARRAYED_LIST [EV_COORDINATE] + do + Precursor {AIR_UNIT_WIDGET} + extend (picture_2) + -- Precursor adds points to `picture', not do other one + list := silhouette_coordinates (unit) + from list.start + until list.after + loop + -- `extend_point' adds a copy of the point + picture_2.extend_point (list.item) + list.forth + end + end + + position_widgets + -- Move Current and contained widgets to correct + -- location and set their sizes + do + Precursor {AIR_UNIT_WIDGET} + -- The scale coming through the Precursor from + -- {ATTACK_UNIT_WIDGET} is "scale (0.1)" which makes + -- placement of the planes too fine, therefore, this + -- feature scales the widget back up, moves the sub- + -- widgets, then scales back down. + scale (10) + picture.scale (0.07) -- lead + picture_2.scale (0.07) -- right wingman + -- Rotate the planes 90 degrees + picture.rotate (Pi/2) + picture_2.rotate (Pi/2) + -- Position the planes + picture.set_x_y (tile.x - 28, tile.y - 5) + picture_2.set_x_y (tile.x + 28, tile.y - 5) + -- Scale back down + scale (0.1) + end + + set_widget_order + -- Ensure the widgets are ordered properly + -- (i.e. whose on top?) + do + Precursor {AIR_UNIT_WIDGET} + bring_to_front (picture_2) + end + +feature -- Basic operations + + paint + -- Set the colors for the `tile' + do + Precursor + -- Cyan so I could tell which plane was which + picture.set_foreground_color (adjusted_color (Black)) + picture.set_background_color (adjusted_color (Black)) + picture_2.set_foreground_color (adjusted_color (Black)) + picture_2.set_background_color (adjusted_color (Black)) + end + +feature {NONE} -- Implementation + + picture_2: EV_MODEL_POLYGON + -- The silhouette (or shape) of the 2nd airplane + -- on the tile + +end diff --git a/jj_vitp/Interface/widgets/unit_widgets/amphibious_unit_widget.e b/jj_vitp/Interface/widgets/unit_widgets/amphibious_unit_widget.e new file mode 100644 index 0000000..039ca49 --- /dev/null +++ b/jj_vitp/Interface/widgets/unit_widgets/amphibious_unit_widget.e @@ -0,0 +1,65 @@ +note + description: "[ + A widget connecting interface to an AMPHIBIOUS_UNIT for use in VITP. + ]" + author: "Jimmy J. Johnson" + +class + AMPHIBIOUS_UNIT_WIDGET + +inherit + + ATTACK_UNIT_WIDGET + redefine + position_widgets, +-- build_picture, + unit_color, + target_imp + end + +create + make + +feature {NONE} -- Initialization + + position_widgets + -- Redefined to make smaller than the attack widget + do + Precursor {ATTACK_UNIT_WIDGET} + scale (0.7) + picture.scale (0.13) + picture.set_x_y (tile.x, tile.y) + end + +-- build_picture +-- -- Build the `picture'. +-- do +-- -- The `silhouette_table' contains a function for +-- -- the `Amphibious_symbol' indexed by the Yokosuka. +---- picture.copy (silhouette (game.yokosuka)) +---- picture.add_points (game.yokosuka) +-- end + +feature {NONE} -- Implementation + + unit_color: EV_COLOR + -- Get the color to paint the tile based on the unit's nationality + do + if unit.nationality = {NATIONALITY_CONSTANTS}.japanese then + Result := Japanese_air_unit_color + elseif unit.nationality = {NATIONALITY_CONSTANTS}.us then + Result := US_air_unit_color + else + Result := Green + check + should_not_happen: False + end + end + end + +feature {NONE} -- Implementation + + target_imp: detachable AMPHIBIOUS_UNIT + -- Anchor for the `target' represented by Current + +end diff --git a/jj_vitp/Interface/widgets/unit_widgets/attack_unit_widget.e b/jj_vitp/Interface/widgets/unit_widgets/attack_unit_widget.e new file mode 100644 index 0000000..cf6de44 --- /dev/null +++ b/jj_vitp/Interface/widgets/unit_widgets/attack_unit_widget.e @@ -0,0 +1,569 @@ +note + description: "[ + Connects an attack unit to a Eiffel Vision widget. + ]" + author: "Jimmy J. Johnson" + +deferred class + ATTACK_UNIT_WIDGET + +inherit + + VITP_WIDGET + rename + target as unit + redefine + create_interface_objects, + extend_widgets, + build_widgets, + set_fonts_and_colors, + position_widgets, + set_widget_order, +-- build_bounding_figure, + add_actions, +-- position_sub_widgets, + set_target, + paint, + position_on_figure, + target_imp + end + +inherit {NONE} + + SILHOUETTE_CONSTANTS + undefine + default_create + end + +feature {NONE} -- Initialization + + create_interface_objects + -- Create attributes + do + Precursor {VITP_WIDGET} + create tile + create border.make (default_tile_size, default_tile_size, border_size) + create bonus_circle + create air_bonus_circle + create anchor + create gunnery_factor_mt + create defense_factor_mt + create speed_factor_mt + create air_strike_factor_mt +-- create picture.make_with_coordinates (silhouette_coordinates (unit)) + create picture + end + + extend_widgets + -- Put widgets into Current. This cannot be done + -- in `create_interface_object', because cannot call + -- `extend' feature until all objects [in descendants] + -- are also created. + local + list: ARRAYED_LIST [EV_COORDINATE] + do + Precursor {VITP_WIDGET} + extend (tile) + extend (border) + extend (bonus_circle) + extend (air_bonus_circle) + extend (anchor) + extend (picture) + text_group.extend (gunnery_factor_mt) + text_group.extend (defense_factor_mt) + text_group.extend (speed_factor_mt) + text_group.extend (air_strike_factor_mt) + -- Add points to the `tile' + tile.extend_point (create {EV_COORDINATE}.make (0, 0)) + tile.extend_point (create {EV_COORDINATE}.make (default_tile_size.rounded, 0)) + tile.extend_point (create {EV_COORDINATE}.make (default_tile_size.rounded, default_tile_size.rounded)) + tile.extend_point (create {EV_COORDINATE}.make (0, default_tile_size.rounded)) + -- Add points to `picture' + list := silhouette_coordinates (unit) + from list.start + until list.after + loop + -- `extend_point' adds a copy of the point + picture.extend_point (list.item) + list.forth + end + end + + build_widgets + -- Now that widgets were created in `create_interface_objects' + -- and added to Current in `extend_widgets', build up the + -- widgets by adding internal structure to each widget. + do + Precursor {VITP_WIDGET} + end + + set_fonts_and_colors + -- Set the default fonts for any text widgets and set + -- the default colors for any contained widgets. + do + Precursor {VITP_WIDGET} + name_mt.set_font (Unit_name_font) + gunnery_factor_mt.set_font (Unit_speed_font) + defense_factor_mt.set_font (Unit_speed_font) + speed_factor_mt.set_font (Unit_speed_font) + air_strike_factor_mt.set_font (unit_air_font) + end + + position_widgets + -- Move Current and contained widgets to correct + -- location and set their sizes + do + Precursor {VITP_WIDGET} +-- center_widget_on_other (picture, tile) + picture.set_x_y (tile.x, tile.y) + -- Set size and position for circles + bonus_circle.set_point_a_position (tile.x - 70, tile.y + 30) + bonus_circle.set_point_b_position (tile.x - 30, tile.y + 70) + air_bonus_circle.set_point_a_position (tile.x + 45, tile.y - 55) + air_bonus_circle.set_point_b_position (tile.x + 85, tile.y - 15) +-- -- Center name and defense factor to start + name_mt.set_text (unit.name) + name_mt.set_x_y (tile.x, tile.y - 77) + gunnery_factor_mt.set_x_y (tile.x - 75, tile.y + 70) + defense_factor_mt.set_x_y (tile.x - 5, tile.y + 70) + speed_factor_mt.set_x_y (tile.x + 60, tile.y + 70) + air_strike_factor_mt.set_x_y (tile.x + 65, tile.y - 40) + anchor.scale (0.5) + anchor.set_x_y (tile.x - 60, tile.y - 60) + text_group.scale (0.80) + scale (0.1) + end + + set_widget_order + -- Ensure the widgets are ordered properly + -- (i.e. whose on top?) + do + Precursor {VITP_WIDGET} + bring_to_front (anchor) + bring_to_front (text_group) + bring_to_front (picture) + +-- dot.hide + end + + build_tile + -- Create the `tile + do + tile.extend_point (create {EV_COORDINATE}.make (0, 0)) + tile.extend_point (create {EV_COORDINATE}.make (default_tile_size.rounded, 0)) + tile.extend_point (create {EV_COORDINATE}.make (default_tile_size.rounded, default_tile_size.rounded)) + tile.extend_point (create {EV_COORDINATE}.make (0, default_tile_size.rounded)) + ensure + correct_point_count: tile.point_count = 4 + end + + + +-- build_bounding_figure +-- -- Add points to the `jj_bounding_figure'. +-- -- Redefined to use the tile edges as the bounding area +-- do +-- if has (jj_bounding_figure) then +-- prune_all (jj_bounding_figure) +-- end +-- create jj_bounding_figure +-- extend (jj_bounding_figure) +-- jj_bounding_figure.extend_point (tile.point_array.item (0)) +-- jj_bounding_figure.extend_point (tile.point_array.item (1)) +-- jj_bounding_figure.extend_point (tile.point_array.item (2)) +-- jj_bounding_figure.extend_point (tile.point_array.item (3)) +-- jj_bounding_figure.enable_closed +-- jj_bounding_figure.set_line_width (2) +-- jj_bounding_figure.hide +-- end + + add_actions + -- Add delayed function calls to the widgets + do + Precursor {VITP_WIDGET} + set_pebble (unit) + set_accept_cursor ((create {EV_STOCK_PIXMAPS}).hyperlink_cursor) +-- set_pebble_function (agent on_get_pebble) +-- pick_actions.extend (agent on_picked) +-- pointer_button_press_actions.extend (agent on_clicked) +-- tile.pick_actions.extend (agent on_picked (unit, ?, ?)) +-- picture.pick_actions.extend (agent on_picked (unit, ?, ?)) + end + + on_clicked (a_x, a_y, button: INTEGER; + a_x_tilt, a_y_tilt, a_pressure: DOUBLE; + a_screen_x, a_screen_y: INTEGER) + -- React to a button click for testing + do + io.put_string ("ATTACK_UNIT_WIDGET.on_clicked: on " + unit.name + "%N") + if attached vitp_world as bw then +-- bw.on_notify_button_pressed (a_unit, a_x, a_y, button) + end + end + +feature -- Access + + default_tile_size: REAL_64 = 200.0 + -- Size used for building Current, resizing after built + + tile_size: REAL_64 + -- The size of the `tile' after finished scaling Current + do + Result := tile.i_th_point_x (2) - tile.i_th_point_x (1) + end + + color: EV_COLOR + -- The color of the `tile' + do + if attached tile.background_color as c then + Result := c + else + Result := Green + end + end + +feature -- Element change + + set_target (a_target: like unit) + -- Set up Current based on `a_target' + local + s: REAL_64 + ax, ay, o_set: REAL_64 + t: EV_MODEL_TRANSFORMATION + do + Precursor {VITP_WIDGET} (a_target) + gunnery_factor_mt.set_text (unit.gunnery_factor.out) + defense_factor_mt.set_text (unit.defense_factor.out) + speed_factor_mt.set_text (unit.speed_factor.out) + air_strike_factor_mt.set_text (unit.airstrike_factor.out) + paint +-- pick_actions.wipe_out +-- pointer_button_press_actions.extend (agent on_clicked (unit, ?,?,?,?,?,?,?,?)) +-- pick_actions.extend (agent on_picked (unit, ?, ?)) + end + +feature -- Basic operations + + paint + -- Set the colors for the `tile' + local + c: EV_COLOR + bc: EV_COLOR + ac: EV_COLOR + do + Precursor {VITP_WIDGET} + c := unit_color + bc := border_color + bonus_circle.hide + air_bonus_circle.hide + if unit.attack_bonus then + if unit.airstrike_factor > 0 then + air_bonus_circle.show + else + bonus_circle.show + end + end + if is_flipped then + ac := adjusted_color (white) + tile.set_background_color (ac) + border.set_color (ac) + if is_flat then + border.hide + tile.set_foreground_color (bc) + else + border.show + border.paint + end + picture.set_foreground_color (bc) + picture.set_background_color (bc) + -- paint the circle even if it is not shown + bonus_circle.set_foreground_color (bc) + bonus_circle.remove_background_color + air_bonus_circle.set_foreground_color (bc) + air_bonus_circle.remove_background_color + else + ac := adjusted_color (c) + tile.set_background_color (ac) + border.set_color (ac) + if is_flat then + border.hide + else + border.show + border.paint + end +-- picture.set_color (adjusted_color (Dark_grey)) + picture.set_foreground_color (adjusted_color (Black)) + picture.set_background_color (adjusted_color (Black)) + bonus_circle.set_foreground_color (adjusted_color (White)) + bonus_circle.set_background_color (adjusted_color (White)) + air_bonus_circle.set_foreground_color (adjusted_color (White)) + air_bonus_circle.set_background_color (adjusted_color (White)) + end + paint_text + -- Remove the line from around the polygon + tile.set_line_width (0) + -- Draw the anchor if the ship is in port + if game.ports.has (unit.location.name) then + anchor.show + anchor.set_foreground_color (adjusted_color (Silver)) + anchor.set_background_color (adjusted_color (Silver)) +-- anchor.set_color (Silver) +-- anchor.set_color (Green) +-- anchor.set_color (Yellow) +-- anchor.set_color (Steel) +-- anchor.set_color (Cyan) +-- anchor.set_color (Chrome) +-- anchor.set_color (Bronze) + else + anchor.hide + end + end + + paint_text + -- Set the color of the text fields + local + c: EV_COLOR + do + c := adjusted_color (foreground_color) + if is_flipped then + c := adjusted_color (background_color) + c := adjusted_color (Black) + else + c := adjusted_color (Black) + end + name_mt.set_foreground_color (c) + gunnery_factor_mt.set_foreground_color (c) + defense_factor_mt.set_foreground_color (c) + speed_factor_mt.set_foreground_color (c) + air_strike_factor_mt.set_foreground_color (c) + if unit.attack_bonus and unit.airstrike_factor > 0 then + air_strike_factor_mt.show + else + air_strike_factor_mt.hide + end + end + +feature -- Status report + + is_flipped: BOOLEAN + -- Is the back of the tile showing? + + is_flat: BOOLEAN + -- Should Current be drawn as a flat tile? + +feature -- Status setting + + flip + -- Toggle the flip status + do + io.put_string ("ATTACK_UNIT_WIDGET.flip_tile %N") + if is_flipped then + set_unflipped + else + set_flipped + end + paint + end + + set_flipped + -- Show the back of the tile + do + is_flipped := True + paint + end + + set_unflipped + -- Show the front of the tile + do + is_flipped := False + paint + end + + set_flat + -- Cause the widget to be painted as a flat tile + do + is_flat := True + paint + end + + set_raised + -- Cause the widget to be painted as a 3-d tile + do + is_flat := False + paint + end + +feature -- Query + + position_on_figure (ax, ay: INTEGER_32): BOOLEAN + -- Is the point on (`ax', `ay') on this figure? + do +-- Result := ax >= tile.i_th_point_x (1) and ax <= tile.i_th_point_x (2) and +-- ay >= tile.i_th_point_y (1) and ay <= tile.i_th_point_y (3) + Result := tile.position_on_figure (ax, ay) + end + +feature {NONE} -- Actions + +-- prepick_operations +-- -- Feature called by `on_picked' when a pick-and-put (PNP) +-- -- operation starts (i.e. when a right-click occurs). +-- -- Because the operations must have started in Current, the +-- -- pebble in transport must be `unit' which is from Current. +-- local +-- sop: VITP_SEQUENCE_OF_PLAY +-- s: LINKED_SET [PORT] +-- v: VIEW +-- lin: LINEAR [VIEW] +-- do +-- print ("{ATTACK_UNIT_WIDGET}.prepick_operations %N") +--print ("%T {ATTACK_UNIT_WIDGET}.prepick_operations: unit = " + unit.name + "%N") +-- sop := game.sequence_of_play +-- if sop.is_reinforcement_step then +-- -- Get ports to which `unit' may move ... +-- s := unit.reinforceable_ports +-- -- ... and add drop agent for the widgets +-- lin := linear_with_set (s) +--print ("%T {ATTACK_UNIT_WIDGET}.prepick_operations: lin.is_empty = " + lin.is_empty.out + "%N") +-- from lin.start +-- until lin.after +-- loop +-- v := lin.item +-- check attached {PORT_WIDGET} v as pw then +--print ("%T {ATTACK_UNIT_WIDGET}.prepick_operations: " + pw.generating_type.name + " }.port.name = " + pw.port.name + "%N") +-- end +--print ("%T {ATTACK_UNIT_WIDGET}.prepick_operations: about to dim view %N") +-- v.set_completely_dimmed +-- if attached {JJ_PICK_AND_DROPABLE} v as d then +-- d.drop_actions.extend (agent on_drop_target) +-- end +---- v.paint add feature to VIEW; call when dimmed +-- lin.forth +-- end +-- end +-- end + +-- on_drop_target (a_unit: ATTACK_UNIT) +-- -- React when `a_unit' is dropped on Current +-- do +-- print ("{ATTACK_UNIT_WIDGET}.on_drop_target %N") +-- end + +feature {NONE} -- Implementation + + gunnery_text: STRING + do + if attached {AIR_UNIT} unit then + Result := unit.airstrike_factor.out + else + Result := unit.gunnery_factor.out + end + end + + defense_text: STRING + do + Result := unit.defense_factor.out + end + + speed_text: STRING + do + if attached {AIR_UNIT} unit or attached {SUBMARINE} unit then + Result := "*" + else + Result := unit.speed_factor.out + end + end + + air_text: STRING + do + if attached {AIR_UNIT} unit then + Result := "" + elseif unit.airstrike_factor < 1 then + Result := "" + else + Result := unit.airstrike_factor.out + end + end + +feature {NONE} -- Implementation + + unit_color: EV_COLOR + -- Get the color to paint the tile based on the unit's nationality + do + if unit.nationality = game.japanese then + Result := Japanese_unit_color + elseif unit.nationality = game.us then + Result := US_unit_color + elseif unit.nationality = game.british then + Result := British_unit_color + elseif unit.nationality = game.dutch or unit.nationality = game.australian then + Result := Dutch_unit_color + else + check + should_not_happen: False + end + Result := Green + end + end + + border_color: EV_COLOR + -- Get the color to paint the boarder of the tile + do + if unit.nationality = game.japanese then + Result := Japanese_unit_boarder_color + elseif unit.nationality = game.us then + Result := US_unit_color + elseif unit.nationality = game.british then + Result := British_unit_color + elseif unit.nationality = game.dutch or unit.nationality = game.australian then + Result := Dutch_unit_color + else + check + should_not_happen: False + end + Result := Green + end + end + +feature {NONE} -- Implementation + + target_imp: detachable ATTACK_UNIT + -- Anchor for the `target' represented by Current + + tile: EV_MODEL_POLYGON + -- The square on which to place other widgets + + picture: SILHOUETTE --EV_MODEL_POLYGON + -- The polygon (or shape) of the unit on the tile + + bonus_circle: EV_MODEL_ELLIPSE + -- The circle around the gunnery factor if unit has a bonus + + air_bonus_circle: EV_MODEL_ELLIPSE + -- The circle around the air factor if unit has a bonus + + border: BORDER + -- The borders of the tile, giving a raised appearance + + border_size: REAL_64 + -- The size to make the boarder + do + Result := Default_tile_size / 10 + end + + anchor: ANCHOR -- attribute create Result.make (unit) end + -- Indicates if a unit is in port + + gunnery_factor_mt: EV_MODEL_TEXT + -- Widget for the `gunnery_factor' of the `unit' text + + defense_factor_mt: EV_MODEL_TEXT + -- Widget for the `defense_factor' of the `unit' text + + speed_factor_mt: EV_MODEL_TEXT + -- Widget for the `speed' of the `unit' text + + air_strike_factor_mt: EV_MODEL_TEXT + -- Widget for the `air_strike_factor' of the `unit' text + +end diff --git a/jj_vitp/Interface/widgets/unit_widgets/japanese_air_unit_widget.e b/jj_vitp/Interface/widgets/unit_widgets/japanese_air_unit_widget.e new file mode 100644 index 0000000..e41b458 --- /dev/null +++ b/jj_vitp/Interface/widgets/unit_widgets/japanese_air_unit_widget.e @@ -0,0 +1,126 @@ +note + description: "[ + An {VITP_WIDGET} representing the Japanese air units. + Redefined from {AIR_UNIT_WIDGET} in order to add, color, + and position the pictures for the two other aircraft + on the tile. + ]" + author: "Jimmy J. Johnson" + date: "3/3/24" + copyright: "Copyright (c) 2021, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +class + JAPANESE_AIR_UNIT_WIDGET + +inherit + + AIR_UNIT_WIDGET + redefine + create_interface_objects, + extend_widgets, + position_widgets, + set_widget_order, + paint + end + +create + make + +feature {NONE} -- Initialization + + create_interface_objects + -- Create attributes + do + Precursor {AIR_UNIT_WIDGET} + -- create empty polygons for the extra two picturs + create picture_2 + create picture_3 + end + + extend_widgets + -- Put widgets into Current. This cannot be done + -- in `create_interface_object', because cannot call + -- `extend' feature until all objects [in descendants] + -- are also created. + local + list: ARRAYED_LIST [EV_COORDINATE] + do + Precursor {AIR_UNIT_WIDGET} + extend (picture_2) + extend (picture_3) + -- Precursor adds points to `picture', not do other two + list := silhouette_coordinates (unit) + from list.start + until list.after + loop + -- `extend_point' adds a copy of the point + picture_2.extend_point (list.item) + picture_3.extend_point (list.item) + list.forth + end + end + + position_widgets + -- Move Current and contained widgets to correct + -- location and set their sizes + do + Precursor {AIR_UNIT_WIDGET} + -- The scale coming through the Precursor from + -- {ATTACK_UNIT_WIDGET} is "scale (0.1)" which makes + -- placement of the planes too fine, therefore, this + -- feature scales the widget back up, moves the sub- + -- widgets, then scales back down. + scale (10) + -- Scale the planes + picture.scale (0.06) -- lead + picture_2.scale (0.06) -- left wingman + picture_3.scale (0.06) -- right wingman + -- Rotate the planes 90 degrees + picture.rotate (Pi/2) + picture_2.rotate (Pi/2) + picture_3.rotate (Pi/2) + -- Position the planes + picture.set_x_y (tile.x, tile.y - 8) + picture_2.set_x_y (tile.x - 36, tile.y + 5) + picture_3.set_x_y (tile.x + 36, tile.y + 5) + -- Scale back down + scale (0.1) + end + + set_widget_order + -- Ensure the widgets are ordered properly + -- (i.e. whose on top?) + do + Precursor {AIR_UNIT_WIDGET} + bring_to_front (picture_2) + bring_to_front (picture_3) + end + +feature -- Basic operations + + paint + -- Set the colors for the `tile' + do + Precursor + -- Cyan so I could tell which plane was which + picture.set_foreground_color (adjusted_color (Black)) + picture.set_background_color (adjusted_color (Black)) + picture_2.set_foreground_color (adjusted_color (Black)) + picture_2.set_background_color (adjusted_color (Black)) + picture_3.set_foreground_color (adjusted_color (Black)) + picture_3.set_background_color (adjusted_color (Black)) + end + +feature {NONE} -- Implementation + + picture_2: SILHOUETTE --EV_MODEL_POLYGON + -- The silhouette (or shape) of the 2nd airplane + -- on the tile + + picture_3: SILHOUETTE --EV_MODEL_POLYGON + -- The silhouette (or shape) of the 3rd airplane + -- on the tile + + +end diff --git a/jj_vitp/Interface/widgets/unit_widgets/ship_widget.e b/jj_vitp/Interface/widgets/unit_widgets/ship_widget.e new file mode 100644 index 0000000..9e0c227 --- /dev/null +++ b/jj_vitp/Interface/widgets/unit_widgets/ship_widget.e @@ -0,0 +1,74 @@ +note + description: "[ + A widget connecting interface to a SHIP for use in Victory + in the Pacific. + ]" + author: "Jimmy J. Johnson" + +class + SHIP_WIDGET + +inherit + + ATTACK_UNIT_WIDGET + rename + unit as ship + redefine + position_widgets, + add_actions, + target_imp + end + +create + make + +feature {NONE} -- Initialization + + position_widgets + -- Move Current and contained widgets to correct + -- location and set their sizes + do + Precursor {ATTACK_UNIT_WIDGET} + picture.scale (0.1) + end + +feature -- Status setting + + set_raiding + -- Change status of this `ship' to `is_raiding'. + do + ship.set_raiding + draw_views (ship) + end + + set_patrolling + -- Change the status of the `ship' to not `is_raiding' + do + ship.set_patrolling + draw_views (ship) + end + +feature -- Basic operations + + + +feature {NONE} -- Implementation + + add_actions + -- Add agent (i.e. actions) to the ship widget + do + Precursor {ATTACK_UNIT_WIDGET} +-- set_pebble_function (agent on_get_pebble) + -- No, do not add action to flip raider here, + -- do it in the {BOARD_VIEW} +-- pointer_double_press_actions.force_extend (agent flip_tile) + end + + target_imp: detachable SHIP + -- Anchor for the `target' represented by Current + +invariant + +-- is_flipped_implication: is_flipped implies ship.is_raiding + +end diff --git a/jj_vitp/Interface/widgets/unit_widgets/submarine_widget.e b/jj_vitp/Interface/widgets/unit_widgets/submarine_widget.e new file mode 100644 index 0000000..55d3fa2 --- /dev/null +++ b/jj_vitp/Interface/widgets/unit_widgets/submarine_widget.e @@ -0,0 +1,65 @@ +note + description: "[ + A widget connecting interface to a {SUBMARINE} for use in VITP. + ]" + author: "Jimmy J. Johnson" + +class + SUBMARINE_WIDGET + +inherit + + ATTACK_UNIT_WIDGET + rename + unit as submarine + redefine + position_widgets, + unit_color, + paint, + target_imp + end + +create + make + +feature {NONE} -- Initialization + + position_widgets + -- Move Current and contained widgets to correct + -- location and set their sizes + do + Precursor {ATTACK_UNIT_WIDGET} + picture.scale (0.1) + end + +feature -- Basic operations + + paint + -- Set the colors for the `tile' + do + Precursor {ATTACK_UNIT_WIDGET} + bonus_circle.set_foreground_color (japanese_unit_color) + bonus_circle.set_background_color (japanese_unit_color) + end + +feature {NONE} -- Implementation + + unit_color: EV_COLOR + -- Get the color to paint the tile based on the unit's nationality + do + if submarine.nationality = {NATIONALITY_CONSTANTS}.Japanese then + Result := Japanese_submarine_color + elseif submarine.nationality = {NATIONALITY_CONSTANTS}.us then + Result := US_submarine_color + else + check + should_not_happen: False + end + Result := Green + end + end + + target_imp: detachable SUBMARINE + -- Anchor for the `target' represented by Current + +end diff --git a/jj_vitp/Interface/widgets/unit_widgets/task_force_widget.e b/jj_vitp/Interface/widgets/unit_widgets/task_force_widget.e new file mode 100644 index 0000000..0b40a85 --- /dev/null +++ b/jj_vitp/Interface/widgets/unit_widgets/task_force_widget.e @@ -0,0 +1,590 @@ +note + description: "[ + A widget that holds and displays a set of {ATTACK_UNIT} + moving as a single unit contained in the `task_force'. + It allows the units to be arrange in various ways. + ]" + author: "Jimmy J. Johnson" + +class + TASK_FORCE_WIDGET + +inherit + + VITP_WIDGET + rename + target as task_force + redefine + create_interface_objects, + build_widgets, +-- build_bounding_figure, + add_actions, + set_dimming_level, + set_target, + show, + center_on_dot, + paint, +-- on_pointer_enter, +-- on_pointer_leave, + wipe_out, + target_imp + end + +create + default_create + +feature {NONE} -- Initialization + + create_interface_objects + -- Create attributes + do + Precursor {VITP_WIDGET} + create unit_widgets.make (10) + column_count := 12 + end + + build_widgets + -- Set up the widgets in Current. + do + Precursor {VITP_WIDGET} +-- build_arrows +-- build_south_arrow +-- build_east_arrow +-- build_west_arrow +-- build_north_east_arrow +-- prune_all (dot) + end + +-- build_bounding_figure +-- -- Add points to the `jj_bounding_figure'. +-- -- The default builds a polygon from the `bounding_box'. +-- do +-- Precursor {VITP_WIDGET} +-- -- Add points to the `jj_bounding_figure' to give it six points +-- -- which can later be set to coincide with points from the +-- -- contained units +-- jj_bounding_figure.extend_point (create {EV_COORDINATE}.make (0, 0)) +-- jj_bounding_figure.extend_point (create {EV_COORDINATE}.make (0, 0)) +-- jj_bounding_figure.disable_events_sended_to_group +-- end + + add_actions + -- Add callbacks to Current + do + Precursor {VITP_WIDGET} + pointer_double_press_actions.extend (agent on_double_press) + jj_defining_figure.pointer_enter_actions.extend (agent on_enter_bounding_figure) + jj_defining_figure.pointer_leave_actions.extend (agent on_leave_bounding_figure) +-- bounding_figure.pointer_double_press_actions.extend (agent on_pointer_double_pressed_bounding_figure) + jj_defining_figure.pointer_button_press_actions.extend (agent on_button_press_bounding_figure) +-- bounding_figure.pointer_motion_actions.extend (agent on_pointer_motion_bounding_figure) +-- bounding_figure.pointer_button_release_actions.extend (agent on_button_release_actions_bounding_figure) + end + +feature -- Status report + + is_stacked: BOOLEAN + -- Are the units to be arranged [with some offset] on top \ + -- of each other? If not they will be tiled. + -- Set by `stack' and `tile' + + is_expanded: BOOLEAN + -- Should the units be overlapped less [greater offset] + -- when `is_stacked'? + -- Set by `expand' and `collapse'. + + expected_rows: INTEGER + -- The number of rows in which Current tries to arrange its widgets + +feature -- Status seting + + stack + -- Stack units on top of each other + do + is_stacked := True + jj_defining_figure.hide + position_attack_unit_widgets + end + + tile + -- Do not stack the units + do + is_stacked := False + jj_defining_figure.show + position_attack_unit_widgets + end + + expand + -- Spead stacked units a little more + do + is_expanded := True + position_attack_unit_widgets + end + + collapse + -- Stack the units a little closer together + do + is_expanded := False + position_attack_unit_widgets + end + +feature -- Query + + point_on_bounding_figure (ax, ay: INTEGER): BOOLEAN + -- Is this point on the `jj_bounding_figure'? + -- Can be used to prevent actions intended only for Current + do + Result := jj_defining_figure.position_on_figure (ax, ay) + end + + has_widget (a_widget: ATTACK_UNIT_WIDGET): BOOLEAN + -- Does Current contain `a_widget'? + do + Result := unit_widgets.has_item (a_widget) + end + +feature -- Basic operations + + set_target (a_task_force: like task_force) + -- Change `task_force' to `a_task_force' + do + Precursor {VITP_WIDGET} (a_task_force) + populate + end + + prune_widget (a_widget: ATTACK_UNIT_WIDGET) + -- Remove `a_widget' from Current. + do + unit_widgets.start + unit_widgets.prune (a_widget) + end + + wipe_out + -- Move all unit_widgets back to the `board_world'; + -- Current removes itself from the `board_world' + local + w: ATTACK_UNIT_WIDGET + do + unit_widgets.wipe_out + -- Clean widgets from Current and put back in board +-- check attached {BOARD_VIEW} board_world as bw then +-- from unit_widgets.start +-- until unit_widgets.after +-- loop +-- w := unit_widgets.item_for_iteration +-- prune_all (w) +-- bw.extend (w) +-- unit_widgets.forth +-- end +-- unit_widgets.wipe_out +-- bw.task_force_widgets.remove (task_force) +-- bw.prune_all (Current) +-- end + end + + populate + -- Ensure the widgets corresponding to the `task_force' units + -- and none others are in Current + local + w: ATTACK_UNIT_WIDGET + u: ATTACK_UNIT +-- bw: VITP_WORLD + do + check attached vitp_world as bw then +---- check attached {BOARD_TOOL} parent_tool as bt then +---- bw := bt.board_view.world +-- from bw.attack_widgets.start +-- until bw.attack_widgets.after +-- loop +-- w := bw.attack_widgets.item_for_iteration +-- u := w.unit +-- if task_force.has (u) and not unit_widgets.has (u)then +-- -- world.place_widget_at_units_location (w) +-- unit_widgets.extend (w, u) +-- bw.prune_all (w) +-- extend (w) +-- end +-- if not task_force.has (u) and unit_widgets.has (u) then +-- unit_widgets.remove (u) +-- prune_all (w) +-- bw.extend (w) +-- end +-- bw.attack_widgets.forth +-- end +-- if task_force.count = 1 then +-- w := unit_widgets.widget (task_force.first) +-- prune_all (w) +-- bw.extend (w) +-- end + end + end + + show + -- Ensure show is requested for each widget in Current + do + from unit_widgets.start + until unit_widgets.after + loop + unit_widgets.item_for_iteration.show + unit_widgets.forth + end + end + + center_on_dot (a_dot: EV_MODEL_DOT) + -- Place the center of the first ship on `a_dot' + local + -- u: ATTACK_UNIT_WIDGET + do + check attached {ATTACK_UNIT_WIDGET} unit_widgets.item (task_force.i_th (1)) as u then + u.center_on_dot (a_dot) + end + position_attack_unit_widgets + end + + position_attack_unit_widgets + -- Position the widgets in a stack or tiled + local + w, prev_w: ATTACK_UNIT_WIDGET + i: INTEGER + p: EV_COORDINATE + r, c, n: INTEGER + a2: ARRAY2 [detachable ATTACK_UNIT_WIDGET] + do + io.put_string ("TASK_FORCE_WIDGET.position_widgets: %N") +-- populate + -- Place widgets in stack or tiled + if is_stacked then + from + unit_widgets.start + prev_w := unit_widgets.item_for_iteration + unit_widgets.forth + until unit_widgets.after + loop + w := unit_widgets.item_for_iteration + w.align_midpoints_with_offset (prev_w, 0.1, -0.1) + prev_w := w + unit_widgets.forth + end + else + column_count := column_count.min (task_force.count) + expected_rows := task_force.count // column_count + if task_force.count \\ column_count > 0 then + expected_rows := expected_rows + 1 + end + -- Use `a2' to memoize the widgets as they are accessed + create a2.make_filled (Void, expected_rows, column_count) + from + c := 1 + r := 1 + n := 2 + w := unit_widgets.widget (task_force.i_th (1)) + a2.put (w, 1, 1) + until n > task_force.count + loop + -- Get the widget to place + w := unit_widgets.widget (task_force.i_th (n)) + c := c + 1 + if c > column_count then + c := 1 + r := r + 1 + end + -- Get widget with which to align `w' + if c = 1 then + check attached a2.item (r - 1, c) as pw then + prev_w := pw + w.align_lefts (prev_w) + w.align_top_to_others_bottom (prev_w) + end + else + check attached a2.item (r, c - 1) as pw then + prev_w := pw + w.align_tops (prev_w) + w.align_left_to_others_right (prev_w) + end + end + a2.put (w, r, c) + n := n + 1 + end + end + -- Position the `jj_bounding_figure' based on the widget positions + position_bounding_figure + end + + position_bounding_figure + -- Size the box to just fit around the positioned widgets + local + w: ATTACK_UNIT_WIDGET + p: EV_COORDINATE + bb: like bounding_box + min_x, max_x: REAL_64 + min_y, max_y: REAL_64 + o_set: REAL_64 + do + -- Find the extend of the widgets + min_x := {REAL_32}.Max_value + max_x := {REAL_32}.Min_value + min_y := {REAL_32}.Max_value + max_y := {REAL_32}.Min_value + from unit_widgets.start + until unit_widgets.after + loop + w := unit_widgets.item_for_iteration + bb := w.bounding_box + if bb.upper_left.x_precise < min_x then + min_x := bb.upper_left.x_precise + end + if bb.upper_left.y_precise < min_y then + min_y := bb.upper_left.y_precise + end + if bb.lower_right.x_precise > max_x then + max_x := bb.lower_right.x_precise + end + if bb.lower_right.y_precise > max_y then + max_y := bb.lower_right.y_precise + end + unit_widgets.forth + end + -- Position the `jj_bounding_figure' based on the contained widgets + -- Remember, point_array is a {SPECIAL} indexed from zero. + -- Set point 1 + o_set := jj_defining_figure.line_width / 2 + w := top_left_unit_widget + p := jj_defining_figure.point_array.at (0) + p.set_precise (w.point.x_precise - o_set, w.point.y_precise - o_set) + -- point 2 + w := top_right_unit_widget + p := jj_defining_figure.point_array.at (1) + p.set_precise (w.point.x_precise, w.point.y_precise - o_set) + -- point 3 + p := jj_defining_figure.point_array.at (2) + p.set_precise (w.point.x_precise + w.size_values.x_precise + o_set, w.point.y_precise - o_set) + -- point 4 + w := bottom_right_unit_widget + p := jj_defining_figure.point_array.at (3) + p.set_precise (w.point.x_precise + w.size_values.x_precise + o_set, w.point.y_precise + w.size_values.y_precise + o_set) + -- point 5 + w := last_unit_widget + p := jj_defining_figure.point_array.at (4) + p.set_precise (w.point.x_precise + w.size_values.x_precise + o_set, w.point.y_precise + w.size_values.y_precise + o_set) + -- point 6 + w := bottom_left_unit_widget + p := jj_defining_figure.point_array.at (5) + p.set_precise (w.point.x_precise - o_set, w.point.y_precise + w.size_values.y_precise + o_set) +-- -- Also place the text at top left +-- create p.make_precise (min_x, min_y) +-- text_widget.center_on_point (p) + end + + top_left_unit_widget: ATTACK_UNIT_WIDGET + -- The widget positioned at the top left when `is_tiled' and the bottom widget + -- when `is_stacked'. (It corresponds to the first unit in the `task_force'.) + do +-- check attached {WIDGET_FACTORY} board_world as bw then +-- Result := bw.attack_widgets.widget (task_force.i_th (1)) +-- end + Result := unit_widgets.widget (task_force.i_th (1)) + end + + top_right_unit_widget: ATTACK_UNIT_WIDGET + -- The widget positioned at the top-right when `is_tiled' and `is_stacked'. + do +-- check attached {WIDGET_FACTORY} board_world as bw then +-- if is_stacked then +-- Result := bw.attack_widgets.widget (task_force.i_th (task_force.count)) +-- else +-- Result := bw.attack_widgets.widget (task_force.i_th (column_count)) +-- end +-- end + if is_stacked then + Result := unit_widgets.widget (task_force.i_th (task_force.count)) + else + Result := unit_widgets.widget (task_force.i_th (column_count)) + end + end + + bottom_right_unit_widget: ATTACK_UNIT_WIDGET + -- The widget positioned at the bottom-right. + local + r: INTEGER + i: INTEGER + do +-- check attached {WIDGET_FACTORY} board_world as bw then +-- if is_stacked then +-- Result := bw.attack_widgets.widget (task_force.i_th (1)) +-- else +-- r := task_force.count // column_count +-- i := r * column_count +-- Result := bw.attack_widgets.widget (task_force.i_th (i)) +-- end +-- end + if is_stacked then + Result := unit_widgets.widget (task_force.i_th (1)) + else + r := task_force.count // column_count + i := r * column_count + Result := unit_widgets.widget (task_force.i_th (i)) + end + end + + bottom_left_unit_widget: ATTACK_UNIT_WIDGET + -- The widget positioned at the bottom-left + local + i: INTEGER + do +-- check attached {WIDGET_FACTORY} board_world as bw then +-- if is_stacked then +-- Result := bw.attack_widgets.widget (task_force.i_th (1)) +-- else +-- i := (expected_rows - 1) * column_count + 1 +-- if i > task_force.count then +-- i := 1 +-- end +-- Result := bw.attack_widgets.widget (task_force.i_th (i)) +-- end +-- end + if is_stacked then + Result := unit_widgets.widget (task_force.i_th (1)) + else + i := (expected_rows - 1) * column_count + 1 + if i > task_force.count then + i := 1 + end + Result := unit_widgets.widget (task_force.i_th (i)) + end + end + + last_unit_widget: ATTACK_UNIT_WIDGET + -- The widget at the bottom + do +-- check attached {WIDGET_FACTORY} board_world as bw then +-- if is_stacked then +-- Result := bw.attack_widgets.widget (task_force.i_th (1)) +-- else +-- Result := bw.attack_widgets.widget (task_force.i_th (task_force.count)) +-- end +-- end + if is_stacked then + Result := unit_widgets.widget (task_force.i_th (1)) + else + Result := unit_widgets.widget (task_force.i_th (task_force.count)) + end + end + + +feature -- Basic operations + + paint + -- Set the colors for the widgets in Current + do + Precursor {VITP_WIDGET} + from unit_widgets.start + until unit_widgets.after + loop + unit_widgets.item_for_iteration.paint + unit_widgets.forth + end + end + + set_dimming_level (a_level: like dimming_level) + -- Change the `dimming_level' + do +-- Precursor {MOVEABLE_WIDGET} (a_level) + if is_stacked then + from unit_widgets.start + until unit_widgets.after + loop + unit_widgets.item_for_iteration.set_dimming_level (a_level) + unit_widgets.forth + end + end + end + + fill_widgets + -- Nothing to do here. + do + end + +feature -- Actions + + on_double_press (ax: INTEGER; ay: INTEGER; a_button: INTEGER; + x_tilt: DOUBLE; y_tilt: DOUBLE; pressure: DOUBLE; + a_screen_x: INTEGER; a_screen_y: INTEGER) + -- React to a double press on Current, toggling `is_stacked'. + do + if is_stacked then + tile + else + stack + end + end + +-- on_pointer_enter +-- -- React to the pointer entering Current by showing +-- -- the `jj_bounding_figure' if not `is_stacked' +-- do +-- io.put_string ("TASK_FORCE_WIDGET.on_enter %N") +-- if not is_stacked then +-- jj_bounding_figure.show +-- end +-- Precursor {VITP_WIDGET} +-- end + +-- on_pointer_leave +-- -- React to the pointer leaving Current by hiding +-- -- the `jj_bounding_figure' +-- do +-- io.put_string ("TASK_FORCE_WIDGET.on_leave %N") +-- jj_bounding_figure.hide +-- Precursor {VITP_WIDGET} +-- end + + on_enter_bounding_figure + -- React to the pointer entering the bounding figure + do + io.put_string ("TASK_FORCE_WIDGET.on_enter_bounding_figure %N") + if not is_stacked then + jj_defining_figure.show + bring_to_front (jj_defining_figure) + end + end + + on_leave_bounding_figure + -- React to the pointer leaving the bounding figure + do + io.put_string ("TASK_FORCE_WIDGET.on_leave_bounding_figure %N") +-- bounding_figure.hide + end + + on_button_press_bounding_figure (ax: INTEGER; ay: INTEGER; a_button: INTEGER; x_tilt: DOUBLE; y_tilt: DOUBLE; + pressure: DOUBLE; a_screen_x: INTEGER; a_screen_y: INTEGER) + -- React to a button press on the `jj_bounding_figure' + do + io.put_string ("TASK_FORCE_WIDGET}.on_button_pressed_bounding_figure: button = " + a_button.out) + if a_button = 1 then + column_count := (column_count - 1).max (1) + position_widgets + elseif a_button = 3 then + column_count := (column_count + 1) + position_widgets + else + io.put_string (" reacting to button ??? %N") + end + end + +feature {NONE} -- Implementation + + column_count: INTEGER + -- The number of columns in which Current tries to arrange its widgets + + target_imp: detachable TASK_FORCE + -- Anchor for `target' + + unit_widgets: VITP_WIDGET_TABLE [ATTACK_UNIT_WIDGET, ATTACK_UNIT] + -- Table to associate a widget with a unit + +invariant + +-- in_this_view: not unit_widgets.is_empty implies across unit_widgets as uw all view.has (uw.item_for_iteration) end +-- same_widget_and_unit_counts: attached item_imp implies task_force.count = unit_widgets.count + +end diff --git a/jj_vitp/Interface/widgets/vitp_widget.e b/jj_vitp/Interface/widgets/vitp_widget.e new file mode 100644 index 0000000..e896904 --- /dev/null +++ b/jj_vitp/Interface/widgets/vitp_widget.e @@ -0,0 +1,985 @@ +note + description: "[ + Root class for widgets in VITP where `item' represents some {VITP_ITEM}. + This also has features for aligning a widget with another. + ]" + author: "Jimmy J. Johnson" + +deferred class + VITP_WIDGET + +inherit + +-- EV_WIDGET + + JJ_MODEL_WORLD_VIEW + -- See newgroup message 20398. Concrete descendants must + -- re-implement `new_filled_list' (from ARRAYED_LIST) as: +-- new_filled_list (n: INTEGER): like Current +-- -- New list with `n' elements. +-- do +-- create Result.make (n) +-- end +-- undefine +-- new_filled_list + redefine + create_interface_objects, + initialize, + set_target, + set_dimming_level, + target_imp, + add_actions, + new_filled_list + -- Let's try redefining with an empty body; this feature + -- may be inapplicable anyway. +-- select +-- default_create + end + +-- DIMABLE +-- rename +-- default_create as initialize_dimable +-- redefine +-- set_dimming_level +-- end + + FONT_AND_COLOR_CONSTANTS + export + {NONE} + all + undefine + default_create + end + +feature {NONE} -- Initialization + + create_interface_objects + -- Initialize attributes + require else + not_initialized: not is_initialized + local + i: INTEGER + c: EV_COORDINATE + do + accept_cursor := Default_accept_cursor + deny_cursor := Default_accept_cursor + foreground_color := Black + create font + create text_group + create name_mt + create dot + Precursor {JJ_MODEL_WORLD_VIEW} + end + + frozen initialize + -- Set up the widgets in Current. + require else + not_initialized: not is_initialized + do +-- set_font (Default_font) +-- initialize_defining_figure + extend_widgets + build_widgets + set_fonts_and_colors + position_widgets + set_widget_order +-- add_actions + dot.set_line_width (10) + -- The Precursor from {VIEW} calls `add_actions' + Precursor {JJ_MODEL_WORLD_VIEW} + set_pebble (target) + is_initialized := True + end + + extend_widgets + -- Put widgets into Current. This cannot be done + -- in `create_interface_object', because cannot call + -- `extend' feature until all objects [in descendants] + -- are also created. + do + extend (dot) + extend (text_group) + text_group.extend (name_mt) + -- Cannot put `jj_defining_figure' in yet, because + -- descendants may not have finished creation and + -- `jj_defining_figure' is self-initializing. +-- extend (jj_defining_figure) + end + + build_widgets + -- Now that widgets were created in `create_interface_objects' + -- and added to Current in `extend_widgets', build up the + -- widgets by adding internal structure to each widget. + do + end + + set_fonts_and_colors + -- Set the default fonts for any text widgets and set + -- the default colors for any contained widgets. + do + end + + position_widgets + -- Move Current and contained widgets to correct + -- location and set their sizes + require + not_initialized: not is_initialized + do + -- Center text on Current + text_group.set_x_y (x, y) + end + + set_widget_order + -- Ensure the widgets are ordered properly + -- (i.e. whose on top?) + do + bring_to_front (text_group) + bring_to_front (dot) + -- Next line is okay, I think + extend (jj_defining_figure) + bring_to_front (jj_defining_figure) + end + + add_actions + -- Add actions to Current + do + check not is_view_initialized then +-- pointer_enter_actions.extend (agent on_pointer_enter) +-- pointer_leave_actions.extend (agent on_pointer_leave) +-- pointer_motion_actions.extend (agent on_pointer_motion) +-- pointer_button_press_actions.extend (agent on_button_pressed) +-- pointer_double_press_actions.extend (agent on_pointer_double_pressed) +-- pointer_button_release_actions.extend (agent on_button_released) +-- pointer_motion_actions.extend (agent on_pointer_motion) +-- pointer_enter_actions.extend (agent on_pointer_enter) +-- pointer_leave_actions.extend (agent on_pointer_leave) + end + Precursor {JJ_MODEL_WORLD_VIEW} + end + +-- build_bounding_figure +-- -- Add points to the `jj_bounding_figure'. +-- -- The default builds a polygon from the `bounding_box'. +-- require +-- not_initialized: not is_initialized +-- local +-- bb: like bounding_box +-- do +-- jj_bounding_figure.set_point_count (4) +-- bb := bounding_box +-- jj_bounding_figure.set_i_th_point_position (1, bb.lower_left.x, bb.lower_left.y) +-- jj_bounding_figure.set_i_th_point_position (2, bb.upper_left.x, bb.upper_left.y) +-- jj_bounding_figure.set_i_th_point_position (3, bb.upper_right.x, bb.upper_right.y) +-- jj_bounding_figure.set_i_th_point_position (4, bb.lower_right.x, bb.lower_right.y) +-- bring_to_front (jj_bounding_figure) +-- jj_bounding_figure.hide +-- jj_bounding_figure.enable_closed +-- ensure +-- has_enough_points: jj_bounding_figure.point_count >= 1 +-- has_bounding_figure: has (jj_bounding_figure) +-- end + + set_initialized + -- Make `is_initialized' + do + is_initialized := true + end + +feature -- Access + + game: VITP_GAME + -- The game for which this widget provides an interface. + do + Result := target.game + end + + foreground_color: EV_COLOR + -- Can be used to `paint' contained widgets + +-- background_color: EV_COLOR +-- -- Can be used to `paint' contained widgets. +-- defined in EV_MODEL_WORLD + + font: EV_FONT + -- The base font from which the size, weight, etc + -- of the fonts for any texts in Current can be based. + + dot: EV_MODEL_DOT + -- A point on Current used for positioning child widgets + + jj_defining_figure: EV_MODEL_CLOSED + -- A shape to mark the boundary of Current, used + -- to determine if widgets overlap or depart an area. + attribute + create {EV_MODEL_RECTANGLE} Result.make_with_points (bounding_box.upper_left, bounding_box.lower_right) + Result.set_line_width (5) + end + + midpoint: EV_COORDINATE + -- The point that is the center of the `jj_bounding_figure' + -- relative to Current's containing group + local + p: EV_COORDINATE + mid: EV_COORDINATE + do + p := point_relative + mid := points_middle (min_values, max_values) + create Result.make_precise (p.x + mid.x, p.y + mid.y) + end + +feature -- Element change + + set_target (a_item: like target) + -- Associate `a_item' with Current. + local + s, s1, s2: STRING + pos: INTEGER + do + Precursor {JJ_MODEL_WORLD_VIEW} (a_item) + -- Set text, handling a couple of {PORT} names specially + if target = game.Pearl_harbor or + target = game.Johnston_island or + target = game.New_hebrides or + target = game.dutch_harbor or + target = game.Andaman_islands then + -- split into two lines + s := target.name + pos := s.index_of (' ', 1) + s1 := s.substring (1, pos - 1) + s2 := s.substring (pos + 1, s.count) + -- Add spaces to better center text on circles + if target = game.pearl_harbor or target = game.dutch_harbor then + s1 := " " + s1 + elseif target = game.johnston_island then + s2 := " " + s2 + elseif target = game.new_hebrides then + s1 := " " + s1 + elseif target = game.andaman_islands then + s2 := " " + s2 + end + name_mt.set_text (s1 + "%N" + s2) + else + name_mt.set_text (target.name) + end + -- Set the color of and draw the contained widgets + paint + end + + set_foreground_color (a_color: EV_COLOR) + -- Change the color in which the text is drawn + require + color_exists: a_color /= Void + do + foreground_color := a_color + paint + end + +-- set_font (a_font: EV_FONT) +-- -- Change the appearance of the `font' from which +-- -- the fonts (height, weight, etc.) of any text +-- -- widgets in Current can be based. +-- do +-- font := a_font +-- name_mt.set_font (font) +-- end + +feature -- Basic operations + + set_dimming_level (a_level: INTEGER) + -- Change the `dimming_level' + do + Precursor {JJ_MODEL_WORLD_VIEW} (a_level) + from start + until exhausted + loop + if attached {VITP_WIDGET} item as v then +-- io.put_string (" VITP_WIDGET.set_dimming_level - widget is a {" + v.generating_type + "} %N" ) + v.set_dimming_level (a_level) + end + forth + end + paint + end + + paint + -- Set the color of items in this widget and hide/show figures + do + if is_defining_figure_shown then + jj_defining_figure.show + else + jj_defining_figure.hide + end + name_mt.set_foreground_color (adjusted_color (foreground_color)) + end + +-- center_on (a_x, a_y: INTEGER_32) +-- -- Move Current so its center point is on (a_x, a_y). +-- local +-- bb: EV_RECTANGLE +-- do +-- bb := bounding_box +-- set_x_y (a_x - (bb.x + bb.width // 2), a_y - (bb.y + bb.height // 2)) +-- end + + center_on_point (a_point: EV_COORDINATE) + -- Transform Current so its center point is on `a_point' + require + point_exists: a_point /= Void + local + t: EV_MODEL_TRANSFORMATION + ax, ay: REAL_64 + bb: EV_RECTANGLE + do + bb := bounding_box + ax := a_point.x_precise - (bb.x + bb.width / 2) + ay := a_point.y_precise - (bb.y + bb.height / 2) + create t.make_id + t.translate (ax, ay) + transform (t) + end + + center_on_dot (a_dot: EV_MODEL_DOT) + -- Place the center of `a_widget' on `a_dot' + require + dot_exists: a_dot /= Void + local + bb: EV_RECTANGLE + cx, cy: REAL_64 + dif_x, dif_y: REAL_64 + t: EV_MODEL_TRANSFORMATION + do + bb := bounding_box + cx := bb.width / 2 + cy := bb.height / 2 + dif_x := (bb.x + cx) - a_dot.point.x_precise + dif_y := (bb.y + cy) - a_dot.point.y_precise +-- dif_x := (bb.x + cx) - dot.point_x +-- dif_y := (bb.y + cy) - dot.point_y + create t.make_zero + t.translate (-dif_x, -dif_y) + transform (t) + end + + center_on_origin + -- Place the center of the widget at (0,0) + local + t: EV_MODEL_TRANSFORMATION + ax, ay: REAL_64 + bb: EV_RECTANGLE + do + bb := bounding_box + ax := bb.x + bb.width / 2 + ay := bb.y + bb.height / 2 + create t.make_id + t.translate (-ax, -ay) + transform (t) + end + + center_widget_on_dot (a_widget: EV_MODEL; a_dot: EV_MODEL_DOT) + -- Place the center of `a_widget' on `a_dot' + local + bb: EV_RECTANGLE + cx, cy: REAL_64 + dif_x, dif_y: REAL_64 + t: EV_MODEL_TRANSFORMATION + do + bb := a_widget.bounding_box + cx := bb.width / 2 + cy := bb.height / 2 + dif_x := (bb.x + cx) - dot.point.x_precise + dif_y := (bb.y + cy) - dot.point.y_precise + create t.make_zero + t.translate (-dif_x, -dif_y) + a_widget.transform (t) + end + + center_widget_on_other (a_widget: EV_MODEL; a_other: EV_MODEL) + -- Place the center of `a_widget' on `a_other' + local + bb, bb_other: EV_RECTANGLE + bb_center_x, bb_center_y: REAL_64 + bb_other_center_x, bb_other_center_y: REAL_64 + cx, cy: REAL_64 + dif_x, dif_y: REAL_64 + t: EV_MODEL_TRANSFORMATION + do + bb := a_widget.bounding_box + bb_other := a_other.bounding_box + bb_center_x := bb.left + bb.width / 2 + bb_center_y := bb.top + bb.height / 2 + bb_other_center_x := bb_other.left + bb_other.width / 2 + bb_other_center_y := bb_other.top + bb_other.height / 2 + dif_x := bb_other_center_x - bb_center_x + dif_y := bb_other_center_y - bb_center_y + +-- cx := bb.width / 2 +-- cy := bb.height / 2 +-- dif_x := (bb.x + cx) - dot.point.x_precise +-- dif_y := (bb.y + cy) - dot.point.y_precise +-- dif_x := (bb.x + cx) - a_other.point_array.item (0).x_precise +-- dif_y := (bb.x + cx) - a_other.point_array.item (0).x_precise + create t.make_zero + t.translate (dif_x, dif_y) + a_widget.transform (t) + -- Check for identical centers + bb := a_widget.bounding_box + bb_other := a_other.bounding_box + bb_center_x := bb.left + bb.width / 2 + bb_center_y := bb.top + bb.height / 2 + bb_other_center_x := bb_other.left + bb_other.width / 2 + bb_other_center_y := bb_other.top + bb_other.height / 2 + dif_x := bb_other_center_x - bb_center_x + dif_y := bb_other_center_y - bb_center_y + end + + translate_widget (a_widget: EV_MODEL; a_x, a_y: INTEGER_32) + -- Move `a_widget' in x and y directions. + local + t: EV_MODEL_TRANSFORMATION + do + create t.make_zero + t.translate (a_x, a_y) +-- a_widget.transform (t) + a_widget.set_x_y (a_widget.x + a_x, a_widget.y + a_y) + end + + rotate_widget (a_widget: EV_MODEL; a_degrees: REAL_64) + -- Rotate `a_widget' `a_degrees' clockwise. + local + rad: REAL_64 + do + rad := degrees_to_radians (a_degrees) + a_widget.rotate (rad) + end + + scale_widget (a_widget: EV_MODEL; a_scale: REAL_64) + -- Resize `a_widget' by `a_scale' factor. + do + a_widget.scale (a_scale) + end + + align_midpoints (a_other: VITP_WIDGET) + -- Move Current so its `midpoint' is over the `midpoint' of `a_other' + local + t: EV_MODEL_TRANSFORMATION + po: EV_COORDINATE + do + po := points_offset (midpoint, a_other.midpoint) + create t.make_zero + t.translate (po.x_precise, po.y_precise) + transform (t) + end + + align_midpoints_with_offset (a_other: VITP_WIDGET; a_x_offset, a_y_offset: REAL_64) + -- Move Current so its `midpoint' is offset from the `midpoint' + -- of `a_other' by the offsets (as percentages of the size of + -- Current in that direction). + local + t: EV_MODEL_TRANSFORMATION + s: EV_COORDINATE + xx, yy: REAL_64 + do + s := a_other.size_values + align_midpoints (a_other) + xx := s.x_precise * a_x_offset + yy := s.y_precise * a_y_offset + create t.make_zero + t.translate (xx, yy) + transform (t) + end + + align_vertical (a_other: VITP_WIDGET) + -- Move Current horizontally until it's `midpoint.x' is aligned + -- with the `midpoint.x' of `a_other'. + local + t: EV_MODEL_TRANSFORMATION + po: EV_COORDINATE + do + po := points_offset (midpoint, a_other.midpoint) + create t.make_zero + t.translate (po.x_precise, 0.0) + transform (t) + end + + align_horizontal (a_other: VITP_WIDGET) + -- Move Current vertically until it's `midpoint.y' is aligned + -- with the `midpoint.y' of `a_other'. + local + t: EV_MODEL_TRANSFORMATION + po: EV_COORDINATE + do + po := points_offset (midpoint, a_other.midpoint) + create t.make_zero + t.translate (0.0, po.y_precise) + transform (t) + end + + align_lefts (a_other: VITP_WIDGET) + -- Move Current so its left side is aligned with + -- the left side of `a_other' + local + t: EV_MODEL_TRANSFORMATION + c, o: REAL_64 -- current's value; other's value + do + c := min_values.x + o := a_other.min_values.x + create t.make_zero + t.translate (o - c, 0.0) + transform (t) + end + + align_rights (a_other: VITP_WIDGET) + -- Move Current so its right side is aligned with + -- the right side of `a_other' + local + t: EV_MODEL_TRANSFORMATION + c, o: REAL_64 + do + c := max_values.x + o := a_other.max_values.x + create t.make_zero + t.translate (o - c, 0.0) + transform (t) + end + + align_tops (a_other: VITP_WIDGET) + -- Move Current so its top side is aligned with + -- the top side of `a_other' + local + t: EV_MODEL_TRANSFORMATION + c, o: REAL_64 + do + c := max_values.y + o := a_other.max_values.y + create t.make_zero + t.translate (0.0, o - c) + transform (t) + end + + align_bottoms (a_other: VITP_WIDGET) + -- Move Current so its bottom side is aligned with + -- the bottom side of `a_other' + local + t: EV_MODEL_TRANSFORMATION + c, o: REAL_64 + do + c := min_values.y + o := a_other.min_values.y + create t.make_zero + t.translate (o - c, 0.0) + transform (t) + end + + align_left_to_others_right (a_other: VITP_WIDGET) + -- Move Current so its left side is aligned with the + -- left side of `a_other' + local + t: EV_MODEL_TRANSFORMATION + o, c: REAL_64 + do + c := min_values.x + o := a_other.max_values.x + create t.make_zero + t.translate (o - c, 0.0) + transform (t) + end + + align_right_to_others_left (a_other: VITP_WIDGET) + -- Move Current so its right side is aligned with the + -- left side of `a_other' + local + t: EV_MODEL_TRANSFORMATION + c, o: REAL_64 + do + c := max_values.x + o := a_other.min_values.x + create t.make_zero + t.translate (o - c, 0.0) + transform (t) + end + + align_top_to_others_bottom (a_other: VITP_WIDGET) + -- Move Current so its top side is aligned with the + -- bottom side of `a_other' + local + t: EV_MODEL_TRANSFORMATION + c, o: REAL_64 + do + c := min_values.y + o := a_other.max_values.y + create t.make_zero + t.translate (0.0, o - c) + transform (t) + end + + align_bottom_to_others_top (a_other: VITP_WIDGET) + -- Move Current so its top side is aligned with the + -- bottom side of `a_other' + local + t: EV_MODEL_TRANSFORMATION + c, o: REAL_64 + do + c := min_values.y + o := a_other.max_values.y + create t.make_zero + t.translate (o - c, 0.0) + transform (t) + end + +feature -- Actions + +-- timer: TIME + +-- on_pointer_enter +-- -- React to the mouse pointer entering Current +-- do +-- io.put_string ("VITP_WIDGET.on_enter " + vitp_item.name + "%N") +-- -- Start timer; after delay with no movement show status dialog + +-- end + +-- on_pointer_leave +-- -- React to the mouse pointer leaving Current +-- do +-- io.put_string ("VITP_WIDGET.on_leave " + vitp_item.name + "%N") + +-- end + +-- on_pointer_motion (ax, ay: INTEGER; ax_tilt, ay_tilt, apressure: DOUBLE; +-- a_screen_x, a_screen_y: INTEGER) +-- -- React to the mouse moving within Current +-- do +-- io.put_string ("VITP_WIDGET.on_move " + vitp_item.name + "%N") + +-- end + +feature -- Status report + + is_initialized: BOOLEAN + -- Has Curent been initialized? (I.e. all all widgets built?) + -- Used to prevent calling `initialize' more than once. + + is_defining_figure_shown: BOOLEAN + -- Can be used by descendants to determine if the `jj_bounding_figure' + -- should be visible or not. + +feature -- Query + + contains_point (a_point: EV_COORDINATE): BOOLEAN + -- Is `a_point' on or in Current's `jj_defining_figure'? + local + pts: SPECIAL [EV_COORDINATE] -- for convenience + i, j: INTEGER + do +-- pts := jj_bounding_figure.point_array +-- -- Remember SPECIAL is zero-based +-- from +-- i := 0 +-- j := pts.count - 1 +-- until i > pts.count - 1 +-- loop +-- if ( ((pts[i].y_precise >= a_point.y_precise) /= (pts[j].y_precise >= a_point.y_precise)) and +-- (a_point.x_precise <= (pts[j].x_precise - pts[i].x_precise) * +-- (a_point.y_precise - pts[i].y_precise) / +-- (pts[j].y_precise - pts[i].y_precise) + pts[i].x_precise) ) then +-- Result := not Result +-- end +-- j := i +-- i := i + 1 +-- end + Result := jj_defining_figure.position_on_figure (a_point.x, a_point.y) + end + + overlaps (a_other: VITP_WIDGET): BOOLEAN + -- Does Current occupy any space occupied by a_other + local + pts: SPECIAL [EV_COORDINATE] + i: INTEGER + do + if Current /= a_other then + pts := jj_defining_figure.point_array + -- Remember SPECIAL is zero-based + from i := 0 + until i > pts.count - 1 or Result + loop + Result := a_other.contains_point (pts[i]) + i := i + 1 + end + -- Check the other way around + if not Result then + pts := a_other.jj_defining_figure.point_array + from i := 0 + until i > pts.count - 1 or Result + loop + Result := contains_point (pts[i]) + i := i + 1 + end + end + end + end + + touches (a_other: VITP_WIDGET): BOOLEAN + -- Does Current touch `a_other'? + do + + end + + is_touched_by (a_other: VITP_WIDGET): BOOLEAN + -- Is Current touched by `a_other'? + do + + end + + contains (a_other: VITP_WIDGET): BOOLEAN + -- Does Current contain *all* of `a_other'? + do + + end + + is_contained_by (a_other: VITP_WIDGET): BOOLEAN + -- Is *all* of Current within `a_other'? + do + + end + + diverges_from (a_other: VITP_WIDGET): BOOLEAN + -- Does Current `intersects' `a_other' while having any + -- point outside `a_other' + do + + end + +feature {NONE} -- Inapplicable + + new_filled_list (n: INTEGER): like Current + -- Redefined to get past void-safety issues + do + check + do_not_call: False then + -- Because this was redefined to appease void-safety, nothing else. + end + end + +feature -- Actions + + activate_drop_action + -- Allow Current to react to the drop of a unit, moving + -- that unit to the `location' in Current. + do + drop_actions.extend (drop_unit_agent) + end + + deactivate_drop_action + -- Remove the agent added by `activate_drop_actions + do + drop_actions.start + drop_actions.prune (drop_unit_agent) + end + + frozen drop_unit_agent: PROCEDURE [TUPLE [ATTACK_UNIT]] + -- Create an agent out of `on_drop_unit' which will be added + -- to Current when a pick is started and the Sequence of Play + -- allows for the unit to be dropped here. + once ("OBJECT") + Result := agent on_drop_unit + end + + on_drop_unit (a_unit: ATTACK_UNIT) + -- Move `a_unit' to `locaiton' + do + print ("{LOCATION_WIDGET}.on_drop_unit: dropped " + a_unit.name + " on " + target.name + "%N") + end + +feature {NONE} -- Implementation (actions) + + on_button_pressed (ax: INTEGER; ay: INTEGER; a_button: INTEGER; x_tilt: DOUBLE; y_tilt: DOUBLE; + pressure: DOUBLE; a_screen_x: INTEGER; a_screen_y: INTEGER) + -- Notify `board_world' that Current was clicked + -- This allows the `board_world' to handle the click *and* to know the + -- widget on which the click occurred. + do + io.put_string ("VITP_WIDGET.on_button_pressed on " + target.name + "%N") +-- if attached board_world as bw then +-- bw.on_notify_button_pressed (Current, ax, ay, a_button) +-- end + end + +-- on_pointer_double_pressed (ax: INTEGER; ay: INTEGER; a_button: INTEGER; x_tilt: DOUBLE; y_tilt: DOUBLE; +-- pressure: DOUBLE; a_screen_x: INTEGER; a_screen_y: INTEGER) +-- -- Notify `board_world' that Current was double-clicked +-- -- This allows the `board_world' to handle the click *and* to know the +-- -- widget on which the click occurred. +-- do +-- if attached board_world as bw then +-- bw.on_notify_button_double_pressed (Current, ax, ay, a_button) +-- end +-- end + +-- on_button_released (ax: INTEGER; ay: INTEGER; a_button: INTEGER; x_tilt: DOUBLE; y_tilt: DOUBLE; +-- pressure: DOUBLE; a_screen_x: INTEGER; a_screen_y: INTEGER) +-- -- Notify `board_world' that `a_button' was released on it +-- do +-- if attached board_world as bw then +-- bw.on_notify_button_released (Current, ax, ay, a_button) +-- end +-- end + +-- on_pointer_motion (ax: INTEGER; ay: INTEGER; x_tilt: DOUBLE; y_tilt: DOUBLE; +-- pressure: DOUBLE; a_screen_x: INTEGER; a_screen_y: INTEGER) +-- -- Notify `board_world' that mouse was moved on Current +-- local +-- c: EV_COORDINATE +-- do +-- if attached board_world as bw then +-- bw.on_notify_pointer_motion (Current, ax, ay) +-- end +-- end + +-- on_pointer_enter +-- -- React to the mouse entering the `dot' +-- do +-- if attached board_world as bw then +-- bw.on_notify_pointer_enter (Current) +-- end +-- end + +-- on_pointer_leave +-- -- React to mouse leaving Current +-- do +-- if attached board_world as bw then +-- bw.on_notify_pointer_leave (Current) +-- end +-- end + +feature {VITP_WIDGET} -- Implementation + + vitp_world: detachable WIDGET_FACTORY + -- The VITP {WIDGET_FACTORY} if any in which Current recursively resides + do + if attached {WIDGET_FACTORY} world as w then + Result := w + elseif attached {WIDGET_FACTORY} group as w then + Result := w + elseif attached {VITP_WIDGET} group as g then + Result := g.vitp_world + end + end + + size_values: EV_COORDINATE + -- The difference between the min_values and max_values. + -- The "width" and "height" of the `jj_defining_figure' as a tuple. + local + po: EV_COORDINATE + do + po := points_offset (max_values, min_values) + create Result.make_precise (po.x_precise.abs, po.y_precise.abs) + end + + min_values: EV_COORDINATE + -- The smallest values of both the x & y coordinates of all + -- the points in `jj_bounding_figure' + local + i: INTEGER + xx, yy: REAL_64 + c: EV_COORDINATE + rect: EV_RECTANGLE + do +-- create c +-- xx := {REAL_64}.Max_value +-- yy := {REAL_64}.Max_value +-- from i := 1 +-- until i > jj_bounding_figure.point_count +-- loop +-- c.set_precise (jj_bounding_figure.i_th_point_x (i), jj_bounding_figure.i_th_point_y (i)) +-- if c.x_precise < xx then +-- xx := c.x_precise +-- end +-- if c.y_precise < yy then +-- yy := c.y_precise +-- end +-- i := i + 1 +-- end +-- create Result.make_precise (xx, yy) + create Result.make_precise (bounding_box.left, bounding_box.top) + end + + max_values: EV_COORDINATE + -- The largest values of both the x & y coordinates of all + -- the points in `jj_bounding_figure' + local + i: INTEGER + xx, yy: REAL_64 + c: EV_COORDINATE + do + create c +-- xx := {REAL_64}.Min_value +-- yy := {REAL_64}.Min_value +-- from i := 1 +-- until i > jj_bounding_figure.point_count +-- loop +-- c.set_precise (jj_bounding_figure.i_th_point_x (i), jj_bounding_figure.i_th_point_y (i)) +-- if c.x_precise > xx then +-- xx := c.x_precise +-- end +-- if c.y_precise > yy then +-- yy := c.y_precise +-- end +-- i := i + 1 +-- end +-- create Result.make_precise (xx, yy) + create Result.make_precise (bounding_box.right, bounding_box.bottom) + end + + points_middle (a_point, a_other_point: EV_COORDINATE): EV_COORDINATE + -- The point midway between the two points + local + xx, yy: REAL_64 + do + xx := (a_other_point.x_precise - a_point.x_precise) / 2 + yy := (a_other_point.y_precise - a_point.y_precise) / 2 + create Result.make_precise (xx, yy) + end + + points_offset (a_point, a_other_point: EV_COORDINATE): EV_COORDINATE + -- The offset of `a_other_point' from `a_point' + local + xx, yy: REAL_64 + do + xx := a_other_point.x_precise - a_point.x_precise + yy := a_other_point.y_precise - a_point.y_precise + create Result.make_precise (xx, yy) + end + +feature {NONE} -- Implementation + + degrees_to_radians (degrees: DOUBLE): DOUBLE + -- Convert degrees to radians. + -- Helper function for convienence if need to rotate the widget. + require + degrees_big_enough: degrees >= -360 + degrees_small_enough: degrees <= 360 + do + Result := degrees * Pi / 180 + ensure +-- definition: very_close (Result, degrees * (2 * Pi) / 360) + result_in_range: Result >= -2 * Pi and Result <= 2 * Pi + end + +feature {VITP_WIDGET} -- Implementation + + name_mt: EV_MODEL_TEXT + -- The name of the object in Current + + text_group: EV_MODEL_GROUP + -- Hold any text widgets in Current so they can + -- be positioned and resized as a group + + target_imp: detachable VITP_ITEM + -- Detachable implementation of `target' for void safety + +invariant + + not_empty: target_imp /= Void + + +end diff --git a/jj_vitp/Interface/widgets/widget_support/item_definition.e b/jj_vitp/Interface/widgets/widget_support/item_definition.e new file mode 100644 index 0000000..6c861c5 --- /dev/null +++ b/jj_vitp/Interface/widgets/widget_support/item_definition.e @@ -0,0 +1,163 @@ +note + description: "[ + Support class for holding coordinates for the definition + of all widgets for the VITP game. + Each POINT_LIST represents the definition of an area such + as a sea area or land mass or the corners of a tile in + a widget for an attack unit. + + The points defining the widgets may be larger than required, + so we provide scaling factors to be used after the widget + is built. + ]" + author: "Jimmy J. Johnson" + +class + ITEM_DEFINITION + +inherit + + LINKED_LIST [POINT_LIST] + redefine + make + end + +create + make + +feature {NONE} -- Initialization + + make + -- Initialize Current with a `control_point' at the origin + do + Precursor + create dot_offset + create lines.make + factor_x := 1.0 + factor_y := 1.0 + end + + anchor_type: REAL_64 + -- Anchor scales and offsets to this numeric type + +feature -- Access + + factor_x: like anchor_type + -- Amount to scale widget in x direction (after it is built) + + factor_y: like anchor_type + -- Amount to scale widget in x direction (after it is built) + + offset_x: like anchor_type + -- Amount to x translate the widget to get it in to its initial + -- position on the board (after the widget is built) + + offset_y: like anchor_type + -- Amount to y translate the widget to get it in to its initial + -- position on the board (after the widget is built) + + dot_offset_x: like anchor_type + -- Amount to translate the `dot' in the described {VITP_WIDGET} + -- This offset is relative to the center point of the widget + + dot_offset: EV_COORDINATE +-- dot_offset_y: like anchor_type + -- Amount to translate the `dot' in the described {VITP_WIDGET} + -- This offset is relative to the center point of the widget + + line_count: INTEGER + -- The number of text lines + do + Result := lines.count + end + + line (a_index: INTEGER): STRING + -- The line at `a_index' + require + has_lines: has_lines + index_large_enough: a_index >= 1 + index_small_enough: a_index <= line_count + do + Result := lines [a_index] + end + +feature -- Element change + + set_offset (ax, ay: like anchor_type) + -- The amount by which the widget defined by Current should be translated + do + offset_x := ax + offset_y := ay + end + + set_dot_offset (a_offset: like dot_offset) + -- Change the `dot_offset + do + dot_offset := a_offset + end + + set_offset_x (ax: like anchor_type) + -- Change the `offset_x' + do + offset_x := ax + end + + set_offset_y (ay: like anchor_type) + -- Change the `offset_y' + do + offset_y := ay + end + + set_factors (ax, ay: like anchor_type) + -- Change both x and y scale factors + require + x_factor_large_enough: ax > 0.0 + y_factor_large_enough: ay > 0.0 + do + factor_x := ax + factor_y := ay + end + + set_factor_x (ax: like anchor_type) + -- Change the `factor_x' + require + factor_large_enough: ax > 0.0 + do + factor_x := ax + end + + set_factor_y (ay: like anchor_type) + -- Change the `factor_y' + require + factor_large_enough: ay > 0.0 + do + factor_y := ay + end + + add_line (a_line: STRING) + -- Add a line of text + require + line_exists: a_line /= Void + do + lines.extend (a_line) + end + +feature -- Status report + + has_lines: BOOLEAN + -- Does Current have at least one line? + do + Result := not lines.is_empty + end + +feature {NONE} -- Implementation + + lines: LINKED_LIST [STRING] + -- All the lines of text that belong in the represented area + +invariant + + dot_offset_exists: dot_offset /= Void + lines_exists: lines /= Void + +end diff --git a/jj_vitp/Interface/widgets/widget_support/point_list.e b/jj_vitp/Interface/widgets/widget_support/point_list.e new file mode 100644 index 0000000..f62191e --- /dev/null +++ b/jj_vitp/Interface/widgets/widget_support/point_list.e @@ -0,0 +1,18 @@ +note + description: "[ + Support class for holding coordinates for the definition + of areas for the VITP game. + ]" + author: "Jimmy J. Johnson" + +class + POINT_LIST + +inherit + + LINKED_LIST [EV_COORDINATE] + +create + make + +end diff --git a/jj_vitp/Interface/widgets/widget_support/polygon_clipper.e b/jj_vitp/Interface/widgets/widget_support/polygon_clipper.e new file mode 100644 index 0000000..732da6b --- /dev/null +++ b/jj_vitp/Interface/widgets/widget_support/polygon_clipper.e @@ -0,0 +1,56 @@ +note + description: "[ + Provides functions to clip one polygon against another. + ]" + author: "Jimmy J. Johnson" + +class + POLYGON_CLIPPER + +inherit + + ANY + redefine + default_create + end + +create + default_create + +feature {NONE} -- Initialization + + default_create + -- Set up Current + do + create clipping_results.make + end + +feature -- Query + + clipped (polygon, other: EV_MODEL_POLYGON): LINKED_LIST [EV_MODEL_POLYGON] + -- The polygon representing the intersection of `polygon' and `other' + local + e_count, other_e_count: INTEGER + i, j: INTEGER + do + create Result.make + e_count := polygon.point_count - 1 + other_e_count := other.point_count - 1 + from i := 1 + until i > e_count + loop + from j := 1 + until j > other_e_count + loop + j := j + 1 + end + i := i + 1 + end + end + +feature {NONE} -- Implementation + + clipping_results: LINKED_LIST [EV_MODEL_POLYGON] + -- Holds intermediate calculations + +end diff --git a/jj_vitp/Interface/widgets/widget_support/silhouette.e b/jj_vitp/Interface/widgets/widget_support/silhouette.e new file mode 100644 index 0000000..cac6d61 --- /dev/null +++ b/jj_vitp/Interface/widgets/widget_support/silhouette.e @@ -0,0 +1,23 @@ +note + description: "[ + Class used in {VITP_GAME}, Victory in the Pacific, to diplay + the outline of a unit (e.g. {SHIP}, {AMPHIBOUSE_UNIT}, etc.) + on an {ATTACK_UNIT_WIDGET}. + ]" + author: "Jimmy J. Johnson" + date: "3/14/24" + copyright: "Copyright (c) 2021, Jimmy J. Johnson" + license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)" + +class + SILHOUETTE + +inherit + + EV_MODEL_POLYGON + +create + default_create, + make_with_coordinates + +end diff --git a/jj_vitp/Interface/widgets/widget_support/vitp_widget_table.e b/jj_vitp/Interface/widgets/widget_support/vitp_widget_table.e new file mode 100644 index 0000000..ac4d1fe --- /dev/null +++ b/jj_vitp/Interface/widgets/widget_support/vitp_widget_table.e @@ -0,0 +1,30 @@ +note + description: "[ + A HASH_TABLE pairing widgets with a {VITP_ITEM}. + ]" + author: "Jimmy J. Johnson" + +class + VITP_WIDGET_TABLE [G -> VITP_WIDGET, K -> VITP_ITEM] +-- VITP_WIDGET_TABLE [G -> VITP_WIDGET, K -> STRING_8] + +inherit + + HASH_TABLE [G, K] + +create + make, + make_equal + +feature -- Access + + widget (key: K): G + -- Item associated with `key'. + -- Should be present + do + check attached item (key) as v then + Result := v + end + end + +end diff --git a/jj_vitp/jj_override/ev_model_elliptic.e b/jj_vitp/jj_override/ev_model_elliptic.e new file mode 100644 index 0000000..457bf2a --- /dev/null +++ b/jj_vitp/jj_override/ev_model_elliptic.e @@ -0,0 +1,303 @@ +note + description: "[ + + An EV_FIGURE_ELLIPTIC is defined by pa and pb + and not rotatable. If you need a rotatable elliptic + use a EV_FIGURE_ROTATED_ELLIPTIC but if not elliptic + is a lot faster. + + pa----------- + | | + | | + | center | + | | + | | + ----------- pb + + radius1 is half horizontal distance between pa and pb. + radius2 is half vertical distance between pa and pb. + + ]" + legal: "See notice at end of class." + status: "See notice at end of class." + date: "$Date: 2013-04-25 18:08:32 -0400 (Thu, 25 Apr 2013) $" + revision: "$Revision: 33 $" + +deferred class + EV_MODEL_ELLIPTIC + +inherit + EV_MODEL_ATOMIC + export + {ANY} Pi + undefine + point_count + redefine + default_create, + bounding_box + end + + EV_MODEL_DOUBLE_POINTED + undefine + default_create + end + +feature {NONE} -- Initialization + + default_create + -- Create a EV_FIGURE_ELLIPTIC at (0,0) with no dimension. + do + Precursor {EV_MODEL_ATOMIC} + create point_array.make_empty (2) + point_array.extend (create {EV_COORDINATE}.make (0, 0)) + point_array.extend (create {EV_COORDINATE}.make (0, 0)) + is_center_valid := True + end + +feature -- Access + + angle: DOUBLE = 0.0 + -- Since not rotatable. + + is_scalable: BOOLEAN + -- Elliptic is scalable. + do + Result := True + end + + + is_rotatable: BOOLEAN + -- Elliptic is not rotatable. + -- (Use a rotatable_elliptic) + do +-- jjj Result := False + Result := True + end + + is_transformable: BOOLEAN + -- Elliptic is not transformable. + do +-- jjj Result := False + Result := True + end + + radius1: INTEGER + -- The horizontal radius. + local + l_point_array: like point_array + p0, p1: EV_COORDINATE + do + l_point_array := point_array + p0 := l_point_array.item (0) + p1 := l_point_array.item (1) + + Result := as_integer ((p0.x_precise - p1.x_precise) / 2).abs + end + + radius2: INTEGER + -- The vertical radius. + local + l_point_array: like point_array + p0, p1: EV_COORDINATE + do + l_point_array := point_array + p0 := l_point_array.item (0) + p1 := l_point_array.item (1) + Result := as_integer ((p0.y_precise - p1.y_precise) / 2).abs + end + + point_a_x: INTEGER + -- x position of `point_b'. + do + Result := point_array.item (0).x + end + + point_a_y: INTEGER + -- y position of `point_b'. + do + Result := point_array.item (0).y + end + + + point_b_x: INTEGER + -- x position of `point_b'. + do + Result := point_array.item (1).x + end + + point_b_y: INTEGER + -- y position of `point_b'. + do + Result := point_array.item (1).y + end + +feature -- Element change + + set_radius1 (radius: INTEGER) + -- Set `radius1' to `radius'. + require + radius_positive: radius >= 0 + local + l_point_array: like point_array + p0, p1: EV_COORDINATE + cx: DOUBLE + do + l_point_array := point_array + p0 := l_point_array.item (0) + p1 := l_point_array.item (1) + cx := (p0.x_precise + p1.x_precise) / 2 + p0.set_x_precise (cx - radius) + p1.set_x_precise (cx + radius) + invalidate + center_invalidate + ensure + set: radius1 = radius + end + + set_radius2 (radius: INTEGER) + -- Set `radius2' to `radius'. + require + radius_positive: radius >= 0 + local + l_point_array: like point_array + p0, p1: EV_COORDINATE + cy: DOUBLE + do + l_point_array := point_array + p0 := l_point_array.item (0) + p1 := l_point_array.item (1) + cy := (p0.y_precise + p1.y_precise) / 2 + p0.set_y_precise (cy - radius) + p1.set_y_precise (cy + radius) + invalidate + center_invalidate + ensure + set: radius2 = radius + end + + set_radius1_and_radius2 (a_radius1, a_radius2: INTEGER) + -- Set `radius1' to `a_radius1' and `radius2` to `a_radius2'. + require + radius1_positive: a_radius1 >= 0 + radius2_positive: a_radius2 >= 0 + local + l_point_array: like point_array + p0, p1: EV_COORDINATE + cx, cy: DOUBLE + do + l_point_array := point_array + p0 := l_point_array.item (0) + p1 := l_point_array.item (1) + cx := (p0.x_precise + p1.x_precise) / 2 + cy := (p0.y_precise + p1.y_precise) / 2 + p0.set_x_precise (cx - a_radius1) + p1.set_x_precise (cx + a_radius1) + p0.set_y_precise (cy - a_radius2) + p1.set_y_precise (cy + a_radius2) + invalidate + center_invalidate + ensure + set: radius1 = a_radius1 and radius2 = a_radius2 + end + + set_point_a_position (ax, ay: INTEGER) + -- Set position of `point_a' to position of (`ax', `ay'). + do + point_array.item (0).set_precise (ax, ay) + + invalidate + center_invalidate + end + + set_point_b_position (ax, ay: INTEGER) + -- Set position of `point_b' to position of (`ax', `ay'). + do + point_array.item (1).set_precise (ax, ay) + + invalidate + center_invalidate + end + +feature -- Events + + bounding_box: EV_RECTANGLE + -- Smallest orthegonal rectangle `Current' fits in. + local + min_x, min_y, max_x, max_y, lw2, v1, v2: DOUBLE + lx, ly, w, h: INTEGER + l_point_array: like point_array + pa, pb: EV_COORDINATE + do + if attached internal_bounding_box as l_internal_bounding_box and then l_internal_bounding_box.has_area then + Result := l_internal_bounding_box.twin + else + l_point_array := point_array + pa := l_point_array.item (0) + pb := l_point_array.item (1) + + v1 := pa.x_precise + v2 := pb.x_precise + min_x := v1.min (v2) + max_x := v1.max (v2) + + v1 := pa.y_precise + v2 := pb.y_precise + min_y := v1.min (v2) + max_y := v1.max (v2) + + check + max_x >= min_x + max_y >= min_y + end + + lw2 := line_width / 2 + + lx := as_integer (min_x - lw2) + ly := as_integer (min_y - lw2) + w := as_integer ((max_x - min_x) + lw2) + 1 + h := as_integer ((max_y - min_y) + lw2) + 1 + create Result.make (lx, ly, w, h) + if attached internal_bounding_box as l_internal_bounding_box then + l_internal_bounding_box.copy (Result) + else + internal_bounding_box := Result.twin + end + end + end + +feature {NONE} -- Implementation + + set_center + -- Set position of the center. + local + l_point_array: like point_array + pa, pb: EV_COORDINATE + do + l_point_array := point_array + pa := l_point_array.item (0) + pb := l_point_array.item (1) + center.set_precise ((pa.x_precise + pb.x_precise) / 2, (pa.y_precise + pb.y_precise) / 2) + is_center_valid := True + end + +note + copyright: "Copyright (c) 1984-2006, Eiffel Software and others" + license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)" + source: "[ + Eiffel Software + 356 Storke Road, Goleta, CA 93117 USA + Telephone 805-685-1006, Fax 805-685-6869 + Website http://www.eiffel.com + Customer support http://support.eiffel.com + ]" + + + + +end -- class EV_MODEL_ELLIPTIC + + + + + + diff --git a/jj_vitp/jj_override/ev_model_group.e b/jj_vitp/jj_override/ev_model_group.e new file mode 100644 index 0000000..8bc60fc --- /dev/null +++ b/jj_vitp/jj_override/ev_model_group.e @@ -0,0 +1,1080 @@ +note + description: "[ + A EV_FIGURE_GROUP is an ARRAYED_LIST of EV_FIGURE. + Since EV_FIGURE_GROUP is also an EV_FIGURE (composite pattern) you + can rotate, scale and change the position of an EV_FIGURE_GROUP. + All elements in the group are rotated around the center + of the EV_FIGURE_GROUP. A EV_FIGURE can only be grouped + in one group at the same time. + + ]" + legal: "See notice at end of class." + status: "See notice at end of class." + date: "$Date: 2014-06-03 19:49:45 -0400 (Tue, 03 Jun 2014) $" + revision: "$Revision: 44 $" + +class + EV_MODEL_GROUP + +inherit + EV_MODEL + undefine + point_count + redefine + rotate, + create_interface_objects, + default_create, + recursive_transform, + set_x, + set_y, + set_x_y, + invalid_rectangle, + update_rectangle, + invalidate, + validate, + bounding_box + end + + ARRAYED_LIST [EV_MODEL] + rename + make as list_make + export + {NONE} put_i_th + undefine + is_equal, + copy + redefine + append, + force, + extend, + replace, + insert, + prune_all, + wipe_out, + remove, + merge_left, + merge_right, + make_from_array, + default_create, + swap, + has, + make_filled, + list_make, + -- I added these + at, + last, + first + end + + EV_MODEL_SINGLE_POINTED + undefine + default_create + end + +create + default_create, + make_with_point, + make_with_position + +create {EV_MODEL_GROUP} + list_make, + make_filled + +feature {NONE} -- Initialization + + create_interface_objects + -- + do + create lookup_table.make (initiale_size) + create point_array.make_empty (1) + make_empty_area (initiale_size) + Precursor {EV_MODEL} + end + + default_create + -- Create an empty EV_MODEL_GROUP. + do + Precursor {EV_MODEL} + point_array.extend (create {EV_COORDINATE}.make (0, 0)) + index := 0 + is_grouped := True + ensure then + is_grouped: is_grouped + not_is_in_group: not is_in_group + end + + make_filled (n: INTEGER_32) + -- + do + default_create + Precursor {ARRAYED_LIST} (n) + end + + list_make (n: INTEGER) + -- + do + default_create + Precursor {ARRAYED_LIST} (n) + end + +feature -- Access + + angle: DOUBLE + -- `Current' has to be rotated around (`x',`y') for -`angle' + -- to be in upright position. + do + Result := current_angle + ensure then + Result_equal_current_angle: Result = current_angle + end + + point_x: INTEGER + -- x position of `point'. + do + Result := point_array.item (0).x + end + + point_y: INTEGER + -- y position of `point'. + do + Result := point_array.item (0).y + end + + deep_elements: LIST [EV_MODEL] + -- All elements in `Current' and in its subgroups. + local + l_group: detachable EV_MODEL_GROUP + l_list: ARRAYED_LIST [EV_MODEL] + do + create l_list.make (0) + from + start + until + after + loop + l_group ?= item + if l_group /= Void then + l_list.append (l_group.deep_elements) + end + l_list.extend (item) + forth + end + Result := l_list + ensure + Result_not_Void: Result /= Void + end + + at alias "@" (i: INTEGER): like item assign put_i_th + -- Item at `i'-th position, redefined by jjj to conform to `item' + do + check attached {like item} Precursor {ARRAYED_LIST} (i) as v then + Result := v + end + end + + first: like item + -- Item at first position, redefined by jjj to conform to `item' + do + check attached {like item} Precursor {ARRAYED_LIST} as v then + Result := v + end + end + + last: like item + -- Item at last position, redefined by jjj to conform to `item' + do + check attached {like item} Precursor {ARRAYED_LIST} as v then + Result := v + end + end + +feature -- Status report + + is_rotatable: BOOLEAN + -- Is this figure group rotatable? + local + l_area: like area + i, nb: INTEGER + do + if is_grouped then + Result := True + l_area := area + from + i := 0 + nb := count - 1 + until + i > nb or not Result + loop + Result := l_area.item (i).is_rotatable + i := i + 1 + end + else + Result := True + end + end + + is_scalable: BOOLEAN + -- Is this figure group scalable? + local + l_area: like area + i, nb: INTEGER + do + if is_grouped then + Result := True + l_area := area + from + i := 0 + nb := count - 1 + until + i > nb or not Result + loop + Result := l_area.item (i).is_scalable + i := i + 1 + end + else + Result := True + end + end + + is_transformable: BOOLEAN + -- Is this figure group transformable? + local + l_area: like area + i, nb: INTEGER + do + if is_grouped then + Result := True + l_area := area + from + i := 0 + nb := count - 1 + until + i > nb or not Result + loop + Result := l_area.item (i).is_transformable + i := i + 1 + end + else + Result := True + end + end + + is_grouped: BOOLEAN + -- Is grouped? + + has (v: like item): BOOLEAN + -- Does current include `v'? + -- (based on v.id) + do + if v /= Void then + Result := lookup_table.has (v.id) + end + end + + has_deep (figure: EV_MODEL): BOOLEAN + -- Does any item contains `figure'? + local + grp: detachable EV_MODEL_GROUP + do + from + start + until + after or Result + loop + grp ?= item + if grp = Void then + Result := figure = item + elseif grp = figure then + Result := True + else + Result := grp.has_deep (figure) + end + forth + end + end + + invalid_rectangle: detachable EV_RECTANGLE + -- Rectangle that needs erasing. + -- `Void' if no change is made. + local + r: detachable EV_RECTANGLE + l_area: like area + i, nb: INTEGER + do + if not valid then + from + l_area := area + i := 0 + nb := count - 1 + until + i > nb + loop + r := l_area [i].invalid_rectangle + if r /= Void and then r.has_area and then l_area [i].is_show_requested then + if Result = Void then + if internal_invalid_rectangle = Void then + create internal_invalid_rectangle + end + Result := internal_invalid_rectangle + Result.copy (r) + else + Result.merge (r) + end + end + i := i + 1 + end + end + end + + update_rectangle: detachable EV_RECTANGLE + -- Rectangle that needs redrawing. + -- `Void' if no change is made. + local + r: detachable EV_RECTANGLE + l_area: like area + i, nb: INTEGER + do + if not valid and then is_show_requested and then is_grouped then + from + l_area := area + i := 0 + nb := count - 1 + until + i > nb + loop + r := l_area [i].update_rectangle + if r /= Void then + if Result = Void then + if last_update_rectangle = Void then + -- Reuse `local_update_rectangle' + create last_update_rectangle + end + Result := last_update_rectangle + Result.copy (r) + else + Result.merge (r) + end + end + i := i + 1 + end + end + end + +feature -- Visitor + + project (a_projector: EV_MODEL_DRAWING_ROUTINES) + -- + do + across Current as ic_models loop + if ic_models.item.is_show_requested then + ic_models.item.project (a_projector) + end + end + end + +feature -- Element change + + set_x (a_x: INTEGER) + -- Set `x' to `an_x'. + local + a_delta_x: INTEGER + do + a_delta_x := a_x - x + if a_delta_x /= 0 then + projection_matrix.translate (a_delta_x, 0) + recursive_transform (projection_matrix) + if is_in_group and then attached group as l_group and then l_group.is_center_valid then + l_group.center_invalidate + end + end + center.set_x (a_x) + is_center_valid := True + end + + set_y (a_y: INTEGER) + -- Set `y' to `an_y'. + local + a_delta_y: INTEGER + do + a_delta_y := a_y - y + if a_delta_y /= 0 then + projection_matrix.translate (0, a_delta_y) + recursive_transform (projection_matrix) + if is_in_group and then attached group as l_group and then l_group.is_center_valid then + l_group.center_invalidate + end + end + center.set_y (a_y) + is_center_valid := True + end + + set_x_y (a_x, a_y: INTEGER) + -- Set `x' to `an_x'. + local + a_delta_x, a_delta_y: INTEGER + do + a_delta_x := a_x - x + a_delta_y := a_y - y + if a_delta_x /= 0 or a_delta_y /= 0 then + projection_matrix.translate (a_delta_x, a_delta_y) + recursive_transform (projection_matrix) + if is_in_group and then attached group as l_group and then l_group.is_center_valid then + l_group.center_invalidate + end + end + center.set (a_x, a_y) + is_center_valid := True + end + + set_point_position (a_x, a_y: INTEGER) + -- Set position of `point' to (`a_x', `a_y'). + local + a_delta_x, a_delta_y: DOUBLE + do + a_delta_x := a_x - point_array [0].x_precise + a_delta_y := a_y - point_array [0].y_precise + if a_delta_x /= 0 or a_delta_y /= 0 then + projection_matrix.translate (a_delta_x, a_delta_y) + recursive_transform (projection_matrix) + if is_center_valid then + center_invalidate + end + end + end + + ungroup + -- Ungroup all `figures'. + require + is_grouped: is_grouped + not_is_in_group: not is_in_group + do + from + start + until + after + loop + item.set_group (Void) + forth + end + is_grouped := False + current_angle := 0 + center_invalidate + ensure + is_ungrouped: not is_grouped + none_is_in_a_group: not there_exists (agent {EV_MODEL}.is_in_group) + center_is_invalid: not is_center_valid + end + + regroup + -- Group the `figures' in the group. + require + not_is_grouped: not is_grouped + not_is_in_group: not is_in_group + do + from + start + until + after + loop + item.set_group (Current) + forth + end + is_grouped := True + center_invalidate + ensure + is_grouped: is_grouped + all_grouped: for_all (agent {EV_MODEL}.is_in_group) + center_is_invalid: not is_center_valid + end + +-- jjj send_backward (a_figure: EV_MODEL) + send_backward (a_figure: like item) -- so I could redefine `item' in my worlds + -- Send `a_figure' one layer backwards. + require + a_figure_in_figures: has (a_figure) + do + if first /= a_figure then + start + search (a_figure) + swap (index - 1) + end + full_redraw + ensure + a_figure_in_group: a_figure.group = Current + a_figure_in_current: has (a_figure) + end + +-- jjj bring_forward (a_figure: EV_MODEL) + bring_forward (a_figure: like item) -- so I could redefine `item' in my worlds + -- Bring `a_figure' one layer forwards. + require + a_figure_in_figures: has (a_figure) + do + if last /= a_figure then + start + search (a_figure) + swap (index + 1) + end + full_redraw + ensure + a_figure_in_group: a_figure.group = Current + a_figure_in_current: has (a_figure) + end + +-- jjj send_to_back (a_figure: EV_MODEL) + send_to_back (a_figure: like item) + -- Send `a_figure' to the bottom most layer. + -- I redefined this because `item' gets redefined in + -- my classes. + require + a_figure_in_figures: has (a_figure) + do + if first /= a_figure then + start + search (a_figure) + remove + put_front (a_figure) + end + full_redraw + ensure + is_at_front: first = a_figure + a_figure_in_group: a_figure.group = Current + a_figure_in_current: has (a_figure) + end + +-- jjj bring_to_front (a_figure: EV_MODEL) + bring_to_front (a_figure: like item) + -- Bring `a_figure' to the top most layer + -- I redefined this because `item' gets redefined in + -- my classes. + require + a_figure_in_figures: has (a_figure) + do + if last /= a_figure then + start + search (a_figure) + remove + extend (a_figure) + end + full_redraw + ensure + is_last: last = a_figure + a_figure_in_group: a_figure.group = Current + a_figure_in_current: has (a_figure) + end + +-- jjj added feature + send_to_index (fig: like item; a_index: INTEGER) + -- Feature added to this override class that places `a_figure' + -- at the position indicated by `a_index' + require + a_figure_in_figures: has (fig) + do + if a_index <= 1 then + send_to_back (fig) + elseif a_index >= count then + bring_to_front (fig) + else + start + search (fig) + remove + -- The following code was copied from `extend'; instead of + -- callin Precursor {ARRAYED_LIST} we use `put_i_th' + lookup_table.put (fig, fig.id) +-- Precursor {ARRAYED_LIST} (fig) + go_i_th (a_index) + put_left (fig) + fig.set_group (Current) + center_invalidate + invalidate + full_redraw + end + end + + rotate (an_angle: DOUBLE) + -- Rotate around the center for `an_angle'. + do + current_angle := current_angle + an_angle + Precursor {EV_MODEL} (an_angle) + ensure then + angle_equal_an_angle: angle = old angle + an_angle + end + +feature -- List change + + insert (fig: like item; i: INTEGER) + -- Add `fig' to the group. + do + lookup_table.put (fig, fig.id) + Precursor {ARRAYED_LIST} (fig, i) + fig.set_group (Current) + center_invalidate + invalidate + full_redraw + ensure then + fig_in_lookup_table: fig /= Void implies lookup_table.has (fig.id) + fig_in_group: fig /= Void implies fig.group = Current + end + + extend (fig: like item) + -- Add `fig' to the group. + do + lookup_table.put (fig, fig.id) + Precursor {ARRAYED_LIST} (fig) + fig.set_group (Current) + center_invalidate + invalidate + full_redraw + ensure then + fig_in_lookup_table: fig /= Void implies lookup_table.has (fig.id) + fig_in_group: fig /= Void implies fig.group = Current + end + + force (fig: like item) + -- Add `fig' to the group. + do + lookup_table.put (fig, fig.id) + Precursor {ARRAYED_LIST} (fig) + fig.set_group (Current) + center_invalidate + invalidate + full_redraw + ensure then + fig_in_lookup_table: fig /= Void implies lookup_table.has (fig.id) + fig_in_group: fig /= Void implies fig.group = Current + end + + replace (fig: like item) + -- Replace current item by `fig'. + do + item.unreference_group + lookup_table.remove (item.id) + Precursor {ARRAYED_LIST} (fig) + fig.set_group (Current) + lookup_table.put (fig, fig.id) + center_invalidate + invalidate + full_redraw + ensure then + fig_in_lookup_table: fig /= Void implies lookup_table.has (fig.id) + item_not_in_lookup_table: not lookup_table.has (old item.id) + fig_in_group: fig /= Void implies fig.group = Current + item_not_in_group: not (old item).is_in_group + end + + remove + -- Remove `item' from figure. + do + item.unreference_group + lookup_table.remove (item.id) + Precursor {ARRAYED_LIST} + center_invalidate + invalidate + full_redraw + ensure then + item_not_in_lookup_table: not lookup_table.has (old item.id) + item_not_in_group: not (old item).is_in_group + end + + prune_all (fig: like item) + -- Remove `fig' from the group. + do + if has (fig) then + fig.unreference_group + lookup_table.remove (fig.id) + end + Precursor {ARRAYED_LIST} (fig) + center_invalidate + invalidate + full_redraw + ensure then + item_not_in_lookup_table: fig /= Void implies not lookup_table.has (fig.id) + end + + merge_left (other: ARRAYED_LIST [EV_MODEL]) + -- Merge `other' into group before cursor. + -- `other' will be empty afterwards. + do + insert_list_to_table (other) + change_group (other) + Precursor {ARRAYED_LIST} (other) + center_invalidate + invalidate + full_redraw + end + + merge_right (other: ARRAYED_LIST [EV_MODEL]) + -- Merge `other' into group after cursor. + -- `other' will be empty afterwards. + do + insert_list_to_table (other) + change_group (other) + Precursor {ARRAYED_LIST} (other) + center_invalidate + invalidate + full_redraw + end + + wipe_out + -- Remove all items. + do + from start until after loop + if item.is_in_group then + item.unreference_group + end + forth + end + Precursor {ARRAYED_LIST} + lookup_table.wipe_out + center_invalidate + invalidate + full_redraw + end + + append (s: SEQUENCE [EV_MODEL]) +-- append (s: SEQUENCE [like item]) + -- Append a copy of `s'. + local + l: like s + l_cursor: CURSOR + do + if s = Current then + l := s.twin + else + l := s + end + from + resize (count + s.count) + l_cursor := cursor + l.start + until + l.exhausted + loop + extend (l.item) + lookup_table.put (l.item, l.item.id) + l.forth + end + go_to (l_cursor) + center_invalidate + invalidate + full_redraw + end + +-- jjj make_from_array (a: ARRAY [EV_MODEL]) + make_from_array (a: ARRAY [like item]) + -- Create list from array `a'. + local + i: INTEGER + do + wipe_out + resize (a.count) + from + i := a.lower + until + i > a.upper + loop + if a.item (i) /= Void then + extend (a.item (i)) + end + i := i + 1 + end + center_invalidate + invalidate + full_redraw + end + + swap (i: INTEGER) + -- Exchange item at `i'-th position with item + -- at cursor position. + local + old_item: like item + do + old_item := item + Precursor {ARRAYED_LIST} (i) + lookup_table.put (old_item, old_item.id) + old_item.set_group (Current) + ensure then + item_in_lookup_table: lookup_table.has (old item.id) + i_in_lookup_table: lookup_table.has (i_th (i).id) + item_in_group: (old item).group = Current + i_th_in_group: i_th (i).group = Current + end + +feature -- Status settings + + invalidate + -- Some property of `Current' has changed. + local + l_area: like area + i, nb: INTEGER + do + if valid then + Precursor {EV_MODEL} + from + l_area := area + i := 0 + nb := count - 1 + until + i > nb + loop + if l_area [i].valid then + l_area [i].invalidate + end + i := i + 1 + end + else + Precursor {EV_MODEL} + end + end + + validate + -- Validate `Current'. + local + l_area: like area + i, nb: INTEGER + l_figure: EV_MODEL + l_rect: detachable EV_RECTANGLE + do + if not valid then + if count > 0 then + create l_rect + l_area := area + from + i := 0 + nb := count - 1 + until + i > nb + loop + l_figure := l_area.item (i) + if not l_figure.valid then + l_figure.validate + end + i := i + 1 + end + if world = Current then + -- We do not want the origin of the world to be included in the update. + l_rect := calculated_bounding_box + if l_rect = Void then + create l_rect + end + else + update_rectangle_to_bounding_box (l_rect) + end + if internal_invalid_rectangle /= Void then + internal_invalid_rectangle.copy (l_rect) + else + internal_invalid_rectangle := l_rect + end + elseif internal_invalid_rectangle /= Void then + -- Reset any previous invalid rectangle. + internal_invalid_rectangle.move_and_resize (0, 0, 0, 0) + end + valid := True + end + end + +feature -- Events + + position_on_figure (a_x, a_y: INTEGER): BOOLEAN + -- Is the point on (`a_x', `a_y') on this figure? + --| Used to generate events. + -- Always returns `False', but descendants can override + -- it to improve efficiency. + do + Result := False + end + + bounding_box: EV_RECTANGLE + -- Smallest orthogonal rectangular area `Current' fits in. + local + l_result: detachable EV_RECTANGLE + do + if attached internal_bounding_box as l_internal_bounding_box and then l_internal_bounding_box.has_area then + Result := l_internal_bounding_box.twin + else + l_result := calculated_bounding_box + if world = Current then + -- If `Current' is the world then we need then we need the origin to be included so that its size is remembered. + create Result.make (point_x, point_y, 0, 0) + if l_result /= Void then + Result.merge (l_result) + end + else + if l_result /= Void then + Result := l_result + else + create Result + end + end + + if attached internal_bounding_box as l_internal_bounding_box then + l_internal_bounding_box.copy (Result) + else + internal_bounding_box := Result.twin + end + end + end + +feature {EV_MODEL_GROUP} -- Figure group + + recursive_transform (a_transformation: EV_MODEL_TRANSFORMATION) + -- Same as transform but without precondition + -- is_transformable and without invalidating + -- groups center + local + l_area: like area + i, nb: INTEGER + do + a_transformation.project (point_array.item (0)) + if is_grouped then + from + i := 0 + nb := count - 1 + l_area := area + until + i > nb + loop + l_area.item (i).recursive_transform (a_transformation) + i := i + 1 + end + end + invalidate + is_center_valid := False + end + +feature {NONE} -- Implementation + + calculated_bounding_box: detachable EV_RECTANGLE + -- Smallest orthogonal rectangular area `Current' fits in. + do + if is_grouped then + create Result + update_rectangle_to_calculated_bounding_box (Result) + end + end + + update_rectangle_to_calculated_bounding_box (a_rectangle: EV_RECTANGLE) + -- Smallest orthogonal rectangular area `Current' fits in. + local + l_area: like area + i, nb: INTEGER + l_bbox: like internal_bounding_box + l_initial: BOOLEAN + do + if is_grouped then + from + create l_bbox + l_initial := True + l_area := area + i := 0 + nb := count - 1 + until + i > nb + loop + if l_area.item (i).is_show_requested then + l_area [i].update_rectangle_to_bounding_box (l_bbox) + if l_bbox.width > 0 and then l_bbox.height > 0 then + if l_initial then + a_rectangle.copy (l_bbox) + l_initial := False + else + a_rectangle.merge (l_bbox) + end + end + end + i := i + 1 + end + end + end + + current_angle: DOUBLE + -- The rotating angle. + + set_center + -- Set x and y such that they are in the + -- center of the group. + local + l_bbox: like bounding_box + do + if is_grouped then + l_bbox := bounding_box + center.set_precise (l_bbox.left + l_bbox.width /2, l_bbox.top + l_bbox.height / 2) + else + center.set (0, 0) + end + is_center_valid := True + end + + initiale_size: INTEGER = 5 + -- Initialize size of `Current'. + + change_group (other: ARRAYED_LIST [EV_MODEL]) + -- Change group of all figures in `other' to Current. + -- Used by `merge_left' and `merge_right'. + local + n: INTEGER + do + from + n := 1 + until + n > other.count + loop + other.i_th (n).set_group (Current) + n := n + 1 + end + end + + full_redraw + -- Request `invalid_rectangle' to be ignored. + local + w: detachable EV_MODEL_WORLD + do + w := world + if w /= Void then + w.full_redraw + end + end + + lookup_table: HASH_TABLE [EV_MODEL, INTEGER] + -- Lookup table to search faster. + + insert_list_to_table (list: ARRAYED_LIST [EV_MODEL]) + -- Insert list element to lookup_table. + do + from + list.start + until + list.after + loop + lookup_table.put (list.item, list.item.id) + list.forth + end + end + +invariant + + is_grouped_implies_all_grouped: is_grouped implies for_all (agent {EV_MODEL}.is_in_group) + angle_equal_current_angle: angle = current_angle + not_is_grouped_implies_angel_equals_zero: not is_grouped implies (angle = 0) + +note + copyright: "Copyright (c) 1984-2006, Eiffel Software and others" + license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)" + source: "[ + Eiffel Software + 356 Storke Road, Goleta, CA 93117 USA + Telephone 805-685-1006, Fax 805-685-6869 + Website http://www.eiffel.com + Customer support http://support.eiffel.com + ]" + + + + +end -- class EV_MODEL_GROUP + + + + + + diff --git a/jj_vitp/jj_override/ev_model_picture.e b/jj_vitp/jj_override/ev_model_picture.e new file mode 100644 index 0000000..71d8c6d --- /dev/null +++ b/jj_vitp/jj_override/ev_model_picture.e @@ -0,0 +1,280 @@ +note + description: "[ + Pixmaps drawn on `point'. + + p1 --------- p2 + |............ + |............ + |............ + p3 + + point.x = p1.x and point.y = p1.y + + ]" + legal: "See notice at end of class." + status: "See notice at end of class." + keywords: "figure, picture, pixmap" + date: "$Date: 2013-04-25 18:08:32 -0400 (Thu, 25 Apr 2013) $" + revision: "$Revision: 33 $" + +class + EV_MODEL_PICTURE + +inherit + EV_MODEL_ATOMIC + redefine + default_create, + recursive_transform, + default_line_width, + border_width + end + + EV_MODEL_SINGLE_POINTED + undefine + default_create, + point_count + end + + EV_SHARED_SCALE_FACTORY + undefine + default_create + end + +create + default_create, + make_with_point, + make_with_pixmap, + make_with_identified_pixmap, + make_with_position + +feature {NONE} -- Initialization + + default_create + -- Create in (0, 0) + do + Precursor {EV_MODEL_ATOMIC} + pixmap_factory.register_pixmap (default_pixmap) + id_pixmap := default_pixmap + scaled_pixmap := pixmap + is_default_pixmap_used := True + create point_array.make_empty (3) + point_array.extend (create {EV_COORDINATE}.make (0, 0)) + point_array.extend (create {EV_COORDINATE}.make (0, 0)) + point_array.extend (create {EV_COORDINATE}.make (0, 0)) + end + + make_with_pixmap (a_pixmap: EV_PIXMAP) + -- Create with `a_pixmap'. + require + a_pixmap_not_void: a_pixmap /= Void + do + default_create + set_pixmap (a_pixmap) + end + + make_with_identified_pixmap (an_id_pixmap: EV_IDENTIFIED_PIXMAP) + -- Create with `an_id_pixmap'. + require + an_id_pixmap_not_Void: an_id_pixmap /= Void + do + default_create + set_identified_pixmap (an_id_pixmap) + end + +feature -- Access + + pixmap: EV_PIXMAP + -- Pixmap that is displayed. + do + Result := id_pixmap.pixmap + end + + angle: DOUBLE = 0.0 + -- Since not rotatable + + point_x: INTEGER + -- x position of `point'. + do + Result := point_array.item (0).x + end + + point_y: INTEGER + -- y position of `point'. + do + Result := point_array.item (0).y + end + +feature -- Status report + + width: INTEGER + -- Width of pixmap. + do + Result := as_integer (point_array.item (1).x_precise - point_array.item (0).x_precise) + end + + height: INTEGER + -- Height of Pixmap. + do + Result := as_integer (point_array.item (2).y_precise - point_array.item (0).y_precise) + end + + is_default_pixmap_used: BOOLEAN + -- Is `Current' using a default pixmap? + +-- jjj is_rotatable: BOOLEAN = False + is_rotatable: BOOLEAN = True + -- Is rotatable? (No) + + is_scalable: BOOLEAN = True + -- Is scalable? (Yes) + +-- jjj is_transformable: BOOLEAN = False + is_transformable: BOOLEAN = True + -- Is transformable? (No) + +feature -- Visitor + + project (a_projector: EV_MODEL_DRAWING_ROUTINES) + -- + do + a_projector.draw_figure_picture (Current) + end + +feature -- Status setting + + set_pixmap (a_pixmap: EV_PIXMAP) + -- Set `pixmap' to `a_pixmap'. + require + a_pixmap_not_void: a_pixmap /= Void + do + set_identified_pixmap (pixmap_factory.registered_pixmap (a_pixmap)) + ensure + pixmap_assigned: pixmap = a_pixmap + end + + set_identified_pixmap (an_id_pixmap: EV_IDENTIFIED_PIXMAP) + -- Set `id_pixmap' to `an_id_pixmap' and initialize `scaled_pixmap'. + require + an_id_pixmap_not_Void: an_id_pixmap /= Void + do + id_pixmap := an_id_pixmap + pixmap_factory.register_pixmap (id_pixmap) + scaled_pixmap := pixmap + is_default_pixmap_used := False + point_array.item (1).set_x_precise (point_array.item (0).x_precise + pixmap.width) + point_array.item (2).set_y_precise (point_array.item (0).y_precise + pixmap.height) + invalidate + center_invalidate + ensure + set: id_pixmap = an_id_pixmap + end + + set_point_position (ax, ay: INTEGER) + -- Set position of `point' to `a_point'. + local + a_delta_x, a_delta_y: DOUBLE + l_point_array: like point_array + p0, p1, p2: EV_COORDINATE + do + l_point_array := point_array + p0 := l_point_array.item (0) + p1 := l_point_array.item (1) + p2 := l_point_array.item (2) + + a_delta_x := ax - p0.x_precise + a_delta_y := ay - p0.y_precise + p0.set_precise (ax, ay) + p1.set_precise (p1.x_precise + a_delta_x, p1.y_precise + a_delta_y) + p2.set_precise (p2.x_precise + a_delta_x, p2.y_precise + a_delta_y) + invalidate + center_invalidate + end + +feature -- Events + + position_on_figure (a_x, a_y: INTEGER): BOOLEAN + -- Is (`a_x', `a_y') on this figure? + local + ax, ay: DOUBLE + p0: EV_COORDINATE + l_point_array: like point_array + do + l_point_array := point_array + p0 := l_point_array.item (0) + ax := p0.x_precise + ay := p0.y_precise + Result := point_on_rectangle (a_x, a_y, ax, ay, l_point_array.item (1).x_precise, l_point_array.item (2).y_precise) + end + +feature {EV_MODEL_GROUP} + + recursive_transform (a_transformation: EV_MODEL_TRANSFORMATION) + -- Same as transform but without precondition + -- is_transformable and without invalidating + -- groups center + do + Precursor {EV_MODEL_ATOMIC} (a_transformation) + update_scaled_pixmap + end + +feature {EV_MODEL_DRAWER} + + scaled_pixmap: like pixmap + -- Scaled version of `pixmap'. + +feature {NONE} -- Implementation + + id_pixmap: EV_IDENTIFIED_PIXMAP + + default_pixmap: EV_IDENTIFIED_PIXMAP + -- Pixmap set by `default_create'. + once + Result := pixmap_factory.registered_pixmap (create {EV_PIXMAP}) + pixmap_factory.register_pixmap (Result) + end + + set_center + -- Set the center. + local + l_point_array: like point_array + p0: EV_COORDINATE + do + l_point_array := point_array + p0 := l_point_array.item (0) + center.set_precise ((p0.x_precise + l_point_array.item (1).x_precise) / 2, (p0.y_precise + l_point_array.item (2).y_precise) / 2) + is_center_valid := True + end + + update_scaled_pixmap + -- Scale `pixmap' store result in `scaled_pixmap'. + do + if scaled_pixmap.width /= width or else scaled_pixmap.height /= height then + scaled_pixmap := pixmap_factory.scaled_pixmap (id_pixmap, width.max (1), height.max (1)) + end + end + + default_line_width: INTEGER = 0 + -- + border_width: INTEGER = 0 + -- + +invariant + pixmap_exists: pixmap /= Void + +note + copyright: "Copyright (c) 1984-2006, Eiffel Software and others" + license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)" + source: "[ + Eiffel Software + 356 Storke Road, Goleta, CA 93117 USA + Telephone 805-685-1006, Fax 805-685-6869 + Website http://www.eiffel.com + Customer support http://support.eiffel.com + ]" + + + + +end -- class EV_MODEL_PICTURE + + diff --git a/jj_vitp/jj_override/ev_model_text.e b/jj_vitp/jj_override/ev_model_text.e new file mode 100644 index 0000000..2e76062 --- /dev/null +++ b/jj_vitp/jj_override/ev_model_text.e @@ -0,0 +1,374 @@ +note + description: "[ + + `text's in a `font' displayed on p0 == point. + + p0---------------------------p2 + |fooooooooooooooooooooooooooo + | p3 + |bar center + |foobar + p1 + + p3.y - p0.y is the should height of a character to match scale + p3.x - p0.x is the should width of a character to match scale + + ]" + legal: "See notice at end of class." + status: "See notice at end of class." + keywords: "figure, text, string" + date: "$Date: 2013-04-25 18:08:32 -0400 (Thu, 25 Apr 2013) $" + revision: "$Revision: 33 $" + +class + EV_MODEL_TEXT + +inherit + EV_MODEL_ATOMIC + undefine + is_equal + redefine + default_create, + recursive_transform, + default_line_width, + border_width + end + + EV_FONT_CONSTANTS + export + {NONE} all + {ANY} valid_family, valid_weight, valid_shape + undefine + default_create, + out, + is_equal + end + + EV_MODEL_SINGLE_POINTED + undefine + default_create, + point_count, + is_equal + end + + COMPARABLE + undefine + default_create + end + + EV_SHARED_SCALE_FACTORY + undefine + default_create, + is_equal + end + +create + default_create, + make_with_text, + make_with_position + +feature {NONE} -- Initialization + + default_create + -- Create in (0, 0) + do + Precursor {EV_MODEL_ATOMIC} + create point_array.make_empty (4) + point_array.extend (create {EV_COORDINATE}) + point_array.extend (create {EV_COORDINATE}) + point_array.extend (create {EV_COORDINATE}) + create {STRING_32} text.make_empty + id_font := default_font + scaled_font := font + point_array.extend (create {EV_COORDINATE}.make (font.width, font.height)) + is_default_font_used := True + is_center_valid := True + ensure then + center_is_valid: is_center_valid + end + + make_with_text (a_text: READABLE_STRING_GENERAL) + -- Create with `a_text'. + require + a_text_not_void: a_text /= Void + do + default_create + set_text (a_text) + set_center + ensure + center_is_valid: is_center_valid + end + +feature -- Access + + text: STRING_32 + -- Text that is displayed. + + font: EV_FONT + -- Typeface `text' is displayed in. + do + Result := id_font.font + end + + angle: DOUBLE = 0.0 + -- Since not rotatable. + + is_scalable: BOOLEAN = True + -- Is scalable? (Yes) + +--jjj is_rotatable: BOOLEAN = False + is_rotatable: BOOLEAN = True + -- Not yet. + +-- jjj is_transformable: BOOLEAN = False + is_transformable: BOOLEAN = True + -- No. + + point_x: INTEGER + -- x position of `point'. + do + Result := point_array.item (0).x + end + + point_y: INTEGER + -- y position of `point'. + do + Result := point_array.item (0).y + end + +feature -- Status report + + width: INTEGER + -- Horizontal dimension. + local + l_point_array: like point_array + do + l_point_array := point_array + Result := as_integer (l_point_array.item (2).x_precise - l_point_array.item (0).x_precise) + end + + height: INTEGER + -- Vertical dimension. + local + l_point_array: like point_array + do + l_point_array := point_array + Result := as_integer (l_point_array.item (1).y_precise - l_point_array.item (0).y_precise) + end + + is_default_font_used: BOOLEAN + -- Is `Current' using a default font? + + is_less alias "<" (other: like Current): BOOLEAN + -- Is current object less than `other'? + do + Result := text < other.text + end + +feature -- Visitor + + project (a_projector: EV_MODEL_DRAWING_ROUTINES) + -- + do + a_projector.draw_figure_text (Current) + end + +feature -- Status setting + + set_point_position (ax, ay: INTEGER) + -- Set position of `point' to (`ax', `ay'). + local + a_delta_x, a_delta_y: DOUBLE + l_point_array: like point_array + p0, p1, p2, p3: EV_COORDINATE + do + l_point_array := point_array + p0 := l_point_array.item (0) + p1 := l_point_array.item (1) + p2 := l_point_array.item (2) + p3 := l_point_array.item (3) + + a_delta_x := ax - p0.x_precise + a_delta_y := ay - p0.y_precise + + p0.set (ax, ay) + p1.set_precise (p1.x_precise + a_delta_x, p1.y_precise + a_delta_y) + p2.set_precise (p2.x_precise + a_delta_x, p2.y_precise + a_delta_y) + p3.set_precise (p3.x_precise + a_delta_x, p3.y_precise + a_delta_y) + invalidate + center_invalidate + end + + set_font (a_font: like font) + -- Assign `a_font' to `font'. + require + a_font_not_void: a_font /= Void + do + set_identified_font (font_factory.registered_font (a_font)) + ensure + font_assigned: font = a_font + end + + set_identified_font (an_id_font: EV_IDENTIFIED_FONT) + -- Set `id_font' to `an_id_font' initialize `scaled_font'. + require + an_id_font_not_Void: an_id_font /= Void + local + l_point_array: like point_array + p0: EV_COORDINATE + should_height, real_height, scale_factor: DOUBLE + do + real_height := id_font.font.height + + id_font := an_id_font + font_factory.register_font (id_font) + + l_point_array := point_array + should_height := l_point_array.item (3).y_precise - l_point_array.item (0).y_precise + + scale_factor := should_height / real_height + + scaled_font := font_factory.scaled_font (id_font, as_integer (id_font.font.height * scale_factor).max (1)) + + p0 := l_point_array.item (0) + l_point_array.item (3).set_precise (p0.x_precise + scaled_font.width, p0.y_precise + scaled_font.height) + + update_dimensions + invalidate + center_invalidate + ensure + set: id_font = an_id_font + end + + set_text (a_text: READABLE_STRING_GENERAL) + -- Assign `a_text' to `text'. + require + a_text_not_void: a_text /= Void + do + text := a_text.as_string_32 + update_dimensions + invalidate + ensure + text_assigned: text.same_string_general (a_text) + end + +feature -- Events + + position_on_figure (a_x, a_y: INTEGER): BOOLEAN + -- Is the point on (`a_x', `a_y') on this figure? + --| Used to generate events. + local + l_point_array: like point_array + p0: EV_COORDINATE + do + l_point_array := point_array + p0 := l_point_array.item (0) + Result := point_on_rectangle (a_x, a_y, p0.x_precise, p0.y_precise, l_point_array.item (2).x_precise, l_point_array.item (1).y_precise) + end + +feature {EV_MODEL_GROUP} -- Figure group + + recursive_transform (a_transformation: EV_MODEL_TRANSFORMATION) + -- Same as transform but without precondition + -- is_transformable and without invalidating + -- groups center. + local + l_font: like font + l_point_array: like point_array + should_height: INTEGER + do + Precursor {EV_MODEL_ATOMIC} (a_transformation) + + l_font := scaled_font + l_point_array := point_array + should_height := as_integer (l_point_array.item (3).y_precise - l_point_array.item (0).y_precise).max (1) + if should_height /= l_font.height then + + scaled_font := font_factory.scaled_font (id_font, should_height) + + if should_height > 1 then + update_dimensions + end + end + end + +feature {EV_MODEL_DRAWER} + + scaled_font: like font + + left_offset: INTEGER + +feature {NONE} -- Implementation + + id_font: EV_IDENTIFIED_FONT + + update_dimensions + -- Reassign `width' and `height'. + local + t: TUPLE [width: INTEGER; height: INTEGER; left_offset: INTEGER; right_offset: INTEGER] + l_point_array: like point_array + p0: EV_COORDINATE + do + t := scaled_font.string_size (text) + + left_offset := t.left_offset + + l_point_array := point_array + p0 := l_point_array.item (0) + + l_point_array.item (1).set_y_precise (p0.y_precise + t.height) + l_point_array.item (2).set_x_precise (p0.x_precise + t.width - left_offset + t.right_offset) + center_invalidate + end + + default_font: EV_IDENTIFIED_FONT + -- Font set by `default_create'. + local + l_font: EV_FONT + once + create l_font + Result := font_factory.registered_font (l_font) + font_factory.register_font (Result) + end + + set_center + -- Set the position to the center + local + l_point_array: like point_array + p0, p1, p2: EV_COORDINATE + do + l_point_array := point_array + p0 := l_point_array.item (0) + p1 := l_point_array.item (1) + p2 := l_point_array.item (2) + + center.set_precise ((p1.x_precise + p2.x_precise) / 2, (p1.y_precise + p2.y_precise) / 2) + is_center_valid := True + end + + default_line_width: INTEGER = 0 + -- + border_width: INTEGER = 0 + -- + +invariant + text_exists: text /= Void + font_exists: font /= Void + +note + copyright: "Copyright (c) 1984-2006, Eiffel Software and others" + license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)" + source: "[ + Eiffel Software + 356 Storke Road, Goleta, CA 93117 USA + Telephone 805-685-1006, Fax 805-685-6869 + Website http://www.eiffel.com + Customer support http://support.eiffel.com + ]" + + + + +end -- class EV_MODEL_TEXT + + diff --git a/jj_vitp/jj_override/ev_model_widget_projector.e b/jj_vitp/jj_override/ev_model_widget_projector.e new file mode 100644 index 0000000..b5371fb --- /dev/null +++ b/jj_vitp/jj_override/ev_model_widget_projector.e @@ -0,0 +1,707 @@ +note + description: + "Projectors for widgets." + legal: "See notice at end of class." + status: "See notice at end of class." + keywords: "projector, events" + date: "$Date: 2023-11-29 10:19:43 +0100 (Wed, 29 Nov 2023) $" + revision: "$Revision: 107425 $" + +deferred class + EV_MODEL_WIDGET_PROJECTOR + +inherit + EV_MODEL_PROJECTOR + + EV_MODEL_DRAWER + undefine + default_colors + end + + EV_MODEL_PROJECTION_ROUTINES + + EV_SHARED_APPLICATION + +feature {NONE} -- Initialization + + make_with_drawable_widget (a_world: like world; a_drawable: EV_DRAWABLE; a_widget: like widget) + -- Create with `a_world' and `a_drawable' (= `a_widget'). + require + a_world_not_void: a_world /= Void + a_drawable_not_void: a_drawable /= Void + a_widget_not_void: a_widget /= Void + do + make_with_drawable (a_drawable) + -- This is only for letting users who have defined their own figure to still be + -- able to use the `register_figure'. + create draw_routines.make_filled (Void, 0, 20) + make_with_world (a_world) + widget := a_widget + project_agent := agent project + area_x := 0 + area_y := 0 + + widget.pointer_motion_actions.extend (agent mouse_move) + widget.pointer_button_press_actions.extend (agent button_press) + widget.pointer_double_press_actions.extend (agent double_press) + widget.pointer_button_release_actions.extend (agent button_release) + widget.pointer_leave_actions.extend (agent pointer_leave) + widget.pick_actions.extend (agent on_pick_request) + widget.set_pebble_function (agent on_pebble_request) + widget.set_actual_drop_target_agent (agent on_drop_target_request) + end + + make_with_drawable_widget_and_buffer ( + a_world: like world; + a_drawable: EV_DRAWABLE; + a_buffer: EV_PIXMAP; + a_widget: like widget) + -- Create with `a_world', `a_drawable' (= `a_widget') and `a_buffer'. + require + a_world_not_void: a_world /= Void + a_drawable_not_void: a_drawable /= Void + a_buffer_not_void: a_buffer /= Void + a_widget_not_void: a_widget /= Void + do + make_with_drawable_widget (a_world, a_buffer, a_widget) + area := a_drawable + end + + project_agent: detachable PROCEDURE note option: stable attribute end + -- Agent used for projection. + +feature -- Access + + widget: EV_WIDGET + -- `device' if conforms to EV_WIDGET. + -- `Void' otherwise. + + area: detachable EV_DRAWABLE + -- Area associated with `widget'. + -- `Void' if no buffer is used. + + area_x, area_y: INTEGER + -- Coordinates of top-left corner of displayed part of `drawable'. + -- (0, 0) when no buffer is used. + +feature -- Status report + + buffer_used: BOOLEAN + -- Is `drawable' only a buffer area for `area'? + do + Result := area /= Void + end + + is_figure_selected: BOOLEAN + -- Was button pointer pressed on a figure? + +feature -- Element change + + change_area_position (a_x, a_y: INTEGER) + -- `area' has moved to (`a_x', `a_y') of `drawable'. + local + u: EV_RECTANGLE + l_area: like area + do + if buffer_used then + l_area := area + check l_area /= Void then end + area_x := a_x + area_y := a_y + create u.make (0, 0, l_area.width, l_area.height) + update_rectangle (u, 0, 0) + end + end + +feature -- Basic operations + + project + -- Make a standard projection of world on device. + local + a, e, u: detachable EV_RECTANGLE + do + if not is_projecting and then attached world as l_world then + is_projecting := True + + if l_world.is_redraw_needed then + full_project + l_world.full_redraw_performed + else + e := l_world.invalid_rectangle + if e /= Void then + u := l_world.update_rectangle + if u /= Void then + e.merge (u) + end + + a := area_bounding_box + if a /= Void then + -- Optimized projection to only project the viewable projection area. + e := a.intersection (a) + end + if e.has_area then + project_rectangle (e) + end + end + end + is_projecting := False + end + end + + project_rectangle (u: EV_RECTANGLE) + -- Project area under `u'. + local + pixmap: detachable EV_PIXMAP + l_world: like world + do + l_world := world + check l_world /= Void then end + drawable.set_background_color (l_world.background_color) + drawable.set_anti_aliasing (l_world.is_anti_aliasing_enabled) + drawable.clear_rectangle (u.left, u.top, u.width, u.height) + + if l_world.grid_visible then + draw_grid (l_world) + end + + if l_world.is_show_requested then + project_figure_group (l_world, u) + end + if has_mouse then + change_current (figure_on_position (l_world, last_pointer_x, + last_pointer_y)) + end + if l_world.points_visible then + draw_points (l_world) + end + + l_world.validate + + if buffer_used then + -- Flush `drawable' on `area'. + pixmap ?= drawable + if pixmap /= Void and then attached area as l_area then + l_area.draw_sub_pixmap (0, 0, pixmap, u) + end + end + end + + full_project + -- Project entire area. + do + project_rectangle (drawable_bounding_box) + end + + update_rectangle (u: EV_RECTANGLE; a_x, a_y: INTEGER) + -- Flush `u' on `area' at (`a_x', `a_y'). + require + buffer_used: buffer_used + local + pixmap: detachable EV_PIXMAP + do + pixmap ?= drawable + if pixmap /= Void and then attached area as l_area then + u.set_x (u.x + area_x) + u.set_y (u.y + area_y) + l_area.draw_sub_pixmap (a_x, a_y, pixmap, u) + end + end + + update + require + buffer_used: buffer_used + do + update_rectangle (create {EV_RECTANGLE}.make (0, 0, drawable.width, drawable.height), 0, 0) + end + + clear_device + -- Erase entire canvas. + do + drawable.set_background_color (world.background_color) + drawable.clear + end + +feature {NONE} -- Event implementation + + current_figure: detachable EV_MODEL + -- Figure mouse is currently on. + --| To generate leave and enter actions. + + last_pointer_x, last_pointer_y: INTEGER + -- Last mouse coordinates. + --| Used when world changes using `project'. + + has_mouse: BOOLEAN + -- Does canvas have mouse on it? + + figure_on_position (group: EV_MODEL_GROUP; x, y: INTEGER): detachable EV_MODEL + -- Figure mouse-cursor is on. + local + i: INTEGER + found_closed_figure: detachable EV_MODEL_CLOSED + l_model: EV_MODEL + do + if world.capture_figure /= Void then + Result := world.capture_figure + else + from + i := group.count + until + Result /= Void or else i < 1 + loop + l_model := group [i] + if l_model.is_show_requested and l_model.is_sensitive then + if l_model.position_on_figure (x, y) then + Result := l_model + elseif attached {EV_MODEL_GROUP} l_model as grp then + Result := figure_on_position (grp, x, y) + end + if attached {EV_MODEL_CLOSED} Result as closed_figure and then closed_figure.background_color = Void then + -- is a not closed_figure under it? + Result := Void + if found_closed_figure = Void then + -- if not take the first closed_figure found. + found_closed_figure := closed_figure + end + end + end + i := i - 1 + end + if Result = Void and then found_closed_figure /= Void then + Result := found_closed_figure + end + end + end + + button_press (x, y, button: INTEGER; x_tilt, y_tilt, pressure: DOUBLE; screen_x, screen_y: INTEGER) + -- Pointer button down happened. + local + event_fig: detachable EV_MODEL + p: BOOLEAN + w_x, w_y: INTEGER + do + w_x := x + area_x + w_y := y + area_y + from + event_fig := figure_on_position (world, w_x, w_y) + + if event_fig = Void then + event_fig := world + is_figure_selected := False + else + is_figure_selected := True + end + until + event_fig = Void + loop + if event_fig.is_show_requested and event_fig.is_sensitive and attached event_fig.internal_pointer_button_press_actions as l_actions then + l_actions.call ([w_x, w_y, button,x_tilt, y_tilt, pressure, screen_x, screen_y]) + if event_fig.are_events_sent_to_group then + event_fig := event_fig.group + else + event_fig := Void + end + else + event_fig := event_fig.group + end + p := True + end + if p then + project + end + end + + double_press (x, y, button: INTEGER; x_tilt, y_tilt, pressure: DOUBLE; + screen_x, screen_y: INTEGER) + -- Pointer double click happened. + local + event_fig: detachable EV_MODEL + p: BOOLEAN + w_x, w_y: INTEGER + do + w_x := x + area_x + w_y := y + area_y + from + event_fig := figure_on_position (world, w_x, w_y) + if event_fig = Void then + event_fig := world + end + until + event_fig = Void + loop + if event_fig.is_show_requested and event_fig.is_sensitive and attached event_fig.internal_pointer_double_press_actions as l_actions then + l_actions.call ([w_x, w_y, button,x_tilt, y_tilt, pressure, screen_x, screen_y]) + if event_fig.are_events_sent_to_group then + event_fig := event_fig.group + else + event_fig := Void + end + else + event_fig := event_fig.group + end + p := True + end + if p then + project + end + end + + button_release (x, y, button: INTEGER; x_tilt, y_tilt, pressure: DOUBLE; + screen_x, screen_y: INTEGER) + -- Pointer button up happened. + local + event_fig: detachable EV_MODEL + p: BOOLEAN + w_x, w_y: INTEGER + do + w_x := x + area_x + w_y := y + area_y + is_figure_selected := False + from + event_fig := figure_on_position (world, w_x, w_y) + if event_fig = Void then + event_fig := world + end + until + event_fig = Void + loop + if event_fig.is_show_requested and event_fig.is_sensitive and attached event_fig.internal_pointer_button_release_actions as l_actions then + l_actions.call ([w_x, w_y, button, x_tilt, y_tilt, pressure, screen_x, screen_y]) + if event_fig.are_events_sent_to_group then + event_fig := event_fig.group + else + event_fig := Void + end + else + event_fig := event_fig.group + end + p := True + end + if p then + project + end + end + + pointer_leave + -- Pointer left canvas. + do + has_mouse := False + end + + has_focus (a_figure: EV_MODEL): BOOLEAN + -- Is mouse cursor on `a_figure'? + local + grp: detachable EV_MODEL_GROUP + do + if current_figure = a_figure then + Result := True + else + grp ?= a_figure + if grp /= Void then + from grp.start until Result or grp.after loop + Result := has_focus (grp.item) + grp.forth + end + end + end + end + + change_current (new_current_figure: detachable EV_MODEL) + -- Change current to `new_focused_figure'. + --| Generate leave and/or enter events accordingly. + local + old_figure: detachable EV_MODEL + event_fig: detachable EV_MODEL + same_fig: detachable EV_MODEL + p: BOOLEAN + action: detachable EV_LITE_ACTION_SEQUENCE [TUPLE] + do + if current_figure /= new_current_figure then + if + new_current_figure /= Void and then + new_current_figure.is_show_requested and then + new_current_figure.is_sensitive and then + attached new_current_figure.pointer_style as l_new_current_figure_pointer_style + then + widget.set_pointer_style (l_new_current_figure_pointer_style) + else + widget.set_pointer_style (default_cursor) + end + old_figure := current_figure + current_figure := new_current_figure + if old_figure /= Void then + from + event_fig := old_figure + until + event_fig = Void or else has_focus (event_fig) + loop + action := event_fig.internal_pointer_leave_actions + if action /= Void and event_fig.is_show_requested and event_fig.is_sensitive then + action.call (Void) + if event_fig.are_events_sent_to_group then + event_fig := event_fig.group + else + event_fig := Void + end + else + event_fig := event_fig.group + end + p := True + end + end + same_fig := event_fig + if current_figure /= Void then + from + event_fig := current_figure + until + event_fig = Void or else event_fig = same_fig + loop + action := event_fig.internal_pointer_enter_actions + if action /= Void and event_fig.is_show_requested and event_fig.is_sensitive then + action.call (Void) + if event_fig.are_events_sent_to_group then + event_fig := event_fig.group + else + -- Exit loop + event_fig := same_fig + end + else + event_fig := event_fig.group + end + p := True + end + end + end + if p then + project + end + ensure +-- current_figure_assigned: current_figure = new_current_figure + end + + mouse_move (x, y: INTEGER; x_tilt, y_tilt, pressure: DOUBLE; + screen_x, screen_y: INTEGER) + -- Fire events that belong to mouse movement. + --| i.e. leave, enter, motion. + local + event_fig: detachable EV_MODEL + p: BOOLEAN + w_x, w_y: INTEGER + do + if not is_projecting then + w_x := x + area_x + w_y := y + area_y + has_mouse := True + last_pointer_x := w_x + last_pointer_y := w_y + from + event_fig := figure_on_position (world, w_x, w_y) + change_current (event_fig) + if event_fig = Void then + event_fig := world + end + until + event_fig = Void + loop + if event_fig.is_show_requested and event_fig.is_sensitive and attached event_fig.internal_pointer_motion_actions as l_actions then + l_actions.call ([w_x, w_y, x_tilt, y_tilt, pressure, screen_x, screen_y]) + p := p or else not event_fig.valid + if event_fig.are_events_sent_to_group then + event_fig := event_fig.group + else + event_fig := Void + end + else + event_fig := event_fig.group + end + end + if p or else not world.valid then + if project_agent /= Void then + ev_application.do_once_on_idle (project_agent) + end + end + end + end + + on_pebble_request (a_x, a_y: INTEGER): detachable ANY + -- Pebble of current figure. + -- If figure is `Void', return pebble of world. + --| Because when a context menu is up, no events are sent + --| to the world, first simulate a mouse motion to update + --| the projection. + local + fig: detachable EV_MODEL + do + mouse_move (a_x, a_y, 0.0, 0.0, 0.0, 0, 0) + fig := current_figure + if fig = Void or else ev_application.ctrl_pressed then + Result := world.real_pebble (a_x, a_y) + elseif fig.is_show_requested and fig.is_sensitive then + from until Result /= Void or fig = Void loop + Result := fig.real_pebble (a_x, a_y) + if Result = Void then + fig := fig.group + end + end + if Result /= Void and then fig /= Void then + widget.set_accept_cursor (fig.accept_cursor) + widget.set_deny_cursor (fig.deny_cursor) + end + end + end + + on_drop_target_request (a_x, a_y: INTEGER): detachable EV_ABSTRACT_PICK_AND_DROPABLE + -- Find actual drop target. + local + event_fig: detachable EV_MODEL + w_x, w_y: INTEGER + do + w_x := a_x + area_x + w_y := a_y + area_y + event_fig := figure_on_position (world, w_x, w_y) + if event_fig = Void and then not world.drop_actions.is_empty then + Result := world + else + from until Result /= Void or event_fig = Void loop + check event_fig /= Void end + if not event_fig.drop_actions.is_empty then + Result := event_fig + end + event_fig := event_fig.group + end + end + end + + on_pick_request (a_x, a_y: INTEGER) + -- Pick event of current figure. + local + event_fig, fig: detachable EV_MODEL + do + event_fig := figure_on_position (world, a_x + area_x, a_y + area_y) + if + event_fig /= Void and then + event_fig.is_show_requested and then + event_fig.is_sensitive + then + from + until + fig /= Void or event_fig = Void + loop + check + event_fig /= Void + end + if not event_fig.pick_actions.is_empty then + fig := event_fig + else + event_fig := event_fig.group + end + end + if + fig /= Void and then + attached fig.pick_actions as l_actions and then + not l_actions.is_empty + then + l_actions.call ([a_x, a_y]) + end + end + end + +feature {EV_MODEL_WORLD_CELL} -- Element change + + simulate_mouse_move (ax, ay: INTEGER) + -- Let `Current' behave as if pointer was moved to `ax', `ay' + do + mouse_move (ax, ay, 0, 0, 0, 0, 0) + end + +feature {NONE} -- Implementation + + drawable_position: EV_COORDINATE + -- Position of drawable relative to world. + -- Redefined by descendents. + do + create Result + end + + drawable_bounding_box: EV_RECTANGLE + -- Bounding box of the projector + do + create Result.make (drawable_position.x, drawable_position.y, drawable.width, drawable.height) + end + + area_bounding_box: detachable EV_RECTANGLE + -- Bounding box of the visible area if used. + do + if attached area as l_area then + create Result.make (area_x, area_y, l_area.width, l_area.height) + end + end + + default_cursor: EV_POINTER_STYLE + -- Default cursor on world. + do + Result := default_pixmaps.standard_cursor + end + + axle_length: INTEGER = 15 + -- Length of x and y axles when points are displayed. + + draw_points (figure: EV_MODEL) + -- Draw representation of all points in `figure' to canvas. + require + figure_not_void: figure /= Void + local + group: detachable EV_MODEL_GROUP + l_points: SPECIAL [EV_COORDINATE] + i, nb: INTEGER + bbox: EV_RECTANGLE + l_item: EV_COORDINATE + do + bbox := figure.bounding_box + + drawable.set_foreground_color (default_colors.red) + drawable.fill_ellipse (figure.x-5 + offset_x, figure.y-5 + offset_y, 11, 11) + + drawable.set_foreground_color (default_colors.black) + drawable.draw_rectangle (bbox.left + offset_x, bbox.top + offset_y, bbox.width, bbox.height) + + group ?= figure + if group = Void then + l_points := figure.point_array + from + i := 0 + nb := l_points.count - 1 + until + i > nb + loop + l_item := l_points.item (i) + drawable.draw_segment (l_item.x + offset_x, l_item.y + offset_y, figure.x + offset_x, figure.y + offset_y) + drawable.fill_ellipse (l_item.x - 5 + offset_x, l_item.y - 5 + offset_y, 11, 11) + i := i + 1 + end + end + group ?= figure + if group /= Void then + from + group.start + until + group.after + loop + draw_points (group.item) + group.forth + end + end + end + +note + copyright: "Copyright (c) 1984-2023, Eiffel Software and others" + license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)" + source: "[ + Eiffel Software + 5949 Hollister Ave., Goleta, CA 93117 USA + Telephone 805-685-1006, Fax 805-685-6869 + Website http://www.eiffel.com + Customer support http://support.eiffel.com + ]" + +end