feat(web): complete portable Blender feature gaps
This commit is contained in:
@@ -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> });
|
||||
|
||||
Reference in New Issue
Block a user