使用kabeja库解析DXF格式文件

news2024/11/14 21:24:51

DXF格式是一种开源的CAD文件格式,如何实现Java代码对齐的解析,在网上找了很久,也没有找到非常成熟的库。很奇怪,开源的格式,正常应该会有很多的库来支持。只找到了一个kabeja库,最新版本还是2008年出的0.4版本,而且官网还是提供jar和exe运行文件的支持方式。在研究它的过程中遇到了一些问题,这里记录下来,希望大家少踩一些坑吧。

下载依赖

  1. 在https://kabeja.sourceforge.net/index.html下载对应的包就可以
  2. 下载完成后,解压缩,找到lib文件夹下的kabeja-0.4.jar,它是核心包,如果需要其他模块,也可以引入其他的包在这里插入图片描述
  3. 将这个jar包打入本地Maven仓库
 mvn install:install-file -Dfile=E:\temp\lib\kabeja-0.4.jar -DgroupId=org.kabeja -DartifactId=kabeja -Dversion=0.4 -Dpackaging=jar
  1. 在pom文件中引入
        <dependency>
            <groupId>org.kabeja</groupId>
            <artifactId>kabeja</artifactId>
            <version>0.4</version>
        </dependency>

代码测试

package com.example.gdal;

import org.kabeja.dxf.*;
import org.kabeja.parser.ParseException;
import org.kabeja.parser.Parser;
import org.kabeja.parser.ParserBuilder;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Iterator;
import java.util.List;

public class ReadDxf {
    public static void main(String[] args) throws FileNotFoundException, ParseException {
        Parser dxfParser = ParserBuilder.createDefaultParser();
        dxfParser.parse(new FileInputStream("C://Users/hanbo/Desktop/cad/color.dxf"), "UTF-8");//需要转换的dxf
        DXFDocument doc = dxfParser.getDocument();

//        System.out.println(doc.);
        //遍历图层
        Iterator iter= doc.getDXFLayerIterator();

        while (iter.hasNext()){
            DXFLayer dxfLayer = (DXFLayer)iter.next();
            String layerName=dxfLayer.getName();
//            System.out.println("读取图层"+layerName);
            readEntity(dxfLayer);
        }

        readBlock(doc);
    }

    public static void readEntity(DXFLayer layer){
        Iterator iter= layer.getDXFEntityTypeIterator();
        while (iter.hasNext()){
            String s=(String) iter.next();
//            System.out.println(s);
            getEntity(layer,s);
        }
    }
    //读取block
    public static void readBlock(DXFDocument doc){
        Iterator iter= doc.getDXFBlockIterator();
        while (iter.hasNext()){
            DXFBlock s=(DXFBlock) iter.next();

//            System.out.println(s.getName());
        }
    }
    //读取图层下的实体
    public static void getEntity(DXFLayer layer,String type){
        List<DXFEntity>  entities= layer.getDXFEntities(type);
        for (int i = 0; i < entities.size(); i++) {
            System.out.println(entities.get(i).getColor());
            String color= DXFColor.getRGBString(entities.get(i).getColor());

            System.out.println(color);
//            System.out.println(entities.get(i).getID());
        }
    }
}

注意事项

解析出来的实体的颜色都是一个整数,不是rgb格式的,查询资料发现可以参考下表中数据

索引号RGB
125500
22552550
302550
40255255
500255
62550255
7255255255
8128128128
9192192192
1025500
11255127127
1220400
13204102102
1415300
151537676
1612700
171276363
187600
19763838
20255630
21255159127
22204510
23204127102
24153380
251539576
26127310
271277963
2876190
29764738
302551270
31255191127
322041020
33204153102
34153760
3515311476
36127630
371279563
3876380
39765738
402551910
41255223127
422041530
43204178102
441531140
4515313376
46127950
4712711163
4876570
49766638
502552550
51255255127
522042040
53204204102
541531530
5515315376
561271270
5712712763
5876760
59767638
601912550
61223255127
621532040
63178204102
641141530
6513315376
66951270
6711112763
6857760
69667638
701272550
71191255127
721022040
73153204102
74761530
7511415376
76631270
779512763
7838760
79577638
80632550
81159255127
82512040
83127204102
84381530
859515376
86311270
877912763
8819760
89477638
9002550
91127255127
9202040
93102204102
9401530
957615376
9601270
976312763
980760
99387638
100025563
101127255159
102020451
103102204127
104015338
1057615395
106012731
1076312779
10807619
109387647
1100255127
111127255191
1120204102
113102204153
114015376
11576153114
116012763
1176312795
11807638
119387657
1200255191
121127255223
1220204153
123102204178
1240153114
12576153133
126012795
12763127111
12807657
129387666
1300255255
131127255255
1320204204
133102204204
1340153153
13576153153
1360127127
13763127127
13807676
139387676
1400191255
141127223255
1420153204
143102178204
1440114153
14576133153
146095127
14763111127
14805776
149386676
1500127255
151127191255
1520102204
153102153204
154076153
15576114153
156063127
1576395127
15803876
159385776
160063255
161127159255
162051204
163102127204
164038153
1657695153
166031127
1676379127
16801976
169384776
17000255
171127127255
17200204
173102102204
17400153
1757676153
17600127
1776363127
1780076
179383876
180630255
181159127255
182510204
183127102204
184380153
1859576153
186310127
1877963127
18819076
189473876
1901270255
191191127255
1921020204
193153102204
194760153
19511476153
196630127
1979563127
19838076
199573876
2001910255
201223127255
2021530204
203178102204
2041140153
20513376153
206950127
20711163127
20857076
209663876
2102550255
211255127255
2122040204
213204102204
2141530153
21515376153
2161270127
21712763127
21876076
219763876
2202550191
221255127223
2222040153
223204102178
2241530114
22515376133
226127095
22712763111
22876057
229763866
2302550127
231255127191
2322040102
233204102153
234153076
23515376114
236127063
2371276395
23876038
239763857
240255063
241255127159
242204051
243204102127
244153038
2451537695
246127031
2471276379
24876019
249763847
250515151
251919191
252132132132
253173173173
254214214214
255255255255
255255255255

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/908166.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GTK3实现自定义列表

