Overview
You can use Kabeja as library in your application if you need to parse DXF and generate SVG output.
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import org.xml.sax.ContentHandler; import org.kabeja.dxf.DXFDocument; import org.kabeja.parser.DXFParseException; import org.kabeja.parser.Parser; import org.kabeja.parser.ParserBuilder; import org.kabeja.svg.SVGGenerator; import org.kabeja.xml.SAXGenerator; public class MyClass{ public MyClass(){ ... } public void parseFile(String sourceFile) { Parser parser = ParserBuilder.createDefaultParser(); try { parser.parse(new FileInputStream(sourceFile)); DXFDocument doc = parser.getDocument(); //the SVG will be emitted as SAX-Events //see org.xml.sax.ContentHandler for more information ContentHandler myhandler = new ContentHandlerImpl(); //the output - create first a SAXGenerator (SVG here) SAXGenerator generator = new SVGGenerator(); //setup properties generator.setProperties(new HashMap()); //start the output generator.generate(doc,myhandler); } catch (DXFParseException e) { e.printStackTrace(); } catch (IOException ioe) { ioe.printStackTrace(); } } }
Get data from the DXFDocument
The following example shows how to extract a layer and polyline of a draft.
import java.io.InputStream; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.kabeja.dxf.DXFConstants; import org.kabeja.dxf.DXFDocument; import org.kabeja.dxf.DXFLayer; import org.kabeja.dxf.DXFLine; import org.kabeja.dxf.DXFPolyline; import org.kabeja.dxf.DXFVertex; import org.kabeja.dxf.DXFConstants; import org.kabeja.dxf.helpers.Point; import org.kabeja.parser.DXFParseException; import org.kabeja.parser.Parser; import org.kabeja.parser.DXFParser; import org.kabeja.parser.ParserBuilder; public class DXFExtractor{ public void read(InputStream in, String layerid) { Parser parser = ParserBuilder.createDefaultParser(); try { //parse parser.parse(in, DXFParser.DEFAULT_ENCODING); //get the documnet and the layer DXFDocument doc = parser.getDocument(); DXFLayer layer = doc.getDXFLayer(layerid); //get all polylines from the layer List plines = layer.getDXFEntities(DXFConstants.ENTITY_TYPE_POLYLINE); //work with the first polyline doSomething((DXFPolyline) plines.get(0)); } catch (DXFParseException e) { e.printStackTrace(); } } public void doSomething(DXFPolyline pline) { //iterate over all vertex of the polyline for (int i = 0; i < pline.getVertexCount(); i++) { DXFVertex vertex = pline.getVertex(i); //do something like collect the data and //build a mesh for a FEM system } } }