首页 > 其他分享 >网页CAD二次开发(WEB CAD SDK)实现单行和多行文字的绘制

网页CAD二次开发(WEB CAD SDK)实现单行和多行文字的绘制

时间:2023-10-16 10:35:55浏览次数:57  
标签:文字 WEB const mxcad ent 二次开发 绘制 CAD

前言

今天讲一下如何利用WEB CAD SDK来绘制单行文字和多行文字,在使用mxcad绘制文字之前请先按照mxcad文档,将cad图纸在网页上渲染出来, 如果没有阅读mxcad文档可能无法理解后续代码。

在线CAD功能测试:https://demo.mxdraw3d.com:3000/mxcad/  

 

绘制文字和多行文字

单行文字代码如下:

import { McDbMText, McDbText, MxCADResbuf, MxCADSelectionSet, MxCADUiPrPoint, createMxCad } from "mxcad"

 

window.onload = async () => {

    const mode = "SharedArrayBuffer" in window ? "2d" : "2d-st"

    const mxcad = await createMxCad({

        canvas: "#myCanvas",

        locateFile: (fileName) => {

            return new URL(`/node_modules/mxcad/dist/wasm/${mode}/${fileName}`, import.meta.url).href

        },

        fileUrl: new URL("../public/test2.mxweb", import.meta.url).href,

        fontspath: new URL("../node_modules/mxcad/dist/fonts", import.meta.url).href,

    })

 

    const getPoint = new MxCADUiPrPoint()

    const point = await getPoint.go()

    if(point) {

        const text = prompt("输入文字")

        if (text) {

            const isNewLine = /\n/.test(text)

            if (isNewLine) {

                mxcad.drawMText(point.x, point.y, text.replace(/\n/g, "\\P"), 10000, 0, 0, 1)

            } else {

                mxcad.drawText(point.x, point.y, text, 10000, 0, 0, 1)

            }

        }

    }

  

    alert("开始编辑文字")

    getPoint.clearLastInputPoint()

    const point1 = await getPoint.go()

    if(point1) {

        const filter = new MxCADResbuf()

        filter.AddMcDbEntityTypes("TEXT,MTEXT")

        const select = new MxCADSelectionSet()

        const objId = select.item(select.pointSelect(point1.x, point1.y, filter))

        const ent = objId.getMcDbEntity()

        let txt:string | undefined;

        if(ent instanceof McDbText){

            txt = (ent as McDbText).textString;

        }

        else if(ent instanceof McDbMText){

            txt = (ent as McDbMText).contents;

        }

 

        if(!txt) return;

        const text = prompt("编辑文字 原文本: " + txt)

        if(!text) return

        if(ent instanceof McDbText){

            (ent as McDbText).textString = text;

          }

          else if(ent instanceof McDbMText){

            (ent as McDbMText).contents = text.replace(/\n/g, "\\P");

          }

    }

}

 

梳理一下绘制编辑文字思路

我们必须要创建一个mxcad的控制来显示图纸,其中变量mxcad是通过createMxCad
得到的实例控件,具体的参数配置和详细的注意事项请参考mxcad入门文档

要绘制文字首先需要获取鼠标的点击, 得到一个CAD坐标, 有了坐标就知道这个文字绘制在什么位置了,这里使用mxcad提供的 MxCADUiPrPoint类用于获取鼠标点击, 得到对应的CAD坐标。

然后用浏览器提供的默认输入弹框prompt弹出了一个输入框,可以通过它来得到文字。你也可以通过其他方式实现这样的一个功能。

注意:

mxcad.drawText是绘制单行文字的方法。

mxcad.drawMText是绘制多行文的方法。

多行文字换行的话,需要将\n 换成\P,所以多行文字中出现\P 就会自动换行。

注释:按照AutoCAD多行文字换行的规则,如果要输入“\P”字符串,就换成“\\P”输入

而如果是单行文字存在换行\n会被显示成63, 你可能需要将换行符\n替换成""空字符串来解决这个问题。

以上是绘制文字的实现说明,发现不会的API函数可以前往mxcad文档搜索对应的关键词。

关于编辑文字的实现说明

首先要在一张CAD图纸中编辑文字, 我们和绘制文字一样,需要鼠标点击这个文字得到它的坐标位置。其中getPoint.clearLastInputPoint表示的是清空上一个输入点,因为那是绘制文字的输入点,我们现在并不需要。

然后我们需要筛选,看看点击的是不是文字,我们可以通过mxcad提供的MxCADResbuf类的实例方法AddMcDbEntityTypes来添加CAD中的类型标识,文字的类型标识就是TEXT和多行文字MTEXT 按照规则用 ,隔开。

然后我们就可以在CAD图纸中选择需要的文字了。

