1. iot-alert

1.1.1. 此示例功能目的

对特定元素设置闪烁效果,以显示警报消息的方式通知用户。

1.1.2. 描述

数字孪生通常包括来自多个来源的数据。这可以包括来自用于近实时监控资产状态的传感器的数据。根据来自传感器的数据,通知用户与模型的一部分相关的异常或超出范围的情况会很有用。

此示例使用手动过程触发与特定元素相关的警报。一旦触发,应用程序会显示警报通知,然后启动闪烁效果,每秒覆盖元素颜色一次。预览地址

功能:

  • 自定义:构件选择、警报名称、警报类型、警报消息都是自主选择或填入
  • 定位:点击警报名称可定位缩放到对应的构件周边
  • 保存:点击保存,可将当前的警报设置保存到后端

1.1.3. 实现方式

实现过程中,警报通知以tag的形式表达,tag名称自定义,每个tag可对应一个或多个构件id

1. 设定几组变量: elementList:所有触发闪动效果的构件id列表,例如[0x23223333,0x22783783...] tagList:记录所有tag的详细信息,例如[{name: "cx尺寸错误", info: "This is an error about", type: "error", ids: ["0x1", "0x9"]}] blinkingElementsState:所有警报形成的tag列表,例如["cx尺寸错误", "y3位置偏差"...] elementNameIdMapState: tag和构件id对应表,例如<"cx尺寸错误": ["0x1", "0x9"], "y3位置偏差": ["0x2"]...>

  1. List item

    2. 监听selection方法

    //定义监听回调方法
    const _onSelectionChanged = async (evt: SelectionChangeEventArgs, selectionProvider: ISelectionProvider) => {
    const selection = selectionProvider.getSelection(evt.imodel, evt.level);
    setElementsAreSelected(!selection.isEmpty);
    };
    // 监听
    Presentation.selection.selectionChange.addListener(_onSelectionChanged);
    

    3. 创建tag

    const _onCreateAlert = useCallback((selectedElementState: string[]) => {
    const tempSet = [...blinkingElementsState];
    const tempTag = [...tagList];
    tempTag.push({
      type: tagType,
      name: tagName,
      info: tagInfo + " " + tagName,
      ids: selectedElementState
    });
    tempSet.push(tagName);
    setBlinkingElementsState(tempSet);
    setTagList(tempTag);
    const map = elementNameIdMapState;
    map.set(tagName, selectedElementState);
    IotAlertApi.showAlertNotification(tagType, tagInfo, tagName, map);
    const ids = createBlinkingElementIdSet(tempSet, map);
    BlinkingEffect.doBlink(ids);
    setElementNameIdMapState(map);
    setTagName("");
    }, [blinkingElementsState, elementNameIdMapState, tagInfo, tagName, tagList, tagType]);
    

    4. 实现闪烁效果

    const emph = EmphasizeElements.getOrCreate(vp);
    BlinkingEffect._overrideON = true;
    const timer = setInterval(() => {
      setTimeout(() => {
        emph.overrideElements(BlinkingEffect._ids, vp, ColorDef.white, FeatureOverrideType.ColorOnly, false);
      }, 1000);
    
      setTimeout(() => {
        emph.clearOverriddenElements(vp);
      }, 2000);
    
      if (!BlinkingEffect._overrideON) {
        clearInterval(timer);
      }
    }, 2000);
    

results matching ""

    No results matching ""