Skip to content

SketchEditScope

Public Class

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

Inheritance Hierarchy

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

Namespace: Autodesk.Revit.DB

Assembly: RevitAPI (in RevitAPI.dll) Version: 25.0.0.0 (25.0.0.0)

Syntax

public class SketchEditScope : EditScope

The SketchEditScope type exposes the following members.

Constructors

Name

Description


Public Method
SketchEditScope

Instantiates a SketchEditScope object.


Properties

Name

Description


Public Property
IsActive

Tells if the EditScope is active. In other words, the EditScope has started but not committed/canceled yet.
(Inherited from EditScope)


Public Property
IsPermitted

Tells if the edit scope is permitted to start.
(Inherited from EditScope)


Public Property
IsValidObject

Specifies whether the .NET object represents a valid Revit entity.
(Inherited from EditScope)


Methods

Name

Description


Public Method
Cancel

Cancels the edit scope.
(Inherited from EditScope)


Public Method
Commit

Finishes the edit scope.
(Inherited from EditScope)


Public Method

(Inherited from EditScope)


Public Method

Equals

Determines whether the specified object is equal to the current object.
(Inherited from Object)


Public Method

GetHashCode

Serves as the default hash function.
(Inherited from Object)


Public Method

GetType

Gets the Type of the current instance.
(Inherited from Object)


Public Method

Validates if an element can have a sketch but currently does not.


Public Method
IsSketchEditingSupported

Checks whether sketch can be edited.


Public Method
IsSketchEditingSupportedForSketchBasedElement

Checks whether the element supports sketch editing.


Public Method
Start

Starts a sketch edit mode.


Public Method
Code Example
StartWithNewSketch

Starts a sketch edit mode for an element which, at this moment, doesn’t have a sketch.


Public Method

ToString

Returns a string that represents the current object.
(Inherited from Object)


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.

Example

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());
}

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());
}