31 #include <vtkAssembly.h>
32 #include <vtkBoxRepresentation.h>
33 #include <vtkMatrix4x4.h>
34 #include <vtkRenderWindowInteractor.h>
35 #include <vtkTransform.h>
36 #include <vtkTransformPolyDataFilter.h>
37 #include <vtkWidgetRepresentation.h>
43 m_boxWidgetTransformer(nullptr),
46 m_modelActors.clear();
53 m_viewer =
reinterpret_cast<PCLVis*
>(viewer);
55 CVLog::Warning(
"[PclTransformTool::setVisualizer] viewer is Null!");
58 CVLog::Warning(
"[PclTransformTool::setVisualizer] viewer is Null!");
67 m_modelActors.clear();
79 assert(m_modelActors.empty());
85 for (
unsigned i = 0; i < n; ++i) {
96 m_modelActors.push_back(actor);
101 if (!m_boxWidgetTransformer) {
103 QString(
"[PclTransformTool::showInteractor] boxWidget has not "
104 "been initialized!"));
109 m_boxWidgetTransformer->On();
111 m_boxWidgetTransformer->Off();
116 if (m_modelActors.empty()) {
121 m_boxWidgetTransformer->SetInteractor(
123 m_boxWidgetTransformer->HandlesOff();
124 m_boxWidgetTransformer->SetPlaceFactor(1.1);
127 for (vtkActor* actor : m_modelActors) {
128 assembly->AddPart(actor);
130 m_boxWidgetTransformer->PlaceWidget(assembly->GetBounds());
133 m_boxWidgetTransformer->GetTransform(m_originTrans);
137 boxCallback->SetActors(m_modelActors);
138 boxCallback->attach(m_boxWidgetTransformer);
141 m_boxWidgetTransformer->On();
147 if (m_boxWidgetTransformer) {
150 m_boxWidgetTransformer->Off();
153 if (!m_modelActors.empty()) {
154 m_modelActors.clear();
159 if (m_originTrans && !m_modelActors.empty() && m_boxWidgetTransformer) {
160 m_boxWidgetTransformer->SetTransform(m_originTrans);
161 for (vtkActor* actor : this->m_modelActors) {
163 actor->SetUserTransform(m_originTrans);
174 if (!m_boxWidgetTransformer) {
176 QString(
"[PclTransformTool::setTranlationMode] boxWidget has "
177 "not been initialized!"));
183 m_boxWidgetTransformer->SetTranslateXEnabled(
true);
184 m_boxWidgetTransformer->SetTranslateYEnabled(
false);
185 m_boxWidgetTransformer->SetTranslateZEnabled(
false);
188 m_boxWidgetTransformer->SetTranslateXEnabled(
false);
189 m_boxWidgetTransformer->SetTranslateYEnabled(
true);
190 m_boxWidgetTransformer->SetTranslateZEnabled(
false);
193 m_boxWidgetTransformer->SetTranslateXEnabled(
false);
194 m_boxWidgetTransformer->SetTranslateYEnabled(
false);
195 m_boxWidgetTransformer->SetTranslateZEnabled(
true);
198 m_boxWidgetTransformer->SetTranslateXEnabled(
true);
199 m_boxWidgetTransformer->SetTranslateYEnabled(
true);
200 m_boxWidgetTransformer->SetTranslateZEnabled(
false);
203 m_boxWidgetTransformer->SetTranslateXEnabled(
true);
204 m_boxWidgetTransformer->SetTranslateYEnabled(
false);
205 m_boxWidgetTransformer->SetTranslateZEnabled(
true);
208 m_boxWidgetTransformer->SetTranslateXEnabled(
false);
209 m_boxWidgetTransformer->SetTranslateYEnabled(
true);
210 m_boxWidgetTransformer->SetTranslateZEnabled(
true);
213 m_boxWidgetTransformer->SetTranslateXEnabled(
true);
214 m_boxWidgetTransformer->SetTranslateYEnabled(
true);
215 m_boxWidgetTransformer->SetTranslateZEnabled(
true);
218 m_boxWidgetTransformer->SetTranslateXEnabled(
false);
219 m_boxWidgetTransformer->SetTranslateYEnabled(
false);
220 m_boxWidgetTransformer->SetTranslateZEnabled(
false);
228 if (!m_boxWidgetTransformer) {
230 QString(
"[PclTransformTool::setRotationMode] boxWidget has "
231 "not been initialized!"));
237 m_boxWidgetTransformer->SetRotateXEnabled(
true);
238 m_boxWidgetTransformer->SetRotateYEnabled(
true);
239 m_boxWidgetTransformer->SetRotateZEnabled(
true);
242 m_boxWidgetTransformer->SetRotateXEnabled(
true);
243 m_boxWidgetTransformer->SetRotateYEnabled(
false);
244 m_boxWidgetTransformer->SetRotateZEnabled(
false);
247 m_boxWidgetTransformer->SetRotateXEnabled(
false);
248 m_boxWidgetTransformer->SetRotateYEnabled(
true);
249 m_boxWidgetTransformer->SetRotateZEnabled(
false);
252 m_boxWidgetTransformer->SetRotateXEnabled(
false);
253 m_boxWidgetTransformer->SetRotateYEnabled(
false);
254 m_boxWidgetTransformer->SetRotateZEnabled(
true);
262 if (!m_boxWidgetTransformer) {
264 QString(
"[PclTransformTool::setScaleEnabled] boxWidget has "
265 "not been initialized!"));
269 m_boxWidgetTransformer->SetScaleEnabled(state);
273 if (!m_boxWidgetTransformer) {
275 QString(
"[PclTransformTool::setShearEnabled] boxWidget has "
276 "not been initialized!"));
280 state ? m_boxWidgetTransformer->HandlesOn()
281 : m_boxWidgetTransformer->HandlesOff();
285 if (!m_boxWidgetTransformer) {
290 m_boxWidgetTransformer->GetTransform(trans);
294 trans->GetTranspose(matrix44);
299 if (!m_boxWidgetTransformer) {
304 m_boxWidgetTransformer->GetTransform(trans);
308 for (vtkActor* actor : m_modelActors) {
309 vtkPolyData* polydata =
310 reinterpret_cast<vtkPolyDataMapper*
>(actor->GetMapper())
312 if (
nullptr == polydata) {
313 out.push_back(
nullptr);
320 dataObject->DeepCopy(polydata);
324 transformFilter->SetInputData(dataObject);
325 transformFilter->SetTransform(trans);
326 transformFilter->Update();
327 dataObject = transformFilter->GetOutput();
341 "only cloud, mesh and polyline are supported now!"));
347 out.push_back(
nullptr);
static bool Warning(const char *format,...)
Prints out a formatted warning message in console.
vtkSmartPointer< vtkRenderWindowInteractor > getRenderWindowInteractor()
Get a pointer to the current interactor style used.
vtkActor * getActorById(const std::string &viewId)
Double version of ccGLMatrixTpl.
Hierarchical CLOUDVIEWER Object.
QString getViewId() const
unsigned getChildrenNumber() const
Returns the number of children.
ccHObject * getChild(unsigned childPos) const
Returns the ith child.
bool isKindOf(CV_CLASS_ENUM type) const
Generic visualizer 3D interface.
static ccMesh * ConvertToMesh(vtkPolyData *polydata, bool silent=false)
static ccPolyline * ConvertToPolyline(vtkPolyData *polydata, bool silent=false)
static ccPointCloud * ConvertToPointCloud(vtkPolyData *polydata, bool silent=false)
void vtkInitOnce(T **obj)
#define VTK_CREATE(type, name)