一、参数绘制文字

1、在CAD设计时,需要绘制文字,用户可以设置设置绘制文字的高度等属性。

2、主要用到函数说明:

(1)_DMxDrawX::DrawText

绘制一个单行文字。详细说明如下:

参数

说明

DOUBLE dPosX

文字的位置的X坐标

DOUBLE dPosY

文字的位置的Y坐标

BSTR pszText

文字内容字符串

DOUBLE dHeight

文字高度

DOUBLE dRotation

文字的旋转角度

SHORT horizontalMode

文字的水平对齐方式,0=kTextLeft,1=kTextCenter,2=kTextRight

SHORT verticalMode

文字的竖直对齐方式,1=kTextBottom,2=kTextVertMid,3=kTextTop

(2)_DMxDrawX::AddTextStyle1

向数据库中增加一个文字样式。详细说明如下:

参数

说明

BSTR pszName

文字样式名称

BSTR pszFileName

shx文件名

BSTR pszBigFontFileName

big shx文件名

DOUBLE dXScale

文字宽度缩放比例

3、c#中实现代码说明:

private void DrawText()

{

    //清空当前显示内容

    axMxDrawX1.NewFile();

    //把颜色改回黑白色

    axMxDrawX1.DrawCADColor = 0;

    //创建一个图层,名为"TextLayer"

    axMxDrawX1.AddLayer("TextLayer");

    //设置当前图层为"TextLayer"

    axMxDrawX1.LayerName = "TextLayer";

    //绘制一个单行文字

    //参数一为文字的位置的X坐标 ;参数二为文字的位置的Y坐标 ;参数三为文字内容字符串

    //参数四为文字高度;参数五为文字的旋转角度

    //参数六为文字的水平对齐方式,0=kTextLeft,1=kTextCenter,2=kTextRight

    //参数七文字的竖直对齐方式,1=kTextBottom,2=kTextVertMid,3=kTextTop

    //-------------------------------------------------------------------------------------------------

    //写一个文字,0,1是左对齐.

    axMxDrawX1.DrawCADColor = 65280;

    axMxDrawX1.DrawText(0, 1900, "梦想绘图控件3.0 www.mxdraw.com", 100, 0, 0, 1);

    //---------------------------------------------------------------------------------------------------

    //写一个文字,2,1是右下对齐.

    axMxDrawX1.DrawCADColor = 4556677;

    axMxDrawX1.DrawText(3000, 2100, "梦想绘图控件3.0 www.mxdraw.com", 100, -20, 2, 1);

    //--------------------------------------------------------------------------------------------------

    //按指定样式绘制文字

    axMxDrawX1.AddTextStyle1("MyTextStyle", "italicc.shx", "gbcbig.shx", 0.7);

    axMxDrawX1.TextStyle = "MyTextStyle";

    axMxDrawX1.DrawCADColor = 255;

    axMxDrawX1.DrawText(0, 3000, "梦想绘图控件3.0 www.mxdraw.com", 100, 0, 0, 1);

    //--------------------------------------------------------------------------------------------------

    //写一个TureType字体

    axMxDrawX1.AddTextStyle2("MyTrueTypeStyle", "黑体", 0.7);

    axMxDrawX1.TextStyle = "MyTrueTypeStyle";

    axMxDrawX1.DrawText(0, 3150, "梦想绘图控件3.0 www.mxdraw.com", 100, 0, 0, 1);

    axMxDrawX1.ZoomAll();

    axMxDrawX1.UpdateDisplay();

}

4、js中实现代码说明:

function DrawText()

