梦想CAD控件自定义实体实现

一、增加自定义实体对象

调用DrawCustomEntity函数,绘制一个自定义实体对象。

下面代码绘制一个自定义实体,C#代码实现如下:


private void DrawMlineCommand()

{

    MxDrawUiPrPoint getPt = new MxDrawUiPrPoint();

    getPt.message = "点取第一点";

    if (getPt.go() != MCAD_McUiPrStatus.mcOk)

    {

        return;

    }

            

    var frstPt = getPt.value();

    if (frstPt == null)

    {

        return;

    }

 

    MxDrawUiPrPoint getSecondPt = new MxDrawUiPrPoint();

 

    getSecondPt.message = "点取第二点";

    getSecondPt.basePoint = frstPt;

 

    getSecondPt.setUseBasePt(false);

 

    MxDrawCustomEntity spDrawData = getSecondPt.InitUserDraw("DrawCustEntity");

    spDrawData.SetDouble("Width", 30);

 

    spDrawData.SetPoint("Point1", frstPt);

 

    Int32 lCount = 1;

    spDrawData.SetLong("Count", 1);

            

    while (true)

    {

        if (getSecondPt.go() != MCAD_McUiPrStatus.mcOk)

            break;

 

        var secondPt = getSecondPt.value();

        if (secondPt == null)

            break;

 

        lCount++;

 

        String sPointName = "Point" + lCount.ToString();

 

        spDrawData.SetPoint(sPointName, secondPt);

        spDrawData.SetLong("Count", lCount);

    }

    if (lCount > 1)

        axMxDrawX1.DrawEntity(spDrawData);

}

js代码实现如下:


//绘制自定义实体

function DyInsertCustomEntity() {

    //清空当前显示内容

    mxOcx.NewFile();

    var getPt = mxOcx.NewComObject("IMxDrawUiPrPoint");

    getPt.message = "点取第一点";

    if (getPt.go() != 1)

        return;

    var frstPt = getPt.value();

    if (frstPt == null)

        return;

    var getSecondPt = mxOcx.NewComObject("IMxDrawUiPrPoint");

    getSecondPt.message = "点取第二点";

    getSecondPt.basePoint = frstPt;

    getSecondPt.setUseBasePt(true);

    if (getSecondPt.go() != 1)

        return;

    var secondPt = getSecondPt.value();

    if (secondPt == null)

        return;

    var ent = mxOcx.DrawCustomEntity("TestMxCustomEntity""");

    ent.SetPoint("spt", frstPt);

    ent.SetPoint("ept", secondPt);

}


//绘制自定义实体1

function MyInsertCustomEntity()

//清空当前显示内容

    mxOcx.NewFile();

    var spDrawData;

    var getPt1 = mxOcx.NewComObject("IMxDrawUiPrPoint");

    {

        getPt1.message = "点取第一点";

        spDrawData = getPt1.InitUserDraw("DynDrawEnt1");

        if (getPt1.go() != 1) {

            return;

        }

    }

    var getPt2 = mxOcx.NewComObject("IMxDrawUiPrPoint");

    {

        getPt2.message = "点取第二点";

        spDrawData = getPt2.InitUserDraw("DynDrawEnt2");

        spDrawData.SetPoint("vFirst", getPt1.value());

        if (getPt2.go() != 1) {

            return;

        }

    }

    var getPt3 = mxOcx.NewComObject("IMxDrawUiPrPoint");

    {

        getPt3.message = "点取第三点";

        spDrawData = getPt3.InitUserDraw("DynDrawEnt3");

        spDrawData.SetPoint("vFirst", getPt1.value());

        spDrawData.SetPoint("vSecond", getPt2.value());

        if (getPt3.go() != 1) {

            return;

        }

    }

    var getPt4 = mxOcx.NewComObject("IMxDrawUiPrPoint");

    {

        getPt4.message = "点取第四点";

        spDrawData = getPt4.InitUserDraw("DynDrawEnt4");

        spDrawData.SetPoint("vFirst", getPt1.value());

        spDrawData.SetPoint("vSecond", getPt2.value());

        spDrawData.SetPoint("vThird", getPt3.value());

        if (getPt4.go() != 1) {

            return;

        }

    }

    {

        spDrawData = mxOcx.DrawCustomEntity("DrawEnt""");

        spDrawData.SetPoint("vFirst", getPt1.value());

        spDrawData.SetPoint("vSecond", getPt2.value());

        spDrawData.SetPoint("vThird", getPt3.value());

        spDrawData.SetPoint("vFour", getPt4.value());

    }

}

