一、参数绘制文字

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

主要用到函数说明:

_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

_DMxDrawX::AddTextStyle1

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

参数

说明

BSTR pszName

文字样式名称

BSTR pszFileName

shx文件名

BSTR pszBigFontFileName

big shx文件名

DOUBLE dXScale

文字宽度缩放比例

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

}

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

}

二、参数绘制多行文字

主要用到函数说明:

_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,

_DMxDrawX::AddTextStyle2

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

参数

说明

BSTR pszName

文字样式名称

BSTR pszTrueTypeFontName

TrueType字体名

DOUBLE dXScale

文字宽度缩放比例

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

}

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

}

三、交互绘制文字

主要用到函数说明:

_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

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

    }

}

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

}

四、查找文字

主要用到函数说明:

_DMxDrawX::NewSelectionSet

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

_DMxDrawX::NewResbuf

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

IMxDrawResbuf::AddStringEx

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

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

IMxDrawSelectionSet::Select2

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

参数

说明

[in] MCAD_McSelect Mode

构造选择集方式

[in] VARIANT point1

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

[in] VARIANT point2

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

[in,optional] VARIANT filterType

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

[in,optional] VARIANT filterData

构造选择集的过滤数据

实例化一个构造选择集进行过滤,该类封装了选择集及其处理函数。将文字对象当作过滤条件,得到文字对象(此处可以是文字或多行文字)。遍历每个文字对象,将文字放到视区中间并绘制一个标记圆。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("没有找到文字");

        }

实例化一个构造选择集进行过滤,该类封装了选择集及其处理函数。将文字对象当作过滤条件,得到文字对象(此处可以是文字或多行文字)。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());

十一、增加文字样式

用户可以增加文字样式到数据库,并设置其字体等属性,具体实现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";

}

具体实现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";

}

十二、得到文字样式

用户可以得到所有文字样式名,具体实现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);

}

具体实现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);

}

十三、删除文字样式

用户可以删除某个文字样式,具体实现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("成功删除文字样式");

}

具体实现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("成功删除文字样式");

}

十四、加粗文字

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

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

}

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

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

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

     }

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接口知识点

    梦想CAD控件图层COM接口知识点 一.新建图层 主要用到函数说明: _DMxDrawX::AddLayer 增加新的图层.详细说明如下: 参数 说明 BSTR pszName 图层名 c#中实现代码 ...

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

    一.鼠标事件 _DMxDrawXEvents::MouseEvent 控件中的鼠标事件. 参数 说明 LONG lType 事件类型,1鼠标移动,2是鼠标左键按下,3是鼠标右键按下,4是鼠标左键双击 ...

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

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

  4. 如何在网页中浏览和编辑DWG文件 梦想CAD控件

    如何在网页中浏览和编辑DWG文件 梦想CAD控件 www.mxdraw.com 梦想绘图控件5.2  是国内最强,最专业的CAD开发组件(控件),不需要AutoCAD就能独立运行.控件使用VC 201 ...

  5. 梦想CAD控件网页版搜索图面上的文字

    在网页中查找到CAD控件图纸上的文字.点击此处在线演示. 主要用到函数说明: _DMxDrawX::NewSelectionSet 实例化一个构造选择集进行过滤,该类封装了选择集及其处理函数. _DM ...

  6. 梦想CAD控件COM接口自定义命令

    在CAD软件操作中,为方便使用者,使用自定义命令发出命令,完成CAD绘图,修改,保存等操作.点击此处下载演示实例. _DMxDrawX::RegistUserCustomCommand 向CAD控件注 ...

  7. 梦想CAD控件,用于浏览和编辑DWG文件,在脱离AUTOCAD的情况下独立运行,相当于简易CAD

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

  8. 梦想CAD控件安卓交互绘图

    在cad使用过程中,动态绘制的使用会使我们绘图速度大大加快.在此演示中,我们绘制了直线.多段线.点.样条线.圆.圆弧.椭圆.椭圆弧等实体. 用户可以在CAD控件视区任意位置绘制直线. 主要用到函数说明 ...

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

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

随机推荐

  1. iOS开发中訪问相冊摄像像头

    iOS开发中訪问相冊摄像像头 源代码下载地址http://download.csdn.net/download/jingjingxujiayou/7270479 在AppDelegate.m文件里 - ...

  2. tf.image.resize_bilinear 图像缩放,双线性插值-图像中心对齐

    http://www.cnblogs.com/yssongest/p/5303151.html 双线性插值算法及需要注意事项 input = tf.placeholder(tf.float32, sh ...

  3. 三星手机root后开启调试模式

    背景说明:三星手机高版本的手机进行root后也无法安装xposed,无法开启debuggable,使用androistdio无法进行调试. 1 .连接ddms无法显示正在运行的进程. 2.安装mpro ...

  4. android EditText如何使光标随着输入内容移动

    EditText 使光标随着输入内容移动的setSelection()

  5. AndroidCommon示例

    效果图如下:              1) 自动滚动无限循环ViewPager.ViewPager嵌套自动滚动ViewPager (2) 网络缓存Demo (3) 图片缓存Demo,图片SD卡缓存D ...

  6. Java多线程 -- 正确使用Volatile变量

    Java 语言中的 volatile 变量可以被看作是一种 “程度较轻的 synchronized”:与 synchronized 块相比,volatile 变量所需的编码较少,并且运行时开销也较少, ...

  7. HashMap1

    一.Java并发基础 当一个对象或变量可以被多个线程共享的时候,就有可能使得程序的逻辑出现问题. 在一个对象中有一个变量i=0,有两个线程A,B都想对i加1,这个时候便有问题显现出来,关键就是对i加1 ...

  8. bzoj 3390: [Usaco2004 Dec]Bad Cowtractors牛的报复【最大生成树】

    裸的最大生成树,注意判不连通情况 #include<iostream> #include<cstdio> #include<algorithm> using nam ...

  9. bzoj 1585: [Usaco2009 Mar]Earthquake Damage 2 地震伤害【最小割】

    枚举建图.jpg 一开始建的图挂了,于是枚举了几种建图方式-- 因为要删点,所以拆点,连接(i,i',1),对于原来图上的边(u,v),连接(u',v,inf),(v',u,inf),然后连接(s,i ...

  10. java 实现word文档在线预览

    一.准备工具 1.通过第三方工具openoffice,将word.excel.ppt.txt等文件转换为pdf文件 下载地址:http://www.openoffice.org/download/in ...