- 积分
- 6498
- 明经币
- 个
- 注册时间
- 2018-1-17
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
本帖最后由 MxDraw 于 2021-6-15 15:57 编辑
文字样式
DWG数据库中,文字样式存放在文字样式表中,表类名: MxDrawTextStyleTable ,它的详细接口说明参考:http://www.mxdraw.com/help/IMxDrawTextStyleTable.htm文字样式表中每一条记录称为一种文字样式,类名: MxDrawTextStyleTableRecord ,它的详细接口说明参考:http://www.mxdraw.com/help/IMxDrawTextStyleTableRecord.htm文字样式是随图纸保存,不同的图纸使用的文字样式都可能会不一样。 文字样式设置命令:Mx_Style, 比如: mxOcx.SendStringToExecute("Mx_Style")调用样式界面,如下图: 文字样式主要属性有:字体文件名,大字体文件名,新建文本高度,新建文本宽度缩放比例,文字倾斜角度,TrueType字体数据等 DWG数据库默认总是有一个"Standard"文字样式,该文字样式不能被删除。 文字样式在线演示例子:点击此处在线演示视频演示: A. 当前文字样式 当前文字样式表示向DWG数据库添加一个文字对象时,使用的默认的文字样式,通过系统变量TEXTSTYLE操作,系统变量设置参考: http://www.mxdraw.com/help_2_48.html设置当前文字样式JS
| // 添加文字样式 |
| mxOcx.AddTextStyle1("MyTextStyle", "txt.shx", "hztxt.shx", 1); |
| // 得到当前数据库 |
| var database =mxOcx.GetDatabase(); |
| // 设置当前文字样式 |
| database.CurrentlyTextStyle = "MyTextStyle"; |
取当前文字样式代码: var sCurrentTextStyle = database.CurrentlyTextStyle;B. 添加文字样式 下面代码,得到当前数据库中的文字样式表,然后向样式表中添加一个文字样表记录 JS代码:
| function CreateText(){ |
| //返回控件的数据库对象 |
| var database =mxOcx.GetDatabase(); |
| //返回数据库中的文字样式表对象 |
| var mxtst = database.GetTextStyleTable(); |
| |
| var txtStyle = mxtst.GetAt("duanceng", true); |
| if(txtStyle != null) |
| { |
| // 当前数据已经有该文字样。 |
| // 如果被删除,就反删除。 |
| txtStyle.SetProp("unErase", null); |
| return; |
| } |
| |
| //增加新的文字样式 |
| var mxtstr = mxtst.Add("duanceng"); |
| //设置样式 |
| //设置文字的TrueType字体,如果文字样式设置了TrueType字体,就不会使用前面设置shx字体 |
| //参数一为turetype字体名 参数二为是否粗写 参数三为是否斜写 参数四为windows字符集 参数五暂没使用 |
| mxtstr.SetFont("黑体", false, false, 0, 0); |
| //返回文字的高度 |
| mxtstr.textSize = 5; |
| |
| } |
调用上面函数,增加"aa"文字样式 AddTextStyle("aa");或者也可以这样: 使用ocx.AddTextStyle1(添加线形字体文字样式),ocx.AddTextStyle2(添加TrueType字体文字样式)添加文字,该函数详细接口说明参考:比如VB代码
| MxDrawX1.AddTextStyle1 "MyTextStyle", "italicc.shx", "gbcbig.shx", 0.7 |
| MxDrawX1.TextStyle = "MyTextStyle" |
| MxDrawX1.DrawColor = 255 |
| MxDrawX1.DrawText 0, 3000, "梦想绘图控件3.0 www.mxdraw.com", 100, 0, 0, 1 |
比如添加一个黑体字体的文字样式
| '添加TureType字体 |
| MxDrawX1.AddTextStyle2 "MyTrueTypeStyle", "黑体", 0.7 |
| MxDrawX1.TextStyle = "MyTrueTypeStyle" |
| MxDrawX1.DrawText 0, 3150, "梦想绘图控件3.0 www.mxdraw.com", 100, 0, 0, 1 |
效果展示: C. 得到所有文字样式 下面代码是遍历文字样式表中所有文字样式,并得到所有文字样式名,在遍历的循环中,得到每个文字样式记录对象,可以去修改它的属性
| 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); |
| } |
D. 删除文字样式 在删除文字样式前,最好判断图上有没有文字对象正在使用该文字样式,如果有的话就不要删除文字样式 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("成功删除文字样式"); |
| } |
E.调用文字样式管理界面 Mx_Style是文字样式命令名 例如代码 JS: mxOcx.SendStringToExecute("Mx_Style");F. 修改文字对象的文字样式 文字对象都一个TextStyle属性,用这个属性可以设置,或取到文字对象的文字样式。 下面代码演示设置一个文字对象的字体为黑体,如果没有文字样式,就添加文字样式。
| var ent = mxOcx.GetEntity("选择实体对象:"); |
| if(ent == null) |
| { |
| return; |
| } |
| // 得到数据库对象. |
| var database = mxOcx.GetDatabase(); |
| // 得到文本式表. |
| var textStyleTable = database.GetTextStyleTable(); |
| var sTextStyleName = "MyTextStyleName"; |
| // 得到文本式 |
| var textStyle = textStyleTable.GetAt(sTextStyleName, true); |
| if (textStyle == null) |
| { |
| // 如果没有就新建一个。 |
| mxOcx.AddTextStyle2(sTextStyleName, "黑体", 0.7); |
| } |
| else |
| { |
| // 如果被删除,就反删除。 |
| textStyle.SetProp("unErase", null); |
| textStyle.SetFont("黑体", false, false, 0, 0); |
| } |
| // 设置实体文字样式。 |
| ent.TextStyle = sTextStyleName; |
| alert("已将该实体设置文字样式"); |
G. 得到图所有文字对象使用的字体文件 下面代码会遍历图上所有CAD文字对象,然后取它使用的字体信息
| var database = mxOcx.GetDatabase(); |
| //返回数据库中的文字样式表表对象 |
| var textStyleTable = database.GetTextStyleTable(); |
| // 定义选择集对象 |
| var ss = mxOcx.NewSelectionSet(); |
| //构造一个过滤链表 |
| var spFilte = mxOcx.NewResbuf(); |
| //得到当前空间的所有实体 |
| ss.AllSelect (spFilte); |
| |
| // 遍历所有对象 |
| for(var i = 0;i <ss.Count;i++) |
| { |
| var ent = ss.Item(i); |
| // 得到对象使用的文字样式记录. |
| var rec = textStyleTable.GetAt(ent.TextStyle); |
| if (rec == null) |
| continue; |
| // 得到TrueType字体属性。 |
| var pTypeface = ""; |
| var bold = false; |
| var italic = false; |
| var charset = 0; |
| var pitchAndFamily = 0; |
| rec.Font(pTypeface,bold,italic,charset,pitchAndFamily); |
| var sShxFileName; |
| var sBigShxFileName; |
| var sShxFileName1; |
| |
| // 如果TrueType字体名为空,表示使用的Shx字体。 |
| if(pTypeface.Length != 0) |
| { |
| // 得到西文字体 |
| sShxFileName = rec.fileName; |
| |
| // 得到中文字体 |
| sBigShxFileName = rec.bigFontFileName; |
| sShxFileName1=sShxFileName+sBigShxFileName; |
| |
| alert(sShxFileName1); |
| |
| } |
| |
| } |
H. 文字显示号问题原因和解决办法 打开DWG时,图纸中使用的shx字体文件在本地电脑不能找到时,控件会默认使用缺省的字体txt.shx,hztxt.shx来代替,这样一般文字不会显示成问号,但是如果文字中的特殊符号在默认字体也一样找不到,这时就会显示成问号。 使用缺省的字体的代替的文字样式,可能会出现文字显示大小,样子不一至的效果。 这时最好的办法是,把需要使用的字体拷到MxDrawX.ocx所在目录的shx目录下,如果不知道当前用的MxDrawX.ocx在位置,可以命令行输入mx_about看到控件安装位置 如下图,打开图时,在命令行提示找不到字体 修改控件Iniset属性,Iniset="ShxPath=D:/shx"添加一个字体搜索位置, 修改控件Iniset属性, Iniset="DownLoadServerFont=Y",设置打开网络图纸时,自动下载服务器上的字体文件。默认不会下载.,服务器需要 设置MIME,增加shx文件类型支持. 修改控件Iniset属性, Iniset="SHXWEBSITEADDRESS=http://www.mxdraw.com/shx",设置字体下载位置 修改控件Iniset属性, Iniset="DefaultText=txt.shx", 设置缺省的shx文件 修改控件Iniset属性, Iniset="DefaultBigText=hztxt.shx", 设置缺省的big shx文件
|
|