Friday 29 of August 2008 15:45:19 Vincent Verhoeven napisaƂ(a):
> The current status is that it now manages to draw the maps. Only
> problem is that those are useless because they lack pretty colors. :)

Could you apply the attached patch and see what happens?

What I did there is I normalize the universe size to some arbitrary constant 
that is larger than any imaginable image size to preserve any meaningful 
details and small enough to avoid overflow errors. Say, a million. This of 
course can lose some precision of objects are really close to each other, but 
it's irelevant normally (the only problem this may cause is with zooming). The 
default planet influence is set to 1/10 of this arbitrary constand; this way 
whatever the size of the universe, something will appear, but, on the other 
hand, this destroys visual hints about size differences in the same ruleset. 
That's why the value modifier option is still useful.
-- 
Ecce Jezuch
"Our flesh embedded in counters of iniquity
It seems like we are all just merchandise
Not civilized" - T. Haake


----------------------------------------------------------------------
Najlepsze oferty kupna, sprzedazy i wynajmu nieruchomosci!
Kliknij >>> http://link.interia.pl/f1f24
Index: 
/home/jezuch/eclipse/starmapper3/src-model-tparsec/jezuch/utils/starmapper3/model/tparsec/NodeInfoDumpReader.java
===================================================================
--- 
/home/jezuch/eclipse/starmapper3/src-model-tparsec/jezuch/utils/starmapper3/model/tparsec/NodeInfoDumpReader.java
   (revision 573)
+++ 
/home/jezuch/eclipse/starmapper3/src-model-tparsec/jezuch/utils/starmapper3/model/tparsec/NodeInfoDumpReader.java
   (working copy)
@@ -21,6 +21,7 @@
 import java.io.IOException;
 import java.io.LineNumberReader;
 import java.io.Reader;
+import java.math.BigDecimal;
 import java.text.ParseException;
 import java.util.Map;
 import java.util.SortedMap;
@@ -51,8 +52,9 @@
        private final float valueModfier;
        private final boolean drawFleets;
        private final boolean drawFleetNames;
+       private final BigDecimal scalingFactor;
 
-       public NodeInfoDumpReader(Reader reader, SortedMap<Integer, TPRegion> 
regions, LookupSet<TPRegion, String> regionsLookup, TPRegion reporter, int 
reportTime, TParsecDumpDataModel model, boolean drawFleets, Boolean 
drawFleetNames) throws ConversionException, IOException
+       public NodeInfoDumpReader(Reader reader, SortedMap<Integer, TPRegion> 
regions, LookupSet<TPRegion, String> regionsLookup, TPRegion reporter, int 
reportTime, TParsecDumpDataModel model, boolean drawFleets, Boolean 
drawFleetNames, BigDecimal scalingFactor) throws ConversionException, 
IOException
        {
                this.reader=reader instanceof LineNumberReader
                        ? (LineNumberReader)reader
@@ -66,6 +68,7 @@
                
this.valueModfier=model.getConfig().get(TParsecDumpDataModel.SET_TP_VALUE_MODIFIER);
                this.drawFleets=drawFleets;
                this.drawFleetNames=drawFleetNames;
+               this.scalingFactor=scalingFactor;
 
                //skip header
                parser.getLine();
@@ -145,7 +148,7 @@
                                        }
                                        else
                                                throw new 
ProducerException("Not implemented yet");
-                                       return new TPNodeInfo(object, reporter, 
time, findRegion(line[6]), valueModfier, drawFleetNames);
+                                       return new TPNodeInfo(object, reporter, 
time, findRegion(line[6]), valueModfier, drawFleetNames, scalingFactor);
                                }
                        }
                }
Index: 
/home/jezuch/eclipse/starmapper3/src-model-tparsec/jezuch/utils/starmapper3/model/tparsec/NodeInfoReader.java
===================================================================
--- 
/home/jezuch/eclipse/starmapper3/src-model-tparsec/jezuch/utils/starmapper3/model/tparsec/NodeInfoReader.java
       (revision 573)
+++ 
/home/jezuch/eclipse/starmapper3/src-model-tparsec/jezuch/utils/starmapper3/model/tparsec/NodeInfoReader.java
       (working copy)
