技术资讯
每一次案例的完美合作,是对我们团队高度认可,相信未来会更好!
技术资讯
成功案例
快速帮助
当前位置:首页 > 技术资讯 > 详情

梦想CAD控件关于批注问题

一、参数绘制批注


C#中实现代码说明:


private void DrawComment()
{
    MxDrawComment com = new MxDrawComment();
  
    MxDrawPoint pt = new MxDrawPoint();
    pt.x = 200;
    pt.y = 200;
    com.basePoint = pt;
  
    pt.x = 300;
    pt.y = 300;
  
    com.Position = pt;
    com.Text = "Test";
  
    MxDrawPoints pts = new MxDrawPoints();
    pts.Add(-100, -100, 0);
    pts.Add(100, 100, 0);
  
    com.Bounding = pts;
  
    com.ArrowType = 2;
  
    com.BoundingBoxType = 5;
  
    com.Bounding = pts;
  
    com.ShapRadius = 50;
  
    com.TextHeight = 100;
  
    axMxDrawX1.DrawEntity(com);
  
    axMxDrawX1.ZoomAll();
}


效果展示:


c#drawdim.png


js中实现代码说明:


自定义实体绘制函数


function ExplodeFun(pCustomEntity, pWorldDraw, txt) {
    var sGuid = pCustomEntity.Guid;
    if (sGuid == "TestMxCustomEntity") {
        if (!pCustomEntity.IsHave("First"))
            return;
        var stp = pCustomEntity.GetPoint("First");
        var ept = pCustomEntity.GetPoint("BasePoint");
        var dimpt = pCustomEntity.GetPoint("DimPoint");
        var txt = pCustomEntity.GetString("Text");
        var textH = pCustomEntity.GetDouble("TextHeight");
        var edgeNum = pCustomEntity.GetLong("EdgeNumber");
        var shapRadius = pCustomEntity.GetDouble("ShapRadius");
        var isCircle = pCustomEntity.GetLong("isCircle");
        // 创建一个批注对象.
        var comment = mxOcx.NewEntity("IMxDrawComment");
        //标注文字
        comment.Text = txt;
        //标注文字高度
        comment.TextHeight = textH;
        //标注位置提示多边形的边数. 小于2不绘制,=2绘制圆,大于2绘制多边形
        comment.EdgeNumber = edgeNum;
        //标注位置提示多边形的半径
        comment.ShapRadius = shapRadius;
        //标注基点
        comment.basePoint = ept;
        //标注位置点
        comment.Position = dimpt;
        // 设置文字样式
        pWorldDraw.TextStyle = "MyCommentFont";
        // 动态绘制.
        pWorldDraw.DrawEntity(comment);
 
        if (isCircle) {
            var dR = stp.DistanceTo(ept) * 0.5;
            var vec = stp.SumVector(ept);
            vec.Mult(0.5);
            ept.Add(vec);
            //绘制一个圆
            //参数一为圆的中心X值 ,参数二为圆的中心Y值,
            //参数三为半径
            pWorldDraw.DrawCircle(ept.x, ept.y, dR);
        }
        // 绘制矩形框.
        else {
            //绘制一个直线
            //参数一直线的开始点x坐标,参数二直线的开始点y坐标,参数三直线的结束点x坐标,参数四直线的结束点y坐标
            pWorldDraw.DrawLine(stp.x, stp.y, stp.x, ept.y);
            pWorldDraw.DrawLine(stp.x, ept.y, ept.x, ept.y);
            pWorldDraw.DrawLine(ept.x, ept.y, ept.x, stp.y);
            pWorldDraw.DrawLine(ept.x, stp.y, stp.x, stp.y);
        }
        mxOcx.SetEventRet(1);
    }
}


返回自定义实体夹点


function GetGripPointsFun(pCustomEntity) {
    var sGuid = pCustomEntity.Guid;
    if (sGuid == "TestMxCustomEntity") {
        if (!pCustomEntity.IsHave("First"))
            return;
        var stp = pCustomEntity.GetPoint("First");
        var ept = pCustomEntity.GetPoint("BasePoint");
        var dimpt = pCustomEntity.GetPoint("DimPoint");
        var ret = mxOcx.NewResbuf();
        ret.AddPoint(stp);
        ret.AddPoint(ept);
        ret.AddPoint(dimpt);
        mxOcx.SetEventRetEx(ret);
    }
}


移动自定义实体夹点


function MoveGripPointsFun(pCustomEntity, lGridIndex, dOffsetX, dOffsetY) {
 
    var sGuid = pCustomEntity.Guid;
    if (sGuid == "TestMxCustomEntity") {
        if (!pCustomEntity.IsHave("First"))
            return;
        var stp = pCustomEntity.GetPoint("First");
        var ept = pCustomEntity.GetPoint("BasePoint");
        var dimpt = pCustomEntity.GetPoint("DimPoint");
        if (lGridIndex == 0) {
            stp.x = stp.x + dOffsetX;
            stp.y = stp.y + dOffsetY;
            pCustomEntity.SetPoint("First", stp);
        }
        else if (lGridIndex == 1)
        {
            ept.x = ept.x + dOffsetX;
            ept.y = ept.y + dOffsetY;
            pCustomEntity.SetPoint("BasePoint", ept);
        }
        else
        {
            dimpt.x = dimpt.x + dOffsetX;
            dimpt.y = dimpt.y + dOffsetY;
            pCustomEntity.SetPoint("DimPoint", dimpt);
        }
        mxOcx.SetEventRet(1);
    }
}


固定参数绘批注


function DoCommentFix() {
    var comment = mxOcx.NewEntity("IMxDrawComment");
    comment.Text = "固定参数绘批注";
    comment.TextHeight = 10;
    var basepos = mxOcx.NewPoint();
    basepos.x = 0;
    basepos.y = 10;
    var pos = mxOcx.NewPoint();
    pos.x = 20;
    pos.y = 30;
    //基点
    comment.BasePoint = basepos;
    //位置
    comment.Position = pos;
    var comobj = mxOcx.ObjectIdToObject( mxOcx.DrawEntity(comment) );
    comobj.TextStyle = "MyCommentFont";
    mxOcx.ZoomAll();
}


效果展示:


biao6.png


二、参数绘制矩形标注


js中实现代码说明:


function DoFixRectComment()
{
    var ent = mxOcx.DrawCustomEntity("TestMxCustomEntity""");
    var basept = mxOcx.NewPoint();
    basept.x = 100;
    basept.y = 100;
    ent.SetPoint("BasePoint", basept);
    ent.SetString("Text""固定矩形标注");
    ent.SetDouble("TextHeight", 100);
    ent.SetLong("EdgeNumber", 2);
    ent.SetDouble("ShapRadius", 1);
    var dimpt = mxOcx.NewPoint();
    dimpt.x = 200;
    dimpt.y = 200;
    ent.SetPoint("DimPoint", dimpt);
    var frstPt = mxOcx.NewPoint();
    frstPt.x = 0;
    frstPt.y = 0;
    ent.SetPoint("First", frstPt);
    ent.TextStyle = "MyCommentFont";
}


效果展示:


biao7.png


三、参数绘制圆形标注


js中实现代码说明:


function DoFixCircleComment()
{
    var ent = mxOcx.DrawCustomEntity("TestMxCustomEntity""");
    var basept = mxOcx.NewPoint();
    basept.x = 100;
    basept.y = 100;
    ent.SetPoint("BasePoint", basept);
    ent.SetString("Text""固定参数绘制圆形标注");
    ent.SetDouble("TextHeight", 100);
    //标注位置提示多边形的边数. 小于2不绘制,=2绘制圆,大于2绘制多边形
    ent.SetLong("EdgeNumber", 2);
    ent.SetDouble("ShapRadius", 1);
    var dimpt = mxOcx.NewPoint();
    dimpt.x = 200;
    dimpt.y = 200;
    ent.SetPoint("DimPoint", dimpt);
    var frstPt = mxOcx.NewPoint();
    frstPt.x = 0;
    frstPt.y = 0;
    ent.SetPoint("First", frstPt);
    ent.TextStyle = "MyCommentFont";
    ent.SetLong("isCircle", 1);
}


效果展示:


biao8.png


四、参数绘制圆形云线标注


js中实现代码说明:


function DoCloudCircleCommentFix() {
    var comment = mxOcx.NewEntity("IMxDrawComment");
    comment.Text = "固定参数绘圆形云线标注";
    comment.TextHeight = 50;
    var frstPt = mxOcx.NewPoint();
    frstPt.x = -200;
    frstPt.y = -200;
    var basepos = mxOcx.NewPoint();
    basepos.x = 0;
    basepos.y = 10;
    var pos = mxOcx.NewPoint();
    pos.x = 200;
    pos.y = 300;
    //基点
    comment.BasePoint = basepos;
    //位置
    comment.Position = pos;
    //标注位置提示多边形的半径
    comment.ShapRadius = 50;
    //标注框类型
    comment.BoundingBoxType = 5;
    //标注箭头类型
    comment.ArrowType = 2;
    var points = mxOcx.NewComObject("IMxDrawPoints");
    points.Add2(frstPt);
    points.Add2(basepos);
    //标注框坐标数据
    comment.Bounding = points;
    var comobj = mxOcx.ObjectIdToObject(mxOcx.DrawEntity(comment));
    comobj.TextStyle = "MyCommentFont";
    mxOcx.ZoomAll();
}


