All Downloads are FREE. Search and download functionalities are using the official Maven repository.

scalismo.mesh.WarpedMeshSurfaceProperty.scala Maven / Gradle / Ivy

There is a newer version: 1.0-RC1
Show newest version
/*
 * Copyright 2016 University of Basel, Graphics and Vision Research Group
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package scalismo.mesh

/**
 * use a target surface property through a surface correspondence
 * Each lookup on this surface returns the property at the corresponding point of the underlying surface
 * @param underlyingProperty surface property on target surface (underlying)
 * @param correspondence surface correspondence field mapping points in this triangulation to underlying triangulation
 * @tparam A type of property
 */
case class WarpedMeshSurfaceProperty[A](underlyingProperty: MeshSurfaceProperty[A],
                                        correspondence: MeshSurfaceCorrespondence)
    extends MeshSurfaceProperty[A] {
  require(underlyingProperty.triangulation == correspondence.targetTriangulation,
          "correspondence is not compatible with underlying property")

  override def onSurface(triangleId: TriangleId, bcc: BarycentricCoordinates): A = {
    val oldSurfacePoint = correspondence.onSurface(triangleId, bcc)
    underlyingProperty(oldSurfacePoint._1, oldSurfacePoint._2)
  }

  override def triangulation: TriangleList = correspondence.triangulation
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy