#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Test: Principal Properties ile gerçek boyutları al
"""

import FreeCAD
import sys
import os

file_path = sys.argv[2] if len(sys.argv) > 2 else "freecad.stp"

if os.path.exists(file_path):
    print(f"Dosya açılıyor: {file_path}\n")

    import Part
    doc = FreeCAD.newDocument("TestDoc")
    Part.insert(file_path, doc.Name)

    objects = doc.Objects
    print(f"Toplam {len(objects)} nesne\n")

    for obj in objects:
        if hasattr(obj, "Shape"):
            print(f"===== {obj.Name} =====")

            # Normal BoundBox
            bbox = obj.Shape.BoundBox
            print(f"BoundBox (Axis-Aligned - YANLIŞ):")
            print(f"  X: {bbox.XLength}")
            print(f"  Y: {bbox.YLength}")
            print(f"  Z: {bbox.ZLength}")

            # Optimal BoundBox dene (Oriented/Rotated)
            try:
                import Part
                obb = obj.Shape.optimalBoundingBox()
                print(f"\nOptimal BoundBox (Oriented - DOĞRU OLMALI):")
                print(f"  {obb}")
                # OBB uzunlukları
                if hasattr(obb, 'XLength'):
                    print(f"  X: {obb.XLength}")
                    print(f"  Y: {obb.YLength}")
                    print(f"  Z: {obb.ZLength}")
            except Exception as e:
                print(f"\nOptimal BoundBox HATA: {e}")

            # Principal Properties dene
            try:
                props = obj.Shape.getPrincipalProperties()
                print(f"\nPrincipal Properties:")
                print(f"  {props}")
            except Exception as e:
                print(f"\nPrincipal Properties HATA: {e}")

            # Matrix of Inertia
            try:
                matrix = obj.Shape.MatrixOfInertia
                print(f"\nMatrix of Inertia:")
                print(f"  {matrix}")
            except Exception as e:
                print(f"\nMatrix of Inertia HATA: {e}")

            print()

    FreeCAD.closeDocument(doc.Name)
else:
    print(f"Dosya bulunamadı: {file_path}")