效果展示:


biao9.png



五、交互绘制批注


js中实现代码说明:


动态拖放时的绘制事件:


function DynWorldDrawComment( pCustomEntity, pWorldDraw, curPt) {
    // 得到绘制参数.
 
    var sText       = pCustomEntity.GetString("Text");
    var dTextHeight = pCustomEntity.GetDouble("TextHeight");
    var iEdgeNumber  = pCustomEntity.GetLong("EdgeNumber");
    var dShapRadius = pCustomEntity.GetDouble("ShapRadius");
    // 创建一个批注对象.
    var comment = mxOcx.NewEntity("IMxDrawComment");
    comment.Text = sText;
    comment.TextHeight = dTextHeight;
    comment.EdgeNumber = iEdgeNumber;
    comment.ShapRadius = dShapRadius;
    comment.basePoint = curPt;
    comment.Position = curPt;
    pWorldDraw.TextStyle = "MyCommentFont";
    // 动态绘制.
    pWorldDraw.DrawEntity(comment);
}


动态绘制文字:


function  DynWorldDrawComment2( pCustomEntity,pWorldDraw,  curPt) {
    // 得到绘制参数.
 
    var sText = pCustomEntity.GetString("Text");
    var dTextHeight = pCustomEntity.GetDouble("TextHeight");
    var iEdgeNumber = pCustomEntity.GetLong("EdgeNumber");
    var dShapRadius = pCustomEntity.GetDouble("ShapRadius");
    var  basePoint = pCustomEntity.GetPoint("BasePoint");
    // 创建一个批注对象.
    var comment = mxOcx.NewEntity("IMxDrawComment");
    comment.Text        = sText;
    comment.TextHeight  = dTextHeight;
    comment.EdgeNumber  = iEdgeNumber;
    comment.ShapRadius  = dShapRadius;
    comment.basePoint   = basePoint;
    comment.Position = curPt;
    // 设置文字样式。
    pWorldDraw.TextStyle = "MyCommentFont";
    // 动态绘制.
    pWorldDraw.DrawEntity(comment);
}


动态绘制文字:


function DoComment() {
    // 出来一个对象,让用户输入文字.
    var winWidth = 440;
    var winHeight = 140;
    var winLeft = (screen.width - winWidth) / 2;
    var winTop = (screen.height - winHeight) / 2 - 20;
    var str = 'dialogHeight:' + winHeight + 'px;dialogWidth:' + winWidth + 'px;dialogTop:' + winTop + 'px;dialogLeft:' + winLeft + 'px;resizable:yes;center:yes;status:no;'
    var rt = window.showModalDialog("Gettext.htm?tmp=" + Math.random(), "输入文字", str);
    var txt;
    if (typeof (rt) == "undefined") {
        return;
    } else {
        var arr = rt.split(",");
        txt = arr[0];
    }
    // 加入换行操作符\\P
    //txt = txt + "\\PTEST";
    // 创建一个文字样式,用于批注文字字体.
    mxOcx.AddTextStyle2("MyCommentFont","黑体",0.7);
    // 创建一个与用户交互取点的对象。
    var getPt = mxOcx.NewComObject("IMxDrawUiPrPoint");
    getPt.message = "输入标注插入基点";
    // 开始取第一个点。
    if (getPt.go() != 1)
        return;
    // 创建一个与用户交互取点的对象。
    var getSecondPt = mxOcx.NewComObject("IMxDrawUiPrPoint");
    getSecondPt.message = "输入标注位置点";
    getSecondPt.basePoint = getPt.value();
    getSecondPt.setUseBasePt(false);
    spDrawData = getSecondPt.InitUserDraw("DrawComment2");
    // 设置动态绘制参数.
    spDrawData.SetPoint("BasePoint", getPt.value());
    spDrawData.SetString("Text", txt);
    spDrawData.SetDouble("TextHeight", 100);
    spDrawData.SetLong("EdgeNumber", 0);
    spDrawData.SetDouble("ShapRadius", 300);
    // 开始取第二个点。
    if (getSecondPt.go() != 1)
        return;
    var ret = spDrawData.Draw();
    // 设置绘制的批注文字样式。
    for (var i = 0; i < ret.Count; i++)
    {
        var ent = ret.AtObject(i);
        ent.TextStyle = "MyCommentFont";
        ent.colorIndex = 4;
    }
}


六、交互绘制矩形框批注


js中实现代码说明:


动态拖放时的绘制事件:


function  DynWorldDrawComment2( pCustomEntity,pWorldDraw,  curPt) {
    // 得到绘制参数.
 
    var sText = pCustomEntity.GetString("Text");
    var dTextHeight = pCustomEntity.GetDouble("TextHeight");
    var iEdgeNumber = pCustomEntity.GetLong("EdgeNumber");
    var dShapRadius = pCustomEntity.GetDouble("ShapRadius");
    var  basePoint = pCustomEntity.GetPoint("BasePoint");
    // 创建一个批注对象.
    var comment = mxOcx.NewEntity("IMxDrawComment");
    comment.Text        = sText;
    comment.TextHeight  = dTextHeight;
    comment.EdgeNumber  = iEdgeNumber;
    comment.ShapRadius  = dShapRadius;
    comment.basePoint   = basePoint;
    comment.Position = curPt;
    // 设置文字样式。
    pWorldDraw.TextStyle = "MyCommentFont";
    // 动态绘制.
    pWorldDraw.DrawEntity(comment);
}


动态绘制文字:


function ExplodeFun(pCustomEntity, pWorldDraw, txt) {
    var sGuid = pCustomEntity.Guid;
    if (sGuid == "TestMxCustomEntity1") {
        if (!pCustomEntity.IsHave("First"))
            return;
        var stp = pCustomEntity.GetPoint("First");
        var ept = pCustomEntity.GetPoint("BasePoint");
        var dimpt = pCustomEntity.GetPoint("DimPoint");
        var txt = pCustomEntity.GetString("Text");
        var textH = pCustomEntity.GetDouble("TextHeight");
        var edgeNum = pCustomEntity.GetLong("EdgeNumber");
        var shapRadius = pCustomEntity.GetDouble("ShapRadius");
        var isCircle = pCustomEntity.GetLong("isCircle");
        var comment = mxOcx.NewEntity("IMxDrawComment");
        comment.Text = txt;
        comment.TextHeight = textH;
        comment.EdgeNumber = edgeNum;
        comment.ShapRadius = shapRadius;
        comment.basePoint = ept;
        comment.Position = dimpt;
        pWorldDraw.TextStyle = "MyCommentFont";
        // 动态绘制.
        pWorldDraw.DrawEntity(comment);
        // 绘制矩形框.
        if (isCircle) {
            var dR = stp.DistanceTo(ept) * 0.5;
            var vec = stp.SumVector(ept);
            vec.Mult(0.5);
            ept.Add(vec);
            pWorldDraw.DrawCircle(ept.x, ept.y, dR);
        }
        else {
            pWorldDraw.DrawLine(stp.x, stp.y, stp.x, ept.y);
            pWorldDraw.DrawLine(stp.x, ept.y, ept.x, ept.y);
            pWorldDraw.DrawLine(ept.x, ept.y, ept.x, stp.y);
            pWorldDraw.DrawLine(ept.x, stp.y, stp.x, stp.y);
        }
        mxOcx.SetEventRet(1);
    }
}


动态绘制文字:


function DoComment3() {
    var getPt = mxOcx.NewComObject("IMxDrawUiPrPoint");
    getPt.message = "点取第一点";
    if (getPt.go() != 1) {
        return;
    }
    var frstPt = getPt.value();
    if (frstPt == null)
        return;
    var utl = mxOcx.NewUtility();
    var secondPt = utl.GetCorner(frstPt, "点取第二点");
    if (secondPt == null)
        return;
    var param = mxOcx.NewResbuf();
    param.AddString("");
    param.AddDouble(200);
    var ret = mxOcx.CallEx("Mx_ShowMTextDialog", param);
    if (ret.AtString(0) != "Ok")
    {
        return;
    }
    var txt = ret.AtString(1);
    var txtH = ret.AtDouble(2);
    var txtColorIndex = ret.AtLong(3);
    // 加入换行操作符\\P
    //txt = txt + "\\PTEST";
    // 创建一个文字样式,用于批注文字字体.
    mxOcx.AddTextStyle2("MyCommentFont", "黑体", 0.7);
    // 创建一个与用户交互取点的对象。
    var getSecondPt = mxOcx.NewComObject("IMxDrawUiPrPoint");
    getSecondPt.message = "输入标注位置点";
    getSecondPt.basePoint = secondPt;
    getSecondPt.setUseBasePt(false);
    spDrawData = getSecondPt.InitUserDraw("DrawComment2");
    // 设置动态绘制参数.
    spDrawData.SetPoint("BasePoint", secondPt);
    spDrawData.SetString("Text", txt);
    spDrawData.SetDouble("TextHeight", txtH);
    spDrawData.SetLong("EdgeNumber", 2);
    spDrawData.SetDouble("ShapRadius", 1);
 
    // 开始取第二个点。
    if (getSecondPt.go() != 1)
        return;
    var ent = mxOcx.DrawCustomEntity("TestMxCustomEntity1", "");
    ent.SetPoint("BasePoint", secondPt);
    ent.SetString("Text", txt);
    ent.SetDouble("TextHeight", txtH);
    ent.SetLong("EdgeNumber", 2);
    ent.SetDouble("ShapRadius", 1);
    ent.SetPoint("DimPoint", getSecondPt.value());
    ent.SetPoint("First", frstPt);
    ent.TextStyle = "MyCommentFont";
    ent.colorIndex = txtColorIndex;
}


