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

    BaseLink array & Read/Write/CopyTo

    Scheduled Pinned Locked Moved SDK Help
    6 Posts 0 Posters 547 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 08/12/2006 at 14:53, xxxxxxxx wrote:

      User Information:
      Cinema 4D Version:   8.2-10.0 
      Platform:   Windows  ; Mac  ;  Mac OSX  ; 
      Language(s) :     C++  ;

      ---------
      Samir, I saw a post from last year where you were working on something similar to this but not too much detail on the process was divulged. First, realize that I'm supporting back to R8.2 which means that MSG_DOCUMENTINFO is moot. MSG_MULTI_DOCUMENTIMPORTED is valid though.

      I take it that you use Write to write the BaseLinks to Hyperfile. But then you don't use Read to read them in, correct (?). Can you show code on how you did this?

      I'm trying to remove recursive calls from GetDDescription() so that a bone hierarchy can be stored once with an array of BaseLinks in a plugin tag and that array used instead to avoid recursion (in many, many places). The goal is to reduce the lag caused by all of this recursion (esp. places like GetDDescription() which is called continuously).

      Simple enough to there, but the Read/Write/CopyTo for this BaseLink array is where I want to be certain.

      Thank you very much,

      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 09/12/2006 at 09:56, xxxxxxxx wrote:

        Hi Kuro,

        can you show me the old post? I don´t remember actually and as I had a hardware crash this year, it may be very possible that I don´t have the code anymore.

        Let me know and I´ll try to help you as much as possible.

        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 09/12/2006 at 14:04, xxxxxxxx wrote:

          Hello,

          Click here

          🙂

          Any help that you can offer is much appreciated. Still not sure how you Read the BaseLink and then resolve the link - don't get it.

          Thanks,

          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 10/12/2006 at 06:01, xxxxxxxx wrote:

            hey Kuro,

            thanks and now I also know where I used this. But I have bad news for you.
            Due to the non-existance of the objects during the Read function, I handled the loading and saving in the message function using MSG_DOCUMENTINFO, which you apparently cannot use due to the version limitation?! But that´s the only way I found out about as I simply couldn´t use the Read method. 😞

            Here is some code directly out of MountMonkey, maybe it helps or inspires. I stored the baselinks in the container bf and am using that one then to read out the baselinks.

            DocumentInfoData* did = (DocumentInfoData* )data;  
            switch(did->type)  
            {  
            case MSG_DOCUMENTINFO_TYPE_LOAD:  
            case MSG_DOCUMENTINFO_TYPE_MERGE:  
            {  
            BaseContainer bf = vdata->GetContainer(MONKEYCONTAINER);  
            LONG start = 1000;  
                                  
            NodeMaster* m = dlg.GetMaster();  
            m->SetPreviewSize(256);  
              
            //Rebuild the tag stuff...  
            NodeGroup* scene=     m->GetFirstNodeGroup(); if(!scene) return FALSE;  
            NodeArray<NodeCore*> *nodes     = scene->GetNodes(); if(!nodes) return FALSE;  
            [..]  
            BaseTag* link = (BaseTag* )bf.GetBaseLink(start++)->GetLink(did->doc);  
            [...]  
            }  
            break;  
            case MSG_DOCUMENTINFO_TYPE_SAVE_BEFORE:  
            case MSG_DOCUMENTINFO_TYPE_SAVEPROJECT_BEFORE:  
            {  
            BaseContainer bf;  
            LONG start = 1000;  
                                  
            NodeMaster* m = dlg.GetMaster();  
            NodeGroup* scene     =     m->GetFirstNodeGroup(); if(!scene) return FALSE;  
            [..]  
            bf.SetLink(start++,node->GetTag());  
            [...]
            

            Hope that helps
            Samir

            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 10/12/2006 at 07:52, xxxxxxxx wrote:

              Ah, so MSG_MULTI_DOCUMENTIMPORTED might work one way (for reads) but this isn't called, of course, when the document is saved (writes).

              I do compile different versions (8.2, 8.5, 9.1, 10.0) mainly because I'd rather not stick, say, 10.0 users with the limitations of 8.2 - that'd be horrible. The plugin is just designed to work with 8.2 as minimum and takes advantage of later features by including/excluding the code (with directives).

              I'll look at your code and some other ideas. Need to see what messages might be sent when both loading and saving back in 8.2.

              Thank you very much,

              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 13/12/2006 at 15:03, xxxxxxxx wrote:

                I see that my BaseObject BaseLink list on the sub-BaseContainer is also returning NULL links when reloading a saved document. Probably because the tag is on the root object and the BaseLinks on it are to BaseObjects underneath.

                I must ask this question. Is there any purpose to saving these BaseLinks to a document if they must be reinstated on every load? Seems best to just recurse the figure's bones on each document load, basically redoing the BaseLinks list.

                Don't have a reason why my master-slave BaseLink lists (to tags only) seem to be rather solid. Is this something to do with where tag 'nodes' are stored in the C4D document as compared to object 'nodes'?

                For the sake of argument, I'm also going to check all of the master-slave links on document load. If any show up as NULL, it will require a reinstatement there as well.

                Welcome to more work. 🙂

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