{

    //清空当前显示内容

    mxOcx.NewFile();

    //把颜色改回黑白色

    mxOcx.DrawColor = 0;

    //创建一个图层,名为"TextLayer"

    mxOcx.AddLayer("TextLayer");

    //设置当前图层为"TextLayer"

    mxOcx.LayerName = "TextLayer";

    //绘制一个单行文字

    //参数一为文字的位置的X坐标 ;参数二为文字的位置的Y坐标 ;参数三为文字内容字符串

    //参数四为文字高度;参数五为文字的旋转角度

    //参数六为文字的水平对齐方式,0=kTextLeft,1=kTextCenter,2=kTextRight

    //参数七文字的竖直对齐方式,1=kTextBottom,2=kTextVertMid,3=kTextTop

    //-------------------------------------------------------------------------------------------------

    //写一个文字,0,1是左对齐.

    mxOcx.DrawColor = 65280;

    mxOcx.DrawText(0, 1900, "梦想绘图控件3.0 www.mxdraw.com", 100, 0, 0, 1);

    //---------------------------------------------------------------------------------------------------

    //写一个文字,2,1是右下对齐.

    mxOcx.DrawColor = 4556677;

    mxOcx.DrawText(3000, 2100, "梦想绘图控件3.0 www.mxdraw.com", 100, -20, 2, 1);

    //--------------------------------------------------------------------------------------------------

    //按指定样式绘制文字

    mxOcx.AddTextStyle1("MyTextStyle", "italicc.shx", "gbcbig.shx", 0.7);

    mxOcx.TextStyle = "MyTextStyle";

    mxOcx.DrawColor = 255;

    mxOcx.DrawText(0, 3000, "梦想绘图控件3.0 www.mxdraw.com", 100, 0, 0, 1);

    //--------------------------------------------------------------------------------------------------

    //写一个TureType字体

    mxOcx.AddTextStyle2("MyTrueTypeStyle", "黑体", 0.7);

    mxOcx.TextStyle = "MyTrueTypeStyle";

    mxOcx.DrawText(0, 3150, "梦想绘图控件3.0 www.mxdraw.com", 100, 0, 0, 1);

    mxOcx.ZoomAll();

    mxOcx.UpdateDisplay();

}

二、参数绘制多行文字

1、主要用到函数说明:

(1)_DMxDrawX::DrawMText

绘制一个多行文字。详细说明如下:

参数

说明

DOUBLE dPosX

多行文字位置的X坐标

DOUBLE dPosY

多行文字位置的Y坐标

BSTR pszContents

多行文字的内容

DOUBLE dHeight

多行文字的高度

DOUBLE dWidth

多行文字的显示宽度

DOUBLE dRotation

多行文字的旋转角度

SHORT iAttachment

多行文字的对齐方式

可以取值

