返回介绍

绘制块引用对象

发布于 2023-08-09 23:10:34 字数 4865 浏览 0 评论 0 收藏 0

主要用到函数说明:

函数名:_DMxDrawX::DrawBlockReference

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

参数说明
DOUBLE dPosX插入点的X坐标
DOUBLE dPosY插入点的Y坐标
BSTR pszBlkName图块名
DOUBLE dScale图块缩放比例
DOUBLE dAng图块的旋转角度

js中实现代码说明:

动态拖放时的绘制事件:

function DoDynWorldDrawFun(x,y,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 = x;
        secondPt.y = y;
        //计算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(x, y, 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);
    }
}

效果展示:

用户可以通过点击插入图片按钮,将在js代码中设置的图片插入到CAD控件视区得任何位置。如下图所示:

draw14.png

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文