dxfedit/02_Aspose_CAD_Java/Java版本测试方案.md
2025-09-09 18:42:30 +08:00

8.8 KiB
Raw Permalink Blame History

Aspose.CAD for Java 测试方案

📋 概述

基于 Aspose.CAD for Java 文档Java 版本可能有更好的 API 实现,可以解决 Python 版本的问题。

🔧 环境要求

Java 环境

  • Java 版本: 1.6 或更高版本
  • 推荐版本: Java 8 或 Java 11
  • 下载地址: Oracle JavaOpenJDK

Maven 环境

  • Maven 版本: 3.6 或更高版本
  • 下载地址: Apache Maven

📦 依赖配置

Maven 依赖

<dependency>
    <groupId>com.aspose</groupId>
    <artifactId>aspose-cad</artifactId>
    <version>23.1.0</version>
</dependency>

Gradle 依赖

implementation 'com.aspose:aspose-cad:23.1.0'

🚀 Java 测试代码

基本测试类

import com.aspose.cad.Image;
import com.aspose.cad.fileformats.cad.CadImage;
import com.aspose.cad.fileformats.cad.cadobjects.CadLine;
import com.aspose.cad.fileformats.cad.cadobjects.CadPolyline;
import com.aspose.cad.Color;
import java.io.File;
import java.util.List;

public class DwgColorExtractor {
    
    public static void main(String[] args) {
        String dwgPath = "测试图纸文件.dwg";
        Color targetColor = Color.fromArgb(255, 0, 255, 255); // RGB(0, 255, 255)
        
        try {
            // 加载DWG文件
            CadImage cadImage = (CadImage) Image.load(dwgPath);
            System.out.println("成功加载DWG文件");
            System.out.println("图像尺寸: " + cadImage.getWidth() + " x " + cadImage.getHeight());
            
            // 提取特定颜色的元素
            extractColorElements(cadImage, targetColor);
            
        } catch (Exception e) {
            System.err.println("加载DWG文件失败: " + e.getMessage());
            e.printStackTrace();
        }
    }
    
    private static void extractColorElements(CadImage cadImage, Color targetColor) {
        try {
            // 方法1: 从blocks获取实体
            if (cadImage.getBlocks() != null) {
                System.out.println("找到 " + cadImage.getBlocks().size() + " 个块");
                
                for (int i = 0; i < cadImage.getBlocks().size(); i++) {
                    var block = cadImage.getBlocks().get(i);
                    if (block.getEntities() != null) {
                        System.out.println("块 " + i + " 中有 " + block.getEntities().size() + " 个实体");
                        
                        for (int j = 0; j < block.getEntities().size(); j++) {
                            var entity = block.getEntities().get(j);
                            if (isColorMatch(entity, targetColor)) {
                                System.out.println("找到匹配颜色的实体: " + entity.getClass().getSimpleName());
                                printEntityInfo(entity);
                            }
                        }
                    }
                }
            }
            
            // 方法2: 从entities获取实体
            if (cadImage.getEntities() != null) {
                System.out.println("找到 " + cadImage.getEntities().size() + " 个实体");
                
                for (int i = 0; i < cadImage.getEntities().size(); i++) {
                    var entity = cadImage.getEntities().get(i);
                    if (isColorMatch(entity, targetColor)) {
                        System.out.println("找到匹配颜色的实体: " + entity.getClass().getSimpleName());
                        printEntityInfo(entity);
                    }
                }
            }
            
            // 方法3: 从layers获取实体
            if (cadImage.getLayers() != null) {
                System.out.println("找到 " + cadImage.getLayers().size() + " 个图层");
                
                for (int i = 0; i < cadImage.getLayers().size(); i++) {
                    var layer = cadImage.getLayers().get(i);
                    if (layer.getEntities() != null) {
                        System.out.println("图层 " + i + " 中有 " + layer.getEntities().size() + " 个实体");
                        
                        for (int j = 0; j < layer.getEntities().size(); j++) {
                            var entity = layer.getEntities().get(j);
                            if (isColorMatch(entity, targetColor)) {
                                System.out.println("找到匹配颜色的实体: " + entity.getClass().getSimpleName());
                                printEntityInfo(entity);
                            }
                        }
                    }
                }
            }
            
        } catch (Exception e) {
            System.err.println("提取元素失败: " + e.getMessage());
            e.printStackTrace();
        }
    }
    
    private static boolean isColorMatch(Object entity, Color targetColor) {
        try {
            // 检查实体是否有颜色属性
            if (entity instanceof CadLine) {
                CadLine line = (CadLine) entity;
                if (line.getColor() != null) {
                    return line.getColor().equals(targetColor);
                }
            } else if (entity instanceof CadPolyline) {
                CadPolyline polyline = (CadPolyline) entity;
                if (polyline.getColor() != null) {
                    return polyline.getColor().equals(targetColor);
                }
            }
            
            // 使用反射检查颜色属性
            try {
                var colorField = entity.getClass().getField("color");
                var colorValue = colorField.get(entity);
                if (colorValue instanceof Color) {
                    return ((Color) colorValue).equals(targetColor);
                }
            } catch (NoSuchFieldException | IllegalAccessException e) {
                // 忽略反射错误
            }
            
        } catch (Exception e) {
            System.err.println("检查颜色失败: " + e.getMessage());
        }
        
        return false;
    }
    
    private static void printEntityInfo(Object entity) {
        try {
            System.out.println("  实体类型: " + entity.getClass().getSimpleName());
            
            // 尝试获取图层信息
            try {
                var layerField = entity.getClass().getField("layerName");
                var layerName = layerField.get(entity);
                System.out.println("  图层: " + layerName);
            } catch (NoSuchFieldException | IllegalAccessException e) {
                // 忽略反射错误
            }
            
            // 尝试获取坐标信息
            if (entity instanceof CadLine) {
                CadLine line = (CadLine) entity;
                System.out.println("  起点: (" + line.getFirstPoint().getX() + ", " + line.getFirstPoint().getY() + ")");
                System.out.println("  终点: (" + line.getSecondPoint().getX() + ", " + line.getSecondPoint().getY() + ")");
            }
            
        } catch (Exception e) {
            System.err.println("打印实体信息失败: " + e.getMessage());
        }
    }
}

📁 项目结构

problem/
├── Aspose_CAD_Python_问题报告.md
├── Java版本测试方案.md
├── java/
│   ├── src/
│   │   └── main/
│   │       └── java/
│   │           └── DwgColorExtractor.java
│   ├── pom.xml
│   └── README.md
└── test-files/
    ├── 25-014.dwg
    └── 测试图纸文件.dwg

🚀 运行步骤

1. 安装Java环境

# 下载并安装Java 8或11
# 设置JAVA_HOME环境变量

2. 安装Maven

# 下载并安装Maven
# 设置MAVEN_HOME环境变量

3. 创建Maven项目

mvn archetype:generate -DgroupId=com.example -DartifactId=dwg-extractor -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

4. 添加依赖

pom.xml 中添加Aspose.CAD依赖。

5. 运行测试

mvn compile exec:java -Dexec.mainClass="DwgColorExtractor"

🎯 预期结果

如果Java版本工作正常应该能够

  1. 成功加载DWG文件
  2. 访问CAD实体entities、blocks、layers
  3. 提取特定颜色的元素
  4. 获取元素的详细信息(坐标、图层等)

📝 注意事项

  1. 许可证: Java版本也需要有效的许可证
  2. 性能: Java版本可能有更好的性能
  3. API差异: Java版本的API可能与Python版本不同
  4. 依赖管理: 需要正确配置Maven依赖

🔗 相关链接