Revision: 6324 http://sourceforge.net/p/jump-pilot/code/6324 Author: ma15569 Date: 2020-06-12 08:58:52 +0000 (Fri, 12 Jun 2020) Log Message: ----------- Moved all AdditionalResults (table, histogram, etc) export file to a separate file. Added SVG format export for histogram and plot
Added Paths: ----------- core/trunk/src/org/openjump/sextante/gui/additionalResults/AdditionalResultsIO.java Added: core/trunk/src/org/openjump/sextante/gui/additionalResults/AdditionalResultsIO.java =================================================================== --- core/trunk/src/org/openjump/sextante/gui/additionalResults/AdditionalResultsIO.java (rev 0) +++ core/trunk/src/org/openjump/sextante/gui/additionalResults/AdditionalResultsIO.java 2020-06-12 08:58:52 UTC (rev 6324) @@ -0,0 +1,749 @@ +package org.openjump.sextante.gui.additionalResults; + +import java.awt.Component; +import java.awt.Cursor; +import java.awt.Graphics2D; +import java.awt.RenderingHints; +import java.awt.image.BufferedImage; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileOutputStream; +import java.io.FileWriter; +import java.io.OutputStreamWriter; +import java.text.DecimalFormat; +import java.text.DecimalFormatSymbols; +import java.util.Locale; + +import javax.imageio.ImageIO; +import javax.swing.JFileChooser; +import javax.swing.JLabel; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTable; +import javax.swing.JTextArea; +import javax.swing.JTextPane; +import javax.swing.tree.DefaultMutableTreeNode; +import javax.swing.tree.TreePath; +import javax.xml.namespace.QName; + +import org.apache.batik.dom.svg.SVGDOMImplementation; +import org.apache.batik.svggen.SVGGraphics2D; +import org.apache.log4j.Logger; +import org.math.plot.PlotPanel; +import org.math.plot.plots.Plot; +import org.openjump.core.apitools.IOTools; +import org.openjump.core.ui.io.file.FileNameExtensionFilter; +import org.openjump.core.ui.util.LayerableUtil; +import org.openjump.sextante.core.ObjectAndDescription; +import org.w3c.dom.DOMImplementation; +import org.w3c.dom.svg.SVGDocument; + +import com.vividsolutions.jump.I18N; +import com.vividsolutions.jump.feature.FeatureCollection; +import com.vividsolutions.jump.workbench.JUMPWorkbench; +import com.vividsolutions.jump.workbench.WorkbenchContext; +import com.vividsolutions.jump.workbench.model.Task; +import com.vividsolutions.jump.workbench.ui.FeatureCollectionPanel; +import com.vividsolutions.jump.workbench.ui.GUIUtil; +import com.vividsolutions.jump.workbench.ui.HTMLPanel; +import com.vividsolutions.jump.workbench.ui.WorkbenchFrame; + +import it.betastudio.adbtoolbox.libs.DxfExport; + + +/** + * Moved export action to a separate class + * @author Giuseppe Aruta [2020-06-11] + */ + + + +public class AdditionalResultsIO { + + private final static String sSaved = I18N + .get("org.openjump.core.ui.plugin.raster.RasterImageLayerPropertiesPlugIn.file.saved"); + private final static String SCouldNotSave = I18N + .get("org.openjump.sextante.gui.additionalResults.AdditionalResultsPlugIn.Could-not-save-selected-result"); + + + static WorkbenchFrame frame = JUMPWorkbench.getInstance().getFrame(); + static WorkbenchContext wContext = frame.getContext(); + + + + public static void save(TreePath m_Path) { + FileNameExtensionFilter filter; + final File file; + if (m_Path != null) { + try { + final DefaultMutableTreeNode node = (DefaultMutableTreeNode) m_Path + .getLastPathComponent(); + final ObjectAndDescription oad = (ObjectAndDescription) node + .getUserObject(); + final Component c = (Component) oad.getObject(); + if (c instanceof FeatureCollectionPanel) { + final FeatureCollectionPanel panel = (FeatureCollectionPanel) c; + final FeatureCollection fcoll = panel + .getFeatureCollection(); + final FileNameExtensionFilter filter2 = new FileNameExtensionFilter( + "Comma-Separated Values (csv)", "csv"); + final FileNameExtensionFilter filter3 = new FileNameExtensionFilter( + "JUMP Markup Language (JML)", "jml"); + filter = new FileNameExtensionFilter( + "ESRI Shapefile (SHP)", "shp"); + final JFileChooser fc = new GUIUtil.FileChooserWithOverwritePrompting(); + if (!LayerableUtil.isMixedGeometryType(fcoll)) { + fc.setFileFilter(filter); + } + fc.setFileFilter(filter3); + fc.setFileFilter(filter2); + fc.addChoosableFileFilter(filter2); + final int returnVal = fc + .showSaveDialog(frame); + if (returnVal == JFileChooser.APPROVE_OPTION) { + if (fc.getFileFilter().equals(filter3)) { + file = new File(fc.getSelectedFile() + ".jml"); + IOTools.saveJMLFile(fcoll, file.getAbsolutePath()); + saved(file); + } else if (fc.getFileFilter().equals(filter)) { + file = new File(fc.getSelectedFile() + ".shp"); + IOTools.saveShapefile(fcoll, file.getAbsolutePath()); + saved(file); + } else if (fc.getFileFilter().equals(filter2)) { + final JTable table = panel.getTable(); + file = new File(fc.getSelectedFile() + ".csv"); + IOTools.saveCSV(table, file.getAbsolutePath()); + saved(file); + } + } + + } else if (c instanceof JScrollPane) { + final JScrollPane pane = (JScrollPane) c; + final Component view = pane.getViewport().getView(); + if (view instanceof JTextPane || view instanceof JLabel + || view instanceof JTextArea) { + final JTextPane text = (JTextPane) pane.getViewport() + .getView(); + final JFileChooser fc = new GUIUtil.FileChooserWithOverwritePrompting( + "html"); + filter = new FileNameExtensionFilter("HTML", "html"); + fc.setFileFilter(filter); + fc.addChoosableFileFilter(filter); + final int returnVal = fc + .showSaveDialog(frame); + fc.getWidth(); + fc.getHeight(); + if (returnVal == JFileChooser.APPROVE_OPTION) { + try { + file = new File(fc.getSelectedFile() + ".html"); + file.getParent(); + final FileWriter fileWriter = new FileWriter( + file); + final BufferedWriter bufferedWriter = new BufferedWriter( + fileWriter); + bufferedWriter.write(text.getText()); + bufferedWriter.close(); + saved(file); + } catch (final Exception e) { + notsaved(); + } + } + } else if (view instanceof JTable) { + final JTable table = (JTable) pane.getViewport() + .getView(); + filter = new FileNameExtensionFilter( + "Comma-Separated Values (csv)", "csv"); + final JFileChooser fc = new GUIUtil.FileChooserWithOverwritePrompting( + "csv"); + fc.setFileFilter(filter); + fc.addChoosableFileFilter(filter); + final int returnVal = fc + .showSaveDialog(frame); + fc.getWidth(); + fc.getHeight(); + if (returnVal == JFileChooser.APPROVE_OPTION) { + file = new File(fc.getSelectedFile() + ".csv"); + IOTools.saveCSV(table, file.getAbsolutePath()); + } else if (returnVal == JFileChooser.CANCEL_OPTION) { + return; + } + } + // [Giuseppe Aruta 2018-08-22] add generic save view to + // image of JPanel in a JScrollPane + else if (view instanceof JPanel) { + final JPanel panel = (JPanel) pane.getViewport() + .getView(); + final int w = panel.getWidth(); + final int h = panel.getHeight(); + final BufferedImage bi = new BufferedImage(w, h, + BufferedImage.TYPE_INT_RGB); + final Graphics2D g = bi.createGraphics(); + panel.paint(g); + + filter = new FileNameExtensionFilter( + "Portable Network Graphics (png)", "png"); + final JFileChooser fc = new GUIUtil.FileChooserWithOverwritePrompting( + "png"); + final FileNameExtensionFilter filter3 = new FileNameExtensionFilter( + "Scalable Vector Graphics (svg)", "svg"); + fc.setFileFilter(filter); + fc.setFileFilter(filter3); + fc.addChoosableFileFilter(filter); + final int returnVal = fc + .showSaveDialog(frame); + fc.getWidth(); + fc.getHeight(); + if (returnVal == JFileChooser.APPROVE_OPTION) { + if (fc.getFileFilter().equals(filter)) { + try { + file = new File(fc.getSelectedFile() + ".png"); + ImageIO.write(bi, "png", file); + saved(file); + } catch (final Exception e) { + notsaved(); + + } + } else if (fc.getFileFilter().equals(filter3)) { + file = new File(fc.getSelectedFile() + ".svg"); + file.getParent(); + saveAsSVG(panel,file); + saved(file); + } + } + } + } else if (c instanceof PlotPanel) { + final PlotPanel panel = (PlotPanel) c; + filter = new FileNameExtensionFilter( + "Portable Network Graphics (png)", "png"); + final FileNameExtensionFilter filter2 = new FileNameExtensionFilter( + "Drawing Interchange Format(dxf)", "dxf"); + final FileNameExtensionFilter filterSVG = new FileNameExtensionFilter( + "Scalable Vector Graphics (svg)", "svg"); + final JFileChooser fc = new GUIUtil.FileChooserWithOverwritePrompting(); + if (oad.getDescription() + .contains( + I18N.get("org.openjump.core.ui.plugin.raster.ProfileGraphTool.Profile-Plot"))) { + fc.setFileFilter(filter2); + } + fc.setFileFilter(filter); + if(CheckSVGLibs()) { + fc.setFileFilter(filterSVG);} + fc.addChoosableFileFilter(filter); + final int returnVal = fc + .showSaveDialog(frame); + fc.getWidth(); + fc.getHeight(); + if (returnVal == JFileChooser.APPROVE_OPTION) { + if (fc.getFileFilter().equals(filter)) { + file = new File(fc.getSelectedFile() + ".png"); + file.getParent(); + panel.toGraphicFile(file); + saved(file); + } else if (fc.getFileFilter().equals(filter2)) { + file = new File(fc.getSelectedFile() + ".dxf"); + file.getParent(); + double[][] pointsOfProfile = null; + for (final Plot plot : panel.getPlots()) { + pointsOfProfile = plot.getData(); + } + frame.setCursor(new Cursor(Cursor.WAIT_CURSOR)); + exportToDxf(file.getAbsolutePath(), pointsOfProfile); + frame.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); + saved(file); + } else if (fc.getFileFilter().equals(filterSVG)) { + file = new File(fc.getSelectedFile() + ".svg"); + file.getParent(); + saveAsSVG(panel.plotCanvas,file); + saved(file); + } + } + + } else if (c instanceof JTable) { + final JTable table = (JTable) c; + filter = new FileNameExtensionFilter( + "Comma-Separated Values (csv)", "csv"); + final JFileChooser fc = new GUIUtil.FileChooserWithOverwritePrompting( + "csv"); + fc.setFileFilter(filter); + fc.addChoosableFileFilter(filter); + final int returnVal = fc + .showSaveDialog(frame); + fc.getWidth(); + fc.getHeight(); + if (returnVal == JFileChooser.APPROVE_OPTION) { + file = new File(fc.getSelectedFile() + ".csv"); + IOTools.saveCSV(table, file.getAbsolutePath()); + } else if (returnVal == JFileChooser.CANCEL_OPTION) { + return; + } + } else if (c instanceof HTMLPanel) { + final HTMLPanel panel = (HTMLPanel) c; + final String text = panel.lastString(); + filter = new FileNameExtensionFilter("HTML", "html"); + final JFileChooser fc = new GUIUtil.FileChooserWithOverwritePrompting( + "html"); + fc.setFileFilter(filter); + fc.addChoosableFileFilter(filter); + final int returnVal = fc + .showSaveDialog(frame); + fc.getWidth(); + fc.getHeight(); + if (returnVal == JFileChooser.APPROVE_OPTION) { + try { + file = new File(fc.getSelectedFile() + ".html"); + file.getParent(); + final FileWriter fileWriter = new FileWriter(file); + final BufferedWriter bufferedWriter = new BufferedWriter( + fileWriter); + bufferedWriter.write(text); + bufferedWriter.close(); + saved(file); + } catch (final Exception e) { + notsaved(); + + } + } + } else if (c instanceof JPanel) { + final JPanel panel = (JPanel) c; + final int w = panel.getWidth(); + final int h = panel.getHeight(); + final BufferedImage bi = new BufferedImage(w, h, + BufferedImage.TYPE_INT_RGB); + final Graphics2D g = bi.createGraphics(); + panel.paint(g); + filter = new FileNameExtensionFilter( + "Portable Network Graphics (png)", "png"); + + final FileNameExtensionFilter filterSVG = new FileNameExtensionFilter( + "Scalable Vector Graphics (svg)", "svg"); + final JFileChooser fc = new GUIUtil.FileChooserWithOverwritePrompting( + "png"); + fc.setFileFilter(filter); + if(CheckSVGLibs()) { + fc.setFileFilter(filterSVG);} + fc.addChoosableFileFilter(filter); + final int returnVal = fc + .showSaveDialog(frame); + fc.getWidth(); + fc.getHeight(); + if (returnVal == JFileChooser.APPROVE_OPTION) { + if (fc.getFileFilter().equals(filter)) { + + try { + file = new File(fc.getSelectedFile() + ".png"); + ImageIO.write(bi, "png", file); + saved(file); + } catch (final Exception e) { + notsaved(); + } + } else if (fc.getFileFilter().equals(filterSVG)) { + file = new File(fc.getSelectedFile() + ".svg"); + file.getParent(); + saveAsSVG(panel,file); + saved(file); + } + } + + } + } catch (final Exception e) { + } + } + } + + protected static void saved(File file) { + JUMPWorkbench.getInstance().getFrame() + .setStatusMessage(sSaved + " :" + file.getAbsolutePath()); + } + + protected static void notsaved() { + JOptionPane.showMessageDialog(null, SCouldNotSave, I18N.get(SCouldNotSave), + JOptionPane.WARNING_MESSAGE); + } + + public static void Logger(Class<?> plugin, Exception e) { + final Logger LOG = Logger.getLogger(plugin); + JUMPWorkbench + .getInstance() + .getFrame() + .warnUser( + plugin.getSimpleName() + " Exception: " + e.toString()); + LOG.error(plugin.getName() + " Exception: ", e); + } + + + + public static void saveAsSVG(Component component, + File selFile) throws Exception { + SVGGraphics2D svgGenerator = drawSvgGraphics(component); + try { + FileOutputStream fos = new FileOutputStream(selFile, false); + OutputStreamWriter out = new OutputStreamWriter(fos, "UTF-8"); + svgGenerator.stream(out, true); + out.close(); + } + catch (Exception e) { + wContext.getWorkbench().getFrame().handleThrowable(e); + } + } + + + + /** + * Draws the selected component (assumed to be a Component) into the + * provided SVGGraphics2D object. + * + * @param component + * @param bounds + */ + private static SVGGraphics2D drawSvgGraphics(Component component) { + + // Get a SVGDOMImplementation and create an XML document + DOMImplementation domImpl = SVGDOMImplementation.getDOMImplementation(); + String svgNS = "http://www.w3.org/2000/svg"; + SVGDocument svgDocument = (SVGDocument) domImpl.createDocument(svgNS, "svg", null); + + // Create an instance of the SVG Generator + SVGGraphics2D svgGenerator = new SVGGraphics2D(svgDocument); + + svgGenerator.setSVGCanvasSize(component.getSize()); + component.paintAll(svgGenerator); + svgGenerator.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, + RenderingHints.VALUE_TEXT_ANTIALIAS_DEFAULT); + svgGenerator.setRenderingHint(RenderingHints.KEY_ANTIALIASING, + RenderingHints.VALUE_ANTIALIAS_DEFAULT); + + svgGenerator.scale(0.90/0.96, 0.90/0.96); + return svgGenerator; + } + + public final static String HEIGHT = I18N + .get("org.openjump.core.ui.plugin.raster.ProfileGraphTool.values"); + public final static String WIDTH = I18N + .get("org.openjump.core.ui.plugin.raster.ProfileGraphTool.2d-distance"); + + public static Integer round100(Integer b) { + return b - (b % 100); + } + + // [Giuseppe Aruta 2018-3-14] The following code derives from AdbToolbox + // Raster>Topography>Section code. + // see also class it.betastudio.adbtoolbox.libs.DxfExport + // [Giuseppe Aruta 2018-3-22] Enhenced dxf output + + public static void exportToDxf(String fileName, double[][] points) { + + try { + + double minX = Double.MAX_VALUE; + double maxX = -minX; + double minY = Double.MAX_VALUE; + double maxY = -minY; + + // Find max and min vals + for (final double[] point : points) { + if (point[0] < minX) { + minX = point[0]; + } + if (point[0] > maxX) { + maxX = point[0]; + } + if (point[1] < minY) { + minY = point[1]; + } + if (point[1] > maxY) { + maxY = point[1]; + } + } + final DecimalFormatSymbols dfs = new DecimalFormatSymbols( + Locale.ENGLISH); + DecimalFormat twoPlaces = null; + + final String twoPlacesS = "0.00"; + twoPlaces = new DecimalFormat(twoPlacesS, dfs); + + final int pointsCount = points.length; + + final int txtHight = 14; + final int txtHight2 = 22; + + // min elevation of the grid, 200m below the min elevation of the + // profile + final int b = ((int) minY - 99) / 100 * 100; + final double baseElev = b - 100; + + // max elevation of the grid, 200m above the max elevation of the + // profile + final int a = ((int) maxY + 99) / 100 * 100; + final double topElev = a + 200; + + final int sepSpacing = 10 * txtHight; + final String layNameProf = "PROFILE"; + final String baseSectionLayer = "BASE"; + final String partialValuesLayer = "PARTIAL_VALUES"; + final String gridLayer = "GRID"; + final String layNameText = "GRID_TEXT"; + + // Main points coords + final double sep1Y = baseElev - txtHight * 2; + final double sep2Y = sep1Y - sepSpacing; + final double sep3Y = topElev; + final double leg5Y = sep3Y + sepSpacing; + final double legX = minX - (txtHight * 30); + + final DxfExport dxfExp = new DxfExport(); + + // Write header + // -------------------------------------------------------- + dxfExp.writeHeader(legX, sep3Y, maxX, maxY); + + // Write tables + dxfExp.writeStartSec(); + dxfExp.writeTablesStart(); + + dxfExp.writeTableStart(); + dxfExp.writeVPort((maxX + legX) / 2, (maxY + sep3Y) / 2, 0, 0, 1, 1); + dxfExp.writeTableEnd(); + + dxfExp.writeTableStart(); + dxfExp.writeAppId(); + dxfExp.writeTableEnd(); + + dxfExp.writeTableStart(); + dxfExp.writeLayersStart(); + dxfExp.writeLayer(layNameProf, 5); + dxfExp.writeLayer(baseSectionLayer, 0); + dxfExp.writeLayer(partialValuesLayer, 8); + dxfExp.writeLayer(gridLayer, 9); + dxfExp.writeLayer(layNameText, 7); + dxfExp.writeTableEnd(); + + dxfExp.writeEndSec(); + + // Write section + dxfExp.writeStartSec(); + dxfExp.writeEntStart(); + dxfExp.writePolyline(layNameProf, points); + + // Write legend + + final Task selectedTask = wContext.getTask(); + String unitsDistLabel = ""; + + if (selectedTask.getProperties().containsKey( + new QName(Task.PROJECT_UNIT_KEY))) { + unitsDistLabel = " [" + + selectedTask.getProperty( + new QName(Task.PROJECT_UNIT_KEY)).toString() + + "]"; + } else { + unitsDistLabel = ""; + } + + // Text of X axe + dxfExp.writeText(layNameText, 0, 0, 0, (maxX - minX) / 2, sep2Y, 0, + txtHight2, 0, 0, 2, WIDTH + unitsDistLabel); + + dxfExp.writeText(partialValuesLayer, 0, 0, 0, (maxX - minX) / 2, + leg5Y, 0, txtHight2, 0, 0, 2, HEIGHT + unitsDistLabel); + // Text of Y axe + dxfExp.writeText(layNameText, 0, 0, 0, minX - 200, + (topElev + baseElev) / 2, 0, txtHight2, 90, 0, 2, HEIGHT + + unitsDistLabel); + dxfExp.writeText(layNameText, 0, 0, 0, maxX + 200, + (topElev + baseElev) / 2, 0, txtHight2, 270, 0, 2, HEIGHT + + unitsDistLabel); + + // Write interpoints labels and ticks + double p1x = 0; + double p1y = 0; + double p2x = 0; + double p2y = 0; + double alPt1x = 0; + double alPt1y = 0; + double alPt2y = 0; + String labelText = null; + + int interPointsCount = 0; + // Count interpoints + double[] interStepD = null; + + interStepD = new double[1]; + // Define 100 meters for length/height steps + interStepD[0] = 100D; + interPointsCount = (int) ((maxX - minX) / interStepD[0]) + 2; + + // Prepare x positions + final double[] interPointsDists = new double[interPointsCount]; + final double[] interPointsElev = new double[interPointsCount]; + for (int ip = 0; ip < interPointsCount; ip++) { + + if (ip < interPointsCount - 1) { + interPointsDists[ip] = interStepD[0] * ip; + } else { + interPointsDists[ip] = maxX; + } + + } + + // Prepare points IDs + final int[] interPointsIds = new int[interPointsCount]; + int ipId = 0; + for (int p = 1; p < pointsCount; p++) { + if (points[p][0] >= interPointsDists[ipId]) { + if (Math.abs(points[p][0] - interPointsDists[ipId]) <= Math + .abs(interPointsDists[ipId] - points[p - 1][0])) { + interPointsIds[ipId] = p; + } else { + interPointsIds[ipId] = p - 1; + } + ipId++; + } + } + + // Boh + if (interPointsIds[interPointsCount - 1] == 0) { + interPointsIds[interPointsCount - 1] = pointsCount - 1; + } + + // Prepare y positions + ipId = 0; + for (int p = 1; p < pointsCount; p++) { + if (points[p][0] >= interPointsDists[ipId]) { + if (Math.abs(points[p][0] - interPointsDists[ipId]) <= Math + .abs(interPointsDists[ipId] - points[p - 1][0])) { + interPointsIds[ipId] = p; + } else { + interPointsIds[ipId] = p - 1; + } + + interPointsElev[ipId] = (interPointsDists[ipId] - points[p - 1][0]) + / (points[p][0] - points[p - 1][0]) + * (points[p][1] - points[p - 1][1]) + + points[p - 1][1]; + ipId++; + } + } + + for (int ip = 0; ip < interPointsCount; ip++) { // OKKIO + + if (baseElev + interPointsDists[ip] < topElev + || baseElev + interPointsDists[ip] == topElev) { + + // Grid - orizontal lines every 100 m + p1x = maxX; + p1y = interPointsDists[ip] + baseElev; + p2x = minX; + p2y = interPointsDists[ip] + baseElev; + dxfExp.writeLineType(gridLayer, "DOTTINY", p1x, p1y, p2x, + p2y); + + // Heights (Y) - text on right and left part of the profile + // every 100m + alPt1x = minX - 100;// sep1Y + txtHight; + final double alPt1ax = maxX + txtHight;// + alPt1y = interPointsDists[ip] + baseElev; + labelText = twoPlaces.format(interPointsDists[ip] + + baseElev); + dxfExp.writeText(layNameText, 0, 0, 0, alPt1x, alPt1y, 0, + txtHight, 0, 0, 2, labelText); + dxfExp.writeText(layNameText, 0, 0, 0, alPt1ax, alPt1y, 0, + txtHight, 0, 0, 2, labelText); + + // Heights (Y) - small tracks on right and left part of the + // profile + alPt1x = minX; + alPt1y = interPointsDists[ip] + baseElev; + final double alPt2x = minX - (txtHight / 2); + dxfExp.writeLine(baseSectionLayer, alPt1x, alPt1y, alPt2x, + alPt1y); + final double alPt2x2 = maxX + (txtHight / 2); + dxfExp.writeLine(baseSectionLayer, maxX, alPt1y, alPt2x2, + alPt1y); + + } + } + + for (int ip = 0; ip < interPointsCount; ip++) { // OKKIO + + // Grid - vertical lines every 100 m + p1x = interPointsDists[ip]; + p1y = topElev;// interPointsElev[ip]; + p2x = interPointsDists[ip]; + p2y = baseElev;// minY; + dxfExp.writeLineType(gridLayer, "DOTTINY", p1x, p1y, p2x, p2y); + + // Widths (X axe) - texts below the X line, every 100 m + alPt1x = interPointsDists[ip]; + alPt1y = sep1Y - 4 * txtHight; + labelText = twoPlaces.format(interPointsDists[ip]); + dxfExp.writeText(layNameText, 0, 0, 0, alPt1x, alPt1y, 0, + txtHight, 90, 0, 2, labelText); + + // Widths (X axe) - small tracks above the texts + alPt1x = interPointsDists[ip]; + alPt1y = baseElev; + alPt2y = baseElev - (txtHight / 2); + dxfExp.writeLine(baseSectionLayer, alPt1x, alPt1y, alPt1x, + alPt2y); + + // Partial heights - texts per every 100 width + alPt1x = interPointsDists[ip]; + alPt1y = sep3Y + txtHight; + labelText = twoPlaces.format(points[interPointsIds[ip]][1]); + dxfExp.writeText(partialValuesLayer, 0, 0, 0, alPt1x, alPt1y, + 0, txtHight, 90, 0, 2, labelText); + + // Partial heights - small tracks + alPt1y = sep3Y; + alPt2y = sep3Y + (txtHight / 2); + dxfExp.writeLine(partialValuesLayer, alPt1x, alPt1y, alPt1x, + alPt2y); + + } + + // Width - X line of the profile + dxfExp.writeLine(baseSectionLayer, minX, baseElev, maxX, baseElev); + // Height - Y lines of the profile + dxfExp.writeLine(baseSectionLayer, minX, baseElev, minX, topElev); + dxfExp.writeLine(baseSectionLayer, maxX, baseElev, maxX, topElev); + // Partial heights width line + dxfExp.writeLine(partialValuesLayer, minX, sep3Y, maxX, sep3Y); + // Finalize DXF + dxfExp.writeEnding(); + final int ret = dxfExp.exportDxf(fileName); + if (ret == 0) { + return; + } else { + return; + } + } catch (final Exception ex) { + wContext.getWorkbench().getFrame() + .warnUser("Errore durante l'esportazione: "); + return; + } + } + + public static boolean CheckSVGLibs() { + ClassLoader cl = JUMPWorkbench.getInstance().getPlugInManager().getClassLoader(); + Class c = null, c2 = null; + try { + c = cl.loadClass("org.apache.batik.dom.GenericDOMImplementation"); + c2 = cl.loadClass("org.apache.batik.svggen.SVGGraphics2D"); + } + catch (ClassNotFoundException e) { + + Logger(JUMPWorkbench.getInstance().getPlugInManager().getClass(), e); + } + if (c == null || c2 == null) { + JUMPWorkbench + .getInstance() + .getFrame() + .warnUser( " not initialized because batik is missing."); + return false; + } else { + return true;} + } + + +} Property changes on: core/trunk/src/org/openjump/sextante/gui/additionalResults/AdditionalResultsIO.java ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property _______________________________________________ Jump-pilot-devel mailing list Jump-pilot-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel