handleSetModelDbidAlpha(设置构件透明度)

2022-2-18
/**
 * 设置构件透明度
 * @param {Object} viewer 
 * @param {Number} dbid 
 * @param {Number} alpha 透明度
 */
function handleSetModelDbidAlpha(viewer, dbid, alpha = 0.5) {
  if (!viewer) return;

  const model = viewer.model;
  const fragList = model.getFragmentList();
  const instanceTree = model.getData().instanceTree;
  let fragIds = [];

  if(!instanceTree) return;

  instanceTree.enumNodeFragments(typeof dbid === 'number' ? dbid : parseInt(dbid), (fragId) => {
    fragIds.push(fragId);
  });

  fragIds.forEach((fragId) => {
    //获取材质
    var material = fragList.getMaterial(fragId);

    if (material) {
      //设置透明度
      material.opacity = alpha;
      material.transparent = true;
      //标记更新
      material.needsUpdate = true;
    }
  });

  //更新viewer
  viewer.impl.invalidate(true, true, true);
}

export default handleSetModelDbidAlpha;