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

    Getting/Setting with GeDialog

    Scheduled Pinned Locked Moved SDK Help
    9 Posts 0 Posters 776 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 25/04/2011 at 11:19, xxxxxxxx wrote:

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

      ---------
      Hi,

      I'm having a problem with the get method in C++  and the GeDialog class.
      Most people are using the .res way of creating dialogs. So I'm having a hard time learning how to use the AddGizmo type of dialogs wit C++.

      Here's my code:

      This works fine

        
      Bool myDialog::CreateLayout(void)  
      {  
      AddSlider(MySlider, BFH_SCALEFIT);  
      return TRUE;  
      }
      

      This works fine

        
      Bool myDialog::InitValues(void)  
      {  
      SetReal(MySlider, 0.0,1,1e3,1.0);  
      return TRUE;  
      }
      

      This Is where I'm stuck --I don't know how to get the values from my gizmo's

      Bool myDialog::Command(LONG id,const BaseContainer  &msg)  
      {  
      Real slidervalue = GetReal(MySlider); // <---This is wrong  
      GePrint(RealToString(slidervalue));  
      return TRUE;  
      }
      

      Can anyone show me the proper way to get the values from of a gizmo?

      -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 25/04/2011 at 11:53, xxxxxxxx wrote:

        hello you have to filter by id valus passed by commad ....

        switch (id)
        {
        case YourSliderID:
        Real value;
        GetReal(YourSliderID,value);
        break;
        }

        Franz

        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 25/04/2011 at 15:02, xxxxxxxx wrote:

          Ah ha!

          So that's what they meant by: GetReal(MyID, value); in the SDK.
          I didn't understand what they were trying to say. I thought they were telling me to put the actual value in there.  And that made no sense to me, because If I knew the value, I wouldn't be using the Getter in the first place. Confused

          The way you wrote it. I can now see clearly that what they meant was to create and use an empty variable to hold the value that the getter finds.

          Thanks!👍
          -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 26/04/2011 at 06:42, xxxxxxxx wrote:

            You can tell that "value" is used to pass a value back to you, because it's a reference (recognizable from the "&").

            Bool GetReal(const GadgetPtr& id, Real& value) const
            

            Otherwise, it would either not be a reference, or it would be const Real & value.

            Cheers,
            Jack

            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/04/2011 at 08:29, xxxxxxxx wrote:

              Thanks Jack.

              I understand how pointers and references work in theory ( they access the memory address of the variables. And they can be use to get around scope limitations).
              But when using them in practice with the C4d SDK I'm still rather lost about them most of the time.

              For example.
              Right now I'm trying to convert my Coffee code that moves an object by all of it's points. Because that way I can rotate it and it will always move where it's being pointed.

               **Working Coffee code**  
              main(doc,op)  
              {  
              var mtx= op->GetMl();//get object's local matrix  
              var move = mtx->GetMulP(vector(0,0,2));//move object by 2 in Z axis  
              a->SetV0(move);//grab the object and execute the move  
              op->SetMl(mtx);//  
              EventAdd();// runs even if timeline is stopped  
              }  
                
               **C++ version with pointer errors**  
              Matrix mtx = op->GetMl();//<--No errors      
              Vector move = mtx->GetMulP(Vector(0,0,2)); <--- mtx Error: expression must have a pointer type  
              mtx->SetV0(move); // <--- mtx Error: expression must have a pointer type  
              op->SetMl(mtx);  //<--- No errors
              

              I'm stuck because I really don't understand how to use pointers properly related to the C4D SDK.
              The pointer tutorials on the net all talk about the abstract theory(which I think I understand) of pointers.
              But what I really need is an explanation of how they work specifically for the C4D SDK code.
              Not the abstract explanations I see on the net.

              -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 26/04/2011 at 10:58, xxxxxxxx wrote:

                mtx isn't a pointer but an instance.  Use '.' instead of '->':

                 **C++ version with pointer errors**  
                 Matrix mtx = op->GetMl();//<--No errors      
                Vector move = mtx.GetMulP(Vector(0,0,2)); <--- mtx No Errors  
                mtx.SetV0(move); // <--- mtx No Errors  
                op->SetMl(mtx);  //<--- No errors
                
                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/04/2011 at 12:05, xxxxxxxx wrote:

                  Thanks Robert,

                  It seems that GetMulP is a Coffee only function. And handling matrices is done differently with Python and C++.

                  I don't think I'll be able to figure out how to do things like multiplying a matrix and moving object points in global and local space from what's in the C++ SDK.
                  I was just starting to get comfortable with matrix manipulation in Coffee. Then the game changed on me and Python & C++ became the preferred languages to use in C4D.
                  Now I've got to start all over again from scratch.

                  -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 26/04/2011 at 12:12, xxxxxxxx wrote:

                    Vector move = Vector(0.0,0.0,2.0) * mtx;
                    mtx.off = move;

                    C4D uses pre-multiplication for matrices so you'll want operations to be done right to left (to do an ScaleRotateTranslate operation, for instance) :

                    Matrix xform = MatrixMove() * MatrixRot() * MatrixScale();

                    As you see there are 'operators' set up for matrix math such as multiplication of matrices or matrix to vector.  '!' inverts a matrix:

                    Matrix m;
                    Matrix inverse = !m;

                    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/04/2011 at 12:35, xxxxxxxx wrote:

                      Oh cool!

                      Thanks a lot for taking the time to explain that to me Robert. Got it working now.
                      I'm sure I'll probably still get stuck from time to time with converting my other examples. But at least you've got me started in the right direction.

                      Thanks 👍
                      -ScottA

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