java读取CAD(dxf)文件(获取layer,block,entity)

首先需要引入kabeja这个包直接上代码: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;impo...
摘要由CSDN通过智能技术生成

首先需要引入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
  • 16
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 19
    评论
Java中使用ExHostAppServices来读取CAD文件并处理字体是不可行的,因为ExHostAppServices并不是Java的标准库。ExHostAppServices是一个用于与CAD软件交互的外部服务,通常与特定的CAD软件集成在一起。 如果您想在Java读取和处理CAD文件,您可以考虑使用一些开源的CAD库,如AutoCAD DXF文件解析器或者BricsCAD Shape等。这些库提供了Java API来解析和处理CAD文件,您可以利用它们来读取CAD文件并处理字体信息。 以下是一个使用AutoCAD DXF文件解析器的示例代码,用于读取CAD文件中的字体信息: ```java import org.kabeja.dxf.DXFDocument; import org.kabeja.dxf.DXFLayer; import org.kabeja.dxf.DXFText; import org.kabeja.dxf.parser.DXFParser; public class ReadCADFile { public static void main(String[] args) { String filePath = "path/to/your/cadfile.dxf"; try { DXFParser parser = new DXFParser(); DXFDocument document = parser.parse(filePath); for (DXFLayer layer : document.getDXFLayerIterator()) { for (DXFText text : layer.getDXFEntities(DXFText.class)) { String fontName = text.getFont().getFontName(); // 在这里处理字体相关的操作 System.out.println("字体名称:" + fontName); } } } catch (Exception e) { e.printStackTrace(); } } } ``` 请将`path/to/your/cadfile.dxf`替换为实际的CAD文件路径。 这里使用的是AutoCAD DXF文件解析器库来解析CAD文件,并通过遍历图层和实体来获取字体信息。您可以根据需要在循环中进行字体相关的操作。 希望这能帮助到您!如有任何进一步的问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值