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

    Accessing MoText Group Parameters

    Scheduled Pinned Locked Moved SDK Help
    11 Posts 0 Posters 967 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 03/11/2011 at 19:45, xxxxxxxx wrote:

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

      ---------
      The Transform parameter IDs under each MoText group (Lines, Words etc) are identical.

      If I want to access e.g. Transform position values under the Lines group, it looks as if I need to use the group ID 'MGTEXTOBJECT_GROUPTRANSFORM_LINE' in conjunction with 'ID_MG_TRANSFORM_POSITION'.

      How do I do this?

      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 05/11/2011 at 14:46, xxxxxxxx wrote:

        Perhaps some more detailed information is needed.

        The Transform tab Scale value for a Cloner can be accessed with:

        BaseContainer *bc = gen->GetDataInstance(); if(!bc) return;             
        Vector scale = bc->GetVector(ID_MG_TRANSFORM_SCALE);   
        GePrint("scale: " + VectorToString(scale));
        

        In a MoText, ID_MG_TRANSFORM_SCALE can't be accessed directly as the same ID is used under four different groups.

        Using the Letters group as an example, omograph_text.res has this:

        GROUP MGTEXTOBJECT_GROUPCHAR
        {
             SCALE_V;
             GROUP
             {
                  COLUMNS 2;
                  SCALE_V;

        IN_EXCLUDE     MGTEXTOBJECT_EFFECTORLIST_CHAR
                  {
                       SCALE_V;
                       SCALE_H;
                       NUM_FLAGS 1;
                       INIT_STATE 1;
                       IMAGE_01_ON 1018640;
                       IMAGE_01_OFF 1018641;
                       ACCEPT
                       {
                            Obaseeffector;
                       }
                  }
                  STATICTEXT { JOINEND; }

        VECTOR     MGTEXTOBJECT_AXIS_CHAR
                  {
                       UNIT     PERCENT;
                       MIN 0.0;
                       MAX 100.0;
                       CUSTOMGUI VECTOR2D;
                  }
                  BOOL     MGTEXTOBJECT_AXIS_CHAR_ALIGN
                  {
                  }
             }
             GROUP MGTEXTOBJECT_GROUPEFFECTOR_CHAR
             {
             }
        }

        MGTEXTOBJECT_GROUPEFFECTOR_CHAR appears to correspond with the Transform parameters. omograph_text.h also lists MGTEXTOBJECT_GROUPTRANSFORM_CHAR. I'm not sure which to use or how many levels are involved.

        I've tried various subcontanier and DescLevel operations to no avail.

        Could someone please provide assistance?

        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 07/11/2011 at 15:00, xxxxxxxx wrote:

          I'd like to bump this because there does seem to be a problem with it.
          The transformation panels inside of the MoText object seem to only be accessible though xpresso.

          C++ example :

            
          #include "..\..\..\modules\mograph\res\description\otransform_panel.h"  
          #include "..\..\..\modules\mograph\res\description\omograph_text.h"  
            
          GeData d;  
          obj->GetParameter(DescID(ID_MG_TRANSFORM_SCALE, VECTOR_X), d, (DTYPE_VECTOR, DESCFLAGS_GET_0)); //Result is always zero  
          obj->SetParameter(DescID(ID_MG_TRANSFORM_SCALE, VECTOR_X), GeData(5.0), DESCFLAGS_SET_0);       //No errors..But no changes are executed 
          

          Coffee Example :

          var obj = doc->GetActiveObject();      //The MoText object is active  
          obj#ID_MG_TRANSFORM_SCALE:VECTOR_X = 1;//Invalid description ID
          

          Python Example :

          import c4d  
          def main() :  
            
            obj = doc.GetActiveObject()                     #The MoText object is active  
            obj[c4d.ID_MG_TRANSFORM_SCALE,c4d.VECTOR_X] = 1 #__setitem__ got unexpected type 'int'     
            c4d.EventAdd()  
            
          if __name__=='__main__':  
            main()
          

          I'm still learning this stuff. So I'm probably wrong about this.
          But It sorta looks like they were never added to the API's?

          -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 08/11/2011 at 01:30, xxxxxxxx wrote:

            Thanks for taking the time to do some testing Scott.

            The problem with using ID_MG_TRANSFORM_SCALE in this way is that the same ID is used for independent parameters under the All, Lines, Words and Letters groups. A higher-level ID from omograph_text.h has to also be used.

            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 08/11/2011 at 07:45, xxxxxxxx wrote:

              Did you figure it out David?
              I did also try using higher ID's in a bunch of different ways. But I still couldn't get it to work.

              example:

              obj->SetParameter(DescID(MGTEXTOBJECT_GROUPLINE, ID_MG_TRANSFORM_SCALE,VECTOR_X), GeData(15.0), DESCFLAGS_SET_0); //Does not work
              

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

                No, unfortunately I don't have a solution Scott.

                Apparently neither do any of the other developers here or Maxon support.

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

                  Sorry for the delay. I asked the developers and will post the solution if there is one.

                  cheers,
                  Matthias

                  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/11/2011 at 14:19, xxxxxxxx wrote:

                    Thanks Matthias. At least I know I'm not missing something obvious.

                    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/11/2011 at 06:38, xxxxxxxx wrote:

                      You need to use the following group offset to obtain the final ID.

                        
                      MGTEXTOBJECT_GROUPTRANSFORM_ALL  
                      MGTEXTOBJECT_GROUPTRANSFORM_LINE  
                      MGTEXTOBJECT_GROUPTRANSFORM_WORD  
                      MGTEXTOBJECT_GROUPTRANSFORM_CHAR  
                      

                      Simply add transform ID and group offset ID for the final ID.

                      Example:

                        
                      GeData d;  
                      if (op->GetParameter(DescLevel(ID_MG_TRANSFORM_POSITION + MGTEXTOBJECT_GROUPTRANSFORM_LINE),d,DESCFLAGS_GET_0))  
                      {  
                        GePrint(RealToString(d.GetVector().x));  
                      }  
                      

                      cheers,
                      Matthias

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

                        Thanks Matthias.

                        Sorry for being so dense. But I still can't get the SetParameter() to work with your example:

                        obj->SetParameter(DescID(ID_MG_TRANSFORM_POSITION, VECTOR_X + MGTEXTOBJECT_GROUPTRANSFORM_LINE), GeData(0.3), DESCFLAGS_SET_0); //Does not change
                        

                        And what about the scripting languages?
                        This plus sign thing doesn't seem to work with them for me either.

                        -ScottA

                        *Edit- I managed to figure out a way to get it to work:

                            BaseObject *obj = doc->GetActiveObject(); //The MoText object is active  
                          
                          GeData d; //A variable to hold the parameters  
                          if (obj->GetParameter(DescLevel(ID_MG_TRANSFORM_POSITION + MGTEXTOBJECT_GROUPTRANSFORM_LINE),d,DESCFLAGS_GET_0))   
                           {  
                               GePrint(RealToString(d.GetVector().x));  //Print the x Position value  
                               Vector newV = Vector(5,0,0);             //Create a new vector position value        
                               d.SetVector(newV);                       //Set the vector parameter held in variable d to this new vector value in memory only                    
                               obj->SetParameter(DescID(ID_MG_TRANSFORM_POSITION + MGTEXTOBJECT_GROUPTRANSFORM_LINE), GeData(newV), DESCFLAGS_SET_0); //Execute the vector change from memory  
                               GePrint(RealToString(d.GetVector().x));  //Print the new x Position value  
                           }
                        

                        Still trying to figure out how to use this with Coffee & Python.

                        -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 11/11/2011 at 05:00, xxxxxxxx wrote:

                          Works like a charm, thanks again Matthias.

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