本帖最后由 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;
}
|