LOGO
帮助文档
旧版文档
技术资讯

每一次案例的完美合作,是对我们团队高度认可,相信未来会更好!

梦想CAD文字COM接口知识点

一、参数绘制文字


在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("黑体", false, false, 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(true, false))
    {
        //返回遍历器当前位置的记录
        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控件,DWG网页,CAD网页,CAD控件,CAD开发