七、交互绘制圆形标注


js中实现代码说明:


动态拖放时的绘制事件:


function DoDynWorldDrawFun(dX,dY,pWorldDraw,pData) {
    //自定义实体的GUID标识符
    var sGuid = pData.Guid;
    //设置自定义事件的返回值
    mxOcx.SetEventRet(0);
 
    var curPt = mxOcx.NewPoint();
    curPt.x = dX;
    curPt.y = dY;
    if (sGuid == "DrawCircle") {
    var pt1 = pData.GetPoint("pt1");
    var dR = curPt.DistanceTo(pt1) * 0.5;
    var vec = curPt.SumVector(pt1);
    vec.Mult(0.5);
    pt1.Add(vec);
    pWorldDraw.DrawCircle(pt1.x, pt1.y, dR);
}
 
}


动态拖放时的绘制事件:


function  DynWorldDrawComment2( pCustomEntity,pWorldDraw,  curPt) {
    // 得到绘制参数.
 
    var sText = pCustomEntity.GetString("Text");
    var dTextHeight = pCustomEntity.GetDouble("TextHeight");
    var iEdgeNumber = pCustomEntity.GetLong("EdgeNumber");
    var dShapRadius = pCustomEntity.GetDouble("ShapRadius");
    var  basePoint = pCustomEntity.GetPoint("BasePoint");
    // 创建一个批注对象.
    var comment = mxOcx.NewEntity("IMxDrawComment");
    comment.Text        = sText;
    comment.TextHeight  = dTextHeight;
    comment.EdgeNumber  = iEdgeNumber;
    comment.ShapRadius  = dShapRadius;
    comment.basePoint   = basePoint;
    comment.Position = curPt;
    // 设置文字样式。
    pWorldDraw.TextStyle = "MyCommentFont";
    // 动态绘制.
    pWorldDraw.DrawEntity(comment);
}


动态绘制文字:


function ExplodeFun(pCustomEntity, pWorldDraw, txt) {
    var sGuid = pCustomEntity.Guid;
    if (sGuid == "TestMxCustomEntity1") {
        if (!pCustomEntity.IsHave("First"))
            return;
        var stp = pCustomEntity.GetPoint("First");
        var ept = pCustomEntity.GetPoint("BasePoint");
        var dimpt = pCustomEntity.GetPoint("DimPoint");
        var txt = pCustomEntity.GetString("Text");
        var textH = pCustomEntity.GetDouble("TextHeight");
        var edgeNum = pCustomEntity.GetLong("EdgeNumber");
        var shapRadius = pCustomEntity.GetDouble("ShapRadius");
        var isCircle = pCustomEntity.GetLong("isCircle");
        var comment = mxOcx.NewEntity("IMxDrawComment");
        comment.Text = txt;
        comment.TextHeight = textH;
        comment.EdgeNumber = edgeNum;
        comment.ShapRadius = shapRadius;
        comment.basePoint = ept;
        comment.Position = dimpt;
        pWorldDraw.TextStyle = "MyCommentFont";
        // 动态绘制.
        pWorldDraw.DrawEntity(comment);
        // 绘制矩形框.
        if (isCircle) {
            var dR = stp.DistanceTo(ept) * 0.5;
            var vec = stp.SumVector(ept);
            vec.Mult(0.5);
            ept.Add(vec);
            pWorldDraw.DrawCircle(ept.x, ept.y, dR);
        }
        else {
            pWorldDraw.DrawLine(stp.x, stp.y, stp.x, ept.y);
            pWorldDraw.DrawLine(stp.x, ept.y, ept.x, ept.y);
            pWorldDraw.DrawLine(ept.x, ept.y, ept.x, stp.y);
            pWorldDraw.DrawLine(ept.x, stp.y, stp.x, stp.y);
        }
        mxOcx.SetEventRet(1);
    }
}


动态绘制文字:


function DoCircleComment() {
    var getPt = mxOcx.NewComObject("IMxDrawUiPrPoint");
    getPt.message = "点取第一点";
    if (getPt.go() != 1) {
        return;
    }
    var frstPt = getPt.value();
    if (frstPt == null)
        return;
    var getPt2 = mxOcx.NewComObject("IMxDrawUiPrPoint");
    getPt2.message = "指定第二个点";
    var spDrawData = getPt2.InitUserDraw("DrawCircle");
    spDrawData.SetPoint("pt1", frstPt);
    if (getPt2.go() != 1) {
        return;
    }
    var secondPt = getPt2.value();
    // 出来一个对象,让用户输入文字.
    var winWidth = 440;
    var winHeight = 140;
    var winLeft = (screen.width - winWidth) / 2;
    var winTop = (screen.height - winHeight) / 2 - 20;
    var str = 'dialogHeight:' + winHeight + 'px;dialogWidth:' + winWidth + 'px;dialogTop:' + winTop + 'px;dialogLeft:' + winLeft + 'px;resizable:yes;center:yes;status:no;'
    var rt = window.showModalDialog("Gettext.htm?tmp=" + Math.random(), "输入文字", str);
    var txt;
    if (typeof (rt) == "undefined") {
        return;
    } else {
        var arr = rt.split(",");
        txt = arr[0];
    }
    // 加入换行操作符\\P
    //txt = txt + "\\PTEST";
    // 创建一个文字样式,用于批注文字字体.
    mxOcx.AddTextStyle2("MyCommentFont", "黑体", 0.7);
    // 创建一个与用户交互取点的对象。
    var getSecondPt = mxOcx.NewComObject("IMxDrawUiPrPoint");
    getSecondPt.message = "输入标注位置点";
    getSecondPt.basePoint = secondPt;
    getSecondPt.setUseBasePt(false);
    spDrawData = getSecondPt.InitUserDraw("DrawComment2");
    // 设置动态绘制参数.
    spDrawData.SetPoint("BasePoint", secondPt);
    spDrawData.SetString("Text", txt);
    spDrawData.SetDouble("TextHeight", 100);
    spDrawData.SetLong("EdgeNumber", 2);
    spDrawData.SetDouble("ShapRadius", 1);
    // 开始取第二个点。
    if (getSecondPt.go() != 1)
        return;
    var ent = mxOcx.DrawCustomEntity("TestMxCustomEntity1", "");
    ent.SetPoint("BasePoint", secondPt);
    ent.SetString("Text", txt);
    ent.SetDouble("TextHeight", 100);
    ent.SetLong("EdgeNumber", 2);
    ent.SetDouble("ShapRadius", 1);
    ent.SetPoint("DimPoint", getSecondPt.value());
    ent.SetPoint("First", frstPt);
    ent.SetLong("isCircle", 1);
}


八、交互绘制云线标注


js中实现代码说明:


动态拖放时的绘制事件:


function DoDynWorldDrawFun(dX,dY,pWorldDraw,pData) {
    //自定义实体的GUID标识符
    var sGuid = pData.Guid;
    //设置自定义事件的返回值
    mxOcx.SetEventRet(0);
 
    var curPt = mxOcx.NewPoint();
    curPt.x = dX;
    curPt.y = dY;
    if (sGuid == "DrawCircle") {
    var pt1 = pData.GetPoint("pt1");
    var dR = curPt.DistanceTo(pt1) * 0.5;
    var vec = curPt.SumVector(pt1);
    vec.Mult(0.5);
    pt1.Add(vec);
    pWorldDraw.DrawCircle(pt1.x, pt1.y, dR);
}
 
}


动态拖放时的绘制事件:


function  DynWorldDrawComment2( pCustomEntity,pWorldDraw,  curPt) {
    // 得到绘制参数.
 
    var sText = pCustomEntity.GetString("Text");
    var dTextHeight = pCustomEntity.GetDouble("TextHeight");
    var iEdgeNumber = pCustomEntity.GetLong("EdgeNumber");
    var dShapRadius = pCustomEntity.GetDouble("ShapRadius");
    var  basePoint = pCustomEntity.GetPoint("BasePoint");
    // 创建一个批注对象.
    var comment = mxOcx.NewEntity("IMxDrawComment");
    comment.Text        = sText;
    comment.TextHeight  = dTextHeight;
    comment.EdgeNumber  = iEdgeNumber;
    comment.ShapRadius  = dShapRadius;
    comment.basePoint   = basePoint;
    comment.Position = curPt;
    // 设置文字样式。
    pWorldDraw.TextStyle = "MyCommentFont";
    // 动态绘制.
    pWorldDraw.DrawEntity(comment);
}


