1、在网页中引用DWG控件,交互绘图,和响应鼠标点击对象的方法。下面帮助的完整例子,在控件安装目录的 Sample\Ie\iedemo.htm 中。
2、主要用到函数说明:ImplementCommandEventFun
控件的命令事件函数,与用户交互的操作,需要放到命令事件函数内实现,这样控件才能保证正常的Windows 消息循环被处理。
3、ImplementMouseEventFun
控件的鼠标事件函数,可以用JS程序里,响应鼠标事件,详细说明如下:
参数 | 说明 |
---|
LONG lType | 事件类型,1鼠标移动,2是鼠标左键按下,3是鼠标右键按下,4是鼠标左键双击 5是鼠标左键释放 6是鼠标右键释放 7是鼠标中键按下 8是鼠标中键释放 9是鼠标中键双击 10是鼠标中键滚动 |
DOUBLE dX | 事件发生时的鼠标X坐标,文档坐标 |
DOUBLE dY | 事件发生时的鼠标Y坐标,文档坐标 |
LONG* lRet | lRet 返回非0,消息将不在往下传递 |
4、DrawLine
用于在DWG图上绘制一条直线。详细说明如下:
参数 | 说明 |
---|
DOUBLE dX1 | 直线的开始点x坐标 |
DOUBLE dY1 | 直线的开始点y坐标 |
DOUBLE dX2 | 直线的结束点x坐标 |
DOUBLE dY2 | 直线的结束点y坐标 |
5、IMxDrawSelectionSet::SelectAtPoint2
返回一点坐标下面的实体对象,可以设置过滤条件,返回某层,某类型等属性的对象。
6、js中实现代码说明:
(1)设置命令事件回调函数:
1 | document.getElementById( "MxDrawXCtrl" ).ImplementCommandEventFun = DoCommandEventFunc; |
(2)设置鼠标事件回调函数:
1 | document.getElementById( "MxDrawXCtrl" ).ImplementMouseEventFun = MouseEvent; |
(3)该事件将会被,网页中的myclick按钮点击触发,如下:
1 2 3 4 | function myclick() { document.getElementById( "MxDrawXCtrl" ).DoCommand(1); } |
(4)下面是绘制直线代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | 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); } } |
(5)在鼠标事件中得到鼠标点击的对象:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | 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; } |