public static void CalculateLevelFromLevelBlockWithInvert() { HousingExtensionApplication.Current.Logger.LogCommand(typeof(LevelBlockCommands), nameof(CalculateLevelFromLevelBlockWithInvert)); var doc = Application.DocumentManager.MdiActiveDocument; var db = doc.Database; var ed = doc.Editor; using var trans = db.TransactionManager.StartTransaction(); if (!LevelBlockHelper.HasLevelBlock(db)) { throw new ArgumentException(Resources.Exception_NoLevelBlock); } var start = LevelBlockHelper.GetPromptedBlockDetails(Resources.Command_Prompt_SelectStartLevelBlock, ed, trans); if (!start.IsValid) { return; } var invert = ed.PromptForDouble(Resources.Command_Prompt_EnterInvert, _invert); if (!invert.HasValue) { return; //Assume user cancelled } var endLevel = start.Level - invert.Value; var end = GenerateOrUpdateBlock(ed, db, new GenerateArgs(endLevel, start.Rotation, start.Rotate)); if (!end.IsValid) { return; //Assume user cancelled } if (ShouldIncludeGradient(ed)) { GradientBlockHelper.GenerateBlock(db, start, end); } _invert = invert.Value; trans.Commit(); }
public static void CalculateLevelFromPointAtGradient() { HousingExtensionApplication.Current.Logger.LogCommand(typeof(LevelBlockCommands), nameof(CalculateLevelFromPointAtGradient)); var doc = Application.DocumentManager.MdiActiveDocument; var ed = doc.Editor; var db = doc.Database; using var trans = db.TransactionManager.StartTransaction(); if (!LevelBlockHelper.HasLevelBlock(db)) { throw new ArgumentException(Resources.Exception_NoLevelBlock); } var startPoint = ed.PromptForPosition(Resources.Command_Prompt_SelectStartPoint); if (!startPoint.HasValue) { return; //Assume user cancelled } var startLevel = ed.PromptForDouble(Resources.Command_Prompt_EnterLevel, _level); if (!startLevel.HasValue) { return; //Assume user cancelled } var gradient = ed.PromptForDouble(Resources.Command_Prompt_EnterGradient, _gradient); if (!gradient.HasValue) { return; //Assume user cancelled } var endBlock = GenerateOrUpdateBlock(ed, db, new GenerateArgs(startPoint.Value, startLevel.Value, gradient.Value)); if (endBlock == null) { return; //Assume user cancelled } _level = startLevel.Value; _gradient = gradient.Value; trans.Commit(); }
private static void AddBackOfFootwayLevel(double level) { var doc = Application.DocumentManager.MdiActiveDocument; var ed = doc.Editor; var db = doc.Database; using var trans = db.TransactionManager.StartTransaction(); if (!LevelBlockHelper.HasLevelBlock(db)) { throw new ArgumentException(Resources.Exception_NoLevelBlock); } var roadString = SelectRoadString(db, ed); if (roadString == null) { HousingExtensionApplication.Current.Logger.Entry(Resources.Message_No_Road_String_Selected); return; } using (var plane = new Plane(Point3d.Origin, Vector3d.ZAxis)) { var point = ed.PromptForPosition(Resources.Command_Prompt_SelectFootwayPoint); while (point.HasValue) { var roadPoint = roadString.GetClosestPointTo(point.Value, plane.Normal, false); var roadLevel = Math.Round(roadPoint.Z, 3); var footwayLevel = roadLevel + level; LevelBlockHelper.NewLevelBlockAtPoint(db, new LevelBlockArgs(point.Value, footwayLevel)); point = ed.PromptForPosition(Resources.Command_Prompt_SelectFootwayPoint); } } trans.Commit(); }
public static void CalculateLevelBetweenLevels() { HousingExtensionApplication.Current.Logger.LogCommand(typeof(LevelBlockCommands), nameof(CalculateLevelBetweenLevels)); var doc = Application.DocumentManager.MdiActiveDocument; var ed = doc.Editor; var db = doc.Database; using var trans = db.TransactionManager.StartTransaction(); if (!LevelBlockHelper.HasLevelBlock(db)) { throw new ArgumentException(Resources.Exception_NoLevelBlock); } var details = CommandHelper.GetStartEndDetails(ed, trans); if (!details.IsValid) { return; } var s = new Point3d(details.Start.Point2d.X, details.Start.Point2d.Y, 0); var e = new Point3d(details.End.Point2d.X, details.End.Point2d.Y, 0); Point3d?midPoint; using var line = new Line(s, e) { Color = Color.FromRgb(0, 255, 0) }; { var acBlkTbl = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForRead); var acBlkTblRec = (BlockTableRecord)trans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace], OpenMode.ForWrite); acBlkTblRec.AppendEntity(line); trans.AddNewlyCreatedDBObject(line, true); db.TransactionManager.QueueForGraphicsFlush(); // TODO: Review graphics flush in core console. midPoint = ed.PromptForPosition(Resources.Command_Prompt_SelectMidPoint); while (midPoint.HasValue) { var m = new Point3d(midPoint.Value.X, midPoint.Value.Y, 0); if (line.GetGeCurve().IsOn(m)) { break; } midPoint = ed.PromptForPosition(Resources.Command_Prompt_SelectMidPoint); } line.Erase(); db.TransactionManager.QueueForGraphicsFlush(); // TODO: Review graphics flush in core console. } if (!midPoint.HasValue) { return; //Assume user cancelled } var gradient = 1 / ((details.End.Level - details.Start.Level) / line.Length); var midLevel = CalculateLevel(details.Start.Point3d, midPoint.Value, details.Start.Level, gradient); var args = new LevelBlockArgs(midPoint.Value, midLevel, details.Start.Rotation, details.Start.Rotate); LevelBlockHelper.NewLevelBlockAtPoint(db, args); trans.Commit(); }