//============================================================================ // 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 namespace vtkm { namespace rendering { class AxisAnnotation3D : public AxisAnnotation { private: protected: double maj_size, maj_toff; double min_size, min_toff; int axis; double invertx, inverty, invertz; double x0, y0, z0, x1, y1, z1; double lower, upper; double fontscale; float linewidth; Color color; //vector labels; ///<\todo: add text back in int moreOrLessTickAdjustment; public: AxisAnnotation3D() : AxisAnnotation() { axis = 0; color = Color(1,1,1); fontscale = 0.05; linewidth = 1.0; color = Color(1,1,1); moreOrLessTickAdjustment = 0; } virtual ~AxisAnnotation3D() { } void SetMoreOrLessTickAdjustment(int offset) { moreOrLessTickAdjustment = offset; } void SetColor(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(double size, double 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(double size, double offset) { min_size = size; min_toff = offset; } void SetWorldPosition(double x0_, double y0_, double z0_, double x1_, double y1_, double z1_) { x0 = x0_; y0 = y0_; z0 = z0_; x1 = x1_; y1 = y1_; z1 = z1_; } void SetLabelFontScale(double s) { fontscale = s; #if 0 for (unsigned int i=0; iSetScale(s); #endif } void SetRange(double l, double u) { lower = l; upper = u; } virtual void Render(View &, WorldAnnotator &worldannotator) { 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(); #if 0 while ((int)labels.size() < nmajor) { labels.push_back(new BillboardTextAnnotation(win,"test", color, fontscale, 0,0,0, false, 0)); } #endif for (unsigned int i=0; iSetText(val); //if (fabs(positions[i]) < 1e-10) // labels[i]->SetText("0"); labels[i]->SetPosition(xc - tx, yc - ty, zc - tz); labels[i]->SetAlignment(TextAnnotation::HCenter, TextAnnotation::VCenter); #endif } // minor ticks CalculateTicks(lower, upper, true, positions, proportions, moreOrLessTickAdjustment); unsigned int nminor = (unsigned int)proportions.size(); for (unsigned int i=0; iRender(view); } #endif } }; }} //namespace vtkm::rendering #endif // vtk_m_rendering_AxisAnnotation3D_h