一、参数绘制文字
在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);} |