# OpenCascade.js Entegrasyonu - FikoYT

**Güncelleme:** 2025-12-06

## 🎯 Değişiklik

**occt-import-js → opencascade.js**

**Neden?**
- Native OpenCascade.js WASM API'si
- Daha düşük seviye kontrol
- Tessellation parametreleri optimize
- Type-safe TypeScript desteği

## 📦 Paket Değişiklikleri

### package.json
```diff
- "occt-import-js": "^0.0.23"
+ "opencascade.js": "^2.0.0-beta.2"
```

### Kurulum
```bash
cd fikoyt-zorro.com
npm install opencascade.js@2.0.0-beta.2
```

## 🏗️ Mimari

### 1. Type Definitions
**Dosya:** `src/types/opencascade.d.ts`

TypeScript type tanımları:
- `OpenCascadeInstance` - WASM modül interface'i
- `TopoDS_Shape` - Geometri shape'leri
- `STEPControl_Reader` / `IGESControl_Reader` - Dosya okuyucular
- `BRepMesh_IncrementalMesh` - Tessellation
- `GProp_GProps` - Hacim/alan hesaplama

### 2. FikoOpenCascade Service
**Dosya:** `IFikoThreeJS/FikoOpenCascade.ts`

**Singleton WASM Loader:**
```typescript
await FikoOpenCascade.init(); // WASM yükle
```

**Ana Metodlar:**
```typescript
// STEP → Three.js BufferGeometry
stepToGeometry(buffer: ArrayBuffer): Promise<THREE.BufferGeometry>

// IGES → Three.js BufferGeometry
igesToGeometry(buffer: ArrayBuffer): Promise<THREE.BufferGeometry>

// BREP → Three.js BufferGeometry
brepToGeometry(buffer: ArrayBuffer): Promise<THREE.BufferGeometry>

// Hacim hesapla (cm³)
calculateVolume(shape: TopoDS_Shape): Promise<number>

// Alan hesapla (cm²)
calculateSurfaceArea(shape: TopoDS_Shape): Promise<number>

// Bounding box
getBoundingBox(shape: TopoDS_Shape): Promise<{min, max, size}>
```

### 3. FikoImporterSTP Güncellemesi
**Dosya:** `IFikoThreeJS/FikoImporter.STP.ts`

**Değişiklikler:**
- `occt-import-js` kaldırıldı
- `FikoOpenCascade` servisi entegre edildi
- `stpDosyasiniOCCTIleYukle()` yeni servisi kullanıyor

**Kullanım:**
```typescript
const importer = new FikoImporterSTP(sahne);
importer.setOCCTEnabled(true);
const grup = await importer.yukle(file, 'hiyerarşik');
```

## 🔧 Tessellation Parametreleri

**Linear Deflection:** `0.1 mm`
- Yüzey mesh'inin hassasiyeti
- Daha düşük = daha fazla triangle

**Angular Deflection:** `0.5 radian`
- Kavisli yüzeylerdeki segmentasyon
- Daha düşük = daha smooth

## 📊 Workflow

```
STEP Dosyası (ArrayBuffer)
    ↓
FikoOpenCascade.stepToGeometry()
    ↓
OpenCascade WASM (Tessellation)
    ↓
THREE.BufferGeometry
    ↓
FikoCizimYalin (mesh + edges + vertices)
```

## ⚡ Performans

**Avantajlar:**
- ✅ Native WASM (daha hızlı)
- ✅ Client-side processing (server yükü yok)
- ✅ Progressive loading (onProgress callback)
- ✅ Memory efficient (WASM heap)

**Sınırlamalar:**
- ⚠️ İlk yükleme: ~2MB WASM
- ⚠️ Büyük dosyalar (>100MB) UI freeze
- ⚠️ Browser memory limit (~2GB)

## 🎨 Renk Desteği

**Şu an:** Varsayılan gri renk (0.7, 0.7, 0.7)

**Gelecek:**
- STEP renk attribute parsing
- XCAF (Extended CAD) renk desteği
- Material properties

## 🔍 Debug

```typescript
// Console log
console.log('✅ OpenCascade.js WASM yüklendi');
console.log('STEP dosyası yüklendi:', fileName);
console.log('Vertices:', geometry.attributes['position'].count);
```

## 🚀 Örnek Kod

```typescript
import { FikoOpenCascade } from './FikoOpenCascade';

// STEP yükle
const file = await fetch('model.step');
const buffer = await file.arrayBuffer();
const geometry = await FikoOpenCascade.stepToGeometry(buffer);

// Hacim hesapla
const shape = /* TopoDS_Shape from STEP reader */;
const volume = await FikoOpenCascade.calculateVolume(shape);
console.log(`Hacim: ${volume} cm³`);

// Three.js sahneye ekle
const mesh = new THREE.Mesh(geometry, material);
scene.add(mesh);
```

## 📝 Migration Checklist

- [x] `opencascade.js` paketi yüklendi
- [x] Type definitions oluşturuldu
- [x] `FikoOpenCascade` servisi yazıldı
- [x] `FikoImporterSTP` güncellendi
- [x] `occt-import-js` kaldırıldı
- [x] `tsconfig.json` typeRoots eklendi
- [ ] Test: STEP dosyası yükleme
- [ ] Test: Hacim/alan hesaplama
- [ ] Production build test

## 🔗 Referanslar

- [OpenCascade.js GitHub](https://github.com/donalffons/opencascade.js)
- [OpenCascade Docs](https://dev.opencascade.org/)
- [Three.js BufferGeometry](https://threejs.org/docs/#api/en/core/BufferGeometry)

---
**Sonraki Adım:** IGES ve BREP dosya desteği test edilecek
