网页动态绘制圆弧js中实现代码说明效果展示
网页动态绘制圆弧

在网页中动态绘圆弧。下面帮助的完整例子,在控件安装目录的Sample\Ie\ iedemoDrawArc.htm中。


主要用到函数说明:


_DMxDrawX::DrawBlockReference


绘制块引用对象。详细说明如下:


参数 说明

DOUBLE dPosX

插入点的X坐标

DOUBLE dPosY

插入点的Y坐标

BSTR pszBlkName

图块名

DOUBLE dScale

图块缩放比例

DOUBLE dAng

图块的旋转角度


IMxDrawWorldDraw::DrawArc2


由圆弧上的三点绘制一个圆弧。详细说明如下:


参数 说明

[in] DOUBLE dStartPointX

开始点X坐标

[in] DOUBLE dStartPointY

开始点Y坐标

[in] DOUBLE dEndPointX

结束点X坐标

[in] DOUBLE dEndPointY

结束点Y坐标

dMidPointX

圆弧上的一点X坐标

dMidPointY

圆弧上的一点Y坐标


IMxDrawCustomEntity::Draw


把实体绘制到图上。一般用于动态拖放时,在拖放结束时,绘制到图上。返回新绘制的实体id。


IMxDrawCustomEntity::SetPoint


设置point类型的属性。


IMxDrawUiPrBase::InitUserDraw


初始动态绘制,动态绘制Id,在动态绘制函数里,这个值用于判断是那个动态绘制。


IMxDrawUiPrPoint::setUseBasePt


设置是否启用拖放基点。


IMxDrawVector3d::Angle


返回向量顺时针转到与X轴的角度.[0,2PI)。


IMxDrawPoint::SumVector


计算this点减去pPoint,得到的向量。

js中实现代码说明

在网页中引用控件,clsid: 74A777F8-7A8F-4e7c-AF47-7074828086E2是控件的GUID,浏览器通过这个clsid来判断访问网页的客户机是否已经安装控件。控件程序可以做成CAB安装包,并可进行数据签名,方便网页中自动安装下载。详细参考例子:http://www.mxdraw.com/iedemo.html


   <object classid="clsid: 74A777F8-7A8F-4e7c-AF47-7074828086E2" 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>


设置命令事件回调函数


document.getElementById("MxDrawXCtrl").ImplementCommandEventFun = DoCommandEventFunc;


在命令事件交互查找图上文字,该事件将会被网页中的按钮点击触发执行相对应的查找文字事件FindText()。详细使用见: 梦想控件19-命令执行原理.doc


实例化一个构造选择集进行过滤,该类封装了选择集及其处理函数。将文字对象当作过滤条件,得到文字对象(此处可以是文字或多行文字)。


// 创建选择集对象
ss = mxOcx.NewSelectionSet();   
// 创建一个链表对象   
var spFilte = mxOcx.NewResbuf();
// 把文字,多行文字当着过滤条件
spFilte.AddStringEx("TEXT,MTEXT",5020);
// 得到图上所有文字,5代码,全图选择
ss.Select2(5,null,null,null,spFilte);


遍历每个文字对象,将文字放到视区中间并绘制一个标记圆。


// 遍历每个文字.
var bFind = false;
 
    // 遍历选择集
for(var i = 0; i < ss.Count;i++)
{
         // 得到选集中的实体
var ent = ss.Item(i);
if(ent == null)
continue;
if (ent.ObjectName == "McDbText") {
             // 得到文字内容
    var sTxt = ent.TextString;
 
    if (sTxt == txt) {
        // 把文字放到视区中间.
        mxOcx.PutEntityInView(ent.ObjectID, 300);
 
 
        var dLen = mxOcx.ViewLongToDocCoord(80);
 
        // 绘制一个标记圆.
        mxOcx.DrawVectorCircle(ent.Position.x,
ent.Position.y,
dLen, 65280);
        bFind = true;
    }
}
   else if (ent.ObjectName == "McDbMText") {
 
                    
        var param = mxOcx.NewResbuf();
        param.AddObjectId(ent.ObjectID);
                  // 得到多行文字中的文字本内容
        var ret = mxOcx.CallEx("Mx_GetMTextContent", param);
        if (ret.AtString(0) == "Ok") {
 
            if (ret.AtString(1) == txt) {
                // 把文字放到视区.
                mxOcx.PutEntityInView(ent.ObjectID, 300);
 
                var dLen = mxOcx.ViewLongToDocCoord(80);
 
                // 绘制一个标记圆.
                mxOcx.DrawVectorCircle(ent.Location.x,
            ent.Location.y,
            dLen, 65280);
                bFind = true;
 
                break;
            }
        }
    }
ent = null;
    }
 
    if (!bFind) {
    alert("没有找到文字对象");
    }
    // 在这里必须显示释放控件的COM对象指针.
    ss = null;
    spFilte = null;
    CollectGarbage();
}
效果展示

在兼容模式下打开网页(谷歌支持4.5前的版本,火狐最新版本不支持),运行控件。效果如下:


view1.png


用户可以通过点击查找图上文字按钮,获取目标文字输入框。如下图所示:


view2.png


查找结果如下图所示:


view3.png


如果输入目标文字不存在则提示没有找到文字对象,效果如下:


view4.png

MxDraw
MxDraw是由梦想凯德基于AutoDesk CAD平台开发的软件,拥有完全自主的核心技术和知识产权。MxDraw致力于为各企业提供最优秀的CAD平台整体解决方案。
技术服务
TEL:400-888-5703
185-8173-1060
QQ:827867134,6884123
产品购买
TEL:400-888-5703
185-8173-1060
QQ:827867134,6884123
用户交流
QQ群1:827867134
QQ群2:827867134
QQ群3:827867134