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

    Get BaseObject from Linkbox

    Scheduled Pinned Locked Moved SDK Help
    5 Posts 0 Posters 392 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 09/02/2012 at 06:56, xxxxxxxx wrote:

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

      ---------
      I'm trying to get BaseObject(s) from Linkbox of plugin.

      Using ResEdit plugin I've made a dialog which has two linkboxes so that I can drag two different objects into them to make a plugin that enables to swap their positions.

      For example,

      ID of each linkbox : IDC_OBJECT1, IDC_OBJECT2

      Members: 
           BaseObject* op1, op2;
           LinkBoxGui* linkbox1;
           LinkBoxGui* linkbox2;

      I tried as following:
           linkbox1 = (LinkBoxGui* )FindCustomGui(IDC_OBJECT1, CUSTOMGUI_LINKBOX);

      However I don't know how to get the BaseObject from linkbox.
          op1 = ....?

      Or is there another way to do this?

      Thank you in advance. 🙂

      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/02/2012 at 08:15, xxxxxxxx wrote:

        Hi,

        You can call LinkBoxGui::GetLink() and cast the returned object to a BaseObject:

        BaseObject* op = (BaseObject* )linkbox->GetLink(GetActiveDocument(), Xlayer);
        

        This line is from the LayerShaderBrowser example.

        Regards,

        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/02/2012 at 18:04, xxxxxxxx wrote:

          Yannick Puech,  thank you for your answer.

          I tried as you guided, but I have still problems.

          In my opinion, the problems is caused by the second parameter of GetLink function, Xlayer,  corresponds only for shader instances.

          C++ HTML documentation reads:

          BaseList2D[URL-REMOVED]* GetLink(const BaseDocument[URL-REMOVED]* doc, LONG instance)_<_h4_>_

          However, I don't know what I have to put the second parameter, LONG instance, to get the BaseObject instance.

          My dialogbox, header files and cpp file look like this:

          Dialogbox: http://blog.naver.com/gchoi_acts/130130991792

          //==================================
          // c4d_symbols.h
          //==================================
          enum
          {
            // Dialog definitions of IDD_SWAP_POSITION start here
            IDD_SWAP_POSITION, // ID of the Dialog Box
            IDC_OBJECT1, // ID of the first linkbox
            IDC_OBJECT2, // ID of the second linkbox
            // Dialog definitions of IDD_SWAP_POSITION end here

          // End of symbol definition
            _DUMMY_ELEMENT_
          };

          //==================================
          // SwapPosition.h
          //==================================
          #include "c4d_gui.h"
          class SwapPosition : public GeDialog
          {
          public:
          SwapPosition ();
          virtual ~SwapPosition ();

          virtual Bool CreateLayout(void);
          virtual Bool InitValues(void);
          virtual Bool Command(LONG id, const BaseContainer &msg);
          virtual LONG Message(const BaseContainer& msg, BaseContainer& result);
          
          
          void UpdateAll(Bool msg);
          
          
          void \*lastselected;
          

          private:
          LONG lastdirty;
          BaseDocument* doc;
          BaseObject* op1, op2;
          LinkBoxGui* linkbox1, linkbox2;
          };

          //==================================
          // SwapPosition.cpp
          //==================================
          #include "c4d.h"
          #include "c4d_symbols.h"
          #include "SwapPosition.h"
          ...
          Bool SwapPosition ::Command(LONG id, const BaseContainer &msg)
          {
          //## GET USER ENTERED DATA:
          switch (id)
          {
          case IDC_OK:
          linkbox1 = (LinkBoxGui* )FindCustomGui(IDC_OBJECT1, CUSTOMGUI_LINKBOX);
          if(!linkbox1) return FALSE;
          op1 = (BaseObject* )linkbox1->GetLink(GetActiveDocument(), Xlayer);

          	linkbox2 = (LinkBoxGui\* )FindCustomGui(IDC_OBJECT2, CUSTOMGUI_LINKBOX);
          	if(!linkbox2) return FALSE;
          	op2 = (BaseObject\* )linkbox2->GetLink(GetActiveDocument(), Xlayer);
          
          
          	GePrint("Object Name : " + op1->GetName());  // <======= ERROR OCCURRED
          	GePrint("Object Name : " + op2->GetName());  // <======= ERROR OCCURRED
          	break;
          case IDC_CANCEL:
          	break;
          default:
          	break;
          }
          
          
          return TRUE;
          

          }
          ...

          ================================
          Thank you for your answer in adavance.

          Best regards,
          gchoi


          [URL-REMOVED] @maxon: This section contained a non-resolving link which has been removed.

          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/02/2012 at 18:48, xxxxxxxx wrote:

            Try Obase.
            If that works. There are other types listed under: OObjectType
            Just in case you need to use them some day.

            -ScottA

            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/02/2012 at 19:57, xxxxxxxx wrote:

              Thank you for your reply, ScottA.

              I've just solved my problem by omitting the second parameter of the membert  function, GetLink and the code looks like this:

              //===================================================
              // SwapPosition.cpp
              //===================================================

              ...

              Bool SwapPosition ::Command(LONG id, const BaseContainer &msg)
              {
              //## GET USER ENTERED DATA:
              switch (id)
              {
              case IDC_OK:
              linkbox1 = (LinkBoxGui* )FindCustomGui(IDC_OBJECT1, CUSTOMGUI_LINKBOX);
              if(!linkbox1) return FALSE;
              op1 = (BaseObject* )linkbox1->GetLink(GetActiveDocument());
              if(!op1) return FALSE;

              	linkbox2 = (LinkBoxGui\* )FindCustomGui(IDC_OBJECT2, CUSTOMGUI_LINKBOX);
              	if(!linkbox2) return FALSE;
              	op2 = (BaseObject\* )linkbox2->GetLink(GetActiveDocument());
              	if(!op2) return FALSE;
              
              
              	GePrint("Object Name : " + op1->GetName());
              	GePrint("Object Name : " + op2->GetName());
              	break;
              case IDC_CANCEL:
              	break;
              default:
              	break;
              }
              
              
              return TRUE;
              

              }

              ...

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