Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >(网页系统集成DWG编辑功能)通过上下文对象MxPluginContext修改UI界面

(网页系统集成DWG编辑功能)通过上下文对象MxPluginContext修改UI界面

原创
作者头像
梦想云图网页CAD
发布于 2025-02-25 02:41:04
发布于 2025-02-25 02:41:04
2250
举报
文章被收录于专栏:网页CAD网页CAD

前言

在之前的文章中,我们已经提到过如何通过手动修改配置文件的方式去设置云图开发包内 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. 控制界面操作栏显隐

代码语言:txt
AI代码解释
复制
   // 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)修改前:

2)修改后:

2. 编辑界面操作栏按钮

代码语言:txt
AI代码解释
复制
// 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)
       })
   })

运行效果如下:

在自定义向工具栏添加按钮的时候,会涉及在项目中添加我们自己设置的图标样式,其设置方法如下:

1)在[iconfont图标库]中添加自己的目标对象,如果不清楚如何在iconfont中添加自己图标的,可在官网寻找相关的文档。

2)在MxCAD项目中创建一个js文件,下面示例将在`MxDrawCloudServer\SRC\sample\Edit\2d\MxCAD\src\icon` 目录下添加一个 `test.js` 文件,将上面在iconfont官网链接里复制出来的数据粘贴到test.js中。

3)在MxCAD项目中的 index.ts 文件中引入上面的图标文件,实现在项目启动时可以直接加载图标信息。

4)替换加载新图标

5)效果演示如下:

3.添加侧边栏

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

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

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

代码语言:txt
AI代码解释
复制
   // useComponent.ts
   import { ref } from 'vue'
   export const isShow = ref(false);

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

代码语言:txt
AI代码解释
复制
  // 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 文件,在该文件中编写侧边栏初始化加载的相关逻辑。

代码语言:txt
AI代码解释
复制
   // 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项目在初始化的时候能够加载新创建的侧边栏。

6)最后执行"Mx_test"命令查看运行效果:

控制命令行聚焦

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

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

