Ejemplo n.º 1
0
        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));
        }