一、参数绘制文字

在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. PHP连接数据库(注冊页面的增删改查)

    1.连接数据库 ---------–connect.php--------------– <?php //本地測试 $host = '127.0.0.1'; $port = 3306; $use ...

  2. Ubuntu虚拟机安装遇到的各种坑

    配置 13年Macbook Pro 虚拟机环境 Parallels Desktop Linux 版本 Ubuntu 16.04 1.分辨率问题 进入只有一种分辨率 终端输入 sudo xdiagnos ...

  3. libsqlite3.dylib与libsqlite3.0.dylib的差别

    在我们加入数据库框架时,在搜索框中输入sqlitekeyword,以下列表区会显示libsqlite3.dylib,libsqlite3.0.dylib. 此时我们选择libsqlite3.0.dyl ...

  4. JavaScript全局属性/函数

    JavaScript 全局属性和方法可用于创建Javascript对象. JavaScript 全局属性 属性 描述 Infinity 代表正的无穷大的数值. NaN 指示某个值是不是数字值. und ...

  5. Swing的Look And Feel机制研究

    首先,参考了一下这篇文章 里面提到需要自己Override L&F的initClassDefaults方法,但是查看了一下NimbusLookAndFeel, 发现它为了没有实现initCla ...

  6. SepicalJudge

    原文:http://www.cnblogs.com/chouti/p/5752819.html Special Judge:当正确的输出结果不唯一的时候需要的自定义校验器 首先有个框架 #includ ...

  7. Hadoop安装配置(ubuntu-12.04.2-server-amd64)

    环境如下: ubuntu-12.04.2-server-amd64 hadoop-1.0.4 VirtualBox 1.在VBox中安装Ubuntu Server,用户名和密码都是hadoop,安装完 ...

  8. bzoj4825

    LCT 昨天调试一天没出来,今天推倒重写还是gg了,内心崩溃照着源代码抄,结果发现自己把原树fa和splay的fa一起维护,各种re... 其实我们手玩一下,发现其实树的形态变化很小,那么就可以用lc ...

  9. uva10870

    https://vjudge.net/problem/UVA-10870 裸的矩阵快速幂 注意系数矩阵在前面 因为系数矩阵为d*d 方程矩阵为d * 1 放反了就是d * 1 d * d 不符合矩阵乘 ...

  10. C++中虚析构函数的作用 (转载)

    转自:http://blog.csdn.net/starlee/article/details/619827 我们知道,用C++开发的时候,用来做基类的类的析构函数一般都是虚函数.可是,为什么要这样做 ...