Refactor get_next_segment
This commit is contained in:
parent
bac03fdfd9
commit
36ce989db6
|
@ -365,7 +365,6 @@ int med_find_closest_threshold_segment_side(vcsegptridx_t sp, int side, segptrid
|
||||||
// Select next segment.
|
// Select next segment.
|
||||||
// If there is a connection on the current side, then choose that segment.
|
// If there is a connection on the current side, then choose that segment.
|
||||||
// If there is no connecting segment on the current side, try any segment.
|
// If there is no connecting segment on the current side, try any segment.
|
||||||
extern void get_next_segment(int curseg_num, int curside, int *newseg_num, int *newside);
|
|
||||||
|
|
||||||
// Copy texture maps in newseg to nsp.
|
// Copy texture maps in newseg to nsp.
|
||||||
void copy_uvs_seg_to_seg(vsegptr_t nsp,vsegptr_t newseg);
|
void copy_uvs_seg_to_seg(vsegptr_t nsp,vsegptr_t newseg);
|
||||||
|
|
|
@ -73,23 +73,28 @@ static std::pair<vsegptridx_t, uint_fast32_t> get_previous_segment_side(const vs
|
||||||
// Select next segment.
|
// Select next segment.
|
||||||
// If there is a connection on the current side, then choose that segment.
|
// If there is a connection on the current side, then choose that segment.
|
||||||
// If there is no connecting segment on the current side, try any segment.
|
// If there is no connecting segment on the current side, try any segment.
|
||||||
void get_next_segment(int curseg_num, int curside, int *newseg_num, int *newside)
|
__attribute_warn_unused_result
|
||||||
|
static std::pair<vsegptridx_t, uint_fast32_t> get_next_segment_side(const vsegptridx_t curseg_num, uint_fast32_t curside)
|
||||||
{
|
{
|
||||||
if (IS_CHILD(Segments[curseg_num].children[curside])) {
|
const auto side_child = curseg_num->children[curside];
|
||||||
|
if (IS_CHILD(side_child))
|
||||||
*newseg_num = Segments[curseg_num].children[Curside];
|
{
|
||||||
|
const auto newseg_num = vsegptridx(side_child);
|
||||||
// Find out what side we came in through and favor side opposite that
|
// Find out what side we came in through and favor side opposite that
|
||||||
*newside = Side_opposite[find_connect_side(&Segments[curseg_num],&Segments[*newseg_num])];
|
const auto newside = Side_opposite[find_connect_side(curseg_num, newseg_num)];
|
||||||
|
|
||||||
// If there is nothing attached on the side opposite to what we came in (*newside), pick any other side
|
// If there is nothing attached on the side opposite to what we came in (*newside), pick any other side
|
||||||
if (!IS_CHILD(Segments[*newseg_num].children[*newside]))
|
if (!IS_CHILD(newseg_num->children[newside]))
|
||||||
for (int s=0; s<MAX_SIDES_PER_SEGMENT; s++)
|
for (uint_fast32_t s = 0; s != MAX_SIDES_PER_SEGMENT; ++s)
|
||||||
if ((Segments[*newseg_num].children[s] != curseg_num) && IS_CHILD(Segments[*newseg_num].children[s]))
|
{
|
||||||
*newside = s;
|
const auto cseg = newseg_num->children[s];
|
||||||
} else {
|
if (cseg != curseg_num && IS_CHILD(cseg))
|
||||||
*newseg_num = curseg_num;
|
return {newseg_num, s};
|
||||||
*newside = curside;
|
}
|
||||||
|
return {newseg_num, newside};
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return {curseg_num, curside};
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -97,12 +102,13 @@ void get_next_segment(int curseg_num, int curside, int *newseg_num, int *newside
|
||||||
// ---------- select current segment ----------
|
// ---------- select current segment ----------
|
||||||
int SelectCurrentSegForward()
|
int SelectCurrentSegForward()
|
||||||
{
|
{
|
||||||
int newseg_num,newside;
|
const auto p = get_next_segment_side(Cursegp,Curside);
|
||||||
|
const auto &newseg_num = p.first;
|
||||||
|
|
||||||
get_next_segment(Cursegp-Segments,Curside,&newseg_num,&newside);
|
if (newseg_num != Cursegp)
|
||||||
|
{
|
||||||
if (newseg_num != Cursegp-Segments) {
|
Cursegp = newseg_num;
|
||||||
Cursegp = &Segments[newseg_num];
|
const auto &newside = p.second;
|
||||||
Curside = newside;
|
Curside = newside;
|
||||||
Update_flags |= UF_ED_STATE_CHANGED;
|
Update_flags |= UF_ED_STATE_CHANGED;
|
||||||
if (Lock_view_to_cursegp)
|
if (Lock_view_to_cursegp)
|
||||||
|
|
Loading…
Reference in a new issue