enum AttachmentPoint { kTopLeft = 1, kTopCenter = 2, kTopRight = 3, kMiddleLeft = 4, kMiddleCenter = 5, kMiddleRight = 6, kBottomLeft = 7, kBottomCenter = 8, kBottomRight = 9,

(2)_DMxDrawX::AddTextStyle2

向数据库中增加一个TrueType文字样式。详细说明如下:

参数

说明

BSTR pszName

文字样式名称

BSTR pszTrueTypeFontName

TrueType字体名

DOUBLE dXScale

文字宽度缩放比例

2、C#中实现代码说明:

private void DrawMText()

{

    //清空当前显示内容

    axMxDrawX1.NewFile();

    //把颜色改回黑白色

    axMxDrawX1.DrawCADColor = 0;

    //绘制多行文字

    //参数一为多行文字位置的X坐标  ;参数二为多行文字位置的Y坐标  ;参数三为多行文字的内容

    //参数四为多行文字的高度 ;参数五为多行文字的显示宽度

    //参数六为多行文字的旋转角度

    //参数七为多行文字的对齐方式

    axMxDrawX1.DrawCADColor = 255;

    axMxDrawX1.DrawMText(100, 100, "cad绘图\\P梦想软件", 15, 500, 0.0, 7);

    axMxDrawX1.DrawCADColor = 16711680;

    axMxDrawX1.DrawMText(0, 0, "\\A2;平方方法 :m{\\H0.3x;\\S 2^;}", 15, 100, 0.0, 7);

    //按指定样式绘制文字

    axMxDrawX1.AddTextStyle1("MyTextStyle", "italicc.shx", "gbcbig.shx", 0.7);

    axMxDrawX1.TextStyle = "MyTextStyle";

    axMxDrawX1.DrawCADColor = 65280;

    axMxDrawX1.DrawMText(0, 50, "\\A2;平方方法 :m{\\H0.3x;\\S 2^;}", 15, 100, 0.0, 7);

    //--------------------------------------------------------------------------------------------------

    //写一个TureType字体

    axMxDrawX1.AddTextStyle2("MyTrueTypeStyle", "黑体", 0.7);

    axMxDrawX1.TextStyle = "MyTrueTypeStyle";

    axMxDrawX1.DrawCADColor = 4556677;

    axMxDrawX1.DrawMText(0, 100, "\\A2;平方方法 :m{\\H0.3x;\\S 2^;}", 15, 100, 0.0, 7);

    axMxDrawX1.ZoomAll();

    axMxDrawX1.UpdateDisplay();

}

3、js中实现代码说明:

function DrawMText()

{

    //清空当前显示内容

    mxOcx.NewFile();

    //把颜色改回黑白色

    mxOcx.DrawColor = 0;

    //绘制多行文字

    //参数一为多行文字位置的X坐标  ;参数二为多行文字位置的Y坐标  ;参数三为多行文字的内容

    //参数四为多行文字的高度 ;参数五为多行文字的显示宽度

    //参数六为多行文字的旋转角度

    //参数七为多行文字的对齐方式

    mxOcx.DrawColor = 255;

    mxOcx.DrawMText( 100, 100,"cad绘图\\P梦想软件",15,500,0.0,7);

    mxOcx.DrawColor = 16711680;

    mxOcx.DrawMText(0,0,"\\A2;平方方法 :m{\\H0.3x;\\S 2^;}",15,100,0.0,7);

    //按指定样式绘制文字

    mxOcx.AddTextStyle1("MyTextStyle", "italicc.shx", "gbcbig.shx", 0.7);

    mxOcx.TextStyle = "MyTextStyle";

    mxOcx.DrawColor = 65280;

    mxOcx.DrawMText(0, 50,"\\A2;平方方法 :m{\\H0.3x;\\S 2^;}",15,100,0.0,7);

    //--------------------------------------------------------------------------------------------------

    //写一个TureType字体

    mxOcx.AddTextStyle2("MyTrueTypeStyle", "黑体", 0.7);

    mxOcx.TextStyle = "MyTrueTypeStyle";

    mxOcx.DrawColor = 4556677;

    mxOcx.DrawMText(0,100,"\\A2;平方方法 :m{\\H0.3x;\\S 2^;}",15,100,0.0,7);

    mxOcx.ZoomAll();

    mxOcx.UpdateDisplay();

}

三、交互绘制文字

1、主要用到函数说明:_DMxDrawX::DrawText

绘制一个单行文字。详细说明如下:

参数

说明

DOUBLE dPosX

>文字的位置的X坐标

DOUBLE dPosY

文字的位置的Y坐标

BSTR pszText

文字内容字符串

DOUBLE dHeight

文字高度

DOUBLE dRotation

文字的旋转角度

SHORT horizontalMode

文字的水平对齐方式,0=kTextLeft,1=kTextCenter,2=kTextRight

SHORT verticalMode

文字的竖直对齐方式,1=kTextBottom,2=kTextVertMid,3=kTextTop

2、c#中实现代码说明:

动态拖放时的绘制事件:

private void DrawText()

{

    // 创建一个文字样式,用于批注文字字体.

    axMxDrawX1.AddTextStyle2("MyCommentFont", "黑体", 0.7);

    // 创建一个与用户交互取点的对象。

    MxDrawUiPrPoint getPt = new MxDrawUiPrPoint();

    getPt.message = "点取插入点";

    // 设置动态绘制参数.

    var spDrawData = getPt.InitUserDraw("DrawText");

    spDrawData.SetString("Text", "黄洪辉");

    spDrawData.SetDouble("TextHeight", 100);

    // 开始取第一个点。

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

        return;

    var ret = spDrawData.Draw();

}

动态绘制文字:

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

{

    MxDrawCustomEntity pCustomEntity = (MxDrawCustomEntity)e.pData;

    MxDrawWorldDraw pWorldDraw = (MxDrawWorldDraw)e.pWorldDraw;

    string sGuid = pCustomEntity.Guid;

 

    MxDrawPoint curPoint = new MxDrawPoint();

 

    curPoint.x = e.dX;

curPoint.y = e.dY;

    if(sGuid == "DrawText")

    {

        // 得到绘制参数.

        string sText = pCustomEntity.GetString("Text");

        double dTextHeight = pCustomEntity.GetDouble("TextHeight");

        // 绘制文字

        pWorldDraw.DrawText(curPoint.x, curPoint.y, sText, dTextHeight, 0, MCAD_McHorizontalAlignment.mcHorizontalAlignmentCenter, MCAD_McVerticalAlignment.mcVerticalAlignmentBottom);

    }

}

3、js中实现代码说明:

动态拖放时的绘制事件:

function DrawText()

{

    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 = "点取插入点";

    // 设置动态绘制参数.

    var spDrawData = getPt.InitUserDraw("DrawText");

    spDrawData.SetString("Text", txt);

    spDrawData.SetDouble("TextHeight", 100);

    // 开始取第一个点。

    if (getPt.go() != 1)

        return;

    var ret = spDrawData.Draw();

}

动态绘制文字:

function DynWorldDrawText( pCustomEntity, pWorldDraw, curPt) {

    // 得到绘制参数.

    var sText       = pCustomEntity.GetString("Text");

    var dTextHeight = pCustomEntity.GetDouble("TextHeight");

    // 绘制文字

    pWorldDraw.DrawText (curPt.x,curPt.y,sText,dTextHeight,0,1,1);

}

四、查找文字

1、主要用到函数说明:

(1)_DMxDrawX::NewSelectionSet

实例化一个构造选择集进行过滤,该类封装了选择集及其处理函数。

(2)_DMxDrawX::NewResbuf

新创建IMxDrawResbuf对象,构造一个过滤链表。

(3)IMxDrawResbuf::AddStringEx

向链表中增加一个string数据,比如:把文字对象,当着过滤条件。

spFilte.AddStringEx("TEXT,MTEXT",5020);

(4)IMxDrawSelectionSet::Select2

根据指定的选择方式在图上构造选择集,详细说明如下:

参数

说明

[in] MCAD_McSelect Mode

构造选择集方式

[in] VARIANT point1

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

[in] VARIANT point2

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

[in,optional] VARIANT filterType

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

[in,optional] VARIANT filterData

构造选择集的过滤数据

2、实例化一个构造选择集进行过滤,该类封装了选择集及其处理函数。将文字对象当作过滤条件,得到文字对象(此处可以是文字或多行文字)。遍历每个文字对象,将文字放到视区中间并绘制一个标记圆。c#代码实现如下:

