Sprint 11/12/13 — 선택하이라이트 + 저장/로드 + Tauri앱 스켈레톤

Sprint 11 (Selection highlight + 단면 UI):
- FeatureDraw: CPU 정점 저장, update_highlight() — 선택 시 yellow-orange
- 렌더 루프: background mesh(지면+선형) + 피처별 독립 draw call 분리
- SceneParams: GirderSectionType (PscI / SteelBox), show_alignment
- egui: 단면형식 ComboBox, 선형표시 checkbox
- SteelBox 단면 지원 (span 비례 자동 치수)
- build_background_scene(): 지면+선형만 반환

Sprint 12 (Project save/load):
- project_file.rs: ProjectFile struct, to_params/from_params, save/load JSON
- egui: 💾 저장 / 📂 불러오기 버튼
- projects/ 폴더 자동 생성

Sprint 13 (Tauri app skeleton):
- crates/app/: Cargo.toml + main.rs (Tauri v2 통합 scaffold)
- 기동 시 PureRustKernel 동작 검증
- Tauri setup checklist 주석으로 문서화
- workspace에 cimery-app 추가

cargo check --workspace 통과

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
minsung
2026-04-14 22:59:11 +09:00
parent 5d89db5117
commit 81349c97d2
7 changed files with 339 additions and 32 deletions

View File

@@ -0,0 +1,27 @@
[package]
name = "cimery-app"
version.workspace = true
edition.workspace = true
description = "cimery desktop application (Tauri v2 + Leptos UI)"
[features]
# Geometry backends
occt = ["cimery-kernel/occt"]
[dependencies]
cimery-core = { workspace = true }
cimery-ir = { workspace = true }
cimery-dsl = { workspace = true }
cimery-kernel = { workspace = true }
cimery-incremental = { workspace = true }
cimery-evaluator = { workspace = true }
cimery-usd = { workspace = true }
serde = { workspace = true }
serde_json = { workspace = true }
log = { workspace = true }
env_logger = { workspace = true }
# Tauri v2 (ADR-001: desktop packaging)
# Uncomment when setting up Tauri project:
# tauri = { version = "2", features = ["devtools"] }

View File

@@ -0,0 +1,61 @@
//! cimery-app — Tauri v2 desktop application skeleton.
//!
//! ADR-001: Tauri v2 (desktop) + PWA (web) dual-target.
//! ADR-003 A3: Gitea CI → GitHub Actions for Win/macOS release builds.
//!
//! # Sprint 13 (this file): application shell scaffold
//! - Tauri integration commented out (requires `tauri init` + frontend setup)
//! - Core domain logic wired and accessible
//!
//! # Sprint 14: Leptos UI frontend
//! - Leptos component tree for ribbon/panel/viewport layout
//! - wgpu viewport embedded as a <canvas> element
//! - Property panel connected to cimery-dsl builders
//!
//! # Tauri setup checklist (run once):
//! 1. `cargo tauri init` in this directory
//! 2. Edit `tauri.conf.json`: app name, window size, icons
//! 3. Implement Tauri commands (IPC bridge) in `src/commands.rs`
//! 4. Set up Leptos frontend in `src/ui/`
use cimery_dsl::Girder;
use cimery_core::UnitExt;
use cimery_kernel::{GeomKernel, PureRustKernel};
fn main() {
env_logger::init();
// ── Quick sanity check: build a test girder ──────────────────────────────
let girder = Girder::builder()
.station_start(0.0.m())
.station_end(40.0.m())
.section_psc_i_default()
.count(5)
.spacing(2500.0.mm())
.build()
.expect("valid girder");
let mesh = PureRustKernel.girder_mesh(&girder.ir)
.expect("girder mesh");
log::info!(
"cimery-app startup OK — test girder: span={:.0}m, triangles={}",
girder.ir.span_m(), mesh.triangle_count()
);
// ── Tauri entry point (activate when Tauri is set up) ──────────────────
// Uncomment after `cargo tauri init`:
//
// tauri::Builder::default()
// .invoke_handler(tauri::generate_handler![
// commands::get_scene_params,
// commands::set_scene_params,
// commands::save_project,
// commands::load_project,
// ])
// .run(tauri::generate_context!())
// .expect("Tauri runtime error");
println!("cimery-app v{}", env!("CARGO_PKG_VERSION"));
println!("Tauri integration: pending (Sprint 14 — run `cargo tauri init`)");
}