明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1664|回复: 0

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

[复制链接]
发表于 2012-11-12 15:22 | 显示全部楼层 |阅读模式
在网页中引用DWG控件,交互绘图,和响应鼠标点击对象的方法
[MXDRAW CAD控件文档
下面帮助的完整例子,在控件安装目录的Sample\Ie\ iedemo.htm.
1.       主要用到函数说明
A.       ImplementCommandEventFun
控件的命令事件函数,与用户交互的操作,需要放到命令事件函数内实现,这样控件才能保证正常的Windows 消息循环被处理。
B.        ImplementMouseEventFun
控件的鼠标事件函数,可以用JS程序里,响应鼠标事件,详细说明如下:
void MouseEvent(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: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;
}

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-3 06:38 , Processed in 0.272644 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表