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;
}
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
