网易首页 > 网易号 > 正文 申请入驻

在线CAD二次开发中动态交互式绘制星形的教程

0
分享至

前言

在 mxcad 中绘制星形,本质上还是绘制多段线,下面我们将介绍如何使用mxcad中的多段线去绘制一个支持自定义大小与定点数的星形,实现一个动态交互式的绘制星形功能。

在线CAD功能DEMO:(https://demo.mxdraw3d.com:3000/mxcad/)

基础准备

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

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

绘制星形

1. 首先通过 mxcad 提供的获取用户输入整数的[MxCADUiPrInt()]类来获取星形顶点数。

  • const starVert = new MxCADUiPrInt()
  • starVert.setMessage("\n请输入星形顶点数:")
  • const starNum = await starVert.go()
  • if (!starNum) return;

其命令行交互如下:



2.通过 mxcad 提供的获取用户UI交互取点的 [ MxCADUiPrPoint()]类来获取星形圆心所在点的位置。

const getCenter = new MxCADUiPrPoint()
getCenter.setMessage("\n指定星形中心点:")
const center = await getCenter.go()
if (!center) return;

3.利用 mxcad 的动态绘制功能,绘制星形的内半径与其对应的圆,使用户更直观的观察到星形所在位置,其中动态绘制的图形只是临时绘制不会保存在画布中,参考代码如下:

const getRadius1 = new MxCADUiPrPoint()
getRadius1.setMessage('\n指定星形的内半径:')
getRadius1.setUserDraw((pt, pw) => {
//通过计算两点之间的距离得到星形内半径
let radius = pt.distanceTo(center)
pw.drawMcDbEntity(new McDbCircle(center.x, center.y, center.z, radius))
pw.drawMcDbEntity(new McDbLine(center, pt))
const pt1 = await getRadius1.go()
if (!pt1) return;

其动态显示效果如下:



若想了解更详细的动态绘制内容,请参考 [mxcad | 动态绘制]。

4.获取星形的外半径,根据上述操作中获取的星形顶点数,在内外半径所在圆上交错取点,获取到目标星形的所有端点,然后通过实例化一个 [McDbPolyline()]多义线绘制星形,在该过程中用户能够动态调整星形的大小,确定星形大小后,调用 mxcad 的 [drawEntity()]方法在图纸上绘制最终的目标星形,参考代码如下:

// 获取内半径
const radius1 = pt1.distanceTo(center)
const circle1 = new McDbCircle(center.x, center.y, center.z, radius1)
// 定义存放星形端点的数组
let pointsArr: McGePoint3d[] = []
const getRadius2 = new MxCADUiPrPoint()
getRadius2.setMessage('\n指定星形的外半径:')
// 动态绘制星形
getRadius2.setUserDraw((pt, pw) => {
let circle2 = new McDbCircle(center.x, center.y, center.z, pt.distanceTo(center));
// 获取两个半径所在圆的曲线长
let length1 = circle1.getLength();
let length2 = circle2.getLength();
if (!length1 || !length2) return;
let pointArr: McGePoint3d[] = [];
// 根据星形顶点数在两个圆上交错取点,得到星形的所有端点
for (let i = 0; i < starNum * 2; i++) {
let point1 = circle1.getPointAtDist(length1.val / (starNum * 2) * i);
if (!point1.ret) return
let point2 = circle2.getPointAtDist(length2.val / (starNum * 2) * i);
if (!point2.ret) return
if (i % 2 === 0) {
pointArr.push(point1.val)
} else {
pointArr.push(point2.val)
// 实例化多义线,连接星形所有端点绘制闭合曲线
let pl = new McDbPolyline();
pointArr.forEach(pt => {
pl.addVertexAt(pt)
pl.isClosed = true
pw.drawMcDbEntity(pl)
// 存储星形端点
pointsArr = [...pointArr]
const pt2 = await getRadius2.go()
if (!pt2) return;
let mxcad = MxCpp.App.getCurrentMxCAD();
let pl = new McDbPolyline();
pointsArr.forEach(pt => {
pl.addVertexAt(pt)
pl.isClosed = true;
mxcad.drawEntity(pl)

其绘制效果如下:



5. 最终绘制的目标星形效果如下:



除了上述绘制星形的方法外,还可以根据 [mxcad 官方文档]结合 [mxcad API]自行实现其他绘制星形的方法。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
深夜突发王炸利好,比降印花税还要劲爆!A股周一或一柱擎天

深夜突发王炸利好,比降印花税还要劲爆!A股周一或一柱擎天

奔走的股市
2024-04-28 13:37:12
多位网友反映连接高铁WiFi时弹出“X你妈”,12306:确系官方授权APP

多位网友反映连接高铁WiFi时弹出“X你妈”,12306:确系官方授权APP

极目新闻
2024-04-28 17:34:27
周鸿祎突发疾病,曾喝陌生女子递来的水,2个手指3锥子扎不出血来

周鸿祎突发疾病,曾喝陌生女子递来的水,2个手指3锥子扎不出血来

汉史趣闻
2024-04-27 22:24:26
“新冠疫苗之父”被捕,很多人吓坏了

“新冠疫苗之父”被捕,很多人吓坏了

燕梳楼2021
2024-04-28 13:13:25
热搜第一!鸡被砸死、美女隆起大包…广州龙卷风已致5死33伤

热搜第一!鸡被砸死、美女隆起大包…广州龙卷风已致5死33伤

魔都囡
2024-04-28 01:55:27
330天研发疫苗盈利7000亿!杨晓明被查:打3针北京生物者说感恩

330天研发疫苗盈利7000亿!杨晓明被查:打3针北京生物者说感恩

大风文字
2024-04-28 08:15:57
今天是4月28日下午,突然曝出一重要消息,或将产生重大影响?

今天是4月28日下午,突然曝出一重要消息,或将产生重大影响?

股市皆大事
2024-04-28 10:54:17
贾跃亭称已还清100亿美元债务,却被大V光速打脸:还了跟没还一样

贾跃亭称已还清100亿美元债务,却被大V光速打脸:还了跟没还一样

可达鸭面面观
2024-04-28 15:28:34
寒心,广东男子救落水小孩后收了一条烟,家长:烟很贵以为他不要

寒心,广东男子救落水小孩后收了一条烟,家长:烟很贵以为他不要

东东趣谈
2024-04-28 08:45:31
哈尔滨一小区楼体“突然裂开、逐渐倾斜”?官方通报:决定拆除!

哈尔滨一小区楼体“突然裂开、逐渐倾斜”?官方通报:决定拆除!

鲁中晨报
2024-04-28 08:05:03
问界m7撞车三人身亡,安全气囊未弹开+门窗锁死!家属崩溃:车刚买3个月

问界m7撞车三人身亡,安全气囊未弹开+门窗锁死!家属崩溃:车刚买3个月

六子吃凉粉
2024-04-28 11:33:22
顶级阳谋!李女士合理合法恶心物业,揭露多少底层人的悲哀困境

顶级阳谋!李女士合理合法恶心物业,揭露多少底层人的悲哀困境

千百度篮球视角
2024-04-28 14:50:50
A股:股市或将迎来大级别的下跌

A股:股市或将迎来大级别的下跌

生活中的栗子
2024-04-28 10:59:59
重庆燃气事件调查结果出炉;一季度全国电力燃气等行业利润增长40.0%;网传上海电力正在裁员

重庆燃气事件调查结果出炉;一季度全国电力燃气等行业利润增长40.0%;网传上海电力正在裁员

小萝卜丝
2024-04-28 17:25:22
博世称问界M7涉事车辆并未搭载博世智驾系统

博世称问界M7涉事车辆并未搭载博世智驾系统

鞭牛士
2024-04-28 17:32:15
不爱国?无人在乎神舟十八号发射,网友:房贷、车贷把我压垮!

不爱国?无人在乎神舟十八号发射,网友:房贷、车贷把我压垮!

鹏飞深文
2024-04-28 14:16:14
两年前被鉴定D级危楼的哈尔滨居民楼开始拆除,周围楼栋居民连夜转移安置,多方回应

两年前被鉴定D级危楼的哈尔滨居民楼开始拆除,周围楼栋居民连夜转移安置,多方回应

极目新闻
2024-04-28 17:22:28
广州一女子跳楼砸中路人后续:被砸当事人发文回应,商场发声

广州一女子跳楼砸中路人后续:被砸当事人发文回应,商场发声

180°视角
2024-04-28 14:27:59
新冠疫苗之父杨晓明被抓,带队研制科兴疫苗,曾9个月抽60管血!

新冠疫苗之父杨晓明被抓,带队研制科兴疫苗,曾9个月抽60管血!

闲事杂说
2024-04-28 02:12:03
具俊晔,太扎心了!4月27日晚,大S的现任老公具俊晔突然上了热搜

具俊晔,太扎心了!4月27日晚,大S的现任老公具俊晔突然上了热搜

海梦游者
2024-04-28 15:15:56
2024-04-28 19:02:44
CAD梦想画图
CAD梦想画图
是一款极速轻量级的CAD软件
571文章数 121关注度
往期回顾 全部

科技要闻

马斯克周日突然现身北京,要谈FSD入华?

头条要闻

哈尔滨一住宅楼整体裂开倾斜:周围楼栋居民连夜转移

头条要闻

哈尔滨一住宅楼整体裂开倾斜:周围楼栋居民连夜转移

体育要闻

赢了!詹皇末节14分制胜咆哮 压力给到KD

娱乐要闻

张杰谢娜发文为何炅庆生,亲如家人!

财经要闻

上财万字报告深度解读Q1经济

汽车要闻

鸿蒙首款行政旗舰轿车 华为享界S9实车亮相车展

态度原创

时尚
手机
亲子
数码
健康

40岁女人就要穿得“贵气”一点,优雅显气质,真的没有年龄感

手机要闻

OPPO A60正式发布 搭载骁龙680 起售价约1570元

亲子要闻

网友拍下自家宝宝,表示最后笑的那一下心都化了。

数码要闻

AMD和英特尔竞争的焦点 CPU缓存为何对游戏如此重要?

春天野菜不知不识莫乱吃

无障碍浏览 进入关怀版