Edge Selection indices

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);  
              }  
          }  
      }  

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

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).

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.

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.