@@ -23,6 +23,7 @@
 import java.io.IOException;
 import java.io.OutputStreamWriter;
 import java.io.Writer;
+import java.math.BigDecimal;
 import java.util.Iterator;
 import java.util.SortedMap;
 
@@ -28,6 +29,7 @@
 
 import jezuch.utils.parameters.ConversionException;
 import jezuch.utils.parameters.ParametersException;
+import jezuch.utils.starmapper3.model.DataModel;
 import jezuch.utils.starmapper3.model.Producer;
 import jezuch.utils.starmapper3.model.ProducerException;
 import net.thousandparsec.netlib.SequentialConnection;
@@ -48,7 +50,7 @@
        private final TPRegion reporter;
        private final int time;
        private final SortedMap<Integer, TPRegion> regions;
-       private final TParsecDataModel model;
+       private final DataModel<TPNode, TPRegion, TPNodeInfo> model;
        private final float valueModfier;
        private final File repFile;
        private final boolean drawFleets;
@@ -53,8 +55,9 @@
        private final File repFile;
        private final boolean drawFleets;
        private final boolean drawFleetNames;
+       private final BigDecimal scalingFactor;
 
-       NodeInfoReader(SequentialConnection<TP03Visitor> conn, TPRegion 
reporter, int time, SortedMap<Integer, TPRegion> regions, TParsecDataModel 
model, File repFile, boolean drawFleets, boolean drawFleetNames) throws 
ConversionException, IOException
+       NodeInfoReader(SequentialConnection<TP03Visitor> conn, TPRegion 
reporter, int time, SortedMap<Integer, TPRegion> regions, TParsecDataModel 
model, File repFile, boolean drawFleets, boolean drawFleetNames, BigDecimal 
scalingFactor) throws ConversionException, IOException
        {
                this.iter=new ObjectIterator(conn);
                this.reporter=reporter;
@@ -65,6 +68,7 @@
                this.repFile=repFile;
                this.drawFleets=drawFleets;
                this.drawFleetNames=drawFleetNames;
+               this.scalingFactor=scalingFactor;
 
                if (repFile != null)
                {
@@ -90,7 +94,7 @@
                }
        }
 
-       private TPRegion findRegion(int playerId) throws ParametersException, 
IOException
+       private TPRegion findRegion(int playerId) throws ParametersException, 
IOException, ProducerException
        {
                if (playerId == -1)
                        return null;
@@ -167,7 +171,7 @@
                                                        throw new 
ProducerException(ex);
                                                }
 
-                                       return new TPNodeInfo(object, reporter, 
time, owner, valueModfier, drawFleetNames);
+                                       return new TPNodeInfo(object, reporter, 
time, owner, valueModfier, drawFleetNames, scalingFactor);
                                }
                        }
 
Index: 
/home/jezuch/eclipse/starmapper3/src-model-tparsec/jezuch/utils/starmapper3/model/tparsec/TParsecDataModel.java
===================================================================
--- 
/home/jezuch/eclipse/starmapper3/src-model-tparsec/jezuch/utils/starmapper3/model/tparsec/TParsecDataModel.java
     (revision 573)
+++ 
/home/jezuch/eclipse/starmapper3/src-model-tparsec/jezuch/utils/starmapper3/model/tparsec/TParsecDataModel.java
     (working copy)
@@ -23,6 +23,8 @@
 import java.io.IOException;
 import java.io.OutputStreamWriter;
 import java.io.Writer;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.net.URI;
 import java.util.Collections;
 import java.util.List;
@@ -210,7 +212,18 @@
                        null,
                        "dump-name-pattern");
 
-       public static final long OWNED_PLANET_BASE_VALUE=2000000000l;
+       /**
+        * A size of the universe (actually the smallest boundig box containing 
all
+        * the galaxies) that the actual universe is normalized to. The sizes in
+        * Thousand Parsec can be quite large (in range of billions for minisec 
and
+        * RFTS and even more for Risk, but other rulesets can have distances 
in the
+        * ranges of 100s). This of course will annihilate any visual 
differences of
+        * sizes of the universes within the same ruleset, but you can tweak the
+        * default planet value with the option [EMAIL PROTECTED] 
#SET_TP_VALUE_MODIFIER}.
+        */
+       public static final long NORMALIZED_SIZE=1000000l;
+
+       public static final long OWNED_PLANET_BASE_VALUE=NORMALIZED_SIZE / 10;
        public static final long OWNED_FLEET_BASE_VALUE=OWNED_PLANET_BASE_VALUE 
