You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
200 lines
5.0 KiB
200 lines
5.0 KiB
/*=========================================================================
|
|
|
|
Program: Visualization Toolkit
|
|
Module: $RCSfile: vtkRIBProperty.cxx,v $
|
|
|
|
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
|
|
All rights reserved.
|
|
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
|
|
|
|
This software is distributed WITHOUT ANY WARRANTY; without even
|
|
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
PURPOSE. See the above copyright notice for more information.
|
|
|
|
=========================================================================*/
|
|
#include "vtkRIBProperty.h"
|
|
#include "vtkObjectFactory.h"
|
|
|
|
vtkCxxRevisionMacro(vtkRIBProperty, "$Revision: 1.17 $");
|
|
vtkStandardNewMacro(vtkRIBProperty);
|
|
|
|
vtkRIBProperty::vtkRIBProperty ()
|
|
{
|
|
this->Declarations = NULL;
|
|
this->Parameters = NULL;
|
|
this->SurfaceShader = new char[strlen("plastic") + 1];
|
|
strcpy (this->SurfaceShader, "plastic");
|
|
this->DisplacementShader = NULL;
|
|
// create a vtkProperty that can be rendered
|
|
this->Property = vtkProperty::New ();
|
|
}
|
|
|
|
vtkRIBProperty::~vtkRIBProperty()
|
|
{
|
|
if (this->SurfaceShader)
|
|
{
|
|
delete [] this->SurfaceShader;
|
|
}
|
|
if (this->DisplacementShader)
|
|
{
|
|
delete [] this->DisplacementShader;
|
|
}
|
|
if (this->Declarations)
|
|
{
|
|
delete [] this->Declarations;
|
|
}
|
|
if (this->Property)
|
|
{
|
|
this->Property->Delete ();
|
|
}
|
|
if (this->Parameters)
|
|
{
|
|
delete [] this->Parameters;
|
|
}
|
|
}
|
|
|
|
void vtkRIBProperty::Render(vtkActor *anActor, vtkRenderer *ren)
|
|
{
|
|
int ref;
|
|
|
|
// Copy this property's ivars into the property to be rendered
|
|
ref = this->Property->GetReferenceCount();
|
|
this->Property->DeepCopy(this);
|
|
//this->Property->SetDeleteMethod(NULL);
|
|
this->Property->SetReferenceCount(ref);
|
|
|
|
// Render the property
|
|
this->Property->Render (anActor, ren);
|
|
}
|
|
|
|
void vtkRIBProperty::SetVariable (char *variable, char *value)
|
|
{
|
|
if (this->Declarations)
|
|
{
|
|
delete [] this->Declarations;
|
|
}
|
|
|
|
// format of line is: Declare "variable" "type"\n
|
|
this->Declarations = new char [strlen ("Declare ") +
|
|
strlen (variable) +
|
|
strlen (value) +
|
|
8];
|
|
|
|
sprintf (this->Declarations, "Declare \"%s\" \"%s\"\n", variable, value);
|
|
this->Modified ();
|
|
}
|
|
|
|
void vtkRIBProperty::AddVariable (char *variable, char *value)
|
|
{
|
|
if (this->Declarations == NULL)
|
|
{
|
|
this->SetVariable (variable, value);
|
|
}
|
|
else
|
|
{
|
|
char *newVariable = new char [strlen ("Declare ") +
|
|
strlen (variable) +
|
|
strlen (value) +
|
|
8];
|
|
|
|
sprintf (newVariable, "Declare \"%s\" \"%s\"\n", variable, value);
|
|
char *oldDeclarations = this->Declarations;
|
|
|
|
this->Declarations = new char [strlen (oldDeclarations) + strlen (newVariable) + 1];
|
|
strcpy (this->Declarations, oldDeclarations);
|
|
strcat (this->Declarations, newVariable);
|
|
delete [] oldDeclarations;
|
|
delete [] newVariable;
|
|
this->Modified ();
|
|
}
|
|
}
|
|
|
|
void vtkRIBProperty::SetParameter (char *parameter, char *value)
|
|
{
|
|
if (this->Parameters)
|
|
{
|
|
delete [] this->Parameters;
|
|
}
|
|
|
|
// format of line is: "parameter" "value"
|
|
this->Parameters = new char [strlen (parameter) +
|
|
strlen (value) +
|
|
7];
|
|
|
|
sprintf (this->Parameters, " \"%s\" [%s]", parameter, value);
|
|
this->Modified ();
|
|
}
|
|
|
|
void vtkRIBProperty::AddParameter (char *Parameter, char *value)
|
|
{
|
|
if (this->Parameters == NULL)
|
|
{
|
|
this->SetParameter (Parameter, value);
|
|
}
|
|
else
|
|
{
|
|
char *newParameter = new char [strlen (Parameter) +
|
|
strlen (value) +
|
|
7];
|
|
|
|
sprintf (newParameter, " \"%s\" [%s]", Parameter, value);
|
|
char *oldParameters = this->Parameters;
|
|
|
|
this->Parameters = new char [strlen (oldParameters) + strlen (newParameter) + 1];
|
|
strcpy (this->Parameters, oldParameters);
|
|
strcat (this->Parameters, newParameter);
|
|
delete [] oldParameters;
|
|
delete [] newParameter;
|
|
this->Modified ();
|
|
}
|
|
}
|
|
|
|
char *vtkRIBProperty::GetParameters ()
|
|
{
|
|
return this->Parameters;
|
|
}
|
|
|
|
char *vtkRIBProperty::GetDeclarations ()
|
|
{
|
|
return this->Declarations;
|
|
}
|
|
|
|
void vtkRIBProperty::PrintSelf(ostream& os, vtkIndent indent)
|
|
{
|
|
this->Superclass::PrintSelf(os,indent);
|
|
|
|
if (this->SurfaceShader)
|
|
{
|
|
os << indent << "SurfaceShader: " << this->SurfaceShader << "\n";
|
|
}
|
|
else
|
|
{
|
|
os << indent << "SurfaceShader: (none)\n";
|
|
}
|
|
if (this->DisplacementShader)
|
|
{
|
|
os << indent << "DisplacementShader: " << this->DisplacementShader << "\n";
|
|
}
|
|
else
|
|
{
|
|
os << indent << "DisplacementShader: (none)\n";
|
|
}
|
|
if (this->Declarations)
|
|
{
|
|
os << indent << "Declarations: " << this->Declarations;
|
|
}
|
|
else
|
|
{
|
|
os << indent << "Declarations: (none)\n";
|
|
}
|
|
if (this->Parameters)
|
|
{
|
|
os << indent << "Parameters: " << this->Parameters;
|
|
}
|
|
else
|
|
{
|
|
os << indent << "Parameters: (none)\n";
|
|
}
|
|
|
|
}
|
|
|
|
|