def point_cost( m1: gp_Pnt, m2: gp_Pnt, t1: gp_Trsf, t2: gp_Trsf, val: Optional[float] = None, ) -> float: val = 0 if val is None else val return val - (m1.Transformed(t1).XYZ() - m2.Transformed(t2).XYZ()).Modulus()
def point_on_line_cost( m1: gp_Pnt, m2: gp_Lin, t1: gp_Trsf, t2: gp_Trsf, val: Optional[float] = None, ) -> float: val = 0 if val is None else val m2_located = m2.Transformed(t2) return val - m2_located.Distance(m1.Transformed(t1))
def point_in_plane_cost( m1: gp_Pnt, m2: gp_Pln, t1: gp_Trsf, t2: gp_Trsf, val: Optional[float] = None, ) -> float: val = 0 if val is None else val m2_located = m2.Transformed(t2) # offset in the plane's normal direction by val: m2_located.Translate(gp_Vec(m2_located.Axis().Direction()).Multiplied(val)) return m2_located.Distance(m1.Transformed(t1))
def fixed_point_cost(m1: gp_Pnt, t1: gp_Trsf, val: Tuple[float, float, float]): return (m1.Transformed(t1).XYZ() - gp_XYZ(*val)).Modulus()