动态绘制文字:


function ExplodeFun(pCustomEntity, pWorldDraw, txt) {
    var sGuid = pCustomEntity.Guid;
    if (sGuid == "TestMxCustomEntity1") {
        if (!pCustomEntity.IsHave("First"))
            return;
        var stp = pCustomEntity.GetPoint("First");
        var ept = pCustomEntity.GetPoint("BasePoint");
        var dimpt = pCustomEntity.GetPoint("DimPoint");
        var txt = pCustomEntity.GetString("Text");
        var textH = pCustomEntity.GetDouble("TextHeight");
        var edgeNum = pCustomEntity.GetLong("EdgeNumber");
        var shapRadius = pCustomEntity.GetDouble("ShapRadius");
        var isCircle = pCustomEntity.GetLong("isCircle");
        var comment = mxOcx.NewEntity("IMxDrawComment");
        comment.Text = txt;
        comment.TextHeight = textH;
        comment.EdgeNumber = edgeNum;
        comment.ShapRadius = shapRadius;
        comment.basePoint = ept;
        comment.Position = dimpt;
        pWorldDraw.TextStyle = "MyCommentFont";
        // 动态绘制.
        pWorldDraw.DrawEntity(comment);
        // 绘制矩形框.
        if (isCircle) {
            var dR = stp.DistanceTo(ept) * 0.5;
            var vec = stp.SumVector(ept);
            vec.Mult(0.5);
            ept.Add(vec);
            pWorldDraw.DrawCircle(ept.x, ept.y, dR);
        }
        else {
            pWorldDraw.DrawLine(stp.x, stp.y, stp.x, ept.y);
            pWorldDraw.DrawLine(stp.x, ept.y, ept.x, ept.y);
            pWorldDraw.DrawLine(ept.x, ept.y, ept.x, stp.y);
            pWorldDraw.DrawLine(ept.x, stp.y, stp.x, stp.y);
        }
        mxOcx.SetEventRet(1);
    }
}


动态绘制文字:


function DoCloudLineComment() {
    var param = mxOcx.NewResbuf();
    param.AddString("");
    param.AddDouble(100);
    var ret = mxOcx.CallEx("Mx_ShowMTextDialog", param);
    if (ret.AtString(0) != "Ok") {
        return;
    }
    var txt = ret.AtString(1);
    var txtH = ret.AtDouble(2);
    var txtColorIndex = ret.AtLong(3);
    // 加入换行操作符\\P
    //txt = txt + "\\PTEST";
    // 创建一个文字样式,用于批注文字字体.
    mxOcx.AddTextStyle2("MyCommentFont", "黑体", 0.7);
    // 创建一个与用户交互取点的对象。
    var getPt = mxOcx.NewComObject("IMxDrawUiPrPoint");
    getPt.message = "输入标注插入基点";
    // 设置动态绘制参数.
    var spDrawData = getPt.InitUserDraw("DrawComment");
    spDrawData.SetString("Text", txt);
    spDrawData.SetDouble("TextHeight", txtH);
    spDrawData.SetLong("EdgeNumber", 0);
    spDrawData.SetDouble("ShapRadius", 300);
    // 开始取第一个点。
    if (getPt.go() != 1)
        return;
    // 创建一个与用户交互取点的对象。
    var getSecondPt = mxOcx.NewComObject("IMxDrawUiPrPoint");
    getSecondPt.message = "输入标注位置点";
    getSecondPt.basePoint = getPt.value();
    getSecondPt.setUseBasePt(false);
    spDrawData = getSecondPt.InitUserDraw("DrawComment2");
    // 设置动态绘制参数.
    spDrawData.SetPoint("BasePoint", getPt.value());
    spDrawData.SetString("Text", txt);
    spDrawData.SetDouble("TextHeight", txtH);
    spDrawData.SetLong("EdgeNumber", 0);
    spDrawData.SetDouble("ShapRadius", 300);
    // 开始取第二个点。
    if (getSecondPt.go() != 1)
        return;
    var ret = spDrawData.Draw();
    // 设置绘制的批注文字样式。
    for (var i = 0; i < ret.Count; i++) {
        var ent = ret.AtObject(i);
        ent.TextStyle = "MyCommentFont";
        ent.colorIndex = txtColorIndex;
        if(ent.ObjectName == "McDbComment")
        {
            ent.BoundingBoxType = 4;
            ent.ArrowType = 2;
            ent.ShapRadius = 40;
        }
    }
}


九、交互绘制圆形云线标注


js中实现代码说明:


动态拖放时的绘制事件:


function DoDynWorldDrawFun(dX,dY,pWorldDraw,pData) {
    //自定义实体的GUID标识符
    var sGuid = pData.Guid;
    //设置自定义事件的返回值
    mxOcx.SetEventRet(0);
 
    var curPt = mxOcx.NewPoint();
    curPt.x = dX;
    curPt.y = dY;
    if (sGuid == "DrawCircle") {
    var pt1 = pData.GetPoint("pt1");
    var dR = curPt.DistanceTo(pt1) * 0.5;
    var vec = curPt.SumVector(pt1);
    vec.Mult(0.5);
    pt1.Add(vec);
    pWorldDraw.DrawCircle(pt1.x, pt1.y, dR);
}
 
}


动态拖放时的绘制事件:


function DynWorldDrawCloudComment(pCustomEntity, pWorldDraw, curPt) {
    // 得到绘制参数.
    var sText = pCustomEntity.GetString("Text");
    var dTextHeight = pCustomEntity.GetDouble("TextHeight");
    var iEdgeNumber = pCustomEntity.GetLong("EdgeNumber");
    var dShapRadius = pCustomEntity.GetDouble("ShapRadius");
    var basePoint = pCustomEntity.GetPoint("BasePoint");
    var frstPt = pCustomEntity.GetPoint("frstPt");
    // 创建一个批注对象.
    var comment = mxOcx.NewEntity("IMxDrawComment");
    comment.Text = sText;
    comment.TextHeight = dTextHeight;
    comment.EdgeNumber = iEdgeNumber;
    comment.ShapRadius = dShapRadius;
    comment.basePoint = basePoint;
    comment.Position = curPt;
    comment.BoundingBoxType = 5;
    comment.ArrowType = 2;
    comment.ShapRadius = 40;
    var points = mxOcx.NewComObject("IMxDrawPoints");
    //向点数组中增加一个点坐标
    points.Add2(frstPt);
    points.Add2(basePoint);
    //标注框坐标数据
    comment.Bounding = points;
    var tmpp = mxOcx.NewResbuf();
    tmpp.AddLong(1);
    comment.SetProp("isAlwaysShowLineWeight", tmpp);
    //线重
    comment.Lineweight = 25;
    //实体的CAD颜色索引值属性
    comment.colorIndex = 1;
    // 设置文字样式。
    pWorldDraw.TextStyle = "MyCommentFont";
    // 动态绘制.
    pWorldDraw.DrawEntity(comment);
}


动态绘制文字:


function DoCloudCircleComment() {
    var getPt = mxOcx.NewComObject("IMxDrawUiPrPoint");
    getPt.message = "点取第一点";
    if (getPt.go() != 1) {
        return;
    }
    var frstPt = getPt.value();
    if (frstPt == null)
        return;
    var getPt2 = mxOcx.NewComObject("IMxDrawUiPrPoint");
    getPt2.message = "指定第二个点";
    var spDrawData = getPt2.InitUserDraw("DrawCircle");
    spDrawData.SetPoint("pt1", frstPt);
    if (getPt2.go() != 1) {
        return;
    }
    var secondPt = getPt2.value();
    if (secondPt == null)
        return;
    var param = mxOcx.NewResbuf();
    param.AddString("");
    param.AddDouble(100);
    var ret = mxOcx.CallEx("Mx_ShowMTextDialog", param);
    if (ret.AtString(0) != "Ok") {
        return;
    }
    var txt = ret.AtString(1);
    var txtH = ret.AtDouble(2);
    var txtColorIndex = ret.AtLong(3);
    // 加入换行操作符\\P
    //txt = txt + "\\PTEST";
    // 创建一个文字样式,用于批注文字字体.
    mxOcx.AddTextStyle2("MyCommentFont", "黑体", 0.7);
    // 创建一个与用户交互取点的对象。
    var getSecondPt = mxOcx.NewComObject("IMxDrawUiPrPoint");
    getSecondPt.message = "输入标注位置点";
    getSecondPt.basePoint = secondPt;
    getSecondPt.setUseBasePt(false);
    spDrawData = getSecondPt.InitUserDraw("DrawCloudComment");
    // 设置动态绘制参数.
    spDrawData.SetPoint("frstPt", frstPt);
    spDrawData.SetPoint("BasePoint", secondPt);
    spDrawData.SetString("Text", txt);
    spDrawData.SetDouble("TextHeight", txtH);
    spDrawData.SetLong("EdgeNumber", 2);
    spDrawData.SetDouble("ShapRadius", 1);
    // 开始取第二个点。
    if (getSecondPt.go() != 1)
        return;
    var ret = spDrawData.Draw();
    // 设置绘制的批注文字样式。
    var ent = ret.AtObject(0);
    ent.colorIndex = 1;
}


