Accessing MoText Group Parameters

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?

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?

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

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.

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

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.

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

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.

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

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

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.