File: itkMetaArrowConverter.hxx

package info (click to toggle)
insighttoolkit5 5.4.3-5
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 704,384 kB
  • sloc: cpp: 783,592; ansic: 628,724; xml: 44,704; fortran: 34,250; python: 22,874; sh: 4,078; pascal: 2,636; lisp: 2,158; makefile: 464; yacc: 328; asm: 205; perl: 203; lex: 146; tcl: 132; javascript: 98; csh: 81
file content (119 lines) | stat: -rw-r--r-- 4,138 bytes parent folder | download
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
/*=========================================================================
 *
 *  Copyright NumFOCUS
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *         https://www.apache.org/licenses/LICENSE-2.0.txt
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 *
 *=========================================================================*/
#ifndef itkMetaArrowConverter_hxx
#define itkMetaArrowConverter_hxx


namespace itk
{

template <unsigned int VDimension>
auto
MetaArrowConverter<VDimension>::CreateMetaObject() -> MetaObjectType *
{
  return dynamic_cast<MetaObjectType *>(new ArrowMetaObjectType);
}

/** Convert a metaArrow into an arrow SpatialObject  */
template <unsigned int VDimension>
auto
MetaArrowConverter<VDimension>::MetaObjectToSpatialObject(const MetaObjectType * mo) -> SpatialObjectPointer
{
  const auto * metaArrow = dynamic_cast<const MetaArrow *>(mo);
  if (metaArrow == nullptr)
  {
    itkExceptionMacro("Can't convert MetaObject to MetaArrow");
  }
  ArrowSpatialObjectPointer arrowSO = ArrowSpatialObjectType::New();

  float lengthInObjectSpace = metaArrow->Length();
  arrowSO->SetLengthInObjectSpace(lengthInObjectSpace);

  const double *                         metaPosition = metaArrow->Position();
  const double *                         metaDirection = metaArrow->Direction();
  typename SpatialObjectType::PointType  positionInObjectSpace;
  typename SpatialObjectType::VectorType directionInObjectSpace;
  for (unsigned int i = 0; i < VDimension; ++i)
  {
    positionInObjectSpace[i] = metaPosition[i];
    directionInObjectSpace[i] = metaDirection[i];
  }
  arrowSO->SetPositionInObjectSpace(positionInObjectSpace);
  arrowSO->SetDirectionInObjectSpace(directionInObjectSpace);

  // convert the other fields
  arrowSO->GetProperty().SetName(metaArrow->Name());
  arrowSO->SetId(metaArrow->ID());
  arrowSO->SetParentId(metaArrow->ParentID());
  arrowSO->GetProperty().SetRed(metaArrow->Color()[0]);
  arrowSO->GetProperty().SetGreen(metaArrow->Color()[1]);
  arrowSO->GetProperty().SetBlue(metaArrow->Color()[2]);
  arrowSO->GetProperty().SetAlpha(metaArrow->Color()[3]);
  arrowSO->Update();

  return arrowSO.GetPointer();
}

/** Convert an arrow SpatialObject into a metaArrow */
template <unsigned int VDimension>
auto
MetaArrowConverter<VDimension>::SpatialObjectToMetaObject(const SpatialObjectType * spatialObject) -> MetaObjectType *
{
  ArrowSpatialObjectConstPointer arrowSO = dynamic_cast<const ArrowSpatialObjectType *>(spatialObject);
  if (arrowSO.IsNull())
  {
    itkExceptionMacro("Can't downcast SpatialObject to ArrowSpatialObject");
  }

  auto * mo = new MetaArrow(VDimension);

  float metaLength = arrowSO->GetLengthInObjectSpace();

  if (arrowSO->GetParent())
  {
    mo->ParentID(arrowSO->GetParent()->GetId());
  }

  // convert position and direction
  double                                 metaPosition[VDimension];
  double                                 metaDirection[VDimension];
  typename SpatialObjectType::PointType  spPositionInObjectSpace = arrowSO->GetPositionInObjectSpace();
  typename SpatialObjectType::VectorType spDirectionInObjectSpace = arrowSO->GetDirectionInObjectSpace();
  for (unsigned int i = 0; i < VDimension; ++i)
  {
    metaPosition[i] = spPositionInObjectSpace[i];
    metaDirection[i] = spDirectionInObjectSpace[i];
  }
  mo->Position(metaPosition);
  mo->Direction(metaDirection);

  // convert the rest of the parameters
  mo->Length(metaLength);
  mo->ID(arrowSO->GetId());

  mo->Color(arrowSO->GetProperty().GetRed(),
            arrowSO->GetProperty().GetGreen(),
            arrowSO->GetProperty().GetBlue(),
            arrowSO->GetProperty().GetAlpha());

  return mo;
}

} // end namespace itk

#endif