十、线型标注


主要用到函数说明:


_DMxDrawX::DrawDimRotated


绘制一个线型标注。详细说明如下:


参数说明

DOUBLE dExtLine1PointX

输入第一条界线的起始点X值

DOUBLE dExtLine1PointY

输入第一条界线的起始点Y值

DOUBLE dExtLine2PointX

输入第二条界线的起始点X值

DOUBLE dExtLine2PointY

输入第二条界线的起始点Y值

DOUBLE dDimLineLocationX

输入标注线自身上的点X值

DOUBLE dDimLineLocationY

输入标注线自身上的点Y值

DOUBLE dRotationAngle

输入标注的旋转角


C#中实现代码说明:


private void DrawDimRotated()
{
    axMxDrawX1.AddDimStyle("MyDimStyle""41,0.18,141,0.09,40,200""77,1,271,3""""");
    axMxDrawX1.DimStyle = "MyDimStyle";
    //把颜色改回黑白色
    axMxDrawX1.DrawCADColorIndex = 0;
    //把线型改成实线
    axMxDrawX1.LineType = "";
    //设置线宽 4
    axMxDrawX1.LineWidth = 0;
    //绘制一个线型标注,参数一为输入第一条界线的起始点X值,参数二为输入第一条界线的起始点Y值
    //  参数三为输入第二条界线的起始点X值,参数四为输入第二条界线的起始点Y值
    //  参数五为输入标注线自身上的点X值,参数六为输入标注线自身上的点Y值
    //  参数七为输入标注的旋转角
    axMxDrawX1.DrawDimRotated(0, 70, 50, 70, 25, 71, 0);
    axMxDrawX1.DrawDimRotated(0, 72, 0, 74, 15, 73, 0.771);
    //把所有的实体都放到当前显示视区
    axMxDrawX1.ZoomAll();
    //更新视区显示
axMxDrawX1.UpdateDisplay();
  
}


效果展示:


c#drawdim1.png


js中实现代码说明:


function DrawDimRotated (){
    mxOcx.AddDimStyle("MyDimStyle""41,0.18,141,0.09,40,200""77,1,271,3""""");
    mxOcx.DimStyle = "MyDimStyle";
    //把颜色改回黑白色
    mxOcx.DrawColor = 0;
    //把线型改成实线
    mxOcx.LineType = "";
    //设置线宽 4
    mxOcx.LineWidth = 0;
    //绘制一个线型标注,参数一为输入第一条界线的起始点X值,参数二为输入第一条界线的起始点Y值
    //  参数三为输入第二条界线的起始点X值,参数四为输入第二条界线的起始点Y值
    //  参数五为输入标注线自身上的点X值,参数六为输入标注线自身上的点Y值
    //  参数七为输入标注的旋转角
    mxOcx.DrawDimRotated(0, 70, 50, 70, 25, 71, 0);
    mxOcx.DrawDimRotated(0, 72, 0, 74, 15, 73, 0.771);
    //把所有的实体都放到当前显示视区
    mxOcx.ZoomAll();
    //更新视区显示
    mxOcx.UpdateDisplay();
}


效果展示:


biao1.png


十一、半径标注


主要用到函数说明:


_DMxDrawX::DrawDimRadial


绘制一个半径标注。详细说明如下:


参数说明

DOUBLE dCenterX

被标注的曲线的中点X值

DOUBLE dCenterY

被标注的曲线的中点Y值

DOUBLE dChordPointX

被标注的曲线上的点X值

DOUBLE dChordPointY

被标注的曲线上的点Y值

DOUBLE dLeaderLength

输入箭头长度


C#中实现代码说明:


private void DrawDimRadial()
{
    axMxDrawX1.AddDimStyle("MyDimStyle""41,0.18,141,0.09,40,200""77,1,271,3""""");
    axMxDrawX1.DimStyle = "MyDimStyle";
    //把颜色改回黑白色
    axMxDrawX1.DrawCADColorIndex = 0;
    //把线型改成实线
    axMxDrawX1.LineType = "";
    //设置线宽 4
    axMxDrawX1.LineWidth = 0;
    //绘制一个半径标注
    //参数一为被标注的曲线的中点X值 ,参数二为被标注的曲线的中点Y值
    //参数三为被标注的曲线上的点X值,参数四为被标注的曲线上的点Y值
    //参数五为输入箭头长度
    axMxDrawX1.DrawDimRadial(50, 660, 50, 650, 0);
    //把所有的实体都放到当前显示视区
    axMxDrawX1.ZoomAll();
    //更新视区显示
    axMxDrawX1.UpdateDisplay();
}


效果展示:


c#drawdim2.png


js中实现代码说明:


function DrawDimRadial(){
    mxOcx.AddDimStyle("MyDimStyle""41,0.18,141,0.09,40,200""77,1,271,3""""");
    mxOcx.DimStyle = "MyDimStyle";
    //把颜色改回黑白色
    mxOcx.DrawColor = 0;
    //把线型改成实线
    mxOcx.LineType = "";
    //设置线宽 4
    mxOcx.LineWidth = 0;
    //绘制一个半径标注
    //参数一为被标注的曲线的中点X值 ,参数二为被标注的曲线的中点Y值
    //参数三为被标注的曲线上的点X值,参数四为被标注的曲线上的点Y值
    //参数五为输入箭头长度
    mxOcx.DrawDimRadial (50, 660, 50, 650, 0);
    //把所有的实体都放到当前显示视区
    mxOcx.ZoomAll();
    //更新视区显示
    mxOcx.UpdateDisplay();
}


效果展示:


biao2.png


十二、直径标注


主要用到函数说明:


_DMxDrawX::DrawDimDiametric


绘制一个直径标注。详细说明如下:


参数说明

DOUBLE dChordPointX

在被标注的曲线上的第一个点X值

DOUBLE dChordPointY

在被标注的曲线上的第一个点Y值

DOUBLE dFarChordPointX

在被标注的曲线上的第二个点X值,这个点与chordPoint直径相对

DOUBLE dFarChordPointY

在被标注的曲线上的第二个点Y值,这个点与chordPoint直径相对

DOUBLE dLeaderLength

输入箭头长度


C#中实现代码说明:


private void DrawDimDiametric()
{
    axMxDrawX1.AddDimStyle("MyDimStyle""41,0.18,141,0.09,40,200""77,1,271,3""""");
    axMxDrawX1.DimStyle = "MyDimStyle";
    //把颜色改回黑白色
    axMxDrawX1.DrawCADColor = 0;
    //把线型改成实线
    axMxDrawX1.LineType = "";
    //设置线宽 4
    axMxDrawX1.LineWidth = 0;
    //绘制一个直径标注
    //参数一为在被标注的曲线上的第一个点X值 ,参数二为在被标注的曲线上的第一个点Y值
    //参数三为在被标注的曲线上的第二个点X值,这个点与chordPoint直径相对
    //参数四为在被标注的曲线上的第二个点Y值,这个点与chordPoint直径相对
    //参数五为输入箭头长度
    axMxDrawX1.DrawDimDiametric(50, 570, 60, 600, 100);
    //把所有的实体都放到当前显示视区
    axMxDrawX1.ZoomAll();
    //更新视区显示
    axMxDrawX1.UpdateDisplay();
}


效果展示:


c#drawdim3.png


js中实现代码说明:


function DrawDimDiametric(){
    mxOcx.AddDimStyle("MyDimStyle""41,0.18,141,0.09,40,200""77,1,271,3""""");
    mxOcx.DimStyle = "MyDimStyle";
    //把颜色改回黑白色
    mxOcx.DrawColor = 0;
    //把线型改成实线
    mxOcx.LineType = "";
    //设置线宽 4
    mxOcx.LineWidth = 0;
    //绘制一个直径标注
    //参数一为在被标注的曲线上的第一个点X值 ,参数二为在被标注的曲线上的第一个点Y值
    //参数三为在被标注的曲线上的第二个点X值,这个点与chordPoint直径相对
    //参数四为在被标注的曲线上的第二个点Y值,这个点与chordPoint直径相对
    //参数五为输入箭头长度
    mxOcx.DrawDimDiametric (50, 570, 60, 600, 100);
    //把所有的实体都放到当前显示视区
    mxOcx.ZoomAll();
    //更新视区显示
    mxOcx.UpdateDisplay();
}


效果展示:


biao3.png


十三、对齐标注


主要用到函数说明:


_DMxDrawX::DrawDimAligned


绘制一个对齐标注。详细说明如下:


参数说明

DOUBLE dExtLine1PointX

第一条界线开始点X值

DOUBLE dExtLine1PointY

第一条界线开始点Y值

DOUBLE dExtLine2PointX

第二条界线开始点X值

DOUBLE dExtLine2PointY

第二条界线开始点Y值