      private void FineText()

        {

            // 创建选择集对象

              MxDrawSelectionSet ss = new MxDrawSelectionSet();

              // 创建过滤对象.

            MxDrawResbuf spFilte = new MxDrawResbuf();

              // 把文字对象,当着过滤条件.

            spFilte.AddStringEx("TEXT,MTEXT", 5020);

              // 得到图上,所有文字对象.

            ss.Select2(MCAD_McSelect.mcSelectionSetAll, nullnullnull, spFilte);

              // 遍历每个文字.

            bool bFind = false;

   // 获得输入的文字

            string str = textBox1.Text;

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

            {

                MxDrawEntity ent = ss.Item(i);

                if (ent == null)

                    continue;

                if (ent.ObjectName == "McDbText")

                {

                    // 是一个文字

                    MxDrawText text = (MxDrawText)ent;

                    string sTxt = text.TextString;

                     if (sTxt == str)

                    {

                        // 找到把文字放到视区中间.

                        axMxDrawX1.PutEntityInView(ent.ObjectID, 300);

                          var dLen = axMxDrawX1.ViewLongToDocCoord(80);

 

                        // 绘制一个标记圆.

                        axMxDrawX1.DrawVectorCircle(text.Position.x,

                        text.Position.y,

                        dLen, 65280);

                        bFind = true;

                    }

                }

                else if (ent.ObjectName == "McDbMText")

                {

                    // 找到一个多行文字

                    MxDrawResbuf param = new MxDrawResbuf();

                    param.AddObjectId(ent.ObjectID);

                    MxDrawMText mtext = (MxDrawMText)ent;

                     // 得到多行文字中的,文字内容.

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

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

                    {

                          if (ret.AtString(1) == str)

                        {

                            // 把文字放到视区.

                            axMxDrawX1.PutEntityInView(ent.ObjectID, 300);

                              var dLen = axMxDrawX1.ViewLongToDocCoord(80);

                              // 绘制一个标记圆.

                            axMxDrawX1.DrawVectorCircle(mtext.Location.x,

                                mtext.Location.y,

                                dLen, 65280);

                            bFind = true;

                              break;

                        }

                    }

                }

              }

            if (bFind)

                MessageBox.Show("找到文字");

            else

                MessageBox.Show("没有找到文字");

        }

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

// 创建选择集对象

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();

}

