Maxon Developers Maxon Developers
    • Documentation
      • Cinema 4D Python API
      • Cinema 4D C++ API
      • Cineware API
      • ZBrush Python API
      • ZBrush GoZ API
      • Code Examples on Github
    • Forum
    • Downloads
    • Support
      • Support Procedures
      • Registered Developer Program
      • Plugin IDs
      • Contact Us
    • Categories
      • Overview
      • News & Information
      • Cinema 4D SDK Support
      • Cineware SDK Support
      • ZBrush 4D SDK Support
      • Bugs
      • General Talk
    • Unread
    • Recent
    • Tags
    • Users
    • Login

    NGons usage [SOLVED]

    SDK Help
    0
    6
    737
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • H
      Helper
      last edited by

      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.

      1 Reply Last reply Reply Quote 0
      • H
        Helper
        last edited by

        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

        1 Reply Last reply Reply Quote 0
        • H
          Helper
          last edited by

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

          Thank you, that's exactly what I needed.

          1 Reply Last reply Reply Quote 0
          • H
            Helper
            last edited by

            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

            1 Reply Last reply Reply Quote 0
            • H
              Helper
              last edited by

              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

              1 Reply Last reply Reply Quote 0
              • H
                Helper
                last edited by

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

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

                1 Reply Last reply Reply Quote 0
                • First post
                  Last post