DOUBLE dTextPositionX

标注使用的指定标注线位置的定义点X值

DOUBLE dTextPositionY

标注使用的指定标注线位置的定义点Y值


C#中实现代码说明:


private void DrawDimAligned()
{
    axMxDrawX1.AddDimStyle("MyDimStyle", "41,0.18,141,0.09,40,200", "77,1,271,3", "", "");
    axMxDrawX1.DimStyle = "MyDimStyle";
    //把颜色改回黑白色
    axMxDrawX1.DrawCADColorIndex = 0;
    //把线型改成实线
    axMxDrawX1.LineType = "";
    //设置线宽 4
    axMxDrawX1.LineWidth = 0;
    //绘制一个对齐标注
    //参数一为第一条界线开始点X值,参数二为 第一条界线开始点Y值
    //参数三为第二条界线开始点X值
    //参数四为第二条界线开始点Y值
    //参数五为标注使用的指定标注线位置的定义点X值
    //参数六为标注使用的指定标注线位置的定义点Y值
    axMxDrawX1.DrawDimAligned(0, 40, 3, 45, 15, 46);
    //把所有的实体都放到当前显示视区
    axMxDrawX1.ZoomAll();
    //更新视区显示
    axMxDrawX1.UpdateDisplay();
}


效果展示:


c#drawdim5.png


js中实现代码说明:


function DrawDimAligned(){
    mxOcx.AddDimStyle("MyDimStyle", "41,0.18,141,0.09,40,200", "77,1,271,3", "", "");
    mxOcx.DimStyle = "MyDimStyle";
    //把颜色改回黑白色
    mxOcx.DrawColor = 0;
    //把线型改成实线
    mxOcx.LineType = "";
    //设置线宽 4
    mxOcx.LineWidth = 0;
    //绘制一个对齐标注
    //参数一为第一条界线开始点X值,参数二为 第一条界线开始点Y值
    //参数三为第二条界线开始点X值
    //参数四为第二条界线开始点Y值
    //参数五为标注使用的指定标注线位置的定义点X值
    //参数六为标注使用的指定标注线位置的定义点Y值
    mxOcx.DrawDimAligned(0, 40, 3, 45, 15, 46);
    //把所有的实体都放到当前显示视区
    mxOcx.ZoomAll();
    //更新视区显示
    mxOcx.UpdateDisplay();
}


效果展示:


biao5.png


十四、角度标注


主要用到函数说明:


_DMxDrawX::DrawDimAngular


绘制一个角度标注。详细说明如下:


参数说明

DOUBLE dAngleVertexX

角度标注的顶点的X值

DOUBLE dAngleVertexY

角度标注的顶点的Y值

DOUBLE dFirstEndPointX

角度标注第一个参考线上的点X值

DOUBLE dFirstEndPointY

角度标注第一个参考线上的点Y值

DOUBLE dSecondEndPointX

角度标注第二个参考线上的点X值

DOUBLE dSecondEndPointY

角度标注第二个参考线上的点Y值

DOUBLE dTextPointX

文字位置点X值

DOUBLE dTextPointY

文字位置点Y值


C#中实现代码说明:


private void DrawDimAngular()
{
    axMxDrawX1.AddDimStyle("MyDimStyle", "41,0.18,141,0.09,40,200", "77,1,271,3", "", "");
    axMxDrawX1.DimStyle = "MyDimStyle";
    //把颜色改回黑白色
    axMxDrawX1.DrawCADColorIndex = 0;
    //把线型改成实线
    axMxDrawX1.LineType = "";
    //设置线宽 4
    axMxDrawX1.LineWidth = 0;
    //绘制一个角度标注
    //参数一为角度标注的顶点的X值,参数二为角度标注的顶点的Y值
    //参数三为角度标注第一个参考线上的点X值,参数四为角度标注第一个参考线上的点Y值
    //参数五为角度标注第二个参考线上的点X值
    //参数六为角度标注第二个参考线上的点Y值
    //参数七为文字位置点X值,参数八为文字位置点Y值
    axMxDrawX1.DrawDimAngular(500, 5000, 0, 5500, 1000, 5500, 500, 5500);
    //把所有的实体都放到当前显示视区
    axMxDrawX1.ZoomAll();
    //更新视区显示
    axMxDrawX1.UpdateDisplay();
}


效果展示:


c#drawdim4.png


js中实现代码说明:


function DrawDimAngular(){
    mxOcx.AddDimStyle("MyDimStyle", "41,0.18,141,0.09,40,200", "77,1,271,3", "", "");
    mxOcx.DimStyle = "MyDimStyle";
    //把颜色改回黑白色
    mxOcx.DrawColor = 0;
    //把线型改成实线
    mxOcx.LineType = "";
    //设置线宽 4
    mxOcx.LineWidth = 0;
    //绘制一个角度标注
    //参数一为角度标注的顶点的X值,参数二为角度标注的顶点的Y值
    //参数三为角度标注第一个参考线上的点X值,参数四为角度标注第一个参考线上的点Y值
    //参数五为角度标注第二个参考线上的点X值
    //参数六为角度标注第二个参考线上的点Y值
    //参数七为文字位置点X值,参数八为文字位置点Y值
    mxOcx.DrawDimAngular(500, 5000, 0, 5500, 1000, 5500, 500, 5500);
    //把所有的实体都放到当前显示视区
    mxOcx.ZoomAll();
    //更新视区显示
    mxOcx.UpdateDisplay();
}


效果展示:


biao4.png


十五、梦想CAD标注系统变量说明


主要用到函数说明:


IMxDrawDimension::SetDimVarDouble


设置标注属性的实数类型变量值,详细说明如下:


参数说明

[in] LONG iType

该属性的类形值

dVal

设置的值


IMxDrawDimension::GetDimVarDouble


返回标注属性的实数类型变量值,详细说明如下:


参数说明

[in] LONG iType

该属性的类形值


例如: 设置标注文字高度,把文字调度设置成100,140是属性类型,它代表文字高度属性。js代码实现如下:


var id =  mxOcx.DrawDimAligned(0,4000,300,4500,150,4600);
 
var dim = mxOcx.ObjectIdToObject(id);
dim.SetDimVarDouble(140, 100);
dim.RecomputeDimBlock(true);


下面将详细介绍标注属性的实数类型变量值,详细说明如下:


变量类型值实数值说明

dimaltf

143

控制换算单位乘数

dimasz

41

控制尺寸线、引线箭头的大小。并控制钩线的大小

dimcen

141

控制由 DIMCENTER、 DIMDIAMETER 和 DIMRADIUS 命令绘制的圆或圆弧的圆心标记和中心线图形

dimdle

46

当使用小斜线代替箭头进行标注时,设置尺寸线超出尺寸界线的距离

dimdli

43

控制基线标注中尺寸线的间距

dimexe

44

指定尺寸界线超出尺寸线的距离

dimexo

42

指定尺寸界线偏移原点的距离

dimgap

147

当尺寸线分成段以在两段之间放置标注文字时,设置标注文字周围的距离

dimlfac

144

设置线性标注测量值的比例因子

dimrnd

45

将所有标注距离舍入到指定值

dimscale

40

为标注变量(指定尺寸、距离或偏移量)设置全局比例因子。同时还影响leader 命令创建的引线对象的比例

dimtfac

146

按照 dimtxt系统变量的设置,相对于标注文字高度给分数值和公差值的文字高度指定比例因子

dimtm

48

在 dimtol 系统变量或 dimlim系统变量为开的情况下,为标注文字设置最小(下)偏差

dimtp

47

在dimtol 或 dimlim系统变量设置为开的情况下,为标注文字设置最大(上)偏差。dimtp 接受带符号的值

dimtsz

142

指定线性标注、半径标注以及直径标注中替代箭头的小斜线尺寸

dimtvp

145

控制尺寸线上方或下方标注文字的垂直位置

dimtxt

140

指定标注文字的高度,除非当前文字样式具有固定的高度

dimaltrnd

148

舍入换算标注单位


十六、梦想CAD标注系统变量说明1


主要用到函数说明:


IMxDrawDimension::SetDimVarInt


设置标注属性的整数类型变量值,详细说明如下:


参数说明

[in] LONG iType

该属性的类形值

iVal

设置的值


IMxDrawDimension::GetDimVarInt


返回标注属性的整数类型变量值,详细说明如下:


参数说明

[in] LONG iType

该属性的类形值


例如: 设置标注保留一位小数。js代码实现如下:


var id =  mxOcx.DrawDimAligned(0,4000,300,4500,150,4600);
var dim = mxOcx.ObjectIdToObject(id);
dim.SetDimVarInt(271, 1);
dim.RecomputeDimBlock(true);


下面将详细介绍标注属性的整数类型变量值,详细说明如下:


变量类型值实数值说明

dimadec

179

1.使用 dimdec 设置的小数位数绘制角度标注;0-8使用 dimadec 设置的小数位数绘制角度标注。(前面带dim的变量都是标注相关的变量,在"标注样式"对话框和"属性框"里都可以设置这些参数)

dimalt

70

