资讯动态

cornerstoneTools 第三方扩展机制详解:register 与 drop-in 工具无缝接入完整教程

发布时间:2026/8/22 13:45:06 来源:尧图企业网站定制
cornerstoneTools 第三方扩展机制详解register 与 drop-in 工具无缝接入完整教程【免费下载链接】cornerstoneToolsA framework for tools built on top of Cornerstone.项目地址: https://gitcode.com/gh_mirrors/co/cornerstoneToolscornerstoneTools 是基于 Cornerstone 构建的医学影像工具框架其第三方扩展机制让你无需 fork 整个代码库就能通过一个register函数把自定义工具、mixin、模块像插件一样无缝接入drop-in。本文将带你快速掌握 register 注册机制与 drop-in 工具接入方法3 步即可扩展出你自己的影像工具。为什么需要第三方扩展机制在实际的医学影像开发中你经常会遇到这样的需求 需要一种框架里没有的测量工具比如特殊的解剖学标尺 多个工具要复用同一段交互逻辑 想维护一份私有扩展又不想分叉整个项目从 3.0 版本开始cornerstoneTools 内置了第三方架构third-party architecture核心优势就是不维护 fork也能扩展功能。官方文档在 docs/latest/third-party-functionality/index.md 中对这一机制有完整说明。5 类可扩展对象先认识你要注册什么第三方扩展机制支持注册的对象类型如下详见 docs/latest/third-party-functionality/item-types.md类型作用一句话理解module全局状态存储多个工具共享数据的仓库mixin可复用方法集合给工具批量贴方法base新的抽象工具基类创建自家工具家族的父类manipulator句柄交互逻辑自定义 annotation 的拖拽行为utils通用工具函数纯粹的公共函数此外框架内部还有drawing与stateManagement两个类型通常由框架自身使用。register 注册机制3 步完成无缝接入所有注册逻辑都汇聚在一个顶层函数register(type, name, item, overwrite)中实现位于 src/thirdParty/register.js。它的工作方式非常直观第 1 步定义扩展项。根据你的目标写好一个 module含state/getters/setters、一个 mixin普通函数对象或一个工具类。第 2 步调用 register 注册。例如cornerstoneTools.register(module, helloWorldModule, myModule); cornerstoneTools.register(mixin, evenMoreHelloWorld, myMixin);register内部会根据type自动分发module走 registerModule.jsmixin走 registerMixin.js其余类型走 registerItem.js。第 3 步初始化并使用。注册完成后调用cornerstoneTools.init()即可像使用内置功能一样使用你的扩展。⚠️ 两个关键规则必须先注册再 init所有register调用都要放在init()之前重名默认拦截注册已存在的type/name会记录警告并取消如需覆盖在末尾加第 4 个参数truecornerstoneTools.register(mixin, evenMoreHelloWorld, mySuperiorMixin, true);批量注册registerSome 让插件库接入更高效如果你的扩展库包含很多项可以打包成数组一次性注册实现在 src/thirdParty/registerSome.jsconst lotsOfItems [ { type: module, name: myModule, item: myModule }, { type: mixin, name: myMixin, item: myMixin }, ]; cornerstoneTools.registerSome(lotsOfItems);这正是drop-in 插件包的典型形态——一个库文件一行代码全部接入。创建 drop-in 工具继承 BaseTool 即可第三方工具的接入方式同样简单导入内置基类然后继承。这是整个机制里最优雅的部分完整示例见 docs/latest/third-party-functionality/tools.mdconst BaseTool cornerstoneTools.importInternal(base/BaseTool); class HelloWorldMouseTool extends BaseTool { constructor(name HelloWorldMouse) { super({ name, supportedInteractionTypes: [mouse], mixins: [ activeOrDisabledBinaryTool, // 来自核心库 evenMoreHelloWorld, // 来自第三方注册 ], }); this._helloWorldModule cornerstoneTools.getModule(helloWorld); } preMouseDownCallback(evt) { console.log(this._helloWorldModule.getters.response()); } }几个要点值得注意mixin 可以混用mixins数组里既能写核心库的也能写自己注册的BaseTool的构造函数会自动完成挂载基类源码见 src/tools/base/BaseTool.js模块必须在构造函数里访问因为模块可能在你的文件加载时尚未注册所以在constructor中调用getModule最安全接入使用只需两行cornerstoneTools.addTool(HelloWorldMouseTool); cornerstoneTools.setToolActive(HelloWorldMouse, { mouseButtonMask: 1 });一个完整的可运行示例含 module mixin 工具的三方接入全过程可以看 netlify-example/thirdParty/index.html。检索扩展importInternal 与 getModule注册完成的功能都可以通过两个顶层函数取回说明见 docs/latest/third-party-functionality/imports.mdcornerstoneTools.importInternal(mixins/xxx)—— 取回任意已注册的 mixin、utils、manipulator 等cornerstoneTools.getModule(moduleName)—— 取回 store 中的模块也就是说注册即导出第三方项注册后会自动挂到内部lib上随时可按type/name路径引用。最佳实践清单 场景建议功能可在多个工具间复用注册为mixin避免复制粘贴需要跨工具共享全局状态注册为module提供 getter/setter想沉淀一整套自研工具创建继承自 BaseTool 的base类型插件包包含多项功能用registerSome批量注册与他人扩展重名优先换名字确需覆盖时才传overwritetrue如果你开发的功能对社区有价值也欢迎向上游社区回馈贡献。相关资源第三方扩展机制入口文档docs/latest/third-party-functionality/index.md注册机制说明docs/latest/third-party-functionality/registration.mdregister 核心实现src/thirdParty/register.js可运行示例netlify-example/thirdParty/index.html掌握register注册机制后你就拥有了 cornerstoneTools 的插件能力——从一个小 mixin 到一整套 drop-in 工具库都只需几行代码就能无缝接入你的医学影像应用。【免费下载链接】cornerstoneToolsA framework for tools built on top of Cornerstone.项目地址: https://gitcode.com/gh_mirrors/co/cornerstoneTools创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价