首先需要引入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)相关推荐

  1. 全新C#写的读取cad dxf文件,并解析显示,显示的图形可放大缩小平移

    全新C#写的读取cad dxf文件,并解析显示,显示的图形可放大缩小平移,目前可解析圆,圆弧,线段,可解析cad2000到2018等各个版本的文件,可显示解析文件的详细信息,并可修改源代码保存为不同版 ...

  2. java获取服务器上指定文件,java 读取服务器上文件

    java 读取服务器上文件 [2021-02-04 10:02:14]  简介: php去除nbsp的方法:首先创建一个PHP代码示例文件:然后通过"preg_replace("/ ...

  3. java读取Resources下文件

    java读取Resources下文件_杰子的世界-CSDN博客_java获取resources下的文件 第四种, 读取路径 ResourceBundle bundle = ResourceBundle ...

  4. Java读取批量Excel文件

    Java读取批量Excel文件,并转化为List<Map<String,String>> 1.首先基础知识: 一 :简介 开发中经常会设计到excel的处理,如导出Excel, ...

  5. java读取文件服务器文件,java读取远程服务器文件

    java读取远程服务器文件 内容精选 换一换 已成功登录Java性能分析.待安装Guardian的服务器已开启sshd.待安装Guardian的服务器已安装JRE,JRE版本要求为Huawei JDK ...

  6. javaftp读取服务器文件,java读取ftp服务器文件

    java读取ftp服务器文件 内容精选 换一换 文件系统创建完成后,用户需在客户端挂载文件共享,在本地共享目录和CSG的文件共享建立映射,通过操作本地的目录实现对CSG共享目录的操作,实现数据实时上云 ...

  7. java 读取音频/视频 文件时长

    java 读取音频/视频 文件时长 支持mp3,mp4,mov,m4a,wav 格式文件 源码 https://github.com/opensourceteams/java-maven-projec ...

  8. ftp读取服务器文件是否存在,java读取ftp服务器文件是否存在

    java读取ftp服务器文件是否存在 内容精选 换一换 弹性云服务器通过SNAT访问公网上服务器,出现TCP建链失败的情况,可通过以下方法进行排查.执行以下命令,查看远端服务器是否开启了"t ...

  9. java读远程服务器文件,java 读取远程服务器文件

    java 读取远程服务器文件 [2021-01-31 12:09:45]  简介: php去除nbsp的方法:首先创建一个PHP代码示例文件:然后通过"preg_replace(" ...

  10. 2021-09-10 java 读取音频/视频 文件时长

    java 读取音频/视频 文件时长 pom.xml <dependency><groupId>org</groupId><artifactId>jaud ...

最新文章

  1. 世界机器人大会|人工智能VS人类
  2. eclipse部署android开发环境
  3. 针对Fluent-Bit采集容器日志的补充
  4. 3.6.4python下载安装教程_python 3.6.4安装教程
  5. Java JSR303 valid
  6. mysql5.7 设置远程访问
  7. python(六)切片,生成式,生成器,迭代
  8. Spring的定时任务
  9. 7.Linux/Unix 系统编程手册(上) -- 内存分配
  10. mysql linux查看配置文件my.cnf位置
  11. 怎么卸载mysql_mysql卸载教程,教你如何彻底卸载MySQL数据库软件(亲测成功)
  12. nebula模拟器_nebula模拟器
  13. php和mysql_用php和mysql做登陆注册系统
  14. MFC界面——实现分割与合并文件
  15. 道指mt4代码_MT4产品代码
  16. CommandArgument的一种用法
  17. Hackergame 2020
  18. python模拟点击后获取状态码_Python获取网页状态码
  19. OP-TEE内核学习笔记(一)(安全存储)—— 密钥和文件结构
  20. 让你欲罢不能的十部电影推荐!

热门文章

  1. 调查数据分析的基本问题
  2. 点云配准论文阅读笔记--(4PCS)4-Points Congruent Sets for Robust Pairwise Surface Registration
  3. IP地址0.0.0.0表示什么
  4. 一头扎进Shiro 笔记 Shiro 支持特性
  5. orb-slam系列 LocalMapping线程 开始(八)
  6. 把荷花照片调成古典工笔画的PS方法
  7. 微信小程序登录注册——云开发
  8. 华为liteos内存管理源码以及架构分析
  9. 常用室内人员定位技术大比拼,谁技高一筹?-新导智能
  10. 宝尚快讯科技股属于超跌反弹,难持久