UsTK : Ultrasound ToolKit  version 2.0.1 under development (2024-05-17)
usNeedleTip.cpp
1 /****************************************************************************
2  *
3  * This file is part of the ustk software.
4  * Copyright (C) 2016 - 2017 by Inria. All rights reserved.
5  *
6  * This software is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * ("GPL") version 2 as published by the Free Software Foundation.
9  * See the file LICENSE.txt at the root directory of this source
10  * distribution for additional information about the GNU GPL.
11  *
12  * For using ustk with software that can not be combined with the GNU
13  * GPL, please contact Inria about acquiring a ViSP Professional
14  * Edition License.
15  *
16  * This software was developed at:
17  * Inria Rennes - Bretagne Atlantique
18  * Campus Universitaire de Beaulieu
19  * 35042 Rennes Cedex
20  * France
21  *
22  * If you have questions regarding the use of this file, please contact
23  * Inria at ustk@inria.fr
24  *
25  * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
26  * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
27  *
28  * Author:
29  * Jason Chevrie
30  *
31  *****************************************************************************/
32 
33 #include <visp3/ustk_needle_modeling/usNeedleTip.h>
34 
35 #include <visp3/core/vpException.h>
36 
37 usNeedleTip::usNeedleTip() : m_basePose(), m_worldMbase(), m_tipPose(), m_worldMtip() {}
38 
40  : m_basePose(tip.m_basePose), m_worldMbase(tip.m_worldMbase), m_tipPose(tip.m_tipPose), m_worldMtip(tip.m_worldMtip)
41 {
42 }
43 
45 
47 {
48  m_basePose = tip.m_basePose;
50  m_tipPose = tip.m_tipPose;
52 
53  return (*this);
54 }
55 
56 usNeedleTip *usNeedleTip::clone() const { return new usNeedleTip(*this); }
57 
58 void usNeedleTip::setBasePose(const vpPoseVector &pose)
59 {
60  m_basePose = pose;
61  m_worldMbase.buildFrom(m_basePose);
62 
63  this->updateTipPose();
64 }
65 
66 vpPoseVector usNeedleTip::getBasePose() const { return m_basePose; }
67 
68 void usNeedleTip::setWorldMbase(const vpHomogeneousMatrix &worldMbase)
69 {
70  m_worldMbase = worldMbase;
71  m_basePose.buildFrom(m_worldMbase);
72 
73  this->updateTipPose();
74 }
75 
76 vpHomogeneousMatrix usNeedleTip::getWorldMbase() const { return m_worldMbase; }
77 
78 void usNeedleTip::setBasePosition(const vpColVector &position)
79 {
80  for (int i = 0; i < 3; i++)
81  m_basePose[i] = position[i];
82  m_worldMbase.buildFrom(m_basePose);
83 
84  this->updateTipPose();
85 }
86 
87 vpColVector usNeedleTip::getBasePosition() const
88 {
89  vpColVector p(3);
90 
91  for (int i = 0; i < 3; i++)
92  p[i] = m_basePose[i];
93 
94  return p;
95 }
96 
97 vpPoseVector usNeedleTip::getTipPose() const { return m_tipPose; }
98 
99 vpHomogeneousMatrix usNeedleTip::getWorldMtip() const { return m_worldMtip; }
100 
101 vpColVector usNeedleTip::getTipPosition() const { return vpColVector(m_worldMtip.getCol(3), 0, 3); }
102 
103 vpColVector usNeedleTip::getTipDirection() const { return vpColVector(m_worldMtip.getCol(2), 0, 3); }
104 
105 vpColVector usNeedleTip::getBaseAxisX() const { return vpColVector(m_worldMbase.getCol(0), 0, 3); }
106 
107 vpColVector usNeedleTip::getBaseAxisY() const { return vpColVector(m_worldMbase.getCol(1), 0, 3); }
108 
109 vpColVector usNeedleTip::getBaseAxisZ() const { return vpColVector(m_worldMbase.getCol(2), 0, 3); }
110 
111 std::ostream &operator<<(std::ostream &s, const usNeedleTip &tip)
112 {
113  s << "usNeedleTip\n";
114  s << tip.m_basePose << '\n';
115  s << tip.m_tipPose << '\n';
116  s.flush();
117  return s;
118 }
119 
120 std::istream &operator>>(std::istream &s, usNeedleTip &tip)
121 {
122  std::string c;
123  s >> c;
124  if (c != "usNeedleTip") {
125  vpException e(vpException::ioError, "Stream does not contain usNeedleTip data");
126  throw e;
127  }
128  for (int i = 0; i < 6; i++)
129  s >> tip.m_basePose[i];
130  for (int i = 0; i < 6; i++)
131  s >> tip.m_tipPose[i];
132  s.get();
133  tip.m_worldMbase.buildFrom(tip.m_basePose);
134  tip.m_worldMtip.buildFrom(tip.m_tipPose);
135 
136  return s;
137 }
138 
139 std::ostream &operator<<=(std::ostream &s, const usNeedleTip &tip)
140 {
141  s.write("usNeedleTip", 12);
142  for (int i = 0; i < 6; i++)
143  s.write((char *)&(tip.m_basePose[i]), sizeof(double));
144  for (int i = 0; i < 6; i++)
145  s.write((char *)&(tip.m_tipPose[i]), sizeof(double));
146  s.flush();
147  return s;
148 }
149 
150 std::istream &operator>>=(std::istream &s, usNeedleTip &tip)
151 {
152  char c[12];
153  s.read(c, 12);
154  if (strcmp(c, "usNeedleTip")) {
155  vpException e(vpException::ioError, "Stream does not contain usNeedleTip data");
156  throw e;
157  }
158  for (int i = 0; i < 6; i++)
159  s.read((char *)&(tip.m_basePose[i]), sizeof(double));
160  for (int i = 0; i < 6; i++)
161  s.read((char *)&(tip.m_tipPose[i]), sizeof(double));
162  tip.m_worldMbase.buildFrom(tip.m_basePose);
163  tip.m_worldMtip.buildFrom(tip.m_tipPose);
164  return s;
165 }
166 
167 void usNeedleTip::updateTipPose()
168 {
170  //m_worldMtip = m_worldMtip;
171 }
virtual usNeedleTip * clone() const
Definition: usNeedleTip.cpp:56
vpHomogeneousMatrix m_worldMbase
Definition: usNeedleTip.h:46
void setWorldMbase(const vpHomogeneousMatrix &worldMbase)
Definition: usNeedleTip.cpp:68
virtual ~usNeedleTip()
Definition: usNeedleTip.cpp:44
vpPoseVector getBasePose() const
Definition: usNeedleTip.cpp:66
vpHomogeneousMatrix getWorldMtip() const
Definition: usNeedleTip.cpp:99
vpHomogeneousMatrix getWorldMbase() const
Definition: usNeedleTip.cpp:76
vpPoseVector m_basePose
Definition: usNeedleTip.h:45
virtual usNeedleTip & operator=(const usNeedleTip &needle)
Definition: usNeedleTip.cpp:46
vpColVector getTipPosition() const
vpColVector getBasePosition() const
Definition: usNeedleTip.cpp:87
usNeedleTip()
Constructors, destructors.
Definition: usNeedleTip.cpp:37
vpPoseVector getTipPose() const
Definition: usNeedleTip.cpp:97
void setBasePosition(const vpColVector &position)
Definition: usNeedleTip.cpp:78
vpHomogeneousMatrix m_worldMtip
Definition: usNeedleTip.h:48
vpColVector getTipDirection() const
vpColVector getBaseAxisZ() const
vpPoseVector m_tipPose
Definition: usNeedleTip.h:47
vpColVector getBaseAxisX() const
vpColVector getBaseAxisY() const
void setBasePose(const vpPoseVector &pose)
Parameters setters and getters.
Definition: usNeedleTip.cpp:58