一、参数绘制文字
在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, null , null , null , 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, null , null , null , 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( "黑体" , false , false , 0, 0); //返回文字的高度 mxtstr.textSize = 5; //增加新的文字样式 var mxtstr = mxtst.Add( "duanceng1" ); //设置样式 //设置文字的TrueType字体,如果文字样式设置了TrueType字体,就不会使用前面设置shx字体 //参数一为turetype字体名 参数二为是否粗写 参数三为是否斜写 参数四为windows字符集 参数五暂没使用 mxtstr.SetFont( "黑体" , false , false , 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( "黑体" , false , false , 0, 0); //返回文字的高度 mxtstr.textSize = 5; //增加新的文字样式 var mxtstr = mxtst.Add( "duanceng1" ); //设置样式 //设置文字的TrueType字体,如果文字样式设置了TrueType字体,就不会使用前面设置shx字体 //参数一为turetype字体名 参数二为是否粗写 参数三为是否斜写 参数四为windows字符集 参数五暂没使用 mxtstr.SetFont( "黑体" , false , false , 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); } |