# Hi.Sample.Webapi

這是一個展示如何使用 Hi.Webapi 功能的範例專案。

## 專案描述

本專案示範了如何：
- 使用 Hi.Webapi 的 RenderingService 和 RenderingHub
- 建立自訂的 Controller 來創建測試 3D 物件
- 整合 SignalR 進行即時渲染通訊
- 實作 IDisplayee 介面來定義自訂的 3D 物件

## 功能特點

- **3D 物件渲染**：使用 Hi.Disp 引擎渲染 3D 圖形
- **即時通訊**：透過 SignalR 實現客戶端與服務器的即時互動
- **測試物件**：包含坐標軸、立方體和地面網格的示範物件
- **WebGL 渲染**：使用 HTML5 Canvas 進行硬體加速渲染
- **多種前端範例**：提供原生 JavaScript 和 Vue.js 兩種實作方式

## 執行專案

### 前置需求
- .NET 9.0 SDK
- Visual Studio 2022 或 VS Code

### 啟動步驟

1. 在專案目錄下執行：
   ```bash
   dotnet build
   dotnet run
   ```

2. 開啟瀏覽器訪問：
   - 原生 JavaScript 版本：http://localhost:5180/demo-native.html
   - Vue.js 內嵌版本：http://localhost:5180/demo-vue-inline.html

## 專案結構

```
Hi.Sample.Webapi/
├── Controllers/
│   └── RenderingController.cs    # 範例控制器，展示如何創建測試物件
├── wwwroot/
│   ├── demo-native.html         # 原生 JavaScript 範例頁面
│   └── demo-vue-inline.html     # Vue.js 內嵌式範例頁面
├── Program.cs                   # 應用程式進入點
├── appsettings.json            # 應用程式設定
├── Properties/
│   └── launchSettings.json     # 啟動設定
└── Hi.Sample.Webapi.csproj     # 專案檔案
```

## 使用說明

### 鍵盤控制
- **F1-F4**：切換不同視圖
- **方向鍵**：旋轉視圖
- **PageUp/PageDown**：縮放
- **Home**：重置視圖

### 滑鼠控制
- **左鍵拖曳**：旋轉視圖
- **右鍵拖曳**：平移視圖
- **滾輪**：縮放

## API 端點

- `GET /api/rendering/engines/count` - 獲取活動的渲染引擎數量
- `POST /api/rendering/test-objects/{sessionId}` - 為指定會話創建測試物件

## 重要類別說明

### TestDisplayee
實作 IDisplayee 介面的範例類別，展示如何創建自訂的 3D 物件：
- 使用 Drawing 類別創建圖形元素
- 實作 Display 方法來渲染物件
- 實作 ExpandToBox3d 方法來定義物件邊界

## 前端實作比較

### demo-native.html
- 使用原生 JavaScript
- 詳細的實作範例
- 適合學習底層 API 使用

### demo-vue-inline.html
- 使用 Vue.js 3
- 所有程式碼內嵌在單一 HTML 檔案中
- 展示如何用 Vue.js 整合渲染功能
- 無需外部依賴檔案，方便複製使用

## 依賴項目

- Hi.Webapi - 提供 Web API 和 SignalR 支援
- HiNc - 核心 NC 功能
- HiDisp - 顯示引擎
- HiGeom - 幾何運算
- 其他 HiAPI 相關專案

## 注意事項

這是一個範例專案，主要用於展示 Hi.Webapi 的使用方式。實際專案中可能需要根據具體需求進行調整和擴展。

### 關於 Vue.js 元件
如果您需要使用模組化的 Vue.js 元件（如 Hi.Webapi 專案中的 rendering-canvas.js），請參考 Hi.Webapi 專案的實作方式。本範例使用內嵌方式是為了保持簡單和獨立性。 