WEB CAD插件通过上下文对象MxPluginContext修改UI界面的方法

本文涉及的产品
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
云原生网关 MSE Higress,422元/月
可观测监控 Prometheus 版,每月50GB免费额度
简介: 本文介绍了如何使用MxPluginContext动态控制MxCAD项目的UI界面。通过该上下文对象,开发者可以灵活设置UI配置,如控制操作栏显隐、编辑按钮、添加侧边栏等。具体方法包括调用`getUiConfig()`获取并修改`mxUiConfig.json`中的属性,实现界面的定制化。此外,还提供了控制命令行聚焦的功能,解决输入框焦点锁定问题。详细代码示例和效果对比图展示了具体实现步骤,帮助开发者更好地适配项目需求。

前言

在之前的文章中,我们已经提到过如何通过手动修改配置文件的方式去设置云图开发包内MxCAD项目中的UI配置。如有不清楚的地方查看[网页CAD二次开发修改UI配置的方法]。

正式开发过程中可能会根据不同的权限设置不同的UI界面显示,或者在MxCAD中添加不同的按钮等,因此我们在MxCAD项目中提供了一个上下文对象MxPluginContext,利用该对象内部导出的属性和方法,可以直接通过代码去设置项目的UI界面显示。下面我们讲详细介绍如何使用MxPluginContext实现动态控制MxCAD的UI界面,以及如何通过该上下文对象更好的适配我们的项目。

动态控制UI界面

在MxCAD项目的 MxPluginContext 对象中,我们提供了一个getUiConfig()方法。调用该方法我们能获取到在MxDrawCloudServer\SRC\sample\Edit\2d\dist目录下的mxUiConfig.json配置文件里的json对象,通过修改该对象内的属性值达到修改界面UI的目的。

1.控制界面操作栏显隐

   // MxCAD创建成功时,相当于mxcad.on("init_mxcad")事件监听
   MxFun.on("mxcadApplicationCreatedMxCADObject", (param) => {
   
       let mxcad: McObject = param.mxcad;
       // 通过上下文获取UI配置对象
       // uiConfig对象值可参考`mxUiConfig.json`文件
       MxPluginContext.getUiConfig().then((uiConfig)=>{
   
           uiConfig.isShowHeader = false;//不显示头部
           uiConfig.isShowFooter = false;//不显示底部
           uiConfig.mLeftButtonBarData.isShow = false;//不显示左选择栏
           uiConfig.mRightButtonBarData.isShow = false;//不显示右选择栏
           uiConfig.isShowModelNav = false;//不显示底部状态栏
       })
   })

运行效果比对:
1)修改前:
image-20250214135508459.png
2)修改后:
image-20250214135559917.png

2.编辑界面操作栏按钮

// MxCAD创建成功时,相当于mxcad.on("init_mxcad")事件监听
   MxFun.on("mxcadApplicationCreatedMxCADObject", (param) => {
   
       let mxcad: McObject = param.mxcad;
       // 通过上下文获取UI配置对象
       // uiConfig对象值可参考`mxUiConfig.json`文件
       MxPluginContext.getUiConfig().then((uiConfig)=>{
     
           // 向顶部操作栏添加按钮
           uiConfig.mTopButtonBarData.push({
   
               icon:'icon-test',
               prompt: "测试按钮",
               cmd: "Mx_test"
            })
            // 修改顶部菜单栏数据  
            const includeTabArr:string[] = ['文件(F)','视图(V)','标注(U)','批注(T)','帮助(H)']
            // 从原始菜单栏数据中筛选出符合条件的数据
            const newList = uiConfig.mMenuBarData.filter(item=>includeTabArr.includes(item.tab));
           // 为顶部菜单栏重新赋值
            uiConfig.mMenuBarData.length = 0;
            uiConfig.mMenuBarData.push(...newList)
       })
   })