使用gtk,如果想自己定义列表,思路可以将每个列表项作为一个hbox,整个列表是一个vbox。通过对容器动态的添加删除,实现列表操作,同时添加任何自己所需要的控件。 下面的例子是实现一个显示图片、按钮和进度条的列表,并且进行上移下移,具有添加和删除列表项功能但没有演示…

网站巡查与SEO:爱校对如何确保内容的最佳质量?

随着互联网的飞速发展&#xff0c;企业和个人正在寻找优化他们网站内容的最佳方式。在这个数字化时代&#xff0c;网站巡查和SEO已成为维持网站高度相关性和可见性的关键。此时&#xff0c;工具如“爱校对”不仅帮助检查文本的质量&#xff0c;还确保内容对搜索引擎优化&#x…

STM32使用定时器实现微秒(us)级延时

STM32使用定时器实现微秒&#xff08;us&#xff09;级延时 引言前期准备介绍系统时钟定时器时钟 项目项目介绍STM32CubeMX程序 引言 目前开发STM32普遍使用HAL库&#xff0c;但 HAL 库封装的延时函数目前仅支持 ms 级别的延时&#xff0c;日常很多情况下会用到 us 延时&#…

IC封装——从基本概念到TSV

一、IC封装 在之前文章中有大致提过封装&#xff0c;这里展开讲讲 芯片生产流程_沧海一升的博客-CSDN博客每个半导体产品的制造都需要数百个工艺&#xff0c;泛林集团将整个制造过程分为八个步骤&#xff1a;晶圆加工-氧化-光刻-刻蚀-薄膜沉积-互连-测试-封装。_芯片生产流程h…

spring异步框架使用教程

背景 在需求开发过程中&#xff0c;为了提升效率&#xff0c;很容易就会遇到需要使用多线程的场景。这个时候一般都会选择建一个线程池去专门用来进行某一类动作&#xff0c;这种任务到来的时候往往伴随着大量的线程被创建调用。而还有另外一种场景是整个任务的执行耗时比较长…

ElasticSearch 7.4学习记录(DSL语法)

上文和大家一起初次了解了很多ES相关的基础知识&#xff0c;本文的内容将会是实际企业中所需要的吗&#xff0c;也是我们需要熟练应用的内容。 面对ES&#xff0c;我们最多使用的就是查询&#xff0c;当我负责这个业务时&#xff0c;现不需要我去考虑如何创建索引&#xff0c;添…

ubuntu18.04安装keil5(踩坑)看完再享用,别直接上手

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、安装winewine的总结 二、安装Keil5总结 前言 切记看完再享用&#xff0c;别直接上手&#xff0c;不然安装的时候会和我一样踩坑的&#xff08;走了很多弯路…

Unity之用Transform 数组加多个空物体-->简单地控制物体按照指定路线自动行驶

文章目录 **原理解释**&#xff1a;**带注释的代码**&#xff1a;实际运用 当你需要实现物体按照指定路线行驶时&#xff0c;你可以通过以下步骤来实现&#xff1a; 原理解释&#xff1a; 路径点&#xff1a;你需要定义一系列路径点&#xff0c;这些点将构成物体行驶的路线。每…

[软件工具]精灵标注助手目标检测数据集格式转VOC或者yolo