扩展

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【vite+vue3+Ts+element-plus】肩并肩带你写后台管理之主页面开发(侧边栏菜单生成、标签栏开发)
页面比较简单,主要分为左侧的菜单栏,顶部的导航栏(折叠左侧菜单,切换暗黑模式,员工账号名,退出登录),再下面的标签栏,之后就是主页面显示区域。
十里青山
2023/04/28
5K0
【vite+vue3+Ts+element-plus】肩并肩带你写后台管理之主页面开发(侧边栏菜单生成、标签栏开发)
deepseek+vue3.5+arco+markdown网页版流式AI聊天问答
半个月之前有发布一篇vite6+deepseek+vant4构建mobile版智能ai对话助手。
andy2018
2025/03/28
1.8K7
deepseek+vue3.5+arco+markdown网页版流式AI聊天问答
vue-next-admin后台管理系统
/@/utils/other.ts, main.ts中引入import other from ‘/@/utils/other’; 添加了ele前缀,防止图标冲突,el前缀已经被使用,可以使用el-xxx。但是不建议以el svg前缀,因为会与element plus内置组件冲突
酒楼
2023/06/09
2.9K0
《vue3+ts+element-plus 后台管理系统系列三》之路由侧边栏
本项目侧边栏和路由是绑定在一起的,所以你只有在 @/router/index.js 下面配置对应的路由,侧边栏就能动态的生成了。大大减轻了手动重复编辑侧边栏的工作量。当然这样就需要在配置路由的时候遵循一些约定的规则。
星宇大前端
2021/02/22
4.9K0
《vue3+ts+element-plus 后台管理系统系列三》之路由侧边栏
(网页三维CAD)二维CAD图转三维的实现方法
网页CAD中经常有这样的需求:将二维的CAD图纸通过转换为三维的形状(如将平面二维的图形向上拉伸一定的高度),进而进行三维展示的效果,本文以将平面二维的图形向上拉伸一定的高度为例,实现二维CAD图形转三维图形。
梦想云图网页CAD
2024/08/16
2020
(网页三维CAD)二维CAD图转三维的实现方法
不负青春,砥砺前行,VueAdminWork—2.0与您继续同行,众多实用功能等您而来
hello~各们小伙伴们大家好,好长时间没有和大家见面了,最近也是一直忙着进行各版本的更新迭代,加上工作比较忙,所以最近一段时间没有及时更新文章,还请大家多多理解。
用户9078190
2022/10/28
1K0
不负青春,砥砺前行,VueAdminWork—2.0与您继续同行,众多实用功能等您而来
前端实战:electron+vue3+ts开发桌面端便签应用
具体实现过程, 内容很长, 建议先点赞收藏, 再一步步学习, 接下来会就该项目的每一个重点细节做详细的分析.
徐小夕
2021/09/03
3.8K0
前端实战:electron+vue3+ts开发桌面端便签应用
Vue-Element-Admin使用
本篇为Vue-element-admin开源框架的使用,用于使用该框架的一些方法和注意点
摸鱼的G
2024/01/25
1.6K0
Vue-Element-Admin使用
Vue:如何实现自定义插件?附示例源码。
像惯常使用过的 axios、vue-router、vuex、element-ui、vant 等,这些都是插件。插件可以视为从外部引入的,封装好的,功能较为完备的功能性组件库。
LIYI
2019/12/03
1.6K0
vue+web端聊天室|网页端vue聊天系统
使用了Vue2.5.6+Vuex+vue-router+vue-gemini-scrollbar+swiper+elementUI等技术开发,实现了发送消息、表情(动图),图片、视频预览,仿微信右键菜单、截图可直接粘贴至编辑框发送。
andy2018
2019/05/01
12.1K1
vue+web端聊天室|网页端vue聊天系统
【vite+vue3+Ts+element-plus】肩并肩带你写后台管理之登录流程与权限管理
基础部分讲完了,这一章开始就不会再讲那么详细了,因为代码量很多,一点一点写估计要写好久,也没人愿意看,所以只挑重点讲。
十里青山
2023/04/28
4.4K1
【vite+vue3+Ts+element-plus】肩并肩带你写后台管理之登录流程与权限管理
(在线预览CAD图纸)在线CAD调用内部弹框的方法
在 MxCAD APP 二次开发的过程中,为了沿用项目内部的样式保持项目的统一性,我们提供了调用项目内部弹框的接口。用户可根据自己的具体需求按照下面文档介绍的步骤来操作调用项目内部的弹框。
梦想云图网页CAD
2025/03/08
2810
(在线预览CAD图纸)在线CAD调用内部弹框的方法
电商后台管理系统主页布局[通俗易懂]
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/143016.html原文链接:https://javaforall.cn
全栈程序员站长
2022/08/31
1.6K0
电商后台管理系统主页布局[通俗易懂]
如何充分利用Composition API对Vue3项目进行代码抽离
在2020年,Vue3的学习一直被我鸽到了11月份,在学完以后,我自己做了一个Vue3的小项目nav-url,也整理了我对于如何快速上手Vue3的几篇博客,很高兴受到了大家的指点和喜欢:
@零一
2021/01/29
1.9K1
如何充分利用Composition API对Vue3项目进行代码抽离
02.前后端分离中台框架前端 admin.ui.plus 学习-介绍与简单使用
安装好nodejs18+,vscode,执行 npm i && npm run dev 运行即可 启动地址:http://localhost:8100 默认会跳转到登录页,账号密码 admin 111111 会自动赋值 后台 ZhonTai.Host 接口运行起来,登录无阻碍
易墨
2023/08/24
4450
02.前后端分离中台框架前端 admin.ui.plus 学习-介绍与简单使用
秒建炫酷的开源项目文档,这款神器用起来够优雅!
vuepress-theme-hope是一个具有强大功能的VuePress主题,为Markdown添加了更多增强语法,可用于搭建项目文档和博客网站。支持分类和标签功能,可以让你的文档更加结构化!内置多种插件,功能强大,值得一试!
macrozheng
2022/04/12
7350
秒建炫酷的开源项目文档,这款神器用起来够优雅!
【Vue H5项目实战】从0到1的自助点餐系统—— 项目页面布局(Vue3.2 + Vite + TS + Vant + Pinia + Nodejs + Mo
今日推荐:机器学习模型从理论到实战|【007-K均值聚类(K-Means)】新闻主题分类
中杯可乐多加冰
2024/12/03
3830
VisualDrag低代码拖拽模板
因此得研究实现一个拖拽生成低代码平台,通过查询了各种资料,找到了以下比较合适的开源的低代码平台:
不愿意做鱼的小鲸鱼
2022/11/22
1.8K0
VisualDrag低代码拖拽模板
搭建后台管理系统的思路
搭建后台管理系统最基础的是什么呢?个人的体会是整体的基础框架,这个是指最基础的框架,比如根 router-view, 侧边栏以及侧边栏的router-view,以及顶部栏,等基础布局的控制。
公众号---人生代码
2021/05/08
3.1K0
VUE Cookbook 系列:实现可配置组合表单
本案例将会讲解如何使用 vue.js + ElementUI 开发一个简单的 可配置组合表单 Demo。
IMWeb前端团队
2019/12/03
1K0
推荐阅读
相关推荐
【vite+vue3+Ts+element-plus】肩并肩带你写后台管理之主页面开发(侧边栏菜单生成、标签栏开发)
更多 >
领券
一站式MCP教程库,解锁AI应用新玩法
涵盖代码开发、场景应用、自动测试全流程,助你从零构建专属AI助手
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档