- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report
Hello
I am attempting to add points/vertices to an existing TopographySurface(TS) element. I understand that in order to add points to an existing TS I need to start a TopographyEditScope. But when I start my TopographyEditScopeI get the following runtime error:
Revit encountered a Autodesk.Revit.Exceptions.InvalidOperationException: TopographyEditScope is not permitted to start at this moment for 1 of the following possible reasons: The document is in read-only state, or the document is crrently modifiable, or there already is a topography surface edit mode active in the document.
How can I overcome this error? You'll see below that my very simple code is not running another TopographyEditScope so thats not the cause. Also I am correctly running my TopographyEditScope from within a Transaction (which is what is required). Also my Revit project is of the type Construction if that helps.
Any solutions and advice would be extremely helpful:
[TransactionAttribute(TransactionMode.Manual)]
[RegenerationAttribute(RegenerationOption.Manual)]
public class MyGroup : IExternalCommand
{
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
UIApplication uiApp = commandData.Application;
Document doc = uiApp.ActiveUIDocument.Document;
Transaction trans = new Transaction(doc);
trans.Start("Lab");
List<XYZ> pnts = new List<XYZ>();
pnts.Add(new XYZ(-5, -5, 0));
pnts.Add(new XYZ(0, 5, 5));
pnts.Add(new XYZ(2, 2, 2));
TopographySurface surface = TopographySurface.Create(doc, pnts);
TopographyEditScope scope = new TopographyEditScope(doc, "blah");
scope.Start(surface.Id); // Runtime error occurs at this line
List<XYZ> pList = new List<XYZ>();
pList.Add(new XYZ(5, 5, 5));
pList.Add(new XYZ(5, 0, 0));
pList.Add(new XYZ(3, 3, 3));
surface.AddPoints(pList);
MyFailureProcessor failProc = new MyFailureProcessor();
scope.Commit(failProc);
trans.Commit();
return Result.Succeeded;
}
class MyFailureProcessor : IFailuresPreprocessor
{
public FailureProcessingResult PreprocessFailures(FailuresAccessor failuresAccessor)
{
// TODO: implement code
return FailureProcessingResult.Continue;
}
}
}
Solved! Go to Solution.