- 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 控件
- 前端基础工程化知识
com 接口的命令执行
DoCommand说明: 该函数开始执行控件的一个用户自定义命令,参数是命令的id,这个id值可以随便取值,它是用来标识该命令, 多个命令之间的id值不能重复 。
前面的DoCommand的调用后,程序将会跳转命令执行事件函数中。 命令调用过程流程图:
如C#语言
开始执行一个命令: 在界面上放一个按钮“ 打开DWG ” 给按钮增加点击事件如下:
private void button6_Click(object sender, EventArgs e) { axMxDrawX1.DoCommand(6); }
axMxDrawX1.DoCommand调用后就会跳到命令事件中,给窗口增加CAD控件命令执行事件,并加代码,如下:
private void axMxDrawX1_ImplementCommandEvent(object sender, AxMxDrawXLib._DMxDrawXEvents_ImplementCommandEventEvent e) { if (e.iCommandId == 6) { // 打开文件. OpenFileDialog ofd = new OpenFileDialog(); ofd.Filter = "dwg 文件(*.dwg)|*.dwg"; if(ofd.ShowDialog() == DialogResult.OK) { axMxDrawX1.OpenDwgFile(ofd.FileName); } } }
如JS语言
开始执行一个命令: 在界面上放一个按钮“打开DWG ” 给按钮增加点击事件如下:
<input type="button" value="写扩展数据" onclick="DoCmd(11)">
调用DoCommand执行用户命令,DoCommand调用后就会跳到命令事件中,DoCmd代码如下:
function DoCmd(iCmd) { mxOcx.DoCommand(iCmd); }
添加命令事件:
document.getElementById("MxDrawXCtrl").ImplementCommandEventFun = DoCommandEventFunc;
命令事件函数实现:
function DoCommandEventFunc(iCmd) { if (iCmd == 11) { WriteXData(); } }
写扩展数据函数实现:
function WriteXData() { var selEnt = mxOcx.NewComObject("IMxDrawUiPrEntity"); selEnt.message = "选择要写扩展数据的对象"; if (selEnt.go() != 1) return; var ent = selEnt.Entity(); if (ent == null) return; if (ent.SetxDataString("ExDataName", 0, "ExDataValue")) { alert("写扩展数据成功"); } else { alert("写扩展数据失败"); } }
在工具条定义文件中执行用户命令
工具条定义文件中一行代表一个工具条上的按钮,如果用户想点击工具条上的按钮,按钮执行命令事件,如下定义工具条:
("保存dwg文件" "保存dwg文件" "SaveDwg" "IDB_SAVEDWG_BITMAP" "" "MxDraw.dll" "15")
上述定义了一个打开dwg文件按钮,点击这个按钮,相当于执行DoCommand(15)。
在菜单条中执行用户命令
菜单条定义文件中一行代表一个菜单命令,如果用户想点击菜单,执行命令事件,如下定义菜单条定义文件:
"打开(&O)" "Mx_OpenMxg" "IDB_OPENMXG_BITMAP" "" "" "15"
上述定义了一个打开文件菜单,点击这个菜单项,相当于执行DoCommand(15)。
为命令注册一个命令名称,方便命令输入和调用
RegistUserCustomCommand function
作用:向控件注册一个命令,用户在命令行输入命令名这个字符串,就会触发执行命令事件 命令事件的id就是该注册时的id值。
接口:BOOL RegistUserCustomCommand(LPCTSTR pszCommandName, long lId)
参数:
名称 | 说明 |
---|---|
pszCommandName | 命令名称 |
lId | 命令id |
参考例程(VB代码):
MxDrawX1.RegistUserCustomCommand " MyTest11", 15
参考例程(c#代码):
axMxDrawX1.RegistUserCustomCommand("MyTest11",9999); axMxDrawX1.Focus(); // 命令 响应代码 private void axMxDrawX1_ImplementCommandEvent(object sender, AxMxDrawXLib._DMxDrawXEvents_ImplementCommandEventEvent e) { if (e.iCommandId == 9999) { MessageBox.Show("用户定义命令执行...."); } }
调用控件自带命令
CAD控件工具条上的按钮,都是CAD控件内部命令实现,点击工具条上的按钮,就会在命令行看到相关命令名称。如下图所示:
如果用户想在自己的按钮中,调用画线命令。如下:
axMxDrawX1.SendStringToExecute("Mx_Line");
在命令执行中,再调用另一个命令
控件是不允许命令被重入,也就是说不能同时执行两个命令,比如当前用户正交到绘制直线,当用户点击绘制圆按钮时,绘制直线命令就需要立即退出,并进入绘圆命令。
那么如果用户想要在命令中,调用另一个命令,可以把另一个命令当前一个函数调用,调用如下:
axMxDrawX1.SendStringToExecuteFun("Mx_Line");
命令函数执行完后,可以调用GetEntitysLastCmd函数返回,命令函数新增加的实体,它返一个MxDrawResbuf对象,也就是说,得到一个数组,得到多个新增加的实体。
如下JS代码,调用控件的绘制样条线命令,并得到新绘制样的样条线,然后修改它的线重:
function DrawSpline() { mxOcx.Cal("Mx_ShowWeight"); var param = mxOcx.NewResbuf(); mxOcx.SendStringToExecuteFun("_DrawSpline", param); var retparam = mxOcx.GetEntitysLastCmd(); if (retparam == null) return; if (retparam.Count == 0) return; var spline = retparam.AtObject(0); if (spline == null) { return; } spline.Lineweight = 40; }
有些命令在用时,可以转入参数,调用SendStringToExecuteEx函数。 如:调用阵列命令,并传递参数:
MxDrawSelectionSet ss = new MxDrawSelectionSet(); MxDrawUtility utility = new MxDrawUtility(); utility.Prompt("选择阵列对象:"); ss.Select(MCAD_McSelect.mcSelectionSetUserSelect, null, null, null); if (ss.Count == 0) return; MxDrawResbuf param = new MxDrawResbuf(); // 10行. param.AddLongEx(10, 1070); // 20列. param.AddLongEx(20, 1070); // 行偏移. param.AddDoubleEx(100, 1040); // 列偏移. param.AddDoubleEx(150, 1040); // 阵列角度. param.AddDoubleEx(15.0, 1040); // 阵列对象个数. param.AddLongEx(ss.Count, 1070); for (int i = 0; i < ss.Count; i++) { MxDrawEntity ent = ss.Item(i); param.AddObjectId(ent.ObjectID); } // 调用阵列命令. axMxDrawX1.SendStringToExecuteEx("Mx_Array", param);
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论