在mxcad中提供了MxCADSelectionSet类来实现选择图形对象相关的功能。我们这里选择用MxCADSelectionSet.pointSelectCAD坐标点的方式选择我们的文字,加上我们的筛选条件MxCADResbuf的实例, 就可以得到一个索引。

我们通过MxCADSelectionSet.item得到具体的图形对象实例。

我们可以通区分不同的构造类 来区分不同的图形对象实例,比如McDbTextMcDbMText类就是单行文字和多行文字的构造类。

最后我们还是用prompt得到一个新的输入, 将新输入的文字内容赋值给文字对象就完成了文字的编辑。

效果如下图: 

 

最后复制源文本然后补充了\P666

 

演示demo源码:
https://gitee.com/mxcadx/mxdraw-article/blob/master/实现绘制文字/demo.zip

 

标签:文字,WEB,const,mxcad,ent,二次开发,绘制,CAD
From: https://www.cnblogs.com/yzy0224/p/17766812.html

相关文章

  • web前端html+css页面内容的六种隐藏方式
    一、使用透明度语法:opacity:0注意:元素消失,但是还会占据空间,只是视觉看不出来<style>.box{width:100px;height:100px;background-color:aquamarine;opacity:0;}</style><divclass="box"></div> 二、使用display语法:display:none注意:元素消失,不会占据空间<style......
  • 别再吹捧什么区块链,元宇宙,Web3了,真正具有颠覆性的估计只有AI
    「感谢你阅读本文!」别再吹捧什么区块链,元宇宙,Web3了,真正具有颠覆性的估计只有AI。我们这个社会有这样一个特性,就是出现一个新事物,新概念,新技术,先不管是否真的现实,是否真的了解,第一件事首先要做的就是先圈一波钱,不过繁华终将逝去,经得起推荐者才能长存。区块链自从2008年比特币......
  • WINCC 7.5 SP2做web发布练习
    这一片学习笔记我在新浪博客记录过,在这里再次记录一遍,新浪博客地址是WINCC7.5SP2做web发布练习_来自金沙江的小鱼_新浪博客(sina.com.cn)欢迎大家去那边。 有段时间没有弄这个了,最近现场需要用到,这里做一下练习,记录一下。在WINCC7.5SP2做一个项目,运行效果如下打开控制面......
  • WINCC 7.5 SP2 web发布练习-续:不同账户打开不同的页面
    这一篇学习笔记我在新浪博客记录过,地址是WINCC7.5SP2web发布练习-续:不同账户打开不同的页面_来自金沙江的小鱼_新浪博客(sina.com.cn)我在这里再记录一遍在上午练习基础上,WINCC项目程序新增一个页面trend2。在Webnavigator处鼠标右键,选择web浏览发布器,使用向导将新的页面发布......
  • WINCC V7.5 SP2 webnavigator server无法安装的解决-操作系统版本很重要
    这一篇学习笔记我在新浪博客记录过,地址是 WINCCV7.5SP2webnavigatorserver无法安装的解决-操作系统版本很重要_来自金沙江的小鱼_新浪博客(sina.com.cn)在这里再次记录一遍。昨天在办公室计算机上的虚拟机安装windows101903专业版,然后安装WINCC7.5SP2,想安装webnavigator......
  • C# AVEVA MARINE 二次开发 读取分段
    快速读取和筛选分段元素[MyAmFunctionAtt(nameof(测试功能),nameof(读取分段))]publicvoid读取分段(WindowManagerwm){try{foreach(variteminwm.Windows){if(ite......
  • Android WebView获取html源码
    通过执行js语句来获取valcode="""document.documentElement.outerHTML""".trimIndent()webview.evaluateJavascript(code){value->valhtmlContent=if(value==null){""}else{//这里需要处理下......
  • JavaWeb-初识Servlet
    目录1.Servlet简介2.Tomcat安装配置3.Servlet项目搭建4.Servlet项目运行内容Servlet简介Servlet是什么JavaServlet是运行在Web服务器或应用服务器上的程序,它是作为来自Web浏览器或其他HTTP客户端的请求和HTTP服务器上的数据库或应用程序之间的中间层。使......
  • OpenCascade 开源的三维建模几何造型开发平台
    官方文档 https://dev.opencascade.org/doc/overview/html/index.htmlOpenCASCADE(简称OCC)平台是由法国MatraDatavision公司开发的CAD/CAE/CAM软件平台,可以说是世界上最重要的几何造型基础软件平台之一。OpenCASCADE是一套开放原始码的CAD/CAM/CAE几何模型核心,源自于法国......
  • 记录Orcad中报错和解决方法
    本章目的:使用Orcad画原理图总会遇到奇怪的报错,故整理总结 1、根本原因:有元器件没有编号;更新一下位号解决。提示➤ERROR(ORNET-1048):Designisnotannotated.ERROR(ORNET-1006): Netlist failed or may be unusable. 2、根本原因:DesignCache右键CleanupCache,和......