控制标注中换算单位的显示:关.禁用换算单位;开:启用换算单位

dimaltd

171

控制换算单位中小数位的位数

dimalttd

274

设置标注换算单位公差值小数位的位数

dimalttz

286

控制是否对公差值作消零处理

dimaltu

273

为所有标注样式族(角度标注除外)换算单位设置单位格式

dimaltz

285

控制是否对换算单位标注值作消零处理。dimaltz 值为 0- 3 时只影响英尺-英寸标注

dimaunit

275

设置角度标注的单位格式:0.十进制度数 1.度/分/秒2.百分度 3.弧度

dimclrd

176

为尺寸线、箭头和标注引线指定颜色。同时控制由 leader命令创建的引线颜色

dimclre

177

为尺寸界线指定颜色

dimclrt

178

为标注文字指定颜色

dimdec

271

设置标注主单位显示的小数位位数。精度基于选定的单位或角度格式

dimfit

287

旧式,除用于保留脚本的完整性外没有任何影响。dimfit 被dimatfit 系统变量和 dimtmove 系统变量代替

dimjust

280

控制标注文字的水平位置

dimlim

72

将极限尺寸生成为默认文字

dimsah

173

控制尺寸线箭头块的显示

dimsd1

281

控制是否禁止显示第一条尺寸线

dimsd2

282

控制是否禁止显示第二条尺寸线

dimse1

75

控制是否禁止显示第一条尺寸界线:关.不禁止显示尺寸界线开.禁止显示尺寸界线

dimse2

76

控制是否禁止显示第二条尺寸界线:关.不禁止显示尺寸界线开.禁止显示尺寸界线

dimsoxd

175

控制是否允许尺寸线绘制到尺寸界线之外:关.不消除尺寸线开.消除尺寸线

dimtad

77

控制文字相对尺寸线的垂直位置

dimtdec

272

为标注主单位的公差值设置显示的小数位位数

dimtih

73

控制所有标注类型(坐标标注除外)的标注文字在尺寸界线内的位置

dimtix

174

在尺寸界线之间绘制文字

dimtofl

172

控制是否将尺寸线绘制在尺寸界线之间(即使文字放置在尺寸界线之外)

dimtoh

74

控制标注文字在尺寸界线外的位置:0或关.将文字与尺寸线对齐1或开.水平绘制文字

dimtol

71

将公差附在标注文字之后。将 dimtol 设置为“开”,将关闭dimlim 系统变量

dimtolj

283

设置公差值相对名词性标注文字的垂直对正方式:0.下 1.中间2.上

dimzin

78

控制是否对主单位值作消零处理

dimunit

270

旧式,除用于保留脚本的完整性外没有任何影响。dimunit 被dimlunit 和 dimfrac 系统变量代替

dimupt

288

控制用户定位文字的选项。0光标仅控制尺寸线的位置1或开光标控制文字以及尺寸线的位置

dimtzin

284

控制是否对公差值作消零处理

dimfrac

276

在 dimlunit 系统变量设置为:4(建筑)或5(分数)时设置分数格式,0.水平 1.斜 2.不堆叠

dimlunit

277

为所有标注类型(除角度标注外)设置单位制

dimatfit

289

当尺寸界线的空间不足以同时放下标注文字和箭头时,本系统变量将确定这两者的排列方式

dimtmove

279

设置标注文字的移动规则

dimazin

79

对角度标注作消零处理

dimdsep

278

指定一个单字符作为创建十进制标注时使用的小数分隔符

dimlwd

371

指定尺寸线的线宽。其值是标准线宽。-3.bylayer-2.byblock 整数代表百分之一毫米的倍数

dimlwe

372

指定尺寸界线的线宽。其值是标准线宽。-3 bylayer -2byblock 整数代表百分之一毫米的倍数


十七、梦想CAD标注系统变量说明2


主要用到函数说明:


IMxDrawDimension::SetDimVarObjectId


设置标注属性的对象id类型变量值,详细说明如下:


参数说明

[in] LONG iType

该属性的类形值

id

设置的值


IMxDrawDimension::GetDimVarObjectId


返回标注属性的对象id类型变量值,详细说明如下:


参数说明

[in] LONG iType

该属性的类形值


下面将详细介绍标注样式的对象id类型属性值,详细说明如下:


变量类型值实数值说明

dimblk

342

设置尺寸线或引线末端显示的箭头块

dimblk1

343

当 dimsah系统变量打开时,设置尺寸线第一个端点的箭头

dimblk2

344

当 dimsah系统变量打开时,设置尺寸线第二个端点的箭头

dimldrblk

341

指定引线箭头的类型。要返回默认值(实心闭合箭头显示),请输入单个句点 (.)

dimtxsty

340

指定标注的文字样式


十八、梦想CAD标注系统变量说明3


主要用到函数说明:


IMxDrawDimension::SetDimVarString


设置标注属性的字符串类型变量值,详细说明如下:


参数说明

[in] LONG iType

该属性的类形值

pszVal

设置的值


IMxDrawDimension::GetDimVarString


返回标注属性的字符串类型变量值,详细说明如下:


参数说明

[in] LONG iType

该属性的类形值


下面将详细介绍标注样式的字符串类型属性值,详细说明如下:


变量类型值实数值说明

dimapost

4

为所有标注类型(角度标注除外)的换算标注测量值指定文字前缀或后缀(或两者都指定)

dimpost

3

指定标注测量值的文字前缀或后缀(或者两者都指定)


十九、得到图上所有标注的标注文本


        //  定义一个构造选择集对象。
        MxDrawSelectionSet ss = new MxDrawSelectionSet();        
        // 选择图上所有对象.
        ss.AllSelect();        
        for(int i = 0; i < ss.Count;i++)
        {            
        // 遍历到一个对象。            
        MxDrawEntity ent = (MxDrawEntity) ss.Item(i);             
        if (ent is MxDrawDimension)
             {                 
             // 如果是一个标注对象.
                 MxDrawDimension dim = (MxDrawDimension)ent;                 
                 // 得到标注对象文本.
                 String sTxt = dim.DimensionText;                 
                 if(sTxt.Length == 0)
                 {                     
                 // 如果文本为空,表示,标注文字是自动生成的
                     // 打碎标注对象,得到里面的文字对象.
                    MxDrawResbuf ret = dim.GetProp("ExplodeEx");                    
                    for(int j = 0; j < ret.Count;j++)
                    {
                        MxDrawMcDbObject obj = ret.AtObject(i);                        
                        if(obj == null)                            
                        continue;                     
                        if(obj is MxDrawMText)
                        {                            
                        // 该对象是个多行文本
                            // 取到文字对象,得到文字符串.
                            MxDrawMText txt = (MxDrawMText)obj;
                            sTxt = txt.Contents;                            
                            break;
                        }                        
                        else if(obj is MxDrawText)
                        {                            
                        // 该对象是个单行文本                             
                        MxDrawText txt = (MxDrawText)obj;
                            sTxt = txt.TextString;                            
                            break;
                        }
 
       
                    }
                 }                 
                 // 显示得到文字内容
                 MessageBox.Show(sTxt);                 
                 // 显示对象的线型                 
                 MessageBox.Show(ent.LineType);
             }
 
        }


主要用到函数说明:


IMxDrawSelectionSet::Select2


构造选择集。详细说明如下:


参数说明

[in] MCAD_McSelect Mode

构造选择集方式

[in] VARIANT point1

构造择择集时需要使用到的点对象

[in] VARIANT point2

构造择择集时需要使用到的点对象

[in,optional] VARIANT filterType

构造选择集的过滤数据的类型

[in,optional] VARIANT filterData

构造选择集的过滤数据

可以取如下值

mcSelectionSetWindow = 0, mcSelectionSetCrossing = 1, mcSelectionSetFence = 2, mcSelectionSetPrevious = 3, mcSelectionSetLast = 4, mcSelectionSetAll = 5, 选择图面上的所有实体 mcSelectionSetWindowPolygon = 6, mcSelectionSetCrossingPolygon = 7, mcSelectionSetUserSelect = 8 mcSelectionImpliedSelectSelect = 9,_I 返回当前图上已经选择的实体


js中使用如下:


