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