if (type == 1 && x.type == 1) if ((PtRs->low >= x.PtRs->low && PtRs->low < x.PtRs->high || PtRs->high > x.PtRs->low && PtRs->high <= x.PtRs->high || PtRs->low <= x.PtRs->low && PtRs->high > x.PtRs->low || PtRs->low < x.PtRs->high && PtRs->high >= x.PtRs->high) && (PtRt->low >= x.PtRt->low && PtRt->low < x.PtRt->high || PtRt->high > x.PtRt->low && PtRt->high <= x.PtRt->high || PtRt->low <= x.PtRt->low && PtRt->high > x.PtRt->low || PtRt->low < x.PtRt->high && PtRt->high >= x.PtRt->high)) o = 1; else o = 0; else if (type == 1 && x.type == 2) if ((PtRs->low >= x.PtRs->low && PtRs->low < x.PtRs->high || PtRs->high > x.PtRs->low && PtRs->high <= x.PtRs->high || PtRs->low <= x.PtRs->low && PtRs->high > x.PtRs->low || PtRs->low < x.PtRs->high && PtRs->high >= x.PtRs->high) && (PtRt->low < x.PtBt && PtRt->high > x.PtBt)) o = 1; else o = 0; else if (type == 1 && x.type == 3) if ((PtRs->low < x.PtBs && PtRs->high > x.PtBs) && (PtRt->low >= x.PtRt->low && PtRt->low < x.PtRt->high || PtRt->high > x.PtRt->low && PtRt->high <= x.PtRt->high || PtRt->low <= x.PtRt->low && PtRt->high > x.PtRt->low || PtRt->low < x.PtRt->high && PtRt->high >= x.PtRt->high)) o = 1; else o = 0; else if (type == 1 && x.type == 4) if ((PtRs->low < x.PtBs && PtRs->high > x.PtBs) && (PtRt->low < x.PtBt && PtRt->high > x.PtBt)) o = 1; else o = 0; else if (type == 2 && x.type == 1) if ((PtRs->low >= x.PtRs->low && PtRs->low < x.PtRs->high || PtRs->high > x.PtRs->low && PtRs->high <= x.PtRs->high || PtRs->low <= x.PtRs->low && PtRs->high > x.PtRs->low || PtRs->low < x.PtRs->high && PtRs->high >= x.PtRs->high) && (PtBt > x.PtRt->low && PtBt < x.PtRt->high)) o = 1; else o = 0; else if (type == 2 && x.type == 2) if ((PtRs->low >= x.PtRs->low && PtRs->low < x.PtRs->high || PtRs->high > x.PtRs->low && PtRs->high <= x.PtRs->high || PtRs->low <= x.PtRs->low && PtRs->high > x.PtRs->low || PtRs->low < x.PtRs->high && PtRs->high >= x.PtRs->high) && (PtBt == x.PtBt)) o = 1; else o = 0; else if (type == 2 && x.type == 3) if ((PtRs->low < x.PtBs && PtRs->high > x.PtBs) && (PtBt > x.PtRt->low && PtBt < x.PtRt->high)) o = 1; else o = 0; else if (type == 2 && x.type == 4) if ((PtRs->low < x.PtBs && PtRs->high > x.PtBs) && (PtBt == x.PtBt)) o = 1; else o = 0; else if (type == 3 && x.type == 1) if ((PtBs > x.PtRs->low && PtBs < x.PtRs->high) && (PtRt->low >= x.PtRt->low && PtRt->low < x.PtRt->high || PtRt->high > x.PtRt->low && PtRt->high <= x.PtRt->high || PtRt->low <= x.PtRt->low && PtRt->high > x.PtRt->low || PtRt->low < x.PtRt->high && PtRt->high >= x.PtRt->high)) o = 1; else o = 0; else if (type == 3 && x.type == 2) if ((PtBs > x.PtRs->low && PtBs < x.PtRs->high) && (PtRt->low < x.PtBt && PtRt->high > x.PtBt)) o = 1; else o = 0; else if (type == 3 && x.type == 3) if ((PtBs == x.PtBs) && (PtRt->low >= x.PtRt->low && PtRt->low < x.PtRt->high || PtRt->high > x.PtRt->low && PtRt->high <= x.PtRt->high || PtRt->low <= x.PtRt->low && PtRt->high > x.PtRt->low || PtRt->low < x.PtRt->high && PtRt->high >= x.PtRt->high)) o = 1; else o = 0; else if (type == 3 && x.type == 4) if ((PtBs == x.PtBs) && (PtRt->low < x.PtBt && PtRt->high > x.PtBt)) o = 1; else o = 0; else if (type == 4 && x.type == 1) if ((PtBs > x.PtRs->low && PtBs < x.PtRs->high) && (PtBt > x.PtRt->low && PtBt < x.PtRt->high)) o = 1; else o = 0; else if (type == 4 && x.type == 2) if ((PtBs > x.PtRs->low && PtBs < x.PtRs->high) && (PtBt == x.PtBt)) o = 1; else o = 0; else if (type == 4 && x.type == 3) if ((PtBs == x.PtBs) && (PtBt > x.PtRt->low && PtBt < x.PtRt->high)) o = 1; else o = 0; else if (type == 4 && x.type == 4) if ((PtBs == x.PtBs) && (PtBt == x.PtBt)) o = 1; else o = 0; return o; ================================== bryan's attempt at refactoring into some python def o_setter(check): if check: return 1 return 0 ptrs_low_within_other_ptrs_range = PtRs.low >= x.PtRs.low and PtRs.low < x.PtRs.high ptrs_high_within_other_ptrs_range = PtRs.high > x.PtRs.low and PtRs.high <= x.PtRs.high other_ptrs_low_within_ptrs_range = PtRs.low <= x.PtRs.low and PtRs.high > x.PtRs.low other_ptrs_high_within_ptrs_range = PtRs.low < x.PtRs.high and PtRs.high >= x.PtRs.high ptrs_interval_overlap = ptrs_low_within_other_ptrs_range \ or ptrs_high_within_other_ptrs_range \ or other_ptrs_low_within_ptrs_range \ or other_ptrs_high_within_ptrs_range ptrt_low_within_other_ptrt_range = PtRt.low >= x.PtRt.low and PtRt.low < x.PtRt.high ptrt_high_within_other_ptrt_range = PtRt.high > x.PtRt.low and PtRt.high <= x.PtRt.high other_ptrt_low_within_ptrt_range = PtRt.low <= x.PtRt.low and PtRt.high > x.PtRt.low other_ptrt_high_within_ptrt_range = PtRt.low < x.PtRt.high and PtRt.high >= x.PtRt.high ptrt_interval_overlap = ptrt_low_within_other_ptrt_range \ or ptrt_high_within_other_ptrt_range \ or other_ptrt_low_within_ptrt_range \ or other_ptrt_high_within_ptrt_range other_ptbt_within_ptrt_range = PtRt.low < x.PtBt and PtRt.high > x.PtBt other_ptbs_within_ptrs_range = PtRs.low < x.PtBs and PtRs.high > x.PtBs ptbs_within_other_ptrs_range = PtBs > x.PtRs.low and PtBs < x.PtRs.high ptbt_within_other_ptrt_range = PtBt > x.PtRt.low and PtBt < x.PtRt.high o = None if self.type == 1: if x.type == 1: o = o_setter( ptrs_interval_overlap and ptrt_interval_overlap ) elif x.type == 2: o = o_setter( ptrs_interval_overlap and other_ptbt_within_ptrt_range ) elif x.type == 3: o = o_setter( ptrt_interval_overlap and other_ptbs_within_ptrs_range ) elif x.type == 4: o = o_setter( other_ptbs_within_ptrs_range and other_ptbt_within_ptrt_range ) elif self.type == 2: if x.type == 1: o = o_setter( ptbt_within_other_ptrt_range and ptrs_interval_overlap ) elif x.type == 2: o = o_setter( ptbt_equal and ptrs_interval_overlap ) elif x.type == 3: o = o_setter( ptbt_within_other_ptrt_range and other_ptbs_within_ptrs_range ) elif x.type == 4: o = o_setter( ptbt_equal and other_ptbs_within_ptrs_range ) elif self.type == 3: if x.type == 1: o = o_setter( ptbs_within_other_ptrs_range and ptrt_interval_overlap ) elif x.type == 2: o = o_setter( ptbs_within_other_ptrs_range and other_ptbt_within_ptrt_range ) elif x.type == 3: o = o_setter( ptbs_equal and ptrt_interval_overlap ) elif x.type == 4: o = o_setter( ptbs_equal and other_ptbt_within_ptrt_range ) elif self.type == 4: if x.type == 1: o = o_setter( ptbs_within_other_ptrs_range and ptbt_within_other_ptrt_range ) elif x.type == 2: o = o_setter( ptbt_equal and ptbs_within_other_ptrs_range ) elif x.type == 3: o = o_setter( ptbs_equal and ptbt_within_other_ptrt_range ) elif x.type == 4: o = o_setter( ptbs_equal and ptbt_equal )