iTwin 修改快捷键 📅 发布时间:2026/7/9 7:37:53 👁️ 浏览次数: 默认快捷键定义在IdleTool里 itwinjs-core\core\frontend\src\tools\IdleTool.ts可以看到itwinjs的默认快捷键的介绍* - Mouse/keyboard: * - mmb: pan * - shift-mmb: rotate * - wheel: zoom in/out * - double-mmb: fit view * - Touch: * - single-finger drag: rotate * - two-finger drag: pan * - pinch: zoom in/out * - double-tap: fit view鼠标中键Panshift鼠标中键Rotate滚轮Zoom in / outCtrl 鼠标中键: View.Look 或 View.Scroll自定义快捷键需求鼠标左键拖拽改为Pan鼠标中键改为Rotate同时要求单击选择扩展IdleToolimport { IModelApp, IdleTool, BeButton, BeButtonEvent, BeTouchEvent, BeWheelEvent, EventHandled, ViewHandleType, ViewManip, HitDetail, LocateResponse, } from itwin/core-frontend; export class MyIdleTool extends IdleTool { public static override toolId MyIdle; public static override hidden true; public allowOutsideProjectExtents: boolean true; public override async onDataButtonUp(ev: BeButtonEvent): PromiseEventHandled { if (undefined ev.viewport) return EventHandled.No; if (this.allowOutsideProjectExtents) { const hit await IModelApp.locateManager.doLocate(new LocateResponse(), true, ev.point, ev.viewport, ev.inputSource); if (hit?.isElementHit) { const viewport ev.viewport; viewport.iModel.selectionSet.replace(hit.sourceId); } } // ev.point is the current world coordinate point adjusted for snap and locks this.onReinitialize().catch(() { }); // Calls onRestartTool to exit return EventHandled.No; } // 拖拽事件全程在Idle监听左键拖拽直接启动Pan平移 public override async onMouseStartDrag(ev: BeButtonEvent): PromiseEventHandled { if (!ev.viewport) return EventHandled.No; let toolId: string; let handleId: ViewHandleType; switch (ev.button) { case BeButton.Data: // 左键拖拽固定为视图平移Pan toolId View.Pan; handleId ViewHandleType.Pan; break; case BeButton.Middle: // 保留原有中键逻辑 if (ev.isControlKey) { toolId ev.viewport.view.allow3dManipulations() ? View.Look : View.Scroll; handleId ev.viewport.view.allow3dManipulations() ? ViewHandleType.Look : ViewHandleType.Scroll; } else { toolId View.Rotate; handleId ViewHandleType.Rotate; } break; default: toolId View.Pan; handleId ViewHandleType.Pan; break; } const currViewTool IModelApp.toolAdmin.viewTool; if (currViewTool currViewTool instanceof ViewManip) { return currViewTool.startHandleDrag(ev, handleId); } const viewManipTool IModelApp.tools.create(toolId, ev.viewport, true, true) as ViewManip | undefined; if (viewManipTool await viewManipTool.run()) { return viewManipTool.startHandleDrag(ev, handleId); } return EventHandled.No; } public override async onMouseWheel(ev: BeWheelEvent): PromiseEventHandled { return super.onMouseWheel(ev); } public override async onTouchMoveStart(ev: BeTouchEvent, startEv: BeTouchEvent): PromiseEventHandled { return super.onTouchMoveStart(ev, startEv); } public override async onTouchTap(ev: BeTouchEvent): PromiseEventHandled { return super.onTouchTap(ev); } }初始化IModelApp.toolAdmin.idleTool new MyIdleTool(); IModelApp.toolAdmin.defaultToolId View.Pan;
UVa 637 Booklet Printing 题目描述 在打印文档时,通常按顺序打印第一页、第二页……但若要制作折叠小册子(booklet\texttt{booklet}booklet),打印顺序必须改变。一本折叠小册子每张纸包含四个页面:正面两张、背面两张。将所有纸张按顺序堆叠后&… 2026/7/9 7:37:53
Java商城系统选型:初创、中小、大型企业分别怎么选? 一、先认清自己的业务阶段 Java商城系统的选型,核心不在于"哪个系统功能最多",而在于"哪个系统最匹配你的阶段"。我们按三种典型场景来拆解: 初创团队(0到1阶段):预算有限࿰… 2026/7/9 7:33:52
几何光学的数字实验室:如何用Ray Optics Simulation打破传统光学学习壁垒 几何光学的数字实验室:如何用Ray Optics Simulation打破传统光学学习壁垒 【免费下载链接】ray-optics A web app for creating and simulating 2D geometric optical scenes, with a gallery of (interactive) demos. 项目地址: https://gitcode.com/gh_mirrors/… 2026/7/9 7:29:51
【YFIOs】用C#开发硬件之设备上云 设备初始化到数据上传的完整实现。 NuGet 软件包 包名版本用途nanoFramework.CoreLibrary1.17.11基础运行时(System 命名空间)nanoFramework.Hardware.Esp321.6.37ESP32 引脚功能配置(I2C/SPI/UART)nanoFramework.Iot.Device.… 2026/7/9 9:02:36
HTML常用块标签详解:构建网页布局的基石 大家好,欢迎继续我们的HTML学习之旅。上一节我们认识了HTML的基本骨架和标签分类,今天我们来深入了解一下块级元素——它们是网页布局中最核心、最常用的“积木”。 一、什么是块级标签? 块级标签是构成网页结构的主力军,它们有… 2026/7/9 9:02:36
浙江在职人士学历提升时间管理与高效学习法:工作、生活、学业三不误 对于绝大多数成人学历提升学员来说,最大的挑战不是考试本身,而是如何在繁忙的工作和家庭生活之间挤出学习时间,并且保持高效。箭金学堂服务16000多名在职学员的过程中,总结出了一套经过验证的时间管理和学习方法论。这套方法论已经… 2026/7/9 9:00:35
Ant Design Table 的默认行为。如果不设置宽度,列会根据内容和表格容器宽度自动调整,当列数较多时容易被挤压。 原因:Table 默认使用自适应布局,列宽根据内容自动分配没有设置 scroll.x 时,表格会尝试适应容器宽度列数多且内容少时,列会被挤压得很窄解决方案:1. 设置横向滚动(推荐):<Table d… 2026/7/9 8:58:35
2026年儿童口腔运营学习排名大揭秘,谁能拔得头筹? 在儿童口腔行业蓬勃发展的当下,专业的运营学习对于口腔机构的成功至关重要。2026年已至,众多儿童口腔品牌在运营学习方面各展风采,而蓝刺猬儿童口腔凭借其独特的优势,在这场激烈的竞争中脱颖而出。一、品牌影响力与覆盖范围数据与… 2026/7/9 8:56:30
画情人节插画总拖慢进度?收藏 6 个素材站高效创作 每次着手绘制情人节相关插画,很容易卡在人物互动姿态、浪漫场景搭配、氛围感装饰元素构思上,反复打磨画面细节会消耗大量时间。想要快速完成完整画面,提前储备适配的创作参考十分关键。整理 6 个内容丰富的素材站点,覆盖多种绘画风… 2026/7/9 8:52:27
机器视觉与PLC集成:轮毂缺陷检测与字符识别误差控制在0.2mm内 机器视觉与PLC集成:轮毂缺陷检测与字符识别误差控制在0.2mm内的技术实现轮毂作为汽车关键零部件,其表面质量直接影响行车安全与美观。传统人工检测效率低且易漏检,而采用机器视觉与PLC集成方案可实现微米级精度检测。本文将深入解析高精度视觉… 2026/7/9 0:01:04
GBase 8a vs MySQL 8.0:ALTER TABLE语法与限制的5点关键差异对比 GBase 8a与MySQL 8.0:ALTER TABLE语法差异深度解析与实战指南1. 两种数据库的ALTER TABLE能力全景对比在数据库架构设计和运维过程中,表结构变更(DDL操作)是不可避免的需求。GBase 8a作为国产分析型数据库代表,与开源M… 2026/7/9 0:03:06
【大数据毕业设计】基于多源旅游数据的景区热度分析与推荐系统的设计与实现 基于 Django 的旅游偏好挖掘与景区推荐系统(源码+文档+远程调试,全bao定制等) 博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am… 2026/7/9 0:05:09
6个月转型AI工程师:实战路径与核心技能 1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公… 2026/7/7 11:26:57
TPAFE0808与PIC18F87K22的多通道信号采集方案 1. 项目背景与核心需求在工业自动化、医疗设备和科研仪器等领域,多通道信号采集与系统监测是基础且关键的技术需求。传统方案往往面临通道数量不足、信号调理复杂、系统集成度低等问题。TPAFE0808作为一款8通道模拟前端芯片,与PIC18F87K22微控制器的组合… 2026/7/8 20:15:17
STC3115与PIC18LF26K80构建高精度电池管理系统 1. STC3115与PIC18LF26K80在电池管理系统中的核心价值在现代电子设备中,电池管理系统(BMS)的重要性不亚于设备的核心处理器。STC3115作为一款高精度电池电量监测IC,与PIC18LF26K80微控制器的组合,构成了一个既能精确监控又能智能管理的完整解… 2026/7/8 14:25:08