/ 10;
 
        private static final FrameDecoder<TP03Visitor> PROTOCOL=new 
TP03Decoder();
@@ -236,6 +249,7 @@
        ScheduledFuture<?> pingFuture;
        Object universe;
        private LongRectangle mapBounds;
+       BigDecimal scalingFactor;
 
        File prepareFile(String name) throws IOException
        {
@@ -373,6 +387,16 @@
                                }
                        }
 
+                       //normalize (width only; it's about the order of 
magnitude, not exact size)
+                       //(normalize after dump to preserve original values)
+                       this.scalingFactor = BigDecimal.valueOf(NORMALIZED_SIZE)
+                               .divide(BigDecimal.valueOf(mapBounds.xmax - 
mapBounds.xmin + 1), 9, RoundingMode.FLOOR);
+                       mapBounds=new LongRectangle(
+                               
BigDecimal.valueOf(mapBounds.xmin).multiply(scalingFactor).longValue(),
+                               
BigDecimal.valueOf(mapBounds.xmax).multiply(scalingFactor).longValue(),
+                               
BigDecimal.valueOf(mapBounds.ymin).multiply(scalingFactor).longValue(),
+                               
BigDecimal.valueOf(mapBounds.ymax).multiply(scalingFactor).longValue());
+
                        if (config.get(SET_TP_DRAW_CONTINUOUSLY))
                                this.pingTask=new PingTask(visitor, queue, 
config.get(SET_TP_LOGTIME), pipelinedConn);
                }
@@ -677,7 +701,8 @@
                                TParsecDataModel.this,
                                repFile,
                                getConfig().get(SET_TP_DRAW_FLEETS),
-                               getConfig().get(SET_TP_DRAW_FLEETS_NAMES));
+                               getConfig().get(SET_TP_DRAW_FLEETS_NAMES),
+                               scalingFactor);
                }
 
                @Override
Index: 
/home/jezuch/eclipse/starmapper3/src-model-tparsec/jezuch/utils/starmapper3/model/tparsec/TParsecDumpDataModel.java
===================================================================
--- 
/home/jezuch/eclipse/starmapper3/src-model-tparsec/jezuch/utils/starmapper3/model/tparsec/TParsecDumpDataModel.java
 (revision 573)
+++ 
/home/jezuch/eclipse/starmapper3/src-model-tparsec/jezuch/utils/starmapper3/model/tparsec/TParsecDumpDataModel.java
 (working copy)
@@ -23,6 +23,8 @@
 import java.io.IOException;
 import java.io.InputStreamReader;
 import java.io.Reader;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.net.URI;
 import java.util.List;
 import java.util.SortedMap;
@@ -127,6 +129,7 @@
        private SortedMap<Integer, TPRegion> regions;
        private LookupSet<TPRegion, String> regionsLookup;
        private LongRectangle mapBounds;
+       private BigDecimal scalingFactor;
 
        private File resolvePath(File path) throws ConversionException
        {
@@ -188,6 +191,15 @@
                                        Long.parseLong(data[2]),
                                        Long.parseLong(data[3])
                                );
+
+                       //normalize the universe size
+                       this.scalingFactor = 
BigDecimal.valueOf(TParsecDataModel.NORMALIZED_SIZE)
+                               .divide(BigDecimal.valueOf(mapBounds.xmax - 
mapBounds.xmin + 1), 9, RoundingMode.FLOOR);
+                       mapBounds=new LongRectangle(
+                               
BigDecimal.valueOf(mapBounds.xmin).multiply(scalingFactor).longValue(),
+                               
BigDecimal.valueOf(mapBounds.xmax).multiply(scalingFactor).longValue(),
+                               
BigDecimal.valueOf(mapBounds.ymin).multiply(scalingFactor).longValue(),
+                               
BigDecimal.valueOf(mapBounds.ymax).multiply(scalingFactor).longValue());
                }
                finally
                {
@@ -249,7 +261,8 @@
                        reportTime,
                        this,
                        config.get(SET_TP_DRAW_FLEETS),
-                       config.get(SET_TP_DRAW_FLEETS_NAMES));
+                       config.get(SET_TP_DRAW_FLEETS_NAMES),
+                       scalingFactor);
        }
 
        public Producer<Pair<Integer, List<ReportDescriptor<TPNode, TPRegion, 
