CAD交互绘制块引用对象(网页版)

主要用到函数说明:


_DMxDrawX::DrawBlockReference


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


参数 说明

DOUBLE dPosX

插入点的X坐标

DOUBLE dPosY

插入点的Y坐标

BSTR pszBlkName

图块名

DOUBLE dScale

图块缩放比例

DOUBLE dAng

图块的旋转角度


js中实现代码说明:


动态拖放时的绘制事件:


function DoDynWorldDrawFun(dX,dY,pWorldDraw,pData)
{
    var sGuid = pData.Guid;
   mxOcx.SetEventRet(0);
    if(sGuid == "TestDynDraw")
    {
        //动态插入图块
        // 与用户交互到在图上提取一个点
        var firstPt =  pData.GetPoint("pt1");
        if(firstPt == null)
            return;
        //与用户交互,从命令中取字符串
        var sBlkName =  pData.GetString("BlkName");
        var secondPt = mxOcx.NewPoint();
        secondPt.x = dX;
        secondPt.y = dY;
        //计算this点减去pPoint,得到的向量
        var vec = firstPt.SumVector(secondPt);
        //返回向量顺时针转到与X轴的角度.[0,2PI)
        var dAng = vec.Angle();
        //绘制块引用对象
        //参数一为插入点的X坐标;参数二为插入点的Y坐标;
        //参数三为图块名;参数四为图块缩放比例;参数五为图块的旋转角度
        pWorldDraw.DrawBlockReference(firstPt.x,firstPt.y,sBlkName,1.0,dAng * 180.0 / 3.14159265 + 90.0);
        //设置自定义事件的返回值
        mxOcx.SetEventRet(1);
    }
    else if (sGuid == "TestDynDraw1") {
        var sBlkName = pData.GetString("BlkName");
        //绘制块引用对象
        pWorldDraw.DrawBlockReference(dX, dY, sBlkName, 1.0, 0.0);
    }
    
}


动态插入图块:


function DynInsert() {
    var sBlkName = "Tree";
    //用户需要出入图块的路径   控件程序在磁盘的文件路径
    var sBlkFile = mxOcx.GetOcxAppPath() + "\\Blk\\树.dwg";
    //向控件数据库中插入一个图块,不用它插入匿名块
    mxOcx.InsertBlock(sBlkFile, "Tree");
    //新建一个COM组件对象
    var getPt = mxOcx.NewComObject("IMxDrawUiPrPoint");
    getPt.message = "点取插入点";
    //初始动态绘制
    var spDrawData1 = getPt.InitUserDraw("TestDynDraw1");
    //设置string类型的属性
   spDrawData1.SetString("BlkName","Tree");
    if (getPt.go() != 1) {
        return;
    }
    var frstPt = getPt.value();
    if (frstPt == null) {
        return;
    }
    var getSecondPt = mxOcx.NewComObject("IMxDrawUiPrPoint");
    var spDrawData = getSecondPt.InitUserDraw("TestDynDraw");
    getSecondPt.message = "点取旋转角度";
    //得到点时的拖放基点
    getSecondPt.basePoint = frstPt;
    //设置是否启用拖放基点   true:使用,false:不使用
    getSecondPt.setUseBasePt(true);
    //设置point类型的属性
    spDrawData.SetPoint("pt1", frstPt);
    //设置string类型的属性
    spDrawData.SetString("BlkName", "Tree");
    if (getSecondPt.go() != 1) {
        return;
    }
    //把实体绘制到图上。一般用于动态拖放时,在拖放结束时,绘制到图上
    var ret = spDrawData.Draw();
    // 给属性块写文字.
    var blkRef = ret.AtObject(0);
    if (blkRef != null)
    {
          var param = mxOcx.NewResbuf();
         blkRef.SetProp("createAttribute",param);
    }
}

 

posted on 2019-06-25 10:15  梦想CAD控件  阅读(338)  评论(0)    收藏  举报

导航