Commit 6e5ae985 authored by ozantonkal's avatar ozantonkal

initial cloud widget implementation, fix safedowncasts

parent d394e233
......@@ -97,4 +97,11 @@ namespace temp_viz
// 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
removeActorFromRenderer(wam_itr->second.actor);
}
// Get the actor and set the user matrix
vtkSmartPointer<vtkLODActor> actor;
vtkLODActor *actor;
if (actor = vtkLODActor::SafeDownCast(WidgetAccessor::getActor(widget)))
{
vtkSmartPointer<vtkMatrix4x4> matrix = convertToVtkMatrix(pose.matrix);
......
......@@ -18,7 +18,7 @@ public:
void setColor(const Color& color)
{
vtkSmartPointer<vtkLODActor> lod_actor = vtkLODActor::SafeDownCast(actor);
vtkLODActor *lod_actor = vtkLODActor::SafeDownCast(actor);
Color c = vtkcolor(color);
lod_actor->GetMapper ()->ScalarVisibilityOff ();
lod_actor->GetProperty ()->SetColor (c.val);
......@@ -32,7 +32,7 @@ public:
void setPose(const Affine3f& pose)
{
vtkSmartPointer<vtkLODActor> lod_actor = vtkLODActor::SafeDownCast(actor);
vtkLODActor *lod_actor = vtkLODActor::SafeDownCast(actor);
vtkSmartPointer<vtkMatrix4x4> matrix = convertToVtkMatrix(pose.matrix);
lod_actor->SetUserMatrix (matrix);
lod_actor->Modified ();
......@@ -40,7 +40,7 @@ public:
void updatePose(const Affine3f& pose)
{
vtkSmartPointer<vtkLODActor> lod_actor = vtkLODActor::SafeDownCast(actor);
vtkLODActor *lod_actor = vtkLODActor::SafeDownCast(actor);
vtkSmartPointer<vtkMatrix4x4> matrix = lod_actor->GetUserMatrix();
if (!matrix)
{
......@@ -58,7 +58,7 @@ public:
Affine3f getPose() const
{
vtkSmartPointer<vtkLODActor> lod_actor = vtkLODActor::SafeDownCast(actor);
vtkLODActor *lod_actor = vtkLODActor::SafeDownCast(actor);
vtkSmartPointer<vtkMatrix4x4> matrix = lod_actor->GetUserMatrix();
Matx44f matrix_cv = convertToMatx(matrix);
return Affine3f(matrix_cv);
......
......@@ -53,7 +53,7 @@
cv::Mat cvcloud_load()
{
cv::Mat cloud(1, 20000, CV_32FC3);
std::ifstream ifs("d:/cloud_dragon.ply");
std::ifstream ifs("cloud_dragon.ply");
std::string str;
for(size_t i = 0; i < 11; ++i)
......@@ -99,23 +99,29 @@ TEST(Viz_viz3d, accuracy)
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::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("plane", pw);
// v.showWidget("plane", pw);
// v.showWidget("sphere", sw);
// v.showWidget("arrow", aw);
// v.showWidget("circle", cw);
// v.showWidget("cylinder", cyw);
v.showWidget("cube", cuw);
// v.showWidget("cube", cuw);
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;
// v.showPointCloud("cld",cloud, colors);
while(!v.wasStopped())
{
// 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 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));
lw.setLineWidth(lw.getLineWidth()+pos_x * 10);
......@@ -129,8 +135,9 @@ TEST(Viz_viz3d, accuracy)
cyw.setPose(cloudPosition);
lw.setPose(cloudPosition);
cuw.setPose(cloudPosition);
v.showWidget("plane", pw, cloudPosition);
v.showWidget("pcw",pcw, cloudPosition);
v.showWidget("pcw2",pcw2, cloudPosition2);
// v.showWidget("plane", pw, cloudPosition);
angle_x += 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