lihao2014 发表于 2015-6-10 15:59:11

在网页中引用DWG控件,交互绘图,和响应鼠标点击对象的方法

控件文档 下面帮助的完整例子,在控件安装目录的Sample\Ie\ iedemo.htm中. 1. 主要用到函数说明 A. ImplementCommandEventFun控件的命令事件函数,与用户交互的操作,需要放到命令事件函数内实现,这样控件才能保证正常的Windows 消息循环被处理。 B. ImplementMouseEventFun控件的鼠标事件函数,可以用JS程序里,响应鼠标事件,详细说明如下:void MouseEvent(LONG lType, DOUBLE dX, DOUBLE dY, LONG* lRet); C. DrawLine用于在DWG图上绘制一条直线,详细说明如下:
参数 说明
DOUBLE dX1 直线的开始点x坐标
DOUBLE dY1 直线的开始点y坐标
DOUBLE dX2 直线的结束点x坐标
DOUBLE dY2 直线的结束点y坐标
D. IMxDrawSelectionSet::SelectAtPoint2返回一点坐标下面的实体对象,可以设置过滤条件,返回某层,某类型等属性的对象。 2. JS中实现代码说明 A. 在网页中引用控件,clsid: 74A777F8-7A8F-4e7c-AF47-7074828086E2是控件的GUID.控件程序可以做成CAB安装包,并可进行数据签名,方便网页中自动安装下载.详细参考例子:http://www.mxdraw.com/iedemo.html   <object classid="clsid: 74A777F8-7A8F-4e7c-AF47-7074828086E2" 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;}

chenhaijunsjy 发表于 2015-6-10 15:59:11


看看 学习中

天山雪莲 发表于 2015-6-10 15:59:11

谢谢楼主的分享。
页: [1]
查看完整版本: 在网页中引用DWG控件,交互绘图,和响应鼠标点击对象的方法