next-flow-interface 0.26.18 → 0.26.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/index.d.ts +144 -17
  2. package/package.json +1 -1
package/index.d.ts CHANGED
@@ -1630,6 +1630,15 @@ export declare class DomNotFoundError extends NotFoundError {
1630
1630
  constructor(message: string);
1631
1631
  }
1632
1632
 
1633
+ declare interface DragNodeInfo {
1634
+ nid: string;
1635
+ location: StoredRhineVar<RvLocation>;
1636
+ initialPosition: V3;
1637
+ initialRotation?: V3;
1638
+ initialRotationQuaternion?: V4;
1639
+ initialScale: V3;
1640
+ }
1641
+
1633
1642
  /**
1634
1643
  * @public
1635
1644
  */
@@ -5298,6 +5307,7 @@ export declare class RsSelectionService {
5298
5307
  branchMode: boolean;
5299
5308
  materialInfo: RsSelectionMaterialInfo;
5300
5309
  highlight: HighLightInfo[];
5310
+ getSelectedNidList(): string[];
5301
5311
  changeBranchMode(value?: boolean, message?: boolean): void;
5302
5312
  toAllChildren(log?: boolean): boolean;
5303
5313
  subscribe(subscriber: SelectedSubscriber): () => void;
@@ -5318,44 +5328,104 @@ export declare interface RsSelectionState {
5318
5328
  }
5319
5329
 
5320
5330
  /**
5321
- * @public
5331
+ * 材质分离渲染服务
5332
+ *
5333
+ * 在 BabylonJS 渲染层执行实际的材质分离操作。
5334
+ * 当多个 mesh 共享同一材质时,通过 clone 材质实现独立编辑,
5335
+ * 避免修改一个节点的材质影响其他节点。
5336
+ *
5337
+ * @remarks
5338
+ * 采用"按需分离"策略,只在需要独立编辑时才 clone 材质,节省内存。
5339
+ *
5340
+ * 典型流程:
5341
+ * 1. 文件加载后调用 {@link analyzeByMeshes} 分析共享材质的节点
5342
+ * 2. 编辑材质时调用 {@link get} 或 {@link getWithEnsureType} 获取独立材质
5343
+ *
5344
+ * @example
5345
+ * ```typescript
5346
+ * // 获取节点的独立材质(按需分离)
5347
+ * const material = await RsSeparateService.instance.get(nid)
5348
+ *
5349
+ * // 获取并确保材质类型匹配
5350
+ * const material = await RsSeparateService.instance.getWithEnsureType(nid, rvMaterial)
5351
+ * ```
5352
+ *
5353
+ * @see {@link RvSeparateService} 协同数据层材质分离服务
5322
5354
  */
5323
5355
  export declare class RsSeparateService {
5356
+ /**
5357
+ * 获取单例实例
5358
+ *
5359
+ * @returns 服务单例
5360
+ */
5324
5361
  static get instance(): RsSeparateService;
5325
5362
  private constructor();
5363
+ /**
5364
+ * 已完成材质分离的节点 nid 列表
5365
+ *
5366
+ * 记录在当前会话中已经执行过材质 clone 的节点,避免重复分离。
5367
+ */
5326
5368
  separated: string[];
5369
+ /**
5370
+ * 检查节点是否已完成材质分离
5371
+ *
5372
+ * @param nid - 节点唯一标识符
5373
+ * @returns 是否已分离
5374
+ */
5327
5375
  has(nid: string): boolean;
5376
+ /**
5377
+ * 标记节点为已分离,并可选地设置材质
5378
+ *
5379
+ * @param nid - 节点唯一标识符
5380
+ * @param mesh - 目标 mesh(可选)
5381
+ * @param material - 要设置的材质(可选)
5382
+ */
5328
5383
  add(nid: string, mesh?: AbstractMesh, material?: Material | null): void;
5329
5384
  /**
5330
5385
  * 获取节点分离后的材质
5331
5386
  *
5332
- * 如果材质已经分离,则返回分离后的材质,为分离则先复制并分离再返回新材质。
5387
+ * 如果节点在分离组中但尚未分离,则 clone 原材质并赋给该 mesh。
5388
+ * 如果已分离或不在分离组中,直接返回当前材质。
5333
5389
  *
5334
- * @param nid -
5335
- * @param node -
5390
+ * @param nid - 节点唯一标识符
5391
+ * @param node - 可选的已知节点,避免重复查找
5392
+ * @returns 分离后的材质,若节点无材质则返回 null
5336
5393
  */
5337
5394
  get(nid: string, node?: Node_2): Promise<Material | null>;
5338
5395
  /**
5339
- * 获取节点分离后的材质
5396
+ * 获取节点分离后的材质,并确保材质类型匹配
5340
5397
  *
5341
- * 会确保材质的类型符合数据,不符合则创建。
5398
+ * 会检查当前材质类型是否与协同数据中定义的类型一致,
5399
+ * 不一致则创建新的对应类型材质。
5342
5400
  *
5343
- * 如果材质已经分离,则返回分离后的材质,未分离则先复制并分离再返回新材质。
5344
- *
5345
- * @param nid -
5346
- * @param rvMaterial -
5347
- * @param node -
5401
+ * @param nid - 节点唯一标识符
5402
+ * @param rvMaterial - 协同数据中的材质定义
5403
+ * @param node - 可选的已知节点,避免重复查找
5404
+ * @returns 类型匹配的分离材质,若无法创建则返回 null
5348
5405
  */
5349
5406
  getWithEnsureType(
5350
5407
  nid: string,
5351
5408
  rvMaterial: RvMaterial,
5352
5409
  node?: Node_2,
5353
5410
  ): Promise<Material | null>;
5411
+ /**
5412
+ * 检查材质实例是否匹配指定类型
5413
+ *
5414
+ * @param material - BabylonJS 材质实例
5415
+ * @param type - 期望的材质类型枚举值
5416
+ * @returns 是否匹配
5417
+ */
5354
5418
  checkMaterialType(material: Material, type: RvMaterialType): boolean;
5355
5419
  /**
5356
- * 分析所有模型,找到其中所有有使用相同材质的模型,分组他们的id
5420
+ * 分析一组 mesh,找出共享材质的节点并写入协同数据
5421
+ *
5422
+ * 遍历所有 mesh,按材质 uniqueId 分组,将共享同一材质的节点 nid 记录到
5423
+ * {@link RvSeparateService} 的协同数据中。
5357
5424
  *
5358
- * @param meshes
5425
+ * @remarks
5426
+ * 通常在文件加载完成后调用,用于初始化材质分离信息。
5427
+ *
5428
+ * @param meshes - 要分析的 mesh 数组
5359
5429
  */
5360
5430
  analyzeByMeshes(meshes: AbstractMesh[]): void;
5361
5431
  }
@@ -6102,7 +6172,7 @@ export declare class RvModelService {
6102
6172
  has(mid: string): boolean;
6103
6173
  hasFid(fid: string): boolean;
6104
6174
  add(rvModel: RvModel): string;
6105
- addTransformNode(): string;
6175
+ addTransformNode(name?: string): string;
6106
6176
  remove(mid: string): boolean;
6107
6177
  generateId(): string;
6108
6178
  }
@@ -6404,7 +6474,7 @@ export declare class RvSceneService {
6404
6474
  isAncestor(nid: string, of: string): boolean;
6405
6475
  isParent(nid: string, of: string): boolean;
6406
6476
  isChild(nid: string, of: string): boolean;
6407
- newNode(fromNid?: string): void;
6477
+ newTransformNode(parent?: string, name?: string): string;
6408
6478
  move(nid: string, newParent?: string): void;
6409
6479
  delete(nid: string): void;
6410
6480
  getDescendantsWithSelf(nid: string): string[];
@@ -6422,7 +6492,64 @@ export declare class RvSceneService {
6422
6492
  * @public
6423
6493
  */
6424
6494
  export declare interface RvSeparate {
6425
- groups: RhineVarArray<RhineVarArray>;
6495
+ groups: RhineVarArray<RhineVarArray<string>>;
6496
+ }
6497
+
6498
+ /**
6499
+ * 材质分离协同数据服务
6500
+ *
6501
+ * 管理材质分离相关的 RhineVar 协同数据,记录哪些节点共享同一材质。
6502
+ * 当 GLB 文件中多个 mesh 共用材质时,需要记录这些共享关系,
6503
+ * 以便在用户编辑某个节点材质时进行按需分离。
6504
+ *
6505
+ * @remarks
6506
+ * 数据结构 `RvSeparate.groups: string[][]`,每个 group 是一组共享同一材质的节点 nid 列表。
6507
+ *
6508
+ * @example
6509
+ * ```typescript
6510
+ * // 检查节点是否与其他节点共享材质
6511
+ * if (RvSeparateService.instance.has(nid)) {
6512
+ * // 需要分离材质
6513
+ * }
6514
+ * ```
6515
+ *
6516
+ * @see {@link RsSeparateService} 渲染层材质分离服务
6517
+ */
6518
+ export declare class RvSeparateService {
6519
+ private static _instance;
6520
+ /**
6521
+ * 获取单例实例
6522
+ *
6523
+ * @returns 服务单例
6524
+ */
6525
+ static get instance(): RvSeparateService;
6526
+ private constructor();
6527
+ /**
6528
+ * 材质分离协同数据
6529
+ *
6530
+ * 包含 `groups` 字段,记录所有共享材质的节点分组。
6531
+ */
6532
+ separate: StoredRhineVar<RvSeparate>;
6533
+ /**
6534
+ * 检查节点是否在任意材质分离组中
6535
+ *
6536
+ * 若返回 true,表示该节点与其他节点共享材质,编辑前需要进行材质分离。
6537
+ *
6538
+ * @param nid - 节点唯一标识符
6539
+ * @returns 是否在分离组中
6540
+ */
6541
+ has(nid: string): boolean;
6542
+ /**
6543
+ * 将新节点与源节点加入同一材质分离组
6544
+ *
6545
+ * 用于复制节点时,确保复制出的节点与原节点共享材质分离信息。
6546
+ * 如果源节点已在某个分离组中,则将新节点加入该组;
6547
+ * 否则创建一个新的分离组包含这两个节点。
6548
+ *
6549
+ * @param fromNid - 源节点 nid
6550
+ * @param newNid - 新复制的节点 nid
6551
+ */
6552
+ addCopyToGroup(fromNid: string, newNid: string): void;
6426
6553
  }
6427
6554
 
6428
6555
  /**
@@ -6527,7 +6654,7 @@ export declare class SceneService {
6527
6654
  offsetX: number;
6528
6655
  offsetY: number;
6529
6656
  };
6530
- newNode(fromNid?: string): void;
6657
+ newTransformNode(parent?: string, name?: string): void;
6531
6658
  /**
6532
6659
  * 批量复制
6533
6660
  *
package/package.json CHANGED
@@ -36,7 +36,7 @@
36
36
  "valtio": "2.1.7",
37
37
  "rhine-var": "0.11.2"
38
38
  },
39
- "version": "0.26.18",
39
+ "version": "0.26.20",
40
40
  "author": "NextFlow",
41
41
  "license": "Apache-2.0",
42
42
  "keywords": [