//============================================================================ // Copyright (c) Kitware, Inc. // All rights reserved. // See LICENSE.txt for details. // This software is distributed WITHOUT ANY WARRANTY; without even // the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR // PURPOSE. See the above copyright notice for more information. // // Copyright 2016 Sandia Corporation. // Copyright 2016 UT-Battelle, LLC. // Copyright 2016 Los Alamos National Security. // // Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, // the U.S. Government retains certain rights in this software. // // Under the terms of Contract DE-AC52-06NA25396 with Los Alamos National // Laboratory (LANL), the U.S. Government retains certain rights in // this software. //============================================================================ #ifndef vtk_m_rendering_AxisAnnotation3D_h #define vtk_m_rendering_AxisAnnotation3D_h #include #include #include #include #include #include #include #include namespace vtkm { namespace rendering { class AxisAnnotation3D : public AxisAnnotation { private: protected: vtkm::Float64 maj_size, maj_toff; vtkm::Float64 min_size, min_toff; int axis; vtkm::Float32 invertx, inverty, invertz; vtkm::Float64 x0, y0, z0, x1, y1, z1; vtkm::Float64 lower, upper; vtkm::Float64 fontscale; vtkm::Float32 fontoffset; vtkm::Float32 linewidth; vtkm::rendering::Color color; std::vector labels; int moreOrLessTickAdjustment; public: AxisAnnotation3D() : AxisAnnotation() { axis = 0; color = Color(1,1,1); fontoffset = 0.1f; // world space offset from axis fontscale = 0.05; // screen space font size linewidth = 1.0; color = Color(1,1,1); moreOrLessTickAdjustment = 0; } virtual ~AxisAnnotation3D() { } void SetMoreOrLessTickAdjustment(int offset) { moreOrLessTickAdjustment = offset; } void SetColor(vtkm::rendering::Color c) { color = c; } void SetAxis(int a) { axis = a; } void SetTickInvert(bool x, bool y, bool z) { invertx = x ? +1 : -1; inverty = y ? +1 : -1; invertz = z ? +1 : -1; } void SetMajorTickSize(vtkm::Float64 size, vtkm::Float64 offset) { /// offset of 0 means the tick is inside the frame /// offset of 1 means the tick is outside the frame /// offset of 0.5 means the tick is centered on the frame maj_size = size; maj_toff = offset; } void SetMinorTickSize(vtkm::Float64 size, vtkm::Float64 offset) { min_size = size; min_toff = offset; } void SetWorldPosition(vtkm::Float64 x0_, vtkm::Float64 y0_, vtkm::Float64 z0_, vtkm::Float64 x1_, vtkm::Float64 y1_, vtkm::Float64 z1_) { x0 = x0_; y0 = y0_; z0 = z0_; x1 = x1_; y1 = y1_; z1 = z1_; } void SetLabelFontScale(vtkm::Float64 s) { fontscale = s; for (unsigned int i=0; iSetScale(vtkm::Float32(s)); } void SetLabelFontOffset(vtkm::Float32 off) { fontoffset = off; } void SetRange(vtkm::Float64 l, vtkm::Float64 u) { lower = l; upper = u; } virtual void Render(const vtkm::rendering::Camera &camera, const vtkm::rendering::WorldAnnotator &worldAnnotator, vtkm::rendering::Canvas &canvas) { bool infront = true; worldAnnotator.AddLine(x0,y0,z0, x1,y1,z1, linewidth, color, infront); std::vector positions; std::vector proportions; // major ticks CalculateTicks(lower, upper, false, positions, proportions, moreOrLessTickAdjustment); unsigned int nmajor = (unsigned int)proportions.size(); while (labels.size() < nmajor) { labels.push_back(new BillboardTextAnnotation("test", color, vtkm::Float32(fontscale), 0,0,0, 0)); } std::stringstream numberToString; for (unsigned int i=0; iSetText(numberToString.str()); //if (fabs(positions[i]) < 1e-10) // labels[i]->SetText("0"); labels[i]->SetPosition(vtkm::Float32(xc - tx), vtkm::Float32(yc - ty), vtkm::Float32(zc - tz)); labels[i]->SetAlignment(TextAnnotation::HCenter, TextAnnotation::VCenter); } // minor ticks CalculateTicks(lower, upper, true, positions, proportions, moreOrLessTickAdjustment); unsigned int nminor = (unsigned int)proportions.size(); for (unsigned int i=0; iRender(camera, worldAnnotator, canvas); } } }; }} //namespace vtkm::rendering #endif // vtk_m_rendering_AxisAnnotation3D_h