当前位置: 首页 > news >正文

iTwin开源包系列(一) 树组件

https://www.npmjs.com/package/@itwin/tree-widget-react

1 创建存储对象

import { IModelConnection } from "@itwin/core-frontend";
import { createStorage } from "@itwin/unified-selection";
import type { SelectionStorage } from "@itwin/unified-selection";let unifiedSelectionStorage: SelectionStorage | undefined;
function getUnifiedSelectionStorage(): SelectionStorage {if (!unifiedSelectionStorage) {unifiedSelectionStorage = createStorage();IModelConnection.onClose.addListener((imodel) => {unifiedSelectionStorage!.clearStorage({ imodelKey: imodel.key });});}return unifiedSelectionStorage;
}

2 创建schema context,访问iModel的metadata

import { SchemaContext } from "@itwin/ecschema-metadata";
import { ECSchemaRpcLocater } from "@itwin/ecschema-rpcinterface-common";
import type { IModelConnection } from "@itwin/core-frontend";const schemaContextCache = new Map<string, SchemaContext>();
function getSchemaContext(imodel: IModelConnection) {const key = imodel.getRpcProps().key;let schemaContext = schemaContextCache.get(key);if (!schemaContext) {const schemaLocater = new ECSchemaRpcLocater(imodel.getRpcProps());schemaContext = new SchemaContext();schemaContext.addLocater(schemaLocater);schemaContextCache.set(key, schemaContext);imodel.onClose.addOnce(() => schemaContextCache.delete(key));}return schemaContext;
}

3  初始化

import { TreeWidget } from "@itwin/tree-widget-react";
import { IModelApp } from "@itwin/core-frontend";await TreeWidget.initialize(IModelApp.localization);

4 使用

import { ModelsTreeComponent } from "@itwin/tree-widget-react";function MyWidget() {return (<ModelsTreeComponent// see "Creating schema context" section for example implementationgetSchemaContext={(iModel) => iModel.schemaContext}// see "Creating unified selection storage" section for example implementationselectionStorage={unifiedSelectionStorage}headerButtons={[(props) => <ModelsTreeComponent.ShowAllButton {...props} key={"ShowAllButton"} />,(props) => <ModelsTreeComponent.HideAllButton {...props} key={"HideAllButton"} />,]}/>);
}

效果

可用标题按钮

  • ModelsTreeComponent.ShowAllButton:显示 iModel 中的全部内容。

  • ModelsTreeComponent.HideAllButton:关闭所有模型,从而隐藏 iModel 中的全部内容。

  • ModelsTreeComponent.InvertButton:反转所有模型的显示状态。

  • ModelsTreeComponent.View2DButton:切换平面投影模型的显示。

  • ModelsTreeComponent.View3DButton:切换非平面投影模型的显示。

  • ModelsTreeComponent.ToggleInstancesFocusButton:启用/禁用实例聚焦模式。

5 自定义Model Tree(自定义如label)

import { useCallback } from "react";
import { TreeWithHeader, useModelsTree, useModelsTreeButtonProps, VisibilityTree, VisibilityTreeRenderer } from "@itwin/tree-widget-react";
import type { SelectionStorage } from "@itwin/unified-selection";
import type { IModelConnection, Viewport } from "@itwin/core-frontend";
import type { SchemaContext } from "@itwin/ecschema-metadata";
import type { ComponentPropsWithoutRef } from "react";type VisibilityTreeRendererProps = ComponentPropsWithoutRef<typeof VisibilityTreeRenderer>;
type CustomModelsTreeRendererProps = Parameters<ComponentPropsWithoutRef<typeof VisibilityTree>["treeRenderer"]>[0];
function CustomModelsTreeRenderer(props: CustomModelsTreeRendererProps) {const getLabel = props.getLabel;const getLabelCallback = useCallback<Required<VisibilityTreeRendererProps>["getLabel"]>((node) => {const originalLabel = getLabel(node);return <>Custom node - {originalLabel}</>;},[getLabel],);const getSublabelCallback = useCallback<Required<VisibilityTreeRendererProps>["getSublabel"]>((node) => <>Sublabel - {node.label}</>, []);return <VisibilityTreeRenderer {...props} getLabel={getLabelCallback} getSublabel={getSublabelCallback} />;
}interface CustomModelsTreeProps {imodel: IModelConnection;viewport: Viewport;getSchemaContext: (imodel: IModelConnection) => SchemaContext;selectionStorage: SelectionStorage;
}function CustomModelsTreeComponent({ imodel, viewport, getSchemaContext, selectionStorage }: CustomModelsTreeProps) {const { buttonProps } = useModelsTreeButtonProps({ imodel, viewport });const { modelsTreeProps, rendererProps } = useModelsTree({ activeView: viewport });return (<TreeWithHeaderbuttons={[<ModelsTreeComponent.ShowAllButton {...buttonProps} key={"ShowAllButton"} />,<ModelsTreeComponent.HideAllButton {...buttonProps} key={"HideAllButton"} />,]}><VisibilityTree{...modelsTreeProps}getSchemaContext={getSchemaContext}selectionStorage={selectionStorage}imodel={imodel}treeRenderer={(props) => <CustomModelsTreeRenderer {...props} {...rendererProps} />}/></TreeWithHeader>);
}
<CustomModelsTreeComponentimodel={UiFramework.getIModelConnection()!}viewport={useActiveViewport()!}getSchemaContext={(imodel) => imodel.schemaContext}selectionStorage={unifiedSelectionStorage}/>

http://www.dtcms.com/a/605605.html

相关文章:

  • 网站暂停怎么做dz动力 wordpress
  • sql评估存储的速度和稳定性
  • Kafka 菜鸟教程:从入门到实践
  • pytorch——从核心特性到多模态与相机系统优化的实践
  • 广东广东网站建设工作网页平面设计公司
  • 可视化图解算法68:数组中出现次数超过一半的数字
  • 在ec2上部署CosyVoice2模型
  • wish跨境电商平台四川成都网站优化
  • GitHub Copilot 与 Visual Studio 漏洞可致攻击者绕过安全防护功能
  • 将qt界面中加载css或者qss样式
  • 离线部署指南:本地下载MySQL 8.0.37并上传服务器Centos7.9安装
  • Camera Tuning:视觉时代的核心岗位
  • 商城类网站怎么优化网站建设实验代码
  • 【JavaEE】-- IoC DI
  • 制作网站低价网页设计的重点和难点
  • 基于灵动MM32F0130 MCU微控制器的智能插排设计
  • Java-170 Neo4j 事务、索引与约束实战:语法、并发陷阱与速修清单
  • Javaee—— CAS
  • 图片上传git时压缩
  • Flutter 聊天界面使用ListView的reverse:true,导致条目太少的时候会从下往上显示,导致顶部大片空白
  • 湛江市政工程建设公司网站仿别人的网站违法嘛
  • 石景山企业网站建设公司网站开发策划
  • RDMA拥塞控制之CNP
  • 终端Kitty,主要是看有人聊到opencode需要的终端
  • 基于Python的新能源汽车销量数据分析与预测系统设计与实现
  • android recyclerview缓存_缓存问题解决办法
  • GEN-0深度剖析:物理交互数据如何重塑机器人学习的“扩展定律”
  • 各大网站的名字大全百度招聘
  • 泰州网站关键词优化软件咨询在线crm系统是啥
  • ZC序列的原理及在LTE中的应用