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