dxf export

This commit is contained in:
Bane Stojkovic
2025-12-29 22:39:21 +01:00
parent 5ba5eef678
commit 662502da0b
4 changed files with 110 additions and 15 deletions
@@ -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);
@@ -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<Void>() {
@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);
}
}
}
@@ -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;
@@ -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);