五、将文字变成曲线

js中代码实现说明:

// 打碎图纸上的文字。

var filter = mxOcx.NewResbuf();

// 设置选择过滤条件,只选择文字。

filter.AddStringEx("TEXT,MTEXT", 5020);

var ss = mxOcx.NewSelectionSet();

// 得到所有文字。

ss.AllSelect(filter);

// 遍历文字

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

{

    var ent = ss.Item(i);

    var param = mxOcx.NewResbuf();

    param.AddObjectId(ent.ObjectID);

    // 打碎自文字。

    var ret = mxOcx.CallEx("Mx_Explode", param);

    // 删除。

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

        ent.Erase();

}

mxOcx.ZoomAll();

六、删除全部文字

js中代码实现说明:

var ss = mxOcx.NewSelectionSet();

// 创建过滤对象.

var spFilte = mxOcx.NewResbuf();

// 把文字对象,当着过滤条件.

spFilte.AddStringEx("TEXT,MTEXT", 5020);

// 得到图上,所有文字对象.

ss.Select2(5, nullnullnull, spFilte);

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

{

    var ent = ss.Item(i);

    if (ent == null)

        continue;

    ent.Erase();

}

//更新视区显示

mxOcx.UpdateDisplay();

七、修改文字

js中代码实现说明:

function changetext() {

    var selEnt = mxOcx.NewComObject("IMxDrawUiPrEntity");

    selEnt.message = "选择需要修改的文字";

    if(selEnt.go() != 1)

        return;

    var image = selEnt.Entity();

    if(image == null)

        return;

    if (image.ObjectName == "McDbText") {

        var sTxt = '修改的文字';

        image.TextString = sTxt;

    }

}

八、得到文字内容

js中代码实现说明:

var selEnt = mxOcx.NewComObject("IMxDrawUiPrEntity");

selEnt.message = "选择文字";

if(selEnt.go() != 1)

    return;

var image = selEnt.Entity();

if(image == null)

    return;

if (image.ObjectName == "McDbText") {

    var sTxt =image.TextString ;

    alert(sTxt);

}

九、得到多行文字内容

js中代码实现说明:

// 与用户交互,在图上选择一个实体

          var ent = mxOcx.GetEntity("选择多行文字:");

          if(ent == null)

       {

   // 用户取消了选择.

              return;

       }

        var param = mxOcx.NewResbuf();

        param.AddObjectId(ent.ObjectID);

        var ret = mxOcx.CallEx("Mx_GetMTextContent", param);

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

              {

   alert(ret.AtString(1));

              }

十、计算文字外包

c#中代码实现说明:

     MxDrawText text = new MxDrawText();

     text.TextString = "BBBBBB";

     text.Height = 200;

     MxDrawPoint pt, pt2;

     text.GetBoundingBox(out pt, out pt2);

     MessageBox.Show((pt2.x - pt.x).ToString());

十一、增加文字样式

1、用户可以增加文字样式到数据库,并设置其字体等属性,具体实现c#代码如下:

  private void CreateText()

{

    MxDrawApplication app = new MxDrawApplication();

    //返回数据库中的文字样式表对象

    MxDrawTextStyleTable mxtst = app.WorkingDatabase().GetTextStyleTable();

    //增加新的文字样式

    MxDrawTextStyleTableRecord mxtstr = mxtst.Add("duanceng");

    //设置样式

    //设置文字的TrueType字体,如果文字样式设置了TrueType字体,就不会使用前面设置shx字体

    //参数一为turetype字体名 参数二为是否粗写  参数三为是否斜写  参数四为windows字符集  参数五暂没使用

    mxtstr.SetFont("黑体"falsefalse, 0, 0);

    //返回文字的高度

    mxtstr.textSize = 5;

    //返回数据库中的文字样式表对象

    //设置为当前文字样式

    app.WorkingDatabase().CurrentlyTextStyle = "duanceng";

}

