/
docNemo
/
clothes-graph
Обзор
Документация
Войти
/
docNemo
/
clothes-graph
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
main
src/ClothesGraph.Model/Drafting/DraftEvaluation.cs
66 строк
2 KB
docNemo
Фундамент продукта: параметрическое построение выкроек, печать, установщик
08 авг 2026, 22:17
08 авг 2026, 22:17
cd47cce
Код
Авторство
О чём код?
using System.Collections.Generic; using ClothesGraph.Geometry; namespace ClothesGraph.Model.Drafting; /// <summary> /// Результат пересчёта чертежа: вычисленная геометрия и перечень построений, /// вычислить которые не удалось. /// </summary> /// <remarks> /// Неразрешимые построения не прерывают пересчёт: сбой одного узла делает /// неразрешимыми только те, что от него зависят, а остальной чертёж остаётся /// пригодным для работы. /// </remarks> public sealed class DraftEvaluation { private readonly Dictionary<NodeId, Point2> _points; private readonly Dictionary<NodeId, ICurve> _curves; private readonly Dictionary<NodeId, NodeFailure> _failures; internal DraftEvaluation( Dictionary<NodeId, Point2> points, Dictionary<NodeId, ICurve> curves, Dictionary<NodeId, NodeFailure> failures) { _points = points; _curves = curves; _failures = failures; } public IReadOnlyDictionary<NodeId, Point2> Points => _points; public IReadOnlyDictionary<NodeId, ICurve> Curves => _curves; /// <summary>Построения, которые вычислить не удалось, с причиной.</summary> public IReadOnlyDictionary<NodeId, NodeFailure> Failures => _failures; public bool IsComplete => _failures.Count == 0; public bool TryGetPoint(NodeId id, out Point2 point) => _points.TryGetValue(id, out point); public bool TryGetCurve(NodeId id, out ICurve? curve) => _curves.TryGetValue(id, out curve); } /// <summary>Причина, по которой построение не вычислено.</summary> public sealed class NodeFailure { internal NodeFailure(string nodeName, string reason, NodeId? causedBy = null) { NodeName = nodeName; Reason = reason; CausedBy = causedBy; } public string NodeName { get; } public string Reason { get; } /// <summary> /// Построение, из-за которого это оказалось неразрешимым. Пусто, если /// причина в самом построении. /// </summary> public NodeId? CausedBy { get; } public override string ToString() => $"{NodeName}: {Reason}"; }