def project_vertex(self, pnt, tol=TOLERANCE): '''projects self with a point, curve, edge, face, solid method wraps dealing with the various topologies if other is a point: returns uv, point ''' if isinstance(pnt, TopoDS_Vertex): pnt = BRep_Tool.Pnt(pnt) proj = GeomAPI_ProjectPointOnSurf(pnt, self.surface_handle, tol) uv = proj.LowerDistanceParameters() proj_pnt = proj.NearestPoint() return uv, proj_pnt
def closest_point(self, point, return_parameters=False): """Compute the closest point on the curve to a given point. Parameters ---------- point : Point The point to project to the surface. return_parameters : bool, optional If True, return the surface UV parameters in addition to the closest point. Returns ------- :class:`~compas.geometry.Point` | tuple[:class:`~compas.geometry.Point`, tuple[float, float]] If `return_parameters` is False, the nearest point on the surface. If `return_parameters` is True, the UV parameters in addition to the nearest point on the surface. """ projector = GeomAPI_ProjectPointOnSurf(point.to_occ(), self.occ_surface) point = Point.from_occ(projector.NearestPoint()) if not return_parameters: return point return point, projector.LowerDistanceParameters()