cobalt 发表于 2010-7-26 17:12:00

[求助] VB.net创建文字样式的几个问题

<p><font style="BACKGROUND-COLOR: #ffffff" size="3" face="Verdana">几位老大编写的《AutoCAD VBA &amp; 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/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim str As New TextStyleTableRecord()<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; str.Name = "TextStyle-宋体-横向"<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; str.FileName = "simsun.ttc"<br/>我猜是不是应该为“simsun.ttf”,结果运行后字体名显示为“SimSun-ExtB”,也失败了。那到底是什么啊?</font></p>
<p><font size="3"></font>&nbsp;</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>&nbsp;</p>
<p><font style="BACKGROUND-COLOR: #ffffff" size="3" face="Verdana">以上两个问题总结起来,就是如附件图中所示,需要高手填空:</font></p>
<p>&nbsp;</p>
<p></p>
<p>&nbsp;</p>
<p><font color="#ff0000" size="3">(3)手工定义的宋体字体样式查不到文件名</font></p>
<p><font color="#ff0000" size="3"></font>&nbsp;</p>
<p><font size="3">《AutoCAD VBA &amp; VB.NET开发》一书“文字样式”章节中有GetTextStyle命令可以显示所用字体的文件名。</font></p>
<p><font size="3">我手工设置字体的字体样式为宋体,使用书中的GetTextStyle查询,得到空结果,如下图所示,为什么啊?是不是我的系统有问题?还是其它?</font></p>
<p><font size="3">&nbsp;</font></p>

qazllqaz 发表于 2011-7-26 22:40:05

'创建文字样式
    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

慢慢来吧 发表于 2018-1-2 11:24:47

Dim st As TextStyleTable = trans.GetObject(db.TextStyleTableId, OpenMode.ForWrite)
我的怎么只能用读的方式打开呢,用写报错啊!
"Autodesk.AutoCAD.Runtime.Exception"的异常
cad2005 & vs2008

999999 发表于 2020-8-25 10:37:10

谢谢楼主和各位大神的解答,本人小白只能慢慢领悟

雪山飞狐_lzh 发表于 2010-7-26 19:55:00

手动创建样式,然后用代码读属性。。。

cobalt 发表于 2010-7-26 21:08:00

版主啊,我也是想这么做的呀,可是出现了问题,问题就是我发的帖子中的第三个问题。

雪山飞狐_lzh 发表于 2010-7-26 21:49:00


      
      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();
            }
      }

cobalt 发表于 2010-7-27 13:16:00

<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>&nbsp;</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>&nbsp;</p>
<p><font size="3"></font>&nbsp;</p>

cobalt 发表于 2010-7-28 17:19:00

本帖最后由 作者 于 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>&nbsp;</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">&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;Dim str As New TextStyleTableRecord()<br/>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;str.<font color="red">FileName</font>= "宋体.ttf"<br/>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;或者</font></font><br/><font face="Verdana "><font size="3">&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;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 ">&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;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>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<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">&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <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>

qazllqaz 发表于 2011-7-26 22:42:52

Dim tktextstyId As ObjectId = ModelSpace.CreateStyle("图框", "宋体", "", 0, 0.85)

qazllqaz 发表于 2011-7-26 22:43:39

这样就行了,我已经用过了,可以

qazllqaz 发表于 2011-7-26 22:44:14

本帖最后由 qazllqaz 于 2011-7-26 22:44 编辑


Dim tktextstyId As ObjectId = ModelSpace.CreateStyle("图框", "宋体", "", 0, 0.85)
这段代码是调用函数
页: [1] 2
查看完整版本: [求助] VB.net创建文字样式的几个问题