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
    • Recent
    • Tags
    • Users
    • Login

    some problem with polygon and modellig

    Scheduled Pinned Locked Moved SDK Help
    7 Posts 0 Posters 544 Views
    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 Offline
      Helper
      last edited by

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

      On 30/04/2009 at 01:35, xxxxxxxx wrote:

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

      ---------
      Hello all,
      i am serching a way to cerate a polygon (ngon) from some existing point.
      in particular i create with modelling Lib this point in a loop and then in next loop i need to cerate an Ngon.

      Another problem:
      here some code  in may Descriptiontooldata::MouseInput
      case SM_TYPE_CONTOUR:
      {
      if (i==0)
      {
      mymod= Modeling::Alloc();
      mymod->InitObject((PolygonObject* )obj,0);
      }
      if ( i != 0)
      {
      if ( newpos == trackarr[0] )
      {
      mymod->CreateNgon((PolygonObject* )obj,index,i);
      if (!mymod->Commit()) return FALSE;
      EventAdd();
      trackarr.Free();
      longarr.Free();
      Modeling::Free(mymod);
      i=0;
      break;
      }
      }
      trackarr.Push(newpos);
      index[i] = mymod->AddPoint(obj,newpos);
      if (!mymod->Commit()) return FALSE;
      i=i++;
      break;
      }
      the main problem is this in the first loop (i=0) i alloc modelling and this is ok
      then on each i increment i ad a point with  mymod->AddPoint(obj,newpos);
      but in the second loop this operation return 0 and not point virtual index, cinema4d trace tell me Modelling Kernel error.
      any idea ?
      Thanks
      Franz

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

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

        On 30/04/2009 at 02:04, xxxxxxxx wrote:

        Hi Franz,

        If you use Commit() inside of a loop the Commit-function returns FALSE from the second run. You have to call Commit() after all your Ngons were created.
        In your case you should add first all points and then call the Commit-function.

        I hope this solves your problem.

        cheers,

        Oli

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

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

          On 30/04/2009 at 03:58, xxxxxxxx wrote:

          Hello Oli,
          you are right, thanks..... But if don't commit after addpoint, my new point are not displayed in editor and i need it.
          any sugestion ?
          thanks in advance
          franz

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

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

            On 30/04/2009 at 07:22, xxxxxxxx wrote:

            The topic "Visualize Ngons" could helps you. There is the problem discribed which i had with this stuff and how it was solved.
            I think it's not the same, but a similar problem.

            cheers,

            Oli

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

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

              On 03/05/2009 at 09:48, xxxxxxxx wrote:

              Hello all, 
              any help for me ?
              curently i am tring to draw point by point my polygon but i can't view and snap drawed point i already done in my draw loop.
              i need to create somthing like create polygon tool in Cinema, where all point are availabe for snapping before each click in the editor.
              i meaby work without modeling lib ?

              thanks
              Franz

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

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

                On 04/05/2009 at 02:36, xxxxxxxx wrote:

                You have to pass the MODELING_COMMIT_UPDATE flag to Commit(). Also make sure to call Init() outside of your loop.

                Here is a little example tool drawing points:

                > \> Bool LiquidToolData::MouseInput(BaseDocument \*doc, BaseContainer &data;, BaseDraw \*bd,EditorWindow \*win, const BaseContainer &msg;) \> { \>      Real mx = msg.GetReal(BFM_INPUT_X); \>      Real my = msg.GetReal(BFM_INPUT_Y); \>      LONG button; \> \>      switch (msg.GetLong(BFM_INPUT_CHANNEL)) \>      { \>           case BFM_INPUT_MOUSELEFT : button=KEY_MLEFT; break; \>           case BFM_INPUT_MOUSERIGHT: button=KEY_MRIGHT; break; \>           default: return TRUE; \>      } \> \>      BaseObject \*obj = NULL; \>      obj = doc->GetActiveObject(); \>      if (!obj || obj->GetType() != Opolygon) return TRUE; \> \>      AutoAlloc<Modeling> mod; \>      if (!mod || !mod->InitObject(obj)) return FALSE; \> \>      Real dx,dy; \> \>      BaseContainer device; \>      win->MouseDragStart(button,mx,my,MOUSEDRAG_DONTHIDEMOUSE|MOUSEDRAG_NOMOVE); \>      while (win->MouseDrag(&dx;,&dy;,&device;)==MOUSEDRAG_CONTINUE) \>      { \>           if (dx==0.0 && dy==0.0) continue; \> \>           mx+=dx; \>           my+=dy; \> \>           Vector ray = !(bd->SW(Vector(mx,my,500.0)) - bd->GetMg().off); // calculate the camera ray \> \>           Real alpha = VectorAngle(ray,Vector(0,-1,0)); // calculate angle between camera ray and the normal of the y-plane \>           Real camlevel = bd->GetMg().off.y; // y-position of the camera \>           Real camdist = camlevel/Cos(alpha); // calculate the distance from the camera to be on the y-plane \> \>           Matrix m = HPBToMatrix(VectorToHPB(ray),ROT_HPB); // create a global matrix for the camera ray \>           m.off = bd->GetMg().off; \> \>           Vector pos = m\*Vector(0,0,camdist); // bring position into global space \> \>           if (mod->AddPoint(obj, pos) == 0) \>           { \>                GePrint("modeling error"); \>                return FALSE; \>           } \> \>           if (!mod->Commit(obj, MODELING_COMMIT_UPDATE, NULL)) \>           { \>                GePrint("commit error"); \>                return FALSE; \>           } \> \>           DrawViews(DA_ONLY_ACTIVE_VIEW|DA_NO_THREAD|DA_NO_ANIMATION); \>      } \>      EventAdd(); \> \>      return TRUE; \> } \>

                cheers,
                Matthias

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

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

                  On 05/05/2009 at 00:44, xxxxxxxx wrote:

                  Hello Matthias,
                  Thanks for reply is useful for my job, and sorry for my late reply.
                  Best
                  Franz

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