运行效果如下:
image-20250214153705380.png
在自定义向工具栏添加按钮的时候,会涉及在项目中添加我们自己设置的图标样式,其设置方法如下:
1)在[iconfont图标库]中添加自己的目标对象,如果不清楚如何在iconfont中添加自己图标的,可在官网寻找相关的文档。
image-20250214143557544.png
image-20250214150254616.png
2)在MxCAD项目中创建一个js文件,下面示例将在MxDrawCloudServer\SRC\sample\Edit\2d\MxCAD\src\icon 目录下添加一个test.js文件,将上面在iconfont官网链接里复制出来的数据粘贴到test.js中。
image-20250214150527107.png
3)在MxCAD项目中的 index.ts 文件中引入上面的图标文件,实现在项目启动时可以直接加载图标信息。
image-20250214150853399.png
4)替换加载新图标
image-20250214151059632.png
5)效果演示如下:
image-20250214153024085.png
image-20250214152942516.png

3.添加侧边栏
在MxCAD项目开发过程中我们经常会遇到需要设置多种侧边栏的情况,因此,在MxPluginContext 对象中我们提供了添加左右侧边栏的设置,具体设置方法可参考下面的示例:

1)在MxCAD项目中新建一个 test 文件夹来专门编写新增侧边连相关的文件。

2)在test文件夹下新建一个 useComponent.ts 文件,用户可在该文件下存储控制侧边栏显隐的变量,或者侧边栏内部相关的逻辑变量。

   // useComponent.ts
   import {
    ref } from 'vue'
   export const isShow = ref(false);

3)在test目录下新建一个 index.vue 文件,在该文件下编写侧边栏界面。

  // index.vue
   <template>
       <div v-show="isShow">
           <h4>这是一个测试组件</h4>
       </div>
   </template>
   <script setup lang="ts">
   import { isShow } from "./useComponent";
   </script>
   <style scoped></style>

4)在test文件夹下新建一个 index.ts 文件,在该文件中编写侧边栏初始化加载的相关逻辑。

   // index.ts
   import {
    defineAsyncComponent } from "vue";
   import {
    isShow } from "./useComponent";
   /**
     addDrawerComponent():创建侧边栏
     "Test_Component":设置侧边栏的名字
    */
   MxPluginContext.addDrawerComponent("Test_Component", {
   
     isShow: isShow,// 控制侧边栏显隐的ref变量
     component: defineAsyncComponent(() => import("./index.vue")),//加载侧边栏组件内容
     width: 600,//设置侧边栏宽度
     title: "测试左弹窗",//设置侧边栏标题
     cmd: [
       {
   
         cmd: "Mx_Test",// 控制侧边栏所执行的命令名
         call: async () => {
   
           isShow.value = !isShow.value;
         },// 命令回调
       },
     ],
   });
   // 通过 MxPluginContext 对象在项目中添加上面创建的侧边栏对象
   MxPluginContext.getUiConfig().then((config) => {
   
     if (!config?.leftDrawerComponents?.includes("Test_Component")) {
   
       config?.leftDrawerComponents?.push("Test_Component");
     }
   });

5)最后在MxCAD项目下的index.ts中引入test目录下的index.ts文件使MxCAD项目在初始化的时候能够加载新创建的侧边栏。
image-20250214161049561.png
6)最后执行"Mx_test"命令查看运行效果:
image-20250214161218567.png

控制命令行聚焦

MxCAD项目在二开过程中,如果在界面设置输入框会出现无论怎么操作,光标始终聚焦在命令行的输入上,无法正确定位在目标输入框的位置。这是由于MxCAD项目内部做了焦点锁定,界面的光标聚焦后始终控制在命令行内。因此,为了解决这个问题,我们在上下文对象中提供了可手动控制是否启用交点锁定的功能,代码如下:

/**
 setCommandFocus:设置是否自动聚焦
 isCommandFocus:获取当前是否处于聚焦状态
 */
const {
    setCommandFocus, isCommandFocus } = MxPluginContext.useFocus();
console.log('当前是否自动聚焦到命令行', isCommandFocus.value);
 <textarea rows="20" cols="50" @focus="()=>setCommandFocus(false)" @blur="
 ()=>setCommandFocus(true)"> {
  { textContent }}</textarea>

扩展

更多MxCAD项目扩展插件开发,可点击[扩展插件的开发]查看开发文档中的介绍。
image-20250215100914186.png

