Maxon Developers Maxon Developers
    • Documentation
      • Cinema 4D Python API
      • Cinema 4D C++ API
      • Cineware 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

    Basic Objects

    SDK Help
    0
    41
    28.9k
    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

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

      On 16/05/2008 at 03:36, xxxxxxxx wrote:

      I recently tried the following code, with three methods of object generation. Everyone crashes at the static_cast, no matter to what type the result is casted...

      > BaseObject \*CLODDY4D::GetVirtualObjects(BaseObject \*op, HierarchyHelp \*hh){ \> \>      BaseContainer bc; \>      ModelingCommandData mcd; \>      bc.SetReal(PRIM_SPHERE_RAD,100.0); \>      bc.SetLong(PRIM_SPHERE_SUB,4); \> \>      //BaseObject \*sphere = GeneratePrimitive(NULL,Osphere,bc,1.0,FALSE,hh->GetThread()); \>      //BaseObject \*sphere = BaseObject::Alloc(Osphere); \>      AutoAlloc<BaseObject>sphere(Osphere); \>      if(!sphere) return NULL; \>       \>      mcd.doc = GetActiveDocument(); \>      mcd.bc = &bc; \>      mcd.flags = 0L; \>      mcd.op = sphere; \>      if(!SendModelingCommand(MCOMMAND_CURRENTSTATETOOBJECT, mcd)) return NULL; \>      PolygonObject\* poly = static_cast<PolygonObject\*>(mcd.result->GetIndex(0L)); \>      //if(mcd.result->GetIndex(0L)->GetType()!=Opolygon) return NULL; \>      if(!poly) return NULL; \>      return poly; \> }

      Perhaps I am really running into a dead end, with my vision of the need of a polygonal object (I am much more a c4d user 😉 ) to access its points and polygons.
      At the end, all I need is access to the point array of my octa to perfom cutting operations on the edges by mid-point and merging vertex points.

      Cheers
      Sascha

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

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

        On 20/05/2008 at 03:45, xxxxxxxx wrote:

        Hello again,

        I just can't get rid of this converting. I cannot get it run properly when using code like this:

        > \> static PolygonObject \*PolyObject(BaseObject \*sphere) \> { \>      PolygonObject \*polyOb = NULL; \>      ModelingCommandData mcd; \>      mcd.doc = GetActiveDocument(); \>      mcd.bc = sphere->GetDataInstance(); \>      mcd.op = sphere; \>      if(!SendModelingCommand(MCOMMAND_CURRENTSTATETOOBJECT,mcd)) return NULL; \>      polyOb = static_cast<PolygonObject\*>(mcd.result->GetIndex(0)); \>      if(polyOb->GetType()!=Opolygon) return NULL; \>       \>      return polyOb; \> } \> \> PolygonObject \*CLODDY4D::GetVirtualObjects(PluginObject \*op, HierarchyHelp \*hh) \> { \>      BaseObject \*sphere = BaseObject::Alloc(Osphere); \>      if(!sphere) return NULL; \> \>      BaseContainer \*bc = sphere->GetDataInstance(); \>      bc->SetReal(PRIM_SPHERE_RAD,100); \>      bc->SetLong(PRIM_SPHERE_SUB,4); \>       \>      return PolyObject(sphere); \> } \>

        The debugger stops at polyOb = static_cast<..>;
        If modelingcommand fails, it should return NULL, so there should be some result, but this cast does not work as it should! (According to documentation). I am running out of clues and time...

        *sigh*
        Sascha

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

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

          On 20/05/2008 at 05:22, xxxxxxxx wrote:

          You can not use GetActiveDocument() in this case. Here some working code.

          > \> static PolygonObject \*PolyObject(BaseDocument \*doc, BaseObject \*sphere) \> { \>      PolygonObject \*polyOb = NULL; \>      ModelingCommandData mcd; \>       mcd.doc = doc; \>      mcd.op = sphere; \>      if(!SendModelingCommand(MCOMMAND_CURRENTSTATETOOBJECT, mcd)) return NULL; \>      polyOb = static_cast<PolygonObject\*>(mcd.result->GetIndex(0)); \>      if(polyOb->GetType()!=Opolygon) return NULL; \>       \>      return polyOb; \> } \> \> // main routine: build virtual atom objects \> BaseObject \*AtomObject::GetVirtualObjects(PluginObject \*op, HierarchyHelp \*hh) \> { \>      BaseObject \*sphere = NULL; \>      sphere = BaseObject::Alloc(Osphere); \>      if(!sphere) goto Error; \> \>      BaseContainer \*bc = sphere->GetDataInstance(); \>      bc->SetReal(PRIM_SPHERE_RAD,100); \>      bc->SetLong(PRIM_SPHERE_SUB,4); \> \>      PolygonObject \*polysphere = NULL; \>      polysphere = PolyObject(op->GetDocument(), sphere); \> \>      if(sphere) \>      { \>           BaseObject::Free(sphere); \>           sphere = NULL; \>      } \> \>      return polysphere; \> \> Error: \>      blDelete(sphere); \>      return NULL; \> } \>

          cheers,
          Matthias

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

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

            On 20/05/2008 at 07:45, xxxxxxxx wrote:

            Hello Matthias,

            thanks for this clearing.
            I had no idea, that GetDocument(); retrieves the current opened document. Thought it was GetActiveDocument();... Think thats for more than one open doc's ?!

            Right now the function call "polysphere=polyObject(op->GetDocument(),sphere)" causes this exception:

            > \> Unhandled exception at 0x00bbc1ea in CINEMA 4D Demo.exe: 0xC0000005: Access violation reading location 0x00000000

            I have no experience with this type of exception, what went wrong ?!

            P.s.: I am developing under demo of r10.5, cause it starts up much faster than my full installation with lots of Plug-Ins installed...

            Edit:
            It seems the document is not retrived correctly...
            I set up an ::Init()-Function, i hope that is correct for an ObjectData-Plugin... :

            > \> Bool CLODDY4D::Init(GeListNode \*node) \> { \>      BaseObject \*op = (BaseObject\* )node; \>      BaseContainer \*data = op->GetDataInstance(); \>      return TRUE; \> } \>

            So op has to be "anything", where document can be retrieved from.

            Wave
            Sascha op

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

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

              On 26/05/2008 at 03:43, xxxxxxxx wrote:

              Nobody an idea ? *sigh*

              Cheers

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

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

                On 27/05/2008 at 00:57, xxxxxxxx wrote:

                Does it work if you change the call to PolyObject() to something like this (use hh instead of op) :

                polysphere = PolyObject(hh->GetDocument(), sphere);

                Either way I don't get this exception here.

                cheers,
                Matthias

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

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

                  On 27/05/2008 at 02:04, xxxxxxxx wrote:

                  Hi

                  Yes, I already changed it to hh->GetDocument(); earlier, getting the same result.

                  If I use BaseDocument *doc = op->GetDocument() or hh->GetDocument(); as very first statement (which is equivalent to the direct call) cinema4D crashes directly there.

                  Hmm, what could cause this exception ? IDE ? IDE-config ? Operating System ? I am running VS C++ 2008 EE on Vista x64. Perhaps this does not work with the express edition ?

                  Cheers
                  Sascha

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

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

                    On 27/05/2008 at 03:32, xxxxxxxx wrote:

                    Hey ahm right now, I revisited the documentation. It seems I have missed setting up /vmg /vms.

                    Thanks so far, now everything works and i can start manipulating vertexpoints and polygons 🙂

                    Just for safeness:
                    Shouln't be the sphere set NULL at first before freeing it ? Setting it NULL first before freeing it does not result a crash at
                    c4d_baseObject.cpp, line 841
                    void BaseObject::Free(BaseObject *&bl;)
                    {
                         C4DOS.Bl->Free(bl);
                         bl=NULL;
                    }

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

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

                      On 27/05/2008 at 03:53, xxxxxxxx wrote:

                      No, how should Cnema know what to free if the pointer is set to NULL.

                      cheers,
                      Matthias

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

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

                        On 27/05/2008 at 04:06, xxxxxxxx wrote:

                        Yes, thats a good point. In that case (setting BaseObject::Free(sphere) first) my plugin breaks, because
                        bl from BaseObject::Free(BaseObject *&bl;) has the value "0" while sphere has 0x04f306dc... This is strange.

                        Cheers
                        Sascha

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