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

    Instances dropped on Document::Polygonize

    SDK Help
    0
    6
    554
    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 26/07/2007 at 03:12, xxxxxxxx wrote:

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

      ---------
      Hello, I am working on an exporter for C4D.

      I need to export instances, since our format is intended for real-time purposes, I let C4D polygonize object through the use of BaseDocument::Polygonize().

      The problem, is that Oinstances seems to be dropped by this function.
      Is there any way to recover Instances, or to do a stable match of the hiearchy between the original document, and the polygonized one ?

      Thanks 🙂

      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/07/2007 at 05:55, xxxxxxxx wrote:

        Maybe it's better to get your polygon objects on a per object basis. You can do this with GetDeformCache() and GetCache(). Here is a helper function to get the deformed polygon object of a selected object (it's from the upcoming SDK docu update).

          
        static void DoRecursion(BaseObject *op)  
        {  
             BaseObject *tp = op->GetDeformCache();  
             if (tp)  
             {  
                  DoRecursion(tp);  
             }  
             else  
             {  
                  tp = op->GetCache(NULL);  
                  if (tp)  
                  {  
                       DoRecursion(tp);  
                  }  
                  else  
                  {  
                       if (!op->GetBit(BIT_CONTROLOBJECT))  
                       {  
                            if (op->IsInstanceOf(Opolygon))  
                            {  
                                 // --------------------------  
                                 // HERE IS THE DEFORMED POLYGON OBJECT  
                                 // --------------------------  
                            }  
                       }  
                  }  
             }  
             for (tp = op->GetDown(); tp; tp=tp->GetNext())  
             {  
                  DoRecursion(tp);  
             }  
        }  
        

        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 26/07/2007 at 06:00, xxxxxxxx wrote:

          Ok !!! I will try this immediately

          Thanks 🙂

          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/07/2007 at 02:24, xxxxxxxx wrote:

            Arghhh, hell is in details 😄

            It seems that the texture tag is "lost" when processing a the last "op" level.

            One of the situation where the problem arises:
            - Make a landscape
            - Texture it basically (UVW mapping)
            - So that the object has only: a Texture Tag, and a Phong Tag

            When processing, the Texture Tag has gone (but it seems i have the UVW Tag).

            When using Polygonize(), i used to got everybody (TextureTag, UVWTag, PhongTag).

            I suppose that the TextureTag is on the previous recusion, i will dig onto this.

            But i will take any hints 🙂

            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/07/2007 at 02:27, xxxxxxxx wrote:

              BTW, i moved processing of sub objects to just after the polyobject generation.
              (i have a general hiearchy tracking outside of the equivalent of this recursive routine)

              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 07/08/2007 at 08:40, xxxxxxxx wrote:

                arghh, I hit another wall, so I have ended with a temporary solution involving just this (taken from Document::Polygonize() routine) :

                  
                BaseObject *PolygonizeBaseObject( BaseObject *Src )  
                {  
                BaseContainer Ctr;  
                       
                ModelingCommandData CData;  
                CData.doc = Src->GetDocument();  
                CData.bc = &Ctr;       
                  
                Ctr.SetBool(MDATA_CURRENTSTATETOOBJECT_KEEPANIMATION,TRUE);  
                  
                CData.op = Src;   
                  
                if( !SendModelingCommand( MCOMMAND_CURRENTSTATETOOBJECT, CData ) || !CData.result )  
                return NULL;       
                  
                BaseObject *CollapsedObject = (BaseObject* )CData.result->GetIndex(0);  
                  
                AtomArray::Free( CData.result );  
                  
                return CollapsedObject;  
                }  
                

                So I just collapse a hierarchy branch with this call:

                  
                AutoFree<BaseObject> PolyObject = PolygonizeBaseObject( Object );  
                  
                if( PolyObject )  
                    MyObjectProcessor( PolyObject.... );       
                

                I just wanted to know if the sequence above would disrupt or leak C4D ressources.

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