修改文字大小

在开发中,遇到这样一个问题,需要用某一文字样式创建文字,同时,还需要修改生成文字的大小,又不影响原来的文字样式。下面记录已知的两种方法。

详细介绍

  • 采用 COM 里面的API,用代码在原来样式的基础上生成新的样式,具体代码如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Bentley.Internal.MstnPlatformNET.TextStyleLibCollection textStyles = new Bentley.Internal.MstnPlatformNET.TextStyleLibCollection(StyleIteratorMode.ActiveFileAndLibraries);
DgnTextStyle targetStyle = textStyles.Where(item => item.Name == "textStyleName").FirstOrDefault();

if (targetStyle == null)
{
// 创建新的钢筋标注样式
string newTextStyleName = SwTextStyle.SW_25_SectionName.ToStringValue();//注意名字要确保是唯一的
string templateStyleName = SwTextStyle.SW_50_SectionName.ToStringValue();
Application msApp = Utilities.ComApp;
TextStyle templateStyle = msApp.ActiveDesignFile.TextStyles[templateStyleName];
msApp.ActiveDesignFile.TextStyles.Add(templateStyle, newTextStyleName);
TextStyle newTextStyle = msApp.ActiveDesignFile.TextStyles[newTextStyleName];
newTextStyle.Width = 0.0020;
//修改文本样式的属性
newTextStyle.Height = 0.0025;
targetStyle = textStyles.Where(item => item.Name == "textStyleName").FirstOrDefault();
}

// 使用
TextBlock textBlock = new TextBlock(dgnTextStyle, DgnModel);
...
  • 直接修改文字样式,具体代码如下
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Bentley.Internal.MstnPlatformNET.TextStyleLibCollection textStyles = new Bentley.Internal.MstnPlatformNET.TextStyleLibCollection(StyleIteratorMode.ActiveFileAndLibraries);
    DgnTextStyle targetStyle = textStyles.Where(item => item.Name == "textStyleName").FirstOrDefault();

    targetStyle.SetProperty(TextStyleProperty.Width, 0.0020 * uor);
    targetStyle.SetProperty(TextStyleProperty.Height, 0.0025 * uor);

    // 使用
    TextBlock textBlock = new TextBlock(dgnTextStyle, DgnModel);
    ...

上面这种用法也是不会修改原来文字样式。