java读取CAD(dxf)文件(获取layer,block,entity)
首先需要引入kabeja这个包
个人理解:DXF图纸是由一张张图层(DXFLayer)组成的,一张张图层又是由一个个实体类(DXFEntity)组成的,至于块(DXFBlock)呢,我理解的他就是一个模板,也是由一个个的实体类组成,而图层中的实体类有可能就是通过模型插入的,而通过块所插入的实体类的类型就是DXFInsert(该类是DXFEntity的子类),具体可看上面链接的api。
直接上代码:
package parse;import java.awt.Polygon;
import java.io.File;
import java.io.FileInputStream;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.ArrayList;
import java.util.Set;
import java.util.Iterator;
import java.util.Properties;
import org.kabeja.dxf.DXFConstants;
import org.kabeja.dxf.DXFDocument;
import org.kabeja.dxf.DXFEntity;
import org.kabeja.dxf.DXFLWPolyline;
import org.kabeja.dxf.DXFLayer;
import org.kabeja.dxf.DXFLine;
import org.kabeja.dxf.DXFMText;
import org.kabeja.dxf.DXFVertex;
import org.kabeja.dxf.helpers.Point;
import org.kabeja.parser.DXFParser;
import org.kabeja.parser.Parser;
import org.kabeja.parser.ParserBuilder;
import org.kabeja.dxf.DXFBlock;
import org.kabeja.dxf.DXFLineType;
import org.kabeja.dxf.DXFDimensionStyle;
import org.kabeja.dxf.objects.DXFObject;
import org.kabeja.dxf.DXFStyle;
import org.kabeja.dxf.DXFView;
import org.kabeja.dxf.DXFViewport;
import org.kabeja.dxf.DXFVariable;
import org.kabeja.dxf.objects.DXFDictionary;
import org.kabeja.dxf.DXFHatchPattern;
import org.kabeja.dxf.DXFInsert;
import org.kabeja.dxf.DXFLeader;
import org.kabeja.dxf.Bounds;public class DXFUtil {public static void main(String[] args) throws Exception{Parser dxfParser = ParserBuilder.createDefaultParser();dxfParser.parse(new FileInputStream("C:/Users/Administrator/Desktop/CAD_/28F平面图-0819.dxf"), "UTF-8");DXFDocument doc = dxfParser.getDocument();
// getDXFViewports(doc);
// while(doc.getDXFHeader().getVarialbeIterator().hasNext()){// DXFVariable dv = (DXFVariable)doc.getDXFHeader().getVarialbeIterator().next();
// System.out.println(dv.getName());
// }
// getDXFBlocks(doc);
// getDXFLineTypes(doc);
// getDXFStyles(doc);
// getDXFViews(doc);getDXFLayers(doc);
// getRootDXFDictionarys(doc);
// getDXFHatchPatternIterators(doc);
// for(DXFBlock d : dxfBlocks){// System.out.println(d.getName());
// System.out.println(d.getLayerID());
// }}//块列表 获取所有的的块(block)public static List<DXFBlock> getDXFBlocks(DXFDocument dxfdoc){List<DXFBlock> dxfBlocks = new ArrayList<DXFBlock>();Iterator iter = dxfdoc.getDXFBlockIterator();while(iter.hasNext()){DXFBlock dXFBlock = (DXFBlock)iter.next();// System.out.println("LayerID: "+dXFBlock.getLayerID()+" Name: "+dXFBlock.getName()+" description: "+dXFBlock.getDescription()+" document: "+dXFBlock.getDXFDocument()+" Ponit: "+dXFBlock.getReferencePoint());
// System.out.println("LayerID: "+dXFBlock.getLayerID()+" Name: "+dXFBlock.getName()+" description: "+dXFBlock.getDescription()+" Ponit: "+dXFBlock.getReferencePoint()+" Buonds: "+dXFBlock.getBounds());Bounds b = dXFBlock.getBounds();System.out.println(" Name: "+dXFBlock.getName()+" depth: "+b.getDepth()+" width: "+b.getWidth()+" height: "+b.getHeight()+" "+b.getMaximumX()+","+b.getMaximumY()+","+b.getMaximumZ()+" "+b.getMinimumX()+","+b.getMinimumY()+","+b.getMinimumZ());
// List<DXFEntity> l = getEntityByDXFBlock(dXFBlock);
// for(DXFEntity d : l){// System.out.println("ID: "+d.getID()+" Flags: "+d.getFlags()+" TYPE: "+d.getType());
// }
// System.out.println(l.size());
// getLines(dxfdoc,dXFBlock.getLayerID());
// while(dXFBlock.getDXFEntitiesIterator().hasNext()){// DXFEntity d = (DXFEntity)dXFBlock.getDXFEntitiesIterator().next();
// if(d.isVisibile()){// System.out.println("Type: "+d.getType()+" ID: "+d.getID()+" LayerName: "+d.getLayerName());
// }
// }dxfBlocks.add(dXFBlock);}return dxfBlocks;}//获取所有的entity public static List<DXFEntity> getDXFEntities(DXFDocument dxfdoc){List<DXFEntity> list = new ArrayList<DXFEntity>();Iterator iter = dxfdoc.getDXFLayerIterator();while(iter.hasNext()){DXFLayer dXFLayer = (DXFLayer)iter.next();List<String> l = getDXFEntityTypes(dXFLayer);for(String s : l){List<DXFEntity> ld = dXFLayer.getDXFEntities(s);for(DXFEntity d : ld){list.add(d);System.out.println("ID: "+d.getID()+" Boolean:"+d.isBlockEntity());}}}return list;}//根据图层名称获取entitypublic static List<DXFEntity> getDXFEntitiesByLayerName(DXFDocument dxfdoc,String layerName){List<DXFEntity> list = new ArrayList<DXFEntity>();Iterator iter = dxfdoc.getDXFLayerIterator();while(iter.hasNext()){DXFLayer dXFLayer = (DXFLayer)iter.next();if(dXFLayer.getName().equals(layerName)){List<String> l = getDXFEntityTypes(dXFLayer);for(String s : l){List<DXFEntity> ld = dXFLayer.getDXFEntities(s);for(DXFEntity d : ld){list.add(d);System.out.println("ID: "+d.getID()+" Boolean:"+d.isBlockEntity());}}}}return list;}//图层列表 获取所有图层(layer)public static List<DXFLayer> getDXFLayers(DXFDocument dxfdoc){List<DXFLayer> dXFLayers = new ArrayList<DXFLayer>();Iterator iter = dxfdoc.getDXFLayerIterator();while(iter.hasNext()){DXFLayer dXFLayer = (DXFLayer)iter.next();
// System.out.println("LayerName: "+dXFLayer.getName());
// if(dXFLayer.isVisible() && dXFLayer.getName().equals("I-FURN")){if(dXFLayer.getName().equals("I-ROOM-NUB")){List<String> list = getDXFEntityTypes(dXFLayer);for(String s : list){System.out.println(s);
// List<DXFEntity> l = dXFLayer.getDXFEntities(s);
// for(DXFEntity d : l){// System.out.println("ID: "+d.getID()+" Boolean:"+d.isBlockEntity());
// }
// System.out.println(s);
// if(s.equals("INSERT")){// List<DXFEntity> l = dXFLayer.getDXFEntities(s);
// for(DXFEntity d : l){// DXFInsert i = (DXFInsert)d;
// System.out.println("BlockID: "+i.getBlockID());
// }
// }if(s.equals("LEADER")){List<DXFEntity> l = dXFLayer.getDXFEntities(s);for(DXFEntity d : l){DXFLeader i = (DXFLeader)d;int a = i.getCoordinateCount();for(int k=0;k<a;k++){System.out.print(i.getCoordinateAt(k));System.out.print(" ");}System.out.println();}}}}dXFLayers.add(dXFLayer);}return dXFLayers;}//通过blockName获取entity 这个其实是一个坑,你从cad制图工具中你会发现DXFBlock是可以被引用的,引用DXFBlock的entity的类型就是INSERTpublic static List<DXFInsert> getDXFInsertByBlockName(DXFDocument dxfdoc,String blockName){List<DXFInsert> inserts = new ArrayList<DXFInsert>();Iterator iter = dxfdoc.getDXFLayerIterator();while(iter.hasNext()){DXFLayer dXFLayer = (DXFLayer)iter.next();System.out.println("LayerName: "+dXFLayer.getName());if(dXFLayer.isVisible()){List<String> list = getDXFEntityTypes(dXFLayer);for(String s : list){// System.out.println(s);if(s.equals("INSERT")){List<DXFEntity> l = dXFLayer.getDXFEntities(s);for(DXFEntity d : l){DXFInsert i = (DXFInsert)d;
// System.out.println("ID: "+d.getID()+" Boolean:"+d.isBlockEntity());System.out.println("BlockID: "+i.getBlockID());if(blockName.equals(i.getBlockID())){inserts.add(i);}}}}}}return inserts;}//通过DXFBlock获取entitypublic static List<DXFEntity> getEntityByDXFBlock(DXFBlock dXFBlock){List<DXFEntity> list = new ArrayList<DXFEntity>();Iterator iter = dXFBlock.getDXFEntitiesIterator();while(iter.hasNext()){DXFEntity d = (DXFEntity)iter.next();
// if(d.isVisibile()){// list.add(d);
// }list.add(d);}return list;}//通过图层获取DXFEntityTypepublic static List<String> getDXFEntityTypes(DXFLayer dXFLayer){List<String> list = new ArrayList<String>();Iterator iter = dXFLayer.getDXFEntityTypeIterator();while(iter.hasNext()){String d = (String)iter.next();list.add(d);
// System.out.println(d);}return list;}//getDXFLineTypeIterator() 线型public static List<DXFLineType> getDXFLineTypes(DXFDocument dxfdoc){List<DXFLineType> dXFLineTypes = new ArrayList<DXFLineType>();Iterator iter = dxfdoc.getDXFLineTypeIterator();while(iter.hasNext()){DXFLineType dXFLineType = (DXFLineType)iter.next();System.out.println("LineTypeName: "+dXFLineType.getName()+" Scale: "+dXFLineType.getScale()+" Description: "+dXFLineType.getDescritpion());dXFLineTypes.add(dXFLineType);}return dXFLineTypes;}//getDXFStyleIterator() public static List<DXFStyle> getDXFStyles(DXFDocument dxfdoc){List<DXFStyle> dXFStyles = new ArrayList<DXFStyle>();Iterator iter = dxfdoc.getDXFStyleIterator();while(iter.hasNext()){DXFStyle dXFStyle = (DXFStyle)iter.next();System.out.println("FontFile: "+dXFStyle.getFontFile()+" Name: "+dXFStyle.getName());dXFStyles.add(dXFStyle);}return dXFStyles;}//getDXFViewIterator()public static List<DXFView> getDXFViews(DXFDocument dxfdoc){List<DXFView> dXFViews = new ArrayList<DXFView>();Iterator iter = dxfdoc.getDXFViewIterator();while(iter.hasNext()){DXFView dXFView = (DXFView)iter.next();System.out.println("centerPoint: "+dXFView.getCenterPoint()+" Name: "+dXFView.getName()+" Vector: "+dXFView.getViewDirection());dXFViews.add(dXFView);}return dXFViews;}// getDXFViewportIterator() public static List<DXFViewport> getDXFViewports(DXFDocument dxfdoc){List<DXFViewport> dXFViewports = new ArrayList<DXFViewport>();Iterator iter = dxfdoc.getDXFViewportIterator();while(iter.hasNext()){DXFViewport dXFViewport = (DXFViewport)iter.next();System.out.println("CenterPoint: "+dXFViewport.getCenterPoint()+" PlotStyleName: "+dXFViewport.getPlotStyleName()+" VIewPointID: "+dXFViewport.getViewportID()+" VectorX: "+dXFViewport.getViewDirectionVector().getX()+" VectorY: "+dXFViewport.getViewDirectionVector().getY()+" VectorZ: "+dXFViewport.getViewDirectionVector().getZ());dXFViewports.add(dXFViewport);}return dXFViewports;}//getRootDXFDictionary()public static void getRootDXFDictionarys(DXFDocument dxfdoc){DXFDictionary d = dxfdoc.getRootDXFDictionary();Iterator iter = d.getDXFObjectIterator();while(iter.hasNext()){System.out.println(iter.next());}}//获取线public static void getLines(DXFDocument dxfdoc,String layerID){DXFLayer layer = dxfdoc.getDXFLayer(layerID);//get all polylines from the layerList plines = layer.getDXFEntities(DXFConstants.ENTITY_TYPE_LINE);//work with the first polylineDXFLine pline = (DXFLine) plines.get(0);System.out.println("start: "+pline.getStartPoint()+" end: "+pline.getEndPoint()); //使用polyline对象种特有的方法获得数据,如左获得该多边线总共的顶点数据}// getDXFHatchPatternIterator() public static void getDXFHatchPatternIterators(DXFDocument doc){Iterator iter = doc.getDXFHatchPatternIterator();while(iter.hasNext()){DXFHatchPattern d = (DXFHatchPattern)iter.next();System.out.println("ID: "+d.getID()+" DXFHatch: "+d.getDXFHatch()+" Count: "+d.getLineFamilyCount());}}// //通过DXFDocument根据Id获取所有的DXFEntity
// public static List<DXFEntity> getDXFEntitiesByDXFDocument(List<DXFEntity> l){// List<DXFEntity> list = new ArrayList<DXFEntity>();
//
// return list;
// }}
有问题可以在下面评论,咱们一块讨论
java读取CAD(dxf)文件(获取layer,block,entity)相关推荐
- 全新C#写的读取cad dxf文件,并解析显示,显示的图形可放大缩小平移
全新C#写的读取cad dxf文件,并解析显示,显示的图形可放大缩小平移,目前可解析圆,圆弧,线段,可解析cad2000到2018等各个版本的文件,可显示解析文件的详细信息,并可修改源代码保存为不同版 ...
- java获取服务器上指定文件,java 读取服务器上文件
java 读取服务器上文件 [2021-02-04 10:02:14] 简介: php去除nbsp的方法:首先创建一个PHP代码示例文件:然后通过"preg_replace("/ ...
- java读取Resources下文件
java读取Resources下文件_杰子的世界-CSDN博客_java获取resources下的文件 第四种, 读取路径 ResourceBundle bundle = ResourceBundle ...
- Java读取批量Excel文件
Java读取批量Excel文件,并转化为List<Map<String,String>> 1.首先基础知识: 一 :简介 开发中经常会设计到excel的处理,如导出Excel, ...
- java读取文件服务器文件,java读取远程服务器文件
java读取远程服务器文件 内容精选 换一换 已成功登录Java性能分析.待安装Guardian的服务器已开启sshd.待安装Guardian的服务器已安装JRE,JRE版本要求为Huawei JDK ...
- javaftp读取服务器文件,java读取ftp服务器文件
java读取ftp服务器文件 内容精选 换一换 文件系统创建完成后,用户需在客户端挂载文件共享,在本地共享目录和CSG的文件共享建立映射,通过操作本地的目录实现对CSG共享目录的操作,实现数据实时上云 ...
- java 读取音频/视频 文件时长
java 读取音频/视频 文件时长 支持mp3,mp4,mov,m4a,wav 格式文件 源码 https://github.com/opensourceteams/java-maven-projec ...
- ftp读取服务器文件是否存在,java读取ftp服务器文件是否存在
java读取ftp服务器文件是否存在 内容精选 换一换 弹性云服务器通过SNAT访问公网上服务器,出现TCP建链失败的情况,可通过以下方法进行排查.执行以下命令,查看远端服务器是否开启了"t ...
- java读远程服务器文件,java 读取远程服务器文件
java 读取远程服务器文件 [2021-01-31 12:09:45] 简介: php去除nbsp的方法:首先创建一个PHP代码示例文件:然后通过"preg_replace(" ...
- 2021-09-10 java 读取音频/视频 文件时长
java 读取音频/视频 文件时长 pom.xml <dependency><groupId>org</groupId><artifactId>jaud ...
最新文章
- 世界机器人大会|人工智能VS人类
- eclipse部署android开发环境
- 针对Fluent-Bit采集容器日志的补充
- 3.6.4python下载安装教程_python 3.6.4安装教程
- Java JSR303 valid
- mysql5.7 设置远程访问
- python(六)切片,生成式,生成器,迭代
- Spring的定时任务
- 7.Linux/Unix 系统编程手册(上) -- 内存分配
- mysql linux查看配置文件my.cnf位置
- 怎么卸载mysql_mysql卸载教程,教你如何彻底卸载MySQL数据库软件(亲测成功)
- nebula模拟器_nebula模拟器
- php和mysql_用php和mysql做登陆注册系统
- MFC界面——实现分割与合并文件
- 道指mt4代码_MT4产品代码
- CommandArgument的一种用法
- Hackergame 2020
- python模拟点击后获取状态码_Python获取网页状态码
- OP-TEE内核学习笔记(一)(安全存储)—— 密钥和文件结构
- 让你欲罢不能的十部电影推荐!
热门文章
- 调查数据分析的基本问题
- 点云配准论文阅读笔记--(4PCS)4-Points Congruent Sets for Robust Pairwise Surface Registration
- IP地址0.0.0.0表示什么
- 一头扎进Shiro 笔记 Shiro 支持特性
- orb-slam系列 LocalMapping线程 开始(八)
- 把荷花照片调成古典工笔画的PS方法
- 微信小程序登录注册——云开发
- 华为liteos内存管理源码以及架构分析
- 常用室内人员定位技术大比拼,谁技高一筹?-新导智能
- 宝尚快讯科技股属于超跌反弹,难持久