2、具体实现js代码如下:

  function CreateText(){

    //返回控件的数据库对象

    var database =mxOcx.GetDatabase();

    //返回数据库中的文字样式表对象

    var mxtst = database.GetTextStyleTable();

    //增加新的文字样式

    var mxtstr = mxtst.Add("duanceng");

    //设置样式

    //设置文字的TrueType字体,如果文字样式设置了TrueType字体,就不会使用前面设置shx字体

    //参数一为turetype字体名 参数二为是否粗写  参数三为是否斜写  参数四为windows字符集  参数五暂没使用

    mxtstr.SetFont("黑体"falsefalse, 0, 0);

    //返回文字的高度

    mxtstr.textSize = 5;

    //增加新的文字样式

    var mxtstr = mxtst.Add("duanceng1");

    //设置样式

    //设置文字的TrueType字体,如果文字样式设置了TrueType字体,就不会使用前面设置shx字体

    //参数一为turetype字体名 参数二为是否粗写  参数三为是否斜写  参数四为windows字符集  参数五暂没使用

    mxtstr.SetFont("黑体"falsefalse, 0, 0);

    //返回文字的高度

    mxtstr.textSize = 9;

    //返回数据库中的文字样式表对象

    //设置为当前文字样式

    database.CurrentlyTextStyle = "duanceng";

}

十二、得到文字样式

1、用户可以得到所有文字样式名,具体实现c#代码如下:

  private void GetAllText()

{

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

    //返回数据库中的文字样式表对象

    MxDrawTextStyleTable mxtst = database.GetTextStyleTable();

    //创建一个遍历文字样式表中所有文字样式的遍历器

    MxDrawTextStyleTableIterator iter = mxtst.NewIterator();

    if (iter == null)

        return;

    string sRet = null;

    //移动当前遍历器位置

    for (; !iter.Done(); iter.Step(truefalse))

    {

        //返回遍历器当前位置的记录

        MxDrawTextStyleTableRecord spTextStyleRec = iter.GetRecord();

        //符号表记录名属性 

        sRet = sRet + ',' + spTextStyleRec.Name;

    }

    MessageBox.Show(sRet);

}

2、具体实现js代码如下:

  function GetAllText() {

    var database = mxOcx.GetDatabase();

    // 得到所有图层名

    var sRet = null;

    //返回数据库中的文字样式表对象

    var spTextStyleTable = database.GetTextStyleTable();

    //创建一个遍历层表中所有图层的遍历器

    var spIter = spTextStyleTable.NewIterator();

    //移动当前遍历器位置

    for(;!spIter.Done();spIter.Step(true,true))

    {

        //返回遍历器当前位置的记录

        var spTextStyleRec = spIter.GetRecord();

        //符号表记录名属性

        var sName = spTextStyleRec.Name;

        // 0零层不参加比较

        if(sName != "0")

        {

            if(sRet == null)

                sRet = sName;

            else

            {

                sRet = sRet +","+sName;

            }

        }

    }

    alert(sRet);

}

十三、删除文字样式

1、用户可以删除某个文字样式,具体实现c#代码如下:

  private void DelText()

{

    string txt = textBox1.Text;

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

    //返回数据库中的文字样式表表对象

    MxDrawTextStyleTable TextStyleTable = database.GetTextStyleTable();

    //得到层表中的文字样式表对象

    MxDrawTextStyleTableRecord TextStyleRec = TextStyleTable.GetAt(txt, false);

    if (TextStyleRec == null)

        return;

    //删除对象

    TextStyleRec.Erase();

    MessageBox.Show("成功删除文字样式");

}

