Skip to content

Surface curve does not record which pcurve belongs to which surface #90

Description

@GeneralPawz

Problem

CurveRelation::SurfaceCurve carries its pcurves as a flat, unordered
associated_geometry: Vec<NodeId>:

SurfaceCurve {
    curve_3d: NodeId,
    associated_geometry: Vec<NodeId>,
    master: MasterRepresentation,
}

A surface curve is the intersection of two surfaces, and each side carries
its own parameter-space image. Which pcurve belongs to which surface is
load-bearing geometric information, and the current model does not record
it: the list is positional at best, and validation accepts any mix.

expect_reference(.., ExpectedReference::CurveOrSurface) is the only
check, so a single-entry list, a swapped pair, or three unrelated nodes
are all equally legal.

Why it matters

Trimming a curved face needs the edge image in that specific surface
parameter domain. With two candidate pcurves and no recorded ownership, a
consumer must guess by re-inverting the surface, which is exactly the
operation the pcurve exists to avoid and is not generally solvable in
closed form.

Exchange formats state the pairing explicitly, so the information is
present at the boundary and is being discarded on the way in.

Done when

  • a surface curve records which pcurve belongs to which of its two
    surfaces, rather than an unordered list
  • the distinction survives a round trip through the graph
  • validation refuses a surface curve whose pcurve/surface pairing is
    incomplete or contradictory, instead of accepting any node mix
  • a single-sided surface curve stays expressible: not every edge has two
    parametric sides
  • existing SurfaceCurve construction sites migrate, with the master
    representation semantics unchanged

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

needs-triageFiled but not yet accepted, sized, or scheduled

Projects

No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions