OpenCMISS-Zinc C++ API Documentation
 All Classes Namespaces Files Functions Typedefs Enumerations Enumerator Pages
field.hpp
Go to the documentation of this file.
1 
5 /* OpenCMISS-Zinc Library
6 *
7 * This Source Code Form is subject to the terms of the Mozilla Public
8 * License, v. 2.0. If a copy of the MPL was not distributed with this
9 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
10 #ifndef CMZN_FIELD_HPP__
11 #define CMZN_FIELD_HPP__
12 
13 #include "opencmiss/zinc/field.h"
14 
15 namespace OpenCMISS
16 {
17 namespace Zinc
18 {
19 
20 class Differentialoperator;
21 class Element;
22 class Fieldcache;
23 class FieldComponent;
24 class FieldEdgeDiscontinuity;
25 class FieldEigenvalues;
26 class FieldElementGroup;
27 class FieldFindMeshLocation;
28 class FieldFiniteElement;
29 class FieldGroup;
30 class FieldImage;
31 class FieldImagefilterBinaryThreshold;
32 class FieldImagefilterDiscreteGaussian;
33 class FieldImagefilterHistogram;
34 class FieldImagefilterThreshold;
35 class FieldMeshIntegral;
36 class FieldNodeGroup;
37 class FieldStoredMeshLocation;
38 class FieldStoredString;
39 class Fieldmodule;
40 class Fieldsmoothing;
41 
50 class Field
51 {
52 protected:
53 
54  cmzn_field_id id;
55 
56 public:
57 
58  Field() : id(0)
59  { }
60 
61  // takes ownership of C handle, responsibility for destroying it
62  explicit Field(cmzn_field_id field_id) : id(field_id)
63  { }
64 
65  Field(const Field& field) : id(cmzn_field_access(field.id))
66  { }
67 
68  Field& operator=(const Field& field)
69  {
70  cmzn_field_id temp_id = cmzn_field_access(field.id);
71  if (0 != id)
72  {
73  cmzn_field_destroy(&id);
74  }
75  id = temp_id;
76  return *this;
77  }
78 
79  ~Field()
80  {
81  if (0 != id)
82  {
83  cmzn_field_destroy(&id);
84  }
85  }
86 
92  bool isValid() const
93  {
94  return (0 != id);
95  }
96 
102  cmzn_field_id getId() const
103  {
104  return id;
105  }
106 
111  {
112  CHANGE_FLAG_NONE = CMZN_FIELD_CHANGE_FLAG_NONE,
114  CHANGE_FLAG_ADD = CMZN_FIELD_CHANGE_FLAG_ADD,
116  CHANGE_FLAG_REMOVE = CMZN_FIELD_CHANGE_FLAG_REMOVE,
118  CHANGE_FLAG_IDENTIFIER = CMZN_FIELD_CHANGE_FLAG_IDENTIFIER,
120  CHANGE_FLAG_DEFINITION = CMZN_FIELD_CHANGE_FLAG_DEFINITION,
124  CHANGE_FLAG_FULL_RESULT = CMZN_FIELD_CHANGE_FLAG_FULL_RESULT,
127  CHANGE_FLAG_PARTIAL_RESULT = CMZN_FIELD_CHANGE_FLAG_PARTIAL_RESULT,
131  CHANGE_FLAG_RESULT = CMZN_FIELD_CHANGE_FLAG_RESULT,
133  CHANGE_FLAG_FINAL = CMZN_FIELD_CHANGE_FLAG_FINAL
135  };
136 
141  typedef int ChangeFlags;
142 
151  {
152  COORDINATE_SYSTEM_TYPE_INVALID = CMZN_FIELD_COORDINATE_SYSTEM_TYPE_INVALID,
154  COORDINATE_SYSTEM_TYPE_RECTANGULAR_CARTESIAN = CMZN_FIELD_COORDINATE_SYSTEM_TYPE_RECTANGULAR_CARTESIAN ,
156  COORDINATE_SYSTEM_TYPE_CYLINDRICAL_POLAR = CMZN_FIELD_COORDINATE_SYSTEM_TYPE_CYLINDRICAL_POLAR,
162  COORDINATE_SYSTEM_TYPE_SPHERICAL_POLAR = CMZN_FIELD_COORDINATE_SYSTEM_TYPE_SPHERICAL_POLAR,
168  COORDINATE_SYSTEM_TYPE_PROLATE_SPHEROIDAL = CMZN_FIELD_COORDINATE_SYSTEM_TYPE_PROLATE_SPHEROIDAL,
176  COORDINATE_SYSTEM_TYPE_OBLATE_SPHEROIDAL = CMZN_FIELD_COORDINATE_SYSTEM_TYPE_OBLATE_SPHEROIDAL,
184  COORDINATE_SYSTEM_TYPE_FIBRE = CMZN_FIELD_COORDINATE_SYSTEM_TYPE_FIBRE
203  };
204 
210  {
211  DOMAIN_TYPE_INVALID = CMZN_FIELD_DOMAIN_TYPE_INVALID,
213  DOMAIN_TYPE_POINT = CMZN_FIELD_DOMAIN_TYPE_POINT,
215  DOMAIN_TYPE_NODES = CMZN_FIELD_DOMAIN_TYPE_NODES,
217  DOMAIN_TYPE_DATAPOINTS = CMZN_FIELD_DOMAIN_TYPE_DATAPOINTS,
219  DOMAIN_TYPE_MESH1D = CMZN_FIELD_DOMAIN_TYPE_MESH1D,
221  DOMAIN_TYPE_MESH2D = CMZN_FIELD_DOMAIN_TYPE_MESH2D,
223  DOMAIN_TYPE_MESH3D = CMZN_FIELD_DOMAIN_TYPE_MESH3D,
225  DOMAIN_TYPE_MESH_HIGHEST_DIMENSION = CMZN_FIELD_DOMAIN_TYPE_MESH_HIGHEST_DIMENSION
227  };
228 
232  typedef int DomainTypes;
233 
239  {
240  VALUE_TYPE_INVALID = CMZN_FIELD_VALUE_TYPE_INVALID,
242  VALUE_TYPE_REAL = CMZN_FIELD_VALUE_TYPE_REAL,
244  VALUE_TYPE_STRING = CMZN_FIELD_VALUE_TYPE_STRING,
246  VALUE_TYPE_MESH_LOCATION = CMZN_FIELD_VALUE_TYPE_MESH_LOCATION
248  };
249 
256  bool isManaged()
257  {
258  return cmzn_field_is_managed(id);
259  }
260 
273  int setManaged(bool value)
274  {
275  return cmzn_field_set_managed(id, value);
276  }
277 
289  char *getComponentName(int componentNumber)
290  {
291  return cmzn_field_get_component_name(id, componentNumber);
292  }
293 
302  int setComponentName(int componentNumber, const char *name)
303  {
304  return cmzn_field_set_component_name(id, componentNumber, name);
305  }
306 
314  {
315  return cmzn_field_get_coordinate_system_focus(id);
316  }
317 
326  int setCoordinateSystemFocus(double focus)
327  {
328  return cmzn_field_set_coordinate_system_focus(id, focus);
329  }
330 
337  {
338  return static_cast<CoordinateSystemType>(
339  cmzn_field_get_coordinate_system_type(id));
340  }
341 
352  {
353  return cmzn_field_set_coordinate_system_type(id,
354  static_cast<cmzn_field_coordinate_system_type>(coordinateSystemType));
355  }
356 
363  {
364  return cmzn_field_get_number_of_components(id);
365  }
366 
373  char *getName()
374  {
375  return cmzn_field_get_name(id);
376  }
377 
385  int setName(const char *name)
386  {
387  return cmzn_field_set_name(id, name);
388  }
389 
396  {
397  return cmzn_field_get_number_of_source_fields(id);
398  }
399 
409  {
410  return Field(cmzn_field_get_source_field(id, index));
411  }
412 
420  {
421  return cmzn_field_is_type_coordinate(id);
422  }
423 
433  int setTypeCoordinate(bool value)
434  {
435  return cmzn_field_set_type_coordinate(id, value);
436  }
437 
444  {
445  return static_cast<ValueType>(cmzn_field_get_value_type(id));
446  }
447 
453  inline Fieldmodule getFieldmodule() const;
454 
467  inline int assignMeshLocation(const Fieldcache& cache, const Element& element,
468  int coordinatesCount, const double *coordinatesIn);
469 
485  inline int assignReal(const Fieldcache& cache, int valuesCount, const double *valuesIn);
486 
496  inline int assignString(const Fieldcache& cache, const char *stringValue);
497 
509  inline Element evaluateMeshLocation(const Fieldcache& cache, int coordinatesCount,
510  double *coordinatesOut);
511 
522  inline int evaluateReal(const Fieldcache& cache, int valuesCount, double *valuesOut);
523 
533  inline char *evaluateString(const Fieldcache& cache);
534 
556  inline int evaluateDerivative(const Differentialoperator& differentialOperator,
557  const Fieldcache& cache, int valuesCount, double *valuesOut);
558 
566  inline bool isDefinedAtLocation(const Fieldcache& cache);
567 
574  inline int smooth(const Fieldsmoothing& fieldsmoothing);
575 
576  // casting functions: must check isValid()
583  inline FieldComponent castComponent();
627  inline FieldGroup castGroup();
634  inline FieldImage castImage();
681  inline FieldNodeGroup castNodeGroup();
694 };
695 
696 inline bool operator==(const Field& a, const Field& b)
697 {
698  return a.getId() == b.getId();
699 }
700 
707 {
708 private:
709 
710  cmzn_fielditerator_id id;
711 
712 public:
713 
714  Fielditerator() : id(0)
715  { }
716 
717  // takes ownership of C handle, responsibility for destroying it
718  explicit Fielditerator(cmzn_fielditerator_id iterator_id) :
719  id(iterator_id)
720  { }
721 
722  Fielditerator(const Fielditerator& fielditerator) :
723  id(cmzn_fielditerator_access(fielditerator.id))
724  { }
725 
726  Fielditerator& operator=(const Fielditerator& fielditerator)
727  {
728  cmzn_fielditerator_id temp_id = cmzn_fielditerator_access(fielditerator.id);
729  if (0 != id)
730  {
731  cmzn_fielditerator_destroy(&id);
732  }
733  id = temp_id;
734  return *this;
735  }
736 
737  ~Fielditerator()
738  {
739  if (0 != id)
740  {
741  cmzn_fielditerator_destroy(&id);
742  }
743  }
744 
750  bool isValid() const
751  {
752  return (0 != id);
753  }
754 
763  {
764  return Field(cmzn_fielditerator_next(id));
765  }
766 };
767 
768 } // namespace Zinc
769 }
770 #endif /* CMZN_FIELD_HPP__ */
int evaluateDerivative(const Differentialoperator&differentialOperator, const Fieldcache &cache, int valuesCount, double *valuesOut)
Definition: fieldcache.hpp:226
A single finite element from a mesh.
Definition: element.hpp:219
FieldNodeGroup castNodeGroup()
Definition: fieldsubobjectgroup.hpp:106
bool isValid() const
Definition: field.hpp:92
A real-valued interpolated field.
Definition: fieldfiniteelement.hpp:31
FieldImagefilterDiscreteGaussian castImagefilterDiscreteGaussian()
Definition: fieldimageprocessing.hpp:765
ChangeFlag
Definition: field.hpp:110
Element evaluateMeshLocation(const Fieldcache &cache, int coordinatesCount, double *coordinatesOut)
Definition: fieldcache.hpp:209
A field which defines a subset of elements from a master mesh.
Definition: fieldsubobjectgroup.hpp:31
char * getName()
Definition: field.hpp:373
FieldElementGroup castElementGroup()
Definition: fieldsubobjectgroup.hpp:95
Base field type: an abstraction of a mathematical field.
Definition: field.hpp:50
int assignReal(const Fieldcache &cache, int valuesCount, const double *valuesIn)
Definition: fieldcache.hpp:199
FieldStoredString castStoredString()
Definition: fieldfiniteelement.hpp:523
FieldFindMeshLocation castFindMeshLocation()
Definition: fieldfiniteelement.hpp:493
CoordinateSystemType getCoordinateSystemType()
Definition: field.hpp:336
FieldComponent castComponent()
Definition: fieldcomposite.hpp:167
bool isTypeCoordinate()
Definition: field.hpp:419
int setCoordinateSystemFocus(double focus)
Definition: field.hpp:326
int setName(const char *name)
Definition: field.hpp:385
Field getSourceField(int index)
Definition: field.hpp:408
FieldImage castImage()
Definition: fieldimage.hpp:580
int getNumberOfComponents()
Definition: field.hpp:362
Describes the derivative of a field to evaluate.
Definition: differentialoperator.hpp:26
FieldFiniteElement castFiniteElement()
Definition: fieldfiniteelement.hpp:463
int assignString(const Fieldcache &cache, const char *stringValue)
Definition: fieldcache.hpp:204
A field which defines a subset of nodes from a master nodeset.
Definition: fieldsubobjectgroup.hpp:64
A field which stores and returns string values at nodes.
Definition: fieldfiniteelement.hpp:375
char * getComponentName(int componentNumber)
Definition: field.hpp:289
A field returning one or more components of a source field in a specified order.
Definition: fieldcomposite.hpp:54
Image processing derived field type performing the ITK discrete gaussian filter.
Definition: fieldimageprocessing.hpp:226
FieldEdgeDiscontinuity castEdgeDiscontinuity()
Definition: fieldfiniteelement.hpp:475
A field calculating the integral over a mesh.
Definition: fieldmeshoperators.hpp:33
Parameters for smoothing a field.
Definition: fieldsmoothing.hpp:28
char * evaluateString(const Fieldcache &cache)
Definition: fieldcache.hpp:221
cmzn_field_id getId() const
Definition: field.hpp:102
A field measuring discontinuity between surface elements.
Definition: fieldfiniteelement.hpp:123
An image-based field giving the pixel colour/intensity values.
Definition: fieldimage.hpp:31
bool isDefinedAtLocation(const Fieldcache &cache)
Definition: fieldcache.hpp:233
A field storing locations within a mesh.
Definition: fieldfiniteelement.hpp:357
int setManaged(bool value)
Definition: field.hpp:273
int DomainTypes
Definition: field.hpp:232
DomainType
Definition: field.hpp:209
int ChangeFlags
Definition: field.hpp:141
CoordinateSystemType
Definition: field.hpp:150
Field next()
Definition: field.hpp:762
FieldGroup castGroup()
Definition: fieldgroup.hpp:365
bool isValid() const
Definition: field.hpp:750
FieldImagefilterHistogram castImagefilterHistogram()
Definition: fieldimageprocessing.hpp:786
int assignMeshLocation(const Fieldcache &cache, const Element &element, int coordinatesCount, const double *coordinatesIn)
Definition: fieldcache.hpp:192
Image processing derived field type performing the ITK threshold filter.
Definition: fieldimageprocessing.hpp:569
int smooth(const Fieldsmoothing &fieldsmoothing)
Definition: fieldsmoothing.hpp:124
FieldMeshIntegral castMeshIntegral()
Definition: fieldmeshoperators.hpp:182
FieldStoredMeshLocation castStoredMeshLocation()
Definition: fieldfiniteelement.hpp:512
Container/manager of fields and domains within a region.
Definition: fieldmodule.hpp:134
Cache for setting domain locations at which fields are evaluated or assigned.
Definition: fieldcache.hpp:33
int setTypeCoordinate(bool value)
Definition: field.hpp:433
int setComponentName(int componentNumber, const char *name)
Definition: field.hpp:302
ValueType
Definition: field.hpp:238
bool isManaged()
Definition: field.hpp:256
Image processing derived field type performing the ITK histogram field.
Definition: fieldimageprocessing.hpp:302
ValueType getValueType()
Definition: field.hpp:443
A generic group field used for grouping local subobjects.
Definition: fieldgroup.hpp:35
Image processing derived field type performing the ITK binary threshold filter.
Definition: fieldimageprocessing.hpp:80
double getCoordinateSystemFocus()
Definition: field.hpp:313
FieldEigenvalues castEigenvalues()
Definition: fieldmatrixoperators.hpp:213
int getNumberOfSourceFields()
Definition: field.hpp:395
FieldImagefilterBinaryThreshold castImagefilterBinaryThreshold()
Definition: fieldimageprocessing.hpp:724
int evaluateReal(const Fieldcache &cache, int valuesCount, double *valuesOut)
Definition: fieldcache.hpp:216
int setCoordinateSystemType(CoordinateSystemType coordinateSystemType)
Definition: field.hpp:351
An iterator for looping through all the fields in a fieldmodule.
Definition: field.hpp:706
FieldImagefilterThreshold castImagefilterThreshold()
Definition: fieldimageprocessing.hpp:824
A field calculating the eigenvalues.
Definition: fieldmatrixoperators.hpp:50
A field that computes the location in a mesh.
Definition: fieldfiniteelement.hpp:261
Fieldmodule getFieldmodule() const
Definition: fieldmodule.hpp:1774