This discussion is archived
13 Replies Latest reply: Aug 20, 2013 6:57 AM by 38a9aa42-a2d4-4137-867a-d90e1f48b945 RSS

Need A Hint or Idea For Implementing Endless Horizontal And Vertical scrolling On A Panel

38a9aa42-a2d4-4137-867a-d90e1f48b945 Newbie
Currently Being Moderated

Hi to all,

I would like to know if there is aleady someting made or thought of concerning endless scolling of some Panel. It should be able to be scroled horizontally as well as vertically.

Suppose you have some game showing a kind of maps. If he user scrolls up and reaches the upper edge he gets the content from below and vice versa. If the user scrolls to the left reaching the left edge the right side would be smoohly scrolled in and vice vesa. I other words the map's borders are connected providing a tube like scrolling behaviour.

Could that be produced with Java FX and what would be a possible solution?

Right now my program shows polygons that represent countries on a map for a kind of game.

 

Thanks for any good hints

 

Malte

  • 1. Re: Need A Hint or Idea For Implementing Endless Horizontal And Vertical scrolling On A Panel
    user8929955 Newbie
    Currently Being Moderated

    For your described use case I would not think along the lines of scrolling.

    To mind comes a ViewPort, which displays a part of the map. As you scroll the Viewport is moved. That means, that the visual representation cannot be a single image, but more along the lines of a tiled image or generated altogether at scroll time. In either case (life rendering or tiled images) the wrapping at the borders is the tricky part.

  • 2. Re: Need A Hint or Idea For Implementing Endless Horizontal And Vertical scrolling On A Panel
    38a9aa42-a2d4-4137-867a-d90e1f48b945 Newbie
    Currently Being Moderated

    Well, converting those maps that consists of polygons, that can be pretty much intertwined, into Tiled Image is pretty complex, I am afraid.

    I would like to leave those polygons as nodes, since the user is supposed to click and drag on them for that game, and it is pretty how easy JavaFX supports that within its API.

    What I think to need to know is how a vieweport can be cusomised for such endless scolling.

    I did those things in former days using "character-graphics". Modulo is used against  hight and width to set it properly on the screen.

    Is there any good documentation araound, how a JavaFX-Vewport is working on pixels and how it can be customized?

  • 3. Re: Need A Hint or Idea For Implementing Endless Horizontal And Vertical scrolling On A Panel
    38a9aa42-a2d4-4137-867a-d90e1f48b945 Newbie
    Currently Being Moderated

    Well, it is treally a pitty that nobody seems t know where to get further informatio how to customize a Viewport :-(

    On the other Hand I think ther could be some use cases where you need such endless scrolling (so that yur Ma is kid of folded wihtin a tube ring.

    Does anybody think I should ask for that feature in JavaFX by inserting a feature to JIRA?

    I of course would like to do it on my own, but therefore I need more informati about JavaFX/ViewPort and how ti is workig inenally and how it can be customized.

    So if thee is any JAVA-FX specialist out thee that would be great gaining that or at least futher  knowlege from you :-)

     

    Thaks in advance

     

    Mate

  • 4. Re: Need A Hint or Idea For Implementing Endless Horizontal And Vertical scrolling On A Panel
    PavelSafrata Journeyer
    Currently Being Moderated

    I think it should be possible to use simple clip as the "viewport". Just put the polygons to a group (or other container) and set a Rectangle with your view size as a clip node to the group. For the scrolling, translating the group in one direction and the clip to the other should provide the desired behavior. When the clip reaches an edge of the group, you can reset the nodes and the clip so that the same stuff is visible but there is more of it to scroll to.

  • 5. Re: Need A Hint or Idea For Implementing Endless Horizontal And Vertical scrolling On A Panel
    Marcello Newbie
    Currently Being Moderated

    I realized a scrolling text that moves from right to left. Just use a scrollpane (without scrollbars):

     

    Make your node the same width than the visible part of the scrollpane, place your content 3 times (horizontally) and start showing the middle content.

  • 6. Re: Need A Hint or Idea For Implementing Endless Horizontal And Vertical scrolling On A Panel
    38a9aa42-a2d4-4137-867a-d90e1f48b945 Newbie
    Currently Being Moderated


    Sounds somehow interessting. I googled a bit what you might mean with clip. Do I put it right that you mean the clip-property you can set on a node?

    But are you sure, that if you see one end of the map presented by polygons, you able to see the other end as well?

    I'm asking, because I dont understand how resetting the translation of the group or clip would allow this kind of effect that is somehow typical for "tube-/tubering-scrolling".

    Usually when the user sees the egde (e.g.the horizontal)  he could scroll futher and sees the edge sliding through, so he is able to see both ends of the "landscape".

    like this...

    ++++++++++++++++++++++++++++++++++++++

    +                   ....                                     .....           +

    +               ............                            .....                +

    +             ....                                                           +

    +---------------------------------------------------------------+

    +                           .....                                            +

    +                            ........                                        +

    +                                  ....                                      +

    ++++++++++++++++++++++++++++++++++++++

     

    Now it is scrolled down further

     

    ++++++++++++++++++++++++++++++++++++++

    +               ............                            .....                +

    +             ....                                                           +

    +---------------------------------------------------------------+

    +                           .....                                            +

    +                            ........                                        +

    +                                  ....                                      +

    +                                     ......                                 +

    ++++++++++++++++++++++++++++++++++++++

     

    ++++ = Clip (Bounderies)

    ------  = horizontal edge

    ....,    = some shape (Polygon)

     

    Similar would happend scrolling from left t right or vice versa.

    you also could be over both edges to the same time

    that would be something like this:

     

     

    ++++++++++++++++++++++++++++++++++++++

    +            ............                            .....              !    +

    +          ....                                                         !    +

    +-----------------------------------------------------------!----+

    +                        .....                                          !    +

    +                         ........                                      !    +

    +                               ....                                    !    +

    +                                  ......                               !    +

    ++++++++++++++++++++++++++++++++++++++

     

    Now it is scrolled further to the right

     

    +++++++++++++++++++++++++++++++++++++++

    +     ............                            .....              !        ... +

    +   ....                                                         !    ......  +

    +-----------------------------------------------------!-----------+

    +                 .....                                          !            +

    +                  ........                                      !    ......  +

    +                        ....                                    !   ......   +

    +                           ......                               !    ........+

    +++++++++++++++++++++++++++++++++++++++

    ++++ = Clip (Bounderies)

    ------ = horizontal edge

    ....,    = some shape (Polygon)

    !        = vertical edge

  • 7. Re: Need A Hint or Idea For Implementing Endless Horizontal And Vertical scrolling On A Panel
    PavelSafrata Journeyer
    Currently Being Moderated

    No, the polygons that are partly visible on both sides will have to be duplicated.

  • 8. Re: Need A Hint or Idea For Implementing Endless Horizontal And Vertical scrolling On A Panel
    38a9aa42-a2d4-4137-867a-d90e1f48b945 Newbie
    Currently Being Moderated

    If I take the idea from Marcello it would mean to have polygons obviously 9 times. That could go with litle maps but imagine they would be huge....

    Your Idea to double those polygons looks to be a kind of compromise going to the same direction. But thinking of an algorithm that realizes that polygons are to be duplicated in a kind of dynamic manner seems not quite easy, does it?

    So I guess for this solution there needs to be some event that says "user has reached the horizontal or the vertical edge, or even both of them". If this event is triggered we need a routine that seeks out the polygons that are in the view of the other side of the edge or edges. Then there also needs to be something that discards the polygones again, that are not be seen anymore.

    Looks for me kind of feasable but not really neat. I'd rather like to know how to customize a viewport :-/ so it might can be done by using just a modulo-function.

  • 9. Re: Need A Hint or Idea For Implementing Endless Horizontal And Vertical scrolling On A Panel
    James_D Guru
    Currently Being Moderated

    How much do you need to interact with your "map"? If you actually need to interact with the individual polygons you draw, the following might not work; but if it's enough to just get mouse coordinates relative to the map this might help.

     

    Here I snapshot the map (which I just made a grid for simplicity) as an image, and draw the various pieces of the image on a Canvas, taking into account the scrolling. So I draw the bottom right of the image onto the top left of the canvas, then as many copies of the bottom of the image onto the top of the canvas as are needed, then as many copies of the right of the image on the left of the canvas as are needed, and finally as many copies of the whole image onto the bottom right of the canvas as are needed. In the (probably usual) case where the canvas is smaller than the map, the latter three stages require at most one drawing each.

     

    If your map might change (i.e the various polygons in it change), then you'll need to do a bit more here, but it should be enough to create an ObjectProperty<Image> and when the map changes update that property. Listen to the property and redraw the canvas when it changes.

     

    I don't know how this performs if you have lots and lots of polygons, but I suspect it works quite well, unless the map is changing rapidly.

     

    This scrolls using the (very crude) buttons or by panning with the mouse (which feels pretty smooth):

     

    import javafx.application.Application;
    import javafx.beans.property.ObjectProperty;
    import javafx.beans.property.SimpleObjectProperty;
    import javafx.beans.value.ChangeListener;
    import javafx.beans.value.ObservableValue;
    import javafx.event.ActionEvent;
    import javafx.event.EventHandler;
    import javafx.geometry.Point2D;
    import javafx.scene.Group;
    import javafx.scene.Scene;
    import javafx.scene.canvas.Canvas;
    import javafx.scene.canvas.GraphicsContext;
    import javafx.scene.control.Button;
    import javafx.scene.image.Image;
    import javafx.scene.input.MouseEvent;
    import javafx.scene.layout.AnchorPane;
    import javafx.scene.layout.BorderPane;
    import javafx.scene.layout.Pane;
    import javafx.scene.paint.Color;
    import javafx.scene.shape.Rectangle;
    import javafx.scene.text.Text;
    import javafx.stage.Stage;
    public class ScrollingOnTorusExample extends Application {
        @Override
        public void start(Stage primaryStage) {
            final Image baseImage = createBaseImage();
            final ObjectProperty<Point2D> viewportOffset = new SimpleObjectProperty<>(new Point2D(0, 0));
            final double viewportWidth = 400;
            final double viewportHeight = 400;
            final Canvas viewport = new Canvas(viewportWidth, viewportHeight);
            setUpPanning(viewport, viewportOffset, baseImage);
            drawViewport(viewport, baseImage, viewportOffset.get());
            viewportOffset.addListener(new ChangeListener<Point2D>() {
                @Override
                public void changed(ObservableValue<? extends Point2D> observable, Point2D oldOffset, Point2D newOffset) {
                    drawViewport(viewport, baseImage, newOffset);
                }
            });
            Pane pane = new Pane();
            pane.getChildren().add(viewport);
            BorderPane root = new BorderPane();
            root.setCenter(pane);
            setUpScrollButtons(viewportOffset, root, baseImage);
            Scene scene = new Scene(root, 400, 400);
            primaryStage.setScene(scene);
            primaryStage.show();
        }
        private void setUpScrollButtons(final ObjectProperty<Point2D> viewportOffset, final BorderPane root, final Image image) {
            Button leftButton = new Button("<-");
            Button rightButton = new Button("->");
            Button upButton = new Button("^");
            Button downButton = new Button("v");
            leftButton.setOnAction(new EventHandler<ActionEvent>() {
                @Override
                public void handle(ActionEvent event) {
                    scroll(10, 0, viewportOffset, image);
                }
            });
            rightButton.setOnAction(new EventHandler<ActionEvent>() {
                @Override
                public void handle(ActionEvent event) {
                    scroll(-10, 0, viewportOffset, image);
                }
            });
            upButton.setOnAction(new EventHandler<ActionEvent>() {
                @Override
                public void handle(ActionEvent event) {
                    scroll(0, 10, viewportOffset, image);
                }
            });
            downButton.setOnAction(new EventHandler<ActionEvent>() {
                @Override
                public void handle(ActionEvent event) {
                    scroll(0, -10, viewportOffset, image);
                }
            });
            AnchorPane horizScroll = new AnchorPane();
            AnchorPane vertScroll = new AnchorPane();
            AnchorPane.setLeftAnchor(leftButton, 0.0);
            AnchorPane.setRightAnchor(rightButton, 0.0);
            AnchorPane.setTopAnchor(upButton, 0.0);
            AnchorPane.setBottomAnchor(downButton, 0.0);
            horizScroll.getChildren().addAll(leftButton, rightButton);
            vertScroll.getChildren().addAll(upButton, downButton);
            root.setRight(vertScroll);
            root.setBottom(horizScroll);
        }
        private void setUpPanning(final Canvas viewport,
                final ObjectProperty<Point2D> viewportOffset, final Image image) {
            final ObjectProperty<Point2D> mouseDownCoordinates = new SimpleObjectProperty<>();
            viewport.setOnMousePressed(new EventHandler<MouseEvent>() {
                @Override
                public void handle(MouseEvent event) {
                    mouseDownCoordinates.set(new Point2D(event.getX(), event.getY()));
                }
            });
            viewport.setOnMouseReleased(new EventHandler<MouseEvent>() {
                @Override
                public void handle(MouseEvent event) {
                    mouseDownCoordinates.set(null);
                }
            });
            viewport.setOnMouseDragged(new EventHandler<MouseEvent>() {
                @Override
                public void handle(MouseEvent event) {
                    if (mouseDownCoordinates.get() != null) {
                        final double deltaX = event.getX() - mouseDownCoordinates.get().getX();
                        final double deltaY = event.getY() - mouseDownCoordinates.get().getY();
                        scroll(deltaX, deltaY, viewportOffset, image);
                        mouseDownCoordinates.set(new Point2D(event.getX(), event.getY()));
                    }
                }
            });
        }
        private void scroll(double deltaX, double deltaY, ObjectProperty<Point2D> viewportOffset, Image image) {
            final double currentOffsetX = viewportOffset.get().getX();
            final double currentOffsetY = viewportOffset.get().getY();
            double newOffsetX = currentOffsetX - deltaX;
            while (newOffsetX < 0) {
                newOffsetX += image.getWidth();
            }
            while (newOffsetX > image.getWidth()) {
                newOffsetX -= image.getWidth();
            }
            double newOffsetY = currentOffsetY - deltaY;
            while (newOffsetY < 0) {
                newOffsetY += image.getHeight();
            }
            while (newOffsetY > image.getHeight()) {
                newOffsetY -= image.getHeight();
            }
            viewportOffset.set(new Point2D(newOffsetX, newOffsetY));
        }
        private Image createBaseImage() {
            // Just make a simple numbered grid
            final Group group = new Group();
            for (int x = 0; x < 20; x++) {
                for (int y = 0; y < 30; y++) {
                    final Rectangle rect = new Rectangle(x * 40, y * 40, 40, 40);
                    rect.setStroke(Color.CORNFLOWERBLUE);
                    rect.setFill(Color.TRANSPARENT);
                    group.getChildren().add(rect);
                    Text text = new Text(x * 40 + 4, y * 40 + 36, String.valueOf(x + y * 20));
                    group.getChildren().add(text);
                }
            }
            return group.snapshot(null, null);
        }
        private void drawViewport(final Canvas viewport, final Image image, Point2D newOffset) {
            GraphicsContext gc2d = viewport.getGraphicsContext2D();
            final double srcX = newOffset.getX();
            final double srcY = newOffset.getY();
            final double width = image.getWidth() - srcX;
            final double height = image.getHeight() - srcY;
            gc2d.drawImage(image, srcX, srcY, width, height, 0, 0, width, height);
            double x = width;
            while (x < viewport.getWidth()) {
                gc2d.drawImage(image, 0, srcY, image.getWidth(), height, x, 0, image.getWidth(), height);
                x += image.getWidth();
            }
            double y = height;
            while (y < viewport.getHeight()) {
                gc2d.drawImage(image, srcX, 0, width, image.getHeight(), 0, y, width, image.getHeight());
                y += image.getHeight();
            }
            x = width;
            while (x < viewport.getWidth()) {
                y = height;
                while (y < viewport.getHeight()) {
                    gc2d.drawImage(image, 0, 0, image.getWidth(), image.getHeight(), 
                            x, y, image.getWidth(), image.getHeight());
                    y += image.getHeight();
                }
                x += image.getWidth();
            }
        }
        public static void main(String[] args) {
            launch(args);
        }
    }
  • 10. Re: Need A Hint or Idea For Implementing Endless Horizontal And Vertical scrolling On A Panel
    38a9aa42-a2d4-4137-867a-d90e1f48b945 Newbie
    Currently Being Moderated

    Hi Jamds_D,

    Thanks for your impressive and inspiring work. I just tried it out, but have not analyzed it totally, yet.

    It seems that you  do the scrolling totally on you own. I guess I would need to do that as well, if I don't find out the really the deep functions of a viewport of scrollpanel.

    Well my test-application does not do the "torus-scrolling" (or as I cal it tube-ring-scrolling") yet is originated from an Java-Swing prototype "Risk-like" game.

    The user interacts a lot with the polygons and my JavaFX-application takes advantage of shape's possibilities I really don't want to miss, since the code is much less there than in swing.

    BTW: Could you show me what tags in this forum are needed to put out java-listings in the way you did? I'd like to put my listing here as well in a good manner, so a kind of "evolving documentation / blog"  can be shown here for other users

  • 11. Re: Need A Hint or Idea For Implementing Endless Horizontal And Vertical scrolling On A Panel
    James_D Guru
    Currently Being Moderated

    Yes: this is relatively low level. Adding additional graphics on top of the map will require a bit of work and careful thought.

    The user interacts a lot with the polygons and my JavaFX-application takes advantage of shape's possibilities I really don't want to miss

    If you are intending on registering event handlers with the polygons, then this approach probably is not something you want to pursue. If you want to register mouse event handlers with the view itself, and then ask if certain polygons contain the coordinates of those events, then that could be done with a little work.

    BTW: Could you show me what tags in this forum are needed to put out java-listings in the way you did?

    Press the "Use advanced editor" link. Paste your code in, select it, then use the >> ("Insert") button on the toolbar, choose "Syntax highlighting" and "Java".

  • 12. Re: Need A Hint or Idea For Implementing Endless Horizontal And Vertical scrolling On A Panel
    38a9aa42-a2d4-4137-867a-d90e1f48b945 Newbie
    Currently Being Moderated

    Here is my listing of the testlike port.

    To run it you need snakeyaml as yaml-engine and an example map-file provided below as new entry (sorry is really long)

     

    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.net.MalformedURLException;
    import java.util.ArrayList;
    import java.util.HashSet;
    import java.util.List;
    import java.util.Map;
    import javafx.application.Application;
    import javafx.beans.property.SimpleSetProperty;
    import javafx.beans.property.SimpleStringProperty;
    import javafx.collections.FXCollections;
    import javafx.collections.ObservableList;
    import javafx.event.EventHandler;
    import javafx.geometry.Point2D;
    import javafx.scene.Cursor;
    import javafx.scene.Group;
    import javafx.scene.Scene;
    import javafx.scene.input.MouseEvent;
    import javafx.scene.input.ScrollEvent;
    import javafx.scene.paint.Color;
    import javafx.scene.shape.Polygon;
    import javafx.stage.Stage;
    import org.yaml.snakeyaml.Yaml;
    public class CMKRiskTest extends Application
    {
    private List <NamedPolygon> m_sektors              = new ArrayList<NamedPolygon>();
     private Point2D             m_mostDistantPoint     = null;
     
     public void init() throws Exception
     {
      Map<String,String> namedParms = getParameters().getNamed();
      File               mapFile    = new File(namedParms.get("mapfile"));
      loadContentFromYaml(mapFile);
     }
     
     
     public void start(Stage stage) throws Exception
     {
      final Group root = new Group();
      for (NamedPolygon sektor : m_sektors)
      {
       root.getChildren().add(sektor);
       
       sektor.setOnMouseEntered(new EventHandler<MouseEvent>()
       {
        @Override
        public void handle(MouseEvent mouseEvent)
        {
         NamedPolygon[] sektors = ((NamedPolygon) mouseEvent.getSource()).getReachables();
         for (NamedPolygon sektor : sektors)
         {
          sektor.setFill(Color.WHITESMOKE);
         }
        }
       });
       
       sektor.setOnMouseExited(new EventHandler<MouseEvent>()
       {
        @Override
        public void handle(MouseEvent mouseEvent)
        {
         NamedPolygon[] sektors = ((NamedPolygon) mouseEvent.getSource()).getReachables();
         for (NamedPolygon sektor : sektors)
         {
          sektor.setFill(sektor.getColor());
         }
        }
       });
      }// end of  for (m_sektors)
      
      stage.addEventHandler(ScrollEvent.SCROLL, new EventHandler<ScrollEvent>()
      {
       public void handle(ScrollEvent scrollEvent)
       {
        System.out.println(scrollEvent.toString());
        if (scrollEvent.isAltDown())
        {
         double factor = scrollEvent.getDeltaY() > 0 ?  1.01 : .99; 
         //root.setTranslateX(scrollEvent.getScreenX()*factor);
         //root.setTranslateY(scrollEvent.getScreenY()*factor);
         root.setScaleX(root.getScaleX()*factor);
         root.setScaleY(root.getScaleY()*factor);
        }
       }
      });
    /*   
      stage.addEventHandler(ZoomEvent.ZOOM, new EventHandler<ZoomEvent>()
      {
       public void handle(ZoomEvent zoomEvent)
       {
        System.out.println(zoomEvent.toString());
        if (zoomEvent.isAltDown())
        { 
         //root.setTranslateX(scrollEvent.getScreenX()*factor);
         //root.setTranslateY(scrollEvent.getScreenY()*factor);
         root.setScaleX(root.getScaleX()*zoomEvent.getZoomFactor());
         root.setScaleY(root.getScaleY()*zoomEvent.getZoomFactor());
        }
       }
      });
    */
      
      EventHandler<MouseEvent> mouseEvtHandler = new EventHandler<MouseEvent>()
      {
       private double previousX; 
       private double previousY;
       
       @Override
       public void handle(MouseEvent evt)
       {
        if (evt.getEventType() == MouseEvent.MOUSE_DRAGGED)
        {
         root.getScene().setCursor(Cursor.HAND);
         
         double deltaX = evt.getSceneX() - previousX;
         double deltaY = evt.getSceneY() - previousY;
         
         root.setTranslateX(root.getTranslateX()+deltaX);
         root.setTranslateY(root.getTranslateY()+deltaY);
         
         previousX = evt.getSceneX();
         previousY = evt.getSceneY();
        }
        else if (evt.getEventType() == MouseEvent.MOUSE_PRESSED)
        {
         root.getScene().setCursor(Cursor.MOVE);
         previousX = evt.getSceneX();
         previousY = evt.getSceneY();
        }
        else if (evt.getEventType() == MouseEvent.MOUSE_RELEASED)
        {
         root.getScene().setCursor(Cursor.DEFAULT);
        }
        else
        {
         System.out.println("Mouse event not in use!!!");
        }
       }
      };
      stage.addEventHandler(MouseEvent.MOUSE_PRESSED, mouseEvtHandler);
      stage.addEventHandler(MouseEvent.MOUSE_DRAGGED, mouseEvtHandler);
      stage.addEventHandler(MouseEvent.MOUSE_RELEASED, mouseEvtHandler);
      
      Scene scene = new Scene(root, 640, 420);
      stage.setTitle("Polygon Sample");
      stage.setScene(scene);
      stage.show();
     }
     
     
     
        @SuppressWarnings("unchecked")
     public void loadContentFromYaml(File sectorMapFile) throws FileNotFoundException, MalformedURLException
        {
         Yaml yaml = new Yaml();
         
         Iterable<?> l = yaml.loadAll(new FileReader(sectorMapFile));
         Map<String, Object> mainMap = (Map<String, Object>)l.iterator().next();
         unmarshalContent(mainMap);
         figureOutNeighbourhoods();
         
            //setDirty(false);
            calcMostDistantPoint();
        }
     
        
        /**
         * deserialisiert den Inhalt der vorhaer in eine Map gelesen wurde
         * Diese Routine ist, ähnlich wie ihr Gegenstück marshalContent, dazu gedacht
         * abgeleiteten Klassen die Möglichkeit zu geben durch erweiterndes Überschreiben
         * weitere Informationen einzubringen
         * @param mainMap
         * @throws MalformedURLException
         */
        @SuppressWarnings("unchecked")
     protected void unmarshalContent(Map<String, Object> mainMap) throws MalformedURLException
        {
         /* TODO
         String urlStr = (String)mainMap.get("artworkimage");
         if (urlStr!=null && urlStr.length()>0)
         {
          loadPlanBild(new URL(urlStr));
         }
         */
         Map<String, Map<String, Object>> sectorMap = (Map<String, Map<String, Object>>)mainMap.get("countries");
         for (String name : sectorMap.keySet())
         {
          NamedPolygon sec = new NamedPolygon(name, sectorMap);
          m_sektors.add(sec);
          //sec.addPropertyChangeListener(this);
         }
        }
        
        protected void calcMostDistantPoint()
        {
         double x = 0;
         double y = 0;
         
         for (NamedPolygon sektor : m_sektors)
         {
          ObservableList<Double> points = sektor.getPoints();
          
          
          for (int i=0; i<points.size(); i++)
          {
           x = Math.max(points.get(i), x);
           y = Math.max(points.get(++i), y);
          }
         }
         
         m_mostDistantPoint = new Point2D(x,y);
        }
        
     
        public void figureOutNeighbourhoods()
        {
         for (int i=0; i<m_sektors.size(); i++)
      {
          int k = 0;
          int l = 0;
       NamedPolygon poly1 = m_sektors.get(i);
       
       for (int j=0; j<m_sektors.size(); j++)
       {
        if (i!=j)
        {  
         NamedPolygon poly2 = m_sektors.get(j);
         System.out.println("Sektor1="+poly1.getName()+"/Sektor2="+poly2.getName());
         if (poly1.intersects(poly2))
         {
          k++;
          poly1.addReachable(poly2);
         }
         else
         {
          l++;
         }
        }
       }
       //System.out.println(k+"+"+l+"="+(k+l)+"?"+m_sektors.size());
      }
        }
        
        
     public static void main(String... args)
     {
      launch(args);
     }
     
     
     
     public class NamedPolygon extends Polygon
     {
      final static public String _NAME    = "name";
      final static public String _POLYGON = "polygon";
      final static public String _COLOR   = "color";
      
      private SimpleStringProperty            m_name       = new SimpleStringProperty();
      
      private SimpleSetProperty<NamedPolygon> m_reachables = new SimpleSetProperty<>(FXCollections.observableSet(new HashSet<NamedPolygon>()));
      
      private Color                           m_color      = Color.WHITESMOKE;
      
      
      public NamedPolygon(String name, Map<String, Map<String, Object>> sectorMap)
      {
       m_name.set(name);
       retrieve (sectorMap);
      }
      
      public Color getColor()
      {
       return m_color;
      }
      
      public String getName()
      {
       return m_name.get();
      }
      
      public Map<String,Object> retrieve(Map<String, Map<String,Object>> sectorMap)
      {
       Map<String,Object> propsMap = sectorMap.get( m_name.get());
       
       @SuppressWarnings("unchecked")
       List<Double> pointCoord = (List<Double>) propsMap.get(_POLYGON);
       Long x;
       
       x = ((Number) propsMap.get(_COLOR)).longValue();
       if (x!=null)
       {
        java.awt.Color colorAWT;
        colorAWT = new java.awt.Color(x.intValue());
        m_color  = Color.rgb(colorAWT.getRed(), colorAWT.getGreen(), colorAWT.getBlue(), 0.7);
       }
       
       getPoints().addAll(pointCoord);
       setFill(m_color);
       setStrokeWidth(1);
       setStroke(Color.BLACK);
     
       return propsMap;
      }
      
      
      public void addReachable(NamedPolygon p)
      {
       m_reachables.add(p);
      }
      
      public NamedPolygon [] getReachables()
      {
       return m_reachables.toArray(new NamedPolygon[m_reachables.size()]);
      }
      
      
      /**
       * Returns true if this polygon intersects the specified polygon.
       *
       * @param otherPoly  the polygon to test for intersection.
       * @return true if the two polygons intersect, false otherwise.
       *
       */
      public boolean intersects(Polygon otherPoly)
      {
       int thisPointAmount  = getPoints().size();
       int otherPointAmount = otherPoly.getPoints().size();
       
       double thisMaxX = Double.NEGATIVE_INFINITY;
       double thisMaxY = Double.NEGATIVE_INFINITY;
       double thisMinX = Double.POSITIVE_INFINITY;
       double thisMinY = Double.POSITIVE_INFINITY;
       double otherMaxX = Double.NEGATIVE_INFINITY;
       double otherMaxY = Double.NEGATIVE_INFINITY;
       double otherMinX = Double.POSITIVE_INFINITY;
       double otherMinY = Double.POSITIVE_INFINITY;
       for (int i = 0; i < thisPointAmount; i++)
       {
        double x = getPoints().get(i);
        double y = getPoints().get(++i);
        
        thisMaxX = Math.max(x,thisMaxX);
        thisMinX = Math.min(x,thisMinX);
        
        thisMaxY = Math.max(y,thisMaxY);
        thisMinY = Math.min(y,thisMinY);
       }
       
       for (int i = 0; i < otherPointAmount; i++)
       {
        double x = otherPoly.getPoints().get(i);
        double y = otherPoly.getPoints().get(++i);
        
        otherMaxX = Math.max(x,otherMaxX);
        otherMinX = Math.min(x,otherMinX);
        
        otherMaxY = Math.max(y,otherMaxY);
        otherMinY = Math.min(y,otherMinY);
       }
       System.out.print("thisMaxX="+thisMaxX+", ");
       System.out.print("thisMaxY="+thisMaxY+", ");
       System.out.print("thisMinX="+thisMinX+", ");
       System.out.print("thisMinY="+thisMinY+"\n");
       System.out.print("otherMaxX="+otherMaxX+", ");
       System.out.print("otherMaxY="+otherMaxY+", ");
       System.out.print("otherMinX="+otherMinX+", ");
       System.out.print("otherMinY="+otherMinY+"\n");
       
       // Overestimate boundaries
       thisMaxX++;
       thisMaxY++;
       thisMinX--;
       thisMinY--;
       otherMaxX++;
       otherMaxY++;
       otherMinX--;
       otherMinY--;
       // Polys are beside each other
       if (thisMaxX < otherMinX || otherMaxX < thisMinX)
       {
        return false;
       }
       // Polys above/below each other
       if (thisMaxY < otherMinY || otherMaxY < thisMinY)
       {
        return false;
       }
       
       
       for (int thisLin = 0; thisLin < thisPointAmount; thisLin++)
       {
        Point2D  thisLinePoint1 = new Point2D(getPoints().get(thisLin),
                                        getPoints().get(++thisLin));
        Point2D  thisLinePoint2 = new Point2D(getPoints().get((thisLin+1) % thisPointAmount), 
                                        getPoints().get((thisLin+2) % thisPointAmount));
        
        for (int otherLin = 0; otherLin < otherPointAmount; otherLin++)
        {
         Point2D  otherLinePoint1 = new Point2D(otherPoly.getPoints().get(otherLin), 
                                          otherPoly.getPoints().get(++otherLin));
         Point2D  otherLinePoint2 = new Point2D(otherPoly.getPoints().get((otherLin+1) % otherPointAmount), 
                                          otherPoly.getPoints().get((otherLin+2) % otherPointAmount));
         
         if (linesIntersect(thisLinePoint1, thisLinePoint2, otherLinePoint1, otherLinePoint2))
         {
          return true;
         }
        }
       }
       return false;
      }
      /**
       * Tests whether two line segments intersect.
       *
       * @param p1  the first point of the first line segment.
       * @param p2  the second point of the first line segment.
       * @param p3  the first point of the second line segment.
       * @param p4  the second point of the second line segment.
       * @return true if the two segments intersect.
       */
      public final boolean linesIntersect(Point2D p1, Point2D p2, Point2D p3, Point2D p4)
      {
       System.out.println("LineA="+p1.getX() +","+p1.getY()+"/"+p2.getX() +","+p2.getY());
       System.out.println("LineB="+p3.getX() +","+p3.getY()+"/"+p4.getX() +","+p4.getY());
       // From Graphics Gems II
       double r, s, rsDenom, rNumer;
       double dp1yp3y, dp4xp3x, dp1xp3x, dp4yp3y, dp2xp1x, dp2yp1y;
       dp1yp3y = p1.getY() - p3.getY();
       dp4xp3x = p4.getX() - p3.getX();
       dp1xp3x = p1.getX() - p3.getX();
       dp4yp3y = p4.getY() - p3.getY();
       dp2xp1x = p2.getX() - p1.getX();
       dp2yp1y = p2.getY() - p1.getY();
       rsDenom = dp2xp1x * dp4yp3y - dp2yp1y * dp4xp3x;
       rNumer = ( dp1yp3y * dp4xp3x - dp1xp3x * dp4yp3y );
       // if rsDenom is zero, lines are parallel
       // if rNumer is also zero, lines are collinear
       if (rsDenom == 0)
        if (rNumer != 0)
         return false;
        else
        {
         // Check for overlap
         double hix1, hiy1, lox1, loy1;
         if (p1.getX() > p2.getX())
         {
          hix1 = p1.getX();
          lox1 = p2.getX();
         }
         else
         {
          hix1 = p2.getX();
          lox1 = p1.getX();
         }
         if (p1.getY() > p2.getY())
         {
          hiy1 = p1.getY();
          loy1 = p2.getY();
         }
         else
         {
          hiy1 = p2.getY();
          loy1 = p1.getY();
         }
         // Check intervals
         return !( ( ( lox1 > p3.getX() && lox1 > p4.getX() ) || ( hix1 < p3.getX() && hix1 < p4.getX() ) ) || ( ( loy1 > p3.getY() && loy1 > p4.getY() ) || ( hiy1 < p3.getY() && hiy1 < p4.getY() ) ) );
        }
       r = rNumer / rsDenom;
       s = ( dp1yp3y * dp2xp1x - dp1xp3x * dp2yp1y ) / rsDenom;
       return !( r < 0 || r > 1 || s < 0 || s > 1 );
      } 
     }
    }
    
    

    Actually I did not fine the possibility to use  something a normal polygon shape might already got, (polygon-intersection),  so  I used routines of my old code that were originated by a robot-game called squire

    from a former professor of Camebridge. Here his copyright tag)

    current HomePage should be: Finnegan Southey (even though there was much more stuff once in there)

       * @author Finnegan Southey

       * @version $Name:  $ $Revision: 1.3 $, $Date: 2000/10/13 06:15:36 $

       * @legal Copyright (c) Finnegan Southey, 1996-1999

       * This program is free software; you can redistribute it and/or modify it

       * under the terms of the GNU Library General Public License as published

       * by the Free Software Foundation; either version 2 of the License, or

       * (at your option) any later version.  This program is distributed in the

       * hope that it will be useful, but WITHOUT ANY WARRANTY; without even the

       * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

       * See the GNU Library General Public License for more details.  You should

       * have received a copy of the GNU Library General Public License along

       * with this program; if not, write to the Free Software Foundation, Inc.,

       * 675 Mass Ave, Cambridge, MA 02139, USA.

  • 13. Re: Need A Hint or Idea For Implementing Endless Horizontal And Vertical scrolling On A Panel
    38a9aa42-a2d4-4137-867a-d90e1f48b945 Newbie
    Currently Being Moderated

    Here the map separately. You may copy it in a texteditor and save it.

    you need to use  the parameter --mapfile=[my map file path]  as command line parameter so the program reads the map.

     

    ---

    countries:

      Felmen:

        &id2 maxCapacity: &id96 30

        &id3 offense: &id1 3

        &id4 polygon:

        - 597.7443385387388

        - 2152.9474067413357

        - 595.4515513701639

        - 2164.0928906448944

        - 684.8172703865464

        - 2236.174401429603

        - 769.9205416489766

        - 2267.2296757159547

        - 854.581817588901

        - 2270.491873414804

        - 925.4681764449091

        - 2243.1789937778144

        - &id11 650.0

        - &id12 2177.0

        &id39 markerPoints:

          &id40 centerPoint:

          - 751.1111111111111

          - 2224.4444444444443

        &id5 continent: &id6 Poloom

        &id7 color: &id89 -10066432

        &id8 defense: *id1

      &id345 Jamadull:

        *id2: &id81 45

        *id3: *id1

        *id4:

        - &id74 1937.0

        - &id75 2585.0

        - 2211.0

        - 2611.0

        - &id212 2077.0

        - 2770.0

        - 1874.0

        - 2781.0

        - &id76 1722.0

        - &id77 2659.0

        *id5: *id6

        *id7: -16399792

        *id8: &id16 5

      Hummin:

        *id2: &id10 50

        *id3: *id1

        *id4:

        - &id241 857.2861552357103

        - &id242 341.5643868501834

        - &id9 885.0

        - &id49 320.0

        - &id46 911.0

        - &id47 238.0

        - *id9

        - &id48 123.0

        - 1092.0

        - 130.0

        - &id107 1296.0

        - &id108 84.0

        - 1326.2692100441266

        - 227.91397837867956

        - 1217.8751157560407

        - 317.84948420102774

        - 1143.9791331711922

        - 353.9207265784311

        *id5: &id50 Deserto

        *id7: -16777216

        *id8: *id1

      Rumen:

        *id2: *id10

        *id3: *id1

        *id4:

        - 332.48993994923546

        - 2014.9457066798736

        - 394.0

        - 2200.0

        - 468.0

        - 2297.0

        - &id111 554.2521925688917

        - &id112 2364.3673847846667

        - 597.8228371811635

        - 2152.565816436057

        - 433.6674301987247

        - 2074.346684826348

        *id5: *id6

        *id7: &id45 -10053376

        *id8: *id1

      &id306 Ommenen:

        *id2: *id10

        *id3: *id1

        *id4:

        - &id191 1377.0

        - &id192 2538.0

        - 1380.4042221164489

        - 2360.598614634883

        - 1667.1606197403137

        - 2205.7455193499272

        - &id127 1799.0

        - 2344.0

        - &id71 1737.0

        - &id72 2477.0

        - &id69 1718.0

        - &id70 2555.0

        - 1611.0

        - 2592.0

        - &id307 1485.0

        - &id308 2607.0

        *id5: *id6

        *id7: -2829257

        *id8: *id1

      Tjomen:

        *id2: *id10

        *id3: *id1

        *id4:

        - &id57 901.0

        - &id209 2042.0

        - &id99 797.0

        - &id275 2059.0

        - *id11

        - *id12

        - 1104.5732274980946

        - 2285.4717743366245

        - &id14 1217.4757843058667

        - &id15 2129.1840911907107

        - 1055.0

        - 2101.0

        *id5: *id6

        *id7: -7355318

        *id8: *id1

      Hammal:

        *id2: *id10

        *id3: &id13 2

        *id4:

        - &id61 1368.0

        - &id62 1398.0

        - 1616.0

        - 1381.0

        - 1826.0263993495525

        - 1449.78707145078

        - &id105 1722.0716473199946

        - &id106 1522.1239633071787

        - &id63 1379.6233576642335

        - &id64 1498.7357664233577

        *id5: &id52 Geodesia

        *id7: -39424

        *id8: &id68 4

      &id288 Jomen:

        *id2: &id51 55

        *id3: *id13

        *id4:

        - 1083.8264602804636

        - 2106.0004226089504

        - *id14

        - *id15

        - &id195 1227.0

        - &id196 2116.0

        - &id253 1367.3330409479204

        - &id254 2059.121823088147

        - 1399.4294470431778

        - 1965.8358871906526

        - 1400.0

        - 1921.0

        - 1367.0

        - 1912.0

        - &id289 1299.0

        - &id146 1899.0

        - &id339 1240.0

        - &id73 1971.0

        - 1198.0

        - &id25 2021.0

        - &id59 1140.0

        - 2054.0

        *id5: *id6

        *id7: &id92 -3342592

        *id8: *id16

      &id312 Gambabol:

        *id2: *id10

        *id3: *id1

        *id4:

        - &id135 1756.0

        - &id136 430.0

        - 1785.0

        - 431.0

        - &id137 1793.0

        - &id17 427.0

        - 1810.0

        - *id17

        - 1829.4494229354073

        - 430.20371386546924

        - &id154 1875.0

        - &id263 436.0

        - 1935.0

        - &id178 442.0

        - 1941.0

        - &id18 422.0

        - &id38 1962.0

        - *id18

        - &id20 1973.0

        - 448.0

        - &id19 1969.0

        - &id78 472.0

        - 1972.0

        - &id133 489.0

        - *id19

        - 513.0

        - 1968.0

        - &id143 540.0

        - 1965.0

        - 554.0

        - *id20

        - 561.0

        - 1967.0

        - &id27 571.0

        - &id21 1959.0

        - &id22 579.0

        - *id21

        - *id22

        - *id20

        - &id23 582.0

        - &id37 1981.0

        - 572.0

        - &id276 1990.0

        - *id23

        - 2004.0

        - &id148 588.0

        - 1997.0

        - 594.0

        - 2000.0

        - &id24 605.0

        - 2001.0

        - &id114 612.0

        - &id336 2002.0

        - &id35 620.0

        - 2007.0

        - 610.0

        - &id33 2010.0

        - *id24

        - &id26 2015.0

        - &id149 597.0

        - *id25

        - 591.0

        - 2024.0

        - &id28 586.0

        - &id30 2023.0

        - 581.0

        - *id26

        - *id27

        - 2005.0

        - &id129 565.0

        - 1998.0

        - 557.0

        - &id82 1993.0

        - &id144 545.0

        - 1985.0

        - 532.0

        - &id88 1983.0

        - 517.0

        - 1992.0

        - 527.0

        - 2008.0

        - 555.0

        - 2006.0

        - 533.0

        - &id32 2012.0

        - 518.0

        - &id31 2017.0

        - &id125 559.0

        - 2027.0

        - 575.0

        - &id29 2028.0

        - *id23

        - 2029.0

        - *id28

        - *id29

        - &id91 590.0

        - 2026.0

        - 595.0

        - *id30

        - &id116 599.0

        - *id31

        - &id36 602.0

        - *id26

        - &id120 608.0

        - *id32

        - 613.0

        - *id33

        - &id34 621.0

        - *id31

        - *id34

        - &id207 2031.0

        - *id35

        - &id210 2041.0

        - &id113 617.0

        - &id41 2046.0

        - *id36

        - 2047.6681127982647

        - 583.0694143167028

        - &id87 2040.0

        - 566.0

        - 2033.28222075347

        - 545.2868473231989

        - 2028.0079312623925

        - 529.0244547257105

        - 2023.9768786127167

        - 502.84971098265896

        - 2018.0

        - &id206 464.0

        - 2005.2287470126323

        - 440.8736770228747

        - *id37

        - &id205 397.0

        - 1977.176

        - 375.968

        - *id38

        - &id204 357.0

        - 1939.0

        - 350.0

        - 1909.0

        - 349.0

        - &id117 1861.0

        - 352.0

        - 1823.0

        - 351.0

        - 1767.0

        - 344.0

        - &id186 1733.0

        - &id177 343.0

        - &id234 1748.0

        - &id235 358.0

        *id39:

          *id40:

          - 1843.3333333333335

          - 396.6666666666667

        *id5: &id44 Rivdjung

        *id7: &id219 -10040320

        *id8: *id1

      Zankakuk:

        *id2: *id10

        *id3: *id1

        *id4:

        - *id41

        - &id42 786.0

        - &id168 2112.0

        - *id42

        - 2145.0

        - 793.0

        - &id43 2155.0

        - &id167 826.0

        - *id43

        - 870.0

        - 2154.0

        - 922.0

        - 2162.0

        - &id60 1002.0

        - &id176 2123.0

        - &id157 997.0

        - &id85 2104.0

        - &id86 1007.0

        - &id83 2056.0

        - &id84 960.0

        - 2059.7743076477695

        - 902.2661609295694

        *id5: *id44

        *id7: *id45

        *id8: *id1

      Trolla:

        *id2: *id10

        *id3: *id1

        *id4:

        - *id46

        - *id47

        - *id9

        - *id48

        - 782.0

        - 140.0

        - &id53 678.0

        - &id54 110.0

        - &id55 702.0

        - &id56 228.0

        - &id93 732.0

        - &id94 259.0

        - *id9

        - *id49

        *id5: *id50

        *id7: &id110 -16731648

        *id8: *id1

      &id287 Gruttel:

        *id2: *id51

        *id3: *id1

        *id4:

        - &id65 996.0

        - &id66 1656.0

        - 869.9772503861817

        - 1547.6991995506248

        - 712.0

        - 1566.0

        - *id11

        - 1654.0

        - 686.0

        - 1740.0

        - 898.0

        - 1804.0

        - 1146.0

        - 1834.0

        - &id103 1388.0

        - &id104 1830.0

        - 1312.2426961975827

        - 1771.2906917624996

        - &id101 1237.538733832539

        - &id102 1642.0266848196052

        *id5: *id52

        *id7: &id95 -26368

        *id8: *id16

      Surium:

        *id2: *id10

        *id3: *id1

        *id4:

        - 494.0

        - &id109 124.0

        - *id53

        - *id54

        - *id55

        - *id56

        - &id158 557.8026780054288

        - &id159 340.7089983027038

        - &id169 400.24554104247864

        - &id170 296.85912108028936

        - &id268 402.0

        - &id269 158.0

        *id5: *id50

        *id7: -13434829

        *id8: *id1

      Pulden:

        *id2: *id10

        *id3: *id1

        *id4:

        - 745.9431956999756

        - 2510.1557537258736

        - &id216 836.0

        - &id58 2543.0

        - *id57

        - *id58

        - 955.0013619788828

        - 2488.0014848641954

        - &id193 1088.0

        - &id194 2633.0

        - 1169.0021213917175

        - 2635.9186799461195

        - &id259 1117.0

        - &id260 2764.0

        - 988.0

        - 2817.0

        - 747.0

        - 2705.0

        *id5: *id6

        *id7: &id67 -16724890

        *id8: *id1

      &id283 Issel:

        *id2: 40

        *id3: *id16

        *id4:

        - 745.0

        - 1175.0

        - &id294 822.0

        - &id295 1147.0

        - 977.0

        - 1115.0

        - 995.0

        - &id156 1192.0

        - 1035.0

        - 1197.0

        - 1082.0

        - 1165.0

        - *id59

        - 1097.0

        - &id290 1172.0

        - &id291 1077.0

        - &id322 1225.0

        - &id323 1112.0

        - &id190 1232.0

        - 1170.0

        - &id297 1185.0

        - &id298 1285.0

        - *id60

        - 1325.0

        - &id79 905.0

        - 1340.0

        - &id292 752.0

        - &id293 1362.0

        - 680.0

        - 1305.0

        - 670.0

        - 1237.0

        *id39:

          *id40:

          - 950.0

          - 1265.0

        *id5: &id80 Inselreich

        *id7: &id164 -16751002

        *id8: *id13

      &id296 Ussel:

        *id2: &id100 70

        *id3: *id1

        *id4:

        - *id60

        - 1528.0

        - 1222.0

        - 1450.0

        - 1318.0

        - 1380.0

        - *id61

        - *id62

        - *id63

        - *id64

        - 1327.8826116359965

        - 1625.3635460775288

        - 1237.615219966127

        - 1642.1571632982955

        - *id65

        - *id66

        - 868.2204195658029

        - 1547.902718792721

        *id5: *id52

        *id7: *id67

        *id8: *id1

      &id299 Ichmen:

        *id2: *id10

        *id3: *id68

        *id4:

        - 1632.9876735840226

        - 2584.396785770011

        - *id69

        - *id70

        - *id71

        - *id72

        - 1783.5813402684253

        - 2377.0755120048298

        - 1907.0

        - 2355.0

        - *id73

        - 2460.0

        - 2000.0020593515683

        - 2590.9782976027036

        - *id74

        - *id75

        - *id76

        - *id77

        - 1644.0

        - 2666.0

        *id5: *id6

        *id7: -10027264

        *id8: *id68

      &id284 Insula:

        *id2: *id10

        *id3: *id16

        *id4:

        - 432.0

        - 916.0

        - 648.0

        - 892.0

        - 850.0

        - 806.0

        - &id304 888.0

        - &id305 708.0

        - &id97 982.0

        - 808.0

        - 896.0

        - 970.0

        - 630.0

        - 1030.0

        - *id78

        - 1028.0

        *id39:

          *id40:

          - 777.5

          - *id79

        *id5: *id80

        *id7: -16777012

        *id8: *id1

      &id309 Rimm:

        *id2: *id81

        *id3: *id1

        *id4:

        - &id150 1905.0

        - 833.0

        - 1880.0

        - 762.0

        - &id115 1869.0

        - 700.0

        - 1865.0

        - &id217 666.0

        - &id188 1900.0

        - &id90 643.0

        - 1918.0

        - *id35

        - &id181 1945.0

        - &id124 593.0

        - *id82

        - &id313 603.0

        - 2003.0

        - &id153 646.0

        - 2029.822103148024

        - 730.0514400535834

        - *id41

        - *id42

        - 2059.8601251298614

        - 902.9905290385589

        - *id83

        - *id84

        - *id85

        - *id86

        - *id87

        - &id155 1040.0

        - *id88

        - 993.0

        - &id141 1924.0

        - 912.0

        *id5: *id44

        *id7: *id89

        *id8: *id68

      &id315 Sangum:

        *id2: *id10

        *id3: *id16

        *id4:

        - 207.5026492127924

        - 367.51596295586705

        - 137.06758619821008

        - 411.1113994247446

        - &id264 96.5820553246381

        - &id265 476.2198652716067

        - 91.0

        - 564.0

        - 122.0

        - 685.0

        - 204.0

        - &id160 716.0

        - 250.0

        - 730.0

        - *id49

        - 710.0

        - &id161 355.0

        - 671.0

        - 414.0

        - *id90

        - 458.82000000000005

        - 616.74

        - &id256 253.9875038098141

        - &id257 644.9878085949406

        - &id173 252.0

        - &id174 484.0

        *id39:

          *id40:

          - 177.5

          - *id91

        *id5: *id50

        *id7: *id92

        *id8: *id13

      Sumselbrum:

        *id2: *id10

        *id3: *id1

        *id4:

        - &id162 669.0

        - &id163 408.0

        - 716.081081081081

        - 354.51351351351354

        - *id93

        - *id94

        - *id9

        - *id49

        - &id166 776.0

        - &id243 404.0

        - &id244 743.7765887416659

        - &id245 506.6847497679129

        *id5: *id50

        *id7: *id95

        *id8: *id1

      &id281 Ralle:

        *id2: *id96

        *id3: *id16

        *id4:

        - 1353.0

        - &id98 871.0

        - &id282 1333.0

        - *id97

        - 1480.0

        - 1011.0

        - 1568.0

        - 940.0

        - &id321 1564.0

        - *id98

        - 1517.0

        - 831.0

        - 1444.0

        - *id99

        - 1411.0

        - &id189 764.0

        *id5: *id80

        *id7: -16737844

        *id8: *id13

      Assal:

        *id2: *id100

        *id3: *id16

        *id4:

        - *id101

        - *id102

        - 1313.2117971484115

        - 1772.9675756662498

        - *id103

        - *id104

        - &id220 1509.126089965398

        - &id221 1803.5914186851212

        - 1580.8039168744178

        - 1652.8673660762774

        - *id105

        - *id106

        - *id63

        - *id64

        - 1328.2991150442479

        - 1625.2867256637169

        *id5: *id52

        *id7: &id184 -6724096

        *id8: *id1

      &id330 Gingol:

        *id2: *id10

        *id3: *id1

        *id4:

        - *id107

        - *id108

        - 1364.0

        - 55.0

        - *id103

        - 40.0

        - 1467.0

        - 31.0

        - 1545.0

        - 36.0

        - 1591.0

        - &id261 57.0

        - 1605.0

        - &id262 86.0

        - &id236 1609.0

        - *id109

        - &id200 1602.0

        - &id201 176.0

        - 1545.7885386819485

        - 144.04126074498566

        - &id202 1464.0

        - &id203 160.0

        - 1326.256734598648

        - 227.85466427737936

        *id5: *id50

        *id7: *id110

        *id8: *id1

      Folmen:

        *id2: 25

        *id3: *id1

        *id4:

        - *id111

        - *id112

        - 610.2154234150655

        - 2337.510422507618

        - 642.3661107930384

        - 2243.3743348731555

        - 595.4002643544334

        - 2164.342202319401

        - 595.3137784739039

        - 2164.762619444261

        *id5: *id6

        *id7: *id110

        *id8: *id1

      &id311 Deltare:

        *id2: &id272 35

        *id3: *id13

        *id4:

        - 1859.0

        - 664.0

        - 1847.0

        - 653.0

        - &id122 1849.0

        - &id230 645.0

        - &id121 1851.0

        - 637.0

        - &id118 1853.0

        - &id123 629.0

        - &id119 1857.0

        - *id113

        - 1864.0

        - *id114

        - *id115

        - *id24

        - 1866.0

        - *id116

        - *id117

        - 592.0

        - 1856.0

        - *id28

        - *id118

        - &id213 589.0

        - 1854.0

        - &id140 596.0

        - *id119

        - 601.0

        - *id119

        - *id120

        - *id121

        - 611.0

        - *id122

        - *id34

        - 1846.0

        - *id123

        - 1843.0

        - 636.0

        - 1839.0

        - 642.0

        - 1827.0

        - 633.0

        - 1816.0

        - 623.0

        - 1796.0

        - 604.0

        - 1791.0

        - *id124

        - 1784.0

        - *id22

        - 1789.0

        - &id130 569.0

        - &id128 1797.0

        - *id125

        - &id126 1802.0

        - 548.0

        - &id182 1805.0

        - 535.0

        - *id126

        - &id175 525.0

        - *id127

        - &id208 529.0

        - *id128

        - &id131 536.0

        - *id128

        - 544.0

        - 1792.0

        - &id145 551.0

        - &id185 1788.0

        - &id218 558.0

        - 1782.0

        - *id129

        - 1779.0

        - *id130

        - 1772.0

        - 560.0

        - 1769.0

        - &id142 553.0

        - 1761.0

        - *id131

        - &id334 1755.0

        - &id335 523.0

        - 1752.0

        - 514.0

        - &id132 1750.0

        - 506.0

        - &id134 1749.0

        - 499.0

        - *id132

        - *id133

        - *id134

        - 479.0

        - *id135

        - *id136

        - 1774.9988518365951

        - 430.9421804319436

        - 1785.4883864143412

        - 431.12603633901216

        - *id137

        - *id17

        - 1809.9577057361319

        - 427.2818069481546

        - 1828.9864355600268

        - 430.09046914911045

        - 1873.0135232646792

        - 440.85930502745487

        - 1936.8658694076184

        - 447.134398751453

        - 1958.3936387577746

        - 469.1552894387313

        - 1963.0

        - 492.0

        - 1962.2214281661466

        - 505.9929952735671

        - 1962.4899788314622

        - 516.9811414487037

        - 1962.5685113043066

        - 525.9742743563269

        - 1961.822539765715

        - 538.9895328833976

        - 1956.7758524189626

        - 557.9336128202026

        - 1950.810403050048

        - 575.9281651957056

        - &id138 1947.4137931034484

        - &id139 584.9655172413793

        - *id138

        - *id139

        - 1931.0

        - *id140

        - *id141

        - *id36

        - 1920.0

        - 609.0

        - 1915.0

        - *id24

        - 1913.0

        - *id140

        - 1911.0

        - 585.0

        - 1906.0

        - *id130

        - &id147 1902.0

        - *id142

        - &id151 1897.0

        - *id143

        - 1889.0

        - 537.0

        - 1887.0

        - 541.0

        - &id187 1890.0

        - *id144

        - 1892.0

        - *id145

        - 1895.0

        - 556.0

        - &id152 1896.0

        - 563.0

        - *id146

        - 570.0

        - *id146

        - *id23

        - *id147

        - *id148

        - 1903.0

        - *id149

        - *id150

        - *id24

        - *id147

        - 614.0

        - *id146

        - 619.0

        - *id151

        - 624.0

        - *id152

        - 632.0

        - *id152

        - 638.0

        - &id333 1886.0

        - *id153

        - *id154

        - *id11

        - 1867.0

        - 657.0

        *id39:

          *id40:

          - 1837.5

          - 500.0

        *id5: *id44

        *id7: -16737997

        *id8: *id16

      &id280 Zumpa:

        *id2: *id10

        *id3: *id1

        *id4:

        - &id285 967.0

        - &id286 972.0

        - *id155

        - 860.0

        - *id59

        - 897.0

        - 1190.0

        - 952.0

        - *id156

        - *id157

        - 1120.0

        - 1017.0

        - 1070.0

        - 1020.0

        *id5: *id80

        *id7: -13369396

        *id8: *id1

      Zongatelka:

        *id2: *id96

        *id3: *id16

        *id4:

        - *id158

        - *id159

        - *id55

        - *id56

        - *id93

        - *id94

        - *id160

        - *id161

        - *id162

        - *id163

        - 576.5059868155523

        - 357.61496031212164

        - &id171 584.0

        - &id172 348.0

        *id5: *id50

        *id7: *id164

        *id8: *id13

      Tronkidos:

        *id2: *id10

        *id3: *id1

        *id4:

        - 2008.7677291710781

        - 664.0741211825479

        - 2034.0

        - 694.0

        - 2048.0

        - 697.0

        - 2062.0

        - 707.0

        - 2087.0

        - *id160

        - 2118.0

        - 717.0

        - &id179 2137.0

        - *id160

        - &id224 2146.0

        - &id165 706.0

        - 2167.0

        - *id165

        - 2174.0

        - 728.0

        - 2180.0

        - 761.0

        - 2184.0

        - *id166

        - 2185.0

        - 814.0

        - 2154.6924214417745

        - 885.9940850277264

        - *id43

        - *id167

        - 2144.7970123022847

        - 792.9569420035149

        - *id168

        - *id42

        - *id41

        - *id42

        *id5: *id44

        *id7: *id110

        *id8: *id1

      Lala:

        *id2: *id10

        *id3: *id1

        *id4:

        - &id266 181.28607166041783

        - &id267 298.8868707345136

        - *id169

        - *id170

        - *id171

        - *id172

        - 477.75446229419947

        - 475.3456038927911

        - *id173

        - *id174

        *id5: *id50

        *id7: &id279 -10092442

        *id8: *id1

      &id314 Fallados:

        *id2: *id10

        *id3: *id13

        *id4:

        - 2160.0

        - 583.0

        - 2186.0

        - *id175

        - 2176.0

        - 463.0

        - 2153.0

        - 383.0

        - *id176

        - *id177

        - &id180 2050.0

        - 330.0

        - 1987.7387520989616

        - 364.00535045438437

        - 2007.6295960703385

        - 369.41906796163664

        - 2030.3862303111705

        - 381.13381948671844

        - 2045.7238127666737

        - 397.9115095929851

        - 2059.6444238435965

        - 412.40372562184155

        - 2077.5300751051327

        - 429.9559714187379

        - 2081.978001955324

        - 434.1810773932946

        - 2083.625072929834

        - 448.00353781021425

        - 2087.4546498179625

        - 488.03702940146155

        - 2085.386827490283

        - 513.5583708722869

        - 2086.16548595302

        - 539.340297507237

        - 2091.814326969792

        - 565.8553453141503

        - 2105.0

        - *id23

        - 2133.0

        - *id140

        *id39:

          *id40:

          - 2122.0

          - *id178

        *id5: *id44

        *id7: -10027162

        *id8: *id16

      Honita:

        *id2: *id100

        *id3: *id1

        *id4:

        - 1765.9780633108332

        - 1430.1202619716478

        - 1823.9904489194776

        - 1449.4320514879394

        - &id222 1948.0

        - &id223 1448.0

        - 1990.7985106885221

        - 1421.0803715393415

        - 2046.6242865826255

        - 1425.9444949591352

        - 2120.770155769775

        - 1407.966565595269

        - *id179

        - 1297.0

        - *id180

        - 1210.0

        - *id181

        - &id183 1212.0

        - 1877.0

        - 1157.0

        - *id182

        - *id183

        - 1742.0

        - 1320.0

        *id5: *id52

        *id7: *id184

        *id8: *id1

      &id310 Ulumbra:

        *id2: *id81

        *id3: *id1

        *id4:

        - *id185

        - *id120

        - &id232 1744.3887462981245

        - &id233 509.70641658440275

        - &id231 1726.0

        - &id211 578.0

        - 1681.1838858669632

        - 629.4697104316156

        - 1691.0

        - 704.0

        - 1695.0

        - 791.0

        - *id186

        - 855.0

        - 1776.0

        - 930.0

        - 1835.0

        - 983.0

        - *id187

        - 981.0

        - 1916.0

        - *id46

        - *id188

        - &id324 838.0

        - 1873.0

        - *id189

        - &id325 1855.0

        - &id326 668.0

        *id5: *id44

        *id7: -6697984

        *id8: *id68

      &id303 Rollum:

        *id2: *id10

        *id3: *id1

        *id4:

        - &id246 788.0036180623523

        - &id247 565.0302313228468

        - 913.0670217872953

        - 500.12914997205615

        - *id190

        - &id197 534.0

        - *id103

        - *id136

        - &id198 1502.0

        - &id199 512.0

        - &id228 1472.0

        - &id229 606.0

        - 1322.0

        - 628.0

        - 1108.0

        - 622.0

        - &id258 816.0

        - *id36

        *id39:

          *id40:

          - 1130.0

          - *id129

        *id5: *id50

        *id7: *id110

        *id8: *id1

      &id329 Manmen:

        *id2: *id10

        *id3: *id1

        *id4:

        - 950.3183197060531

        - 2248.662955567364

        - 1104.0585991770713

        - 2285.3489720162756

        - 1380.5301795264497

        - 2360.632913170126

        - *id191

        - *id192

        - 1238.3116918823134

        - 2638.416052236986

        - *id193

        - *id194

        - &id214 955.0

        - &id215 2488.0

        *id5: *id6

        *id7: -3750293

        *id8: *id1

      Schlomen:

        *id2: *id10

        *id3: *id1

        *id4:

        - &id251 1470.665303092109

        - &id252 2017.240377013588

        - *id195

        - *id196

        - 1104.0819078972004

        - 2285.355329917753

        - 1380.3715394325677

        - 2360.718638017349

        - 1700.0

        - 2188.0

        *id5: *id6

        *id7: *id110

        *id8: *id16

      Troysan:

        *id2: *id10

        *id3: *id1

        *id4:

        - 1143.978312343662

        - 353.91898457010495

        - *id190

        - *id197

        - *id103

        - *id136

        - *id198

        - *id199

        - &id239 1650.0

        - &id240 398.0

        - &id237 1598.0

        - &id238 272.0

        - *id200

        - *id201

        - 1546.0

        - 144.0

        - *id202

        - *id203

        - 1326.0

        - *id56

        - 1217.2622249117562

        - 318.3580049692175

        *id5: *id50

        *id7: &id277 -6711040

        *id8: *id1

      Dumsdidums:

        *id2: *id10

        *id3: *id1

        *id4:

        - *id38

        - *id204

        - 1977.0

        - 376.0

        - *id37

        - *id205

        - 2022.0

        - *id206

        - *id207

        - *id208

        - *id209

        - *id129

        - *id210

        - 526.0

        - 2045.0

        - 504.0

        - 2053.0

        - 491.0

        - 2049.0

        - 511.0

        - 2044.0

        - *id208

        - 2051.0

        - *id211

        - 2055.0

        - *id149

        - *id212

        - *id213

        - 2092.0622429240584

        - 566.9952906284001

        - 2086.184461584871

        - 539.9685939576625

        - 2085.314639053263

        - 511.1681612024419

        - 2087.530674820403

        - 488.9423260750903

        - 2085.701722098102

        - 467.16337490672174

        - 2082.144009655429

        - 434.3387688637613

        - 2066.2093652600583

        - 419.20237757296957

        - 2046.8197378801722

        - 399.1224835334956

        - 2030.6798768237247

        - 381.2882803547517

        - 2008.6359664805836

        - 369.6929731371317

        *id5: *id44

        *id7: -16751104

        *id8: *id1

      Felden:

        *id2: *id10

        *id3: *id16

        *id4:

        - 642.4177097368165

        - 2243.4615412742005

        - 595.6319848083987

        - 2164.389870566751

        - 649.461738455601

        - 2207.6569768038094

        - 686.4472908694197

        - 2236.769216792598

        - 771.027550623312

        - 2267.272331370368

        - 854.0200426651062

        - 2270.47022690826

        - 925.461072875458

        - 2243.177287202904

        - 950.6098458493537

        - 2248.7325205045763

        - *id214

        - *id215

        - *id57

        - *id58

        - *id216

        - *id58

        - *id217

        - 2481.0

        - *id218

        - 2401.0

        - 533.4444353317477

        - 2348.151972443205

        - 554.3088428486485

        - 2364.3790385662023

        - 610.3588970268538

        - 2337.4414693119365

        *id5: *id6

        *id7: *id219

        *id8: *id1

      Tamtaram:

        *id2: &id255 60

        *id3: *id1

        *id4:

        - *id220

        - *id221

        - 1578.6696193771627

        - 1654.84553633218

        - 1721.9919056295505

        - 1522.1185171875388

        - 1826.0163970647793

        - 1449.4084658230013

        - *id222

        - *id223

        - &id226 2065.0

        - &id227 1497.0

        - *id224

        - &id225 1555.0

        - *id19

        - &id273 1608.0

        - &id250 1840.0

        - 1681.0

        - 1693.0

        - 1777.0

        - &id248 1602.9617965105267

        - &id249 1824.863802218613

        *id5: *id52

        *id7: -65332

        *id8: *id1

      Hanatoa:

        *id2: 65

        *id3: *id1

        *id4:

        - *id222

        - *id223

        - 1990.7178006043978

        - 1421.131136985211

        - 2046.9665703577639

        - 1425.8615024256428

        - 2120.77018086019

        - 1407.9663940472765

        - 2135.229783561694

        - 1309.1033101570526

        - 2262.0

        - 1327.0

        - 2325.0

        - &id274 1385.0

        - &id316 2337.0

        - 1452.0

        - 2290.0

        - 1515.0

        - 2192.0

        - 1552.0

        - *id224

        - *id225

        - *id226

        - *id227

        *id5: *id52

        *id7: -6684928

        *id8: *id1

      Surilion:

        *id2: *id10

        *id3: *id1

        *id4:

        - *id228

        - *id229

        - 1543.0

        - *id230

        - 1633.0

        - 651.0

        - 1680.8202487889873

        - 629.8873346604825

        - *id231

        - *id211

        - *id232

        - *id233

        - *id135

        - *id136

        - *id234

        - *id235

        - 1701.0

        - 311.0

        - 1647.0

        - 230.0

        - 1627.0

        - *id203

        - *id236

        - *id109

        - *id200

        - *id201

        - *id237

        - *id238

        - *id239

        - *id240

        - *id198

        - *id199

        *id39:

          *id40:

          - 1673.3333333333335

          - 446.6666666666667

        *id5: *id50

        *id7: *id89

        *id8: *id1

      Tumbaido:

        *id2: *id10

        *id3: *id1

        *id4:

        - 913.2268495255479

        - 500.0462080983066

        - *id190

        - *id197

        - 1143.9640464528916

        - 353.9259070860146

        - *id241

        - *id242

        - *id166

        - *id243

        - *id244

        - *id245

        - *id246

        - *id247

        *id5: *id50

        *id7: -26215

        *id8: *id1

      Gagmen:

        *id2: *id81

        *id3: *id16

        *id4:

        - 1450.8829524308424

        - 1816.289910265708

        - *id220

        - *id221

        - *id248

        - *id249

        - 1652.1128731712176

        - 1798.7353664997213

        - 1686.0

        - *id250

        - 1655.0

        - *id74

        - 1567.4581380854725

        - 2089.31105900852

        - *id251

        - *id252

        - *id253

        - *id254

        *id5: *id6

        *id7: -3947772

        *id8: *id1

      Dudeldu:

        *id2: *id255

        *id3: *id68

        *id4:

        - 576.1924909734477

        - 357.35805844983213

        - 478.1194803468596

        - 474.90809427731443

        - *id173

        - *id174

        - *id256

        - *id257

        - 562.0

        - *id36

        - *id258

        - *id36

        - *id162

        - *id163

        *id5: *id50

        *id7: -65536

        *id8: *id16

      &id338 Trumellen:

        *id2: *id10

        *id3: *id1

        *id4:

        - 1070.9645758354757

        - 2782.9137789203087

        - *id259

        - *id260

        - 1168.905789952965

        - 2635.9152089180325

        - 1238.0219711240832

        - 2638.4056129774644

        - 1280.1107248933943

        - 2608.151829251913

        - 1290.0

        - 2624.0

        - 1312.0

        - 2635.0

        - 1315.0

        - 2682.0

        - 1281.0

        - 2736.0

        - 1282.0

        - &id340 2804.0

        - 1154.0

        - 2805.0

        *id5: *id6

        *id7: -8479423

        *id8: *id1

      &id318 Troyste:

        *id2: *id10

        *id3: *id1

        *id4:

        - 97.0520059435364

        - 146.98365527488855

        - *id261

        - 149.0

        - 37.0

        - 161.0

        - 27.0

        - 186.0

        - 30.0

        - 213.0

        - 38.0

        - 242.0

        - *id261

        - 268.0

        - 82.0

        - 293.0

        - 87.0

        - *id177

        - *id262

        - 370.0

        - 85.0

        - *id263

        - *id264

        - *id265

        - 136.94697111130844

        - 411.30537152037243

        - 207.57022539403007

        - 367.6928621702997

        - *id266

        - *id267

        - &id270 68.0

        - &id271 168.0

        *id5: *id50

        *id7: -3381760

        *id8: *id1

      Gaga:

        *id2: *id10

        *id3: *id1

        *id4:

        - 162.0

        - 100.0

        - *id268

        - *id269

        - *id169

        - *id170

        - 182.22268739984315

        - 299.96900467575875

        - *id270

        - *id271

        *id5: *id50

        *id7: *id110

        *id8: *id1

      &id300 Zumpf-Isle:

        *id2: *id272

        *id3: *id16

        *id4:

        - 1387.0

        - 2673.0

        - 1460.0

        - 2649.0

        - 1567.0

        - 2647.0

        - *id273

        - 2721.0

        - &id346 1653.0

        - &id347 2725.0

        - 1632.0

        - 2793.0

        - 1500.0

        - &id332 2858.0

        - *id274

        - 2795.0

        - 1349.0

        - 2749.0

        *id5: *id6

        *id7: *id110

        *id8: *id68

      Flomen:

        *id2: *id10

        *id3: *id1

        *id4:

        - 550.0

        - 1927.0

        - 795.0

        - *id275

        - *id11

        - *id12

        - 445.0

        - 2081.0

        - 290.0

        - *id276

        *id5: *id6

        *id7: *id277

        *id8: *id1

    continents:

      *id50:

        &id278 prodBonus: *id68

        *id7: -13210

      *id52:

        *id278: *id1

        *id7: *id279

      *id44:

        *id278: *id1

        *id7: *id45

      *id6:

        *id278: *id68

        *id7: -3342337

      *id80:

        *id278: *id13

        *id7: -16724737

    links:

      *id280:

        *id281:

        - - 1191.6126170527352

          - 988.2838836865451

          - *id282

          - *id97

        *id283:

        - - 1141.4416792762627

          - 1011.0439779788159

          - 1161.573033707865

          - 1083.5168539325844

        *id284:

        - - *id285

          - *id286

          - &id301 910.7815695600475

          - &id302 942.15564803805

      *id287:

        *id288:

        - - 1297.6

          - 1831.6

          - *id289

          - 1899.2

      *id283:

        *id280:

        - - *id290

          - *id291

          - 1152.8022922636103

          - 1007.8882521489971

        *id287:

        - - *id292

          - *id293

          - 774.7896499876174

          - 1558.726162457566

        *id284:

        - - *id294

          - *id295

          - 787.5909408790145

          - 994.4531712302975

      *id296:

        *id283:

        - - 1276.3927458203457

          - 1410.3386228393313

          - *id297

          - *id298

      *id299:

        *id300:

        - - &id350 1644.502617801047

          - &id351 2666.4921465968587

          - &id348 1590.8163265306123

          - &id349 2690.8163265306125

      *id284:

        *id280:

        - - *id301

          - *id302

          - *id285

          - *id286

        *id303:

        - - *id304

          - *id305

          - &id327 894.8901755696676

          - &id328 607.4034366828539

      *id306:

        *id300:

        - - *id307

          - *id308

          - &id343 1485.7760412119096

          - &id344 2648.5182048371607

      *id309:

        *id310:

        - - 1905.1702793893678

          - 833.7080037768449

          - 1898.9774375503625

          - 835.1974214343271

        *id311:

        - - *id181

          - *id124

          - 1942.0312727980156

          - 588.5840182870484

        *id312:

        - - *id82

          - *id313

          - 1999.0076923076922

          - 601.3615384615384

      *id314:

        *id315:

        - - 2167.4

          - 568.6

          - *id316

          - &id317 568.0

        - - &id319 0.0

          - *id317

          - 92.0

          - *id317

        *id318:

        - - 2139.8

          - 365.0

          - *id316

          - &id320 372.0

        - - *id319

          - *id320

          - &id337 85.8

          - 365.6

      *id315:

        *id314:

        - - 92.2

          - 567.8

          - *id319

          - *id317

        - - *id316

          - *id317

          - 2167.2

          - 568.4

      *id281:

        *id310:

        - - *id321

          - *id98

          - 1695.9740072202167

          - 792.6404332129964

        *id283:

        - - *id282

          - *id97

          - *id322

          - *id323

      *id310:

        *id309:

        - - *id188

          - *id324

          - 1905.8633747349288

          - 836.5898212662829

        *id311:

        - - *id325

          - *id326

          - 1858.8188679245284

          - 663.833962264151

      *id303:

        *id284:

        - - *id327

          - *id328

          - *id304

          - *id305

      *id288:

        *id287:

        - - *id289

          - *id146

          - 1297.8841242744963

          - 1831.489518607033

      *id329:

        *id300:

        - - 1344.6364977935566

          - 2561.4325097208366

          - 1418.0296359017782

          - 2662.7984758679086

      *id330:

        *id300:

        - - 1572.0

          - &id342 56.0

          - &id331 1576.0

          - *id319

        - - *id331

          - *id332

          - *id331

          - 2820.0

      *id311:

        *id309:

        - - *id333

          - *id153

          - 1888.845496009122

          - 650.330102622577

        *id310:

        - - *id334

          - *id335

          - 1751.0620896053024

          - 524.7471863707755

      *id312:

        *id309:

        - - *id336

          - *id35

          - 1997.2124166239098

          - 621.1133914828117

      *id318:

        *id314:

        - - *id337

          - 365.8

          - *id319

          - *id320

        - - *id316

          - *id320

          - 2139.6

          - 364.8

      *id338:

        *id330:

        - - *id339

          - *id340

          - &id341 1292.0

          - *id332

        - - *id341

          - *id319

          - 1360.0

          - *id342

      *id300:

        *id306:

        - - *id343

          - *id344

          - *id307

          - *id308

        *id345:

        - - *id346

          - *id347

          - 1752.325581395349

          - 2683.0232558139537

        *id338:

        - - 1351.828880157171

          - 2743.342239685658

          - 1294.4430255402751

          - 2714.64931237721

        *id299:

        - - *id348

          - *id349

          - *id350

          - *id351

     

    Nachricht geändert durch 38a9aa42-a2d4-4137-867a-d90e1f48b945

Legend

  • Correct Answers - 10 points
  • Helpful Answers - 5 points