二、响应自定义事件,绘制自定义实体

需要响应DMxDrawXEvents::CustomEntity_Explode事件。

下面例子,得到自实体的数据,C#代码实现如下:


private void axMxDrawX1_CustomEntity_Explode(object sender, AxMxDrawXLib._DMxDrawXEvents_CustomEntity_ExplodeEvent e)

        {

            MxDrawCustomEntity pCustomEntity = (MxDrawCustomEntity)e.pCustomEntity;

            var sGuid = pCustomEntity.Guid;

 

            MxDrawWorldDraw pWorldDraw = (MxDrawWorldDraw)e.pDraw;

 

            if (sGuid == "DrawCustEntity")

            {

                MyDrawMline(pWorldDraw, pCustomEntity, null);

                e.pRet = 1;

            }

        }

 

private void MyDrawMline(MxDrawWorldDraw pWorldDraw, MxDrawCustomEntity pCustomEntity, MxDrawPoint curPt)

{

    // 取自定义实体的端点数目,属性。

    if (!pCustomEntity.IsHave("Count"))

        return;

    long lCount = pCustomEntity.GetLong("Count");

    MxDrawPolyline tmpPl = new MxDrawPolyline();

    for (long i = 0; i < lCount; i++)

    {

        String sName;

        sName = "Point" + (i + 1).ToString();

        if (!pCustomEntity.IsHave(sName))

            break;

 

        // 取自定义实体的端点坐标。

        MxDrawPoint pt = pCustomEntity.GetPoint(sName);

 

        // 把端点坐标,传给pl线,用于生成双线。

        tmpPl.AddVertexAt(pt);

    }

    if (curPt != null)

        tmpPl.AddVertexAt(curPt);

 

    if (tmpPl.NumVerts < 2)

    {

        // 端点数少于2就,不构成直线,就不需要显示。

        return;

    }

    // 求pl线,开始点的导数.

    MxDrawVector3d vecFx;

    if (!tmpPl.GetFirstDeriv(tmpPl.GetStartParam(), out vecFx))

        return;

    if (vecFx.IsZeroLength())

        return;

    // 把向量旋转90度.

    vecFx.RotateByXyPlan(3.14159265 / 2.0);

    vecFx.Normalize();

    //  得到双线的宽度属性。

    double dWidth = pCustomEntity.GetDouble("Width");

    vecFx.Mult(dWidth);

    MxDrawPoint startPt = tmpPl.GetStartPoint();

 

    // 向pl线,两个方向偏移,

    MxDrawPoint offsetPt1 = new MxDrawPoint();

    offsetPt1.x = startPt.x;

    offsetPt1.y = startPt.y;

    offsetPt1.Add(vecFx);

    MxDrawPoint offsetPt2 = new MxDrawPoint();

    offsetPt2.x = startPt.x;

    offsetPt2.y = startPt.y;

    offsetPt2.Sum(vecFx);

    MxDrawText text = new MxDrawText();

    text.TextString = "Test";

    text.Height = 100;

    text.Position = startPt;

    text.AlignmentPoint = startPt;

    MxDrawPoint pt1, pt2;

    text.GetBoundingBox(out pt1, out pt2);

    MxDrawPoint pt3 = new MxDrawPoint();

    pt3.x = pt1.x;

    pt3.y = pt2.y;

    MxDrawPoint pt4 = new MxDrawPoint();

    pt4.x = pt2.x;

    pt4.y = pt1.y;

    MxDrawPoints pts = new MxDrawPoints();

    pts.Add(pt1.x, pt1.y, 0);

    pts.Add(pt3.x, pt3.y, 0);

    pts.Add(pt2.x, pt2.y, 0);

    pts.Add(pt4.x, pt4.y, 0);

 

    Int32 lDraworder = pWorldDraw.Draworder;

    pWorldDraw.Draworder = lDraworder + 1;

    pWorldDraw.DrawWipeout(pts);

    pWorldDraw.Draworder = lDraworder + 2;

    pWorldDraw.DrawEntity((MxDrawEntity)text);

    pWorldDraw.Draworder = lDraworder;

    //    pWorldDraw->

    {

        MxDrawResbuf newobj;

        if (tmpPl.OffsetCurves(dWidth, offsetPt1, out newobj))

        {

            for (Int32 j = 0; j < newobj.Count; j++)

            {

                MxDrawEntity tmpObj = (MxDrawEntity)newobj.AtObject(j);

                if (tmpObj == null)

                    continue;

 

                pWorldDraw.DrawEntity(tmpObj);

            }

            newobj.RemoveAll();

        }

    }

    {

        MxDrawResbuf newobj;

        if (tmpPl.OffsetCurves(dWidth, offsetPt2, out newobj))

        {

            for (Int32 j = 0; j < newobj.Count; j++)

            {

                MxDrawEntity tmpObj = (MxDrawEntity)newobj.AtObject(j);

                if (tmpObj == null)

                    continue;

 

                pWorldDraw.DrawEntity(tmpObj);

            }

            // 这不使用newobj,需要显示调用RemoveAll函数清楚内存。

            // 不然这个可能就会程序退出时才释放,这时它会去释放控件对象指针,有可能会出错。

            newobj.RemoveAll();

        }

    }

}

