Loading files
3d097a032This file is pinned to the selected release. Download the original to open it in your design tool.
// Copyright (c) 2026 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#ifndef _Aspect_GridParams_HeaderFile
#define _Aspect_GridParams_HeaderFile
#include <Standard.hxx>
#include <Standard_DefineAlloc.hxx>
#include <Standard_NegativeValue.hxx>
#include <Aspect_GridDrawMode.hxx>
#include <Quantity_Color.hxx>
#include <gp_Pnt.hxx>
//! Grid appearance for V3d_View::GridDisplay: color, scale, bounds, arc, draw mode,
//! background and adaptive flags.
class Aspect_GridParams
{
public:
DEFINE_STANDARD_ALLOC
//! Construct with sensible defaults: grey lines on the plane origin with
//! axis coloring enabled, 1/100 plane-unit spacing, overlay mode,
//! unbounded in extent and radius.
Aspect_GridParams()
: myColor(Quantity_NOC_GRAY70),
myAccentColor(Quantity_NOC_GRAY50),
myOrigin(0.0, 0.0, 0.0),
myScale(0.01),
myScaleY(0.0),
myAccentScaleX(0.0),
myAccentScaleY(0.0),
myAccentAngularScale(0.0),
myLineThickness(0.01),
myRotationAngle(0.0),
mySizeX(0.0),
mySizeY(0.0),
myRadius(0.0),
myZOffset(0.0),
myAngleStart(0.0),
myAngleEnd(0.0),
myAngularDivisions(0),
myDrawMode(Aspect_GDM_Lines),
myIsBackground(false),
myIsDrawAxis(true),
myIsViewAdaptive(false)
{
}
//! Return grid line color.
const Quantity_Color& Color() const { return myColor; }
//! Set grid line color.
void SetColor(const Quantity_Color& theColor) { myColor = theColor; }
//! Return local offset of the grid origin within the plane.
const gp_Pnt& Origin() const { return myOrigin; }
//! Set local offset of the grid origin within the plane.
void SetOrigin(const gp_Pnt& theOrigin) { myOrigin = theOrigin; }
//! Return every-tenth-line / accent colour rendered by the shader.
const Quantity_Color& AccentColor() const { return myAccentColor; }
//! Set every-tenth-line / accent colour rendered by the shader.
void SetAccentColor(const Quantity_Color& theColor) { myAccentColor = theColor; }
//! Return accent overlay scale along the plane X/radial direction.
//! Zero disables the accent layer on that axis.
double AccentScaleX() const { return myAccentScaleX; }
//! Set accent overlay scale along the plane X/radial direction.
void SetAccentScaleX(const double theScale) { myAccentScaleX = theScale; }
//! Return accent overlay scale along the plane Y direction.
//! Zero disables the accent layer on that axis.
double AccentScaleY() const { return myAccentScaleY; }
//! Set accent overlay scale along the plane Y direction.
void SetAccentScaleY(const double theScale) { myAccentScaleY = theScale; }
//! Return accent overlay angular scale for circular-grid spokes.
//! Zero disables the angular accent layer.
double AccentAngularScale() const { return myAccentAngularScale; }
//! Set accent overlay angular scale for circular-grid spokes.
void SetAccentAngularScale(const double theScale) { myAccentAngularScale = theScale; }
//! Return major-grid scale factor along the plane X direction (cells per plane unit).
double Scale() const { return myScale; }
//! Set major-grid scale factor along the plane X direction (cells per plane unit).
//! Must be non-negative; zero is a valid "unused" sentinel.
void SetScale(const double theScale)
{
Standard_NegativeValue_Raise_if(theScale < 0.0, "invalid grid scale");
myScale = theScale;
}
//! Return explicit Y-direction scale. When 0.0, renderer falls back to Scale() (isotropic).
double ScaleY() const { return myScaleY; }
//! Set explicit Y-direction scale. Pass 0.0 to mirror Scale() (isotropic, default).
void SetScaleY(const double theScaleY)
{
Standard_NegativeValue_Raise_if(theScaleY < 0.0, "invalid grid Y-scale");
myScaleY = theScaleY;
}
//! Effective Y-direction scale actually consumed by the renderer.
double EffectiveScaleY() const { return myScaleY > 0.0 ? myScaleY : myScale; }
//! Return line thickness in plane units (minimum pixel-space line width is derived from fwidth).
double LineThickness() const { return myLineThickness; }
//! Set line thickness in plane units.
void SetLineThickness(const double theThickness)
{
Standard_NegativeValue_Raise_if(theThickness < 0.0, "invalid grid line thickness");
myLineThickness = theThickness;
}
//! Return in-plane rotation angle (radians) applied to the grid axes around the plane normal.
double RotationAngle() const { return myRotationAngle; }
//! Set in-plane rotation angle (radians) applied to the grid axes around the plane normal.
void SetRotationAngle(const double theAngle) { myRotationAngle = theAngle; }
//! Return the angular subdivision count of the half-circle for circular grids.
//! Zero means rectangular grid (default); any positive value switches the
//! renderer to polar rings (Scale -> radial step) and spokes at pi/N rad.
int AngularDivisions() const { return myAngularDivisions; }
//! Set angular subdivision count (0 = rectangular grid, N>0 = circular with N spokes per 180
//! deg).
void SetAngularDivisions(const int theDivisions) { myAngularDivisions = theDivisions; }
//! Return TRUE when the parameters describe a circular (polar) grid.
bool IsCircular() const { return myAngularDivisions > 0; }
//! Return rectangular bounded extent along plane X; 0.0 means unbounded.
double SizeX() const { return mySizeX; }
//! Set rectangular bounded extent along plane X; 0.0 means unbounded.
void SetSizeX(const double theSize)
{
Standard_NegativeValue_Raise_if(theSize < 0.0, "invalid grid X-size");
mySizeX = theSize;
}
//! Return rectangular bounded extent along plane Y; 0.0 means unbounded.
double SizeY() const { return mySizeY; }
//! Set rectangular bounded extent along plane Y; 0.0 means unbounded.
void SetSizeY(const double theSize)
{
Standard_NegativeValue_Raise_if(theSize < 0.0, "invalid grid Y-size");
mySizeY = theSize;
}
//! Return circular bounded radius; 0.0 means unbounded.
double Radius() const { return myRadius; }
//! Set circular bounded radius; 0.0 means unbounded.
void SetRadius(const double theRadius)
{
Standard_NegativeValue_Raise_if(theRadius < 0.0, "invalid grid radius");
myRadius = theRadius;
}
//! Return signed plane-normal offset applied at render time.
double ZOffset() const { return myZOffset; }
//! Set signed plane-normal offset applied at render and echo time.
void SetZOffset(const double theOffset) { myZOffset = theOffset; }
//! Return arc start angle (radians). Meaningful only when IsArc() is true.
double AngleStart() const { return myAngleStart; }
//! Return arc end angle (radians). Meaningful only when IsArc() is true.
double AngleEnd() const { return myAngleEnd; }
//! Restrict the circular grid to an angular wedge [start, end], walking CCW.
//! Equal start and end (e.g. 0.0 and 0.0) returns to full-circle rendering.
void SetArcRange(const double theStart, const double theEnd)
{
myAngleStart = theStart;
myAngleEnd = theEnd;
}
//! Return TRUE when the parameters describe a bounded rectangle or disc.
bool IsBounded() const { return mySizeX > 0.0 || mySizeY > 0.0 || myRadius > 0.0; }
//! Return TRUE when the circular grid is restricted to a sub-arc.
bool IsArc() const { return myAngleStart != myAngleEnd; }
//! Return draw mode: lines, points at grid intersections, or none.
Aspect_GridDrawMode DrawMode() const { return myDrawMode; }
//! Set draw mode. Aspect_GDM_None suppresses rendering entirely; Points draws
//! dots at grid-line intersections, Lines (default) draws the full grid.
void SetDrawMode(const Aspect_GridDrawMode theMode) { myDrawMode = theMode; }
//! Return TRUE if grid is drawn as a view-space background (behind all geometry).
bool IsBackground() const { return myIsBackground; }
//! Set background-mode rendering on/off.
void SetIsBackground(const bool theIsBackground) { myIsBackground = theIsBackground; }
//! Return TRUE if axis lines on the grid plane are drawn in red/green/blue.
bool IsDrawAxis() const { return myIsDrawAxis; }
//! Set axis coloring on/off.
void SetIsDrawAxis(const bool theIsDrawAxis) { myIsDrawAxis = theIsDrawAxis; }
//! Return TRUE if grid spacing and visible extents adapt to the camera view.
bool IsViewAdaptive() const { return myIsViewAdaptive; }
//! Set view-adaptive grid on/off. When enabled, shader renderer keeps the
//! screen-space grid step stable by scaling the cell spacing with camera zoom.
void SetIsViewAdaptive(const bool theIsViewAdaptive) { myIsViewAdaptive = theIsViewAdaptive; }
private:
Quantity_Color myColor;
Quantity_Color myAccentColor;
gp_Pnt myOrigin;
double myScale;
double myScaleY;
double myAccentScaleX;
double myAccentScaleY;
double myAccentAngularScale;
double myLineThickness;
double myRotationAngle;
double mySizeX;
double mySizeY;
double myRadius;
double myZOffset;
double myAngleStart;
double myAngleEnd;
int myAngularDivisions;
Aspect_GridDrawMode myDrawMode;
bool myIsBackground;
bool myIsDrawAxis;
bool myIsViewAdaptive;
};
#endif // _Aspect_GridParams_HeaderFile