42cf5bc1 |
1 | // Created on: 2003-10-10 |
2 | // Created by: Alexander SOLOVYOV |
3 | // Copyright (c) 2003-2014 OPEN CASCADE SAS |
4 | // |
5 | // This file is part of Open CASCADE Technology software library. |
6 | // |
7 | // This library is free software; you can redistribute it and/or modify it under |
8 | // the terms of the GNU Lesser General Public License version 2.1 as published |
9 | // by the Free Software Foundation, with special exception defined in the file |
10 | // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT |
11 | // distribution for complete text of the license and disclaimer of any warranty. |
12 | // |
13 | // Alternatively, this file may be used under the terms of Open CASCADE |
14 | // commercial license or contractual agreement. |
15 | |
16 | #ifndef _MeshVS_MeshPrsBuilder_HeaderFile |
17 | #define _MeshVS_MeshPrsBuilder_HeaderFile |
18 | |
42cf5bc1 |
19 | #include <MeshVS_PrsBuilder.hxx> |
20 | #include <MeshVS_DisplayModeFlags.hxx> |
42cf5bc1 |
21 | #include <MeshVS_BuilderPriority.hxx> |
22 | #include <TColStd_PackedMapOfInteger.hxx> |
42cf5bc1 |
23 | #include <TColStd_Array1OfReal.hxx> |
42cf5bc1 |
24 | #include <MeshVS_HArray1OfSequenceOfInteger.hxx> |
7dd7c146 |
25 | |
42cf5bc1 |
26 | class MeshVS_Mesh; |
27 | class MeshVS_DataSource; |
42cf5bc1 |
28 | class Graphic3d_ArrayOfSegments; |
29 | class Graphic3d_ArrayOfTriangles; |
30 | class Graphic3d_ArrayOfPrimitives; |
31 | class Graphic3d_AspectFillArea3d; |
32 | class Graphic3d_AspectLine3d; |
33 | |
42cf5bc1 |
34 | DEFINE_STANDARD_HANDLE(MeshVS_MeshPrsBuilder, MeshVS_PrsBuilder) |
35 | |
36 | //! This class provides methods to compute base mesh presentation |
37 | class MeshVS_MeshPrsBuilder : public MeshVS_PrsBuilder |
38 | { |
39 | |
40 | public: |
41 | |
42 | |
43 | //! Creates builder with certain display mode flags, data source, ID and priority |
44 | Standard_EXPORT MeshVS_MeshPrsBuilder(const Handle(MeshVS_Mesh)& Parent, const MeshVS_DisplayModeFlags& Flags = MeshVS_DMF_OCCMask, const Handle(MeshVS_DataSource)& DS = 0, const Standard_Integer Id = -1, const MeshVS_BuilderPriority& Priority = MeshVS_BP_Mesh); |
45 | |
46 | //! Builds base mesh presentation by calling the methods below |
79104795 |
47 | Standard_EXPORT virtual void Build (const Handle(Prs3d_Presentation)& Prs, const TColStd_PackedMapOfInteger& IDs, TColStd_PackedMapOfInteger& IDsToExclude, const Standard_Boolean IsElement, const Standard_Integer DisplayMode) const Standard_OVERRIDE; |
42cf5bc1 |
48 | |
49 | //! Builds nodes presentation |
50 | Standard_EXPORT virtual void BuildNodes (const Handle(Prs3d_Presentation)& Prs, const TColStd_PackedMapOfInteger& IDs, TColStd_PackedMapOfInteger& IDsToExclude, const Standard_Integer DisplayMode) const; |
51 | |
52 | //! Builds elements presentation |
53 | Standard_EXPORT virtual void BuildElements (const Handle(Prs3d_Presentation)& Prs, const TColStd_PackedMapOfInteger& IDs, TColStd_PackedMapOfInteger& IDsToExclude, const Standard_Integer DisplayMode) const; |
54 | |
55 | //! Builds presentation of hilighted entity |
56 | Standard_EXPORT virtual void BuildHilightPrs (const Handle(Prs3d_Presentation)& Prs, const TColStd_PackedMapOfInteger& IDs, const Standard_Boolean IsElement) const; |
57 | |
58 | //! Add to array polygons or polylines representing volume |
59 | Standard_EXPORT static void AddVolumePrs (const Handle(MeshVS_HArray1OfSequenceOfInteger)& Topo, const TColStd_Array1OfReal& Nodes, const Standard_Integer NbNodes, const Handle(Graphic3d_ArrayOfPrimitives)& Array, const Standard_Boolean IsReflected, const Standard_Boolean IsShrinked, const Standard_Boolean IsSelect, const Standard_Real ShrinkCoef); |
60 | |
61 | //! Calculate how many polygons or polylines are necessary to draw passed topology |
62 | Standard_EXPORT static void HowManyPrimitives (const Handle(MeshVS_HArray1OfSequenceOfInteger)& Topo, const Standard_Boolean AsPolygons, const Standard_Boolean IsSelect, const Standard_Integer NbNodes, Standard_Integer& Vertices, Standard_Integer& Bounds); |
63 | |
64 | |
65 | |
66 | |
92efcf78 |
67 | DEFINE_STANDARD_RTTIEXT(MeshVS_MeshPrsBuilder,MeshVS_PrsBuilder) |
42cf5bc1 |
68 | |
69 | protected: |
70 | |
71 | |
72 | //! Add to array of polylines some lines representing link |
73 | Standard_EXPORT void AddLinkPrs (const TColStd_Array1OfReal& theCoords, const Handle(Graphic3d_ArrayOfSegments)& theLines, const Standard_Boolean IsShrinked, const Standard_Real ShrinkCoef) const; |
74 | |
75 | //! Add to array of segments representing face's wire |
76 | Standard_EXPORT void AddFaceWirePrs (const TColStd_Array1OfReal& theCoords, const Standard_Integer theNbNodes, const Handle(Graphic3d_ArrayOfSegments)& theLines, const Standard_Boolean theIsShrinked, const Standard_Real theShrinkingCoef) const; |
77 | |
78 | //! Add to array of polygons a polygon representing face |
79 | Standard_EXPORT void AddFaceSolidPrs (const Standard_Integer ID, const TColStd_Array1OfReal& theCoords, const Standard_Integer theNbNodes, const Standard_Integer theMaxNodes, const Handle(Graphic3d_ArrayOfTriangles)& theTriangles, const Standard_Boolean theIsReflected, const Standard_Boolean theIsShrinked, const Standard_Real theShrinkCoef, const Standard_Boolean theIsMeshSmoothShading) const; |
80 | |
81 | //! Draw array of polygons and polylines in the certain order according to transparency |
82 | Standard_EXPORT void DrawArrays (const Handle(Prs3d_Presentation)& Prs, const Handle(Graphic3d_ArrayOfPrimitives)& thePolygons, const Handle(Graphic3d_ArrayOfPrimitives)& theLines, const Handle(Graphic3d_ArrayOfPrimitives)& theLinkLines, const Handle(Graphic3d_ArrayOfPrimitives)& theVolumesInShad, const Standard_Boolean IsPolygonsEdgesOff, const Standard_Boolean IsSelected, const Handle(Graphic3d_AspectFillArea3d)& theFillAsp, const Handle(Graphic3d_AspectLine3d)& theLineAsp) const; |
83 | |
84 | //! Default calculation of center of face or link. This method if useful for shrink mode presentation |
85 | //! theCoords is array of nodes co-ordinates in the strict order X1, Y1, Z1, X2... |
86 | //! NbNodes is number of nodes an element consist of |
87 | //! xG, yG, zG are co-ordinates of center whose will be returned |
88 | Standard_EXPORT static void CalculateCenter (const TColStd_Array1OfReal& theCoords, const Standard_Integer NbNodes, Standard_Real& xG, Standard_Real& yG, Standard_Real& zG); |
89 | |
90 | |
91 | |
92 | private: |
93 | |
94 | |
95 | |
96 | |
97 | }; |
98 | |
99 | |
100 | |
101 | |
102 | |
103 | |
104 | |
105 | #endif // _MeshVS_MeshPrsBuilder_HeaderFile |