private static LevelBlockDetails GenerateOrUpdateBlock(Editor ed, Database db, GenerateArgs args) { if (IsNewBlock(ed)) { var endPoint = ed.PromptForPosition(Resources.Command_Prompt_SelectEndPoint); if (!endPoint.HasValue) { return(LevelBlockDetails.CreateEmpty()); } var levelArgs = CreateNewBlockLevelBlockArgs(args, endPoint.Value); return(LevelBlockHelper.NewLevelBlockAtPoint(db, levelArgs)); } var trans = db.TransactionManager.TopTransaction; var existing = LevelBlockHelper.GetPromptedBlockDetails(Resources.Command_Prompt_SelectExistingLevelBlock, ed, trans); if (!existing.IsValid) { return(LevelBlockDetails.CreateEmpty()); } if (args.HasLevel) { return(LevelBlockHelper.UpdateExistingLevelBlock(existing.BlockReference, args.BlockLevel)); } var endLevel = CalculateLevel(args.StartPoint, existing.Point3d, args.StartLevel, args.Gradient); return(LevelBlockHelper.UpdateExistingLevelBlock(existing.BlockReference, endLevel)); }