js代码实现如下:


// 自定义实体绘制函数

function ExplodeFun(pCustomEntity, pWorldDraw, txt) {

    var sGuid = pCustomEntity.Guid;

    if (sGuid == "TestMxCustomEntity") {

        if (!pCustomEntity.IsHave("ept"))

            return;

        var stp = pCustomEntity.GetPoint("spt");

        if (stp == null)

            return;

        var ept = pCustomEntity.GetPoint("ept");

        if (ept == null)

            return;

        var mxUtility = mxOcx.NewUtility();

        var vec = ept.SumVector(stp);

        vec.Mult(0.5);

        var midPt = mxOcx.NewPoint();

        midPt.x = stp.x;

        midPt.y = stp.y;

        midPt.Add(vec);

        var dAng = vec.Angle();

        //计算一个标注角度,使用文字对象始终头朝上

        dAng = mxUtility.GetDimAngle(dAng);

        var dDis = 0.0;

        dDis = stp.DistanceTo(ept);

        var sTxt = "L=" + formatNumber(dDis, ‘#.##‘);

        dAng = dAng * 180.0 / 3.14159265;

        vec.RotateByXyPlan(3.14159265 / 2.0);

        vec.Normalize();

        vec.Mult(10);

        stp.Add(vec);

        ept.Add(vec);

        pWorldDraw.DrawLine(stp.x, stp.y, ept.x, ept.y);

        vec.Mult(2);

        stp.Sum(vec);

        ept.Sum(vec);

        pWorldDraw.DrawLine(stp.x, stp.y, ept.x, ept.y);

        pWorldDraw.SetColorIndex(1);

        pWorldDraw.DrawText(midPt.x, midPt.y, sTxt, 5, dAng,

            1, 2);

        mxOcx.SetEventRet(1);

    }

   

    var dHeigth = mxOcx.ViewLongToDocCoord(5);

    

    // 绘制绘制自定义实体1

    if(sGuid == "DrawEnt"){

        {

            if (!pCustomEntity.IsHave("vFour"))

                return;

            if (!pCustomEntity.IsHave("vThird"))

                return;

            if (!pCustomEntity.IsHave("vSecond"))

                return;

            if (!pCustomEntity.IsHave("vFirst"))

                return;

        }

        {

            var vFourPt = pCustomEntity.GetPoint("vFour");

            var dX = vFourPt.x;

            var dY = vFourPt.y;

            var vThirdPt = pCustomEntity.GetPoint("vThird");

            pWorldDraw.DrawLine(vThirdPt.x, vThirdPt.y, dX, dY);

            pWorldDraw.DrawText(dX, dY, "(" + dX.toFixed(1) + "," + dY.toFixed(1) + ")", dHeigth, 0, 1, 1);

            var dX = vThirdPt.x;

            var dY = vThirdPt.y;

            var vSecondPt = pCustomEntity.GetPoint("vSecond");

            pWorldDraw.DrawLine(vSecondPt.x, vSecondPt.y, dX, dY);

            pWorldDraw.DrawText(dX, dY, "(" + dX.toFixed(1) + "," + dY.toFixed(1) + ")", dHeigth, 0, 1, 1);

            dX = vSecondPt.x;

            dY = vSecondPt.y;

            var vFirstPt = pCustomEntity.GetPoint("vFirst");

            pWorldDraw.DrawLine(vFirstPt.x, vFirstPt.y, dX, dY);

            pWorldDraw.DrawText(dX, dY, "(" + dX.toFixed(1) + "," + dY.toFixed(1) + ")", dHeigth, 0, 1, 1);

            dX = vFirstPt.x;

            dY = vFirstPt.y;

            pWorldDraw.DrawText(dX, dY, "(" + dX.toFixed(1) + "," + dY.toFixed(1) + ")", dHeigth, 0, 1, 1);

        }

        mxOcx.SetEventRet(1);

    }

}

三、响应自定义事件,动态绘制

C#代码实现如下:


private void axMxDrawX1_DynWorldDraw(object sender, AxMxDrawXLib._DMxDrawXEvents_DynWorldDrawEvent e)

{

    MxDrawCustomEntity pCustomEntity = (MxDrawCustomEntity)e.pData;

    String sGuid = pCustomEntity.Guid;

    e.pRet = 0;

 

    MxDrawWorldDraw pWorldDraw = (MxDrawWorldDraw)e.pWorldDraw;

    MxDrawPoint curPt = new MxDrawPoint();

    curPt.x = e.dX;

    curPt.y = e.dY;

 

    if (sGuid == "DrawCustEntity")

    {

        MyDrawMline(pWorldDraw, pCustomEntity, curPt);

    }

}

js代码实现如下:


//动态施放绘制事件回调函数指针

//动态拖放时的绘制事件

//参数一为当前鼠标位置X坐标;参数为二当前鼠标位置Y坐标;

// 参数三为IMxDrawWorldDraw对象,用于动态绘制;参数四为IMxDrawCustomEntity对象,动态绘制数据

function DoDynWorldDrawFun(dX,dY,pWorldDraw,pData) {

    //自定义实体的GUID标识符

    var sGuid = pData.Guid;

    //设置自定义事件的返回值

    mxOcx.SetEventRet(0);

    var curPt = mxOcx.NewPoint();

    curPt.x = dX;

    curPt.y = dY;

    

    var dHeigth = mxOcx.ViewLongToDocCoord(5);

    //自定义实体的GUID标识符

    switch (pData.Guid) {

        case "DynDrawEnt4":

        {

            var vThirdPt = pData.GetPoint("vThird");

            pWorldDraw.DrawLine(vThirdPt.x, vThirdPt.y, dX, dY);

            pWorldDraw.DrawText(dX, dY, "(" + dX.toFixed(1) + "," + dY.toFixed(1) + ")", dHeigth, 0, 1, 1);

            dX = vThirdPt.x;

            dY = vThirdPt.y;

        }

        case "DynDrawEnt3":

        {

            var vSecondPt = pData.GetPoint("vSecond");

            pWorldDraw.DrawLine(vSecondPt.x, vSecondPt.y, dX, dY);

            pWorldDraw.DrawText(dX, dY, "(" + dX.toFixed(1) + "," + dY.toFixed(1) + ")", dHeigth, 0, 1, 1);

            dX = vSecondPt.x;

            dY = vSecondPt.y;

        }

        case "DynDrawEnt2":

        {

            var vFirstPt = pData.GetPoint("vFirst");

            pWorldDraw.DrawLine(vFirstPt.x, vFirstPt.y, dX, dY);

            pWorldDraw.DrawText(dX, dY, "(" + dX.toFixed(1) + "," + dY.toFixed(1) + ")", dHeigth, 0, 1, 1);

            dX = vFirstPt.x;

            dY = vFirstPt.y;

        }

        case "DynDrawEnt1":

        {

            pWorldDraw.DrawText(dX, dY, "(" + dX.toFixed(1) + "," + dY.toFixed(1) + ")", dHeigth, 0, 1, 1);

        }

    }

    //设置自定义事件的返回值

    mxOcx.SetEventRet(0);

}

四、响应自定义事件,返回自定义实体夹点

需要响应_DMxDrawXEvents::CustomEntity_getGripPoints事件,C#代码实现如下:


private void axMxDrawX1_CustomEntity_getGripPoints(object sender, AxMxDrawXLib._DMxDrawXEvents_CustomEntity_getGripPointsEvent e)

{

    MxDrawCustomEntity pCustomEntity = (MxDrawCustomEntity)e.pCustomEntity;

    var sGuid = pCustomEntity.Guid;

    e.pOk = 0;

    if (sGuid == "DrawCustEntity")

    {

        if (!pCustomEntity.IsHave("Count"))

            return;

 

        long lCount = pCustomEntity.GetLong("Count");

 

        MxDrawResbuf ret = (MxDrawResbuf)axMxDrawX1.NewResbuf();

 

        for (long i = 0; i < lCount; i++)

        {

            String sName;

            sName = "Point" + (i + 1).ToString();

            if (!pCustomEntity.IsHave(sName))

                break;

 

            // 取自定义实体的端点坐标。

            MxDrawPoint pt = pCustomEntity.GetPoint(sName);

 

 

            ret.AddPoint(pt);

        }

        e.pOk = 1;

        axMxDrawX1.SetEventRetEx(ret);

    }

 

}

js代码实现如下:


// 返回自定义实体夹点

function GetGripPointsFun(pCustomEntity) {

    var sGuid = pCustomEntity.Guid;

    

    //自定义实体绘制两条直线

    if (sGuid == "TestMxCustomEntity") {

        if (!pCustomEntity.IsHave("ept"))

            return;

        var stp = pCustomEntity.GetPoint("spt");

        if (stp == null)

            return;

        var ept = pCustomEntity.GetPoint("ept");

        if (ept == null)

            return;

        var ret = mxOcx.NewResbuf();

        ret.AddPoint(stp);

        ret.AddPoint(ept);

        mxOcx.SetEventRetEx(ret);

    }

    

    //自定义实体1

    if (sGuid == "DrawEnt") {

        if (!pCustomEntity.IsHave("vFour"))

            return;

        var stp = pCustomEntity.GetPoint("vFirst");

        if (stp == null)

            return;

        var ept = pCustomEntity.GetPoint("vSecond");

        if (ept == null)

            return;

        var tpt = pCustomEntity.GetPoint("vThird");

        if (tpt == null)

            return;

        var fpt = pCustomEntity.GetPoint("vFour");

        if (fpt == null)

            return;

        var ret = mxOcx.NewResbuf();

        ret.AddPoint(stp);

        ret.AddPoint(ept);

        ret.AddPoint(tpt);

        ret.AddPoint(fpt);

        mxOcx.SetEventRetEx(ret);

    }

}

五、响应自定义事件,夹点移动后的处理

需要响应CustomEntity_moveGripPointsAt事件。

下面例子,夹点移动后,修改自定义实体的属性,C#代码实现如下:


private void axMxDrawX1_CustomEntity_moveGripPointsAt(object sender, AxMxDrawXLib._DMxDrawXEvents_CustomEntity_moveGripPointsAtEvent e)

{

    e.pRet = 1;

    MxDrawCustomEntity pCustomEntity = (MxDrawCustomEntity)e.pCustomEntity;

    var sGuid = pCustomEntity.Guid;

 

    if (sGuid == "DrawCustEntity")

    {

        if (!pCustomEntity.IsHave("Count"))

            return;

 

        long lCount = pCustomEntity.GetLong("Count");

                

        for (long i = 0; i < lCount; i++)

        {

            String sName;

            sName = "Point" + (i + 1).ToString();

            if (!pCustomEntity.IsHave(sName))

                break;

 

            // 取自定义实体的端点坐标。

            MxDrawPoint pt = pCustomEntity.GetPoint(sName);

 

            if (i == e.lGridIndex)

            {

                pt.x = pt.x + e.dOffsetX;

                pt.y = pt.y + e.dOffsetY;

 

                pCustomEntity.SetPoint(sName, pt);

            }

        }

    }

}

js代码实现如下:


// 移动自定义实体夹点

function MoveGripPointsFun(pCustomEntity, lGridIndex, dOffsetX, dOffsetY) {

    var sGuid = pCustomEntity.Guid;

   

    if (sGuid == "TestMxCustomEntity") {

        if (!pCustomEntity.IsHave("ept"))

            return;

        var stp = pCustomEntity.GetPoint("spt");

        if (stp == null)

            return;

        var ept = pCustomEntity.GetPoint("ept");

        if (ept == null)

            return;

        if (lGridIndex == 0) {

            stp.x = stp.x + dOffsetX;

            stp.y = stp.y + dOffsetY;

            pCustomEntity.SetPoint("spt", stp);

        }

        else {

            ept.x = ept.x + dOffsetX;

            ept.y = ept.y + dOffsetY;

            pCustomEntity.SetPoint("ept", ept);

        }

        mxOcx.SetEventRet(1);

    }

    if (sGuid == "DrawEnt") {

        if (!pCustomEntity.IsHave("vFour"))

            return;

        var stp = pCustomEntity.GetPoint("vFirst");

        if (stp == null)

            return;

        var ept = pCustomEntity.GetPoint("vSecond");

        if (ept == null)

            return;

        var tpt = pCustomEntity.GetPoint("vThird");

        if (tpt == null)

            return;

        var fpt = pCustomEntity.GetPoint("vFour");

        if (fpt == null)

            return;

        {

            stp.x = stp.x + dOffsetX;

            stp.y = stp.y + dOffsetY;

            pCustomEntity.SetPoint("vFirst", stp);

            ept.x = ept.x + dOffsetX;

            ept.y = ept.y + dOffsetY;

            pCustomEntity.SetPoint("vSecond", ept);

            tpt.x = tpt.x + dOffsetX;

            tpt.y = tpt.y + dOffsetY;

            pCustomEntity.SetPoint("vThird", tpt);

            fpt.x = fpt.x + dOffsetX;

            fpt.y = fpt.y + dOffsetY;

            pCustomEntity.SetPoint("vFour", fpt);

        }

        mxOcx.SetEventRet(1);

    }

}

六、自定义实体之打碎

c#代码实现如下


            // 打开图纸文件。            

            axMxDrawX1.OpenDwgFile("C:\西桥头村.dwg");    

            // 打碎图纸上的自定义实体。

            MxDrawResbuf filter = new MxDrawResbuf();            

            // 设置选择过滤条件,只选择自定义实体。            

            filter.AddStringEx("ACAD_PROXY_ENTITY", 5020);

            MxDrawSelectionSet ss = new MxDrawSelectionSet();            

            // 得到所有自定义实体。            

            ss.AllSelect(filter);            

            // 遍历自定义实体

            for (Int32 i = 0; i < ss.Count; i++)

            {

                MxDrawEntity ent = ss.Item(i);

                MxDrawResbuf param = new MxDrawResbuf();

                param.AddObjectId(ent.ObjectID);                

                // 打碎自定义实体。                

                MxDrawResbuf ret = (MxDrawResbuf)axMxDrawX1.CallEx("Mx_Explode", param);                

                // 删除自定义实体。

                if(ret.AtString(0) == "Ok")

                    ent.Erase();

            }            

            // 把图纸所有内容都放到当前视区。

            axMxDrawX1.ZoomAll();

七、在块表记录中添加一个自定义实体

c#代码实现如下


        MxDrawDatabase database = (MxDrawDatabase)axMxDrawX1.GetDatabase();

        MxDrawBlockTableRecord blkRec = database.CurrentSpace();        

        // 调用AddCustomEntity函数绘制自定义实体。 逗号后的字符串"DrawCustEntity"是自定义实体的GUID

        MxDrawResbuf ret =  blkRec.GetProp("AddCustomEntity,DrawCustEntity");        

        // 得到自定义实体。        

        MxDrawCustomEntity ent = (MxDrawCustomEntity)database.ObjectIdToObject(ret.AtObjectId(0));        

        // 设置自定义实体的属性。        

        ent.BeginSetValue();

        ent.SetDouble("Width", 30);

        MxDrawPoint pt1 = new MxDrawPoint();

        pt1.x = 10;

        pt1.y = 10;

        MxDrawPoint pt2 = new MxDrawPoint();

        pt2.x = 20;

        pt2.y = 20;

        ent.SetPoint("Point1", pt1);

        ent.SetPoint("Point2", pt2);

        ent.SetLong("Count", 2);

        ent.EntSetValue();

原文地址:https://www.cnblogs.com/yzy0224/p/10860946.html

时间: 2024-11-07 17:40:58

梦想CAD控件自定义实体实现的相关文章

梦想CAD控件关于比较问题

全图比较 怎么比较两个CAD图纸文件修改前后的不同部分呢?在工程图纸设计中,我们更多情况下可能需要对同一张工程图的前后修改部分进行对比,以确定工程图纸的改动部分及追溯原因,本教程演示了几种常见的比较方法. 实现图纸比较功能,首先将两个控件放入网页中,js代码如下: <p align="center">   <object classid="clsid:74A777F8-7A8F-4e7c-AF47-7074828086E2" id="Mx

梦想CAD控件 2019.01.20更新

下载地址:http://www.mxdraw.com/ndetail_10120.html1. 修改CAD不等比例块保存问题2. 修改CAD捕捉时,Z值对捕捉不准的影响3. 修改图片对象选择后,自动跑到最前面问题4. 增加shx文件搜索路径设置选项:ShxPath5. 增加回车运行前一个命令配制选项6.增加控制那些CAD图层可以用来选择对象的配制选项.7. 增加返回CAD块引用的剪切边界功能8. 增加字典遍历器返回当前对象名称函数.9. 增加服务器后台,静默批量dwg转jpg例程,非常适用.10

梦想CAD控件关于曲线问题

IMxDrawCurve 接口 控件中的曲线接口,实现了曲线的相关操作,如求曲线的长度,最近点,面积,曲线上任一点在曲线上的长度 切向方向,曲线交点,坐标变换,打断,偏移,离散等功能. 一.返回曲线组成的闭合区域面积 IMxDrawCurve::GetArea 返回曲线组成的闭合区域面积,具体详细如下: 参数 说明 [out] DOUBLE* pArea 返回闭合区域面积 C#代码计算闭合区域面积:         MxDrawPolyline pl = new MxDrawPolyline()

CAD控件:梦想CAD控件功能更新 清除图上的所有高亮实体

1,修正得组里面的实体,把删除实体也返回的错误 2,修正代理实体改不了颜色问题. 3,修正捕捉块插入点,有时会跑到很远的位置问题. 4.MxDrawChange类增加ToBlockReference函数 5.增加MxDraw::DrawToJpgBase64,Mx_DrawToJpgBase64函数,把图纸上的内容保存为Base64字符编码的jpg图片 6.增加Mx_ClearAllHighlight函数,清除图上的所有高亮实体 7.修改缩放实体命令,在动态输入打开后,不能输入比例

梦想CAD控件 2018.7.26更新

下载地址: http://www.mxdraw.com/ndetail_107.html 1.  增加属性匹配功能 2.  增加List命令 3.  增加CAD图纸审图批注功能 4.  环形阵列功能 5.  修改有些CAD实体镜向不对 6.  修改在有些情况下,TrueType字体编辑后,显示不对问题 7.  增加CAD打印对话框调用时,可以设置打印区域参数 原文地址:https://www.cnblogs.com/yzy0224/p/9395162.html

CAD控件:界面控制说明和方法

更新时间:2015 年08 月24 日 界面控制说明 目录 1.1 说明: ......................................................................................................................................... 4 1.2 菜单栏 ................................................................

CAD控件 出三维控件!和手机CAD控件了,欢迎大家使用!

CAD控件 出三维控件!和手机CAD控件了,欢迎大家使用!(下载地址:百度搜索,梦.想.CAD控件) 支持文档格式,igs,stl,dwg,m3d等通用标准的3d文件格式 支持常见的三维实体建模 支持,旋转,沿路径,拉伸,偏移等方式建模 支持bool运算方式建模 支持32,64位系统,支持网页使用,提供ocx方式接口 兼容二维绘图功能 使用vc2010开发 原文地址:http://blog.51cto.com/10455293/2088403

VS对话框按钮贴图和Static控件自定义

软件开发中,为了让用户更喜欢使用我们的软件,除了具有良好的性能外,还需要美观的界面. 本文简单地介绍下对话框背景贴图和按钮贴图,以及Static控件自定义成各种Static效果. 首先贴个图,让大家看看效果 1.新建对话框应用程序 2.添加图片资源 3.背景贴图 重写OnPaint函数 void CDlgBmpTestDemoDlg::OnPaint() { CPaintDC dc(this); // 用于绘制的设备上下文 //绘制背景 CBitmap bitmap; bitmap.LoadBi

CAD控件,CAD插件使用教程:Android开发使用控件--开发环境的搭建

Android开发使用控件入门--环境搭建 2014-12-24 09:57     14人阅读     评论(0)     收藏         编辑     删除 CAD控件.CAD三维控件,手机控件 Android开发控件 软件名称(,梦,,想.CAD  ,控件) 1. 环境搭建: 3 1.1. 安装Eclipse 3 1.2. 下载JDK 3 1.3. 下载Android SDK 5 1.4. 给Eclipse 安装ADT插件  8 1.5. 运行Eclipse设置Android ADT