sculpt-dev: Fix new BMLog for new id system

Everything seems to be working, I can now
start reverting the old ID system (which
was not suitable for master).
This commit is contained in:
Joseph Eagar 2023-02-06 02:52:36 -08:00
parent 155fa374eb
commit 4079136bf4
1 changed files with 15 additions and 14 deletions

View File

@ -418,10 +418,9 @@ struct BMLogEntry {
template<typename T> T *get_elem_from_id(BMesh *bm, BMID<T> id)
{
#ifdef USE_NEW_IDMAP
BMIdMap *idmap = idmap;
return reinterpret_cast<T *>(BM_idmap_lookup(idmap, id.id));
#else
auto *idmap = &bm->idmap;
#endif
if (idmap->flag & BM_NO_REUSE_IDS) {
return reinterpret_cast<T *>(BLI_ghash_lookup(bm->idmap.ghash, POINTER_FROM_INT(id.id)));
@ -433,18 +432,19 @@ struct BMLogEntry {
}
return reinterpret_cast<T *>(idmap->map[id.id]);
#endif
}
template<typename T> void assign_elem_id(BMesh *bm, T *elem, BMID<T> _id, bool check_unique)
{
BMElem *bmelem = reinterpret_cast<BMElem *>(elem);
int id = _id.id;
#ifdef USE_NEW_IDMAP
if (check_unique) {
BMElem *old;
old = BM_idmap_lookup(idmap, id);
if ((old = BM_idmap_lookup(idmap, id))) {
if (old && old != (BMElem *)elem) {
printf("id conflict in bm_assign_id; elem %p (a %s) is being reassinged to id %d.\n",
elem,
get_elem_htype_str((int)elem->head.htype),
@ -452,13 +452,14 @@ struct BMLogEntry {
printf(
" elem %p (a %s) will get a new id\n", old, get_elem_htype_str((int)old->head.htype));
BM_idmap_assign(idmap, elem, id);
BM_idmap_assign(idmap, reinterpret_cast<BMElem *>(elem), id);
return;
}
}
BM_idmap_assign(idmap, elem, id);
BM_idmap_assign(idmap, reinterpret_cast<BMElem *>(elem), id);
#else
BMElem *bmelem = reinterpret_cast<BMElem *>(elem);
bm_assign_id(bm, bmelem, (uint)id, check_unique);
#endif
}
@ -533,7 +534,7 @@ struct BMLogEntry {
printf("%s: error: wrong length for face, was %d, should be %d\n",
__func__,
f->len,
lf->verts.size());
(int)lf->verts.size());
return;
}
@ -711,7 +712,7 @@ struct BMLogEntry {
ATTR_NO_OPT void undo(BMesh *bm, BMLogCallbacks *callbacks)
{
for (int i = sets.size() - 1; i >= 0; i--) {
printf(" - %d of %d\n", i, (int)(sets.size() - 1));
//printf(" - %d of %d\n", i, (int)(sets.size() - 1));
sets[i]->undo(bm, callbacks);
}
}
@ -1014,7 +1015,7 @@ void BMLogSetDiff::modify_edge(BMesh *bm, BMEdge *e)
void BMLogSetDiff::add_face(BMesh *bm, BMFace *f)
{
#ifdef USE_NEW_IDMAP
BM_idmap_check_assign(log->idmap, (BMElem *)f);
BM_idmap_check_assign(entry->idmap, (BMElem *)f);
#endif
BMID<BMFace> id = entry->get_elem_id<BMFace>(bm, f);
@ -1153,7 +1154,7 @@ ATTR_NO_OPT void BMLogSetDiff::remove_verts(BMesh *bm,
}
#ifdef USE_NEW_IDMAP
BM_idmap_release(log->idmap, (BMElem *)v, false);
BM_idmap_release(entry->idmap, (BMElem *)v, false);
#endif
BM_vert_kill(bm, v);
}
@ -1208,7 +1209,7 @@ void BMLogSetDiff::remove_edges(BMesh *bm,
}
#ifdef USE_NEW_IDMAP
BM_idmap_release(entry->idmap, reinterpret_cast<BMElem *>(e));
BM_idmap_release(entry->idmap, reinterpret_cast<BMElem *>(e), true);
#endif
BM_edge_kill(bm, e);
}
@ -1314,7 +1315,7 @@ ATTR_NO_OPT void BMLogSetDiff::remove_faces(BMesh *bm,
}
#ifdef USE_NEW_IDMAP
BM_idmap_release(entry->idmap, reinterpret_cast<BMElem *>(f));
BM_idmap_release(entry->idmap, reinterpret_cast<BMElem *>(f), true);
#endif
BM_face_kill(bm, f);
}
@ -1546,7 +1547,7 @@ void BM_log_full_mesh(BMesh *bm, BMLog *log)
BMVert *BM_log_id_vert_get(BMesh *bm, BMLog *log, uint id)
{
#ifdef USE_NEW_IDMAP
return BM_idmap_lookup(log->idmap, id);
return reinterpret_cast<BMVert *>(BM_idmap_lookup(log->idmap, id));
#else
return reinterpret_cast<BMVert *>(BM_ELEM_FROM_ID(bm, id));
#endif
@ -1564,7 +1565,7 @@ uint BM_log_vert_id_get(BMesh *bm, BMLog *log, BMVert *v)
BMFace *BM_log_id_face_get(BMesh *bm, BMLog *log, uint id)
{
#ifdef USE_NEW_IDMAP
return BM_idmap_lookup(log->idmap, id);
return reinterpret_cast<BMFace *>(BM_idmap_lookup(log->idmap, id));
#else
return reinterpret_cast<BMFace *>(BM_ELEM_FROM_ID(bm, id));
#endif