Accessing HyperNurbs edge weights

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

On 08/02/2004 at 11:16, xxxxxxxx wrote:

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

---------
How to access the HyperNurbs weighting for edges?

Samir guessed earlier today in a very helpful post that it should be the same as accesing the weights of the points of the edge in question.

However, this sound a bit weird as there is a huge difference in Cinema itself between points or edges set to 100% respectively.

Or could/do I have to use sendmodeling to set that?

Has anybody of you already manipulated edge HN weights?

Thanks for any insight!

Kabe

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

On 10/02/2004 at 15:26, xxxxxxxx wrote:

Edge weights are stored in the HNData::polyweight array.

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

On 10/02/2004 at 23:02, xxxxxxxx wrote:

Ooookay, naming seems a bit odd here IMO ;-)

Anyway - thanks a lot, that helped tremendously!

So let me sum it up for anyone who might
stumble later over this thread using search:

Pointweights are stored in HN::pointweight

Edgeweights are stored in HN::polyweight

Polyweights are not stored as such, but as the combination of Point- and Edgeweights. This is also easy to proof inside Cinema. So if you would like to set the Hypernurbs weight of a polygon, you have to set the weights of all the attaching edges and points instead.

Kabe

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

On 20/04/2011 at 08:17, xxxxxxxx wrote:

Howdy,

Can someone show some example code of this?

Adios,
Cactus Dan

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

On 28/04/2011 at 04:07, xxxxxxxx wrote:

Simple example, printing the weights:

  
Bool MenuTest::Execute(BaseDocument *doc)  
{  
  BaseObject *op = doc->GetActiveObject();  
  if (!op) return FALSE;  
  
  HNWeightTag *tag = (HNWeightTag* )op->GetTag(Tsds, 0);  
  if (!tag) return FALSE;  
  
  HNData hd;  
  
  if (tag->GetTagData(&hd))  
  {  
      LONG pcnt = *hd.points;  
      LONG vcnt = *hd.polys;  
  
      LONG i=0;  
  
      for (i=0; i<pcnt; i++)  
      {  
          GePrint(LongToString(i)+" point weight: "+RealToString((*hd.pointweight)[i]));  
      }  
  
      for (i=0; i<vcnt; i++)  
      {  
          GePrint(LongToString(i)+" poly weight a: "+RealToString((*hd.polyweight)[i].a));  
          GePrint(LongToString(i)+" poly weight b: "+RealToString((*hd.polyweight)[i].b));  
          GePrint(LongToString(i)+" poly weight c: "+RealToString((*hd.polyweight)[i].c));  
          GePrint(LongToString(i)+" poly weight d: "+RealToString((*hd.polyweight)[i].d));  
      }  
  }  
  
  return TRUE;  
}  

cheers,
Matthias

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

On 28/04/2011 at 07:55, xxxxxxxx wrote:

Howdy,

Thanks Matthias. That fixed the crash. Can you explain the significance of the double "**" in the HNData structure?

But, now I have another question: How would I assign values to the array?

Adios,
Cactus Dan

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

On 28/04/2011 at 08:07, xxxxxxxx wrote:

Originally posted by xxxxxxxx

Can you explain the significance of the double "**" in the HNData structure?

But, now I have another question: How would I assign values to the array?

It's a pointer to an array. To access the array you have to dereference its array elements with the * oparator.

To assign a value do something like this:

(*hn.pointweight)[i] = myvalue

cheers,
Matthias

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

On 28/04/2011 at 08:16, xxxxxxxx wrote:

Howdy,

OK, thanks again, Matthias. :wink:

Adios,
Cactus Dan