public ISurface Move(Vector3 v) { var res = new FlatPlane { _outer = _outer.Select(edge => edge.Move(v)).ToList(), _inners = _inners .Select(inner => inner.Select(edge => edge.Move(v)).ToList()) .ToList() }; return(res); }
public Prism(FlatPlane plane, Vector3 backward, Vector3 forward) { _surfaces = new List <ISurface>(); if (plane.Normal != (forward - backward).Normalize()) { plane.Reverse(); } _surfaces.AddRange(plane.Outer.Select(edge => new RuledSurface(edge, backward, forward))); _surfaces.AddRange(plane.Inners.SelectMany(inner => inner.Select(edge => new RuledSurface(edge, backward, forward)))); _surfaces.Add(plane.Move(backward)); var top = plane.Move(forward) as FlatPlane; top.Reverse(); _surfaces.Add(top); }