- MxDraw 云图
- 快速入门
- 前端 mxdraw 和 mxcad 库预览编辑图纸
- 后台使用 Node.js 调用梦想 API
- CAD 与 GIS 集成说明
- 梦想云图 Node.JS 服务
- iOS 开发
- 安卓开发
- 网页 CAD 开发
- 网页快速入门 aspaps.netphpjava
- 图形数据库
- 参数化绘图
- 交互绘图
- 选择集
- 扩展数据
- 自定义实体
- 自定义命令
- 光栅图处理
- 图面搜索
- 控件事件
- 打印控制
- 界面控制
- COM 开发
- 视频教程
- VB 快速入门
- Delphi 快速入门
- CSharp 快速入门
- java 快速入门
- QT 快速入门
- 易语言快速入门
- Powerbuilder 快速入门
- wpf 控件入门
- 图形数据库
- 参数化绘图
- 交互绘图
- 选择集
- 扩展数据
- 自定义命令
- 自定义实体
- 打印控制
- 控件事件
- 图面搜索
- 光栅图处理
- 界面控制
- C++ 开发
- C++ bulider 快速入门
- C++ 快速入门(VS2010)
- C++ 快速入门(com 接口)
- 图纸数据库
- 参数化绘图
- 交互绘图
- 选择集
- 扩展程序
- 扩展数据
- 自定义函数
- 自定义实体
- 光栅图处理
- 图面搜索
- 控件事件
- 界面控制
- 常见问题
- 试用技术服务申请
- 会员下载最新程序
- 备用下载
- 控件安装运行说明
- 控件最新更新
- 控件功能简介
- 控件图形数据库
- 控件界面控制
- 控件命令执行原理
- 控件系统变量说明
- 控件常见问题说明
- 修改对象属性
- 网页加载 CAD 图纸的两个方案
- MxDraw3D 控件
- 前端基础工程化知识
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
实现步骤
1. 控件支持扩展模块加载(类拟于AutoCAD ARX 程序),扩展模块文件扩展名为 mrx ,在CAD控件安装目录sample下有 ExApp 工程,就是一个扩展模块例程。
2. 打开ExApp.sln工程,增加我们的自定义函数如下:
bool GetArcBulge(IN const MxResbuf* pParam, OUT MxResbuf* pRetData) { // 三点坐标,X1,Y1,X2,Y2,X3,Y3共六个参数。 if(pParam->GetCount() < 6) { pRetData->AddString(_T("FALSE")); return false; } double dX1 = 0.0,dY1 = 0.0,dX2 = 0.0,dY2 = 0.0,dX3 = 0.0,dY3 = 0.0; dX1 = pParam->AtDouble(0); dY1 = pParam->AtDouble(1); dX2 = pParam->AtDouble(2); dY2 = pParam->AtDouble(3); dX3 = pParam->AtDouble(4); dY3 = pParam->AtDouble(5); McGePoint2d pt1(dX1,dY1); McGePoint2d pt2(dX2,dY2); McGePoint2d pt3(dX3,dY3); double dBulge = 0.0; if(!GetArcBulgeImp(pt1, pt2, pt3, dBulge) ) { return false; } else { pRetData->AddDouble(dBulge); // 计算成功。 return true; } }
pParam:是传入参数链表
pRetData:是返回参数链表
GetArcBulgeImp函数实现代码:
bool GetArcBulgeImp(McGePoint2d pt1, McGePoint2d pt2, McGePoint2d pt3, OUT double& dBulge) { dBulge = 0.0; if(pt1.isEqualTo(pt2) || pt1.isEqualTo(pt3) || pt2.isEqualTo(pt3) ) { // 点相等,无法构成圆弧 return false; } McGeCircArc2d tmpArc(pt1,pt2,pt3 ); dBulge = tan(0.25 * (tmpArc.endAng() - tmpArc.startAng()) ); if(tmpArc.isClockWise()) { dBulge = -dBulge; } return true; }
3. 到void initApp()函数处,注册自定义函数:
void initApp() { Mx::AddCustomFunction(_T("SampleExApp"), _T("GetArcBulge"),GetArcBulge); }
GetArcBulge是我们自定义函数名,该函数是用来,给三个点座标计算圆弧凸度。
4. 在扩展模块卸载时,反注册,如下:
void unloadApp() { Mx::RemoveCustomFunction(_T("SampleExApp")); }
5. 编译工程,在Release目录下生成文件ExApp.mrx。
6. 打开sample\ CSharp 工程,调用我们刚才写的函数。
在对话框资源编辑中,编辑控件的属性,在设置IniFilePath属性,值为:LoadMrx=ExApp.mrx,这样在控件加载时,绘自动加载MxDrawX.ocx所在目录下的ExApp.mrx。
7. 增加一个按钮,在按钮单击事件中,增加调用我们写的自定义函数代码。
private void button15_Click(object sender, EventArgs e) { double dX1 = 0.0; double dY1 = 0.0; double dX2 = 10.0; double dY2 = 10.0; double dX3 = 50.0; double dY3 = 0.0; // 初始化输入参数param,三个点的X,Y坐标 MxDrawResbuf param = new MxDrawResbuf(); param.AddDouble(dX1, -10); param.AddDouble(dY1, -10); param.AddDouble(dX2, -10); param.AddDouble(dY2, -10); param.AddDouble(dX3, -10); param.AddDouble(dY3, -10); // 调用我们GetArcBulge自定义函数 // ret是函数返回值。 MxDrawResbuf ret = (MxDrawResbuf) axMxDrawX1.CallCustomFunctionEx("GetArcBulge", param); double dBluge = 0.0; if(ret != null && ret.Count >= 2 ) { // 函数返回成功,取凸度值。 dBluge = ret.AtDouble(1); } // 输入凸度值到对话框。 string sT; sT = dBluge.ToString(); MessageBox.Show(sT); }
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论