[求助] VB.net创建文字样式的几个问题
<p><font style="BACKGROUND-COLOR: #ffffff" size="3" face="Verdana">几位老大编写的《AutoCAD VBA & VB.NET开发》一书中讲了文字样式的创建等方法。我今天下午在使用的时候,遇到三个不明白的问题:</font></p><font style="BACKGROUND-COLOR: #ffffff" size="3" face="Verdana"><p><br/><font color="#ff0000">(1)“宋体”的文件名称是什么?</font></p>
<p><br/>我的测试背景是Win7+VS2010+AutoCAD2008,根据文中提供的方法,到控制面板的字体中找到“宋体”的文件名是simsun.ttc,但是按照下面的代码却没有成功地生成字体样式:<br/> Dim str As New TextStyleTableRecord()<br/> str.Name = "TextStyle-宋体-横向"<br/> str.FileName = "simsun.ttc"<br/>我猜是不是应该为“simsun.ttf”,结果运行后字体名显示为“SimSun-ExtB”,也失败了。那到底是什么啊?</font></p>
<p><font size="3"></font> </p>
<p><font style="BACKGROUND-COLOR: #ffffff" size="3" face="Verdana"><font color="#ff0000">(2)字体样式里面垂直字体如何定义?</font></font></p>
<p><font style="BACKGROUND-COLOR: #ffffff" size="3" face="Verdana"><font color="#ff0000"><br/></font>找了半天,在系统里都没看到带有“@”符号或有“竖向”、“垂直”关键字的字体文件,网上也找了半天,没有结果。<br/>自己最后终于找到了TextStyle Members的一个属性IsVertical,设置为True后发现也没有成功。怎么办?</font></p>
<p><font size="3"></font> </p>
<p><font style="BACKGROUND-COLOR: #ffffff" size="3" face="Verdana">以上两个问题总结起来,就是如附件图中所示,需要高手填空:</font></p>
<p> </p>
<p></p>
<p> </p>
<p><font color="#ff0000" size="3">(3)手工定义的宋体字体样式查不到文件名</font></p>
<p><font color="#ff0000" size="3"></font> </p>
<p><font size="3">《AutoCAD VBA & VB.NET开发》一书“文字样式”章节中有GetTextStyle命令可以显示所用字体的文件名。</font></p>
<p><font size="3">我手工设置字体的字体样式为宋体,使用书中的GetTextStyle查询,得到空结果,如下图所示,为什么啊?是不是我的系统有问题?还是其它?</font></p>
<p><font size="3"> </font></p> '创建文字样式
Public Shared Function CreateStyle(ByVal textstyleName As String, ByVal font1 As String, ByVal bigfont As String, ByVal anger As Double, ByVal textwidth As Double) As ObjectId
Dim db As Database = HostApplicationServices.WorkingDatabase
Using trans As Transaction = db.TransactionManager.StartTransaction
' 得到文字样式表
Dim st As TextStyleTable = trans.GetObject(db.TextStyleTableId, OpenMode.ForWrite)
Dim StyleName As String = textstyleName
' 如果名为"工程图"的文字样式不存在,则新建一个文字样式.
If st.Has(StyleName) = True Then
'Dim TextstyleId As ObjectId = st(StyleName)
db.Textstyle = st(StyleName)
trans.Commit()
End If
If st.Has(StyleName) = False Then
' 新建一个文字样式表记录.
Dim str As New TextStyleTableRecord()
' 设置文字样式名.
str.Name = StyleName
' 设置TrueType字体(仿宋体)
If Right(font1, 3) = "ttf" Or Right(font1, 3) = "TTC" Or font1 = "宋体" Then
str.FileName = font1
Else
' 设置SHX字体
str.FileName = font1
'设置大字体.
str.BigFontFileName = bigfont
End If
' 设置倾斜角(弧度).
str.ObliquingAngle = anger * Math.PI / 180
' 设置宽度比例.
str.XScale = textwidth
' 把文字样式表记录添加到文字样式表中.
Dim TextstyleId As ObjectId = st.Add(str)
' 把文字样式表记录添加到事务处理中.
trans.AddNewlyCreatedDBObject(str, True)
' 将文字样式"工程图"设置为当前文字样式
db.Textstyle = TextstyleId
trans.Commit()
End If
End Using
End Function Dim st As TextStyleTable = trans.GetObject(db.TextStyleTableId, OpenMode.ForWrite)
我的怎么只能用读的方式打开呢,用写报错啊!
"Autodesk.AutoCAD.Runtime.Exception"的异常
cad2005 & vs2008
谢谢楼主和各位大神的解答,本人小白只能慢慢领悟 手动创建样式,然后用代码读属性。。。 版主啊,我也是想这么做的呀,可是出现了问题,问题就是我发的帖子中的第三个问题。
public void test24()
{
Document doc = Application.DocumentManager.MdiActiveDocument;
Editor ed = doc.Editor;
Database db = doc.Database;
using (Transaction tr = db.TransactionManager.StartTransaction())
{
TextStyleTableRecord tstr =
new TextStyleTableRecord
{
Name = "Font1",
Font =
new Autodesk.AutoCAD.GraphicsInterface.FontDescriptor("宋体",false,false,0,34),
XScale = 1
};
TextStyleTable tst = tr.GetObject(db.TextStyleTableId, OpenMode.ForWrite) as TextStyleTable;
tst.Add(tstr);
tr.AddNewlyCreatedDBObject(tstr, true);
tr.Commit();
}
}
<p><font size="3">非常感谢<font color="#da2549" face="Verdana"><b>lzh741206</b></font>的热心。</font></p>
<p><font size="3">使用Font属性之后,问题就解决了。</font></p>
<p><font size="3"></font> </p>
<p><font size="3">new Autodesk.AutoCAD.GraphicsInterface.FontDescriptor("宋体",false,false,0,34)里面的参数“34”为“the pitch and family attributes”,设置字体间距与Family(字符集?),34指的是<b>DefaultPitch</b>吧?</font></p>
<p><font size="3"></font> </p>
<p><font size="3"></font> </p> 本帖最后由 作者 于 2010-7-28 17:43:40 编辑 <br /><br /> <p><font size="3">根据<font color="#da2549" face="Verdana"><b>lzh741206</b></font>和ObjectARX编程站<font color="#ff0000"><strong>sbydo</strong></font>的提示,问题解决了。下面总结一下,给后面的同志们作参考。</font></p>
<p><font size="3"></font> </p>
<p><font size="3"><font style="BACKGROUND-COLOR: #ffffff" face="Verdana"><font face="Verdana "><font size="3">【方法1】创建文字样式时,使用<font color="red">FileName</font>属性来实现。</font></font><br/><font face="Verdana "><font size="3"> Dim str As New TextStyleTableRecord()<br/> str.<font color="red">FileName</font>= "宋体.ttf"<br/> 或者</font></font><br/><font face="Verdana "><font size="3"> str.<font color="red">FileName</font>= "@宋体.ttf"</font></font><br/><br/><font color="black"><font size="3"><font face="Verdana ">【方法2】创建文字样式时,使用<font color="red">Font</font>属性来实现。</font></font><br/></font><font color="black"><font size="3"><font face="Verdana "> str.<font color="red">Font</font> = New Autodesk.AutoCAD.GraphicsInterface.FontDescriptor(<font color="red">FontName</font>, False, False, 0, 34)</font></font><br/><font size="3"><font face="Verdana "></font></font><br/><font face="Verdana "><font size="3">其中,参数<font color="red">FontName</font>的不同取值可以创建不同的文字样式:</font></font><br/><font face="Verdana "><font size="3"></font></font> <font face="Verdana "><font size="3"><font color="red">FontName</font>="<font face="Verdana ">宋体",则为横向的宋体样式;</font></font></font><br/></font><font face="Verdana "><font color="black"><font size="3"><font face="Verdana "><font size="3"> <font color="red">FontName</font>="@<font face="Verdana ">宋体",则为竖向的宋体样式。</font></font></font></font><br/></font><font color="black"><font size="3">其它的字体样式同样处理。</font></font></font></font></font><font style="BACKGROUND-COLOR: #ffffff" face="Verdana"></p></font> Dim tktextstyId As ObjectId = ModelSpace.CreateStyle("图框", "宋体", "", 0, 0.85) 这样就行了,我已经用过了,可以 本帖最后由 qazllqaz 于 2011-7-26 22:44 编辑
Dim tktextstyId As ObjectId = ModelSpace.CreateStyle("图框", "宋体", "", 0, 0.85)
这段代码是调用函数
页:
[1]
2