Finding User Data in a Scene

You may need to find out whether a scene contains any user data. You may also need to return or assign the stored values on a user data map or blob. To do so, you need to find the object or cluster to which the user data is associated.

 

You should choose a unique name for each user data map and blob you create so that multiple user data stored on a particular element do not create conflicts.

The following examples are provided:

VBScript Example: Finding a user data map

JScript Example: Finding a user data blob

VBScript Example: Finding a user data map

1. Start from a scene that contains one or more user data maps.

2. Get a list of geometry objects and their clusters.

3. Get the properties of each cluster and weed out everything but the user data maps.

4. Get the individual items on each user data map.

 

Since user data maps are applied to a cluster of items, each item can be set individually. To access the individual data on each cluster member, you need to use the UserDataMap.Item property to get the UserDataItem object where the values are stored.

' Get a list of geometry objects 
Set oFoundThings = ActiveSceneRoot.FindChildren(,,siGeometryFamily)

' Set the counter to measure the number of user data maps
iCount = 0

For Each t in oFoundThings
   ' Print the geometry information
   LogMessage "======================================================="
   LogMessage "Found a " & TypeName(t) & " called " & t.Name

   ' Get the clusters on the current geometry
   Set oClusters = t.ActivePrimitive.Geometry.Clusters

   ' Enumerate each cluster for its properties
   For Each c in oClusters
       Set oProps = c.Properties

       ' Check each property to see if it's a user data map
       For Each p in oProps
          If TypeName(p) = "UserDataMap" Then
              ' Increment the counter
              iCount = iCount + 1
          End If
       Next
   Next
Next

LogMessage "======================================================="
LogMessage "Found " & iCount & " user data map(s)."


' OUTPUT OF SCRIPT (assuming an object called "grid" with a user data map on it)
'INFO : "======================================================="
'INFO : "Found a X3DObject called grid"
'INFO : "======================================================="
'INFO : "Found 1 user data map(s)."

JScript Example: Finding a user data blob

   /* 
       This example demonstrates how to find UserDataBlobs in a scene
   */
   NewScene( null, false);

   // --------------------------------------------------------------------
   //      SETUP
   //
   // Set up the scene by creating a null to hold the blobs and then
   // adding two blobs (one empty and one populated)
   var oNull = ActiveSceneRoot.AddNull();

   var oBlob1 = oNull.AddProperty( "UserDataBlob", false, "nulldata" );
   oBlob1.Value = "xyz123";

   oNull.AddProperty( "UserDataBlob", false, "emptynulldata" );


   // --------------------------------------------------------------------
   //      SEARCH
   //
   // Find all UserDataBlobs on the object and print out their values
   var e = new Enumerator( oNull.Properties );
   var item ;

   for ( ;!e.atEnd();e.moveNext() )
   {
       item = e.item();

       if ( item.Type == "UserDataBlob" )
       {
          if ( item.IsEmpty )
          {
              LogMessage( "Found empty UserDataBlob called " + item.Name );
          }
          else
          {
              LogMessage( "Found user data blob called " + item.Name + 
                           " with value " + item.Value );
          }    
       }
   }



   // --------------------------------------------------------------------
   //      RESULT
   //
   // The following output is logged to the Script Editor:
   //INFO : "Found user data blob called nulldata with value xyz123"
   //INFO : "Found empty UserDataBlob called emptynulldata"


Autodesk Softimage v7.5