/// <summary>
/// назначить стандартный или пользовательский масштаб
/// </summary>
public static void
SetScale(this Viewport vp, double scale)
{
if (vp is null || double.IsNaN(scale) || scale < MinScale) return;
StandardScaleType std = FindStdScale(scale, vp.Database);
double oldScale = vp.CustomScale;
if (std != StandardScaleType.CustomScale)
vp.StandardScale = std;
else vp.CustomScale = scale;
if (vp.Database != null && oldScale != vp.CustomScale)
{
ObjectContextManager ocm = vp.Database.ObjectContextManager;
ObjectContextCollection occ = ocm.GetContextCollection("ACDB_ANNOTATIONSCALES");
bool found = false;
foreach (AnnotationScale oldAnnoScale in occ)
if (Abs(oldAnnoScale.Scale - vp.CustomScale) < ScaleTolerance)
{
vp.AnnotationScale = oldAnnoScale;
found = true;
break;
}
if (!found)
{
//Добавление масштаба к чертежу
AnnotationScale newScale = new()
{
Name = $"CustomScale {vp.CustomScale}x",
PaperUnits = vp.CustomScale,
DrawingUnits = 1
};
occ.AddContext(newScale);
vp.AnnotationScale = newScale;
}
}
}