use of org.twak.tweed.gen.GISGen in project chordatlas by twak.
the class TweedFrame method addLayer.
private void addLayer(MouseEvent evt) {
SimplePopup2 sp = new SimplePopup2(evt);
if (hasGIS()) {
sp.add("+ mesh (obj)", new Runnable() {
@Override
public void run() {
new SimpleFileChooser(frame, false, "Select .obj mesh file", new File(Tweed.JME), "obj") {
public void heresTheFile(File obj) throws Throwable {
// removeMeshSources();
String f = tweed.makeWorkspaceRelative(obj).toString();
addGen(new MeshGen(f, tweed), true);
}
};
}
});
sp.add("+ mesh (minimesh)", new Runnable() {
@Override
public void run() {
new SimpleFileChooser(frame, false, "Select minimesh index file (index.xml), or obj to convert", new File(Tweed.JME), null) {
@Override
public void heresTheFile(File f) throws Throwable {
if (!f.getName().equals(MiniTransform.INDEX)) {
MiniTransform.convertToMini(f, new File(Tweed.DATA + "/minimesh"), () -> addGen(new MiniGen(new File("minimesh"), tweed), true));
return;
}
// removeMeshSources();
addGen(new MiniGen(tweed.makeWorkspaceRelative(f.getParentFile()), tweed), true);
}
};
}
});
sp.add("+ panos (jpg)", new Runnable() {
@Override
public void run() {
new SimpleFileChooser(frame, false, "Select one of many panoramas images in a directory, or todo.list", new File(Tweed.JME), null) {
public void heresTheFile(File oneOfMany) throws Throwable {
// removeGens( PanoGen.class );
addGen(new PanoGen(tweed.makeWorkspaceRelative(oneOfMany.getParentFile()), tweed, Tweed.LAT_LONG), true);
}
};
}
});
} else {
sp.add("+ gis (2d obj)", new Runnable() {
@Override
public void run() {
new SimpleFileChooser(frame, false, "Select .obj gis footprints", new File(Tweed.JME), "obj") {
public void heresTheFile(File obj) throws Throwable {
removeGISSources();
addGen(new GISGen(tweed.makeWorkspaceRelative(obj), tweed), true);
}
};
}
});
// sp.add( "+ gis (3d obj)", new Runnable() {
// @Override
// public void run() {
// new SimpleFileChooser( frame, false, "Select .obj gis footprints", new File( Tweed.JME ), "obj" ) {
// public void heresTheFile( File obj ) throws Throwable {
//
// };
// };
// }
// } );
sp.add("+ gis (gml)", new Runnable() {
@Override
public void run() {
new SimpleFileChooser(frame, false, "Select .gml gis footprints", new File(Tweed.JME), "gml") {
public void heresTheFile(File gml) throws Throwable {
removeGISSources();
tweed.addGML(gml, null);
}
};
}
});
}
sp.show();
}
use of org.twak.tweed.gen.GISGen in project chordatlas by twak.
the class Tweed method addGML.
public void addGML(File gmlFile, String guessCRS) throws Exception {
double[] lastOffset = new double[] { Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY };
if (guessCRS == null)
guessCRS = Files.readLines(gmlFile, Charset.forName("UTF-8"), new LineProcessor<String>() {
String crs;
@Override
public boolean processLine(String line) throws IOException {
Matcher m = SRS_EX.matcher(line);
if (m.matches()) {
crs = m.group(1);
return false;
}
m = OFFSET_EX.matcher(line);
if (m.matches() && lastOffset[0] == Double.POSITIVE_INFINITY) {
// bounds def before we see a CRS...
lastOffset[0] = Double.parseDouble(m.group(1));
lastOffset[1] = Double.parseDouble(m.group(2));
}
return true;
}
@Override
public String getResult() {
return crs;
}
});
if (guessCRS == null || lastOffset[0] == Double.POSITIVE_INFINITY) {
JOptionPane.showMessageDialog(frame.frame, "Failed to guess coordinate system for " + gmlFile.getName());
return;
}
// if (TweedSettings.settings.trans != null) {
// lastOffset[0] = TweedSettings.settings.trans[0];
// lastOffset[1] = TweedSettings.settings.trans[1];
// }
// else
TweedSettings.settings.trans = lastOffset;
TweedSettings.settings.gmlCoordSystem = guessCRS;
System.out.println("Assuming CRS " + guessCRS + " for all of " + gmlFile.getName());
MathTransform transform = CRS.findMathTransform(CRS.decode(guessCRS), DefaultGeocentricCRS.CARTESIAN, true);
System.out.println("Using CRS --> World space offset of " + lastOffset[0] + ", " + lastOffset[1]);
TweedSettings.settings.toOrigin = buildOrigin(lastOffset[0], lastOffset[1], transform);
TweedSettings.settings.fromOrigin = new Matrix4d(TweedSettings.settings.toOrigin);
TweedSettings.settings.fromOrigin.invert();
frame.addGen(new GISGen(makeWorkspaceRelative(gmlFile).toString(), TweedSettings.settings.toOrigin, guessCRS, this), true);
}
Aggregations