//--------------------------------------------------------------------------------------------------
/// 
//--------------------------------------------------------------------------------------------------
void QSRSnippetWidget::showModelStatistics()
{
    RenderSequence* renderSeq = m_snippet->renderSequence();
    CVF_ASSERT(renderSeq);

    size_t totPartCount = 0;
    size_t totFaceCount = 0;

    int numRenderings = renderSeq->renderingCount();
    int ir;
    for (ir = 0; ir < numRenderings; ir++)
    {
        Rendering* rendering = renderSeq->rendering(ir);
        CVF_ASSERT(rendering);

        Scene* scene = rendering->scene();
        CVF_ASSERT(scene);

        int numModels = scene->modelCount();
        int im;
        for (im = 0; im < numModels; im++)
        {
            Model* model = scene->model(im);

            Collection<Part> allParts;
            model->allParts(&allParts);

            size_t numParts = allParts.size();
            size_t ip;
            for (ip = 0; ip < numParts; ip++)
            {
                Part* part = allParts[ip].p();
                Drawable* drawable = part->drawable();

                totPartCount++;
                totFaceCount += drawable->faceCount();
            }
        }
    }    

    cvf::Trace::show("Total number of parts: %ld", totPartCount);
    cvf::Trace::show("Total number of faces: %ld", totFaceCount);
}
//--------------------------------------------------------------------------------------------------
/// 
//--------------------------------------------------------------------------------------------------
void QSRSnippetWidget::setRenderMode(DrawableGeo::RenderMode mode)
{
    m_lastSetRenderMode = mode;

    Collection<Part> allParts;

    RenderSequence* renderSeq = m_snippet->renderSequence();
    CVF_ASSERT(renderSeq);

    int numPasses = renderSeq->renderingCount();

    int i;
    for (i = 0; i < numPasses; i++)
    {
        Rendering* rendering = renderSeq->rendering(i);
        CVF_ASSERT(rendering);

        Scene* scene = rendering->scene();
        CVF_ASSERT(scene);

        scene->allParts(&allParts);
    }

    size_t numParts = allParts.size();
    size_t partIdx;
    for (partIdx = 0; partIdx < numParts; partIdx++)
    {
        Part* part = allParts.at(partIdx);

        cvf::uint lod;
		for (lod = 0; lod < cvf::Part::MAX_NUM_LOD_LEVELS; lod++)
        {
            DrawableGeo* drawableGeo = dynamic_cast<DrawableGeo*>(part->drawable(lod));
            if (drawableGeo)
            {
                drawableGeo->setRenderMode(m_lastSetRenderMode);
            }
        }
    }
}
//--------------------------------------------------------------------------------------------------
/// 
//--------------------------------------------------------------------------------------------------
void QSRSnippetWidget::convertDrawablesToShort()
{
    RenderSequence* renderSeq = m_snippet->renderSequence();
    CVF_ASSERT(renderSeq);

    int numPasses = renderSeq->renderingCount();
    int i;
    for (i = 0; i < numPasses; i++)
    {
        Rendering* rendering = renderSeq->rendering(i);
        CVF_ASSERT(rendering);

        Scene* scene = rendering->scene();
        CVF_ASSERT(scene);

        int numModels = scene->modelCount();
        int j;
        for (j = 0; j < numModels; j++)
        {
            Model* model = scene->model(j);

            Collection<Part> partCollection;
            model->allParts(&partCollection);

            size_t numParts = partCollection.size();
            size_t i;
            for (i = 0; i < numParts; i++)
            {
                DrawableGeo* drawable = dynamic_cast<DrawableGeo*>(partCollection.at(i)->drawable());
                if (drawable)
                {
                    drawable->convertFromUIntToUShort();
                }
            }
        }
    }    
}