TPNodeInfo>>>> getAvailableReports() throws ParametersException, IOException, 
ProducerException
Index: 
/home/jezuch/eclipse/starmapper3/src-model-tparsec/jezuch/utils/starmapper3/model/tparsec/TPNode.java
===================================================================
--- 
/home/jezuch/eclipse/starmapper3/src-model-tparsec/jezuch/utils/starmapper3/model/tparsec/TPNode.java
       (revision 573)
+++ 
/home/jezuch/eclipse/starmapper3/src-model-tparsec/jezuch/utils/starmapper3/model/tparsec/TPNode.java
       (working copy)
@@ -18,6 +18,8 @@
  */
 package jezuch.utils.starmapper3.model.tparsec;
 
+import java.math.BigDecimal;
+
 import jezuch.utils.starmapper3.model.Node;
 import net.thousandparsec.netlib.tp03.Object;
 
@@ -27,10 +29,14 @@
 public class TPNode implements Node
 {
        private final Object object;
+       private final long scaledX;
+       private final long scaledY;
 
-       TPNode(Object object)
+       TPNode(Object object, BigDecimal scalingFactor)
        {
                this.object=object;
+               
this.scaledY=BigDecimal.valueOf(object.getPos().getY()).multiply(scalingFactor).longValue();
+               
this.scaledX=BigDecimal.valueOf(object.getPos().getX()).multiply(scalingFactor).longValue();
        }
 
        public String getName()
@@ -40,7 +46,7 @@
 
        public long getX()
        {
-               return object.getPos().getX();
+               return scaledX;
        }
 
        public long getY()
@@ -45,7 +51,7 @@
 
        public long getY()
        {
-               return object.getPos().getY();
+               return scaledY;
                //what about getZ()? :)
        }
 
Index: 
/home/jezuch/eclipse/starmapper3/src-model-tparsec/jezuch/utils/starmapper3/model/tparsec/TPNodeInfo.java
===================================================================
--- 
/home/jezuch/eclipse/starmapper3/src-model-tparsec/jezuch/utils/starmapper3/model/tparsec/TPNodeInfo.java
   (revision 573)
+++ 
/home/jezuch/eclipse/starmapper3/src-model-tparsec/jezuch/utils/starmapper3/model/tparsec/TPNodeInfo.java
   (working copy)
@@ -18,6 +18,8 @@
  */
 package jezuch.utils.starmapper3.model.tparsec;
 
+import java.math.BigDecimal;
+
 import jezuch.utils.starmapper3.Icon;
 import jezuch.utils.starmapper3.model.AbstractNodeInfo;
 import jezuch.utils.starmapper3.model.NodeInfo;
@@ -32,9 +34,9 @@
        private final float valueModifier;
        private final boolean drawFleetNames;
 
-       public TPNodeInfo(Object object, TPRegion reporter, int time, TPRegion 
owner, float valueModifier, boolean drawFleetNames)
+       public TPNodeInfo(Object object, TPRegion reporter, int time, TPRegion 
owner, float valueModifier, boolean drawFleetNames, BigDecimal scalingFactor)
        {
-               super(new TPNode(object), reporter, time, owner);
+               super(new TPNode(object, scalingFactor), reporter, time, owner);
                this.valueModifier=valueModifier;
                this.drawFleetNames=drawFleetNames;
        }

Attachment: signature.asc
Description: This is a digitally signed message part.

_______________________________________________
tp-devel mailing list
[email protected]
http://www.thousandparsec.net/tp/mailman.php/listinfo/tp-devel

Reply via email to