返回介绍

指南

MxCAD API 文档

12. 图块

发布于 2024-07-31 21:40:00 字数 6925 浏览 0 评论 0 收藏 0

图块

我们可以通过实例化 McDbBlockReference() 对象创建图块。图块就是多个图形集合成的一个对象,可以作为一个整体进行移动、复制或多次在图形中插入。在 mxcad 中可结合 McDbBlockTableRecord() 图块记录对象自定义创建图块,通过设置图块的基点 origin 、添加图块记录 appendAcDbEntity() 以及图块位置 position 等多种属性来定义图块。

点击 McDbBlockReference()McDbBlockTableRecord() 查看详细属性和方法说明。

import { MxCpp, McDbBlockTableRecord, McDbBlockReference, McDbLine, McCmColor } from "mxcad"

let mxcad = MxCpp.getCurrentMxCAD();
// 先从数据库中得到图块表
let blkTable =  mxcad.getDatabase().getBlockTable();
// 将一个新的图块记录添加到图块表中
let blkRecId = blkTable.add(new McDbBlockTableRecord());

// 根据ObjectId再次得到刚刚添加的图块记录
let blkTableRecord:McDbBlockTableRecord = blkRecId.getMcDbBlockTableRecord()

// 添加两条线段再图块记录中 这里每条线段的具体属性比如开始点和结束点自行赋值
const line = new McDbLine(80, 80, 0, -80, -80, 0)
line.trueColor = new McCmColor(255, 0, 0)
const line1 = new McDbLine(-80, 80, 0, 80, -80, 0)
blkTableRecord.appendAcDbEntity(line);
blkTableRecord.appendAcDbEntity(line1);

// 设置图块的基点 一般是包围盒内的点, 可以任意指定
blkTableRecord.origin = new McGePoint3d(0,0,0);

// 实例化块参照 这里需要设置我们刚刚添加图块记录得到的ObjectId
let blkRef = new McDbBlockReference();
blkRef.blockTableRecordId = blkRecId;
// 最后设置位置 渲染图块
blkRef.position = new McGePoint3d(0,0,0);

mxcad.drawEntity(blkRef);

:::demo

import {  McObject, McDbBlockTableRecord, McDbCircle, McDbBlockReference, McDbLine, McGePoint3d, McCmColor } from "mxcad"

export default () => {
    const mxcad = new McObject()
    mxcad.create({
      canvas: "#myCanvas",
      locateFile: (fileName: string)=> {
            // CDN 加载必须使用wasm/2d-st中的资源、因为github的限制无法使用wasm/2d 资源
            // 需要使用wasm/2d需要遵循浏览器同源策略或使用其他手段规避浏览器同源策略
            return "https://unpkg.com/mxcad/dist/wasm/2d-st/" + fileName
      },
      // 加载字体的目录位置
      fontspath: self.location.origin + "/mxcad_docs/fonts",
      // 加载转换后的图纸文件
      fileUrl: self.location.origin + "/mxcad_docs/test.mxweb",
      onOpenFileComplete: ()=>{
            // 先从数据库中得到图块表
            let blkTable =  mxcad.getDatabase().getBlockTable();
            // 将一个新的图块记录添加到图块表中
            let blkRecId = blkTable.add(new McDbBlockTableRecord());

            // 根据ObjectId再次得到刚刚添加的图块记录
            let blkTableRecord:McDbBlockTableRecord = blkRecId.getMcDbBlockTableRecord()

            // 添加两条线段再图块记录中 这里每条线段的具体属性比如开始点和结束点自行赋值
            const line = new McDbLine(50, 50, 0, -50, -50, 0)
            line.trueColor = new McCmColor(0, 255, 0)
            const line1 = new McDbLine(-50, 50, 0, 50, -50, 0)
            const circle = new McDbCircle(0, 0, 0, 50)
            circle.trueColor = new McCmColor(255,255,0)
            blkTableRecord.appendAcDbEntity(line);
            blkTableRecord.appendAcDbEntity(line1);
            blkTableRecord.appendAcDbEntity(circle);

            // 设置图块的基点 一般是包围盒内的点, 可以任意指定
            blkTableRecord.origin = new McGePoint3d(0,0,0);

            // 实例化块参照 这里需要设置我们刚刚添加图块记录得到的ObjectId
            let blkRef = new McDbBlockReference();
            blkRef.blockTableRecordId = blkRecId;
            // 最后设置位置 渲染图块
            blkRef.position = new McGePoint3d(0,0,0);

            mxcad.drawEntity(blkRef);

            mxcad.zoomAll()
            mxcad.zoomScale(0.8)
      }
    })
    return (<div style="height: 500px; overflow: hidden;"><canvas id="myCanvas" ></canvas>
    </div>)
}

:::

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文