Maxon Developers Maxon Developers
    • Documentation
      • Cinema 4D Python API
      • Cinema 4D C++ API
      • Cineware API
      • ZBrush Python API
      • ZBrush GoZ API
      • Code Examples on Github
    • Forum
    • Downloads
    • Support
      • Support Procedures
      • Registered Developer Program
      • Plugin IDs
      • Contact Us
    • Categories
      • Overview
      • News & Information
      • Cinema 4D SDK Support
      • Cineware SDK Support
      • ZBrush 4D SDK Support
      • Bugs
      • General Talk
    • Recent
    • Tags
    • Users
    • Login

    TranslationMaps and polygons

    Scheduled Pinned Locked Moved SDK Help
    1 Posts 0 Posters 130 Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • H Offline
      Helper
      last edited by

      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

      1 Reply Last reply Reply Quote 0
      • First post
        Last post