using System; using Autodesk.AutoCAD.Geometry; using CadParamPluging.Common; using CadParamPluging.Domain.Models; namespace CadParamPluging.Cad { public sealed class RingRawRollingGenerator : ITemplateDrawingGenerator { public static readonly string Key = TemplateKeyBuilder.Build("毛料态", "轧制", "环形", "无"); private const string MachinedStatus = "车加工"; public string TemplateKey => Key; public FeatureDrivenDrawer.ExpectedDrawingSize CalculateExpectedSize(ParamBag bag, TemplateParams templateParams) { var workingBag = CloneBagWithMachinedStatus(bag, templateParams); return FeatureDrivenDrawer.CalculateExpectedSize(workingBag, templateParams?.SheetSize); } public void Draw(CadContext ctx, ParamBag bag, TemplateParams templateParams, Point3d center, double scaleFactor) { if (ctx == null) { throw new ArgumentNullException(nameof(ctx)); } if (templateParams == null) { throw new ArgumentNullException(nameof(templateParams)); } var workingBag = CloneBagWithMachinedStatus(bag, templateParams); var drawParams = CreateMachinedTemplateParams(templateParams); FeatureDrivenDrawer.DrawRingRollingWithUnspecifiedFillet( ctx, workingBag, drawParams.ProjectType, drawParams.SheetSize, drawParams.Scale, drawParams.DrawingType, center, scaleFactor); } private static ParamBag CloneBagWithMachinedStatus(ParamBag source, TemplateParams templateParams) { var clone = new ParamBag(); if (source?.Items != null) { foreach (var item in source.Items) { if (item == null) { continue; } clone.Items.Add(new ParamValue { Key = item.Key, Value = item.Value }); } } clone.Set("DeliveryStatus", MachinedStatus); if (!string.IsNullOrWhiteSpace(templateParams?.DrawingType) && string.IsNullOrWhiteSpace(clone.GetString("ProcessMethod"))) { clone.Set("ProcessMethod", templateParams.DrawingType); } return clone; } private static TemplateParams CreateMachinedTemplateParams(TemplateParams templateParams) { return new TemplateParams { ProjectType = MachinedStatus, DrawingType = templateParams?.DrawingType, SheetSize = templateParams?.SheetSize, Scale = templateParams?.Scale }; } } }