diff --git a/src/main/java/bdv/BigDataViewer.java b/src/main/java/bdv/BigDataViewer.java
index 48b0c8f75ffd483f49036c3323af0e3af85dcb35..c83bd20ff02dcd6936121c10a33139ae9ead2f83 100644
--- a/src/main/java/bdv/BigDataViewer.java
+++ b/src/main/java/bdv/BigDataViewer.java
@@ -380,7 +380,8 @@ public class BigDataViewer
public static void main( final String[] args )
{
- final String fn = "/Users/pietzsch/desktop/data/catmaid-confocal.xml";
+// final String fn = "/Users/pietzsch/desktop/data/catmaid-confocal.xml";
+ final String fn = "/home/saalfeld/catmaid-confocal.xml";
// final String fn = "/Users/pietzsch/desktop/data/BDV130418A325/BDV130418A325_NoTempReg.xml";
// final String fn = "/Users/pietzsch/Desktop/data/valia2/valia.xml";
// final String fn = "/Users/pietzsch/workspace/data/fast fly/111010_weber/combined.xml";
diff --git a/src/main/java/bdv/img/catmaid/CatmaidImageLoader.java b/src/main/java/bdv/img/catmaid/CatmaidImageLoader.java
index b64a15b354766d34cca1c90dda9460cf856c2056..d8c12d39f6068135bbc0f652f856a181a0a2dd60 100644
--- a/src/main/java/bdv/img/catmaid/CatmaidImageLoader.java
+++ b/src/main/java/bdv/img/catmaid/CatmaidImageLoader.java
@@ -84,7 +84,7 @@ public class CatmaidImageLoader implements ViewerImgLoader< ARGBType, VolatileAR
final int[] maxLevels = new int[] { numScales - 1 };
cache = new VolatileGlobalCellCache< VolatileIntArray >(
- new CatmaidVolatileIntArrayLoader( baseUrl, tileWidth, tileHeight ), 1, 1, numScales, maxLevels, 10 );
+ new CatmaidVolatileIntArrayLoader( baseUrl + "%5$d/%8$d_%9$d_%1$d.jpg", tileWidth, tileHeight ), 1, 1, numScales, maxLevels, 10 );
}
final static public int getNumScales( long width, long height, final long tileWidth, final long tileHeight )
diff --git a/src/main/java/bdv/img/catmaid/CatmaidVolatileIntArrayLoader.java b/src/main/java/bdv/img/catmaid/CatmaidVolatileIntArrayLoader.java
index ebfe9e00359becc2cfc3e4c62f12a19b384dc398..c9dba0152173148ef56b7141486c0b71eda478d2 100644
--- a/src/main/java/bdv/img/catmaid/CatmaidVolatileIntArrayLoader.java
+++ b/src/main/java/bdv/img/catmaid/CatmaidVolatileIntArrayLoader.java
@@ -14,20 +14,50 @@ public class CatmaidVolatileIntArrayLoader implements CacheArrayLoader< Volatile
{
private VolatileIntArray theEmptyArray;
- private final String baseUrl;
-
+ private final String urlFormat;
+
private final int tileWidth;
private final int tileHeight;
- public CatmaidVolatileIntArrayLoader( final String baseUrl, final int tileWidth, final int tileHeight )
+ /**
+ * <p>Create a {@link CacheArrayLoader} for a CATMAID source. Tiles are
+ * addressed, in this order, by their</p>
+ * <ul>
+ * <li>scale level,</li>
+ * <li>scale,</li>
+ * <li>x,</li>
+ * <li>y,</li>
+ * <li>z,</li>
+ * <li>tile width,</li>
+ * <li>tile height,</li>
+ * <li>tile row, and</li>
+ * <li>tile column.</li>
+ * </ul>
+ * <p><code>urlFormat</code> specifies how these parameters are used
+ * to generate a URL referencing the tile. Examples:</p>
+ *
+ * <dl>
+ * <dt>"http://catmaid.org/my-data/xy/%5$d/%8$d_%9$d_%1$d.jpg"</dt>
+ * <dd>CATMAID DefaultTileSource (type 1)</dd>
+ * <dt>"http://catmaid.org/my-data/xy/?x=%3$d&y=%4$d&width=%6d&height=%7$d&row=%8$d&col=%9$d&scale=%2$f&z=%4$d"</dt>
+ * <dd>CATMAID RequestTileSource (type 2)</dd>
+ * <dt>"http://catmaid.org/my-data/xy/%1$d/%5$d/%8$d/%9$d.jpg"</dt>
+ * <dd>CATMAID LargeDataTileSource (type 5)</dd>
+ * </dl>
+ *
+ * @param urlFormat
+ * @param tileWidth
+ * @param tileHeight
+ */
+ public CatmaidVolatileIntArrayLoader( final String urlFormat, final int tileWidth, final int tileHeight )
{
- theEmptyArray = new VolatileIntArray( 256 * 256, false );
- this.baseUrl = baseUrl;
+ theEmptyArray = new VolatileIntArray( tileWidth * tileHeight, false );
+ this.urlFormat = urlFormat;
this.tileWidth = tileWidth;
this.tileHeight = tileHeight;
}
-
+
@Override
public int getBytesPerElement()
{
@@ -35,24 +65,19 @@ public class CatmaidVolatileIntArrayLoader implements CacheArrayLoader< Volatile
}
@Override
- public VolatileIntArray loadArray( final int timepoint, final int setup, final int level, final int[] dimensions, final long[] min ) throws InterruptedException
+ public VolatileIntArray loadArray(
+ final int timepoint,
+ final int setup,
+ final int level,
+ final int[] dimensions,
+ final long[] min ) throws InterruptedException
{
final int c = ( int ) min[ 0 ] / tileWidth;
final int r = ( int ) min[ 1 ] / tileHeight;
- final int z = ( int ) min[ 2 ];
- final int s = level;
- final String urlString =
- new
- StringBuffer( baseUrl ).
- append( z ).
- append( "/" ).
- append( r ).
- append( "_" ).
- append( c ).
- append( "_" ).
- append( s ).
- append( ".jpg" ).
- toString();
+ final double scale = 1.0 / Math.pow(2.0, level);
+
+ final String urlString = String.format( urlFormat, level, scale, min[ 0 ], min[ 1 ], min[ 2 ], tileWidth, tileHeight, r, c );
+
final int w = dimensions[ 0 ];
final int h = dimensions[ 1 ];
final int[] data = new int[ w * h ];