SketchEditScope Class


A SketchEditScope allows an application to create and maintain an editing session for a Sketch.

Namespace: Autodesk.Revit.DB
Assembly: RevitAPI (in RevitAPI.dll) Version: 23.0.0.0 (23.1.0.0)
Since: 2022

Syntax

C#
public class SketchEditScope : EditScope
Visual Basic
Public Class SketchEditScope _
	Inherits EditScope
Visual C++
public ref class SketchEditScope : public EditScope

Remarks

Start/end of a SketchEditScope will start/end a transaction group. After a SketchEditScope is started, an application can start transactions and edit the sketch. Individual transactions the application creates inside SketchEditScope will not appear in the undo menu. All transactions committed during the edit mode will be merged into a single one which will bear the given name passed into SketchEditScope constructor.

Examples

Copy C#
public void ReplaceBoundaryLine(Document document)
{
   FilteredElementCollector floorCollector = new FilteredElementCollector(document)
      .WhereElementIsNotElementType()
      .OfCategory(BuiltInCategory.OST_Floors).OfClass(typeof(Floor));

   Floor floor = floorCollector.FirstOrDefault() as Floor;
   if (floor == null)
   {
      TaskDialog.Show("Error", "Document does not contain a floor.");
      return;
   }

   Sketch sketch = document.GetElement(floor.SketchId) as Sketch;

   Line line = null;
   foreach (CurveArray curveArray in sketch.Profile)
   {
      foreach (Curve curve in curveArray)
      {
         line = curve as Line;
         if (line != null)
         {
            break;
         }
      }
      if (line != null)
      {
         break;
      }
   }

   if (line == null)
   {
      TaskDialog.Show("Error", "Sketch does not contain a straight line.");
      return;
   }

   // Start a sketch edit scope
   SketchEditScope sketchEditScope = new SketchEditScope(document, "Replace line with an arc");
   sketchEditScope.Start(sketch.Id);

   using (Transaction transaction = new Transaction(document, "Modify sketch"))
   {
      transaction.Start();

      // Create arc
      XYZ normal = line.Direction.CrossProduct(XYZ.BasisZ).Normalize().Negate();
      XYZ middle = line.GetEndPoint(0).Add(line.Direction.Multiply(line.Length / 2));
      Curve arc = Arc.Create(line.GetEndPoint(0), line.GetEndPoint(1), middle.Add(normal.Multiply(20)));

      // Remove element referenced by the found line. 
      document.Delete(line.Reference.ElementId);

      // Model curve creation automatically puts the curve into the sketch, if sketch edit scope is running.
      document.Create.NewModelCurve(arc, sketch.SketchPlane);

      transaction.Commit();
   }

   sketchEditScope.Commit(new FailuresPreprocessor());
}
Copy C#
public void ReplaceBoundaryLine(Document document)
{
   FilteredElementCollector floorCollector = new FilteredElementCollector(document)
      .WhereElementIsNotElementType()
      .OfCategory(BuiltInCategory.OST_Floors).OfClass(typeof(Floor));

   Floor floor = floorCollector.FirstOrDefault() as Floor;
   if (floor == null)
   {
      TaskDialog.Show("Error", "Document does not contain a floor.");
      return;
   }

   Sketch sketch = document.GetElement(floor.SketchId) as Sketch;

   Line line = null;
   foreach (CurveArray curveArray in sketch.Profile)
   {
      foreach (Curve curve in curveArray)
      {
         line = curve as Line;
         if (line != null)
         {
            break;
         }
      }
      if (line != null)
      {
         break;
      }
   }

   if (line == null)
   {
      TaskDialog.Show("Error", "Sketch does not contain a straight line.");
      return;
   }

   // Start a sketch edit scope
   SketchEditScope sketchEditScope = new SketchEditScope(document, "Replace line with an arc");
   sketchEditScope.Start(sketch.Id);

   using (Transaction transaction = new Transaction(document, "Modify sketch"))
   {
      transaction.Start();

      // Create arc
      XYZ normal = line.Direction.CrossProduct(XYZ.BasisZ).Normalize().Negate();
      XYZ middle = line.GetEndPoint(0).Add(line.Direction.Multiply(line.Length / 2));
      Curve arc = Arc.Create(line.GetEndPoint(0), line.GetEndPoint(1), middle.Add(normal.Multiply(20)));

      // Remove element referenced by the found line. 
      document.Delete(line.Reference.ElementId);

      // Model curve creation automatically puts the curve into the sketch, if sketch edit scope is running.
      document.Create.NewModelCurve(arc, sketch.SketchPlane);

      transaction.Commit();
   }

   sketchEditScope.Commit(new FailuresPreprocessor());
}

Inheritance Hierarchy

System Object
Autodesk.Revit.DB EditScope
Autodesk.Revit.DB SketchEditScope

See Also