Elyg
9/12/2017 - 5:36 PM

Creates primitives at the centers of half edges, useful for constraints

Run Over: VERTICES Creates primitives at the centers of half edges, useful for constraints

removeprim(0, @primnum, 1);

int hedge = vertexhedge(0, i@vtxnum);
int oppHedge = hedge_nextequiv(0, hedge);
int countHedge = hedge_equivcount(0, hedge);
if(hedge != oppHedge)
{
  int prim = addprim(0, "polyline");  

  int pt0 = hedge_srcpoint(0, hedge);
  int pt1 = hedge_dstpoint(0, hedge);
 
  if(pt0<pt1)
  {
    int prim0 = hedge_prim(0, hedge);
    int prim1 = hedge_prim(0, oppHedge);
 
    vector pos0 = point(0, "P", pt0);
    vector pos1 = point(0, "P", pt1);
    vector pos = avg(pos0, pos1);
 
    vector N = point(0, "N", pt0);
    vector dir = normalize(pos0-pos1);
    vector movedir = cross(N, dir);
    movedir *=0.01;
 
    int newPt0 = addpoint(0, pos+movedir);
    int newPt1 = addpoint(0, pos-movedir);
 
    string name0 = prim(0, "name", prim0);
    string name1 = prim(0, "name", prim1);
 
    addpointattrib(0, "name", "");
    addpointattrib(0, "id", -1);
    
    setpointattrib(0, "name", newPt0, name0);
    setpointattrib(0, "name", newPt1, name1);
    
    setpointattrib(0, "id", newPt0, prim0);
    setpointattrib(0, "id", newPt1, prim1);
    
    addvertex(0, prim, newPt0);
    addvertex(0, prim, newPt1);
  }
}