Revision: 5713
          http://sourceforge.net/p/jump-pilot/code/5713
Author:   ma15569
Date:     2018-03-14 15:01:11 +0000 (Wed, 14 Mar 2018)
Log Message:
-----------
Additional Result frame: added export profile to .dxf on output options. Added 
related dxf class support from AdbToolbox
(it.betastudio.adbtoolbox.libs.DxfExport)

Modified Paths:
--------------
    core/trunk/ChangeLog
    
core/trunk/src/org/openjump/sextante/gui/additionalResults/AdditionalResultsFrame.java

Added Paths:
-----------
    core/trunk/src/it/betastudio/adbtoolbox/libs/DxfExport.java

Modified: core/trunk/ChangeLog
===================================================================
--- core/trunk/ChangeLog        2018-03-14 09:05:39 UTC (rev 5712)
+++ core/trunk/ChangeLog        2018-03-14 15:01:11 UTC (rev 5713)
@@ -6,6 +6,10 @@
 * Changes.txt updated until here **********************************************
 
 2018-03-14 Giuseppe Aruta
+      * Raster>Profile. Added export profile to .dxf on Additional Frame 
+        output options
+
+2018-03-14 Giuseppe Aruta
      * Smal enhancement on AdditionalResul Frame, JSplitPanel divider and
        added dxf export for plot (only on jFileChooser, not yer working)
      * Moved Statistics>Plot>(All) and Statistic>Classify attributes output

Added: core/trunk/src/it/betastudio/adbtoolbox/libs/DxfExport.java
===================================================================
--- core/trunk/src/it/betastudio/adbtoolbox/libs/DxfExport.java                 
        (rev 0)
