MxDraw 发表于 2018-3-14 10:10:00

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

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

下面帮助的完整例子,在控件安装目录的Sample\Ie\iedemo.htm中.
1.      主要用到函数说明
A.      ImplementCommandEventFun
控件的命令事件函数,与用户交互的操作,需要放到命令事件函数内实现,这样控件才能保证正常的Windows 消息循环被处理。
B.       ImplementMouseEventFun
控件的鼠标事件函数,可以用JS程序里,响应鼠标事件,详细说明如下:
voidMouseEvent(LONG lType, DOUBLE dX, DOUBLE dY, LONG* lRet);
LONG lType   事件类型,1鼠标移动,2是鼠标左键按下,3是鼠标右键按下,4是鼠标左键双击5是鼠标左键释放 6是鼠标右键释放 7是鼠标中键按下 8是鼠标中键释放 9是鼠标中键双击10是鼠标中键滚动   DOUBLE dX   事件发生时的鼠标X坐标,文档坐标   DOUBLE dY   事件发生时的鼠标Y坐标,文档坐标   LONG* lRet   lRet 返回非0,消息将不在往下传递   
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安装包,并可进行数据签名,方便网页中自动安装下载.
详细参考例子
   
                        
                        
                        
                        
                           -->
                           
                           
                           
                           
                           
                           
                           
                           
                     

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)
    {
         // 得到网页的中的控件对象.
                  varmxOcx = document.all.item("MxDrawXCtrl");
         mxOcx.focus();
                  varpoint1 = mxOcx.GetPoint(null,"\n 点取开始点:");
                  if(point1== null)
                  {
                      return;
                  }
                  varpoint2 = 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)
      {
         // 得到网页的中的控件对象   
                  varaxMxDrawX1 = document.getElementById("MxDrawXCtrl");
      // 创建一个选择集对象
                  varss =axMxDrawX1.CallCustomFunction("Mx_NewSelectionSet","");
      // 创建一个点对象
                  varpt = 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)
                   {
               //得到选择集中的第一个点对象.
                        varent = ss.Item(0);
               //输出信息.
                     alert("点击了" + ent.ObjectName + "对象");
               }
               // 取消后面的命令。
          axMxDrawX1.SendStringToExecute("");
                  return1;
       }
      return 0;
}
页: [1]
查看完整版本: 在网页中引用DWG控件,交互绘图,和响应鼠标点击对象的方法