#include <xsi_library.h>
A library is a container of objects of the same type. For example, a material library contains a list of materials.
Library storage may be internal or external. If internal, the library is saved in the scene file. If external, the library is saved in a separate file. The library can be exported to and imported from dotXSI or a native binary format.
CStatus st; Application app; Scene scene = app.GetActiveProject().GetActiveScene(); Model root = scene.GetRoot(); // Create a cube with a texture projection (not connected) X3DObject cube; st = root.AddGeometry( L"Cube", L"MeshSurface", L"MyCubeWithTexture", cube ); // Create a projection for the cube CreateProjection( cube.GetRef(), siTxtCubic, siTxtDefaultCubic , L"MyCubicTextureSupport", L"MyCubicTextureProjection" ); // Create a sphere with a texture projection (not connected) X3DObject sphere; st = root.AddGeometry( L"Sphere", L"MeshSurface", L"MySphereWithTexture", sphere ); // Create a projection for the sphere CreateProjection( sphere.GetRef(), siTxtSpherical, siTxtDefaultSpherical, L"MySphericalTextureSupport", L"MySphericalTextureProjection" ); // Create a group with a material hooked up to a texture image CRefArray objs; objs.Add( cube ); objs.Add( sphere ); Group group; st = root.AddGroup( objs, L"MyGroup", false, group ); Material mat; st = group.AddMaterial(L"Phong", false, L"MyGroupMaterialWithTexture", mat ); CRefArray shaders = mat.GetShaders(); Shader phong = shaders[0]; Parameter ambient = phong.GetParameter(L"ambient"); Parameter diffuse = phong.GetParameter(L"diffuse"); // Create an image clip CString strFileName = app.GetInstallationPath( siFactoryPath ) + L"\\Data\\XSI_SAMPLES\\Pictures\\xsilogo.jpg"; CRef imageclip = CreateImageClip( strFileName, L"MyImageClip" ); // Connect the imageclip to phong.ambient CRef prevsrc, src; st = ambient.ConnectFromPreset( L"Image", siTextureShaderFamily, prevsrc, src ); Shader imageshader = src; // Connect the imageclip to phong.diffuse st = diffuse.Connect( imageshader, prevsrc ) ; // Connect image.tex to imageclip Parameter tex = imageshader.GetParameter(L"tex"); st = tex.Connect( imageclip, prevsrc ); // Get tspace_id Parameter tspace_id = imageshader.GetParameter( L"tspace_id" ); // Set cube.material.image.tspace_id = MyCubicTextureProjection st = tspace_id.PutInstanceValue(cube, L"MyCubicTextureProjection"); // Set sphere.material.image.tspace_id = MySphericalTextureProjection st = tspace_id.PutInstanceValue(sphere, L"MySphericalTextureProjection"); // Dump the tspace ids for objects found using materials // from material library Library lib = scene.GetActiveMaterialLibrary(); CRefArray mat_refs = lib.GetItems(); for ( LONG i=0; i< mat_refs.GetCount(); i++ ) { Material mat( mat_refs[i] ); CRefArray ref_illum_shaders = mat.GetShaders(); if ( ref_illum_shaders.GetCount() == 0 ) continue; Shader illum_shader = ref_illum_shaders[0]; CRefArray ref_image_shaders = illum_shader.GetShaders(); Shader image = ref_image_shaders[0]; CRefArray param_refs = image.GetParameters(); for ( LONG j=0; i < param_refs.GetCount(); i++ ) { Parameter image_param( param_refs[i] ); // If the parameter is an instance value look up // its object value if ( image_param.HasInstanceValue() ) { CRefArray owner_refs = mat.GetOwners(); for ( LONG k=0; k < owner_refs.GetCount(); k++ ) { CRef owner_ref = owner_refs[k]; if ( owner_ref == lib ) continue; if ( owner_ref.IsA( siGroupID ) ) { Group group = owner_ref; // Log the complete path to the parameter under the object that uses the material // with an instance value. app.LogMessage( image_param.GetFullName() + L" = " + image_param.GetValue().GetAsText() ); CRefArray members = group.GetMembers(); for ( LONG l=0; l < members.GetCount(); l++ ) { SceneItem sceneitem = members[l]; CValue val = image_param.GetInstanceValue( members[l] ); // Log complete path to parameter under object that uses material // with instance value. app.LogMessage( sceneitem.GetFullName() + L" " + image_param.GetName() + L" = " + val.GetAsText() ); } } else { CValue val = image_param.GetInstanceValue( owner_ref ); // Log complete path to parameter under object that uses material // with instance value. app.LogMessage( image_param.GetName() + L" = " + val.GetAsText() ); } } } } }
Public Member Functions |
|
Library () | |
~Library () | |
Library (const CRef &in_ref) | |
Library (const Library &in_obj) | |
bool | IsA (siClassID in_ClassID) const |
siClassID | GetClassID () const |
Library & | operator= (const Library &in_obj) |
Library & | operator= (const CRef &in_ref) |
CRefArray | GetItems () const |
bool IsA | ( | siClassID | in_ClassID | ) | const [virtual] |
Returns True if this object supports the functionality of a specified class. For example, a Library is a type of Source, so a Library object supports Source functionality.
in_ClassID | Test if this object supports this class. |
Reimplemented from Source.
Reimplemented in MaterialLibrary.
siClassID GetClassID | ( | ) | const [virtual] |
Returns the class ID for this object.
Reimplemented from Source.
Reimplemented in MaterialLibrary.
Assigns a CRef to this Library object. The Library object is cleared if the CRef is not a reference to an object that supports the Library class.
in_ref | A reference to an object that supports the Library class. |
Reimplemented from Source.
Reimplemented in MaterialLibrary.
CRefArray GetItems | ( | ) | const |
Returns an array of the ProjectItem objects in this library.