将 Revit TextNote 更改为句首字母大写。我有大量文本需要从全部大写更改为句子大小写

问题描述 投票:0回答:1

Revit和Dynamo可以轻松地将外壳更改为全上和全下。我需要将全部大写的大量注释更改回常规句子大小写,每个句子的第一个字母大写。当我单步执行下面的代码时,它将所有注释更改为句子大小写,但不写回模型。我错过了什么?

public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
    var uiDoc = commandData.Application.ActiveUIDocument;
    var doc = uiDoc.Document;

    try
    {
        using Transaction trans = new(doc, "Change to sentence case");

        var textNotes = new FilteredElementCollector(doc)
            .OfCategory(BuiltInCategory.OST_TextNotes)
            .WhereElementIsNotElementType()
            .ToElements().Cast<TextNote>();

        var count = 0;
        trans.Start();
        foreach (var text in textNotes)
        {
            try
            {
                var currentFormattedText = text.GetFormattedText();
                var currentPlainText = text.GetFormattedText().GetPlainText();

                var output = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(currentPlainText.ToLower());
                currentFormattedText.SetPlainText(output);

                text.SetFormattedText(currentFormattedText);
                count++;
            }
            catch (Exception ex)
            {
                message = ex.Message;
                return Result.Failed;
            }
        }
        trans.Commit();
        TaskDialog.Show("Change to Sentence Case", count + " text notes have been changed");
        return Result.Succeeded;
    }
    catch (Autodesk.Revit.Exceptions.OperationCanceledException)
    {
        return Result.Cancelled;
    }
    catch (Exception ex)
    {
        message = ex.Message;
        return Result.Failed;
    }
}

感谢您的帮助

c# revit-api
1个回答
0
投票

using
语句为特定范围创建一个
Transaction
对象。在这种情况下,作用域似乎是空的,因此在您开始使用它之前,事务会再次消失。另外,由于没有进行选择,因此您可以消除
catch
OperationCanceledException
。而且,一旦这样做,您可能可以消除整个
try
-
catch
异常处理程序。只需在
using
范围内获取一些交易的工作示例,然后将代码粘贴到其中即可,参见。 处理事务和事务组

© www.soinside.com 2019 - 2024. All rights reserved.