乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 267|回复: 11

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

[复制链接]

11

主题

51

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
95
发表于 2010-7-26 17:12:00 | 显示全部楼层 |阅读模式
几位老大编写的《 VBA & VB.NET开发》一书中讲了文字样式的创建等方法。我今天下午在使用的时候,遇到三个不明白的问题:

(1)“宋体”的文件名称是什么?

我的测试背景是Win7+VS2010+AutoCAD2008,根据文中提供的方法,到控制面板的字体中找到“宋体”的文件名是simsun.ttc,但是按照下面的代码却没有成功地生成字体样式:
                Dim str As New TextStyleTableRecord()
                str.Name = "TextStyle-宋体-横向"
                str.FileName = "simsun.ttc"
我猜是不是应该为“simsun.ttf”,结果运行后字体名显示为“SimSun-ExtB”,也失败了。那到底是什么啊?

(2)字体样式里面垂直字体如何定义?

找了半天,在系统里都没看到带有“@”符号或有“竖向”、“垂直”关键字的字体文件,网上也找了半天,没有结果。
自己最后终于找到了TextStyle Members的一个属性IsVertical,设置为True后发现也没有成功。怎么办?

以上两个问题总结起来,就是如附件图中所示,需要高手填空:


4zcw5otz1fm.jpg

4zcw5otz1fm.jpg




(3)手工定义的宋体字体样式查不到文件名

《AutoCAD VBA & VB.NET开发》一书“文字样式”章节中有GetTextStyle命令可以显示所用字体的文件名。
我手工设置字体的字体样式为宋体,使用书中的GetTextStyle查询,得到空结果,如下图所示,为什么啊?是不是我的系统有问题?还是其它?


uxlcxhdyr2v.jpg

uxlcxhdyr2v.jpg

回复

使用道具 举报

2

主题

20

帖子

5

银币

初来乍到

Rank: 1

铜币
28
发表于 2011-7-26 22:40:00 | 显示全部楼层
'创建文字样式
    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
回复

使用道具 举报

1

主题

6

帖子

3

银币

初来乍到

Rank: 1

铜币
10
发表于 2018-1-2 11:24:00 | 显示全部楼层
Dim st As TextStyleTable = trans.GetObject(db.TextStyleTableId, OpenMode.ForWrite)
我的怎么只能用读的方式打开呢,用写报错啊!
"Autodesk.AutoCAD.Runtime.Exception"的异常
cad2005 & vs2008
回复

使用道具 举报

35

主题

311

帖子

14

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
447
发表于 2020-8-25 10:37:00 | 显示全部楼层
谢谢楼主和各位大神的解答,本人小白只能慢慢领悟
回复

使用道具 举报

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 2010-7-26 19:55:00 | 显示全部楼层
手动创建样式,然后用代码读属性。。。
回复

使用道具 举报

11

主题

51

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
95
发表于 2010-7-26 21:08:00 | 显示全部楼层
版主啊,我也是想这么做的呀,可是出现了问题,问题就是我发的帖子中的第三个问题。
回复

使用道具 举报

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 2010-7-26 21:49:00 | 显示全部楼层
  1.         [CommandMethod("tt4")]
  2.         public void test24()
  3.         {
  4.             Document doc = Application.DocumentManager.MdiActiveDocument;
  5.             Editor ed = doc.Editor;
  6.             Database db = doc.Database;
  7.             using (Transaction tr = db.TransactionManager.StartTransaction())
  8.             {
  9.                 TextStyleTableRecord tstr =
  10.                     new TextStyleTableRecord
  11.                     {
  12.                         Name = "Font1",
  13.                         Font =
  14.                             new Autodesk.AutoCAD.GraphicsInterface.FontDescriptor("宋体",false,false,0,34),
  15.                         XScale = 1
  16.                     };
  17.                 TextStyleTable tst = tr.GetObject(db.TextStyleTableId, OpenMode.ForWrite) as TextStyleTable;
  18.                 tst.Add(tstr);
  19.                 tr.AddNewlyCreatedDBObject(tstr, true);
  20.                 tr.Commit();
  21.             }
  22.         }
回复

使用道具 举报

11

主题

51

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
95
发表于 2010-7-27 13:16:00 | 显示全部楼层
非常感谢lzh741206的热心。
使用Font属性之后,问题就解决了。

new Autodesk.AutoCAD.GraphicsInterface.FontDescriptor("宋体",false,false,0,34)里面的参数“34”为“the pitch and family attributes”,设置字体间距与Family(字符集?),34指的是DefaultPitch吧?


回复

使用道具 举报

11

主题

51

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
95
发表于 2010-7-28 17:19:00 | 显示全部楼层

根据lzh741206和ObjectARX编程站sbydo的提示,问题解决了。下面总结一下,给后面的同志们作参考。

【方法1】创建文字样式时,使用FileName属性来实现。
        Dim str As New TextStyleTableRecord()
        str.FileName= "宋体.ttf"
        或者
        str.FileName= "@宋体.ttf"
【方法2】创建文字样式时,使用Font属性来实现。
        str.Font = New Autodesk.AutoCAD.GraphicsInterface.FontDescriptor(FontName, False, False, 0, 34)
其中,参数FontName的不同取值可以创建不同的文字样式:
            FontName="宋体",则为横向的宋体样式;
            FontName="@宋体",则为竖向的宋体样式。
其它的字体样式同样处理。
回复

使用道具 举报

2

主题

20

帖子

5

银币

初来乍到

Rank: 1

铜币
28
发表于 2011-7-26 22:42:00 | 显示全部楼层
Dim tktextstyId As ObjectId = ModelSpace.CreateStyle("图框", "宋体", "", 0, 0.85)
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2024-11-22 02:11 , Processed in 0.161052 second(s), 75 queries .

© 2020-2024 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表