/
docNemo
/
clothes-graph
Обзор
Документация
Войти
/
docNemo
/
clothes-graph
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
main
src/ClothesGraph.Model/Drafting/CurveNodes.cs
64 строки
3 KB
docNemo
Фундамент продукта: параметрическое построение выкроек, печать, установщик
08 авг 2026, 22:17
08 авг 2026, 22:17
cd47cce
Код
Авторство
О чём код?
using System; using System.Collections.Generic; using ClothesGraph.Geometry; using ClothesGraph.Model.Measurements; namespace ClothesGraph.Model.Drafting; /// <summary>Отрезок между двумя точками построения.</summary> public sealed class SegmentNode(NodeId id, string name, NodeId start, NodeId end) : CurveNode(id, name) { public NodeId StartPoint { get; set; } = start; public NodeId EndPoint { get; set; } = end; public override IEnumerable<NodeId> Dependencies => [StartPoint, EndPoint]; public override IEnumerable<MeasurementId> MeasurementDependencies => []; public override ICurve Evaluate(INodeEvaluationContext context) => new LineCurve(context.GetPoint(StartPoint), context.GetPoint(EndPoint)); public override DraftNode Clone() => new SegmentNode(Id, Name, StartPoint, EndPoint); } /// <summary> /// Кубическая кривая, все четыре опорные точки которой — построения графа. /// </summary> /// <remarks> /// Управляющие точки не хранятся координатами: иначе при пересчёте на другой /// размер концы кривой уехали бы, а форма осталась прежней. /// </remarks> public sealed class CubicCurveNode( NodeId id, string name, NodeId start, NodeId control1, NodeId control2, NodeId end) : CurveNode(id, name) { public NodeId StartPoint { get; set; } = start; public NodeId Control1 { get; set; } = control1; public NodeId Control2 { get; set; } = control2; public NodeId EndPoint { get; set; } = end; public override IEnumerable<NodeId> Dependencies => [StartPoint, Control1, Control2, EndPoint]; public override IEnumerable<MeasurementId> MeasurementDependencies => []; public override ICurve Evaluate(INodeEvaluationContext context) => new CubicCurve( context.GetPoint(StartPoint), context.GetPoint(Control1), context.GetPoint(Control2), context.GetPoint(EndPoint)); public override DraftNode Clone() => new CubicCurveNode(Id, Name, StartPoint, Control1, Control2, EndPoint); } /// <summary> /// Построение не может быть вычислено в текущем состоянии модели. /// </summary> /// <remarks> /// Отличается от ошибки в формуле: сама формула может быть безупречна, а /// построение — неразрешимо, например когда линии перестали пересекаться. /// </remarks> public sealed class NodeUnresolvableException(string message) : Exception(message);