2、具体实现js代码如下:

  function DelText() {

    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];

    }

    var database = mxOcx.GetDatabase();

    //返回数据库中的文字样式表表对象

    var TextStyleTable = database.GetTextStyleTable();

    //得到层表中的文字样式表对象

    var TextStyleRec = TextStyleTable.GetAt(txt, false);

    if (TextStyleRec == null)

        return;

    //删除对象

    TextStyleRec.Erase();

    alert("成功删除文字样式");

}

十四、加粗文字

1、首先增加文字样式到数据库,如下代码所示:

function CreateText(){

    //返回控件的数据库对象

    var database =mxOcx.GetDatabase();

    //返回数据库中的文字样式表对象

    var mxtst = database.GetTextStyleTable();

    //增加新的文字样式

    var mxtstr = mxtst.Add("duanceng");

    //设置样式

    //设置文字的TrueType字体,如果文字样式设置了TrueType字体,就不会使用前面设置shx字体

    //参数一为turetype字体名 参数二为是否粗写  参数三为是否斜写  参数四为windows字符集  参数五暂没使用

    mxtstr.SetFont("黑体"falsefalse, 0, 0);

    //返回文字的高度

    mxtstr.textSize = 5;

    //增加新的文字样式

    var mxtstr = mxtst.Add("duanceng1");

    //设置样式

    //设置文字的TrueType字体,如果文字样式设置了TrueType字体,就不会使用前面设置shx字体

    //参数一为turetype字体名 参数二为是否粗写  参数三为是否斜写  参数四为windows字符集  参数五暂没使用

    mxtstr.SetFont("黑体"falsefalse, 0, 0);

    //返回文字的高度

    mxtstr.textSize = 9;

    //返回数据库中的文字样式表对象

    //设置为当前文字样式

    //database.CurrentlyTextStyle = "duanceng";

}

2、将选中的文字样式设置为数据库中需要的文字样式名,如下代码所示:

function BoldText() {

    var selEnt = mxOcx.NewComObject("IMxDrawUiPrEntity");

    selEnt.message = "选择需要修改的文字";

    if(selEnt.go() != 1)

        return;

    var text = selEnt.Entity();

    if(text == null)

        return;

    if (text.ObjectName == "McDbText") {

        text.TextStyle = "duanceng";

    }

}

十五、将文字变成曲线2

1、c#代码如下所示:

     MxDrawUtility mxUtility = new MxDrawUtility();

     MxDrawPoint getPt;

     MxDrawEntity ent = mxUtility.GetEntity(out getPt, "选择文字对象");     

     if (ent == null)         

         return;

     MxDrawText txt = (MxDrawText)ent;

     MxDrawResbuf ret  = txt.ToCurves();     

     if (ret == null)         

         return;     

     or (int i = 0; i < ret.Count; i++)

     {

         MxDrawEntity newEnt = (MxDrawEntity)ret.AtObject(i);

         axMxDrawX1.DrawEntity(newEnt);

     }

2、js代码如下所示:

var ent = mxOcx.GetEntity( "选择文字对象");

if (ent == null)

    return;

var txt = ent;

var ret  = txt.ToCurves();

if (ret == null)

    return;

for (var i = 0; i < ret.Count; i++)

{

    var newEnt = ret.AtObject(i);

    mxOcx.DrawEntity(newEnt);

}

