# IDialogCevirici - CATIA WRL Dönüştürme Servisi

FikoYT Dialog Çevirici, CATIA dosyalarını WRL (VRML) formatına dönüştürmek için HTTP tabanlı bir servistir.

## Özellikler

- ✅ **PyQt6 Tabanlı UI**: Modern ve kullanıcı dostu arayüz
- ✅ **HTTP Server**: REST API ile dosya dönüştürme istekleri
- ✅ **CATIA COM Entegrasyonu**: CATIA'nın ExportData fonksiyonunu kullanır
- ✅ **Thread Güvenli**: Çoklu istek desteği
- ✅ **Real-time Logging**: Server loglarını canlı görüntüleme
- ✅ **COM Registration**: CATIA'dan doğrudan çağırma desteği

## Kurulum

### 1. Bağımlılıklar

```bash
pip install PyQt6 pywin32 requests
```

### 2. COM Kaydı

Windows kayıt defterine kaydetmek için:

```bash
cd IDialoglar\IDialogCevirici
python registerCom.py
```

Kaydı kaldırmak için:

```bash
python registerCom.py --unregister
```

## Kullanım

### Yöntem 1: Python'dan Direkt Başlatma

```bash
python test_dialog.py
```

### Yöntem 2: CATIA'dan Başlatma

CATIA Macro Editor'de `TestCatiaScript.CATScript` dosyasını çalıştırın:

```vbscript
Dim fikoDialog
Set fikoDialog = CreateObject("FikoYT.IDialogCevirici")
fikoDialog.Calistir CATIA
```

### Yöntem 3: COM Kaydından Başlatma

CATIA'dan:

```vbscript
CreateObject("FikoYT.IDialogCevirici").Calistir(CATIA)
```

## HTTP API

### Server Başlatma

1. Dialog penceresini açın
2. Port numarasını ayarlayın (varsayılan: 8080)
3. "Server Başlat" butonuna tıklayın

### API Endpoints

#### 1. Health Check

**GET** `/health`

Server'ın çalışıp çalışmadığını kontrol eder.

```bash
curl http://localhost:8080/health
```

**Yanıt:**
```
OK
```

#### 2. Status

**GET** `/status`

Server durumu ve bilgilerini döndürür.

```bash
curl http://localhost:8080/status
```

**Yanıt:**
```json
{
  "status": "running",
  "server": "IDialogCevirici",
  "version": "1.0",
  "timestamp": "2024-11-30T10:30:00",
  "catia_connected": true
}
```

#### 3. Convert to WRL

**POST** `/convert`

CATIA dosyasını WRL formatına dönüştürür.

**İstek:**
```bash
curl -X POST http://localhost:8080/convert \
  -H "Content-Type: application/json" \
  -d '{
    "source_file": "D:\\Projects\\part.CATPart",
    "output_dir": "D:\\Output",
    "output_name": "converted_part"
  }'
```

**Parametreler:**
- `source_file` (zorunlu): Kaynak CATIA dosyası (.CATPart, .CATProduct, vb.)
- `output_dir` (opsiyonel): Çıktı klasörü (varsayılan: temp dizini)
- `output_name` (opsiyonel): Çıktı dosya adı, uzantısız (varsayılan: "converted")

**Yanıt:**
```json
{
  "success": true,
  "source_file": "D:\\Projects\\part.CATPart",
  "output_file": "D:\\Output\\converted_part.wrl",
  "timestamp": "2024-11-30T10:35:00"
}
```

## Python Client Örneği

```python
import requests

# Server'a dosya dönüştürme isteği gönder
response = requests.post('http://localhost:8080/convert', json={
    'source_file': r'D:\Projects\part.CATPart',
    'output_dir': r'D:\Output',
    'output_name': 'my_part'
})

if response.status_code == 200:
    result = response.json()
    print(f"Dönüştürme başarılı: {result['output_file']}")
else:
    print(f"Hata: {response.text}")
```

## Test Etme

