Я использовал Kabeja в своем проекте, и я заметил, что это очень хороший выбор, потому что это бесплатный и мощный инструмент.
Линия автокад представлена двумя конечностями (начальная и конечная точки)
Каждая точка имеет 3 координаты: X
, Y
и Z
Ниже представлен 2D-метод (работающий как с X
, так и с Y
), который принимает файл dxf в качестве параметра, анализирует его и затем извлекает строки внутри него.
Строки autocad будут прочитаны с использованием функций kabeja, после чего мы сможем построить наш собственный Java Line
s
public class ReadAutocadFile {
public static ArrayList<Line> getAutocadFile(String filePath) throws ParseException {
ArrayList<Line> lines = new ArrayList<>();
Parser parser = ParserBuilder.createDefaultParser();
parser.parse(filePath, DXFParser.DEFAULT_ENCODING);
DXFDocument doc = parser.getDocument();
List<DXFLine> lst = doc.getDXFLayer("layername ... whatever").getDXFEntities(DXFConstants.ENTITY_TYPE_LINE);
for (int index = 0; index < lst.size(); index++) {
Bounds bounds = lst.get(index).getBounds();
Line line = new Line(
new Point(new Double(bounds.getMinimumX()).intValue(),
new Double(bounds.getMinimumY()).intValue()),
new Point(new Double(bounds.getMaximumX()).intValue(),
new Double(bounds.getMaximumY()).intValue())
);
lines.add(line);
}
return lines;
}
}
Где каждый Line
равен двум Точкам с в Java
public class Line {
private Point p1;
private Point p2;
public Line (Point p1, Point p2){
this.p1 = p1;
this.p2 = p2;
}
public Point getP1() {
return p1;
}
public void setP1(Point p1) {
this.p1 = p1;
}
public Point getP2() {
return p2;
}
public void setP2(Point p2) {
this.p2 = p2;
}
}
Демо-версия:
public class ReadAutocadFileTest {
public static void main(String[] args) {
try {
File file = new File("testFile.dxf");
ArrayList<Line> lines = ReadAutocadFile.getAutocadFile(file.getAbsolutePath());
for(int index = 0 ; index < lines.size() ; index++){
System.out.println("Line " + (index +1));
System.out.print("(" + lines.get(index).getP1().getX() + "," + lines.get(index).getP1().getY()+ ")");
System.out.print(" to (" + lines.get(index).getP2().getX() + "," + lines.get(index).getP2().getY()+ ")\n");
}
} catch (Exception e) {
}
}
}
ArrayList из Line
s содержит все строки файла autocad, мы можем, например, нарисовать этот массив на JPanel
, поэтому мы полностью переходим с autocad на Java.