Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2024-11-15 09:48:12

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