明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 940|回复: 0

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

[复制链接]
发表于 2018-3-14 10:10:14 | 显示全部楼层 |阅读模式
本帖最后由 MxDraw 于 2018-3-14 10:12 编辑

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

[MXDRAW CAD控件文档]

下面帮助的完整例子,在控件安装目录的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安装包,并可进行数据签名,方便网页中自动安装下载.

详细参考例子

  <objectclassid="clsid:74A777F8-7A8F-4e7c-AF47-7074828086E2"id="MxDrawXCtrl" codebase="梦想绘图控件官网链接/MxDrawX.CAB#version=1,0,0,1"width=100%height=90%>

                        <paramname="_Version" value="65536">

                         <paramname="_ExtentX" value="24262">

                        <paramname="_ExtentY" value="16219">

                        <paramname="_StockProps" value="0">

                           <!--<param name="DwgFilePath"value="梦想绘图控件官网链接/downland/test.dwg">-->

                           <paramname="IsRuningAtIE" value="1">

                           <paramname="EnablePrintCmd" value="1">

                           <paramname="ShowStatusBar" value="1">

                           <paramname="ShowMenuBar" value="1">

                           <paramname="ShowToolBars" value="1">

                           <paramname="ShowCommandWindow" value="1">

                           <paramname="ShowModelBar" value="1">

                           <paramname="IniFilePath"value="AutoActive=N,LoadMrx=PropertyEditor.mrx">

                       <paramname="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)

    {

         // 得到网页的中的控件对象.

                  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;

}


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

本版积分规则

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

GMT+8, 2024-11-28 21:15 , Processed in 0.184193 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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