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
    • Unread
    • Recent
    • Tags
    • Users
    • Login

    Edge Selection indices

    Scheduled Pinned Locked Moved SDK Help
    5 Posts 0 Posters 386 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 09/11/2012 at 01:32, xxxxxxxx wrote:

      User Information:
      Cinema 4D Version:    
      Platform:   Windows  ;   Mac OSX  ; 
      Language(s) :     C++  ;

      ---------
      I have a question about what the edge index of a selection represents with respect to either a triangular or quadrangular polygon?

      "Edges are indexed (4*poly)+edge where edge is from 0-3."

      If poly is a triangle and edge 2 is considered, is the edge from poly.c->poly.a or does it always represent poly.c->poly.a?  Here is my code.  Please help me validate that it is correctly considering the vertex indices represented by each edge:

              LONG    pi, ei;  
            for (LONG seg = 0L; bs->GetRange(seg,&a,&b); ++seg)  
            {  
                for (i=a; i<=b; ++i)  
                {  
                    pi =    i/4L;  
                    ei =    Mod(i,4L);  
                    if        (ei == 0L)  
                    {  
                        DetermineAsSourceVertex(verts, normal, polys[pi].a, side, mepsilon);  
                        DetermineAsSourceVertex(verts, normal, polys[pi].b, side, mepsilon);  
                    }  
                    else if (ei == 1L)  
                    {  
                        DetermineAsSourceVertex(verts, normal, polys[pi].b, side, mepsilon);  
                        DetermineAsSourceVertex(verts, normal, polys[pi].c, side, mepsilon);  
                    }  
                    else if (ei == 2L)  
                    {  
                        DetermineAsSourceVertex(verts, normal, polys[pi].c, side, mepsilon);  
                        if (polys[pi].c != polys[pi].d)  
                            DetermineAsSourceVertex(verts, normal, polys[pi].d, side, mepsilon);  
                        else  
                            DetermineAsSourceVertex(verts, normal, polys[pi].a, side, mepsilon);  
                    }  
                    else // ei == 3L  
                    {  
                        DetermineAsSourceVertex(verts, normal, polys[pi].d, side, mepsilon);  
                        DetermineAsSourceVertex(verts, normal, polys[pi].a, side, mepsilon);  
                    }  
                }  
            }  
      
      1 Reply Last reply Reply Quote 0
      • H Offline
        Helper
        last edited by

        THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

        On 09/11/2012 at 03:55, xxxxxxxx wrote:

        Yes, that looks right to me. I have made the same assumptions in my plugins.

        /Filip

        1 Reply Last reply Reply Quote 0
        • H Offline
          Helper
          last edited by

          THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

          On 20/11/2012 at 10:43, xxxxxxxx wrote:

          I just woke up and haven't had me coffee yet but... are you sure that side 2 is used at all if it's a triangle?  I may be crossing some info about one thing with another, but IIRC, side 2 is typically not used/indicated if it's a triangle, which would allow you to skip a test (not a big deal, either way).

          1 Reply Last reply Reply Quote 0
          • H Offline
            Helper
            last edited by

            THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

            On 21/11/2012 at 05:45, xxxxxxxx wrote:

            Edge 3 (for 0-3 indices) would be omitted and skipped for a triangle.

            1 Reply Last reply Reply Quote 0
            • H Offline
              Helper
              last edited by

              THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

              On 21/11/2012 at 08:39, xxxxxxxx wrote:

              My reference was from the PolyInfo structure, where you find this in the SDK docs...

                
              `.... S N I P ....  
                
                for (i=0; i<polygon_count; i++)  
                {  
                pli = n->GetPolyInfo(i);  
                
                for (side=0; side<4; side++) // test all 4 sides of a polygon  
                {  
                  // only proceed if edge has not already been processed  
                  // and edge really exists (***** for triangles side 2 from c..d does not exist as c==d ****** )  
                  if (pli->mark[side] || side==2 && vadr[i].c==vadr[i].d) continue;  
                  
                  // one can also skip the side==2 && vadr[i].c==vadr[i].d test as pli->mark[2] is always TRUE for triangles  
                  switch (side)  
                  {  
                    case 0: a=vadr[i].a; b=vadr[i].b; break;  
                    case 1: a=vadr[i].b; b=vadr[i].c; break;  
                    case 2: a=vadr[i].c; b=vadr[i].d; break;  
                    case 3: a=vadr[i].d; b=vadr[i].a; break;  
                  }  
                  // do something with the edge a..b  
                }  
                }  
                `  
                
              0-1-2-3 are the indices for a-b/b-c/c-d/d-a. For triangles the face/edge index 2 is set to NOTOK (as c == d). e.g. a value of 5-8-2-1 for 'face' means: a-b neighbor face is 5, b-c neighbor face is 8 etc.   
              `  
              .... S N I P ....  
              `
              

              ...it seems to me that all references to edges (and/or edge numbering) would follow the same logic - since the c-d edge doesn't exist for triangles, it would/should not be listed/indicated.

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