梦想CAD控件文字COM接口知识点相关推荐

  1. 梦想CAD控件图层COM接口知识点

    一.新建图层 1.主要用到函数说明:_DMxDrawX::AddLayer 增加新的图层.详细说明如下: 参数 说明 BSTR pszName 图层名 2.c#中实现代码说明: private voi ...

  2. 梦想CAD控件图块COM接口知识点

    梦想CAD控件图块COM接口知识点 图块是将多个实体组合成一个整体,并给这个整体命名保存,在以后的图形编辑中图块就被视为一个实体.一个图块包括可见的实体如线.圆.圆弧以及可见或不可见的属性数据.图块的 ...

  3. 梦想CAD控件COM接口光栅图处理

    在CAD操作过程中,我们在设计绘图时,光栅图像也就是我们常说的图片,应用非常广泛,在CAD中可以直接插入光栅图像,并且可以对光栅图像进行裁剪.透明度调整等一些操作,在网页可以快速实现我们所需功能. 一 ...

  4. 梦想CAD控件 2021.12.06更新

    梦想CAD控件 2021.12.06更新 下载地址:https://www.mxdraw.com/ndetail_30180.html 修改得到cad.dwg预览图片,如果图片是png格式,读取失败的 ...

  5. 梦想CAD控件(网页CAD插件) 2022.12.12更新

    梦想CAD控件(网页CAD插件) 2022.12.12更新 试用下载:https://www.mxdraw.com/ndetail_30238.html 1. 修改CAD点对象,不能看到闪烁效果问题 ...

  6. 如何在网页中浏览和编辑DWG文件 梦想CAD控件 www.mxdraw.com

    (百度百科连接) 梦想绘图控件5.2  是国内最强,最专业的CAD开发组件(控件),不需要AutoCAD就能独立运行.控件使用VC 2010开发,最早从2007年第一个版本完成,经过多年的累积已经非常 ...

  7. 梦想CAD控件安卓参数绘图

    一.简介 在CAD绘图中,参数化绘图可以帮助我们极大缩短设计时间,用户可以按照设计意图控制绘图对象,这样即使对象发生了变化,具体的关系和测量数据仍将保持不变,能够对几何图形和标注进行控制,可以帮助用户 ...

  8. 梦想CAD控件网页版右键弹出菜单

    用户需要右键弹出菜单,则需要响应鼠标事件,右键按下后,弹出菜单分为在命令下运行及在非命令下运行,具体介绍如下 : 一.新建菜单文件 1.新一个文本文件: mxpoptest.mnu,内容如下(此文件为 ...

  9. 梦想CAD控件com接口界面控制右键弹出菜单

    用户需要右键弹出菜单,则需要响应鼠标事件,右键按下后,弹出菜单分为在命令下运行及在非命令下运行,具体介绍如下(C#语言参考例子:"samples\CSharpRightKeyMenu\CSh ...

最新文章

  1. utf8 txt文本转ansi vbs_数据分析之路-文本分析
  2. 如何仿写thinkphp的C方法?
  3. 【Android 逆向】ptrace 函数 ( C 标准库 ptrace 函数简介 | ptrace 函数真实作用 )
  4. list集合去重复元素
  5. 2、Flutter Widget(IOS Style) - CupertinoActionSheet;
  6. 构建一个虚拟DOM并转换为真实DOM
  7. 【编程题目】有 n 个长为 m+1 的字符串,如果某个字符串的最后 m 个字符与某个字符串的前 m 个字符匹配......
  8. 洛谷P1482 Cantor表(升级版) 题解
  9. 通过键盘方向键控制TreeView节点的移动
  10. 汇编中bss,data,text,rodata,heap,stack段的作用
  11. java多线程之生产者消费者问题
  12. 利用深度卷积模型对巴拉科咖啡叶疾病进行分类
  13. 初恋 张润贞 吉他谱
  14. Mysql及SQLyog安装教程
  15. ubuntu上vsftpd服务配置
  16. 苹果平板怎么卸载软件_石全石美软件更新,苹果安卓平板都能使用
  17. LEF和GDS匹配问题
  18. Java实现Linux的md5加密,Linux_详细讲解:Linux系统GRUB的MD5加密方法,1、用grub-md5-crypt成生GRUB的md5密 - phpStudy...
  19. 小米服务组件是什么东西_如何用小米智能家庭打造环境控制(温度、湿度、空气质量)...
  20. py2neo—Neo4jpython的配合使用

热门文章

  1. 花开花落,终只能一个人欣赏。伤感文字分享。
  2. 将rmvb下载的电影转换成可用家庭dvd播放的dvd格式
  3. 用python编写五子棋游戏代码
  4. Python 爬虫利器四之 PhantomJS 的用法
  5. 未登陆词/停用词建立和使用
  6. 你对你的工作满意吗?为您解密员工满意度调查的 6 个问题
  7. 2018年最全iOS开发之第三方库
  8. 10:计算并联电阻的阻值
  9. JAVA在线选房系统(JAVA毕业设计含源码和教程)
  10. 读杨植麟智源采访有感