#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Aspose.CAD for Python 测试脚本
功能：测试DWG文件加载、信息读取和格式转换
作者：AI Assistant
日期：2024
"""

import os
import sys
from pathlib import Path
import aspose.cad as cad
from aspose.cad.imageoptions import CadRasterizationOptions, PngOptions, PdfOptions
from aspose.cad import Color

def print_separator(title=""):
    """打印分隔线"""
    print("=" * 60)
    if title:
        print(f" {title} ")
        print("=" * 60)

def test_aspose_cad_installation():
    """测试Aspose.CAD安装是否正常"""
    print_separator("测试Aspose.CAD安装")
    try:
        # 测试基本导入
        print("✓ 成功导入aspose.cad模块")
        
        # 测试版本信息
        print(f"✓ Aspose.CAD版本信息: {cad.__version__ if hasattr(cad, '__version__') else '版本信息不可用'}")
        
        return True
    except ImportError as e:
        print(f"✗ 导入失败: {e}")
        print("请确保已正确安装Aspose.CAD for Python")
        return False
    except Exception as e:
        print(f"✗ 测试失败: {e}")
        return False

def get_dwg_file_info(dwg_path):
    """获取DWG文件基本信息"""
    print_separator("DWG文件信息")
    
    if not os.path.exists(dwg_path):
        print(f"✗ 文件不存在: {dwg_path}")
        return None
    
    try:
        # 获取文件基本信息
        file_size = os.path.getsize(dwg_path)
        print(f"文件路径: {dwg_path}")
        print(f"文件大小: {file_size:,} 字节 ({file_size/1024/1024:.2f} MB)")
        
        # 加载DWG文件
        print("正在加载DWG文件...")
        with cad.Image.load(dwg_path) as image:
            print(f"✓ 成功加载DWG文件")
            
            # 获取图像信息
            print(f"图像宽度: {image.width} 像素")
            print(f"图像高度: {image.height} 像素")
            print(f"图像格式: {type(image).__name__}")
            
            # 如果是CAD图像，尝试获取更多信息
            if hasattr(image, 'layers'):
                print(f"图层数量: {len(image.layers) if image.layers else '未知'}")
            
            return image
            
    except Exception as e:
        print(f"✗ 加载DWG文件失败: {e}")
        return None

def convert_dwg_to_png(dwg_path, output_path=None):
    """将DWG文件转换为PNG格式"""
    print_separator("DWG转PNG转换")
    
    if output_path is None:
        output_path = dwg_path.replace('.dwg', '_converted.png')
    
    try:
        # 加载DWG文件
        with cad.Image.load(dwg_path) as image:
            # 设置光栅化选项
            rasterization_options = CadRasterizationOptions()
            rasterization_options.page_width = 1600
            rasterization_options.page_height = 1600
            rasterization_options.background_color = Color.white
            
            # 设置PNG选项
            png_options = PngOptions()
            png_options.vector_rasterization_options = rasterization_options
            
            # 保存为PNG
            print(f"正在转换为PNG格式...")
            image.save(output_path, png_options)
            print(f"✓ 转换成功: {output_path}")
            
            # 检查输出文件
            if os.path.exists(output_path):
                output_size = os.path.getsize(output_path)
                print(f"输出文件大小: {output_size:,} 字节 ({output_size/1024/1024:.2f} MB)")
            
            return True
            
    except Exception as e:
        print(f"✗ PNG转换失败: {e}")
        return False

def convert_dwg_to_pdf(dwg_path, output_path=None):
    """将DWG文件转换为PDF格式"""
    print_separator("DWG转PDF转换")
    
    if output_path is None:
        output_path = dwg_path.replace('.dwg', '_converted.pdf')
    
    try:
        # 加载DWG文件
        with cad.Image.load(dwg_path) as image:
            # 设置光栅化选项
            rasterization_options = CadRasterizationOptions()
            rasterization_options.page_width = 1600
            rasterization_options.page_height = 1600
            rasterization_options.background_color = Color.white
            
            # 设置PDF选项
            pdf_options = PdfOptions()
            pdf_options.vector_rasterization_options = rasterization_options
            
            # 保存为PDF
            print(f"正在转换为PDF格式...")
            image.save(output_path, pdf_options)
            print(f"✓ 转换成功: {output_path}")
            
            # 检查输出文件
            if os.path.exists(output_path):
                output_size = os.path.getsize(output_path)
                print(f"输出文件大小: {output_size:,} 字节 ({output_size/1024/1024:.2f} MB)")
            
            return True
            
    except Exception as e:
        print(f"✗ PDF转换失败: {e}")
        return False

def main():
    """主函数"""
    print_separator("Aspose.CAD for Python 测试脚本")
    print("此脚本将测试Aspose.CAD的基本功能")
    print()
    
    # 测试安装
    if not test_aspose_cad_installation():
        print("安装测试失败，请检查Aspose.CAD安装")
        return
    
    # 查找DWG文件
    dwg_files = list(Path('.').glob('*.dwg'))
    
    if not dwg_files:
        print("✗ 当前目录下未找到DWG文件")
        print("请确保DWG文件在当前目录中")
        return
    
    print(f"找到 {len(dwg_files)} 个DWG文件:")
    for i, dwg_file in enumerate(dwg_files, 1):
        print(f"  {i}. {dwg_file}")
    
    # 使用第一个DWG文件进行测试
    test_file = str(dwg_files[0])
    print(f"\n使用文件进行测试: {test_file}")
    
    # 获取文件信息
    image = get_dwg_file_info(test_file)
    if image is None:
        print("无法加载DWG文件，测试终止")
        return
    
    # 测试格式转换
    print("\n开始格式转换测试...")
    
    # 转换为PNG
    png_success = convert_dwg_to_png(test_file)
    
    # 转换为PDF
    pdf_success = convert_dwg_to_pdf(test_file)
    
    # 总结
    print_separator("测试总结")
    print(f"DWG文件加载: {'✓ 成功' if image else '✗ 失败'}")
    print(f"PNG转换: {'✓ 成功' if png_success else '✗ 失败'}")
    print(f"PDF转换: {'✓ 成功' if pdf_success else '✗ 失败'}")
    
    if png_success or pdf_success:
        print("\n✓ Aspose.CAD测试完成！转换后的文件已保存到当前目录")
    else:
        print("\n✗ 所有转换测试都失败了")

if __name__ == "__main__":
    try:
        main()
    except KeyboardInterrupt:
        print("\n\n用户中断了程序执行")
    except Exception as e:
        print(f"\n\n程序执行出错: {e}")
        import traceback
        traceback.print_exc()