+++ core/trunk/src/it/betastudio/adbtoolbox/libs/DxfExport.java 2018-03-14 
15:01:11 UTC (rev 5713)
@@ -0,0 +1,380 @@
+package it.betastudio.adbtoolbox.libs;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import javax.swing.JOptionPane;
+
+
+/**
+ *
+ * @author Beta Studio
+ */
+public class DxfExport {
+
+    public DxfExport(){
+
+        dxfOut = new String();
+
+    }
+
+    public void writeHeader(double minX, double minY, double maxX, double 
maxY){
+
+        dxfOut = "0";
+        appString("SECTION");
+        appString(2);
+        appString("HEADER");
+        appString(9);
+        appString("$ACADVER");
+        appString(1);
+        appString("AC1009");
+
+        appString(9);
+        appString("$EXTMIN");
+        appString(10);
+        appString(minX);
+        appString(20);
+        appString(minY);
+        appString(30);
+        appString(0);
+        appString(9);
+        appString("$EXTMAX");
+        appString(10);
+        appString(maxX);
+        appString(20);
+        appString(maxY);
+        appString(30);
+        appString(0);
+        
+        appString(9);
+        appString("$LIMMIN");
+        appString(10);
+        appString(minX);
+        appString(20);
+        appString(minY);
+        appString(9);
+        appString("$LIMMAX");
+        appString(10);
+        appString(maxX);
+        appString(20);
+        appString(maxY);
+//        appString(9);
+//        appString("$CLAYER");
+//        appString(8);
+//        appString(layerName);
+        appString(0);
+        appString("ENDSEC");
+
+    }
+
+    public void writeStartSec(){
+
+        appString(0);
+        appString("SECTION");
+
+    }
+
+    public void writeEndSec(){
+
+        appString(0);
+        appString("ENDSEC");
+
+    }
+
+    public void writeTablesStart(){
+        
+        appString(2);
+        appString("TABLES");        
+    
+    }
+    
+    public void writeTableStart(){
+    
+        appString(0);
+        appString("TABLE");       
+        
+    }
+
+    public void writeTableEnd(){
+        
+        appString(0);
+        appString("ENDTAB");      
+    
+    }
+    
+    public void writeLayersStart(){
+
+        appString(2);
+        appString("LAYER");
+        appString(70);
+        appString(1);
+
+    }
+
+    public void writeLayer(String layName, int colourNr){
+
+        appString(0);
+        appString("LAYER");
+        appString(2);
+        appString(layName);
+        appString(62);
+        appString(colourNr);
+        appString(70);
+        appString(0);
+        appString(6);
+        appString("CONTINUOUS");
+
+    }
+    
+    public void writeVPort(double centerX, double centerY, double minX, double 
minY, double maxX, double maxY){
+
+        appString(2);
+        appString("VPORT");
+        appString(5);
+        appString(8);
+        appString(100);
+        appString("AcDbSymbolTable");
+        appString(70);
+        appString(2);
+        appString(0);
+        appString("VPORT");
+        appString(5);
+        appString("4A");
+        appString(100);
+        appString("AcDbSymbolTableRecord");
+        appString(100);
+        appString("AcDbViewportTableRecord");
+        appString(2);
+        appString("*Active");
+        appString(70);
+        appString(0);
+        appString(10);
+        appString(minX);
+        appString(20);
+        appString(minY);
+        appString(11);
+        appString(maxX);
+        appString(21);
+        appString(maxY);
+        appString(12);
+        appString(centerX);
+        appString(22);
+        appString(centerY);
+        appString(13);
+        appString(0.0);
+        appString(23);
+        appString(0.0);
+        appString(14);
+        appString(10.0);
+        appString(24);
+        appString(10.0);
+        appString(15);
+        appString(10.0);
+        appString(25);
+        appString(10.0);
+        appString(16);
+        appString(0.0);
+        appString(26);
+        appString(0.0);
+        appString(36);
+        appString(1.0);
+        appString(17);
+        appString(0.0);
+        appString(27);
+        appString(0.0);
+        appString(37);
+        appString(0.0);
+        appString(40);
+        appString(1009.022556390977);
+        appString(41);
+        appString(1.783132530120481);
+        appString(42);
+        appString(50.0);
+        appString(43);
+        appString(0.0);
+        appString(44);
+        appString(0.0);
+        appString(50);
+        appString(0.0);
+        appString(51);
+        appString(0.0);
+        appString(71);
+        appString(0);
+        appString(72);
+        appString(100);
+        appString(73);
+        appString(1);
+        appString(74);
+        appString(3);
+        appString(75);
+        appString(0);
+        appString(76);
+        appString(0);
+        appString(77);
+        appString(0);
+        appString(78);
+        appString(0);
+
+    }    
+
+    public void writeEntStart(){
+        
+        appString(2);
+        appString("ENTITIES");
+
+    }
+
+    public void writeAppId(){
+
+        appString(2);
+        appString("APPID");
+        appString(5);
+        appString(9);
+        appString(100);
+        appString("AcDbSymbolTable");
+        appString(70);
+        appString(1);
+        appString(0);
+        appString("APPID");
+        appString(5);
+        appString(12);
+        appString(100);
+        appString("AcDbSymbolTableRecord");
+        appString(100);
+        appString("AcDbRegAppTableRecord");
+        appString(2);
+        appString("ACAD");
+        appString(70);
+        appString(0);
+        
+    }
+
+    public void writeEnding() {
+
+        // Ending
+        appString(0);
+        appString("ENDSEC");
+        appString(0);
+        appString("EOF");
+
+    }
+
+    public void writeLine(String layName, double p1x, double p1y, double p2x, 
double p2y){
+
+        appString("0");
+        appString("LINE");
+        appString(8);
+        appString(layName);
+        appString("10");
+        appString(p1x);
+        appString("20");
+        appString(p1y);
+        appString("11");
+        appString(p2x);
+        appString("21");
+        appString(p2y);
+
+    }
+
+    public void writePolyline(String layName, double[][] vertices){
+
+        appString(0);
+        appString("POLYLINE");
+        appString(8);
+        appString(layName);
+        appString(62);
+        appString(1);
+        appString(66);
+        appString(1);
+
+        for(int v=0; v<vertices.length; v++){
+            appString(0);
+            appString("VERTEX");
+            appString(8);
+            appString(layName);
+            appString(10);  // X value
+            appString(vertices[v][0]);
+            appString(20);  // Y value
+            appString(vertices[v][1]);
+//            appString(30);  // Z value
+//            appString(vertices[v][2]);
+            appString(70);  // Vertex flag
+            appString(4);  // Vertex flags:
+        }
+
+        appString("0");
+        appString("SEQEND");
+
+    }
+
+    public void writeLwPolyLine(double[][] vertices){
+
+
+
+    }
+
+    public void writeText(String layName, double alignPoint1x, double 
alignPoint1y, double alignPoint1z, double alignPoint2x, double alignPoint2y, 
double alignPoint2z, int textHight, double textRotation, int horizJust, int 
vertAlign, String text){
+
+        appString(0);
+        appString("TEXT");
+        appString(8);
+        appString(layName);
+        appString(10);            // Alignment point x
+        appString(alignPoint1x);
+        appString(20);            // Alignment point y
+        appString(alignPoint1y);
+        appString(30);            // Alignment point z
+        appString(alignPoint1z);
+        appString(40);            // Text hight
+        appString(textHight);
+        appString(50);            // Text rotation
+        appString(textRotation);
+        appString(1);             // Text
+        appString(text);
+
+        if(horizJust != 0 || vertAlign != 0){
+            appString(11);            // Alignment point x
+            appString(alignPoint2x);
+            appString(21);            // Alignment point y
+            appString(alignPoint2y);
+            appString(31);            // Alignment point z
+            appString(alignPoint2z);
+            appString(72);
+            appString(horizJust);
+            appString(73);
+            appString(vertAlign);
+
+        }
+
+    }
+
+    private void appString(String appEnd){
+        dxfOut = dxfOut + lineFeed + appEnd;
+    }
+
+    private void appString(int appEnd){
+        dxfOut = dxfOut + lineFeed + Integer.toString(appEnd);
+    }
+
+    private void appString(double appEnd){
+        dxfOut = dxfOut + lineFeed + Double.toString(appEnd);
+    }
+
+    public int exportDxf(String dxfFullFileName){
+
+        try{
+            BufferedWriter buffWrite = new BufferedWriter(new FileWriter(new 
File(dxfFullFileName)));
+            buffWrite.write(dxfOut, 0, dxfOut.length());
+            buffWrite.close();
+            return 0;
+        }catch(Exception ex){
+            JOptionPane.showMessageDialog(null, "Errore durante la scrittura 
del DXF: " + ex, "Errore", JOptionPane.ERROR_MESSAGE);
+            return 1;
+        }
+
+    }
+
+    private String dxfOut = null;
+    private String lineFeed = System.getProperty("line.separator");
+
+}


Property changes on: core/trunk/src/it/betastudio/adbtoolbox/libs/DxfExport.java
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Modified: 
core/trunk/src/org/openjump/sextante/gui/additionalResults/AdditionalResultsFrame.java
===================================================================
--- 
core/trunk/src/org/openjump/sextante/gui/additionalResults/AdditionalResultsFrame.java
      2018-03-14 09:05:39 UTC (rev 5712)
+++ 
core/trunk/src/org/openjump/sextante/gui/additionalResults/AdditionalResultsFrame.java
      2018-03-14 15:01:11 UTC (rev 5713)
@@ -1,7 +1,10 @@
 package org.openjump.sextante.gui.additionalResults;
 
+import it.betastudio.adbtoolbox.libs.DxfExport;
+
 import java.awt.BorderLayout;
 import java.awt.Component;
+import java.awt.Cursor;
 import java.awt.Dimension;
 import java.awt.Graphics2D;
 import java.awt.event.ActionEvent;
@@ -13,8 +16,11 @@
 import java.io.BufferedWriter;
 import java.io.File;
 import java.io.FileWriter;
+import java.text.DecimalFormat;
+import java.text.DecimalFormatSymbols;
 import java.util.ArrayList;
 import java.util.Enumeration;
+import java.util.Locale;
 
 import javax.imageio.ImageIO;
 import javax.swing.Icon;
@@ -38,9 +44,11 @@
 import javax.swing.tree.DefaultMutableTreeNode;
 import javax.swing.tree.DefaultTreeModel;
 import javax.swing.tree.TreePath;
+import javax.xml.namespace.QName;
 
 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.swing.DetachableInternalFrame;
@@ -50,7 +58,9 @@
 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.datasource.SaveFileDataSourceQueryChooser;
+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;
@@ -109,8 +119,6 @@
     private JMenuItem menuItemRemove;
     private JMenuItem menuItemRename;
 
-    private static int FILE_BROWSER_WIDTH = 600;
-    private static int FILE_BROWSER_HEIGHT = 400;
     private static String LAST_DIR = null;
 
     // --da rimuovere
@@ -417,8 +425,8 @@
                         fc.setFileFilter(filter);
                         fc.addChoosableFileFilter(filter);
                         final int returnVal = fc.showSaveDialog(this);
-                        FILE_BROWSER_WIDTH = fc.getWidth();
-                        FILE_BROWSER_HEIGHT = fc.getHeight();
+                        fc.getWidth();
+                        fc.getHeight();
                         if (returnVal == JFileChooser.APPROVE_OPTION) {
                             try {
                                 file = new File(fc.getSelectedFile() + 
".html");
@@ -441,8 +449,8 @@
                         fc.setFileFilter(filter);
                         fc.addChoosableFileFilter(filter);
                         final int returnVal = fc.showSaveDialog(this);
-                        FILE_BROWSER_WIDTH = fc.getWidth();
-                        FILE_BROWSER_HEIGHT = fc.getHeight();
+                        fc.getWidth();
+                        fc.getHeight();
                         if (returnVal == JFileChooser.APPROVE_OPTION) {
                             try {
                                 file = new File(fc.getSelectedFile() + 
".html");
@@ -465,8 +473,8 @@
                         fc.setFileFilter(filter);
                         fc.addChoosableFileFilter(filter);
                         final int returnVal = fc.showSaveDialog(this);
-                        FILE_BROWSER_WIDTH = fc.getWidth();
-                        FILE_BROWSER_HEIGHT = fc.getHeight();
+                        fc.getWidth();
+                        fc.getHeight();
                         if (returnVal == JFileChooser.APPROVE_OPTION) {
                             try {
                                 file = new File(fc.getSelectedFile() + 
".html");
@@ -491,8 +499,8 @@
                         fc.setFileFilter(filter);
                         fc.addChoosableFileFilter(filter);
                         final int returnVal = fc.showSaveDialog(this);
-                        FILE_BROWSER_WIDTH = fc.getWidth();
-                        FILE_BROWSER_HEIGHT = fc.getHeight();
+                        fc.getWidth();
+                        fc.getHeight();
                         if (returnVal == JFileChooser.APPROVE_OPTION) {
                             try {
                                 file = new File(fc.getSelectedFile() + ".csv");
@@ -544,8 +552,8 @@
                     fc.setFileFilter(filter);
                     fc.addChoosableFileFilter(filter);
                     final int returnVal = fc.showSaveDialog(this);
-                    FILE_BROWSER_WIDTH = fc.getWidth();
-                    FILE_BROWSER_HEIGHT = fc.getHeight();
+                    fc.getWidth();
+                    fc.getHeight();
                     if (returnVal == JFileChooser.APPROVE_OPTION) {
                         if (fc.getFileFilter().equals(filter)) {
                             file = new File(fc.getSelectedFile() + ".png");
@@ -553,9 +561,16 @@
                             panel.toGraphicFile(file);
                             saved(file);
                         } else if (fc.getFileFilter().equals(filter2)) {
-
-                            JUMPWorkbench.getInstance().getFrame()
-                                    .warnUser("Test: not yet implemented");
+                            file = new File(fc.getSelectedFile() + ".dxf");
+                            LAST_DIR = file.getParent();
+                            double[][] pointsOfProfile = null;
+                            for (final Plot plot : panel.getPlots()) {
+                                pointsOfProfile = plot.getData();
+                            }
+                            setCursor(new Cursor(Cursor.WAIT_CURSOR));
+                            exportToDxf(file.getAbsolutePath(), 
pointsOfProfile);
+                            setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
+                            saved(file);
                         }
                     }
 
@@ -566,8 +581,8 @@
                     fc.setFileFilter(filter);
                     fc.addChoosableFileFilter(filter);
                     final int returnVal = fc.showSaveDialog(this);
-                    FILE_BROWSER_WIDTH = fc.getWidth();
-                    FILE_BROWSER_HEIGHT = fc.getHeight();
+                    fc.getWidth();
+                    fc.getHeight();
                     if (returnVal == JFileChooser.APPROVE_OPTION) {
                         try {
                             file = new File(fc.getSelectedFile() + ".csv");
@@ -606,8 +621,8 @@
                     fc.setFileFilter(filter);
                     fc.addChoosableFileFilter(filter);
                     final int returnVal = fc.showSaveDialog(this);
-                    FILE_BROWSER_WIDTH = fc.getWidth();
-                    FILE_BROWSER_HEIGHT = fc.getHeight();
+                    fc.getWidth();
+                    fc.getHeight();
                     if (returnVal == JFileChooser.APPROVE_OPTION) {
                         try {
                             file = new File(fc.getSelectedFile() + ".html");
@@ -636,8 +651,8 @@
                     fc.setFileFilter(filter);
                     fc.addChoosableFileFilter(filter);
                     final int returnVal = fc.showSaveDialog(this);
-                    FILE_BROWSER_WIDTH = fc.getWidth();
-                    FILE_BROWSER_HEIGHT = fc.getHeight();
+                    fc.getWidth();
+                    fc.getHeight();
                     if (returnVal == JFileChooser.APPROVE_OPTION) {
                         try {
                             file = new File(fc.getSelectedFile() + ".png");
@@ -737,39 +752,6 @@
         LOG.error(plugin.getName() + " Exception: ", e);
     }
 
-    // Da rimuovere
-    // public void setApplyVisible(boolean applyVisible) {
-    // okCancelApplyPanel.setApplyVisible(applyVisible);
-    // }
-
-    // public void setCancelVisible(boolean cancelVisible) {
-    // okCancelApplyPanel.setCancelVisible(cancelVisible);
-    // }
-
-    // public void setOKVisible(boolean okVisible) {
-    // okCancelApplyPanel.setOKVisible(okVisible);
-    // }
-
-    // public void setApplyEnabled(boolean applyEnabled) {
-    // okCancelApplyPanel.setApplyEnabled(applyEnabled);
-    // }
-
-    // public void setCancelEnabled(boolean cancelEnabled) {
-    // okCancelApplyPanel.setCancelEnabled(cancelEnabled);
-    // }
-
-    // public void setOKEnabled(boolean okEnabled) {
-    // okCancelApplyPanel.setOKEnabled(okEnabled);
-    // }
-
-    // public boolean wasApplyPressed() {
-    // return okCancelApplyPanel.wasApplyPressed();
-    // }
-
-    // public boolean wasOKPressed() {
-    // return okCancelApplyPanel.wasOKPressed();
-    // }
-
     protected JPanel getOKSavePanel() {
         final JPanel okPanel = new JPanel();
         final JButton saveButton = new JButton(SAVE) {
@@ -813,4 +795,264 @@
         return okPanel;
 
     }
+
+    // [Giuseppe Aruta 2018-3-14] The following code derives from AdbToolbox
+    // Raster>Topography>Section code.
+    // see also class it.betastudio.adbtoolbox.libs.DxfExport
+
+    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;
+            int interPointsCount = 0;
+            final int txtHight = 10;
+            double baseElev = 0.0D;
+            final int sepSpacing = 10 * txtHight;
+            final String layNameProf = "PROFILE";
+            final String layNameNeatLines = "BASE";
+            final String layNameText = "TEXT";
+
+            if (baseElev < minY) {
+                minY = baseElev;
+            } else {
+                baseElev = minY;
+            }
+
+            // Main points coords
+            final double sep1Y = minY - txtHight * 2;
+            final double sep2Y = sep1Y - sepSpacing;
+            final double sep3Y = sep2Y - sepSpacing;
+
+            final double legX = minX - (txtHight * 30);
+            final double leg1Y = minY + 0.5 * txtHight;
+            final double leg2Y = sep1Y + txtHight;
+            final double leg3Y = sep2Y + 0.5 * sepSpacing;
+            final double leg4Y = sep3Y + 0.5 * sepSpacing;
+
+            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, 1);
+            dxfExp.writeLayer(layNameNeatLines, 5);
+            dxfExp.writeLayer(layNameText, 7);
+            dxfExp.writeTableEnd();
+
+            dxfExp.writeEndSec();
+
+            // Write section
+            dxfExp.writeStartSec();
+            dxfExp.writeEntStart();
+            dxfExp.writePolyline(layNameProf, points);
+
+            // Write bounding lines
+            // dxfExp.writeLine(layNameNeatLines, minX, minY, minX,
+            // points[0][1]);
+            dxfExp.writeLine(layNameNeatLines, legX, minY, maxX, minY);
+            // dxfExp.writeLine(layNameNeatLines, maxX, minY, maxX,
+            // points[pointsCount-1][1]);
+
+            // Write separators
+            dxfExp.writeLine(layNameNeatLines, legX, sep1Y, maxX, sep1Y);
+            dxfExp.writeLine(layNameNeatLines, legX, sep2Y, maxX, sep2Y);
+            dxfExp.writeLine(layNameNeatLines, legX, sep3Y, maxX, sep3Y);
+
+            // Write legend
+
+            final Task selectedTask = workbenchContext.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 = "";
+            }
+            dxfExp.writeText(layNameText, legX, leg1Y, 0, 0, 0, 0, txtHight, 0,
+                    0, 0, "Reference height: " + twoPlaces.format(baseElev)
+                            + " " + unitsDistLabel);
+            dxfExp.writeText(layNameText, 0, 0, 0, legX, leg2Y, 0, txtHight, 0,
+                    0, 2, "Partial distance" + unitsDistLabel);
+            dxfExp.writeText(layNameText, 0, 0, 0, legX, leg3Y, 0, txtHight, 0,
+                    0, 2, "Progressive distance" + unitsDistLabel);
+            dxfExp.writeText(layNameText, 0, 0, 0, legX, leg4Y, 0, txtHight, 0,
+                    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;
+
+            // Count interpoints
+            double[] interStepD = null;
+
+            interStepD = new double[1];
+            // Define 100 meters for length/height steps
+            interStepD[0] = 100;
+            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
+
+                // Vertical lines
+                p1x = interPointsDists[ip];
+                p1y = interPointsElev[ip];
+                p2x = interPointsDists[ip];
+                p2y = minY;
+                dxfExp.writeLine(layNameNeatLines, p1x, p1y, p2x, p2y);
+
+                if (ip < interPointsCount - 1) {
+                    // Partial distance labels
+                    alPt1x = (interPointsDists[ip] + interPointsDists[ip + 1]) 
/ 2;
+                    alPt1y = sep1Y + txtHight;
+                    labelText = twoPlaces.format(interPointsDists[ip + 1]
+                            - interPointsDists[ip]);
+                    dxfExp.writeText(layNameText, 0, 0, 0, alPt1x, alPt1y, 0,
+                            txtHight, 0, 4, 2, labelText);
+                }
+
+                // Progressive distance labels
+                alPt1x = interPointsDists[ip];
+                alPt1y = sep2Y + txtHight;
+                labelText = twoPlaces.format(interPointsDists[ip]);
+                dxfExp.writeText(layNameText, 0, 0, 0, alPt1x, alPt1y, 0,
+                        txtHight, 90, 0, 2, labelText);
+
+                // Elevation lables
+                alPt1x = interPointsDists[ip];
+                alPt1y = sep3Y + txtHight;
+                labelText = twoPlaces.format(points[interPointsIds[ip]][1]);
+                dxfExp.writeText(layNameText, 0, 0, 0, alPt1x, alPt1y, 0,
+                        txtHight, 90, 0, 2, labelText);
+
+                // Ticks
+                alPt1x = interPointsDists[ip];
+                alPt1y = sep2Y;
+                alPt2y = sep2Y + (txtHight / 2);
+                dxfExp.writeLine(layNameNeatLines, alPt1x, alPt1y, alPt1x,
+                        alPt2y);
+                alPt1y = sep3Y;
+                alPt2y = sep3Y + (txtHight / 2);
+                dxfExp.writeLine(layNameNeatLines, alPt1x, alPt1y, alPt1x,
+                        alPt2y);
+
+            }
+
+            // Finalize DXF
+            dxfExp.writeEnding();
+            final int ret = dxfExp.exportDxf(fileName);
+            if (ret == 0) {
+                return;
+            } else {
+                return;
+            }
+        } catch (final Exception ex) {
+            workbenchContext.getWorkbench().getFrame()
+                    .warnUser("Errore durante l'esportazione: ");
+            return;
+        }
+    }
+
+    public static WorkbenchContext workbenchContext = JUMPWorkbench
+            .getInstance().getContext();
 }


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Jump-pilot-devel mailing list
Jump-pilot-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel

Reply via email to