Files
hcie-rust-v3.05/hcie-draw/readme.md
T
2026-07-09 02:59:53 +03:00

128 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## hcie-draw Projesi Nedir?
**hcie-draw**, HCIE (HC Image Editor) Rust port'unun bir parçası olan **raster çizim motoru** kütüphanesidir.
### Projenin Amacı
Bu kütüphane, RGBA piksel buffer'ları üzerine **vektörel çizim araçlarını** (çizgi, daire, elips, dikdörten, flood fill) ve **fırça darbelerini** (pressure-aware brush strokes) rasterize eder. Pure Rust ile yazılmış, GUI'den bağımsız bir çekirdek kütüphane.
---
### Mimari Yapı (Katman Bakışı)
```
┌─────────────────────────────┐
│ hcie-core-app (Tauri GUI) │ ← Svelte frontend + Rust backend
├─────────────────────────────┤
│ hcie-engine-api │ ← Public API & command bridge
├─────────────────────────────┤
│ hcie-draw (bu crate) │ ← Rasterization motoru
│ ├─ Layer │ • Pixel buffer yönetimi
│ ├─ draw_line/circle/ellipse│ • Primitif çizim fonksiyonları
│ ├─ draw_brush_stroke │ • Pressure-aware fırça
│ └─ C FFI exports │ • Zero-copy native arayüz
├─────────────────────────────┤
│ hcie-blend │ ← Blend modları (Normal, Multiply, vb.)
│ hcie-brush-engine │ ← Fırça tipi, spacing, jitter
└─────────────────────────────┘
```
---
### Ana Bileşenler
**`Layer` struct'ı:**
```rust
pub struct Layer {
pub name: String,
pub pixels: Vec<u8>, // RGBA format (4 bayt/piksel)
pub width: u32,
pub height: u32,
pub visible: bool,
pub opacity: f32,
pub dirty: bool, // Render invalidation flag
}
```
**Çizim fonksiyonları:**
| Fonksiyon | Açıklama |
|-----------|----------|
| `draw_line()` | Xiaolin Wu algoritmasıyla AA çizgi |
| `draw_filled_circle()` | Doldurulmuş daire (kenar geçişli) |
| `draw_filled_rect()` | Doldurulmuş dikdörtgen |
| `draw_filled_ellipse()` | Doldurulmuş elips |
| `flood_fill()` | Bağlamsız renk değiştirme |
| `draw_brush_stamp()` | Tek fırça dampası |
| `draw_brush_stroke()` | Tüm noktalar boyunca fırça izi |
---
### Çalışma Mantığı
1. **Piksel Erişimi**: `get_pixel()` / `set_pixel()` ile RGBA okuma-yazma
2. **Blend Entegrasyonu**: `hcie_blend::blend_pixels()` ile renk karıştırma
3. **Brush Entegrasyonu**: `hcie_brush_engine::draw_dab_capped()` ile fırça tipi uygulama
4. **Mask Desteği**: Opsiyonel selection mask (0-255) ile çizim sınırlandırma
**Pressure-aware brush stroke akışı:**
```
Input: points = [(x, y, pressure), ...]
brush_spacing_pixels() → spacing hesapla
Her segment için interpolate → pressure değişimi
jitter_offset() → pozisyon rastgelelik
draw_dab_capped() → fırça dampası render et
```
---
### C FFI Arayüzü
Kütüphane **cdylib** olarak derlenir, bu sayede başka dillerden doğrudan çağrılabilir:
```c
// draw_line_c - raw buffer pointer alır, in-place değiştirir
void draw_line_c(
uint8_t* pixels, uint32_t width, uint32_t height,
float x0, float y0, float x1, float y1,
const uint8_t* color_rgba, float line_thickness,
const uint8_t* mask
);
```
Diğer FFI fonksiyonları: `draw_filled_rect_c`, `draw_filled_circle_c`, `flood_fill_c`, `draw_brush_stroke_c`
---
### Kullanım Örkeli
Test runner'ı çalıştırmak:
```bash
cargo test --manifest-path tests/draw_pixels.rs
```
GUI testörünü çalıştırmak:
```bash
cargo run --example draw_tester
```
---
### Bağımlılıklar
```toml
[dependencies]
hcie-blend = { path = "../hcie-blend" } # blend_pixels
hcie-brush-engine = { path = "../hcie-brush-engine" } # brush tip & spacing
```
---
### Özellikler
- **Zero-copy FFI**: Buffer kopyası yok, doğrudan pointer manipülasyonu
- **GUI bağımsız**: Pure Rust, egui/tauri olmadan da kullanılabilir
- **Multi-threading hazır**: rayon entegrasyonu (blend katmanında)
- **30+ fırça stıl**: BrushStyle enum'ı içinde (Round, Pencil, Oil, Watercolor, vb.)