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

简介: 本文介绍了如何使用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

相关文章
|
7月前
|
机器学习/深度学习 算法 定位技术
Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现裂缝的检测识别(C#代码UI界面版)
本项目基于YOLOv8模型与C#界面,结合Baumer工业相机,实现裂缝的高效检测识别。支持图像、视频及摄像头输入,具备高精度与实时性,适用于桥梁、路面、隧道等多种工业场景。
939 27
|
9月前
|
人工智能 安全 程序员
用 Colab 和 ngrok 免费部署你的 Web UI 项目,随时随地访问!
用 Colab 和 ngrok 免费部署你的 Web UI 项目,随时随地访问!
1133 12
|
10月前
|
人工智能
WEB CAD 利用AI编程实现多行文本的二次开发
本文介绍了在MxCAD插件中实现自定义编辑器实体类的功能,重点展示如何通过MxCADMText类在CAD中渲染和管理富文本。文章详细说明了注册同心圆实体文本的步骤,包括实现自定义文本类、注册自定义文本以及交互式修改参数的方法。此外,还扩展实践了粗糙度实体文本的注册与应用,涵盖构造粗糙度自定义实体文本类、注册及初始化过程,并通过示例图展示了运行效果。这些功能可帮助用户将复杂图形以文本形式插入多行文本中,提升项目设计效率。
|
9月前
|
开发者
(WEB CAD online )在线CAD实现圆孔标记功能
本文介绍了通过自定义实体 `McDbTestRoundHoleMark` 实现圆孔标记功能的方法。该功能支持多象限标记、可调节标记角度、多重标记及动态编辑,并自动计算包围盒以优化空间定位与选择操作。核心实现包括类结构定义、数据序列化、标记数据设置、夹点编辑及实体绘制等步骤。用户可通过插件初始化注册并创建圆孔标记,适用于工程图纸标注场景。在线Demo展示了实际效果,便于开发者参考与使用。
|
10月前
|
移动开发 前端开发 JavaScript
H5 页面与 Web 页面的制作方法
H5页面制作利用HTML5、CSS3和JavaScript技术,结合H5编辑器或框架(如Adobe Dreamweaver、Ionic),注重移动设备兼容性与响应式布局。Web页面制作则基于传统HTML、CSS和JavaScript,借助文本编辑器或IDE完成开发。两者区别在于技术版本、交互性和浏览器支持:H5更互动、现代,但可能不兼容旧浏览器;Web页面更静态、兼容性广。根据需求选择:高交互选H5,广泛兼容选Web。
1465 6
|
4月前
|
算法 Java Go
【GoGin】(1)上手Go Gin 基于Go语言开发的Web框架,本文介绍了各种路由的配置信息;包含各场景下请求参数的基本传入接收
gin 框架中采用的路优酷是基于httprouter做的是一个高性能的 HTTP 请求路由器,适用于 Go 语言。它的设计目标是提供高效的路由匹配和低内存占用,特别适合需要高性能和简单路由的应用场景。
419 4
|
8月前
|
缓存 JavaScript 前端开发
鸿蒙5开发宝藏案例分享---Web开发优化案例分享
本文深入解读鸿蒙官方文档中的 `ArkWeb` 性能优化技巧,从预启动进程到预渲染,涵盖预下载、预连接、预取POST等八大优化策略。通过代码示例详解如何提升Web页面加载速度,助你打造流畅的HarmonyOS应用体验。内容实用,按需选用,让H5页面快到飞起!
|
8月前
|
JavaScript 前端开发 API
鸿蒙5开发宝藏案例分享---Web加载时延优化解析
本文深入解析了鸿蒙开发中Web加载完成时延的优化技巧,结合官方案例与实际代码,助你提升性能。核心内容包括:使用DevEco Profiler和DevTools定位瓶颈、四大优化方向(资源合并、接口预取、图片懒加载、任务拆解)及高频手段总结。同时提供性能优化黄金准则,如首屏资源控制在300KB内、关键接口响应≤200ms等,帮助开发者实现丝般流畅体验。
|
前端开发 JavaScript Shell
鸿蒙5开发宝藏案例分享---Web页面内点击响应时延分析
本文为鸿蒙开发者整理了Web性能优化的实战案例解析,结合官方文档深度扩展。内容涵盖点击响应时延核心指标(≤100ms)、性能分析工具链(如DevTools时间线、ArkUI Trace抓取)以及高频优化场景,包括递归函数优化、网络请求阻塞解决方案和setTimeout滥用问题等。同时提供进阶技巧,如首帧加速、透明动画陷阱规避及Web组件初始化加速,并通过优化前后Trace对比展示成果。最后总结了快速定位问题的方法与开发建议,助力开发者提升Web应用性能。