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 "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 FieldElementGroup;
26 class FieldFindMeshLocation;
27 class FieldFiniteElement;
28 class FieldGroup;
29 class FieldImage;
30 class FieldImagefilterBinaryThreshold;
31 class FieldImagefilterDiscreteGaussian;
32 class FieldImagefilterHistogram;
33 class FieldImagefilterThreshold;
34 class FieldMeshIntegral;
35 class FieldNodeGroup;
36 class FieldStoredMeshLocation;
37 class FieldStoredString;
38 class Fieldmodule;
39 class Fieldsmoothing;
40 
49 class Field
50 {
51 protected:
52 
53  cmzn_field_id id;
54 
55 public:
56 
57  Field() : id(0)
58  { }
59 
60  // takes ownership of C handle, responsibility for destroying it
61  explicit Field(cmzn_field_id field_id) : id(field_id)
62  { }
63 
64  Field(const Field& field) : id(cmzn_field_access(field.id))
65  { }
66 
67  Field& operator=(const Field& field)
68  {
69  cmzn_field_id temp_id = cmzn_field_access(field.id);
70  if (0 != id)
71  {
72  cmzn_field_destroy(&id);
73  }
74  id = temp_id;
75  return *this;
76  }
77 
78  ~Field()
79  {
80  if (0 != id)
81  {
82  cmzn_field_destroy(&id);
83  }
84  }
85 
91  bool isValid() const
92  {
93  return (0 != id);
94  }
95 
101  cmzn_field_id getId() const
102  {
103  return id;
104  }
105 
110  {
111  CHANGE_FLAG_NONE = CMZN_FIELD_CHANGE_FLAG_NONE,
113  CHANGE_FLAG_ADD = CMZN_FIELD_CHANGE_FLAG_ADD,
115  CHANGE_FLAG_REMOVE = CMZN_FIELD_CHANGE_FLAG_REMOVE,
117  CHANGE_FLAG_IDENTIFIER = CMZN_FIELD_CHANGE_FLAG_IDENTIFIER,
119  CHANGE_FLAG_DEFINITION = CMZN_FIELD_CHANGE_FLAG_DEFINITION,
123  CHANGE_FLAG_FULL_RESULT = CMZN_FIELD_CHANGE_FLAG_FULL_RESULT,
126  CHANGE_FLAG_PARTIAL_RESULT = CMZN_FIELD_CHANGE_FLAG_PARTIAL_RESULT,
130  CHANGE_FLAG_RESULT = CMZN_FIELD_CHANGE_FLAG_RESULT,
132  CHANGE_FLAG_FINAL = CMZN_FIELD_CHANGE_FLAG_FINAL
134  };
135 
140  typedef int ChangeFlags;
141 
150  {
151  COORDINATE_SYSTEM_TYPE_INVALID = CMZN_FIELD_COORDINATE_SYSTEM_TYPE_INVALID,
153  COORDINATE_SYSTEM_TYPE_RECTANGULAR_CARTESIAN = CMZN_FIELD_COORDINATE_SYSTEM_TYPE_RECTANGULAR_CARTESIAN ,
155  COORDINATE_SYSTEM_TYPE_CYLINDRICAL_POLAR = CMZN_FIELD_COORDINATE_SYSTEM_TYPE_CYLINDRICAL_POLAR,
161  COORDINATE_SYSTEM_TYPE_SPHERICAL_POLAR = CMZN_FIELD_COORDINATE_SYSTEM_TYPE_SPHERICAL_POLAR,
167  COORDINATE_SYSTEM_TYPE_PROLATE_SPHEROIDAL = CMZN_FIELD_COORDINATE_SYSTEM_TYPE_PROLATE_SPHEROIDAL,
175  COORDINATE_SYSTEM_TYPE_OBLATE_SPHEROIDAL = CMZN_FIELD_COORDINATE_SYSTEM_TYPE_OBLATE_SPHEROIDAL,
183  COORDINATE_SYSTEM_TYPE_FIBRE = CMZN_FIELD_COORDINATE_SYSTEM_TYPE_FIBRE
202  };
203 
209  {
210  DOMAIN_TYPE_INVALID = CMZN_FIELD_DOMAIN_TYPE_INVALID,
212  DOMAIN_TYPE_POINT = CMZN_FIELD_DOMAIN_TYPE_POINT,
214  DOMAIN_TYPE_NODES = CMZN_FIELD_DOMAIN_TYPE_NODES,
216  DOMAIN_TYPE_DATAPOINTS = CMZN_FIELD_DOMAIN_TYPE_DATAPOINTS,
218  DOMAIN_TYPE_MESH1D = CMZN_FIELD_DOMAIN_TYPE_MESH1D,
220  DOMAIN_TYPE_MESH2D = CMZN_FIELD_DOMAIN_TYPE_MESH2D,
222  DOMAIN_TYPE_MESH3D = CMZN_FIELD_DOMAIN_TYPE_MESH3D,
224  DOMAIN_TYPE_MESH_HIGHEST_DIMENSION = CMZN_FIELD_DOMAIN_TYPE_MESH_HIGHEST_DIMENSION
226  };
227 
231  typedef int DomainTypes;
232 
238  {
239  VALUE_TYPE_INVALID = CMZN_FIELD_VALUE_TYPE_INVALID,
241  VALUE_TYPE_REAL = CMZN_FIELD_VALUE_TYPE_REAL,
243  VALUE_TYPE_STRING = CMZN_FIELD_VALUE_TYPE_STRING,
245  VALUE_TYPE_MESH_LOCATION = CMZN_FIELD_VALUE_TYPE_MESH_LOCATION
247  };
248 
255  bool isManaged()
256  {
257  return cmzn_field_is_managed(id);
258  }
259 
272  int setManaged(bool value)
273  {
274  return cmzn_field_set_managed(id, value);
275  }
276 
288  char *getComponentName(int componentNumber)
289  {
290  return cmzn_field_get_component_name(id, componentNumber);
291  }
292 
301  int setComponentName(int componentNumber, const char *name)
302  {
303  return cmzn_field_set_component_name(id, componentNumber, name);
304  }
305 
313  {
314  return cmzn_field_get_coordinate_system_focus(id);
315  }
316 
325  int setCoordinateSystemFocus(double focus)
326  {
327  return cmzn_field_set_coordinate_system_focus(id, focus);
328  }
329 
336  {
337  return static_cast<CoordinateSystemType>(
338  cmzn_field_get_coordinate_system_type(id));
339  }
340 
351  {
352  return cmzn_field_set_coordinate_system_type(id,
353  static_cast<cmzn_field_coordinate_system_type>(coordinateSystemType));
354  }
355 
362  {
363  return cmzn_field_get_number_of_components(id);
364  }
365 
372  char *getName()
373  {
374  return cmzn_field_get_name(id);
375  }
376 
384  int setName(const char *name)
385  {
386  return cmzn_field_set_name(id, name);
387  }
388 
395  {
396  return cmzn_field_get_number_of_source_fields(id);
397  }
398 
408  {
409  return Field(cmzn_field_get_source_field(id, index));
410  }
411 
419  {
420  return cmzn_field_is_type_coordinate(id);
421  }
422 
432  int setTypeCoordinate(bool value)
433  {
434  return cmzn_field_set_type_coordinate(id, value);
435  }
436 
443  {
444  return static_cast<ValueType>(cmzn_field_get_value_type(id));
445  }
446 
452  inline Fieldmodule getFieldmodule() const;
453 
466  inline int assignMeshLocation(const Fieldcache& cache, const Element& element,
467  int coordinatesCount, const double *coordinatesIn);
468 
484  inline int assignReal(const Fieldcache& cache, int valuesCount, const double *valuesIn);
485 
495  inline int assignString(const Fieldcache& cache, const char *stringValue);
496 
508  inline Element evaluateMeshLocation(const Fieldcache& cache, int coordinatesCount,
509  double *coordinatesOut);
510 
521  inline int evaluateReal(const Fieldcache& cache, int valuesCount, double *valuesOut);
522 
532  inline char *evaluateString(const Fieldcache& cache);
533 
555  inline int evaluateDerivative(const Differentialoperator& differentialOperator,
556  const Fieldcache& cache, int valuesCount, double *valuesOut);
557 
565  inline bool isDefinedAtLocation(const Fieldcache& cache);
566 
573  inline int smooth(const Fieldsmoothing& fieldsmoothing);
574 
575  // casting functions: must check isValid()
582  inline FieldComponent castComponent();
619  inline FieldGroup castGroup();
626  inline FieldImage castImage();
673  inline FieldNodeGroup castNodeGroup();
686 };
687 
688 inline bool operator==(const Field& a, const Field& b)
689 {
690  return a.getId() == b.getId();
691 }
692 
699 {
700 private:
701 
702  cmzn_fielditerator_id id;
703 
704 public:
705 
706  Fielditerator() : id(0)
707  { }
708 
709  // takes ownership of C handle, responsibility for destroying it
710  explicit Fielditerator(cmzn_fielditerator_id iterator_id) :
711  id(iterator_id)
712  { }
713 
714  Fielditerator(const Fielditerator& fielditerator) :
715  id(cmzn_fielditerator_access(fielditerator.id))
716  { }
717 
718  Fielditerator& operator=(const Fielditerator& fielditerator)
719  {
720  cmzn_fielditerator_id temp_id = cmzn_fielditerator_access(fielditerator.id);
721  if (0 != id)
722  {
723  cmzn_fielditerator_destroy(&id);
724  }
725  id = temp_id;
726  return *this;
727  }
728 
729  ~Fielditerator()
730  {
731  if (0 != id)
732  {
733  cmzn_fielditerator_destroy(&id);
734  }
735  }
736 
742  bool isValid() const
743  {
744  return (0 != id);
745  }
746 
755  {
756  return Field(cmzn_fielditerator_next(id));
757  }
758 };
759 
760 } // namespace Zinc
761 }
762 #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:91
A real-valued interpolated field.
Definition: fieldfiniteelement.hpp:30
FieldImagefilterDiscreteGaussian castImagefilterDiscreteGaussian()
Definition: fieldimageprocessing.hpp:765
ChangeFlag
Definition: field.hpp:109
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:372
FieldElementGroup castElementGroup()
Definition: fieldsubobjectgroup.hpp:95
Base field type: an abstraction of a mathematical field.
Definition: field.hpp:49
int assignReal(const Fieldcache &cache, int valuesCount, const double *valuesIn)
Definition: fieldcache.hpp:199
FieldStoredString castStoredString()
Definition: fieldfiniteelement.hpp:483
FieldFindMeshLocation castFindMeshLocation()
Definition: fieldfiniteelement.hpp:453
CoordinateSystemType getCoordinateSystemType()
Definition: field.hpp:335
FieldComponent castComponent()
Definition: fieldcomposite.hpp:167
bool isTypeCoordinate()
Definition: field.hpp:418
int setCoordinateSystemFocus(double focus)
Definition: field.hpp:325
int setName(const char *name)
Definition: field.hpp:384
Field getSourceField(int index)
Definition: field.hpp:407
FieldImage castImage()
Definition: fieldimage.hpp:563
int getNumberOfComponents()
Definition: field.hpp:361
Describes the derivative of a field to evaluate.
Definition: differentialoperator.hpp:26
FieldFiniteElement castFiniteElement()
Definition: fieldfiniteelement.hpp:423
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:374
char * getComponentName(int componentNumber)
Definition: field.hpp:288
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:435
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:101
A field measuring discontinuity between surface elements.
Definition: fieldfiniteelement.hpp:122
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:356
int setManaged(bool value)
Definition: field.hpp:272
int DomainTypes
Definition: field.hpp:231
DomainType
Definition: field.hpp:208
int ChangeFlags
Definition: field.hpp:140
CoordinateSystemType
Definition: field.hpp:149
Field next()
Definition: field.hpp:754
FieldGroup castGroup()
Definition: fieldgroup.hpp:365
bool isValid() const
Definition: field.hpp:742
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:472
Container/manager of fields and domains within a region.
Definition: fieldmodule.hpp:133
Cache for setting domain locations at which fields are evaluated or assigned.
Definition: fieldcache.hpp:33
int setTypeCoordinate(bool value)
Definition: field.hpp:432
int setComponentName(int componentNumber, const char *name)
Definition: field.hpp:301
ValueType
Definition: field.hpp:237
bool isManaged()
Definition: field.hpp:255
Image processing derived field type performing the ITK histogram field.
Definition: fieldimageprocessing.hpp:302
ValueType getValueType()
Definition: field.hpp:442
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:312
int getNumberOfSourceFields()
Definition: field.hpp:394
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:350
An iterator for looping through all the fields in a fieldmodule.
Definition: field.hpp:698
FieldImagefilterThreshold castImagefilterThreshold()
Definition: fieldimageprocessing.hpp:824
A field that computes the location in a mesh.
Definition: fieldfiniteelement.hpp:260
Fieldmodule getFieldmodule() const
Definition: fieldmodule.hpp:1724