function GetAllComment() {
 
    var  ss = mxOcx.NewSelectionSet();
   var spFilte = mxOcx.NewResbuf();
 
   // 把批注对象,当着过滤条件.
   spFilte.AddStringEx("MxComment,MxDrawXCustomEntity", 5020);
 
   // 得到图上,所有批注对象.
   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 == "McDbComment") {
           // 得到批注对象。
           mxOcx.Prompt(ent.Text);
 
         var mtxt = mxOcx.NewEntity("IMxDrawMText");
          
         // 把多行文字,变成单行文字,去掉里面的控制符。
         mtxt.Contents  = ent.Text;
          
         // 打碎对像.
         var ret = mtxt.GetProp("ExplodeEx");
 
         // 得到打碎后对像里面的文字。
            var s;
            for(var j = 0; j < ret.Count;j++)
            {
 
                var  obj = ret.AtObject(j);
                if(obj == null)
                    continue;
 
 
         if(s == null){
 
               // s = obj.TextString;
            }
 
         else{
             var s = '';
                s += obj.TextString;
            }
 
               
            }
         mxOcx.Prompt(s);
           //
           mxOcx.Prompt(ent.Position.x.toString());
           mxOcx.Prompt(ent.Position.y.toString());
 
           mxOcx.Prompt(ent.BasePoint.x.toString());
           mxOcx.Prompt(ent.BasePoint.y.toString());
       }
       else if (ent.ObjectName == "MxDrawXCustomEntity") {
           // 得到批注对象。
 
           var stp = ent.GetPoint("First");
 
           var ept = ent.GetPoint("BasePoint");
 
 
 
           var txt = ent.GetString("Text");
          
          
 
           mxOcx.Prompt(txt);
 
           //
           mxOcx.Prompt(stp.x.toString());
           mxOcx.Prompt(stp.y.toString());
 
           mxOcx.Prompt(ept.x.toString());
           mxOcx.Prompt(ept.y.toString());
       }
         
   }
 
}


二十、修一个标注长度,标注的直线也跟着变化


        MxDrawUiPrEntity getEntity = new MxDrawUiPrEntity();
        getEntity.message = "选择实体";      
        // 设置选择过滤条件.
        MxDrawResbuf selFilter = new MxDrawResbuf();        
        // 5020是实体类型的DXF组码. DIM是类型。        
        selFilter.AddStringEx("ALIGNEDDIMENSION",5020);
        getEntity.setFilter(selFilter);        
        // 开始选择实体。
        if(getEntity.go() != MCAD_McUiPrStatus.mcOk)            
        return;        
        // 得到选择的实体.
        MxDrawEntity ent = getEntity.Entity();        
        if (ent == null)            
        return;        
        if (!(ent is MxDrawDimAligned) )
        {            
        return;
        }        
        // 得到选择的标注.
        MxDrawDimAligned dimAligned = (MxDrawDimAligned)ent;        
        // 尺寸标注改成60
        double dNewDist = 60.0;        
        // 当前标注的两个点坐标。        
        MxDrawPoint pt1 = dimAligned.XLine1Point;
        MxDrawPoint pt2 = dimAligned.XLine2Point;        
        // 计算pt1到pt2的向量.
        MxDrawVector3d vec = pt2.SumVector(pt1);        
        // 把向量单位化
        vec.Normalize();        
        //把向长度变成新距离.
        vec.Mult(dNewDist);        
        // 算出在新距离下的新的坐标点。
        MxDrawPoint newPt = new MxDrawPoint();
        newPt.x = pt1.x;
        newPt.y = pt1.y;
     
        newPt.Add(vec);    
 
 
        // 修改尺寸标注.
        dimAligned.XLine2Point = newPt;
        dimAligned.RecomputeDimBlock(true);        
        // 查找尺寸标的直线段。并修改它。
        MxDrawResbuf filter = new MxDrawResbuf();
        filter.AddStringEx("LINE",5020);
 
        MxDrawSelectionSet ss = new MxDrawSelectionSet();        
        // 得到标注的开始点上的实体.
        // 搜索精度。
        double dTol = 10;//axMxDrawX1.ViewLongToDocCoord(3);
 
        MxDrawPoint selPt1 = new MxDrawPoint();
    
        MxDrawPoint selPt2 = new MxDrawPoint();
   
 
        selPt1.x = pt1.x - dTol;
        selPt1.y = pt1.y - dTol;
 
        selPt2.x = pt1.x + dTol;
        selPt2.y = pt1.y + dTol;
        ss.Select(MCAD_McSelect.mcSelectionSetCrossing, selPt1, selPt2, filter);    
 
        // 可能会得到多个实体,遍历所有实体,找到标注的直线对象。
        for(int i = 0;  i < ss.Count;i++)
        {
            MxDrawEntity findEnt = ss.Item(i);            
            if (!(findEnt is MxDrawLine))
            {                
            continue;
            }
            MxDrawLine line = (MxDrawLine)findEnt;            
            // 得到直线的两个点坐标。            
            MxDrawPoint sPt = line.StartPoint;
            MxDrawPoint ePt = line.EndPoint;            
            double dDis1 = sPt.DistanceTo(pt1);            
            double dDis2 = ePt.DistanceTo(pt1);            
            if(dDis1 > dDis2)
            {                
            if (dDis2 > dTol)                    
            continue;                
            if(sPt.DistanceTo(pt2) > dTol)                    
            continue;                
            // 直线的开始点,在pt2附近
                line.StartPoint = newPt;                
                break;
            }            
            else
            {                
            if(dDis1 > dTol)                    
            continue;               
             if(ePt.DistanceTo(pt2) > dTol)                    
             continue;                
             // 直线的结束点,在pt2附近
                line.EndPoint = newPt;                
                break;
            }
 
        }
        axMxDrawX1.ZoomAll();


二十一、删除选择的标注


主要用到函数说明:


IMxDrawSelectionSet::Select2


构造选择集。详细说明如下:


参数说明

[in] MCAD_McSelect Mode

构造选择集方式

[in] VARIANT point1

构造择择集时需要使用到的点对象

[in] VARIANT point2

构造择择集时需要使用到的点对象

[in,optional] VARIANT filterType

构造选择集的过滤数据的类型

[in,optional] VARIANT filterData

构造选择集的过滤数据

可以取如下值

mcSelectionSetWindow = 0, mcSelectionSetCrossing = 1, mcSelectionSetFence = 2, mcSelectionSetPrevious = 3, mcSelectionSetLast = 4, mcSelectionSetAll = 5, 选择图面上的所有实体 mcSelectionSetWindowPolygon = 6, mcSelectionSetCrossingPolygon = 7, mcSelectionSetUserSelect = 8 mcSelectionImpliedSelectSelect = 9,_I 返回当前图上已经选择的实体


js中使用如下:


function DelComment()
{
 
 var  ss = mxOcx.NewSelectionSet();
   var spFilte = mxOcx.NewResbuf();
 
   // 把批注对象,当着过滤条件.
   spFilte.AddStringEx("MxComment,MxDrawXCustomEntity", 5020);
 
   // 与用户交互,得到批注.
   ss.Select2(8,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 == "McDbComment"
        || ent.ObjectName == "MxDrawXCustomEntity"
        {
           // 得到批注对象。
           ent.Erase();
       }
   }
}


二十二、绘一个文字自动剧中的标注


    var MxDrawDatabase1 = mxOcx.GetDatabase();
    MxDrawDatabase1.LinetypeScale = 15;
     
    var curDimRecord = MxDrawDatabase1.GetDimStyleTable().GetAt(MxDrawDatabase1.CurrentlyDimstyleName, false);
    var curTextRecord = MxDrawDatabase1.GetTextStyleTable().GetAt(MxDrawDatabase1.CurrentlyTextStyle, false);
    curDimRecord.SetDimVarDouble(40, 1000);//设置缩放比例Dimscale
    curDimRecord.SetDimVarInt(271, 0);//设置两位小数DimDle
    curDimRecord.SetDimVarInt(173, 1);  //设置需要显示符号
    curDimRecord.SetDimVarInt(289, 3);
    curDimRecord.SetDimVarInt(174, 1);
    curDimRecord.SetDimVarString(342, "_ARCHTICK");    //设置建筑标记
    curTextRecord.bigFontFileName = "gbcbig.shx";
    curTextRecord.fileName = "tssdeng.shx";
    curTextRecord.Name = "默认样式";
     
    var dimID = mxOcx.DrawDimRotated(100, 100, 100, 200, 200, 150, 0);
    var Dim = mxOcx.ObjectIdToObject(dimID);
    Dim.DimensionText = "12345";
    Dim.SetDimVarInt(173, 1);  //设置需要显示符号
    Dim.SetDimVarInt(289, 0);
     
    Dim.SetDimVarInt(174, 1);
    Dim.SetDimVarString(342, "_ARCHTICK");    //设置建筑标记
     
    var textPos = mxOcx.NewPoint();
    textPos.x = 200;
    textPos.y = 150;
    Dim.TextPosition = textPos;
    Dim.UsingDefaultTextPosition = false;
    Dim.RecomputeDimBlock(true);
    mxOcx.UpdateDisplay();
    mxOcx.ZoomAll();
梦想CAD控件
梦想CAD是专业的CAD插件(控件),可轻松在网页、手机及BS/CS程序中浏览编辑DWG文件,不需安装AutoCAD即可运行。经十余年累积已非常稳定可靠,有关键的空间搜索算法,并使用汇编优化,可同时处理50万级实体,有非常高的图形显示和处理效率。
联系我们
技术TEL:400-888-5703
185-8173-1060
客服I QQ: 3570505660
技术I QQ: 827867134
技术II QQ:6884123
VIP服务购买
销售TEL:156-8136-8971
销售QQ:710714273
用户交流
梦想绘图资讯群Ⅰ:73281982
梦想绘图资讯群Ⅱ:112199959
MxCAD软件更新通知群Ⅰ:515771658
技术I:QQ
827867134
客服I:QQ
3570505660
销售QQ
710714273
联系电话400-888-5703