有时候我们拿到一个数据集发现是xml文件格式如下&#xff1a; <?xml version"1.0" ?> <doc><path>C:\Users\Administrator\Desktop\test\000000000074.jpg</path><outputs><object><item><name>dog</name>…

纷享销客连接型CRM助力中国企业全球业务增长

近年来&#xff0c;中国企业出海热度越来越高&#xff0c;中国企业出海之路也越走越宽&#xff0c;全球化步伐明显加速。2023年&#xff0c;中国企业业务出海正进入快车道和分水岭阶段&#xff0c;中国也正在从一个世界工厂变成全球资源的整合者。 0 中国企业出海&#xff0c…

精简体积的OLED 基础驱动库 - OLED_BASIC

打算用一个存储空间不大的Arduino 芯片做点简单的文字和图形显示&#xff0c;屏幕芯片SSD1316&#xff0c;感觉u8g2 占用还是太大&#xff0c;想裁剪别人的现成代码又感觉无从下手&#xff0c;所以就基本上重写了一个OLED 显示库&#xff0c;仓库地址&#xff1a;gitee.com/etb…

SQL助你面大厂(Join家族介绍)

在学习SQL时候&#xff0c;在多表查询的时候你肯定使用过Join&#xff0c;无非就是把两表联合在一起进行多表查询&#xff0c;但是你是真的了解它们的用法么&#xff1f; Join家族一般有left Join、Rigth Join、Inner Join、Left Semi Join、Left Anti Join、Full Join为主 C…

补充1 MATLAB_GUI_修改普通按钮(PushButton)的参数创建一个长按回调按钮

目录 一、实例效果二、补充的知识点&#xff08;两种回调函数&#xff09;三、步骤  1. 先建一个空白的GUI。  2.在GUI Figure 上添加一个按钮&#xff08;PushButton&#xff09;组件&#xff0c;并设置其属性&#xff0c;例如位置、大小和文本等。  3.CtrS保存一下GUI。…

强推9个研究生必备的免费论文下载网站

一、文献党下载器 文献党下载器把庞大的中外文献数据库资源集成在一个平台&#xff0c;就是把大量的中外数据库资源整合在一个站&#xff08;目前文献资源量名列前茅&#xff09;。不论是中文还是外文文献&#xff0c;不论是哪种文献类型&#xff0c;不论是哪个学科领域该网站…

<kernel>kernel 6.4 USB-之-hub_port_connect()分析

&#xff1c;kernel&#xff1e;kernel 6.4 USB-之-hub_port_connect()分析 kernel 6.4 USB系列文章如下&#xff1a; &#xff1c;kernel&#xff1e;kernel 6.4 USB-之-hub_event()分析 &#xff1c;kernel&#xff1e;kernel 6.4 USB-之-port_event()分析 &#xff1c;kern…

全球机器传感器市场价值约为142亿美元,预计将以超过7.5%的增长率增长

机器传感器是一类用于检测、测量和感知机器环境中物理量、化学量或其他特定参数的设备。这些传感器将实际的物理现象转化为电信号或数字信号&#xff0c;以便计算机或控制系统进行处理、分析和控制。机器传感器在工业、自动化、物联网、机器人、汽车等领域有广泛应用。 根据阿…

部门来了个新同事,听说是00后,上来一顿操作给我看呆了...

在程序员职场上&#xff0c;什么样的人最让人反感呢? 是技术不好的人吗?并不是。技术不好的同事&#xff0c;我们可以帮他。 是技术太强的人吗?也不是。技术很强的同事&#xff0c;可遇不可求&#xff0c;向他学习还来不及呢。 真正让人反感的&#xff0c;是技术平平&#x…

OD动态调试exe

之前一直卡&#xff0c;好不容易搞懂一点&#xff0c;记下来记下来 分析exe文件&#xff0c;用ida打开&#xff0c;找到主函数main&#xff0c;分析主函数可以发现&#xff0c;main在判断之后调用了l02等函数 因为判断部分的逻辑还是有点复杂&#xff0c;因此想让他直接打印函…

基于PaddleOCR2.7.0发布WebRest服务测试案例

基于PaddleOCR2.7.0发布WebRest服务测试案例 #WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. #警告&#xff1a;这是一个开发服务器。不要在生产部署中使用它。请改用生产WSGI服务器。 输出结果…

smartsofthelp 5.0 最专业的数据库优化工具,数据库配置优化,数据库高并发优化,SQL 语句优化...

下载地址:百度网盘 请输入提取码 SQL操作返回历史记录&#xff1a; 2023-08-21 20:42:08:220 输入&#xff1a;select version as 版本号 2023-08-21 20:42:08:223 输出&#xff1a;当前数据库实例版本号&#xff1a;Microsoft SQL Server 2012 - 11.0.2100.60 (X64) …