首页 > 其他分享 >在线CAD二次开发教程-实现圆转多边形功能的方法

在线CAD二次开发教程-实现圆转多边形功能的方法

时间:2024-04-08 09:58:39浏览次数:30  
标签:多边形 getPoint mxcad num let 二次开发 圆转 CAD

前言

在线CAD SDK的集成过程中,甲方客户可能有实现圆转多边形功能的需求,作为开发者如何利用WEB CAD SDK展现此功能效果呢?本章节我们重点讲述一下。

环境搭建

1. 搭建绘图环境,创建一个mxcad项目,具体操作请参考[mxcad |快速入门]

2. 在项目中添加命令行,实现功能的动态交互功能,具体操作请参考[mxcad |命令行]

基于mxcad库实现圆转多边形功能

圆转多边形功能是根据用户输入的边数将目标圆转变成正多边形,其中转变方式分两种情况,一种是转换后的正多边形内接于目标圆,一种是转换后的正多边形外切于圆。下面我们将分别介绍如何实现这两种转换方式。

1. 内接于圆:即目标圆为多边形的外接圆,它与多边形的每个顶点都相接。因此我们可以通过在目标圆上均匀取点找到多边形的所有顶点,最后通过多段线闭合连接成多边形,如下图:

2. 外切于圆:即目标圆为多边形的内切圆,它与多边形的每条边都相切,且与多边形的中心在同一直线上。因此我们可以通过获取多边形的外切圆反向绘制多边形。根据多边形条数求得多边形的每个内角度数,再根据目标圆的半径值可求的多边形外切圆半径值:目标圆半径 / sin(90 - (360 / (num * 2))),如下图所示:

使用 mxcad 库实现完整圆转多边形功能

1. 首先选中目标对象,选择时筛选出圆对象,参考代码如下:

// 选中圆
let filter = new MxCADResbuf();
filter.AddMcDbEntityTypes("CIRCLE");
let aryId = await MxCADUtility.userSelect("选择要转成多边形的对象", filter);
if (aryId.length == 0) {
return;
}

2. 通过命令行交互让用户设置多边形边数,默认为正五边形。

let getNum = new MxCADUiPrInt();
getNum.setMessage('设置多边形边数');
let num = await getNum.go() || 5;
getNum.clearLastInputPoint()
if (!num) return;

3. 然后让用户根据需求选择内接于圆或外切于圆的圆转多边形转换方式,默认选择内接于圆方式。

const getPoint = new MxCADUiPrPoint();
getPoint.setMessage("\n输入选项")
getPoint.setKeyWords("[内接于圆(I)/外切于圆(C)]")
getPoint.clearLastInputPoint()
await getPoint.go();
let tollType = 'inside'
if (getPoint.isKeyWordPicked("i")) tollType = 'inside'
if (getPoint.isKeyWordPicked("c")) tollType = 'outside'

4. 最后根据用户输入关键字确定转换方式,绘制多边形。

let mxcad = MxCpp.getCurrentMxCAD();
    aryId.forEach(async (id) => {
        let event: any = await id.getMcDbEntity();
        let cricle = event as McDbCircle;
        let arr1: McGePoint3d[] = [];
        if (tollType === 'inside') {
            //    多边形内切圆
            for (let i = 0; i < num; i++) {
                let point = cricle.getPointAtDist(cricle.getLength().val / num * i);
                if (point.ret) arr1.push(point.val)
            }
            let pl1 = new McDbPolyline();
            arr1.forEach(i => {
                pl1.addVertexAt(i)
            })
            pl1.isClosed = true;
            mxcad.drawEntity(pl1);
        } else if (tollType === 'outside') {
            //  多边形外切圆
            /**
             * 知道三个角加一条边求其他两边
             * 一条边:r
             * 三个角 90 360/num*2
             */
            let angle = 90 - (360 / (num * 2))
            let sinValue = Math.sin(angle * Math.PI / 180); // 返回0.5
            let R = cricle.radius / sinValue;
            let r = new McDbCircle();
            r.center = cricle.center;
            r.radius = R;
            let arr2: McGePoint3d[] = [];
            for (let i = 0; i < num; i++) {
                let point = r.getPointAtDist(r.getLength().val / num * i);
                if (point.ret) arr2.push(point.val)
            }
            let pl2 = new McDbPolyline();
            arr2.forEach(i => {
                pl2.addVertexAt(i)
            })
            pl2.isClosed = true;
            mxcad.drawEntity(pl2);
        }
        event.erase()
    })

