在网页中引用DWG控件,交互绘图,和响应鼠标点击对象的方法 [MXDRAW CAD控件文档 下面帮助的完整例子,在控件安装目录的Sample\Ie\ iedemo.htm中. 1. 主要用到函数说明 A. ImplementCommandEventFun 控件的命令事件函数,与用户交互的操作,需要放到命令事件函数内实现,这样控件才能保证正常的Windows 消息循环被处理。 B. ImplementMouseEventFun 控件的鼠标事件函数,可以用JS程序里,响应鼠标事件,详细说明如下: void MouseEvent(LONG lType, DOUBLE dX, DOUBLE dY, LONG* lRet); | 事件类型,1鼠标移动,2是鼠标左键按下,3是鼠标右键按下,4是鼠标左键双击 5是鼠标左键释放 6是鼠标右键释放 7是鼠标中键按下 8是鼠标中键释放 9是鼠标中键双击 10是鼠标中键滚动 | | | | | | |
C. DrawLine 用于在DWG图上绘制一条直线,详细说明如下: D. IMxDrawSelectionSet::SelectAtPoint2 返回一点坐标下面的实体对象,可以设置过滤条件,返回某层,某类型等属性的对象。 2. JS中实现代码说明 A. 在网页中引用控件, clsid:6EEC44E0-338B-408A-983E-B43E6F22B929是控件的GUID. 控件程序可以做成CAB安装包,并可进行数据签名,方便网页中自动安装下载. <object classid="clsid:6EEC44E0-338B-408A-983E-B43E6F22B929" id="MxDrawXCtrl" codebase="http://www.mxdraw.com/MxDrawX.CAB#version=1,0,0,1" width=100% height=90%> <param name="_Version" value="65536"> <param name="_ExtentX" value="24262"> <param name="_ExtentY" value="16219"> <param name="_StockProps" value="0"> <!-- <param name="DwgFilePath" value="http://www.mxdraw.com/downland/test.dwg"> --> <param name="IsRuningAtIE" value="1"> <param name="EnablePrintCmd" value="1"> <param name="ShowStatusBar" value="1"> <param name="ShowMenuBar" value="1"> <param name="ShowToolBars" value="1"> <param name="ShowCommandWindow" value="1"> <param name="ShowModelBar" value="1"> <param name="IniFilePath" value="AutoActive=N,LoadMrx=PropertyEditor.mrx"> <param name="ToolBarFiles" value="MxDraw-ToolBar.mxt,MxDraw-ToolBar-DrawParam.mxt,MxDraw-ToolBar-Draw.mxt,MxDraw-ToolBar-Edit.mxt"> </object> <script>
B. 设置命令事件回调函数 document.getElementById("MxDrawXCtrl").ImplementCommandEventFun = DoCommandEventFunc;
C. 设置鼠标事件回调函数 document.getElementById("MxDrawXCtrl").ImplementMouseEventFun = MouseEvent;
D. 在命令事件交互绘制一条直线 该事件将会被,网页中的myclick按钮点击触发,如下: function myclick() { document.getElementById("MxDrawXCtrl").DoCommand(1); } 下面是绘制直线代码: function DoCommandEventFunc(iCmd) { // 命令事件ID. if (iCmd == 1) { // 得到网页的中的控件对象. var mxOcx = document.all.item("MxDrawXCtrl"); mxOcx.focus(); var point1 = mxOcx.GetPoint(null,"\n 点取开始点:"); if(point1 == null) { return; } var point2 = mxOcx.GetPoint(point1,"\n 点取结束点:"); if(point1 == null) { return; } // 绘制一条直线. mxOcx.DrawLine(point1.x,point1.y,point2.x,point2.y); } }
E. 在鼠标事件中得到鼠标点击的对象. function MouseEvent(dX,dY,lType) { // 4是鼠标左键双击 if(lType == 4) { // 得到网页的中的控件对象 var axMxDrawX1 = document.getElementById("MxDrawXCtrl"); // 创建一个选择集对象 var ss = axMxDrawX1.CallCustomFunction("Mx_NewSelectionSet",""); // 创建一个点对象 var pt = axMxDrawX1.CallCustomFunction("Mx_NewPoint",""); // 创建一个过滤条件对象 var fil = axMxDrawX1.CallCustomFunction("Mx_NewResbuf",""); // 把鼠标点击坐标,赋值给点对象. pt.x = dX; pt.y = dY; // 在该点处构造选择集. ss.SelectAtPoint2(pt,fil); // ss.Coune是选择集中对象数目 if(ss.Count > 0) { // 得到选择集中的第一个点对象. var ent = ss.Item(0); // 输出信息. alert("点击了" + ent.ObjectName + "对象"); } // 取消后面的命令。 axMxDrawX1.SendStringToExecute(""); return 1; } return 0; }
|