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

    Loading files and NET Server/Client!

    Scheduled Pinned Locked Moved SDK Help
    6 Posts 0 Posters 511 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 23/11/2010 at 15:16, xxxxxxxx wrote:

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

      ---------
      This is truly a problematic situation.  My soon-to-be-released plugin loads a set of C4D document files at startup which contain stock objects used by the generator plugin.  But when running NET Server or Client, the plugin fails specifically in loading these documents which causes Server or Client to fail and not start.

      ETA: These files are local and in the plugin's 'res' folder.  So it shouldn't be an issue with the network.  I also note that the documents seem to load (LoadDocument) but that removing the objects and appending them to an allocated AtomArray for memory storage is where the failure occurs.  Why that is is a mystery.  Maybe cloning the object would help?  There are no problems doing this with Cinema 4D,  just Net Server and Net Client.

      How am I supposed to circumvent this problem in order that the plugin can be used with Server/Client?

      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 24/11/2010 at 13:03, xxxxxxxx wrote:

        Any information on this?  I really can't sit here for two weeks with virtually no income while everyone eats turkey.

        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 24/11/2010 at 13:58, xxxxxxxx wrote:

          main.cpp

          Bool PluginStart()  
          {  
            ...  
            // Greebler Demo or Registered  
            if (kdzSerial)                                            greebler =    RegisterGreebler(network, kdzSerial->mode, kdzSerial->time);  
            // Cinema 4D Demo  
            else                                                    greebler =    RegisterGreebler(network, 3, 2147483647L);  
            ...  
            return TRUE;  
          }
          

          Greebler.cpp

          // *** ****  
          // Global Registrant Method for Greebler Command plugin  
          //*---------------------------------------------------------------------------*  
          Greebler* RegisterGreebler(const Bool& network, const UCHAR& mode, const LONG& time)  
          //*---------------------------------------------------------------------------*  
          {  
            Greebler*    gree =    gNew Greebler();  
            if (!gree)            return NULL;  
          #ifdef    C4D_R12  
            if (RegisterCommandPlugin(ID_GREEBLER, String("Greebler Library Manager"), 0L, AutoBitmap("greebler.tif"), String("Greebler Library Manager"), gree))  
            {  
                if (gree->Init(network, mode, time))    return gree;  
            }  
          #else  
            if (RegisterCommandPlugin(ID_GREEBLER, String("Greebler Library Manager"), 0L, String("greebler.tif"), String("Greebler Library Manager"), gree))  
            {  
                if (gree->Init(network, mode, time))    return gree;  
            }  
          #endif  
            return NULL;  
          }  
            
          // Greebler.Init  
          // - Initialize arrays, stock objects, and custom objects  
          //*---------------------------------------------------------------------------*  
          Bool Greebler::Init(const Bool& t_network, const UCHAR& t_mode, const LONG& t_time)  
          //*---------------------------------------------------------------------------*  
          {  
            network =                                    t_network;  
            mode =                                        t_mode;  
            time =                                        t_time;  
            
            // Get Library folder from C4D Prefs container  
            if (!GetDataFolder())                        return ErrPrt("Greebler.Greebler.Init.GetDataFolder() failed!");  
            
            // Allocate Copy Array  
            copy_array =                                AtomArray::Alloc();  
            if (!copy_array)                            return ErrPrt("Greebler.Greebler.Init.copy_array failed!");  
            
            // Allocate Stock Shape Array  
            array_stock =                                AtomArray::Alloc();  
            if (!array_stock)                            return ErrPrt("Greebler.Greebler.Init.array_stock failed!");  
            
            // Load Shape objects into Arrays (memory)  
            if (network)                                return TRUE;  
            if (!LoadStockLibrary())                    return FALSE;  
            
            // Return if NET Client or Server  
            if (network)                                return TRUE;  
            
            // Create Custom Shape and Nurnie Libraries  
            Filename    fn =                            Filename(datafolder)+Filename(GeLoadString(GRES_LIB_CUSTOMSHAPES));  
            if (!library_shape.Init(fn, "ggicon"))        return FALSE;  
            fn =                                        Filename(datafolder)+Filename(GeLoadString(GRES_LIB_CUSTOMNURNIES));  
            if (!library_nurnie.Init(fn, "gnicon"))        return FALSE;  
            if (!LoadShapeLibrary())                    return FALSE;  
            if (!LoadNurnieLibrary())                    return FALSE;  
            
            return TRUE;  
          }  
            
          // Greebler.LoadStockLibrary  
          //*---------------------------------------------------------------------------*  
          Bool Greebler::LoadStockLibrary()  
          //*---------------------------------------------------------------------------*  
          {  
            // Get .c4d files in this folder  
            Filename        path =                        GeGetPluginPath()+Filename("res")+Filename("StockShapes");  
            if (!LoadItem(path, "Cube.c4d"))            return FALSE;  
            if (!LoadItem(path, "T.c4d"))                return FALSE;  
            if (!LoadItem(path, "L.c4d"))                return FALSE;  
            if (!LoadItem(path, "C.c4d"))                return FALSE;  
            if (!LoadItem(path, "H.c4d"))                return FALSE;  
            if (!LoadItem(path, "D.c4d"))                return FALSE;  
            if (!LoadItem(path, "Box.c4d"))                return FALSE;  
            if (!LoadItem(path, "CubeCC.c4d"))            return FALSE;  
            if (!LoadItem(path, "OblongOctagon.c4d"))    return FALSE;  
            return TRUE;  
          }  
          // Greebler.LoadItem  
          //*---------------------------------------------------------------------------*  
          Bool Greebler::LoadItem(const Filename& path, const Filename& file)  
          //*---------------------------------------------------------------------------*  
          {  
            // Insert Stock Library Object(s)  
            BaseDocument*    doc =    LoadDocument(path+file, SCENEFILTER_OBJECTS, NULL);  
            if (!doc)  
            {  
                MessageDialog("Greebler.Greebler.LoadItem("+file.GetString()+") failed!");  
                return ErrPrt("Greebler.Greebler.LoadItem("+file.GetString()+") failed!");  
            }  
            BaseObject*        op =    doc->GetFirstObject();  
            if (!op)  
            {  
                KillDocument(doc);  
                MessageDialog("Greebler.Greebler.LoadItem("+file.GetString()+").op failed!");  
                return ErrPrt("Greebler.Greebler.LoadItem("+file.GetString()+").op failed!");  
            }  
            BaseObject*        cop =    static_cast<BaseObject*>(op->GetClone(COPYFLAGS_0, NULL));  
            if (!cop)  
            {  
                KillDocument(doc);  
                MessageDialog("Greebler.Greebler.LoadItem("+file.GetString()+").cop failed!");  
                return ErrPrt("Greebler.Greebler.LoadItem("+file.GetString()+").cop failed!");  
            }  
            //op->Remove();  
            if (!array_stock->Append(cop))  
            {  
                KillDocument(doc);  
                MessageDialog("Greebler.Greebler.LoadItem("+file.GetString()+").array_stock.Append() failed!");  
                return ErrPrt("Greebler.Greebler.LoadItem("+file.GetString()+").array_stock.Append() failed!");  
            }  
            KillDocument(doc);  
            return TRUE;  
          }
          

          Note that the failure occurs in LoadItem(), but, despite checking every possible error, none of the MessageDialog()s is displayed.

          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 26/11/2010 at 12:41, xxxxxxxx wrote:

            Bump...

            Anything at all?  There is not a single mention of NET Client/Server in the SDK documentation that would help guide me here.  And nothing here at PluginCafe (as far as searches have revealed).

            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 27/11/2010 at 02:10, xxxxxxxx wrote:

              I'm probably going to make myself look a total idiot here, so be gentle...

              Looking at your third post, you say that none of the error messages are displayed. In that case, either the call to LoadItem is successful, which it clearly isn't, or it's never called. Since it is called by LoadStockLibrary, if LoadItem is never called, LoadStockLibrary isn't being called either.

              Looking in Greebler::Init, you have these lines:

                
                  // Load Shape objects into Arrays (memory)   
                  if (network)                                return TRUE;   
                  if (!LoadStockLibrary())                    return FALSE;   
                
                  // Return if NET Client or Server   
                  if (network)                                return TRUE;   
              

              How I read this is that if you're in NET Client or Server, Init returns before it ever calls LoadStockLibrary.

              Is that any use or have I completely misread the code (most likely!)?

              Steve

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

                I put that line above "if (!LoadStockLibrary())" to see if the Client crash stopped (which it did).  I also tried loading the objects in the object plugin part of the plugin to see if that helped (thus the early abort here) but no.  LoadStockLibrary() and LoadItem() are being called otherwise (and crashing the Client).  It is always bailing on array_stock->Append(op) (or cop).  array_stock has been allocated and checked (early in the code posted).  But, the message dialog never shows for an error.  The Client must be bailing rather hastily for that to happen.

                I'm currently internalizing the objects (all 36 **** of them!!!) which is a friggin' hassle.  There are 9 sets of 4 objects each with Polygon and Point selection tags.  This is what I want to do: spend all of my days off of work typing in endless numbers and hoping that there are no mistakes in all of that coding. 😞

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