||We present an algorithm and its implementation to reconstruct a complex composed of surfaces from an unorganized point cloud. The output is a triangular mesh that approximates the unknown complex. A wide variety of non-smooth features are handled, including boundaries, vertices and junction curves with manifold or non-manifold neighborhood where multiple surfaces meet, and creases where surfaces fold. We model the non-smooth features using a unified optimization-based approach. The model allows us to sample points from the non-smooth features and approximate them with polylines. We approximate the surfaces in the complex with restricted Delaunay triangulations, which meet seamlessly at the polylines approximating the non-smooth features.