实现效果如下:

DEMO源码下载地址

https://gitee.com/mxcadx/mxdraw-article/blob/master/使用mxcad实现圆转多边功能/demo.7z

标签:多边形,getPoint,mxcad,num,let,二次开发,圆转,CAD
From: https://www.cnblogs.com/yzy0224/p/18120478

相关文章

  • 致远OA系统二次开发基础入门及资料汇总
    公司有几套致远A8,包括V7和V8。虽然一直有二次开发的需求,只是该系统的二开体验,包括社区的建设真的是一言难尽。因此公司几次改动都是直接外包给厂商来进行开发。从公司这些项目中我了解了一下他们的二开情况,怎么说呢。只能说是八仙过海各显神通。在Github上也没有找到多少关于致远......
  • 致远OA二次开发 配置开发环境及使用SDK
    此前汇总的文章里面有简单说过SDK。在开发文档内没有完整对其进行说明。其实致远OA官方的开发文档我个人觉得是很有问题的,一般来说都是从入门到深入细节。他们这个开发文档居然在介绍Springboot。由于是接触过他们官方的二开,对项目大概有点了解,此次特意聊聊他们配置开发环境与SDK......
  • java 企业工程管理系统软件源码+Spring Cloud + Spring Boot +二次开发+ MybatisPlus
    鸿鹄工程项目管理系统SpringCloud+SpringBoot+Mybatis+Vue+ElementUI+前后端分离构建工程项目管理系统项目背景一、随着公司的快速发展,企业人员和经营规模不断壮大。为了提高工程管理效率、减轻劳动强度、提高信息处理速度和准确性,公司对内部工程管理的提升提出了更高的要......
  • java 企业工程管理系统软件源码+Spring Cloud + Spring Boot +二次开发+ MybatisPlus
     鸿鹄工程项目管理系统SpringCloud+SpringBoot+Mybatis+Vue+ElementUI+前后端分离构建工程项目管理系统项目背景一、随着公司的快速发展,企业人员和经营规模不断壮大。为了提高工程管理效率、减轻劳动强度、提高信息处理速度和准确性,公司对内部工程管理的提升提出了更高的......
  • ZW3D二次开发_文件_操作用户属性
    1.什么是文件用户属性?文件用户属性是指用户保存在ZW3D文件内的自定义属性。如下图打开ZW3D文件用户属性界面可查看用户属性:2.如何使用代码操作文件用户属性?1)添加用户属性//添加用户属性 constintnumber=5; svxAttributeuserAttrs[number]={0}; strcpy......
  • ANSYSEM导入cadence文件
    ANSYSEM导入cadence文件由于新版本取消与cadence直接连接的接口,因此cadence不能导出用于ansys模拟的ANF文件,siwave也取消了cadence的导入接口,因此hfss3Dlayout的cadence接口成为ansys与cadence链接的唯一接口。在hfss3Dlayout环境下,点击file》import》cadence/SPB可......
  • 编写一款2D CAD/CAM软件(五)视图
    j-view模块目录配置:JCadincludej-viewj-view.hj-viewprjCMakeLists.txtsrcj-view.cppCMakeLists.txt存在多种计算机图形学的引擎,用于将图形绘制到显卡缓存并显示出来。有些引擎使用CPU的能力,有些则充分发挥GPU的......
  • Auto CAD
    快捷命令 L直线M移动C圆EL椭圆XL射线轴线RO旋转E删除H填充TR修剪EX延伸PO点S拉伸U返回DDI直径标注DAN角度标注OP系统选项设置A圆弧T多行文字B块定义I块插入W定义块文件CO复制MI镜像O偏移F倒直角或圆角D标注样式DLI线......
  • AutoCAD命令
    快捷命令 L直线M移动C圆EL椭圆XL射线轴线RO旋转E删除H填充TR修剪EX延伸PO点S拉伸U返回DDI直径标注DAN角度标注OP系统选项设置A圆弧T多行文字B块定义I块插入W定义块文件CO复制MI镜像O偏移F倒直角或圆角D标注样式DLI线......
  • 可以取代宝塔和Nginx的Web服务器:Caddy
    一、安装官网文章:https://caddyserver.com/docs/install我们的服务器是Ubuntu,在官网上得到下述5条命令,复制粘贴后即可安装成功:sudoaptinstall-ydebian-keyringdebian-archive-keyringapt-transport-httpscurlcurl-1sLf'https://dl.cloudsmith.io/public/caddy/stable......