NGons usage [SOLVED]

On 07/09/2016 at 02:30, xxxxxxxx wrote:

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

---------
Hi,
Can somebody please give me an example code or link to code - how to use (read/write) NGons?
I tried something like this so far - writing NGons:

1. I have allocated output PolygonObject with quads (works as expected) in "mesh_out"
2. then I called "mesh_out->GetAndBuildNgon();" to alloc NgonBase (not sure if that's correct)
3. then for each Ngon I called: "mesh_out->GetNgonBase()->BuildNgon(...);
Doesn't do anything visible.

Is that correct? I mean, are these functions sufficient to make NGons? As I said, a working example would be very helpful.

Thank you.

On 08/09/2016 at 02:29, xxxxxxxx wrote:

Hello,

the easiest and safest way to handle NGons is not to use the low level API but to use the Modeling library instead. This library takes care that all the data is handled correctly. Here is a simple example:

  
// create modeling object  
AutoAlloc<Modeling> modeling;  
if (!modeling)  
  return false;  
  
PolygonObject* polyObject = PolygonObject::Alloc(0, 0);  
if (polyObject == nullptr)  
  return true;  
  
// set point count to 10  
const Int32 pointCount = 10;  
  
// resize polygon object  
polyObject->ResizeObject(pointCount, 0);  
  
// init polygon object for modeling  
modeling->InitObject(polyObject);  
  
Float64       cos;  
Float64       sin;  
Float64       angle = 0.0;  
const Float64 step  = 2 * PI / Float64(pointCount);  
  
// prepare array for the indices  
maxon::BaseArray<Int32> ngonPoints;  
  
// create points for the polygon object  
for (Int32 i = 0; i < pointCount; ++i)  
{  
  // calculate coordinates  
  maxon::SinCos(angle, sin, cos);  
  const Vector coords = Vector(cos * 100.0, sin * 100.0, 0);  
  
  // set coordinates for the given point  
  modeling->SetPoint(polyObject, i, coords);  
  
  // save index for later  
  ngonPoints.Append(i);  
  
  // next step  
  angle = angle + step;  
}  
  
// create Ngon  
modeling->CreateNgon(polyObject, ngonPoints.GetFirst(), (Int32)ngonPoints.GetCount());  
  
// commit the modeling transformation before inserting the polygon object into the document  
if (!modeling->Commit())  
  return false;  
  
// add the polygon object to the document  
doc->InsertObject(polyObject, nullptr, nullptr);  
  
EventAdd();  

best wishes,
Sebastian

On 13/09/2016 at 01:36, xxxxxxxx wrote:

Thank you, that's exactly what I needed.

On 22/09/2016 at 19:11, xxxxxxxx wrote:

This is a blast from the past (2008) post I did that may or may not be useful (it sounds like you already solved the issue).  It has a bit more detail about some of the lower level api and a few comments with additional info by others.

Cheers,

Keith

On 23/09/2016 at 07:44, xxxxxxxx wrote:

Nice to see you posting again Keith.
You've been M.I.A. for a long time.

-ScottA

On 23/09/2016 at 08:51, xxxxxxxx wrote:

Thanks Scott - I de-lurk from time to time :).