### Dialog Testi

```bash
python test_dialog.py
```

### HTTP Client Testi

Server başlatıldıktan sonra:

```bash
# Health check ve status testi
python test_client.py

# Dosya dönüştürme testi
python test_client.py "D:\Projects\part.CATPart"
```

## Mimari

### Bileşenler

1. **IDialogCevirici** (Ana Dialog Sınıfı)
   - PyQt6 tabanlı UI
   - Server yönetimi
   - Log görüntüleme

2. **ThreadedHTTPServer**
   - Thread güvenli HTTP server
   - Her istek ayrı thread'de işlenir
   - CATIA COM nesnesi yönetimi

3. **CeviriciRequestHandler**
   - HTTP request handler
   - GET/POST endpoint yönetimi
   - WRL dönüştürme işlemleri

4. **threadManager** (Async Dekoratör)
   - COM marshalling
   - Thread-safe CATIA işlemleri
   - Asenkron operasyonlar

### Veri Akışı

```
Client (HTTP Request)
  ↓
ThreadedHTTPServer
  ↓
CeviriciRequestHandler
  ↓
CATIA COM (IFikatia/IDokuman)
  ↓
ExportData("wrl")
  ↓
WRL Dosyası
  ↓
HTTP Response (JSON)
```

## Dosya Yapısı

```
IDialoglar/IDialogCevirici/
├── __init__.py                  # Modül başlatma
├── IDialogCevirici.py          # Ana dialog sınıfı + HTTP server
├── registerCom.py              # COM registration
├── threadManager.py            # Async thread yönetimi
├── test_dialog.py              # Dialog test scripti
├── test_client.py              # HTTP client test scripti
├── TestCatiaScript.CATScript   # CATIA test makrosu
├── README.md                   # Bu dosya
└── Resimler/                   # UI resimleri (isteğe bağlı)
```

## Sorun Giderme

### Server başlatılamıyor

**Hata:** `OSError: [WinError 10048] Only one usage of each socket address`

**Çözüm:** Port zaten kullanımda. Farklı bir port numarası deneyin.

### CATIA bağlantısı yok

**Hata:** `CATIA parametresi boş olamaz!`

**Çözüm:**
1. CATIA'nın açık olduğundan emin olun
2. COM kaydının yapıldığını kontrol edin

### Dosya dönüştürülemiyor

**Hata:** `Dosya açılamadı: ...`

**Çözüm:**
1. Dosya yolunun doğru olduğunu kontrol edin
2. CATIA'nın dosya formatını desteklediğinden emin olun
3. Dosyanın bozuk olmadığını kontrol edin

### PyQt6 hatası

**Hata:** `ModuleNotFoundError: No module named 'PyQt6'`

**Çözüm:**
```bash
pip install PyQt6
```

## Güvenlik Notları

⚠️ **Dikkat:**
- Server varsayılan olarak tüm ağ arayüzlerinde dinler (`0.0.0.0`)
- Üretim ortamında kullanırken firewall kuralları ekleyin
- Kimlik doğrulama eklenmemiştir, güvenli ağlarda kullanın

## Geliştirme

### Yeni Endpoint Ekleme

```python
def do_POST(self):
    if self.path == '/my_endpoint':
        # İşlemi gerçekleştir
        result = self.server.my_custom_function()

        # Yanıtı gönder
        self.send_response(200)
        self.send_header('Content-type', 'application/json')
        self.end_headers()
        self.wfile.write(json.dumps(result).encode('utf-8'))
```

### Loglama Geliştirme

```python
# Dialog'a log mesajı gönder
self.server.dialog_window.log_signal.emit("Mesaj")
```

## Lisans

FikoYT V2024 - Fikatia Projesi

## Katkıda Bulunanlar

- FikoYT Development Team

## Sürüm Geçmişi

### v1.0 (2024-11-30)
- İlk sürüm
- HTTP server desteği
- WRL dönüştürme
- PyQt6 UI
- COM registration
