Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-09-13 09:17:36

0001 // Copyright (c) 1995-1999 Matra Datavision
0002 // Copyright (c) 1999-2014 OPEN CASCADE SAS
0003 //
0004 // This file is part of Open CASCADE Technology software library.
0005 //
0006 // This library is free software; you can redistribute it and/or modify it under
0007 // the terms of the GNU Lesser General Public License version 2.1 as published
0008 // by the Free Software Foundation, with special exception defined in the file
0009 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
0010 // distribution for complete text of the license and disclaimer of any warranty.
0011 //
0012 // Alternatively, this file may be used under the terms of Open CASCADE
0013 // commercial license or contractual agreement.
0014 
0015 #ifndef _Prs3d_Drawer_HeaderFile
0016 #define _Prs3d_Drawer_HeaderFile
0017 
0018 #include <Standard.hxx>
0019 
0020 #include <Standard_Integer.hxx>
0021 #include <Aspect_TypeOfDeflection.hxx>
0022 #include <Graphic3d_GroupAspect.hxx>
0023 #include <Graphic3d_PresentationAttributes.hxx>
0024 #include <Graphic3d_ShaderProgram.hxx>
0025 #include <Standard_Real.hxx>
0026 #include <Prs3d_VertexDrawMode.hxx>
0027 #include <Prs3d_DimensionUnits.hxx>
0028 #include <Prs3d_TypeOfHLR.hxx>
0029 #include <Standard_Transient.hxx>
0030 #include <GeomAbs_Shape.hxx>
0031 
0032 class Prs3d_IsoAspect;
0033 class Prs3d_LineAspect;
0034 class Prs3d_TextAspect;
0035 class Prs3d_ShadingAspect;
0036 class Prs3d_PointAspect;
0037 class Prs3d_PlaneAspect;
0038 class Prs3d_ArrowAspect;
0039 class Prs3d_DatumAspect;
0040 class Prs3d_DimensionAspect;
0041 class TCollection_AsciiString;
0042 
0043 //! A graphic attribute manager which governs how
0044 //! objects such as color, width, line thickness and deflection are displayed.
0045 //! A drawer includes an instance of the Aspect classes with particular default values.
0046 class Prs3d_Drawer : public Graphic3d_PresentationAttributes
0047 {
0048   DEFINE_STANDARD_RTTIEXT(Prs3d_Drawer, Graphic3d_PresentationAttributes)
0049 public:
0050   //! Default constructor.
0051   Standard_EXPORT Prs3d_Drawer();
0052 
0053   //! Setup all own aspects with default values.
0054   Standard_EXPORT void SetupOwnDefaults();
0055 
0056   //! Sets the type of chordal deflection.
0057   //! This indicates whether the deflection value is absolute or relative to the size of the object.
0058   Standard_EXPORT void SetTypeOfDeflection(const Aspect_TypeOfDeflection theTypeOfDeflection);
0059 
0060   //! Returns the type of chordal deflection.
0061   //! This indicates whether the deflection value is absolute or relative to the size of the object.
0062   Aspect_TypeOfDeflection TypeOfDeflection() const
0063   {
0064     return myHasOwnTypeOfDeflection || myLink.IsNull() ? myTypeOfDeflection
0065                                                        : myLink->TypeOfDeflection();
0066   }
0067 
0068   //! Returns true if the drawer has a type of deflection setting active.
0069   bool HasOwnTypeOfDeflection() const { return myHasOwnTypeOfDeflection; }
0070 
0071   //! Resets HasOwnTypeOfDeflection() flag, e.g. undoes SetTypeOfDeflection().
0072   void UnsetOwnTypeOfDeflection()
0073   {
0074     myHasOwnTypeOfDeflection = false;
0075     myTypeOfDeflection       = Aspect_TOD_RELATIVE;
0076   }
0077 
0078   //! Defines the maximal chordial deviation when drawing any curve.
0079   //! Even if the type of deviation is set to TOD_Relative, this value is used by:
0080   //!   Prs3d_DeflectionCurve
0081   //!   Prs3d_WFDeflectionSurface
0082   //!   Prs3d_WFDeflectionRestrictedFace
0083   void SetMaximalChordialDeviation(const double theChordialDeviation)
0084   {
0085     myChordialDeviation = theChordialDeviation;
0086   }
0087 
0088   //! Returns the maximal chordal deviation. The default value is 0.0001.
0089   //! Drawings of curves or patches are made with respect to an absolute maximal chordal deviation.
0090   double MaximalChordialDeviation() const
0091   {
0092     return myChordialDeviation > 0.0
0093              ? myChordialDeviation
0094              : (!myLink.IsNull() ? myLink->MaximalChordialDeviation() : 0.0001);
0095   }
0096 
0097   //! Returns true if the drawer has a maximal chordial deviation setting active.
0098   bool HasOwnMaximalChordialDeviation() const { return myChordialDeviation > 0.0; }
0099 
0100   //! Resets HasOwnMaximalChordialDeviation() flag, e.g. undoes SetMaximalChordialDeviation().
0101   void UnsetOwnMaximalChordialDeviation() { myChordialDeviation = -1.0; }
0102 
0103   //! Sets the type of HLR algorithm used by drawer's interactive objects
0104   Standard_EXPORT void SetTypeOfHLR(const Prs3d_TypeOfHLR theTypeOfHLR);
0105 
0106   //! Returns the type of HLR algorithm currently in use.
0107   Standard_EXPORT Prs3d_TypeOfHLR TypeOfHLR() const;
0108 
0109   //! Returns true if the type of HLR is not equal to Prs3d_TOH_NotSet.
0110   bool HasOwnTypeOfHLR() const { return (myTypeOfHLR != Prs3d_TOH_NotSet); }
0111 
0112   //! Defines the maximum value allowed for the first and last
0113   //! parameters of an infinite curve.
0114   void SetMaximalParameterValue(const double theValue) { myMaximalParameterValue = theValue; }
0115 
0116   //! Sets the maximum value allowed for the first and last parameters of an infinite curve.
0117   //! By default, this value is 500000.
0118   double MaximalParameterValue() const
0119   {
0120     return myMaximalParameterValue > 0.0
0121              ? myMaximalParameterValue
0122              : (!myLink.IsNull() ? myLink->MaximalParameterValue() : 500000.0);
0123   }
0124 
0125   //! Returns true if the drawer has a maximum value allowed for the first and last
0126   //! parameters of an infinite curve setting active.
0127   bool HasOwnMaximalParameterValue() const { return myMaximalParameterValue > 0.0; }
0128 
0129   //! Resets HasOwnMaximalParameterValue() flag, e.g. undoes SetMaximalParameterValue().
0130   void UnsetOwnMaximalParameterValue() { myMaximalParameterValue = -1.0; }
0131 
0132   //! Sets IsoOnPlane on or off by setting the parameter theIsEnabled to true or false.
0133   Standard_EXPORT void SetIsoOnPlane(const bool theIsEnabled);
0134 
0135   //! Returns True if the drawing of isos on planes is enabled.
0136   bool IsoOnPlane() const
0137   {
0138     return myHasOwnIsoOnPlane || myLink.IsNull() ? myIsoOnPlane : myLink->IsoOnPlane();
0139   }
0140 
0141   //! Returns true if the drawer has IsoOnPlane setting active.
0142   bool HasOwnIsoOnPlane() const { return myHasOwnIsoOnPlane; }
0143 
0144   //! Resets HasOwnIsoOnPlane() flag, e.g. undoes SetIsoOnPlane().
0145   void UnsetOwnIsoOnPlane()
0146   {
0147     myHasOwnIsoOnPlane = false;
0148     myIsoOnPlane       = false;
0149   }
0150 
0151   //! Returns True if the drawing of isos on triangulation is enabled.
0152   bool IsoOnTriangulation() const
0153   {
0154     return myHasOwnIsoOnTriangulation || myLink.IsNull() ? myIsoOnTriangulation
0155                                                          : myLink->IsoOnTriangulation();
0156   }
0157 
0158   //! Returns true if the drawer has IsoOnTriangulation setting active.
0159   bool HasOwnIsoOnTriangulation() const { return myHasOwnIsoOnTriangulation; }
0160 
0161   //! Resets HasOwnIsoOnTriangulation() flag, e.g. undoes SetIsoOnTriangulation().
0162   void UnsetOwnIsoOnTriangulation()
0163   {
0164     myHasOwnIsoOnTriangulation = false;
0165     myIsoOnTriangulation       = false;
0166   }
0167 
0168   //! Enables or disables isolines on triangulation by setting the parameter theIsEnabled to true or
0169   //! false.
0170   Standard_EXPORT void SetIsoOnTriangulation(const bool theToEnable);
0171 
0172   //! Sets the discretisation parameter theValue.
0173   void SetDiscretisation(const int theValue) { myNbPoints = theValue; }
0174 
0175   //! Returns the discretisation setting.
0176   int Discretisation() const
0177   {
0178     return myNbPoints != -1 ? myNbPoints : (!myLink.IsNull() ? myLink->Discretisation() : 30);
0179   }
0180 
0181   //! Returns true if the drawer has discretisation setting active.
0182   bool HasOwnDiscretisation() const { return myNbPoints != -1; }
0183 
0184   //! Resets HasOwnDiscretisation() flag, e.g. undoes SetDiscretisation().
0185   void UnsetOwnDiscretisation() { myNbPoints = -1; }
0186 
0187   //! Sets the deviation coefficient theCoefficient.
0188   //! Also sets the hasOwnDeviationCoefficient flag to true and
0189   //! myPreviousDeviationCoefficient
0190   Standard_EXPORT void SetDeviationCoefficient(const double theCoefficient);
0191 
0192   //! Returns the deviation coefficient.
0193   //! Drawings of curves or patches are made with respect
0194   //! to a maximal chordal deviation. A Deviation coefficient
0195   //! is used in the shading display mode. The shape is
0196   //! seen decomposed into triangles. These are used to
0197   //! calculate reflection of light from the surface of the
0198   //! object. The triangles are formed from chords of the
0199   //! curves in the shape. The deviation coefficient gives
0200   //! the highest value of the angle with which a chord can
0201   //! deviate from a tangent to a curve. If this limit is
0202   //! reached, a new triangle is begun.
0203   //! This deviation is absolute and is set through the
0204   //! method: SetMaximalChordialDeviation. The default value is 0.001.
0205   //! In drawing shapes, however, you are allowed to ask
0206   //! for a relative deviation. This deviation will be:
0207   //! SizeOfObject * DeviationCoefficient.
0208   double DeviationCoefficient() const
0209   {
0210     return myDeviationCoefficient > 0.0
0211              ? myDeviationCoefficient
0212              : (!myLink.IsNull() ? myLink->DeviationCoefficient() : 0.001);
0213   }
0214 
0215   //! Resets HasOwnDeviationCoefficient() flag, e.g. undoes previous SetDeviationCoefficient().
0216   void SetDeviationCoefficient() { myDeviationCoefficient = -1.0; }
0217 
0218   //! Returns true if there is a local setting for deviation
0219   //! coefficient in this framework for a specific interactive object.
0220   bool HasOwnDeviationCoefficient() const { return myDeviationCoefficient > 0.0; }
0221 
0222   //! Saves the previous value used for the chordal
0223   //! deviation coefficient.
0224   double PreviousDeviationCoefficient() const
0225   {
0226     return HasOwnDeviationCoefficient() ? myPreviousDeviationCoefficient : 0.0;
0227   }
0228 
0229   //! Updates the previous value used for the chordal deviation coefficient to the current state.
0230   void UpdatePreviousDeviationCoefficient()
0231   {
0232     if (HasOwnDeviationCoefficient())
0233     {
0234       myPreviousDeviationCoefficient = DeviationCoefficient();
0235     }
0236   }
0237 
0238   //! Sets the deviation angle theAngle.
0239   //! Also sets the hasOwnDeviationAngle flag to true, and myPreviousDeviationAngle.
0240   Standard_EXPORT void SetDeviationAngle(const double theAngle);
0241 
0242   //! Returns the value for deviation angle in radians, 20 * M_PI / 180 by default.
0243   double DeviationAngle() const
0244   {
0245     return myDeviationAngle > 0.0
0246              ? myDeviationAngle
0247              : (!myLink.IsNull() ? myLink->DeviationAngle() : 20.0 * M_PI / 180.0);
0248   }
0249 
0250   //! Resets HasOwnDeviationAngle() flag, e.g. undoes previous SetDeviationAngle().
0251   void SetDeviationAngle() { myDeviationAngle = -1.0; }
0252 
0253   //! Returns true if there is a local setting for deviation
0254   //! angle in this framework for a specific interactive object.
0255   bool HasOwnDeviationAngle() const { return myDeviationAngle > 0.0; }
0256 
0257   //! Returns the previous deviation angle
0258   double PreviousDeviationAngle() const
0259   {
0260     return HasOwnDeviationAngle() ? myPreviousDeviationAngle : 0.0;
0261   }
0262 
0263   //! Updates the previous deviation angle to the current value
0264   void UpdatePreviousDeviationAngle()
0265   {
0266     if (HasOwnDeviationAngle())
0267     {
0268       myPreviousDeviationAngle = DeviationAngle();
0269     }
0270   }
0271 
0272   //! Sets IsAutoTriangulated on or off by setting the parameter theIsEnabled to true or false.
0273   //! If this flag is True automatic re-triangulation with deflection-check logic will be applied.
0274   //! Else this feature will be disable and triangulation is expected to be computed by application
0275   //! itself and no shading presentation at all if unavailable.
0276   Standard_EXPORT void SetAutoTriangulation(const bool theIsEnabled);
0277 
0278   //! Returns True if automatic triangulation is enabled.
0279   bool IsAutoTriangulation() const
0280   {
0281     return myHasOwnIsAutoTriangulated || myLink.IsNull() ? myIsAutoTriangulated
0282                                                          : myLink->IsAutoTriangulation();
0283   }
0284 
0285   //! Returns true if the drawer has IsoOnPlane setting active.
0286   bool HasOwnIsAutoTriangulation() const { return myHasOwnIsAutoTriangulated; }
0287 
0288   //! Resets HasOwnIsAutoTriangulation() flag, e.g. undoes SetAutoTriangulation().
0289   void UnsetOwnIsAutoTriangulation()
0290   {
0291     myHasOwnIsAutoTriangulated = false;
0292     myIsAutoTriangulated       = true;
0293   }
0294 
0295   //! Defines own attributes for drawing an U isoparametric curve of a face,
0296   //! settings from linked Drawer or NULL if neither was set.
0297   //!
0298   //! These attributes are used by the following algorithms:
0299   //!   Prs3d_WFDeflectionSurface
0300   //!   Prs3d_WFDeflectionRestrictedFace
0301   Standard_EXPORT const occ::handle<Prs3d_IsoAspect>& UIsoAspect() const;
0302 
0303   void SetUIsoAspect(const occ::handle<Prs3d_IsoAspect>& theAspect) { myUIsoAspect = theAspect; }
0304 
0305   //! Returns true if the drawer has its own attribute for
0306   //! UIso aspect that overrides the one in the link.
0307   bool HasOwnUIsoAspect() const { return !myUIsoAspect.IsNull(); }
0308 
0309   //! Defines own attributes for drawing an V isoparametric curve of a face,
0310   //! settings from linked Drawer or NULL if neither was set.
0311   //!
0312   //! These attributes are used by the following algorithms:
0313   //!   Prs3d_WFDeflectionSurface
0314   //!   Prs3d_WFDeflectionRestrictedFace
0315   Standard_EXPORT const occ::handle<Prs3d_IsoAspect>& VIsoAspect() const;
0316 
0317   //! Sets the appearance of V isoparameters - theAspect.
0318   void SetVIsoAspect(const occ::handle<Prs3d_IsoAspect>& theAspect) { myVIsoAspect = theAspect; }
0319 
0320   //! Returns true if the drawer has its own attribute for
0321   //! VIso aspect that overrides the one in the link.
0322   bool HasOwnVIsoAspect() const { return !myVIsoAspect.IsNull(); }
0323 
0324   //! Returns own wire aspect settings, settings from linked Drawer or NULL if neither was set.
0325   //! These attributes are used by the algorithm Prs3d_WFShape.
0326   Standard_EXPORT const occ::handle<Prs3d_LineAspect>& WireAspect() const;
0327 
0328   //! Sets the parameter theAspect for display of wires.
0329   void SetWireAspect(const occ::handle<Prs3d_LineAspect>& theAspect) { myWireAspect = theAspect; }
0330 
0331   //! Returns true if the drawer has its own attribute for
0332   //! wire aspect that overrides the one in the link.
0333   bool HasOwnWireAspect() const { return !myWireAspect.IsNull(); }
0334 
0335   //! Sets WireDraw on or off by setting the parameter theIsEnabled to true or false.
0336   Standard_EXPORT void SetWireDraw(const bool theIsEnabled);
0337 
0338   //! Returns True if the drawing of the wire is enabled.
0339   bool WireDraw() const
0340   {
0341     return myHasOwnWireDraw || myLink.IsNull() ? myWireDraw : myLink->WireDraw();
0342   }
0343 
0344   //! Returns true if the drawer has its own attribute for
0345   //! "draw wires" flag that overrides the one in the link.
0346   bool HasOwnWireDraw() const { return myHasOwnWireDraw; }
0347 
0348   //! Resets HasOwnWireDraw() flag, e.g. undoes SetWireDraw().
0349   void UnsetOwnWireDraw()
0350   {
0351     myHasOwnWireDraw = false;
0352     myWireDraw       = true;
0353   }
0354 
0355   //! Returns own point aspect setting, settings from linked Drawer or NULL if neither was set.
0356   //! These attributes are used by the algorithms Prs3d_Point.
0357   Standard_EXPORT const occ::handle<Prs3d_PointAspect>& PointAspect() const;
0358 
0359   //! Sets the parameter theAspect for display attributes of points
0360   void SetPointAspect(const occ::handle<Prs3d_PointAspect>& theAspect)
0361   {
0362     myPointAspect = theAspect;
0363   }
0364 
0365   //! Returns true if the drawer has its own attribute for
0366   //! point aspect that overrides the one in the link.
0367   bool HasOwnPointAspect() const { return !myPointAspect.IsNull(); }
0368 
0369   //! Sets own point aspect, which is a yellow Aspect_TOM_PLUS marker by default.
0370   //! Returns FALSE if the drawer already has its own attribute for point aspect.
0371   Standard_EXPORT bool SetupOwnPointAspect(
0372     const occ::handle<Prs3d_Drawer>& theDefaults = occ::handle<Prs3d_Drawer>());
0373 
0374   //! Returns own settings for line aspects, settings from linked Drawer or NULL if neither was set.
0375   //! These attributes are used by the following algorithms:
0376   //!   Prs3d_Curve
0377   //!   Prs3d_Line
0378   //!   Prs3d_HLRShape
0379   Standard_EXPORT const occ::handle<Prs3d_LineAspect>& LineAspect() const;
0380 
0381   //! Sets the parameter theAspect for display attributes of lines.
0382   void SetLineAspect(const occ::handle<Prs3d_LineAspect>& theAspect) { myLineAspect = theAspect; }
0383 
0384   //! Returns true if the drawer has its own attribute for
0385   //! line aspect that overrides the one in the link.
0386   bool HasOwnLineAspect() const { return !myLineAspect.IsNull(); }
0387 
0388   //! Sets own line aspects, which are
0389   //! single U and single V gray75 solid isolines (::UIsoAspect(), ::VIsoAspect()),
0390   //! red wire (::WireAspect()), yellow line (::LineAspect()),
0391   //! yellow seen line (::SeenLineAspect()), dashed yellow hidden line (::HiddenLineAspect()),
0392   //! green free boundary (::FreeBoundaryAspect()), yellow unfree boundary
0393   //! (::UnFreeBoundaryAspect()). Returns FALSE if own line aspect are already set.
0394   Standard_EXPORT bool SetOwnLineAspects(
0395     const occ::handle<Prs3d_Drawer>& theDefaults = occ::handle<Prs3d_Drawer>());
0396 
0397   //! Sets own line aspects for datums.
0398   //! Returns FALSE if own line for datums are already set.
0399   Standard_EXPORT bool SetOwnDatumAspects(
0400     const occ::handle<Prs3d_Drawer>& theDefaults = occ::handle<Prs3d_Drawer>());
0401 
0402   //! Returns own settings for text aspect, settings from linked Drawer or NULL if neither was set.
0403   Standard_EXPORT const occ::handle<Prs3d_TextAspect>& TextAspect() const;
0404 
0405   //! Sets the parameter theAspect for display attributes of text.
0406   void SetTextAspect(const occ::handle<Prs3d_TextAspect>& theAspect) { myTextAspect = theAspect; }
0407 
0408   //! Returns true if the drawer has its own attribute for
0409   //! text aspect that overrides the one in the link.
0410   bool HasOwnTextAspect() const { return !myTextAspect.IsNull(); }
0411 
0412   //! Returns own settings for shading aspects, settings from linked Drawer or NULL if neither was
0413   //! set.
0414   Standard_EXPORT const occ::handle<Prs3d_ShadingAspect>& ShadingAspect() const;
0415 
0416   //! Sets the parameter theAspect for display attributes of shading.
0417   void SetShadingAspect(const occ::handle<Prs3d_ShadingAspect>& theAspect)
0418   {
0419     myShadingAspect = theAspect;
0420   }
0421 
0422   //! Returns true if the drawer has its own attribute for
0423   //! shading aspect that overrides the one in the link.
0424   bool HasOwnShadingAspect() const { return !myShadingAspect.IsNull(); }
0425 
0426   //! Sets own shading aspect, which is Graphic3d_NameOfMaterial_Brass material by default.
0427   //! Returns FALSE if the drawer already has its own attribute for shading aspect.
0428   Standard_EXPORT bool SetupOwnShadingAspect(
0429     const occ::handle<Prs3d_Drawer>& theDefaults = occ::handle<Prs3d_Drawer>());
0430 
0431   //! Returns own settings for seen line aspects, settings of linked Drawer or NULL if neither was
0432   //! set.
0433   Standard_EXPORT const occ::handle<Prs3d_LineAspect>& SeenLineAspect() const;
0434 
0435   //! Sets the parameter theAspect for the display of seen lines in hidden line removal mode.
0436   void SetSeenLineAspect(const occ::handle<Prs3d_LineAspect>& theAspect)
0437   {
0438     mySeenLineAspect = theAspect;
0439   }
0440 
0441   //! Returns true if the drawer has its own attribute for
0442   //! seen line aspect that overrides the one in the link.
0443   bool HasOwnSeenLineAspect() const { return !mySeenLineAspect.IsNull(); }
0444 
0445   //! Returns own settings for the appearance of planes, settings from linked Drawer or NULL if
0446   //! neither was set.
0447   Standard_EXPORT const occ::handle<Prs3d_PlaneAspect>& PlaneAspect() const;
0448 
0449   //! Sets the parameter theAspect for the display of planes.
0450   void SetPlaneAspect(const occ::handle<Prs3d_PlaneAspect>& theAspect)
0451   {
0452     myPlaneAspect = theAspect;
0453   }
0454 
0455   //! Returns true if the drawer has its own attribute for
0456   //! plane aspect that overrides the one in the link.
0457   bool HasOwnPlaneAspect() const { return !myPlaneAspect.IsNull(); }
0458 
0459   //! Returns own attributes for display of arrows, settings from linked Drawer or NULL if neither
0460   //! was set.
0461   Standard_EXPORT const occ::handle<Prs3d_ArrowAspect>& ArrowAspect() const;
0462 
0463   //! Sets the parameter theAspect for display attributes of arrows.
0464   void SetArrowAspect(const occ::handle<Prs3d_ArrowAspect>& theAspect)
0465   {
0466     myArrowAspect = theAspect;
0467   }
0468 
0469   //! Returns true if the drawer has its own attribute for
0470   //! arrow aspect that overrides the one in the link.
0471   bool HasOwnArrowAspect() const { return !myArrowAspect.IsNull(); }
0472 
0473   //! Enables the drawing of an arrow at the end of each line.
0474   //! By default the arrows are not drawn.
0475   Standard_EXPORT void SetLineArrowDraw(const bool theIsEnabled);
0476 
0477   //! Returns True if drawing an arrow at the end of each edge is enabled
0478   //! and False otherwise (the default).
0479   bool LineArrowDraw() const
0480   {
0481     return myHasOwnLineArrowDraw || myLink.IsNull() ? myLineArrowDraw : myLink->LineArrowDraw();
0482   }
0483 
0484   //! Returns true if the drawer has its own attribute for
0485   //! "draw arrow" flag that overrides the one in the link.
0486   bool HasOwnLineArrowDraw() const { return myHasOwnLineArrowDraw; }
0487 
0488   //! Reset HasOwnLineArrowDraw() flag, e.g. undoes SetLineArrowDraw().
0489   void UnsetOwnLineArrowDraw()
0490   {
0491     myHasOwnLineArrowDraw = false;
0492     myLineArrowDraw       = false;
0493   }
0494 
0495   //! Returns own settings for hidden line aspects, settings from linked Drawer or NULL if neither
0496   //! was set.
0497   Standard_EXPORT const occ::handle<Prs3d_LineAspect>& HiddenLineAspect() const;
0498 
0499   //! Sets the parameter theAspect for the display of hidden lines in hidden line removal mode.
0500   void SetHiddenLineAspect(const occ::handle<Prs3d_LineAspect>& theAspect)
0501   {
0502     myHiddenLineAspect = theAspect;
0503   }
0504 
0505   //! Returns true if the drawer has its own attribute for
0506   //! hidden lines aspect that overrides the one in the link.
0507   bool HasOwnHiddenLineAspect() const { return !myHiddenLineAspect.IsNull(); }
0508 
0509   //! Returns true if the hidden lines are to be drawn.
0510   //! By default the hidden lines are not drawn.
0511   bool DrawHiddenLine() const
0512   {
0513     return myHasOwnDrawHiddenLine || myLink.IsNull() ? myDrawHiddenLine : myLink->DrawHiddenLine();
0514   }
0515 
0516   //! Enables the DrawHiddenLine function.
0517   Standard_EXPORT void EnableDrawHiddenLine();
0518 
0519   //! Disables the DrawHiddenLine function.
0520   Standard_EXPORT void DisableDrawHiddenLine();
0521 
0522   //! Returns true if the drawer has its own attribute for
0523   //! "draw hidden lines" flag that overrides the one in the link.
0524   bool HasOwnDrawHiddenLine() const { return myHasOwnDrawHiddenLine; }
0525 
0526   //! Resets HasOwnDrawHiddenLine() flag, e.g. unsets
0527   //! EnableDrawHiddenLine()/DisableDrawHiddenLine().
0528   void UnsetOwnDrawHiddenLine()
0529   {
0530     myHasOwnDrawHiddenLine = false;
0531     myDrawHiddenLine       = false;
0532   }
0533 
0534   //! Returns own settings for the appearance of vectors, settings from linked Drawer or NULL if
0535   //! neither was set.
0536   Standard_EXPORT const occ::handle<Prs3d_LineAspect>& VectorAspect() const;
0537 
0538   //! Sets the modality theAspect for the display of vectors.
0539   void SetVectorAspect(const occ::handle<Prs3d_LineAspect>& theAspect)
0540   {
0541     myVectorAspect = theAspect;
0542   }
0543 
0544   //! Returns true if the drawer has its own attribute for
0545   //! vector aspect that overrides the one in the link.
0546   bool HasOwnVectorAspect() const { return !myVectorAspect.IsNull(); }
0547 
0548   //! Sets the mode of visualization of vertices of a TopoDS_Shape instance.
0549   //! By default, only stand-alone vertices (not belonging topologically to an edge) are drawn,
0550   //! that corresponds to Prs3d_VDM_Standalone mode.
0551   //! Switching to Prs3d_VDM_Standalone mode makes all shape's vertices visible.
0552   //! To inherit this parameter from the global drawer instance ("the link") when it is present,
0553   //! Prs3d_VDM_Inherited value should be used.
0554   Standard_EXPORT void SetVertexDrawMode(const Prs3d_VertexDrawMode theMode);
0555 
0556   //! Returns the current mode of visualization of vertices of a TopoDS_Shape instance.
0557   Standard_EXPORT Prs3d_VertexDrawMode VertexDrawMode() const;
0558 
0559   //! Returns true if the vertex draw mode is not equal to <b>Prs3d_VDM_Inherited</b>.
0560   //! This means that individual vertex draw mode value (i.e. not inherited from the global
0561   //! drawer) is used for a specific interactive object.
0562   bool HasOwnVertexDrawMode() const { return (myVertexDrawMode != Prs3d_VDM_Inherited); }
0563 
0564   //! Returns own settings for the appearance of datums, settings from linked Drawer or NULL if
0565   //! neither was set.
0566   Standard_EXPORT const occ::handle<Prs3d_DatumAspect>& DatumAspect() const;
0567 
0568   //! Sets the modality theAspect for the display of datums.
0569   void SetDatumAspect(const occ::handle<Prs3d_DatumAspect>& theAspect)
0570   {
0571     myDatumAspect = theAspect;
0572   }
0573 
0574   //! Returns true if the drawer has its own attribute for
0575   //! datum aspect that overrides the one in the link.
0576   bool HasOwnDatumAspect() const { return !myDatumAspect.IsNull(); }
0577 
0578   //! Returns own LineAspect for section wire, settings from linked Drawer or NULL if neither was
0579   //! set. These attributes are used by the algorithm Prs3d_WFShape.
0580   Standard_EXPORT const occ::handle<Prs3d_LineAspect>& SectionAspect() const;
0581 
0582   //! Sets the parameter theAspect for display attributes of sections.
0583   void SetSectionAspect(const occ::handle<Prs3d_LineAspect>& theAspect)
0584   {
0585     mySectionAspect = theAspect;
0586   }
0587 
0588   //! Returns true if the drawer has its own attribute for
0589   //! section aspect that overrides the one in the link.
0590   bool HasOwnSectionAspect() const { return !mySectionAspect.IsNull(); }
0591 
0592   //! Sets the parameter theAspect for the display of free boundaries.
0593   //! The method sets aspect owned by the drawer that will be used during
0594   //! visualization instead of the one set in link.
0595   void SetFreeBoundaryAspect(const occ::handle<Prs3d_LineAspect>& theAspect)
0596   {
0597     myFreeBoundaryAspect = theAspect;
0598   }
0599 
0600   //! Returns own settings for presentation of free boundaries, settings from linked Drawer or NULL
0601   //! if neither was set. In other words, this settings affect boundaries which are not shared.
0602   //! These attributes are used by the algorithm Prs3d_WFShape
0603   Standard_EXPORT const occ::handle<Prs3d_LineAspect>& FreeBoundaryAspect() const;
0604 
0605   //! Returns true if the drawer has its own attribute for
0606   //! free boundaries aspect that overrides the one in the link.
0607   bool HasOwnFreeBoundaryAspect() const { return !myFreeBoundaryAspect.IsNull(); }
0608 
0609   //! Enables or disables drawing of free boundaries for shading presentations.
0610   //! The method sets drawing flag owned by the drawer that will be used during
0611   //! visualization instead of the one set in link.
0612   //! theIsEnabled is a boolean flag indicating whether the free boundaries should be
0613   //! drawn or not.
0614   Standard_EXPORT void SetFreeBoundaryDraw(const bool theIsEnabled);
0615 
0616   //! Returns True if the drawing of the free boundaries is enabled
0617   //! True is the default setting.
0618   bool FreeBoundaryDraw() const
0619   {
0620     return myHasOwnFreeBoundaryDraw || myLink.IsNull() ? myFreeBoundaryDraw
0621                                                        : myLink->FreeBoundaryDraw();
0622   }
0623 
0624   //! Returns true if the drawer has its own attribute for
0625   //! "draw free boundaries" flag that overrides the one in the link.
0626   bool HasOwnFreeBoundaryDraw() const { return myHasOwnFreeBoundaryDraw; }
0627 
0628   //! Resets HasOwnFreeBoundaryDraw() flag, e.g. undoes SetFreeBoundaryDraw().
0629   void UnsetOwnFreeBoundaryDraw()
0630   {
0631     myHasOwnFreeBoundaryDraw = false;
0632     myFreeBoundaryDraw       = true;
0633   }
0634 
0635   //! Sets the parameter theAspect for the display of shared boundaries.
0636   //! The method sets aspect owned by the drawer that will be used during
0637   //! visualization instead of the one set in link.
0638   void SetUnFreeBoundaryAspect(const occ::handle<Prs3d_LineAspect>& theAspect)
0639   {
0640     myUnFreeBoundaryAspect = theAspect;
0641   }
0642 
0643   //! Returns own settings for shared boundary line aspects, settings from linked Drawer or NULL if
0644   //! neither was set. These attributes are used by the algorithm Prs3d_WFShape
0645   Standard_EXPORT const occ::handle<Prs3d_LineAspect>& UnFreeBoundaryAspect() const;
0646 
0647   //! Returns true if the drawer has its own attribute for
0648   //! unfree boundaries aspect that overrides the one in the link.
0649   bool HasOwnUnFreeBoundaryAspect() const { return !myUnFreeBoundaryAspect.IsNull(); }
0650 
0651   //! Enables or disables drawing of shared boundaries for shading presentations.
0652   //! The method sets drawing flag owned by the drawer that will be used during
0653   //! visualization instead of the one set in link.
0654   //! theIsEnabled is a boolean flag indicating whether the shared boundaries should be drawn or
0655   //! not.
0656   Standard_EXPORT void SetUnFreeBoundaryDraw(const bool theIsEnabled);
0657 
0658   //! Returns True if the drawing of the shared boundaries is enabled.
0659   //! True is the default setting.
0660   bool UnFreeBoundaryDraw() const
0661   {
0662     return myHasOwnUnFreeBoundaryDraw || myLink.IsNull() ? myUnFreeBoundaryDraw
0663                                                          : myLink->UnFreeBoundaryDraw();
0664   }
0665 
0666   //! Returns true if the drawer has its own attribute for
0667   //! "draw shared boundaries" flag that overrides the one in the link.
0668   bool HasOwnUnFreeBoundaryDraw() const { return myHasOwnUnFreeBoundaryDraw; }
0669 
0670   //! Resets HasOwnUnFreeBoundaryDraw() flag, e.g. undoes SetUnFreeBoundaryDraw().
0671   void UnsetOwnUnFreeBoundaryDraw()
0672   {
0673     myHasOwnUnFreeBoundaryDraw = false;
0674     myUnFreeBoundaryDraw       = true;
0675   }
0676 
0677   //! Sets line aspect for face boundaries.
0678   //! The method sets line aspect owned by the drawer that will be used during
0679   //! visualization instead of the one set in link.
0680   //! theAspect is the line aspect that determines the look of the face boundaries.
0681   void SetFaceBoundaryAspect(const occ::handle<Prs3d_LineAspect>& theAspect)
0682   {
0683     myFaceBoundaryAspect = theAspect;
0684   }
0685 
0686   //! Returns own line aspect of face boundaries, settings from linked Drawer or NULL if neither was
0687   //! set.
0688   Standard_EXPORT const occ::handle<Prs3d_LineAspect>& FaceBoundaryAspect() const;
0689 
0690   //! Returns true if the drawer has its own attribute for
0691   //! face boundaries aspect that overrides the one in the link.
0692   bool HasOwnFaceBoundaryAspect() const { return !myFaceBoundaryAspect.IsNull(); }
0693 
0694   //! Sets own face boundary aspect, which is a black solid line by default.
0695   //! Returns FALSE if the drawer already has its own attribute for face boundary aspect.
0696   Standard_EXPORT bool SetupOwnFaceBoundaryAspect(
0697     const occ::handle<Prs3d_Drawer>& theDefaults = occ::handle<Prs3d_Drawer>());
0698 
0699   //! Enables or disables face boundary drawing for shading presentations.
0700   //! The method sets drawing flag owned by the drawer that will be used during
0701   //! visualization instead of the one set in link.
0702   //! theIsEnabled is a boolean flag indicating whether the face boundaries should be drawn or not.
0703   Standard_EXPORT void SetFaceBoundaryDraw(const bool theIsEnabled);
0704 
0705   //! Checks whether the face boundary drawing is enabled or not.
0706   bool FaceBoundaryDraw() const
0707   {
0708     return myHasOwnFaceBoundaryDraw || myLink.IsNull() ? myFaceBoundaryDraw
0709                                                        : myLink->FaceBoundaryDraw();
0710   }
0711 
0712   //! Returns true if the drawer has its own attribute for
0713   //! "draw face boundaries" flag that overrides the one in the link.
0714   bool HasOwnFaceBoundaryDraw() const { return myHasOwnFaceBoundaryDraw; }
0715 
0716   //! Resets HasOwnFaceBoundaryDraw() flag, e.g. undoes SetFaceBoundaryDraw().
0717   void UnsetOwnFaceBoundaryDraw()
0718   {
0719     myHasOwnFaceBoundaryDraw = false;
0720     myFaceBoundaryDraw       = false;
0721   }
0722 
0723   //! Returns true if the drawer has its own attribute for face boundaries upper edge continuity
0724   //! class that overrides the one in the link.
0725   bool HasOwnFaceBoundaryUpperContinuity() const { return myFaceBoundaryUpperContinuity != -1; }
0726 
0727   //! Get the most edge continuity class; GeomAbs_CN by default (all edges).
0728   GeomAbs_Shape FaceBoundaryUpperContinuity() const
0729   {
0730     return HasOwnFaceBoundaryUpperContinuity()
0731              ? (GeomAbs_Shape)myFaceBoundaryUpperContinuity
0732              : (!myLink.IsNull() ? myLink->FaceBoundaryUpperContinuity() : GeomAbs_CN);
0733   }
0734 
0735   //! Set the most edge continuity class for face boundaries.
0736   void SetFaceBoundaryUpperContinuity(GeomAbs_Shape theMostAllowedEdgeClass)
0737   {
0738     myFaceBoundaryUpperContinuity = theMostAllowedEdgeClass;
0739   }
0740 
0741   //! Unset the most edge continuity class for face boundaries.
0742   void UnsetFaceBoundaryUpperContinuity() { myFaceBoundaryUpperContinuity = -1; }
0743 
0744   //! Returns own settings for the appearance of dimensions, settings from linked Drawer or NULL if
0745   //! neither was set.
0746   Standard_EXPORT const occ::handle<Prs3d_DimensionAspect>& DimensionAspect() const;
0747 
0748   //! Sets the settings for the appearance of dimensions.
0749   //! The method sets aspect owned by the drawer that will be used during
0750   //! visualization instead of the one set in link.
0751   void SetDimensionAspect(const occ::handle<Prs3d_DimensionAspect>& theAspect)
0752   {
0753     myDimensionAspect = theAspect;
0754   }
0755 
0756   //! Returns true if the drawer has its own attribute for
0757   //! the appearance of dimensions that overrides the one in the link.
0758   bool HasOwnDimensionAspect() const { return !myDimensionAspect.IsNull(); }
0759 
0760   //! Sets dimension length model units for computing of dimension presentation.
0761   //! The method sets value owned by the drawer that will be used during
0762   //! visualization instead of the one set in link.
0763   Standard_EXPORT void SetDimLengthModelUnits(const TCollection_AsciiString& theUnits);
0764 
0765   //! Sets dimension angle model units for computing of dimension presentation.
0766   //! The method sets value owned by the drawer that will be used during
0767   //! visualization instead of the one set in link.
0768   Standard_EXPORT void SetDimAngleModelUnits(const TCollection_AsciiString& theUnits);
0769 
0770   //! Returns length model units for the dimension presentation.
0771   const TCollection_AsciiString& DimLengthModelUnits() const
0772   {
0773     return myHasOwnDimLengthModelUnits || myLink.IsNull() ? myDimensionModelUnits.GetLengthUnits()
0774                                                           : myLink->DimLengthModelUnits();
0775   }
0776 
0777   //! Returns angle model units for the dimension presentation.
0778   const TCollection_AsciiString& DimAngleModelUnits() const
0779   {
0780     return myHasOwnDimAngleModelUnits || myLink.IsNull() ? myDimensionModelUnits.GetAngleUnits()
0781                                                          : myLink->DimAngleModelUnits();
0782   }
0783 
0784   //! Returns true if the drawer has its own attribute for
0785   //! dimension length model units that overrides the one in the link.
0786   bool HasOwnDimLengthModelUnits() const { return myHasOwnDimLengthModelUnits; }
0787 
0788   //! Resets HasOwnDimLengthModelUnits() flag, e.g. undoes SetDimLengthModelUnits().
0789   void UnsetOwnDimLengthModelUnits()
0790   {
0791     myHasOwnDimLengthModelUnits = false;
0792     myDimensionModelUnits.SetLengthUnits("m");
0793   }
0794 
0795   //! Returns true if the drawer has its own attribute for
0796   //! dimension angle model units that overrides the one in the link.
0797   bool HasOwnDimAngleModelUnits() const { return myHasOwnDimAngleModelUnits; }
0798 
0799   //! Resets HasOwnDimAngleModelUnits() flag, e.g. undoes SetDimAngleModelUnits().
0800   void UnsetOwnDimAngleModelUnits()
0801   {
0802     myHasOwnDimAngleModelUnits = false;
0803     myDimensionModelUnits.SetAngleUnits("rad");
0804   }
0805 
0806   //! Sets length units in which value for dimension presentation is displayed.
0807   //! The method sets value owned by the drawer that will be used during
0808   //! visualization instead of the one set in link.
0809   Standard_EXPORT void SetDimLengthDisplayUnits(const TCollection_AsciiString& theUnits);
0810 
0811   //! Sets angle units in which value for dimension presentation is displayed.
0812   //! The method sets value owned by the drawer that will be used during
0813   //! visualization instead of the one set in link.
0814   Standard_EXPORT void SetDimAngleDisplayUnits(const TCollection_AsciiString& theUnits);
0815 
0816   //! Returns length units in which dimension presentation is displayed.
0817   const TCollection_AsciiString& DimLengthDisplayUnits() const
0818   {
0819     return myHasOwnDimLengthDisplayUnits || myLink.IsNull()
0820              ? myDimensionDisplayUnits.GetLengthUnits()
0821              : myLink->DimLengthDisplayUnits();
0822   }
0823 
0824   //! Returns angle units in which dimension presentation is displayed.
0825   const TCollection_AsciiString& DimAngleDisplayUnits() const
0826   {
0827     return myHasOwnDimAngleDisplayUnits || myLink.IsNull() ? myDimensionDisplayUnits.GetAngleUnits()
0828                                                            : myLink->DimAngleDisplayUnits();
0829   }
0830 
0831   //! Returns true if the drawer has its own attribute for
0832   //! length units in which dimension presentation is displayed
0833   //! that overrides the one in the link.
0834   bool HasOwnDimLengthDisplayUnits() const { return myHasOwnDimLengthDisplayUnits; }
0835 
0836   //! Resets HasOwnDimLengthModelUnits() flag, e.g. undoes SetDimLengthDisplayUnits().
0837   void UnsetOwnDimLengthDisplayUnits()
0838   {
0839     myHasOwnDimLengthDisplayUnits = false;
0840     myDimensionDisplayUnits.SetLengthUnits("m");
0841   }
0842 
0843   //! Returns true if the drawer has its own attribute for
0844   //! angle units in which dimension presentation is displayed
0845   //! that overrides the one in the link.
0846   bool HasOwnDimAngleDisplayUnits() const { return myHasOwnDimAngleDisplayUnits; }
0847 
0848   //! Resets HasOwnDimAngleDisplayUnits() flag, e.g. undoes SetDimLengthDisplayUnits().
0849   void UnsetOwnDimAngleDisplayUnits()
0850   {
0851     myHasOwnDimAngleDisplayUnits = false;
0852     myDimensionDisplayUnits.SetAngleUnits("deg");
0853   }
0854 
0855 public:
0856   //! Returns the drawer to which the current object references.
0857   const occ::handle<Prs3d_Drawer>& Link() const { return myLink; }
0858 
0859   //! Returns true if the current object has a link on the other drawer.
0860   bool HasLink() const { return !myLink.IsNull(); }
0861 
0862   //! Sets theDrawer as a link to which the current object references.
0863   void Link(const occ::handle<Prs3d_Drawer>& theDrawer) { SetLink(theDrawer); }
0864 
0865   //! Sets theDrawer as a link to which the current object references.
0866   void SetLink(const occ::handle<Prs3d_Drawer>& theDrawer) { myLink = theDrawer; }
0867 
0868   //! Removes local attributes.
0869   Standard_EXPORT void ClearLocalAttributes();
0870 
0871   //! Assign shader program for specified type of primitives.
0872   //! @param theProgram new program to set (might be NULL)
0873   //! @param theAspect  the type of primitives
0874   //! @param theToOverrideDefaults if true then non-overridden attributes using defaults will be
0875   //! allocated and copied from the Link;
0876   //!                              otherwise, only already customized attributes will be changed
0877   //! @return TRUE if presentation should be recomputed after creating aspects not previously
0878   //! customized (if theToOverrideDefaults is also TRUE)
0879   Standard_EXPORT bool SetShaderProgram(const occ::handle<Graphic3d_ShaderProgram>& theProgram,
0880                                         const Graphic3d_GroupAspect                 theAspect,
0881                                         const bool theToOverrideDefaults = false);
0882 
0883   //! Sets Shading Model type for the shading aspect.
0884   Standard_EXPORT bool SetShadingModel(Graphic3d_TypeOfShadingModel theModel,
0885                                        bool                         theToOverrideDefaults = false);
0886 
0887   //! Dumps the content of me into the stream
0888   Standard_EXPORT void DumpJson(Standard_OStream& theOStream, int theDepth = -1) const override;
0889 
0890 public: //! @name deprecated methods
0891   Standard_DEPRECATED("SetDeviationAngle() should be used instead")
0892   void SetHLRAngle(const double theAngle) { SetDeviationAngle(theAngle); }
0893 
0894   Standard_DEPRECATED("DeviationAngle() should be used instead")
0895   double HLRAngle() const { return DeviationAngle(); }
0896 
0897   Standard_DEPRECATED("SetDeviationAngle() should be used instead")
0898   void SetHLRAngle() { SetDeviationAngle(); }
0899 
0900   Standard_DEPRECATED("HasOwnDeviationAngle() should be used instead")
0901   bool HasOwnHLRDeviationAngle() const { return HasOwnDeviationAngle(); }
0902 
0903   Standard_DEPRECATED("PreviousDeviationAngle() should be used instead")
0904   double PreviousHLRDeviationAngle() const { return PreviousDeviationAngle(); }
0905 
0906 protected:
0907   occ::handle<Prs3d_Drawer> myLink;
0908 
0909   int                     myNbPoints;
0910   double                  myMaximalParameterValue;
0911   double                  myChordialDeviation;
0912   Aspect_TypeOfDeflection myTypeOfDeflection;
0913   bool                    myHasOwnTypeOfDeflection;
0914   Prs3d_TypeOfHLR         myTypeOfHLR;
0915   double                  myDeviationCoefficient;
0916   double                  myPreviousDeviationCoefficient;
0917   double                  myDeviationAngle;
0918   double                  myPreviousDeviationAngle;
0919   bool                    myIsoOnPlane;
0920   bool                    myHasOwnIsoOnPlane;
0921   bool                    myIsoOnTriangulation;
0922   bool                    myHasOwnIsoOnTriangulation;
0923   bool                    myIsAutoTriangulated;
0924   bool                    myHasOwnIsAutoTriangulated;
0925 
0926   occ::handle<Prs3d_IsoAspect>     myUIsoAspect;
0927   occ::handle<Prs3d_IsoAspect>     myVIsoAspect;
0928   occ::handle<Prs3d_LineAspect>    myWireAspect;
0929   bool                             myWireDraw;
0930   bool                             myHasOwnWireDraw;
0931   occ::handle<Prs3d_PointAspect>   myPointAspect;
0932   occ::handle<Prs3d_LineAspect>    myLineAspect;
0933   occ::handle<Prs3d_TextAspect>    myTextAspect;
0934   occ::handle<Prs3d_ShadingAspect> myShadingAspect;
0935   occ::handle<Prs3d_PlaneAspect>   myPlaneAspect;
0936   occ::handle<Prs3d_LineAspect>    mySeenLineAspect;
0937   occ::handle<Prs3d_ArrowAspect>   myArrowAspect;
0938   bool                             myLineArrowDraw;
0939   bool                             myHasOwnLineArrowDraw;
0940   occ::handle<Prs3d_LineAspect>    myHiddenLineAspect;
0941   bool                             myDrawHiddenLine;
0942   bool                             myHasOwnDrawHiddenLine;
0943   occ::handle<Prs3d_LineAspect>    myVectorAspect;
0944   Prs3d_VertexDrawMode             myVertexDrawMode;
0945   occ::handle<Prs3d_DatumAspect>   myDatumAspect;
0946   occ::handle<Prs3d_LineAspect>    mySectionAspect;
0947 
0948   occ::handle<Prs3d_LineAspect> myFreeBoundaryAspect;
0949   bool                          myFreeBoundaryDraw;
0950   bool                          myHasOwnFreeBoundaryDraw;
0951   occ::handle<Prs3d_LineAspect> myUnFreeBoundaryAspect;
0952   bool                          myUnFreeBoundaryDraw;
0953   bool                          myHasOwnUnFreeBoundaryDraw;
0954   occ::handle<Prs3d_LineAspect> myFaceBoundaryAspect;
0955   // clang-format off
0956   int              myFaceBoundaryUpperContinuity; //!< the most edge continuity class (GeomAbs_Shape) to be included to face boundaries presentation, or -1 if undefined
0957   // clang-format on
0958   bool myFaceBoundaryDraw;
0959   bool myHasOwnFaceBoundaryDraw;
0960 
0961   occ::handle<Prs3d_DimensionAspect> myDimensionAspect;
0962   Prs3d_DimensionUnits               myDimensionModelUnits;
0963   bool                               myHasOwnDimLengthModelUnits;
0964   bool                               myHasOwnDimAngleModelUnits;
0965   Prs3d_DimensionUnits               myDimensionDisplayUnits;
0966   bool                               myHasOwnDimLengthDisplayUnits;
0967   bool                               myHasOwnDimAngleDisplayUnits;
0968 };
0969 
0970 #endif // _Prs3d_Drawer_HeaderFile