Caustic Lens Designer 的核心 API 文档,包含所有主要接口、类型定义和使用示例。
主要的焦散引擎类,连接图像处理和透镜生成。
import { CausticEngine } from './algorithms/causticEngine';
class CausticEngine {
constructor(parameters: CausticParameters);
// 生成透镜几何体
async generateLensGeometry(
targetShape: number[][],
onProgress?: (progress: number, status: string) => void,
options?: {
useGPUAcceleration?: boolean;
photonMapSize?: number;
}
): Promise<LensGeometry>;
// 停止生成过程
stop(): void;
// 检查是否正在生成
isGenerating(): boolean;
// 更新参数
updateParameters(parameters: CausticParameters): void;
}使用示例:
const engine = new CausticEngine({
focalLength: 50,
resolution: 256,
material: 'acrylic',
refractiveIndex: 1.49,
targetDistance: 100
});
const geometry = await engine.generateLensGeometry(
targetImageData,
(progress, status) => console.log(`${progress}%: ${status}`)
);核心的焦散工程算法实现。
class CausticsEngineeringAlgorithm {
constructor(parameters: any);
// 主算法入口
async generateLens(
targetImage: number[][],
onProgress?: (progress: number, status: string) => void
): Promise<LensGeometry>;
// 停止算法执行
stop(): void;
}包装类,保持与现有系统的兼容性。
class CausticsEngineeringGenerator {
constructor(parameters: any);
async generateLens(
imageData: { data: number[][] },
onProgress?: (progress: number, status: string) => void
): Promise<LensGeometry>;
stop(): void;
isGenerating(): boolean;
}3D透镜查看器组件,基于 React Three Fiber。
interface LensViewerProps {
geometry?: LensGeometry;
parameters: CausticParameters;
onParameterChange?: (params: CausticParameters) => void;
onCalculatingChange?: (isCalculating: boolean) => void;
}
const LensViewer: React.FC<LensViewerProps>;主要功能:
- 实时3D渲染
- 焦散效果模拟
- 参数调整响应
- 光线追踪可视化
参数控制面板组件。
interface ParameterPanelProps {
parameters: CausticParameters;
onChange: (params: CausticParameters) => void;
disabled?: boolean;
}
const ParameterPanel: React.FC<ParameterPanelProps>;焦散渲染结果显示区域。
interface CausticsRenderAreaProps {
results: CausticsRenderResult[];
onClear?: () => void;
onDelete?: (id: string) => void;
onDownload?: (result: CausticsRenderResult) => void;
}
const CausticsRenderArea: React.FC<CausticsRenderAreaProps>;图像上传组件。
interface ImageUploadProps {
onImageSelect: (imageData: ImageData) => void;
accept?: string;
maxSize?: number;
}
const ImageUpload: React.FC<ImageUploadProps>;基于 Zustand 的项目状态管理。
interface ProjectStore {
// 状态
currentImage: ImageData | null;
parameters: CausticParameters;
geometry: LensGeometry | null;
isProcessing: boolean;
error: string | null;
causticsRenderResults: CausticsRenderResult[];
// 动作
setCurrentImage: (image: ImageData | null) => void;
setParameters: (params: CausticParameters) => void;
setGeometry: (geometry: LensGeometry | null) => void;
setProcessing: (processing: boolean) => void;
setError: (error: string | null) => void;
addCausticsRenderResult: (result: CausticsRenderResult) => void;
clearCausticsRenderResults: () => void;
deleteCausticsRenderResult: (id: string) => void;
}
const useProjectStore = create<ProjectStore>((set, get) => ({ ... }));使用示例:
const {
parameters,
setParameters,
currentImage,
setCurrentImage
} = useProjectStore();
// 更新参数
setParameters({
...parameters,
focalLength: 75
});// 图像数据
interface ImageData {
file?: File;
url: string;
name: string;
width?: number;
height?: number;
data?: number[][];
processedData?: ImageProcessingResult;
}
// 透镜几何体
interface LensGeometry {
vertices: Point3D[];
faces: number[][];
normals: Point3D[];
uvs: Point2D[];
}
// 焦散参数
interface CausticParameters {
focalLength: number;
resolution: number;
material: string;
refractiveIndex: number;
targetDistance: number;
rayCount?: number;
convergenceThreshold?: number;
maxIterations?: number;
lightSource: LightSource;
optimization: OptimizationSettings;
}
// 光源配置
interface LightSource {
type: 'point' | 'area' | 'parallel';
intensity: number;
wavelength: number;
position: { x: number; y: number; z: number };
width?: number;
height?: number;
direction?: { x: number; y: number; z: number };
}
// 优化设置
interface OptimizationSettings {
iterations?: number;
tolerance?: number;
maxIterations?: number;
convergenceTolerance?: number;
algorithm: string;
useGPUAcceleration?: boolean;
photonMapSize?: number;
relaxationFactor?: number;
learningRate?: number;
}interface Point2D {
x: number;
y: number;
}
interface Point3D {
x: number;
y: number;
z: number;
}
interface Contour {
points: Point2D[];
area: number;
perimeter: number;
}interface ExportOptions {
format: 'stl' | 'obj' | 'ply' | 'gcode';
quality: 'low' | 'medium' | 'high';
scale: number;
}
interface CausticsRenderResult {
id: string;
timestamp: number;
imageData: string; // base64 图像数据
parameters: {
focalLength: number;
targetDistance: number;
material: string;
};
renderTime: number;
status: 'success' | 'error' | 'processing';
errorMessage?: string;
}导出功能工具函数。
// 导出STL文件
export function exportSTL(
geometry: LensGeometry,
filename: string
): void;
// 导出OBJ文件
export function exportOBJ(
geometry: LensGeometry,
filename: string
): void;
// 导出报告
export function exportReport(
projectData: ProjectState,
format: 'html' | 'pdf'
): void;报告生成工具。
// 生成HTML报告
export function generateHTMLReport(
projectData: ProjectState
): string;
// 生成PDF报告
export function generatePDFReport(
projectData: ProjectState
): Blob;
// 生成技术参数报告
export function generateTechnicalReport(
parameters: CausticParameters,
geometry: LensGeometry
): TechnicalReport;焦散渲染调试器。
class CausticDebugger {
constructor();
// 调试光线追踪
debugRayTracing(
geometry: LensGeometry,
parameters: CausticParameters
): DebugResult;
// 验证几何体
validateGeometry(geometry: LensGeometry): ValidationResult;
// 性能分析
profilePerformance(
algorithm: () => Promise<any>
): PerformanceReport;
// 可视化调试信息
visualizeDebugInfo(
debugData: DebugResult,
canvas: HTMLCanvasElement
): void;
}import { CausticEngine } from './algorithms/causticEngine';
import { useProjectStore } from './stores/projectStore';
// 1. 初始化引擎
const parameters: CausticParameters = {
focalLength: 50,
resolution: 256,
material: 'acrylic',
refractiveIndex: 1.49,
targetDistance: 100,
lightSource: {
type: 'point',
intensity: 1.0,
wavelength: 550,
position: { x: 0, y: 0, z: -100 }
},
optimization: {
algorithm: 'caustics_engineering',
iterations: 4,
useGPUAcceleration: true
}
};
const engine = new CausticEngine(parameters);
// 2. 生成透镜
async function generateLens(targetImage: number[][]) {
try {
const geometry = await engine.generateLensGeometry(
targetImage,
(progress, status) => {
console.log(`进度: ${progress}% - ${status}`);
}
);
// 3. 保存结果
const { setGeometry } = useProjectStore.getState();
setGeometry(geometry);
return geometry;
} catch (error) {
console.error('生成失败:', error);
throw error;
}
}import React from 'react';
import { LensViewer, ParameterPanel } from './components';
import { useProjectStore } from './stores/projectStore';
function App() {
const {
parameters,
setParameters,
geometry,
isProcessing
} = useProjectStore();
return (
<div className="app">
<ParameterPanel
parameters={parameters}
onChange={setParameters}
disabled={isProcessing}
/>
<LensViewer
geometry={geometry}
parameters={parameters}
onParameterChange={setParameters}
/>
</div>
);
}import { CausticsEngineeringAlgorithm } from './algorithms/causticsEngineering';
// 扩展算法类
class CustomCausticAlgorithm extends CausticsEngineeringAlgorithm {
constructor(parameters: any) {
super(parameters);
}
// 重写生成方法
async generateLens(
targetImage: number[][],
onProgress?: (progress: number, status: string) => void
): Promise<LensGeometry> {
// 自定义算法实现
onProgress?.(0, '开始自定义算法');
// 调用父类方法或完全自定义
const result = await super.generateLens(targetImage, onProgress);
// 后处理
onProgress?.(100, '自定义算法完成');
return result;
}
}// 算法错误
class CausticAlgorithmError extends Error {
constructor(message: string, public code: string) {
super(message);
this.name = 'CausticAlgorithmError';
}
}
// 几何体错误
class GeometryError extends Error {
constructor(message: string, public geometry?: LensGeometry) {
super(message);
this.name = 'GeometryError';
}
}
// 参数错误
class ParameterError extends Error {
constructor(message: string, public parameter: string) {
super(message);
this.name = 'ParameterError';
}
}try {
const geometry = await engine.generateLensGeometry(targetImage);
} catch (error) {
if (error instanceof CausticAlgorithmError) {
console.error('算法错误:', error.message, error.code);
} else if (error instanceof GeometryError) {
console.error('几何体错误:', error.message);
} else {
console.error('未知错误:', error);
}
}// 启用GPU加速
const parameters: CausticParameters = {
// ... 其他参数
optimization: {
algorithm: 'caustics_engineering',
useGPUAcceleration: true,
photonMapSize: 1024 * 1024
}
};// 清理资源
engine.stop(); // 停止算法
geometry = null; // 清理几何体注意: 此API文档会随着项目发展持续更新。如有疑问或建议,请提交 Issue 或 Pull Request。