THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 07/09/2009 at 03:54, xxxxxxxx wrote:
User Information:
Cinema 4D Version: 10.5
Platform:
Language(s) : C++ ;
---------
I am getting some results when using the TranslationMaps for polygons that I cannot explain.
When you delete an ngon that consists of two or more polygons, the information that is passed in the translation maps is not what I would expect.
here is a code snippet I use in the Message member of a tag plugin.
> <code>
>
>> `
\> if (type==MSG_TRANSLATE_POLYGONS)
\> { // Update the indexes as needed
\> BaseContainer *bc=((BaseList2D* )node)->GetDataInstance();
\> if (!bc)
\> return false;
\>
\> LONG lngI,lngJ,lngSize;
\>
\> TranslationMaps *map;
\> map=(TranslationMaps* )data;
\>
\> if (map)
\> {
\> // New to old polygon mapping
\> if (arrNewToOldPoly)
\> GeFree(arrNewToOldPoly);
\> lngSize = sizeof(LONG) * map->m_nPolygonCount;
\> arrNewToOldPoly = (LONG* )GeAlloc(lngSize);
\> if (!arrNewToOldPoly)
\> return false;
\>
\> for (lngI=0;lngI<map->m_nPolygonCount;lngI++)
\> { if (lngI>=map->m_oPolygonCount)
\> { arrNewToOldPoly[lngI]=-1;
\> }
\> else
\> { arrNewToOldPoly[lngI]=lngI;}
\>
\> }
\>
\> for (lngJ=0;lngJ<map->m_mPolygonCount;lngJ++)
\> {
\> GePrint("New To Old "+LongToString(map->m_pPolygonMap[lngJ].nIndex)+" "+LongToString(map->m_pPolygonMap[lngJ].oIndex)+" "+LongToString(map->m_pPolygonMap[lngJ].lFlags));
\>
\> if ((map->m_pPolygonMap[lngJ].lFlags & TRANSMAP_FLAG_NEW))
\> { arrNewToOldPoly[map->m_pPolygonMap[lngJ].nIndex]=-1;
\> };
\>
\> if ((map->m_pPolygonMap[lngJ].lFlags & TRANSMAP_FLAG_MOVED))
\> { if (map->m_pPolygonMap[lngJ].nIndex != -1)
\> { arrNewToOldPoly[map->m_pPolygonMap[lngJ].nIndex]=map->m_pPolygonMap[lngJ].oIndex;
\> }
\> };
\>
\> }
\>
\> // Old to new polygon mapping
\> if (arrOldTonewPoly)
\> GeFree(arrOldTonewPoly);
\> lngSize = sizeof(LONG) * map->m_oPolygonCount;
\> arrOldTonewPoly = (LONG* )GeAlloc(lngSize);
\> if (!arrOldTonewPoly)
\> return false;
\>
\> for (lngI=0;lngI<map->m_oPolygonCount;lngI++)
\> { arrOldTonewPoly[lngI]=lngI;
\> }
\>
\> for (lngJ=0;lngJ<map->m_mPolygonCount;lngJ++)
\> { GePrint("Old To New "+LongToString(map->m_pPolygonMap[lngJ].nIndex)+" "+LongToString(map->m_pPolygonMap[lngJ].oIndex)+" "+LongToString(map->m_pPolygonMap[lngJ].lFlags));
\>
\> if ((map->m_pPolygonMap[lngJ].lFlags & TRANSMAP_FLAG_DELETED))
\> { arrOldTonewPoly[map->m_pPolygonMap[lngJ].oIndex]=-1;
\> };
\>
\> if ((map->m_pPolygonMap[lngJ].lFlags & TRANSMAP_FLAG_MOVED))
\> { arrOldTonewPoly[map->m_pPolygonMap[lngJ].oIndex]=map->m_pPolygonMap[lngJ].nIndex;
\> };
\> }
\>
\> }
\> }
\>
`
>
> </code>
Now if use some simple polygon objects (I started with a cube with 2 segments), and do some simple tests this is what I get:
Delete a single polygon:
Highest polygon index is 23, the index of the polygon that gets deleted is 7
The polygon mapping gives this
nIndex -1 oIndex 7 lFlags 8 (TRANSMAP_FLAG_DELETED)
nIndex 7 oIndex 23 lFlags 4 (TRANSMAP_FLAG_MOVED)
That makes perfect sense but if I try to delete a ngon that consists of 2 polygons things are not that clear
Delete a ngon:
Highest polygon index is 26, the indexes of the polygons that make up the ngon are 25 and 7
The polygon mapping gives this
nIndex 7 oIndex 26 lFlags 4 (TRANSMAP_FLAG_MOVED)
nIndex -1 oIndex 28 lFlags 8 (TRANSMAP_FLAG_DELETED)
So the mapping tells me that polygon 25 (old index) has not been changed, although it does not exist any more
and both polygon 26 and 7 (old index) are now both polygon 7 (new index) although the original 7 has been deleted.
Is this a bug or am I missing something?
Cheers,
Nebu