147 lines
5.8 KiB
Python
147 lines
5.8 KiB
Python
#!/usr/bin/env python3
|
||
# -*- coding: utf-8 -*-
|
||
"""
|
||
分析真正的问题
|
||
"""
|
||
|
||
import os
|
||
import sys
|
||
from pathlib import Path
|
||
|
||
def main():
|
||
print("=" * 60)
|
||
print(" 分析真正的问题 ")
|
||
print("=" * 60)
|
||
|
||
try:
|
||
import aspose.cad as cad
|
||
from aspose.cad.fileformats.cad import CadImage
|
||
|
||
# 查找DWG文件
|
||
dwg_files = list(Path('.').glob('*.dwg'))
|
||
if not dwg_files:
|
||
print("未找到DWG文件")
|
||
return
|
||
|
||
test_file = str(dwg_files[0])
|
||
print(f"使用文件: {test_file}")
|
||
|
||
# 关键发现:CadImage.load返回的是Image对象,不是CadImage对象
|
||
print("\n关键发现分析:")
|
||
print("1. CadImage.load() 返回的是 Image 对象,不是 CadImage 对象")
|
||
print("2. 这意味着Aspose.CAD的Python API与文档描述不一致")
|
||
print("3. 需要找到正确的方法来访问CAD特定的功能")
|
||
|
||
# 尝试不同的方法
|
||
print("\n尝试不同的方法:")
|
||
|
||
# 方法1:检查Image对象是否有CAD特定的方法
|
||
with cad.Image.load(test_file) as image:
|
||
print(f"Image对象类型: {type(image).__name__}")
|
||
|
||
# 检查所有方法
|
||
methods = [attr for attr in dir(image) if not attr.startswith('_') and callable(getattr(image, attr))]
|
||
print(f"Image对象方法: {methods}")
|
||
|
||
# 检查是否有CAD特定的方法
|
||
cad_methods = [method for method in methods if 'cad' in method.lower() or 'entity' in method.lower() or 'block' in method.lower()]
|
||
print(f"可能的CAD方法: {cad_methods}")
|
||
|
||
# 方法2:尝试直接创建CadImage实例
|
||
print("\n方法2:尝试直接创建CadImage实例")
|
||
try:
|
||
cad_image = CadImage()
|
||
print(f"成功创建CadImage实例: {type(cad_image).__name__}")
|
||
|
||
# 检查CadImage的方法
|
||
cad_methods = [attr for attr in dir(cad_image) if not attr.startswith('_') and callable(getattr(cad_image, attr))]
|
||
print(f"CadImage方法: {cad_methods}")
|
||
|
||
# 尝试使用load方法
|
||
if 'load' in cad_methods:
|
||
print("CadImage有load方法,尝试使用...")
|
||
try:
|
||
loaded_cad = cad_image.load(test_file)
|
||
print(f"使用CadImage.load成功: {type(loaded_cad).__name__}")
|
||
except Exception as e:
|
||
print(f"使用CadImage.load失败: {e}")
|
||
|
||
except Exception as e:
|
||
print(f"创建CadImage实例失败: {e}")
|
||
|
||
# 方法3:检查是否有其他加载方式
|
||
print("\n方法3:检查其他加载方式")
|
||
try:
|
||
# 检查CadImage的静态方法
|
||
static_methods = [attr for attr in dir(CadImage) if not attr.startswith('_') and callable(getattr(CadImage, attr))]
|
||
print(f"CadImage静态方法: {static_methods}")
|
||
|
||
# 尝试使用静态方法
|
||
if 'load' in static_methods:
|
||
print("尝试使用CadImage.load静态方法...")
|
||
try:
|
||
static_loaded = CadImage.load(test_file)
|
||
print(f"使用静态方法成功: {type(static_loaded).__name__}")
|
||
|
||
# 检查这个对象是否有CAD特定属性
|
||
attrs = [attr for attr in dir(static_loaded) if not attr.startswith('_')]
|
||
print(f"静态加载对象的属性: {attrs}")
|
||
|
||
except Exception as e:
|
||
print(f"使用静态方法失败: {e}")
|
||
|
||
except Exception as e:
|
||
print(f"检查静态方法失败: {e}")
|
||
|
||
# 方法4:检查文件内容
|
||
print("\n方法4:检查文件内容")
|
||
try:
|
||
# 读取文件头部
|
||
with open(test_file, 'rb') as f:
|
||
header = f.read(32)
|
||
print(f"文件头部: {header.hex()}")
|
||
|
||
# 检查DWG版本
|
||
if header.startswith(b'AC10'):
|
||
print("DWG版本: AC1012 (AutoCAD 2000)")
|
||
elif header.startswith(b'AC10'):
|
||
print("DWG版本: AC1014 (AutoCAD 2004)")
|
||
elif header.startswith(b'AC10'):
|
||
print("DWG版本: AC1015 (AutoCAD 2007)")
|
||
elif header.startswith(b'AC10'):
|
||
print("DWG版本: AC1018 (AutoCAD 2010)")
|
||
elif header.startswith(b'AC10'):
|
||
print("DWG版本: AC1021 (AutoCAD 2013)")
|
||
elif header.startswith(b'AC10'):
|
||
print("DWG版本: AC1024 (AutoCAD 2016)")
|
||
elif header.startswith(b'AC10'):
|
||
print("DWG版本: AC1027 (AutoCAD 2018)")
|
||
else:
|
||
print("未知DWG版本")
|
||
|
||
except Exception as e:
|
||
print(f"检查文件内容失败: {e}")
|
||
|
||
# 总结
|
||
print("\n" + "=" * 60)
|
||
print(" 问题分析总结 ")
|
||
print("=" * 60)
|
||
print("真正的问题可能是:")
|
||
print("1. Aspose.CAD Python API与文档不一致")
|
||
print("2. CadImage.load()返回的是通用Image对象,不是CAD特定对象")
|
||
print("3. 需要找到正确的方法来访问CAD实体")
|
||
print("4. 可能需要使用不同的API或方法")
|
||
print("\n建议:")
|
||
print("1. 联系Aspose技术支持获取正确的API使用方法")
|
||
print("2. 尝试使用其他CAD处理库")
|
||
print("3. 考虑将DWG转换为DXF格式后处理")
|
||
print("4. 检查Aspose.CAD的版本和文档")
|
||
|
||
except Exception as e:
|
||
print(f"分析失败: {e}")
|
||
import traceback
|
||
traceback.print_exc()
|
||
|
||
if __name__ == "__main__":
|
||
main()
|