- MxDraw 云图
- 快速入门
- 前端 mxdraw 和 mxcad 库预览编辑图纸
- 后台使用 Node.js 调用梦想 API
- CAD 与 GIS 集成说明
- 梦想云图 Node.JS 服务
- iOS 开发
- 安卓开发
- 网页 CAD 开发
- 网页快速入门 aspaps.netphpjava
- 图形数据库
- 参数化绘图
- 交互绘图
- 选择集
- 扩展数据
- 自定义实体
- 自定义命令
- 光栅图处理
- 图面搜索
- 控件事件
- 打印控制
- 界面控制
- COM 开发
- 视频教程
- VB 快速入门
- Delphi 快速入门
- CSharp 快速入门
- java 快速入门
- QT 快速入门
- 易语言快速入门
- Powerbuilder 快速入门
- wpf 控件入门
- 图形数据库
- 参数化绘图
- 交互绘图
- 选择集
- 扩展数据
- 自定义命令
- 自定义实体
- 打印控制
- 控件事件
- 图面搜索
- 光栅图处理
- 界面控制
- C++ 开发
- C++ bulider 快速入门
- C++ 快速入门(VS2010)
- C++ 快速入门(com 接口)
- 图纸数据库
- 参数化绘图
- 交互绘图
- 选择集
- 扩展程序
- 扩展数据
- 自定义函数
- 自定义实体
- 光栅图处理
- 图面搜索
- 控件事件
- 界面控制
- 常见问题
- 试用技术服务申请
- 会员下载最新程序
- 备用下载
- 控件安装运行说明
- 控件最新更新
- 控件功能简介
- 控件图形数据库
- 控件界面控制
- 控件命令执行原理
- 控件系统变量说明
- 控件常见问题说明
- 修改对象属性
- 网页加载 CAD 图纸的两个方案
- MxDraw3D 控件
- 前端基础工程化知识
文字样式
DWG数据库中,文字样式存放在文字样式表中,表类名:MxDrawTextStyleTable
,它的详细接口说明参考:http://www.mxdraw.com/help/IMxDrawTextStyleTable.htm
文字样式表中每一条记录称为一种文字样式,类名:MxDrawTextStyleTableRecord
,它的详细接口说明参考:http://www.mxdraw.com/help/IMxDrawTextStyleTableRecord.htm
文字样式是随图纸保存,不同的图纸使用的文字样式都可能会不一样。
文字样式设置命令:Mx_Style, 比如:
private void AddTextStyle(String sNewTextStyleName) { MxDrawApplication app = new MxDrawApplication(); //返回数据库中的文字样式表对象 MxDrawTextStyleTable txtStyleTable = app.WorkingDatabase().GetTextStyleTable(); MxDrawTextStyleTableRecord txtStyle = txtStyleTable.GetAt(sNewTextStyleName, true); if(txtStyle != null) { // 当前数据已经有该文字样。 // 如果被删除,就反删除。 txtStyle.SetProp("unErase", null); return; } //增加新的文字样式 MxDrawTextStyleTableRecord mxtstr = txtStyleTable.Add(sNewTextStyleName); //设置样式的属性,如果文字样式设置了TrueType字体,就不会使用前面设置shx字体 //参数一为turetype字体名 参数二为是否粗写 参数三为是否斜写 参数四为windows字符集 参数五暂没使用 mxtstr.SetFont("黑体", false, false, 0, 0); //设置文字样式的高度 mxtstr.textSize = 5; }
调用上面函数,增加"aa"文字样式
AddTextStyle("aa");
或者也可以这样
使用ocx.AddTextStyle1(添加线形字体文字样式),ocx.AddTextStyle2(添加TrueType字体文字样式)添加文字,该函数详细接口说明参考:http://www.mxdraw.com/help/MxDrawXLib___DMxDrawX__AddTextStyle1@BSTR@BSTR@BSTR@DOUBLE.htm
比如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. 得到所有文字样式
下面代码是遍历文字样式表中所有文字样式,并得到所有文字样式名,在遍历的循环中,得到每个文字样式记录对象,可以去修改它的属性
private void GetAllTextStyle() { 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); }
运行效果如下:
D. 删除文字样式
在删除文字样式前,最好判断图上有没有文字对象正在使用该文字样式,如果有的话就不要删除文字样式
c#代码如下:
private void DelTextStyle(String sTextStyleName) { MxDrawDatabase database = (MxDrawDatabase)axMxDrawX1.GetDatabase(); //返回数据库中的文字样式表表对象 MxDrawTextStyleTable TextStyleTable = database.GetTextStyleTable(); //得到文字样表中的文字样式对象 MxDrawTextStyleTableRecord TextStyleRec = TextStyleTable.GetAt(sTextStyleName, false); if (TextStyleRec == null) return; //删除文字样式 TextStyleRec.Erase(); MessageBox.Show("成功删除文字样式"); }
E.调用文字样式管理界面
Mx_Style
是文字样式命令名
例如代码 C#:
axMxDrawX1.SendStringToExecute("Mx_Style");
F. 修改文字对象的文字样式
文字对象都一个TextStyle属性,用这个属性可以设置,或取到文字对象的文字样式。
下面代码演示设置一个文字对象的字体为黑体,如果没有文字样式,就添加文字样式。
void SetTextStyle() { MxDrawUtility mxUtility = new MxDrawUtility(); // 当用户在图上选择一个对象。 MxDrawPoint getPt; MxDrawEntity ent = mxUtility.GetEntity(out getPt, "\n 选择实体对象:"); if (ent == null) { return; } // 得到数据库对象. MxDrawDatabase database = (MxDrawDatabase)axMxDrawX1.GetDatabase(); // 得到文本式表. MxDrawTextStyleTable textStyleTable = database.GetTextStyleTable(); string sTextStyleName = "MyTextStyleName"; // 得到文本式 MxDrawTextStyleTableRecord textStyle = textStyleTable.GetAt(sTextStyleName, true); if (textStyle == null) { // 如果没有就新建一个。 axMxDrawX1.AddTextStyle2(sTextStyleName, "黑体", 0.7); } else { // 如果被删除,就反删除。 textStyle.SetProp("unErase", null); textStyle.SetFont("黑体", false, false, 0, 0); } // 设置实体文字样式。 ent.TextStyle = sTextStyleName; MessageBox.Show("已将该实体文字样式"); }
G. 得到图所有文字对象使用的字体文件
下面代码会遍历图上所有CAD文字对象,然后取它使用的字体信息
void getAllTextFont() { MxDrawDatabase database = (MxDrawDatabase)axMxDrawX1.GetDatabase(); //返回数据库中的文字样式表表对象 MxDrawTextStyleTable textStyleTable = database.GetTextStyleTable(); // 定义选择集对象 MxDrawSelectionSet ss = new MxDrawSelectionSet(); // 全选图上所有对象。 ss.AllSelect(); int i = 0; // 遍历所有对象 for(;i <ss.Count;i++) { MxDrawEntity ent = ss.Item(i); // 得到对象使用的文字样式记录. MxDrawTextStyleTableRecord rec = textStyleTable.GetAt(ent.TextStyle); if (rec == null) continue; // 得到TrueType字体属性。 String pTypeface = ""; Boolean bold = false; Boolean italic = false; Int32 charset = 0; Int32 pitchAndFamily = 0; rec.Font(out pTypeface, out bold, out italic, out charset, out pitchAndFamily); String sShxFileName; String sBigShxFileName; // 如果TrueType字体名为空,表示使用的Shx字体。 if(pTypeface.Length == 0) { // 得到西文字体 sShxFileName = rec.fileName; // 得到中文字体 sBigShxFileName = rec.bigFontFileName; } } }
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文件
iniset属性接口说明,参考:http://www.mxdraw.com/help/MxDrawXLib___DMxDrawX__Iniset.htm
I. 修改文字样式
下面代码由文字样式名得到文字样字记录,然后它的属性。
c#代码如下:
private void ModifyTextStyle(String sTextStyleName) { MxDrawDatabase database = (MxDrawDatabase)axMxDrawX1.GetDatabase(); //返回数据库中的文字样式表表对象 MxDrawTextStyleTable TextStyleTable = database.GetTextStyleTable(); //得到文字样表中的文字样式对象 MxDrawTextStyleTableRecord TextStyleRec = TextStyleTable.GetAt(sTextStyleName, false); if (TextStyleRec == null) return; //修改文字样式的字体高度 TextStyleRec.textSize = 10; //修改文字宽度缩放比例 TextStyleRec.xScale = 0.7; }
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论