CadParamPluging/Cad/Drawers/RingRawRollingGenerator.cs

75 lines
2.5 KiB
C#

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));
}
// 直接调用独立 Drawer
RingRawRollingDrawer.Draw(ctx, bag, 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
};
}
}
}