Move a Hair



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

    On 22/09/2011 at 08:12, xxxxxxxx wrote:

    User Information:
    Cinema 4D Version:   12 
    Platform:      
    Language(s) :     C++  ;

    ---------
    Hy there,

    I made attempts to move a Hair within the calc_constraint Callback of the HairPluginObjectData. It seems that I can't simply move a Hair (by moving the base-point), they seem restraint by the guides.

    So I tried to move the guides itself, but setting a new global matrix (SetMg()) has no effect. Do I need another callback, or is there a "correct" way of moving a single Hair in space?

    Thank you,
    maxx



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

    On 27/09/2011 at 06:56, xxxxxxxx wrote:

    I don't know if it's possible to unroot the hairs. It seems as though the hooks are meant to just offset the hair points. I will ask the developers.

    cheers,
    Matthias



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

    On 27/09/2011 at 07:32, xxxxxxxx wrote:

    What does it mean, to unroot a Hair? Is it just possible to move a hair when moving the object it is rooted on? I think I don't understand the concepts of hair yet. As I saw in the example (HairGenerator), those hairs don't seem to have a root, as the type is HAIR_ROOT_TYPE_NONE.If it is possible to have a hair without root, can those hairs not be moved at all?

    Thank you,
    maxx



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

    On 27/09/2011 at 07:39, xxxxxxxx wrote:

    Every hair guide has a root. This is basically the first point of the guide. It determines the start position and direction of the guide. As I've found out you can set it through HairGuides::GetRoot/SetRoot.

    Here a simple example which flattens all guides along the X axis.

      
    static Bool _ConstraintFn(BaseDocument *doc, BaseList2D *op, HairObject *hair, HairGuides *guides, HairGuideDynamics *dyn, Vector *oldpnt, Vector *newpnt, Real *invmass, LONG pcnt, LONG cnt, LONG scnt)  
    {  
      BaseContainer *bc=op->GetDataInstance();  
      
      LONG i,l,j;  
      Real strength=bc->GetReal(HAIR_CONSTRAINT_STRENGTH);  
      
      for (i=0;i<cnt;i++)  
      {  
          for (l=0;l<scnt;l++)  
          {  
              j=i*scnt+l;  
      
              if (invmass[j]==0.0) continue;  
      
              //newpnt[j]=Mix(newpnt[j],oldpnt[j],strength);  
              newpnt[j]=oldpnt[j];  
              newpnt[j].x = 0.0;  
          }  
      }  
      
      if (guides)  
      {  
          LONG gcnt = guides->GetCount();  
      
          for (i=0; i<gcnt; i++)  
          {  
              HairRootData rdata = guides->GetRoot(i);  
              rdata.m_P.x = 0.0;  
      
              guides->SetRoot(i, rdata, TRUE);  
          }  
      }  
      
      
      return TRUE;  
    }  
    

    cheers,
    Matthias



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

    On 27/09/2011 at 11:18, xxxxxxxx wrote:

    Ok, changing the root works fine!

    Thank you,
    maxx


Log in to reply