Autodesk.Revit.DB.SketchEditScope 类提供了一种机制,可以使用原始模型整体更新Revit模型中的两个或多个元素。该类是 Autodesk.Revit.DB.Transaction 的子类,用于占用应用程序的一组操作。通过调用 Commit() 或 RollBack() 方法来结束事务。
Autodesk.Revit.DB.SketchEditScope 提供了以下构造函数:
SketchEditScope(Document doc, String editScopeName)
构造一个新的编辑区域,以对 Document 进行编辑。将 editScopeName 参数分配给创建的编辑作用域。
SketchEditScope(Document doc, ElementId sketchId)
构建一个基于蒙版元素的编辑区域。将它们添加到 sketchId 参数。使用此构造函数时,可以在没有元素ID的情况下,创建一个新元素,使更改保持在同一位置。
SketchEditScope(Document doc, FamilyItemFactoryBase factory, String editScopeName)
构造一个新的基于参数 factory 的编辑区域。将 editScopeName 参数分配给创建的编辑作用域。
Autodesk.Revit.DB.SketchEditScope 提供了以下方法:
void EditSketch(Action<SketchEditor> changeAction)
在编辑区域的上下文中调用 changeAction 参数。在这个方法中,可以调用 AddEllipse()、AddArc()、DrawLine()、MoveTo() 等软件包中的 SketchEditor 类方法。在这个方法中对图形进行更改,而Revit模型保持不变。
void EditScope(Action changeAction)
在此编辑区域的上下文中调用 changeAction 参数。
void UnlockSketch()
结束蒙版元素的编辑,使模型中的其他区域变为可编辑状态。
以下示例演示如何使用 SketchEditScope 类编辑 Document 中的图形。
public void EditSketch(Document doc, Reference planeRef)
{
Transaction t = new Transaction(doc);
t.Start("Edit Sketch");
using (var sketchEditScope = new SketchEditScope(doc, "Edit my Sketch"))
{
try
{
CurveArrArray sketchCurveArr = new CurveArrArray();
View view = doc.ActiveView;
XYZ origin = new XYZ(0, 0, 0);
XYZ dx = new XYZ(1, 0, 0);
XYZ dy = new XYZ(0, 1, 0);
sketchCurveArr.Append(GeometryCreationUtilities.CreateRectangle(origin, dx, dy));
SketchPlane sketchPlane = SketchPlane.Create(doc, planeRef);
ModelCurveArray modelCurveArr = sketchEditScope.EditingScope.SketchPlaneByReferenceArray(sketchPlane, sketchCurveArr);
t.Commit();
TaskDialog.Show("Success!", "Drawing added successfully to sketch!");
}
catch (Exception ex)
{
t.RollBack();
TaskDialog.Show("Error!", "Unable to edit sketch. " + ex.Message);
}
}
}
Autodesk.Revit.DB.SketchEditScope 类允许您在Revit模型中对多个元素进行更改,而无需在完全重建模型时导致项目中断或错误。 通过在更改过程中使用该类,可以优化项目的开发过程,并提高生产力。