Cleanup: replace the struct 'Ref' from knife code with 'LinkData'
This commit is contained in:
@@ -120,11 +120,6 @@ struct KnifeVert {
|
||||
bool is_splitting; /* Created when an edge was split. */
|
||||
};
|
||||
|
||||
struct Ref {
|
||||
Ref *next, *prev;
|
||||
void *ref;
|
||||
};
|
||||
|
||||
struct KnifeEdge {
|
||||
KnifeVert *v1, *v2;
|
||||
BMFace *basef; /* Face to restrict face fill to. */
|
||||
@@ -703,9 +698,9 @@ static void knifetool_draw_visible_angles(const KnifeTool_OpData *kcd)
|
||||
float angle = 0.0f;
|
||||
float *end;
|
||||
|
||||
kfe = static_cast<KnifeEdge *>(((Ref *)kfv->edges.first)->ref);
|
||||
LISTBASE_FOREACH (Ref *, ref, &kfv->edges) {
|
||||
tempkfe = static_cast<KnifeEdge *>(ref->ref);
|
||||
kfe = static_cast<KnifeEdge *>(((LinkData *)kfv->edges.first)->data);
|
||||
LISTBASE_FOREACH (LinkData *, ref, &kfv->edges) {
|
||||
tempkfe = static_cast<KnifeEdge *>(ref->data);
|
||||
if (tempkfe->v1 != kfv) {
|
||||
tempkfv = tempkfe->v1;
|
||||
}
|
||||
@@ -786,9 +781,9 @@ static void knifetool_draw_visible_angles(const KnifeTool_OpData *kcd)
|
||||
}
|
||||
else {
|
||||
/* Choose minimum angle edge. */
|
||||
kfe = static_cast<KnifeEdge *>(((Ref *)kfv->edges.first)->ref);
|
||||
LISTBASE_FOREACH (Ref *, ref, &kfv->edges) {
|
||||
tempkfe = static_cast<KnifeEdge *>(ref->ref);
|
||||
kfe = static_cast<KnifeEdge *>(((LinkData *)kfv->edges.first)->data);
|
||||
LISTBASE_FOREACH (LinkData *, ref, &kfv->edges) {
|
||||
tempkfe = static_cast<KnifeEdge *>(ref->data);
|
||||
if (tempkfe->v1 != kfv) {
|
||||
tempkfv = tempkfe->v1;
|
||||
}
|
||||
@@ -1546,8 +1541,8 @@ static BMElem *bm_elem_from_knife_vert(KnifeVert *kfv, KnifeEdge **r_kfe)
|
||||
|
||||
if (r_kfe || ele_test == nullptr) {
|
||||
if (kfv->v == nullptr) {
|
||||
LISTBASE_FOREACH (Ref *, ref, &kfv->edges) {
|
||||
kfe = static_cast<KnifeEdge *>(ref->ref);
|
||||
LISTBASE_FOREACH (LinkData *, ref, &kfv->edges) {
|
||||
kfe = static_cast<KnifeEdge *>(ref->data);
|
||||
if (kfe->e) {
|
||||
if (r_kfe) {
|
||||
*r_kfe = kfe;
|
||||
@@ -1568,7 +1563,7 @@ static BMElem *bm_elem_from_knife_vert(KnifeVert *kfv, KnifeEdge **r_kfe)
|
||||
/* face? */
|
||||
if (ele_test == nullptr) {
|
||||
if (BLI_listbase_is_single(&kfe->faces)) {
|
||||
ele_test = static_cast<BMElem *>(((Ref *)kfe->faces.first)->ref);
|
||||
ele_test = static_cast<BMElem *>(((LinkData *)kfe->faces.first)->data);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1605,17 +1600,17 @@ static ListBase *knife_empty_list(KnifeTool_OpData *kcd)
|
||||
|
||||
static void knife_append_list(KnifeTool_OpData *kcd, ListBase *lst, void *elem)
|
||||
{
|
||||
Ref *ref;
|
||||
LinkData *ref;
|
||||
|
||||
ref = static_cast<Ref *>(BLI_mempool_calloc(kcd->refs));
|
||||
ref->ref = elem;
|
||||
ref = static_cast<LinkData *>(BLI_mempool_calloc(kcd->refs));
|
||||
ref->data = elem;
|
||||
BLI_addtail(lst, ref);
|
||||
}
|
||||
|
||||
static Ref *find_ref(ListBase *lb, void *ref)
|
||||
static LinkData *find_ref(ListBase *lb, void *ref)
|
||||
{
|
||||
LISTBASE_FOREACH (Ref *, ref1, lb) {
|
||||
if (ref1->ref == ref) {
|
||||
LISTBASE_FOREACH (LinkData *, ref1, lb) {
|
||||
if (ref1->data == ref) {
|
||||
return ref1;
|
||||
}
|
||||
}
|
||||
@@ -1651,10 +1646,10 @@ static void knife_add_edge_faces_to_vert(KnifeTool_OpData *kcd, KnifeVert *kfv,
|
||||
* If more than one, return the first; if none, return nullptr. */
|
||||
static BMFace *knife_find_common_face(ListBase *faces1, ListBase *faces2)
|
||||
{
|
||||
LISTBASE_FOREACH (Ref *, ref1, faces1) {
|
||||
LISTBASE_FOREACH (Ref *, ref2, faces2) {
|
||||
if (ref1->ref == ref2->ref) {
|
||||
return (BMFace *)(ref1->ref);
|
||||
LISTBASE_FOREACH (LinkData *, ref1, faces1) {
|
||||
LISTBASE_FOREACH (LinkData *, ref2, faces2) {
|
||||
if (ref1->data == ref2->data) {
|
||||
return (BMFace *)(ref1->data);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1778,7 +1773,7 @@ static KnifeVert *knife_split_edge(KnifeTool_OpData *kcd,
|
||||
KnifeEdge **r_kfe)
|
||||
{
|
||||
KnifeEdge *newkfe = new_knife_edge(kcd);
|
||||
Ref *ref;
|
||||
LinkData *ref;
|
||||
BMFace *f;
|
||||
|
||||
newkfe->v1 = kfe->v1;
|
||||
@@ -1807,8 +1802,8 @@ static KnifeVert *knife_split_edge(KnifeTool_OpData *kcd,
|
||||
kfe->v1->is_splitting = true;
|
||||
BLI_addtail(&kfe->v1->edges, ref);
|
||||
|
||||
LISTBASE_FOREACH (Ref *, ref, &kfe->faces) {
|
||||
knife_edge_append_face(kcd, newkfe, static_cast<BMFace *>(ref->ref));
|
||||
LISTBASE_FOREACH (LinkData *, ref, &kfe->faces) {
|
||||
knife_edge_append_face(kcd, newkfe, static_cast<BMFace *>(ref->data));
|
||||
}
|
||||
|
||||
knife_add_to_vert_edges(kcd, newkfe);
|
||||
@@ -2119,15 +2114,15 @@ static void knife_add_single_cut(KnifeTool_OpData *kcd,
|
||||
*/
|
||||
static void knife_cut_face(KnifeTool_OpData *kcd, BMFace *f, ListBase *hits)
|
||||
{
|
||||
Ref *r;
|
||||
LinkData *r;
|
||||
|
||||
if (BLI_listbase_count_at_most(hits, 2) != 2) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (r = static_cast<Ref *>(hits->first); r->next; r = r->next) {
|
||||
for (r = static_cast<LinkData *>(hits->first); r->next; r = r->next) {
|
||||
knife_add_single_cut(
|
||||
kcd, static_cast<KnifeLineHit *>(r->ref), static_cast<KnifeLineHit *>(r->next->ref), f);
|
||||
kcd, static_cast<KnifeLineHit *>(r->data), static_cast<KnifeLineHit *>(r->next->data), f);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2145,9 +2140,9 @@ static void knife_make_face_cuts(KnifeTool_OpData *kcd, BMesh *bm, BMFace *f, Li
|
||||
BLI_assert(BLI_gset_len(kcd->edgenet.edge_visit) == 0);
|
||||
|
||||
i = 0;
|
||||
LISTBASE_FOREACH (Ref *, ref, kfedges) {
|
||||
LISTBASE_FOREACH (LinkData *, ref, kfedges) {
|
||||
bool is_new_edge = false;
|
||||
kfe = static_cast<KnifeEdge *>(ref->ref);
|
||||
kfe = static_cast<KnifeEdge *>(ref->data);
|
||||
|
||||
if (kfe->is_invalid) {
|
||||
continue;
|
||||
@@ -2250,8 +2245,8 @@ static void knife_make_face_cuts(KnifeTool_OpData *kcd, BMesh *bm, BMFace *f, Li
|
||||
|
||||
static int sort_verts_by_dist_cb(void *co_p, const void *cur_a_p, const void *cur_b_p)
|
||||
{
|
||||
const KnifeVert *cur_a = static_cast<const KnifeVert *>(((const Ref *)cur_a_p)->ref);
|
||||
const KnifeVert *cur_b = static_cast<const KnifeVert *>(((const Ref *)cur_b_p)->ref);
|
||||
const KnifeVert *cur_a = static_cast<const KnifeVert *>(((const LinkData *)cur_a_p)->data);
|
||||
const KnifeVert *cur_b = static_cast<const KnifeVert *>(((const LinkData *)cur_b_p)->data);
|
||||
const float *co = static_cast<const float *>(co_p);
|
||||
const float a_sq = len_squared_v3v3(co, cur_a->co);
|
||||
const float b_sq = len_squared_v3v3(co, cur_b->co);
|
||||
@@ -2315,8 +2310,8 @@ static void knife_make_cuts(KnifeTool_OpData *kcd, Object *ob)
|
||||
if (kfv->v || kfv->is_invalid || kfv->ob != ob) {
|
||||
continue; /* Already have a BMVert. */
|
||||
}
|
||||
LISTBASE_FOREACH (Ref *, ref, &kfv->edges) {
|
||||
kfe = static_cast<KnifeEdge *>(ref->ref);
|
||||
LISTBASE_FOREACH (LinkData *, ref, &kfv->edges) {
|
||||
kfe = static_cast<KnifeEdge *>(ref->data);
|
||||
BMEdge *e = kfe->e;
|
||||
if (!e) {
|
||||
continue;
|
||||
@@ -2337,8 +2332,8 @@ static void knife_make_cuts(KnifeTool_OpData *kcd, Object *ob)
|
||||
for (auto [e, list] : ehash.items()) {
|
||||
BLI_listbase_sort_r(list, sort_verts_by_dist_cb, e->v1->co);
|
||||
|
||||
LISTBASE_FOREACH (Ref *, ref, list) {
|
||||
kfv = static_cast<KnifeVert *>(ref->ref);
|
||||
LISTBASE_FOREACH (LinkData *, ref, list) {
|
||||
kfv = static_cast<KnifeVert *>(ref->data);
|
||||
pct = line_point_factor_v3(kfv->co, e->v1->co, e->v2->co);
|
||||
kfv->v = BM_edge_split(bm, e, e->v1, &enew, pct);
|
||||
}
|
||||
@@ -2403,13 +2398,13 @@ static void knife_add_cut(KnifeTool_OpData *kcd)
|
||||
add_hit_to_facehits(kcd, facehits, lh->f, lh);
|
||||
}
|
||||
if (lh->v) {
|
||||
LISTBASE_FOREACH (Ref *, r, &lh->v->faces) {
|
||||
add_hit_to_facehits(kcd, facehits, static_cast<BMFace *>(r->ref), lh);
|
||||
LISTBASE_FOREACH (LinkData *, r, &lh->v->faces) {
|
||||
add_hit_to_facehits(kcd, facehits, static_cast<BMFace *>(r->data), lh);
|
||||
}
|
||||
}
|
||||
if (lh->kfe) {
|
||||
LISTBASE_FOREACH (Ref *, r, &lh->kfe->faces) {
|
||||
add_hit_to_facehits(kcd, facehits, static_cast<BMFace *>(r->ref), lh);
|
||||
LISTBASE_FOREACH (LinkData *, r, &lh->kfe->faces) {
|
||||
add_hit_to_facehits(kcd, facehits, static_cast<BMFace *>(r->data), lh);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2566,8 +2561,8 @@ static bool knife_ray_intersect_face(KnifeTool_OpData *kcd,
|
||||
interp_v3_v3v3v3_uv(hit_cageco, UNPACK3(tri_cos), ray_tri_uv);
|
||||
/* Now check that far enough away from verts and edges. */
|
||||
list = knife_get_face_kedges(kcd, ob, ob_index, f);
|
||||
LISTBASE_FOREACH (Ref *, ref, list) {
|
||||
kfe = static_cast<KnifeEdge *>(ref->ref);
|
||||
LISTBASE_FOREACH (LinkData *, ref, list) {
|
||||
kfe = static_cast<KnifeEdge *>(ref->data);
|
||||
if (kfe->is_invalid) {
|
||||
continue;
|
||||
}
|
||||
@@ -2897,8 +2892,8 @@ static void knife_find_line_hits(KnifeTool_OpData *kcd)
|
||||
fobs.add(f, ob_index);
|
||||
|
||||
list = knife_get_face_kedges(kcd, ob, ob_index, f);
|
||||
LISTBASE_FOREACH (Ref *, ref, list) {
|
||||
KnifeEdge *kfe = static_cast<KnifeEdge *>(ref->ref);
|
||||
LISTBASE_FOREACH (LinkData *, ref, list) {
|
||||
KnifeEdge *kfe = static_cast<KnifeEdge *>(ref->data);
|
||||
if (kfe->is_invalid) {
|
||||
continue;
|
||||
}
|
||||
@@ -3209,8 +3204,8 @@ static int knife_sample_screen_density_from_closest_face(KnifeTool_OpData *kcd,
|
||||
knife_project_v2(kcd, cageco, sco);
|
||||
|
||||
list = knife_get_face_kedges(kcd, ob, ob_index, f);
|
||||
LISTBASE_FOREACH (Ref *, ref, list) {
|
||||
KnifeEdge *kfe = static_cast<KnifeEdge *>(ref->ref);
|
||||
LISTBASE_FOREACH (LinkData *, ref, list) {
|
||||
KnifeEdge *kfe = static_cast<KnifeEdge *>(ref->data);
|
||||
int i;
|
||||
|
||||
if (kfe->is_invalid) {
|
||||
@@ -3342,8 +3337,8 @@ static KnifeEdge *knife_find_closest_edge_of_face(
|
||||
|
||||
/* Look through all edges associated with this face. */
|
||||
list = knife_get_face_kedges(kcd, ob, ob_index, f);
|
||||
LISTBASE_FOREACH (Ref *, ref, list) {
|
||||
KnifeEdge *kfe = static_cast<KnifeEdge *>(ref->ref);
|
||||
LISTBASE_FOREACH (LinkData *, ref, list) {
|
||||
KnifeEdge *kfe = static_cast<KnifeEdge *>(ref->data);
|
||||
float kfv1_sco[2], kfv2_sco[2], test_cagep[3];
|
||||
float lambda;
|
||||
|
||||
@@ -3580,8 +3575,8 @@ static bool knife_snap_angle_relative(KnifeTool_OpData *kcd)
|
||||
* If none exists then exit. */
|
||||
if (kcd->prev.vert) {
|
||||
int count = 0;
|
||||
LISTBASE_FOREACH (Ref *, ref, &kcd->prev.vert->edges) {
|
||||
kfe = ((KnifeEdge *)(ref->ref));
|
||||
LISTBASE_FOREACH (LinkData *, ref, &kcd->prev.vert->edges) {
|
||||
kfe = ((KnifeEdge *)(ref->data));
|
||||
if (kfe->is_invalid) {
|
||||
continue;
|
||||
}
|
||||
@@ -3613,16 +3608,16 @@ static bool knife_snap_angle_relative(KnifeTool_OpData *kcd)
|
||||
/* Choose best face for plane. */
|
||||
BMFace *fprev = nullptr;
|
||||
if (kcd->prev.vert && kcd->prev.vert->v) {
|
||||
LISTBASE_FOREACH (Ref *, ref, &kcd->prev.vert->faces) {
|
||||
f = ((BMFace *)(ref->ref));
|
||||
LISTBASE_FOREACH (LinkData *, ref, &kcd->prev.vert->faces) {
|
||||
f = ((BMFace *)(ref->data));
|
||||
if (f == fcurr) {
|
||||
fprev = f;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (kcd->prev.edge) {
|
||||
LISTBASE_FOREACH (Ref *, ref, &kcd->prev.edge->faces) {
|
||||
f = ((BMFace *)(ref->ref));
|
||||
LISTBASE_FOREACH (LinkData *, ref, &kcd->prev.edge->faces) {
|
||||
f = ((BMFace *)(ref->data));
|
||||
if (f == fcurr) {
|
||||
fprev = f;
|
||||
}
|
||||
@@ -3710,8 +3705,8 @@ static int knife_calculate_snap_ref_edges(KnifeTool_OpData *kcd)
|
||||
}
|
||||
|
||||
if (kcd->prev.vert) {
|
||||
LISTBASE_FOREACH (Ref *, ref, &kcd->prev.vert->edges) {
|
||||
kfe = ((KnifeEdge *)(ref->ref));
|
||||
LISTBASE_FOREACH (LinkData *, ref, &kcd->prev.vert->edges) {
|
||||
kfe = ((KnifeEdge *)(ref->data));
|
||||
if (kfe->is_invalid) {
|
||||
continue;
|
||||
}
|
||||
@@ -3904,8 +3899,8 @@ static void knifetool_undo(KnifeTool_OpData *kcd)
|
||||
if (!v1->is_invalid && !v1->is_splitting) {
|
||||
v1->is_invalid = true;
|
||||
/* If the first vertex is touching any other cut edges don't remove it. */
|
||||
LISTBASE_FOREACH (Ref *, ref, &v1->edges) {
|
||||
kfe = static_cast<KnifeEdge *>(ref->ref);
|
||||
LISTBASE_FOREACH (LinkData *, ref, &v1->edges) {
|
||||
kfe = static_cast<KnifeEdge *>(ref->data);
|
||||
if (kfe->is_cut && !kfe->is_invalid) {
|
||||
v1->is_invalid = false;
|
||||
break;
|
||||
@@ -3917,8 +3912,8 @@ static void knifetool_undo(KnifeTool_OpData *kcd)
|
||||
if (!v2->is_invalid && !v2->is_splitting) {
|
||||
v2->is_invalid = true;
|
||||
/* If the second vertex is touching any other cut edges don't remove it. */
|
||||
LISTBASE_FOREACH (Ref *, ref, &v2->edges) {
|
||||
kfe = static_cast<KnifeEdge *>(ref->ref);
|
||||
LISTBASE_FOREACH (LinkData *, ref, &v2->edges) {
|
||||
kfe = static_cast<KnifeEdge *>(ref->data);
|
||||
if (kfe->is_cut && !kfe->is_invalid) {
|
||||
v2->is_invalid = false;
|
||||
break;
|
||||
@@ -4073,7 +4068,7 @@ static void knifetool_init(ViewContext *vc,
|
||||
|
||||
ED_region_tag_redraw(kcd->region);
|
||||
|
||||
kcd->refs = BLI_mempool_create(sizeof(Ref), 0, 2048, 0);
|
||||
kcd->refs = BLI_mempool_create(sizeof(LinkData), 0, 2048, 0);
|
||||
kcd->kverts = BLI_mempool_create(sizeof(KnifeVert), 0, 512, BLI_MEMPOOL_ALLOW_ITER);
|
||||
kcd->kedges = BLI_mempool_create(sizeof(KnifeEdge), 0, 512, BLI_MEMPOOL_ALLOW_ITER);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user