61
AutoCAD .NET API / Re: Как назначить вьюпорту AnnotationScale в соответствии с StandardScale ?
« Последний ответ от avc 11-12-2025, 12:41:22 »Черт! Что-то я тормознул. Полноценного конструктора у класса нет, но свойства-то доступны для записи
Вот так работает:
Вот так работает:
Код - C# [Выбрать]
- /// <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;
- }
- }
- }
Последние сообщения