相关文章
|
4月前
|
机器学习/深度学习 算法 定位技术
Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现裂缝的检测识别(C#代码UI界面版)
本项目基于YOLOv8模型与C#界面,结合Baumer工业相机,实现裂缝的高效检测识别。支持图像、视频及摄像头输入,具备高精度与实时性,适用于桥梁、路面、隧道等多种工业场景。
458 27
|
6月前
|
开发者
(WEB CAD online )在线CAD实现圆孔标记功能
本文介绍了通过自定义实体 `McDbTestRoundHoleMark` 实现圆孔标记功能的方法。该功能支持多象限标记、可调节标记角度、多重标记及动态编辑,并自动计算包围盒以优化空间定位与选择操作。核心实现包括类结构定义、数据序列化、标记数据设置、夹点编辑及实体绘制等步骤。用户可通过插件初始化注册并创建圆孔标记,适用于工程图纸标注场景。在线Demo展示了实际效果,便于开发者参考与使用。
|
7月前
|
人工智能
WEB CAD 利用AI编程实现多行文本的二次开发
本文介绍了在MxCAD插件中实现自定义编辑器实体类的功能,重点展示如何通过MxCADMText类在CAD中渲染和管理富文本。文章详细说明了注册同心圆实体文本的步骤,包括实现自定义文本类、注册自定义文本以及交互式修改参数的方法。此外,还扩展实践了粗糙度实体文本的注册与应用,涵盖构造粗糙度自定义实体文本类、注册及初始化过程,并通过示例图展示了运行效果。这些功能可帮助用户将复杂图形以文本形式插入多行文本中,提升项目设计效率。
|
9月前
|
存储 人工智能 编译器
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
421 10
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
|
9月前
|
人工智能 JavaScript 关系型数据库
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
299 14
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
|
8月前
|
运维 网络安全 文件存储
找不到类似 Docker Desktop 的 Web 管理界面?试试这些开源方案
Docker Desktop 是本地容器化开发的利器,但存在无法通过 Web 远程管理、跨平台体验不一致等问题。为此,推荐几款轻量级、可 Web 化管理的 Docker 工具:Portainer 功能全面,适合企业级运维;CasaOS 集成应用商店和 NAS 功能,适合家庭/个人开发环境;Websoft9 提供预集成环境,新手友好。这些工具能有效提升容器管理效率,满足不同场景需求。
407 3
|
11月前
|
移动开发 前端开发 Java
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
JavaFX是Java的下一代图形用户界面工具包。JavaFX是一组图形和媒体API,我们可以用它们来创建和部署富客户端应用程序。 JavaFX允许开发人员快速构建丰富的跨平台应用程序,允许开发人员在单个编程接口中组合图形,动画和UI控件。本文详细介绍了JavaFx的常见用法,相信读完本教程你一定有所收获!
9761 5
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
|
30天前
|
算法 Java Go
【GoGin】(1)上手Go Gin 基于Go语言开发的Web框架,本文介绍了各种路由的配置信息;包含各场景下请求参数的基本传入接收
gin 框架中采用的路优酷是基于httprouter做的是一个高性能的 HTTP 请求路由器,适用于 Go 语言。它的设计目标是提供高效的路由匹配和低内存占用,特别适合需要高性能和简单路由的应用场景。
150 4
|
5月前
|
缓存 JavaScript 前端开发
鸿蒙5开发宝藏案例分享---Web开发优化案例分享
本文深入解读鸿蒙官方文档中的 `ArkWeb` 性能优化技巧,从预启动进程到预渲染,涵盖预下载、预连接、预取POST等八大优化策略。通过代码示例详解如何提升Web页面加载速度,助你打造流畅的HarmonyOS应用体验。内容实用,按需选用,让H5页面快到飞起!
|
5月前
|
JavaScript 前端开发 API
鸿蒙5开发宝藏案例分享---Web加载时延优化解析
本文深入解析了鸿蒙开发中Web加载完成时延的优化技巧,结合官方案例与实际代码,助你提升性能。核心内容包括:使用DevEco Profiler和DevTools定位瓶颈、四大优化方向(资源合并、接口预取、图片懒加载、任务拆解)及高频手段总结。同时提供性能优化黄金准则,如首屏资源控制在300KB内、关键接口响应≤200ms等,帮助开发者实现丝般流畅体验。