diff --git a/diylc/diylc-swing/src/main/java/org/diylc/swing/ActionFactory.java b/diylc/diylc-swing/src/main/java/org/diylc/swing/ActionFactory.java index 5ac45f23..bbb796ba 100644 --- a/diylc/diylc-swing/src/main/java/org/diylc/swing/ActionFactory.java +++ b/diylc/diylc-swing/src/main/java/org/diylc/swing/ActionFactory.java @@ -22,6 +22,7 @@ import java.awt.datatransfer.ClipboardOwner; import javax.swing.Icon; import org.apache.log4j.Logger; import org.diylc.swing.actions.analyze.*; +import org.diylc.swing.actions.file.*; import org.diylc.swingframework.IDrawingProvider; import org.diylc.common.INetlistAnalyzer; @@ -56,20 +57,6 @@ import org.diylc.swing.actions.edit.SaveAsTemplateAction; import org.diylc.swing.actions.edit.SelectAllAction; import org.diylc.swing.actions.edit.SendToBackAction; import org.diylc.swing.actions.edit.UngroupAction; -import org.diylc.swing.actions.file.CreateBomAction; -import org.diylc.swing.actions.file.ExitAction; -import org.diylc.swing.actions.file.ExportBlocksAction; -import org.diylc.swing.actions.file.ExportPDFAction; -import org.diylc.swing.actions.file.ExportVariantsAction; -import org.diylc.swing.actions.file.ImportAction; -import org.diylc.swing.actions.file.ImportBlocksAction; -import org.diylc.swing.actions.file.ImportNetlistAction; -import org.diylc.swing.actions.file.ImportVariantsAction; -import org.diylc.swing.actions.file.NewAction; -import org.diylc.swing.actions.file.OpenAction; -import org.diylc.swing.actions.file.PrintAction; -import org.diylc.swing.actions.file.SaveAction; -import org.diylc.swing.actions.file.SaveAsAction; public class ActionFactory { @@ -120,6 +107,11 @@ public class ActionFactory { IDrawingProvider drawingProvider, ISwingUI swingUI, String defaultSuffix) { return new ExportPDFAction(plugInPort, drawingProvider, swingUI, defaultSuffix); } + + public ExportDXFAction createExportXDFAction(IPlugInPort plugInPort, + IDrawingProvider drawingProvider, ISwingUI swingUI, String defaultSuffix) { + return new ExportDXFAction(plugInPort, drawingProvider, swingUI, defaultSuffix); + } public ExportGerberAction createExportGerberAction(IPlugInPort plugInPort, ISwingUI swingUI) { return new ExportGerberAction(plugInPort, swingUI); diff --git a/diylc/diylc-swing/src/main/java/org/diylc/swing/actions/file/ExportDXFAction.java b/diylc/diylc-swing/src/main/java/org/diylc/swing/actions/file/ExportDXFAction.java new file mode 100644 index 00000000..9c34312f --- /dev/null +++ b/diylc/diylc-swing/src/main/java/org/diylc/swing/actions/file/ExportDXFAction.java @@ -0,0 +1,101 @@ +package org.diylc.swing.actions.file; + +import com.jsevy.jdxf.DXFDocument; +import com.jsevy.jdxf.DXFGraphics; +import com.orsonpdf.PDFDocument; +import com.orsonpdf.PDFGraphics2D; +import com.orsonpdf.PDFHints; +import com.orsonpdf.Page; +import org.diylc.common.IPlugInPort; +import org.diylc.common.ITask; +import org.diylc.swing.ActionFactory; +import org.diylc.swing.ISwingUI; +import org.diylc.swing.gui.DialogFactory; +import org.diylc.swing.plugins.file.FileFilterEnum; +import org.diylc.swingframework.IDrawingProvider; +import org.diylc.swingframework.export.DrawingExporter; +import org.diylc.utils.IconLoader; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.io.File; +import java.io.FileWriter; + +public class ExportDXFAction extends AbstractAction { + + private static final long serialVersionUID = 1L; + + private static final int SCREEN_RESOLUTION = Toolkit.getDefaultToolkit().getScreenResolution(); + + private IDrawingProvider drawingProvider; + private ISwingUI swingUI; + private IPlugInPort plugInPort; + private String defaultSuffix; + + public ExportDXFAction(IPlugInPort plugInPort, IDrawingProvider drawingProvider, + ISwingUI swingUI, String defaultSuffix) { + super(); + this.plugInPort = plugInPort; + this.drawingProvider = drawingProvider; + this.swingUI = swingUI; + this.defaultSuffix = defaultSuffix; + putValue(AbstractAction.NAME, "Export to DXF"); + putValue(AbstractAction.SMALL_ICON, IconLoader.PDF.getIcon()); + } + + @Override + public void actionPerformed(ActionEvent e) { + ActionFactory.LOG.info("ExportDXFAction triggered"); + + File initialFile = null; + String currentFile = plugInPort.getCurrentFileName(); + if (currentFile != null) { + File cFile = new File(currentFile); + initialFile = + new File(cFile.getName().replaceAll("(?i)\\.diy", "") + defaultSuffix + ".dxf"); + } + + final File file = DialogFactory.getInstance().showSaveDialog(swingUI.getOwnerFrame(), + FileFilterEnum.PDF.getFilter(), initialFile, FileFilterEnum.DXF.getExtensions()[0], null); + if (file != null) { + swingUI.executeBackgroundTask(new ITask() { + + @Override + public Void doInBackground() throws Exception { + ActionFactory.LOG.debug("Exporting to " + file.getAbsolutePath()); + + DXFDocument dxfDocument = new + DXFDocument(file.getName()); + DXFGraphics dxfGraphics = + dxfDocument.getGraphics(); + + Dimension d = drawingProvider.getSize(); + double factor = 1;//(double)(72.0F / (float)SCREEN_RESOLUTION); + + for(int i = 0; i < drawingProvider.getPageCount(); ++i) { + dxfGraphics.setRenderingHint(PDFHints.KEY_DRAW_STRING_TYPE, PDFHints.VALUE_DRAW_STRING_TYPE_VECTOR); + drawingProvider.draw(i, dxfGraphics, factor); + } + + String dxfText = dxfDocument.toDXFString(); + FileWriter fileWriter = new FileWriter(file.getAbsolutePath()); + fileWriter.write(dxfText); + fileWriter.flush(); + fileWriter.close(); + + return null; + } + + @Override + public void complete(Void result) {} + + @Override + public void failed(Exception e) { + swingUI.showMessage("Could not export to DXF. " + e.getMessage(), "Error", + ISwingUI.ERROR_MESSAGE); + } + }, true); + } + } +} diff --git a/diylc/diylc-swing/src/main/java/org/diylc/swing/plugins/file/FileFilterEnum.java b/diylc/diylc-swing/src/main/java/org/diylc/swing/plugins/file/FileFilterEnum.java index f7a1cd25..95c098d2 100644 --- a/diylc/diylc-swing/src/main/java/org/diylc/swing/plugins/file/FileFilterEnum.java +++ b/diylc/diylc-swing/src/main/java/org/diylc/swing/plugins/file/FileFilterEnum.java @@ -30,7 +30,7 @@ public enum FileFilterEnum { "Excel Workbooks (*.xls)", "xls"), CSV("Comma Separated Files (*.csv)", "csv"), HTML("HTML Files (*.html)", "html"), IMAGES("Image Files (*.png, *.jpg, *.gif)", "png", "jpg", "gif"), XML("XML Files (*.xml)", "xml"), TEST("Test Files (*.tst)", "tst"), CRV("Curve Files (*.crv)", "crv"), SVG("SVG Files (*.svg)", "svg"), - GBR("Gerber Files (*.gbr)", "gbr"), ALL_FILES("All Files (*.*)", "*"); + GBR("Gerber Files (*.gbr)", "gbr"), DXF("CAD Files (*.dxf)", "gbr"), ALL_FILES("All Files (*.*)", "*"); FileFilter filter; String[] extensions; diff --git a/diylc/diylc-swing/src/main/java/org/diylc/swing/plugins/file/FileMenuPlugin.java b/diylc/diylc-swing/src/main/java/org/diylc/swing/plugins/file/FileMenuPlugin.java index b6f11153..6c21231b 100644 --- a/diylc/diylc-swing/src/main/java/org/diylc/swing/plugins/file/FileMenuPlugin.java +++ b/diylc/diylc-swing/src/main/java/org/diylc/swing/plugins/file/FileMenuPlugin.java @@ -84,6 +84,8 @@ public class FileMenuPlugin implements IPlugIn, IDynamicSubmenuHandler { actionFactory.createExportPNGAction(plugInPort, drawingProvider, swingUI, ""), PROJECT_TITLE); swingUI.injectMenuAction( actionFactory.createExportGerberAction(plugInPort, swingUI), PROJECT_TITLE); + swingUI.injectMenuAction( + actionFactory.createExportXDFAction(plugInPort, drawingProvider, swingUI, ""), PROJECT_TITLE); swingUI.injectMenuAction(actionFactory.createPrintAction(drawingProvider, swingUI, Toolkit.getDefaultToolkit().getMenuShortcutKeyMaskEx()), PROJECT_TITLE);