diff --git a/Examples/LaparoscopicCamera/main.cpp b/Examples/LaparoscopicCamera/main.cpp index 7de9b0b82136be444def10b5c1b5afd3b61ba697..4426a0505266a98090833c87c8feea9511837237 100644 --- a/Examples/LaparoscopicCamera/main.cpp +++ b/Examples/LaparoscopicCamera/main.cpp @@ -82,7 +82,7 @@ bool createCameraNavigationScene(std::shared_ptr<SDK> sdk, char* fileName) plane->getPlaneModel()->setWidth(5); staticObject->setModel(plane); - auto planeRendDetail = std::make_shared<RenderDetail>(SIMMEDTK_RENDER_FACES); + auto planeRendDetail = std::make_shared<RenderDetail>(SIMMEDTK_RENDER_NORMALS); Color grey(0.32, 0.32, 0.32, 1.0); @@ -164,24 +164,27 @@ void add2DOverlay(std::shared_ptr<VTKViewer> vtkViewer) //Add both to the renderer vtkViewer->addChartActor(chartActor.GetPointer(), chartScene.GetPointer()); + //---------------------------------------------------- + // Add data points representing the concentric circles + //---------------------------------------------------- // Create a table with some points in it... vtkNew<vtkTable> table; - vtkNew<vtkFloatArray> arrX; - arrX->SetName("X Axis"); - table->AddColumn(arrX.GetPointer()); + vtkNew<vtkFloatArray> circle1X; + circle1X->SetName("Circle 1 X"); + table->AddColumn(circle1X.GetPointer()); - vtkNew<vtkFloatArray> arrC; - arrC->SetName("Cosine"); - table->AddColumn(arrC.GetPointer()); + vtkNew<vtkFloatArray> circle1Y; + circle1Y->SetName("Circle 1 Y"); + table->AddColumn(circle1Y.GetPointer()); - vtkNew<vtkFloatArray> arrS; - arrS->SetName("Sine"); - table->AddColumn(arrS.GetPointer()); + vtkNew<vtkFloatArray> circle2X; + circle2X->SetName("Circle 2 X"); + table->AddColumn(circle2X.GetPointer()); - vtkNew<vtkFloatArray> arrT; - arrT->SetName("Tan"); - table->AddColumn(arrT.GetPointer()); + vtkNew<vtkFloatArray> circle2Y; + circle2Y->SetName("Circle 2 Y"); + table->AddColumn(circle2Y.GetPointer()); // Test charting with a few more points... int numPoints = 100; @@ -189,39 +192,117 @@ void add2DOverlay(std::shared_ptr<VTKViewer> vtkViewer) double xRange[2] = { 0.0, range }; double yRange[2] = { 0.0, range }; - int s; - float radius = range / 6; - float inc = 2*radius / (numPoints - 1); - table->SetNumberOfRows(numPoints); - /*chart->GetAxis(0)->SetRange(xRange); - chart->GetAxis(1)->SetRange(yRange);*/ + chart->GetAxis(0)->SetRange(xRange); + chart->GetAxis(1)->SetRange(yRange); /*chart->GetAxis(0)->SetUnscaledRange(xRange); chart->GetAxis(1)->SetUnscaledRange(yRange);*/ - for (int i = 0; i < numPoints; ++i) + table->SetNumberOfRows(numPoints + 1); + + double radius1 = range / 6; + double radius2 = range / 8; + double theta; + + for (int i = 0; i < numPoints; i++) { - if (sin(i * 44 / (7 * numPoints)) < 0) - s = -1; - else - s = 1; - - table->SetValue(i, 0, range / 2 + i*inc*s); - table->SetValue(i, 1, range / 2 + radius*cos(i * 22.0 / (7 * numPoints))); - table->SetValue(i, 2, range / 2 + radius*sin(i * 22.0 / (7 * numPoints))); - } + theta = 11.0 / 7 + i * 44.0 / (7 * numPoints); - // Add multiple line plots, setting the colors etc - vtkPlot *points = chart->AddPlot(vtkChart::LINE); - points->SetInputData(table.GetPointer(), 2, 1); - points->SetColor(0, 0, 0, 255); - points->SetWidth(1.0); - - /*vtkPlotPoints::SafeDownCast(points)->SetMarkerStyle(vtkPlotPoints::CROSS); - points = chart->AddPlot(vtkChart::LINE); - points->SetInputData(table.GetPointer(), 0, 2); - points->SetColor(0, 0, 0, 255); - points->SetWidth(1.0);*/ + table->SetValue(i, 0, range / 2 + radius1*cos(theta)); + table->SetValue(i, 1, range / 2 + radius1*sin(theta)); + + table->SetValue(i, 2, range / 2 + radius2*cos(theta)); + table->SetValue(i, 3, range / 2 + radius2*sin(theta)); + } + theta = 11.0 / 7; + table->SetValue(numPoints, 0, range / 2 + radius1*cos(theta)); + table->SetValue(numPoints, 1, range / 2 + radius1*sin(theta)); + table->SetValue(numPoints, 2, range / 2 + radius2*cos(theta)); + table->SetValue(numPoints, 3, range / 2 + radius2*sin(theta)); + + double lineWidth = 2.0; + vtkPlot *points1 = chart->AddPlot(vtkChart::LINE); + points1->SetInputData(table.GetPointer(), 0, 1); + points1->SetColor(1, 0, 0, 255); + points1->SetWidth(lineWidth); + + vtkPlot *points2 = chart->AddPlot(vtkChart::LINE); + points2->SetInputData(table.GetPointer(), 2, 3); + points2->SetColor(1, 0, 0, 255); + points2->SetWidth(lineWidth); + + //-------------------------------------------------- + // Add data points representing the parallel lines + //-------------------------------------------------- + vtkNew<vtkTable> table2; + + vtkNew<vtkFloatArray> parallelLineTopX; + parallelLineTopX->SetName("parallel Line Top X"); + table2->AddColumn(parallelLineTopX.GetPointer()); + + vtkNew<vtkFloatArray> parallelLineTopY; + parallelLineTopY->SetName("parallel Line Top Y"); + table2->AddColumn(parallelLineTopY.GetPointer()); + + vtkNew<vtkFloatArray> parallelLineBottomX; + parallelLineBottomX->SetName("parallel Line Bottom X"); + table2->AddColumn(parallelLineBottomX.GetPointer()); + + vtkNew<vtkFloatArray> parallelLineBottomY; + parallelLineBottomY->SetName("parallel Line Bottom Y"); + table2->AddColumn(parallelLineBottomY.GetPointer()); + + table2->SetNumberOfRows(2); + double deltaTheta=0.07; + + theta = 11.0 / 7 + (1 - deltaTheta)*11.0 / 7; + table2->SetValue(0, 0, range / 2 + radius1*cos(theta)); + table2->SetValue(0, 1, range / 2 + radius1*sin(theta)); + + theta = deltaTheta*11.0 / 7; + table2->SetValue(1, 0, range / 2 + radius1*cos(theta)); + table2->SetValue(1, 1, range / 2 + radius1*sin(theta)); + + theta = 11.0 / 7 + (1 + deltaTheta)*11.0 / 7; + table2->SetValue(0, 2, range / 2 + radius1*cos(theta)); + table2->SetValue(0, 3, range / 2 + radius1*sin(theta)); + + theta = -deltaTheta*11.0 / 7; + table2->SetValue(1, 2, range / 2 + radius1*cos(theta)); + table2->SetValue(1, 3, range / 2 + radius1*sin(theta)); + + vtkPlot *points3 = chart->AddPlot(vtkChart::LINE); + points3->SetInputData(table2.GetPointer(), 0, 1); + points3->SetColor(1, 0, 0, 255); + points3->SetWidth(lineWidth); + + vtkPlot *points4 = chart->AddPlot(vtkChart::LINE); + points4->SetInputData(table2.GetPointer(), 2, 3); + points4->SetColor(1, 0, 0, 255); + points4->SetWidth(lineWidth); + + //----------------------------------------------------------- + // Add data points to hack disabling the autoscaling of chart + //----------------------------------------------------------- + vtkNew<vtkTable> table3; + + vtkNew<vtkFloatArray> cornerPointX; + cornerPointX->SetName("Corner point X"); + table3->AddColumn(cornerPointX.GetPointer()); + + vtkNew<vtkFloatArray> cornerPointY; + cornerPointY->SetName("Corner point Y"); + table3->AddColumn(cornerPointY.GetPointer()); + + table3->SetNumberOfRows(2); + table3->SetValue(0, 0, 0); + table3->SetValue(0, 1, 0); + table3->SetValue(1, 0, range); + table3->SetValue(1, 1, range); + + vtkPlot *points5 = chart->AddPlot(vtkChart::POINTS); + points5->SetInputData(table3.GetPointer(), 0, 1); + points5->SetColor(255, 255, 255, 0); } ///