This reference page is linked to from the following overview topics: Softimage 2014.
#include <xsi_shape.h>
A class representing primitive types for particles rendering. Shape objects are read-only and can be accessed with ICEAttribute properties such as ICEAttribute::GetDataArray and ICEAttribute::GetDataArray2D.
CValue CreatePrim( const CString& in_presetobj, const CString& in_geometrytype, const CString& in_name, const CString& in_parent )
CRefArray ApplyOp( const CString& in_presetobj, CString & io_connectionset, const siConstructionMode& in_constructionmode );
CValue AddICENode( const CValue& in_presetobj, const CValue& in_container );
CValue SetValue( const CString& in_target, const CValue& in_value, const CValue& in_time = CValue() );
void AddAttributeToSetDataICENode( const CValue& in_setdatanode, const CString& in_attributename, siComponentDataType in_attributetype, siComponentDataContext in_attributecontext, siComponentDataStructure in_attributestructure );
void ConnectICENodes( const CValue& in_inputport, const CValue& in_outputport );
Application xsi;
CreatePrim( L"Grid", L"PointCloud", L"", L"");
Selection selection = xsi.GetSelection();
X3DObject grid = selection[0];
// Create shape reference types
CString strGrid(L"grid");
ApplyOp( L"ICETree", strGrid, siConstructionModeModeling );
AddICENode( L"SetData", L"grid.pointcloud.ICETree");
SetValue( L"grid.pointcloud.ICETree.SetData.PredefinedAttributeName", L"Shape", L"");
AddAttributeToSetDataICENode(L"grid.pointcloud.ICETree.SetData", L"Shape", siComponentDataTypeShape, siComponentDataContextComponent0D, siComponentDataStructureSingle);
SetValue(L"grid.pointcloud.ICETree.SetData.shape", 5, L"");
ConnectICENodes(L"grid.pointcloud.ICETree.port1", L"grid.pointcloud.ICETree.SetData.set");
AddICENode( L"InstanceShapeNode", L"grid.pointcloud.ICETree" );
CreatePrim( L"Cylinder", L"MeshSurface", L"", L"" );
SetValue( L"grid.pointcloud.ICETree.ShapeInstancingNode.Reference", L"cylinder", L"" );
ConnectICENodes( L"grid.pointcloud.ICETree.SetData.shape", L"grid.pointcloud.ICETree.ShapeInstancingNode.shape" );
ConnectICENodes( L"grid.pointcloud.ICETree.port2", L"grid.pointcloud.ICETree.SetData.set" );
CRefArray attrs = grid.GetActivePrimitive().GetGeometry().GetICEAttributes();
for( ULONG i = 0; i<attrs.GetCount(); i++ )
{
ICEAttribute attr = attrs[i];
if ( attr.GetDataType() == XSI::siICENodeDataShape )
{
xsi.LogMessage( L"*******************************************************************" );
xsi.LogMessage( L"Name: " + attr.GetName() );
xsi.LogMessage( L"DataType: " + CString(attr.GetDataType()) );
xsi.LogMessage( L"StructType: " + CString(attr.GetStructureType()) );
xsi.LogMessage( L"ContextType: " + CString(attr.GetContextType()) );
xsi.LogMessage( L"IsConstant: " + CString(attr.IsConstant()) );
xsi.LogMessage( L"Readonly: " + CString(attr.IsReadonly()) );
xsi.LogMessage( L"Category: " + CString(attr.GetAttributeCategory()) );
xsi.LogMessage( L"Element count: " + CString(attr.GetElementCount()) );
CICEAttributeDataArray< XSI::MATH::CShape > data;
attr.GetDataArray( data );
for( ULONG i=0; i<data.GetCount( ); i++ )
{
xsi.LogMessage( CString( data[ i ] ) );
}
}
}
// %This example shows how to access the shape attributes data from a cloud primitive by using GetDataArrayChunk.
ULONG nChunkCount = 4;
for( ULONG i = 0; i<attrs.GetCount(); i++ )
{
ICEAttribute attr = attrs[i];
if ( attr.GetDataType() != XSI::siICENodeDataShape )
{
continue;
}
xsi.LogMessage( L"*******************************************************************" );
// Compute the chunk vector to access the data
ULONG nChunkSize = attr.GetElementCount() / nChunkCount;
ULONG nLastChunk = attr.GetElementCount() % nChunkCount;
CLongArray nChunks;
for( ULONG iChunk = 0; iChunk < nChunkCount; iChunk++ )
{
nChunks.Add( nChunkSize );
}
nChunks.Add( nLastChunk );
ULONG nOffset = 0;
for ( ULONG j=0; j<nChunks.GetCount(); j++ )
{
ULONG nChunkSize = nChunks[j];
if ( nChunkSize == 0 )
{
continue;
}
CICEAttributeDataArray< XSI::MATH::CShape > data;
attr.GetDataArrayChunk( nOffset, nChunkSize, data );
xsi.LogMessage( L"Chunk size: " + CString(data.GetCount( )) );
for( ULONG i=0; i<data.GetCount( ); i++ )
{
xsi.LogMessage( CString( data[ i ] ) );
}
nOffset += nChunkSize;
}
}
// Helpers
CValue CreatePrim( const CString& in_presetobj, const CString& in_geometrytype, const CString& in_name, const CString& in_parent )
{
CValueArray args(4);
CValue retval;
args[0]= in_presetobj;
args[1]= in_geometrytype;
args[2]= in_name;
args[3]= in_parent;
Application app;
app.ExecuteCommand( L"CreatePrim", args, retval );
return retval;
}
CRefArray ApplyOp( const CString& in_presetobj, CString & io_connectionset, const siConstructionMode& in_constructionmode )
{
CValueArray args(6);
CValue retval;
args[0]=in_presetobj;
args[1]=io_connectionset;
args[2]=(LONG)siUnspecified;
args[3]=(LONG)siPersistentOperation;
if ( in_constructionmode != siConstructionModeDefault )
{
args[5]=(LONG)in_constructionmode;
}
Application app;
CStatus st = app.ExecuteCommand( L"ApplyOp", args, retval );
io_connectionset=args[1];
return retval;
}
CValue AddICENode( const CValue& in_presetobj, const CValue& in_container )
{
CValueArray args(2);
CValue retval;
args[0]= in_presetobj;
args[1]= in_container;
Application app;
CStatus st = app.ExecuteCommand( L"AddICENode", args, retval );
return retval;
}
void AddAttributeToSetDataICENode( const CValue& in_setdatanode, const CString& in_attributename, siComponentDataType in_attributetype, siComponentDataContext in_attributecontext, siComponentDataStructure in_attributestructure )
{
CValueArray args(5);
CValue retval;
args[0]= in_setdatanode;
args[1]= in_attributename;
args[2]= (LONG)in_attributetype;
args[3]= (LONG)in_attributecontext;
args[4]= (LONG)in_attributestructure;
Application app;
CStatus st = app.ExecuteCommand( L"AddAttributeToSetDataICENode", args, retval );
return;
}
void ConnectICENodes( const CValue& in_inputport, const CValue& in_outputport )
{
CValueArray args(2);
CValue retval;
args[0]= in_inputport;
args[1]= in_outputport;
Application app;
CStatus st = app.ExecuteCommand( L"ConnectICENodes", args, retval );
return;
}
CValue SetValue( const CString& in_target, const CValue& in_value, const CValue& in_time )
{
CValueArray args(3);
CValue retval;
args[0]= in_target;
args[1]= in_value;
args[2]= in_time;
Application app;
CStatus st = app.ExecuteCommand( L"SetValue", args, retval );
return retval;
}
Classes |
|
| struct | ParameterInstance |
| A struct to hold the parameters for a shape
instance. More... |
|
| struct | ParameterReference |
| A struct to hold the parameters for a shape
reference. More... |
|
Public Member Functions |
|
| CShape (XSI::siICEShapeType in_type=XSI::siICEShapePoint) | |
| CShape (const CShape &in_shape) | |
| ~CShape () | |
| CShape & | operator= (const CShape &in_shape) |
| XSI::siICEShapeType | GetType () |
| ULONG | GetReferenceID () |
| bool | IsBranchSelected () |
| bool | operator== (const CShape &in_shape) const |
| void | SetAsInstance (ULONG in_instanceIndex) |
| void | SetAsReference (ULONG in_objectId, bool in_branch) |
| void | SetAsTrivial (XSI::siICEShapeType in_trivialType) |
| XSI::siICEShapeType | GetType () const |
| const ParameterReference & | GetReferenceDescription () const |
| Get the reference shape
description. |
|
| const ParameterInstance & | GetInstanceDescription () const |
| Get the instance shape
description. |
|
| CShape | ( | XSI::siICEShapeType | in_type =
XSI::siICEShapePoint |
) | [inline] |
Constructor. Creates a new object based on the specified shape type.
| in_type | Type of particle shape to create |
| ~CShape | ( | ) | [inline] |
Destructor.
Assignment operator.
| in_shape | Shape to copy |
| XSI::siICEShapeType GetType | ( | ) | [inline] |
Returns the shape type.
| ULONG GetReferenceID | ( | ) | [inline] |
Returns the object ID the shape is referring to. Applies only to the siICEShapeReference shape type. The returned ID can be used to access the object with Application::GetObjectFromID.
| bool IsBranchSelected | ( | ) | [inline] |
Returns true if the referenced object is set as branch-selected. Applies to siICEShapeReference shape types only.
| bool operator== | ( | const CShape & | in_shape | ) | const [inline] |
Equality operator tests the strict equality of this shape with the specified shape.
| in_shape | Operand CShape. |
| void SetAsInstance | ( | ULONG | in_instanceIndex | ) | [inline] |
Set as shape instance
| in_instanceIndex | Instance index |
| in_rbdType | Type for Rigid Body Dynamics |
| void SetAsReference | ( | ULONG | in_objectId, |
| bool | in_branch | ||
| ) | [inline] |
Set as shape reference
| in_objectId | Object Id |
| in_branch | Branch |
| in_rbdType | Type for Rigid Body Dynamics |
| void SetAsTrivial | ( | XSI::siICEShapeType | in_trivialType | ) | [inline] |
Set as trivial shape type
| in_trivialType | Trivial type |
| XSI::siICEShapeType GetType | ( | ) | const [inline] |
Returns the shape type.