File: VTKWrap.cpp

package info (click to toggle)
freemat 4.2%2Bdfsg1-6
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 142,116 kB
  • sloc: ansic: 126,788; cpp: 62,015; python: 2,080; perl: 1,255; sh: 1,146; yacc: 1,019; lex: 239; makefile: 107
file content (44 lines) | stat: -rw-r--r-- 1,111 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#ifdef HAVE_VTK

#include "VTKWrap.hpp"
#include "Class.hpp"

Array MakeVTKPointer(vtkObjectBase *p, QString cname, Interpreter *eval, 
		     bool nodelete)
{
  if (!p) throw Exception("Function returned an empty VTK pointer!");
  StructArray *sap = new StructArray;
  sap->insert("pointer",Array(reinterpret_cast<uint64>(p)));
  sap->insert("nodelete",Array(nodelete));
  sap->setClassName(cname);
  // Make it a handle-semantics class
  StructArray hsap(sap,eval);
  return Array(hsap);
}

void DeleteVTKObject(const Array &arg) {
  StructArray sa = arg.constStructPtr();
  BasicArray<Array>& val = sa["nodelete"];
  if (val[1].constRealScalar<bool>()) return;
  vtkObjectBase *vtk_pointer = GetVTKPointer<vtkObjectBase>(arg);
  vtk_pointer->Delete();
}

bool VTKIsScalarArg(const Array &g)
{
  return (!g.isReferenceType() && g.isScalar());
}

bool VTKIsVectorArg(const Array &g)
{
  return (!g.isReferenceType() && g.isVector());
}

bool VTKIsClass(const Array &g, QString cname)
{
  return ((g.dataClass() == Struct) && 
	  ((g.className() == cname) ||
	   isParentClass(cname,g.className())));
}

#endif