Commit 6e5ae985 authored by ozantonkal's avatar ozantonkal

initial cloud widget implementation, fix safedowncasts

parent d394e233
...@@ -97,4 +97,11 @@ namespace temp_viz ...@@ -97,4 +97,11 @@ namespace temp_viz
// TODO Overload setColor method, and hide setPose, updatePose, getPose methods // TODO Overload setColor method, and hide setPose, updatePose, getPose methods
}; };
class CV_EXPORTS CloudWidget : public Widget
{
public:
CloudWidget(InputArray _cloud, InputArray _colors);
CloudWidget(InputArray _cloud, const Color &color = Color::white());
};
} }
This diff is collapsed.
...@@ -874,7 +874,7 @@ void temp_viz::Viz3d::VizImpl::showWidget(const String &id, const Widget &widget ...@@ -874,7 +874,7 @@ void temp_viz::Viz3d::VizImpl::showWidget(const String &id, const Widget &widget
removeActorFromRenderer(wam_itr->second.actor); removeActorFromRenderer(wam_itr->second.actor);
} }
// Get the actor and set the user matrix // Get the actor and set the user matrix
vtkSmartPointer<vtkLODActor> actor; vtkLODActor *actor;
if (actor = vtkLODActor::SafeDownCast(WidgetAccessor::getActor(widget))) if (actor = vtkLODActor::SafeDownCast(WidgetAccessor::getActor(widget)))
{ {
vtkSmartPointer<vtkMatrix4x4> matrix = convertToVtkMatrix(pose.matrix); vtkSmartPointer<vtkMatrix4x4> matrix = convertToVtkMatrix(pose.matrix);
......
...@@ -18,7 +18,7 @@ public: ...@@ -18,7 +18,7 @@ public:
void setColor(const Color& color) void setColor(const Color& color)
{ {
vtkSmartPointer<vtkLODActor> lod_actor = vtkLODActor::SafeDownCast(actor); vtkLODActor *lod_actor = vtkLODActor::SafeDownCast(actor);
Color c = vtkcolor(color); Color c = vtkcolor(color);
lod_actor->GetMapper ()->ScalarVisibilityOff (); lod_actor->GetMapper ()->ScalarVisibilityOff ();
lod_actor->GetProperty ()->SetColor (c.val); lod_actor->GetProperty ()->SetColor (c.val);
...@@ -32,7 +32,7 @@ public: ...@@ -32,7 +32,7 @@ public:
void setPose(const Affine3f& pose) void setPose(const Affine3f& pose)
{ {
vtkSmartPointer<vtkLODActor> lod_actor = vtkLODActor::SafeDownCast(actor); vtkLODActor *lod_actor = vtkLODActor::SafeDownCast(actor);
vtkSmartPointer<vtkMatrix4x4> matrix = convertToVtkMatrix(pose.matrix); vtkSmartPointer<vtkMatrix4x4> matrix = convertToVtkMatrix(pose.matrix);
lod_actor->SetUserMatrix (matrix); lod_actor->SetUserMatrix (matrix);
lod_actor->Modified (); lod_actor->Modified ();
...@@ -40,7 +40,7 @@ public: ...@@ -40,7 +40,7 @@ public:
void updatePose(const Affine3f& pose) void updatePose(const Affine3f& pose)
{ {
vtkSmartPointer<vtkLODActor> lod_actor = vtkLODActor::SafeDownCast(actor); vtkLODActor *lod_actor = vtkLODActor::SafeDownCast(actor);
vtkSmartPointer<vtkMatrix4x4> matrix = lod_actor->GetUserMatrix(); vtkSmartPointer<vtkMatrix4x4> matrix = lod_actor->GetUserMatrix();
if (!matrix) if (!matrix)
{ {
...@@ -58,7 +58,7 @@ public: ...@@ -58,7 +58,7 @@ public:
Affine3f getPose() const Affine3f getPose() const
{ {
vtkSmartPointer<vtkLODActor> lod_actor = vtkLODActor::SafeDownCast(actor); vtkLODActor *lod_actor = vtkLODActor::SafeDownCast(actor);
vtkSmartPointer<vtkMatrix4x4> matrix = lod_actor->GetUserMatrix(); vtkSmartPointer<vtkMatrix4x4> matrix = lod_actor->GetUserMatrix();
Matx44f matrix_cv = convertToMatx(matrix); Matx44f matrix_cv = convertToMatx(matrix);
return Affine3f(matrix_cv); return Affine3f(matrix_cv);
......
...@@ -53,7 +53,7 @@ ...@@ -53,7 +53,7 @@
cv::Mat cvcloud_load() cv::Mat cvcloud_load()
{ {
cv::Mat cloud(1, 20000, CV_32FC3); cv::Mat cloud(1, 20000, CV_32FC3);
std::ifstream ifs("d:/cloud_dragon.ply"); std::ifstream ifs("cloud_dragon.ply");
std::string str; std::string str;
for(size_t i = 0; i < 11; ++i) for(size_t i = 0; i < 11; ++i)
...@@ -99,23 +99,29 @@ TEST(Viz_viz3d, accuracy) ...@@ -99,23 +99,29 @@ TEST(Viz_viz3d, accuracy)
temp_viz::CubeWidget cuw(cv::Point3f(-2,-2,-2), cv::Point3f(-1,-1,-1)); temp_viz::CubeWidget cuw(cv::Point3f(-2,-2,-2), cv::Point3f(-1,-1,-1));
temp_viz::CoordinateSystemWidget csw(1.0f, cv::Affine3f::Identity()); temp_viz::CoordinateSystemWidget csw(1.0f, cv::Affine3f::Identity());
temp_viz::TextWidget tw("TEST", cv::Point2i(100,100), 20); temp_viz::TextWidget tw("TEST", cv::Point2i(100,100), 20);
temp_viz::CloudWidget pcw(cloud, colors);
temp_viz::CloudWidget pcw2(cloud, temp_viz::Color(255,255,255));
// v.showWidget("line", lw); // v.showWidget("line", lw);
v.showWidget("plane", pw); // v.showWidget("plane", pw);
// v.showWidget("sphere", sw); // v.showWidget("sphere", sw);
// v.showWidget("arrow", aw); // v.showWidget("arrow", aw);
// v.showWidget("circle", cw); // v.showWidget("circle", cw);
// v.showWidget("cylinder", cyw); // v.showWidget("cylinder", cyw);
v.showWidget("cube", cuw); // v.showWidget("cube", cuw);
v.showWidget("coordinateSystem", csw); v.showWidget("coordinateSystem", csw);
v.showWidget("text",tw); // v.showWidget("text",tw);
v.showWidget("pcw",pcw);
v.showWidget("pcw2",pcw2);
temp_viz::LineWidget lw2 = lw; temp_viz::LineWidget lw2 = lw;
// v.showPointCloud("cld",cloud, colors);
while(!v.wasStopped()) while(!v.wasStopped())
{ {
// Creating new point cloud with id cloud1 // Creating new point cloud with id cloud1
cv::Affine3f cloudPosition(angle_x, angle_y, angle_z, cv::Vec3f(pos_x, pos_y, pos_z)); cv::Affine3f cloudPosition(angle_x, angle_y, angle_z, cv::Vec3f(pos_x, pos_y, pos_z));
cv::Affine3f cloudPosition2(angle_x, angle_y, angle_z, cv::Vec3f(pos_x+0.2, pos_y+0.2, pos_z+0.2));
lw2.setColor(temp_viz::Color(col_blue, col_green, col_red)); lw2.setColor(temp_viz::Color(col_blue, col_green, col_red));
lw.setLineWidth(lw.getLineWidth()+pos_x * 10); lw.setLineWidth(lw.getLineWidth()+pos_x * 10);
...@@ -129,8 +135,9 @@ TEST(Viz_viz3d, accuracy) ...@@ -129,8 +135,9 @@ TEST(Viz_viz3d, accuracy)
cyw.setPose(cloudPosition); cyw.setPose(cloudPosition);
lw.setPose(cloudPosition); lw.setPose(cloudPosition);
cuw.setPose(cloudPosition); cuw.setPose(cloudPosition);
v.showWidget("pcw",pcw, cloudPosition);
v.showWidget("plane", pw, cloudPosition); v.showWidget("pcw2",pcw2, cloudPosition2);
// v.showWidget("plane", pw, cloudPosition);
angle_x += 0.1f; angle_x += 0.1f;
angle_y -= 0.1f; angle_y -= 0.1f;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment