VTK/Marks

From KitwarePublic
< VTK
Revision as of 21:27, 24 November 2009 by Jeff (talk | contribs) (New page: == Unlimited Options == === Supported Parameter Types === * Basic types (double, int, string, vtkVariant) <source lang="cpp"> vtkDotMark* m = vtkDotMark::New(); m->SetParameter("size", 1...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigationJump to search

Unlimited Options

Supported Parameter Types

  • Basic types (double, int, string, vtkVariant)

<source lang="cpp"> vtkDotMark* m = vtkDotMark::New(); m->SetParameter("size", 10); </source>

  • Data object

<source lang="cpp"> vtkDirectedGraph* g = vtkDirectedGraph::New(); //... vtkDotMark* m = vtkDotMark::New(); m->SetParameter("data", g); </source>

  • Pipeline output port

<source lang="cpp"> vtkRandomGraphSource* s = vtkRandomGraphSource::New(); //... vtkDotMark* m = vtkDotMark::New(); m->SetParameter("data", s->GetOutputPort()); </source>

  • vtkArray

<source lang="cpp"> vtkDenseArray<double>* a = vtkDenseArray<double>::New(); //... vtkDotMark* m = vtkDotMark::New(); m->SetParameter("size", a); </source>

  • vtkAbstractArray

<source lang="cpp"> vtkDoubleArray* a = vtkDoubleArray::New(); //... vtkDotMark* m = vtkDotMark::New(); m->SetParameter("size", a); </source>

  • Data object + field type + array name

<source lang="cpp"> vtkTable* t = vtkTable::New(); //... vtkDotMark* m = vtkDotMark::New(); m->SetParameter("size", t, vtkDataObject::ROW, "columnName"); </source>

  • Data object + field type + array name + component index

<source lang="cpp"> vtkTable* t = vtkTable::New(); vtkDoubleArray* loc = vtkDoubleArray::New(); loc->SetNumberOfComponents(2); //... vtkDotMark* m = vtkDotMark::New(); m->SetParameter("left", t, vtkDataObject::ROW, "location", 0); m->SetParameter("bottom", t, vtkDataObject::ROW, "location", 1); </source>

  • Function pointer

<source lang="cpp"> double MySize(vtkMark* m, int i) { return 10*i; } //... vtkDotMark* m = vtkDotMark::New(); m->SetParameter("size", &MySize); </source>

  • Functor (i.e. struct type with operator()) - requires SetParameter to be templated.

<source lang="cpp"> struct MySize {

 double operator()(vtkMark* m, int i) { return 10*i; }

} //... vtkDotMark* m = vtkDotMark::New(); m->SetParameter("size", MySize()); </source>

  • Lambda function (boost::lambda)
  • Parameter strategies

<source lang="cpp"> class vtkDoubleParameter {

 virtual double Get(vtkMark* m, int i) = 0;

}

class MySize : public vtkDoubleParameter { protected:

 double Get(vtkMark* m, int i) { return 10*i; }

} //... vtkDotMark* m = vtkDotMark::New(); m->SetParameter("size", MySize()); </source>

  • Override virtual methods in mark

<source lang="cpp"> class vtkDotMark : public vtkMark { protected:

 virtual double GetSize(int i) { return 10; }

}

class MyMark : public vtkDotMark { protected:

 double GetSize(int i) { return 10*i; }

} //... MyMark* m = MyMark::New(); </source>

  • Inherit from parent mark

<source lang="cpp"> vtkDotMark* parent = vtkDotMark::New(); parent->SetParameter("size", 10); vtkDotMark* child = vtkDotMark::New(); parent->Add(child); // Child has size 10 </source>

Parameter Storage and Access

  • Named member variables

<source lang="cpp"> class vtkDotMark { public:

 ParamType GetSize() { return this->Size; }
 void SetSize(ParamType p) { this->Size = p; }

private:

 ParamType Size;

} </source>

  • Named member variables with import/export to name/value map

<source lang="cpp"> class vtkMark { public:

 ParamType GetParameter(string key)
 { this->ExportSettings()->GetParameter(key); }
 void SetParameter(string key, ParamType p)
 { this->ImportSettings(this->ExportSettings()->SetParameter(key, p)); }
 virtual void ImportSettings(vtkSettings* s) { }
 virtual vtkSettings* ExportSettings() { return vtkSettings::New(); }

}

class vtkDotMark { public:

 ParamType GetSize() { return this->Size; }
 void SetSize(ParamType p) { this->Size = p; }
 virtual vtkSettings* ExportSettings()
 { return this->Parent->ExportSettings()->SetParameter("size", this->Size); }
 virutal void ImportSettings(vtkSettings* s)
 { this->Size = s->GetParameter("size"); }

private:

 ParamType Size;

} </source>

  • Generic name/value map

<source lang="cpp"> class vtkMark { public:

 ParamType GetParameter(string key)
 { return this->Parameters[key].Valid ? this->Parameters[key] : this->Parent->GetParameter(key); }
 void SetParameter(string key, ParamType p)
 { this->Parameters[key] = p; }

private:

 map<string, ParamType> Parameters;

} </source>

  • Generic name/value map with setter/getter syntactic sugar for discoverability

<source lang="cpp"> class vtkDotMark { public:

 ParamType GetSize() { return this->GetParameter("size"); }
 void SetSize(ParamType p) { this->SetParameter("size", p); }

} </source>

Other Features

  • Declarative API
  • Iterator support