File indexing completed on 2026-09-11 09:18:50
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016 #ifndef OpenGl_Structure_HeaderFile
0017 #define OpenGl_Structure_HeaderFile
0018
0019 #include <Graphic3d_CStructure.hxx>
0020
0021 #include <OpenGl_GraphicDriver.hxx>
0022 #include <OpenGl_Group.hxx>
0023 #include <OpenGl_Workspace.hxx>
0024
0025 #include <NCollection_List.hxx>
0026
0027
0028 class OpenGl_Structure : public Graphic3d_CStructure
0029 {
0030 friend class OpenGl_Group;
0031 DEFINE_STANDARD_RTTIEXT(OpenGl_Structure, Graphic3d_CStructure)
0032 public:
0033
0034 typedef SubclassStructIterator<OpenGl_Structure> StructIterator;
0035
0036
0037 typedef SubclassGroupIterator<OpenGl_Group> GroupIterator;
0038
0039 public:
0040
0041 Standard_EXPORT OpenGl_Structure(const occ::handle<Graphic3d_StructureManager>& theManager);
0042
0043
0044 Standard_EXPORT void OnVisibilityChanged() override;
0045
0046
0047 Standard_EXPORT void Clear() override;
0048
0049
0050 Standard_EXPORT void Connect(Graphic3d_CStructure& theStructure) override;
0051
0052
0053 Standard_EXPORT void Disconnect(Graphic3d_CStructure& theStructure) override;
0054
0055
0056 Standard_EXPORT void SetTransformation(const occ::handle<TopLoc_Datum3D>& theTrsf) override;
0057
0058
0059 Standard_EXPORT void SetTransformPersistence(
0060 const occ::handle<Graphic3d_TransformPers>& theTrsfPers) override;
0061
0062
0063 Standard_EXPORT void SetZLayer(const Graphic3d_ZLayerId theLayerIndex) override;
0064
0065
0066
0067 Standard_EXPORT void GraphicHighlight(
0068 const occ::handle<Graphic3d_PresentationAttributes>& theStyle) override;
0069
0070
0071 Standard_EXPORT void GraphicUnhighlight() override;
0072
0073
0074 Standard_EXPORT occ::handle<Graphic3d_CStructure> ShadowLink(
0075 const occ::handle<Graphic3d_StructureManager>& theManager) const override;
0076
0077
0078 Standard_EXPORT occ::handle<Graphic3d_Group> NewGroup(
0079 const occ::handle<Graphic3d_Structure>& theStruct) override;
0080
0081
0082 Standard_EXPORT void RemoveGroup(const occ::handle<Graphic3d_Group>& theGroup) override;
0083
0084 public:
0085
0086 OpenGl_GraphicDriver* GlDriver() const
0087 {
0088 return (OpenGl_GraphicDriver*)myGraphicDriver.operator->();
0089 }
0090
0091 Standard_EXPORT void Clear(const occ::handle<OpenGl_Context>& theGlCtx);
0092
0093
0094 Standard_EXPORT virtual void Render(const occ::handle<OpenGl_Workspace>& theWorkspace) const;
0095
0096
0097 Standard_EXPORT virtual void Release(const occ::handle<OpenGl_Context>& theGlCtx);
0098
0099
0100
0101
0102
0103
0104
0105 Standard_EXPORT void ReleaseGlResources(const occ::handle<OpenGl_Context>& theGlCtx);
0106
0107
0108 const OpenGl_Structure* InstancedStructure() const { return myInstancedStructure; }
0109
0110
0111 size_t ModificationState() const { return myModificationState; }
0112
0113
0114 void ResetModificationState() const { myModificationState = 0; }
0115
0116
0117 bool IsRaytracable() const;
0118
0119
0120 Standard_EXPORT void updateLayerTransformation() override;
0121
0122
0123 Standard_EXPORT void DumpJson(Standard_OStream& theOStream, int theDepth = -1) const override;
0124
0125 protected:
0126 Standard_EXPORT ~OpenGl_Structure() override;
0127
0128
0129 void UpdateStateIfRaytracable(const bool toCheck = true) const;
0130
0131
0132
0133
0134
0135 Standard_EXPORT void renderGeometry(const occ::handle<OpenGl_Workspace>& theWorkspace,
0136 bool& theHasClosed) const;
0137
0138
0139 Standard_EXPORT void renderBoundingBox(const occ::handle<OpenGl_Workspace>& theWorkspace) const;
0140
0141
0142
0143
0144
0145 Standard_EXPORT void applyTransformation(const occ::handle<OpenGl_Context>& theContext,
0146 const gp_Trsf& theTrsf,
0147 const bool toEnable) const;
0148
0149
0150
0151
0152
0153
0154
0155
0156 Standard_EXPORT void applyPersistence(
0157 const occ::handle<OpenGl_Context>& theCtx,
0158 const occ::handle<Graphic3d_TransformPers>& theTrsfPersistence,
0159 const bool theIsLocal,
0160 bool& theOldCastShadows) const;
0161
0162
0163
0164
0165
0166
0167
0168 Standard_EXPORT void revertPersistence(
0169 const occ::handle<OpenGl_Context>& theCtx,
0170 const occ::handle<Graphic3d_TransformPers>& theTrsfPersistence,
0171 const bool theIsLocal,
0172 const bool theOldCastShadows) const;
0173
0174 protected:
0175 OpenGl_Structure* myInstancedStructure;
0176
0177 NCollection_Mat4<float> myRenderTrsf;
0178
0179 mutable bool myIsRaytracable;
0180 mutable size_t myModificationState;
0181
0182 bool myIsMirrored;
0183
0184 };
0185
0186 #endif