feat(web): complete portable Blender feature gaps
Some checks failed
M6 deployable RC / quick (push) Has been cancelled
M6 deployable RC / chromium (push) Has been cancelled
M6 deployable RC / release (push) Has been cancelled

This commit is contained in:
mes123456
2026-09-06 19:33:50 +08:00
parent ed347098b4
commit 66d3f4e0f4
48 changed files with 58048 additions and 61 deletions

View File

@@ -11,6 +11,9 @@ import type {
WebEngineResult,
WebEngineOpenResourceStatus,
WebEngineStatus,
RNADataBlockDescriptor,
RNAPropertyDescriptor,
RNACollectionDescriptor,
} from "../../../protocol/web-engine";
import type { LODGenerationRequest } from "../../../protocol/lod";
import type { SceneSnapshotIR } from "../../../protocol/scene-ir";
@@ -183,6 +186,28 @@ export class WebEngineClient {
return { status, operators: normalizeOperatorCatalog(result) };
}
async listRNADataBlocks(params: Record<string, unknown> = {}): Promise<{ status: WebEngineStatus; dataBlocks: RNADataBlockDescriptor[] }> {
const { status, result } = await this.callJson<unknown>("listRNADataBlocks", params);
const dataBlocks = Array.isArray(result) ? result : (result && typeof result === "object" && Array.isArray((result as { dataBlocks?: unknown }).dataBlocks) ? (result as { dataBlocks: unknown[] }).dataBlocks : []);
return { status, dataBlocks: dataBlocks.filter((item): item is RNADataBlockDescriptor => Boolean(item && typeof item === "object")) };
}
async readRNAProperties(params: Record<string, unknown>): Promise<{ status: WebEngineStatus; properties: RNAPropertyDescriptor[] }> {
const { status, result } = await this.callJson<unknown>("readRNAProperties", params);
const properties = Array.isArray(result) ? result : (result && typeof result === "object" && Array.isArray((result as { properties?: unknown }).properties) ? (result as { properties: unknown[] }).properties : []);
return { status, properties: properties.filter((item): item is RNAPropertyDescriptor => Boolean(item && typeof item === "object")) };
}
async setRNAProperty(params: Record<string, unknown>): Promise<{ status: WebEngineStatus; result: unknown }> {
return this.callJson("setRNAProperty", params);
}
async listRNACollections(params: Record<string, unknown> = {}): Promise<{ status: WebEngineStatus; collections: RNACollectionDescriptor[] }> {
const { status, result } = await this.callJson<unknown>("listRNACollections", params);
const collections = Array.isArray(result) ? result : (result && typeof result === "object" && Array.isArray((result as { collections?: unknown }).collections) ? (result as { collections: unknown[] }).collections : []);
return { status, collections: collections.filter((item): item is RNACollectionDescriptor => Boolean(item && typeof item === "object")) };
}
async invokeBlenderOperator(invocation: BlenderOperatorInvocation): Promise<BlendOpenResult & { delta: SceneDelta; operatorResult?: unknown }> {
if (!invocation.operator.trim()) throw this.report("INVALID_ARGUMENT", "Blender operator 不能为空", true);
const result = await this.request({ type: "jsonCommand", cmd: "invokeBlenderOperator", params: invocation as unknown as Record<string, unknown> });