0031035: Coding - uninitialized class fields reported by Visual Studio Code Analysis
[occt.git] / src / HLRTest / HLRTest_DrawablePolyEdgeTool.cxx
1 // Created on: 1992-10-14
2 // Created by: Christophe MARION
3 // Copyright (c) 1992-1999 Matra Datavision
4 // Copyright (c) 1999-2014 OPEN CASCADE SAS
5 //
6 // This file is part of Open CASCADE Technology software library.
7 //
8 // This library is free software; you can redistribute it and/or modify it under
9 // the terms of the GNU Lesser General Public License version 2.1 as published
10 // by the Free Software Foundation, with special exception defined in the file
11 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
12 // distribution for complete text of the license and disclaimer of any warranty.
13 //
14 // Alternatively, this file may be used under the terms of Open CASCADE
15 // commercial license or contractual agreement.
16
17 // Modified by cma, Mon Oct 23 16:11:46 1995
18
19 #include <Draw_Color.hxx>
20 #include <Draw_Display.hxx>
21 #include <HLRAlgo_EdgeIterator.hxx>
22 #include <HLRAlgo_EdgeStatus.hxx>
23 #include <HLRBRep_BiPoint.hxx>
24 #include <HLRBRep_ListIteratorOfListOfBPoint.hxx>
25 #include <HLRBRep_PolyAlgo.hxx>
26 #include <HLRTest_DrawablePolyEdgeTool.hxx>
27 #include <OSD_Chronometer.hxx>
28 #include <Standard_Type.hxx>
29
30 IMPLEMENT_STANDARD_RTTIEXT(HLRTest_DrawablePolyEdgeTool,Draw_Drawable3D)
31
32 #define PntX1 ((Standard_Real*)Coordinates)[0]
33 #define PntY1 ((Standard_Real*)Coordinates)[1]
34 #define PntZ1 ((Standard_Real*)Coordinates)[2]
35 #define PntX2 ((Standard_Real*)Coordinates)[3]
36 #define PntY2 ((Standard_Real*)Coordinates)[4]
37 #define PntZ2 ((Standard_Real*)Coordinates)[5]
38
39 //=======================================================================
40 //function : HLRTest_DrawablePolyEdgeTool
41 //purpose  : 
42 //=======================================================================
43
44 HLRTest_DrawablePolyEdgeTool::
45 HLRTest_DrawablePolyEdgeTool (const Handle(HLRBRep_PolyAlgo)& Alg,
46                               const Standard_Integer ViewId,
47                               const Standard_Boolean Debug) :
48   myAlgo(Alg),
49   myDispRg1(Standard_False),
50   myDispRgN(Standard_False),
51   myDispHid(Standard_False),
52   myViewId(ViewId),
53   myDebug(Debug),
54   myHideMode(Standard_True)
55 {
56   OSD_Chronometer ChronHide;
57   if (myDebug) {
58     ChronHide.Reset();
59     ChronHide.Start();
60   }
61   Standard_Real sta,end,dx,dy,dz;
62   Standard_ShortReal tolsta,tolend;
63   HLRAlgo_EdgeIterator It;
64   myBiPntVis.Clear();
65   myBiPntHid.Clear();
66   Standard_Address Coordinates;
67   HLRAlgo_EdgeStatus status;
68   TopoDS_Shape S;
69   Standard_Boolean reg1,regn,outl,intl;
70
71   for (myAlgo->InitHide(); myAlgo->MoreHide(); myAlgo->NextHide()) {
72     Coordinates = &myAlgo->Hide(status,S,reg1,regn,outl,intl);
73     dx = PntX2 - PntX1;
74     dy = PntY2 - PntY1;
75     dz = PntZ2 - PntZ1;
76     
77     for (It.InitVisible(status);
78          It.MoreVisible();
79          It.NextVisible()) {
80       It.Visible(sta,tolsta,end,tolend);
81       myBiPntVis.Append
82         (HLRBRep_BiPoint
83          (PntX1 + sta * dx,PntY1 + sta * dy,PntZ1 + sta * dz,
84           PntX1 + end * dx,PntY1 + end * dy,PntZ1 + end * dz,
85           S,reg1,regn,outl,intl));
86     }
87     
88     for (It.InitHidden(status);
89          It.MoreHidden();
90          It.NextHidden()) {
91       It.Hidden(sta,tolsta,end,tolend);
92       myBiPntHid.Append
93         (HLRBRep_BiPoint
94          (PntX1 + sta * dx,PntY1 + sta * dy,PntZ1 + sta * dz,
95           PntX1 + end * dx,PntY1 + end * dy,PntZ1 + end * dz,
96           S,reg1,regn,outl,intl));
97     }
98   }
99   if (myDebug) {
100     ChronHide.Stop();
101     std::cout << " Temps Hide   :";
102     ChronHide.Show(); 
103   }
104 }
105
106 //=======================================================================
107 //function : DrawOn
108 //purpose  : 
109 //=======================================================================
110
111 void HLRTest_DrawablePolyEdgeTool::DrawOn (Draw_Display& D) const
112 {
113   if (myViewId == D.ViewId()) {
114     if (myHideMode) {
115       HLRBRep_ListIteratorOfListOfBPoint It;
116       if (myDispHid) {
117         D.SetColor(Draw_bleu);
118         
119         for (It.Initialize(myBiPntHid);
120              It.More();
121              It.Next()) {
122           const HLRBRep_BiPoint& BP = It.Value();
123           Standard_Boolean todraw = Standard_True;
124           if ((!myDispRg1 && BP.Rg1Line() && !BP.OutLine()) ||
125               (!myDispRgN && BP.RgNLine() && !BP.OutLine()))
126             todraw =  Standard_False;
127           if (todraw) {
128             D.MoveTo(BP.P1());
129             D.DrawTo(BP.P2());
130           }
131         }
132       }
133       D.SetColor(Draw_vert);
134       
135       for (It.Initialize(myBiPntVis);
136            It.More();
137            It.Next()) {
138         const HLRBRep_BiPoint& BP = It.Value();
139         Standard_Boolean todraw = Standard_True;
140         if ((!myDispRg1 && BP.Rg1Line() && !BP.OutLine()) ||
141             (!myDispRgN && BP.RgNLine() && !BP.OutLine()))
142           todraw =  Standard_False;
143         if (todraw) {
144           D.MoveTo(BP.P1());
145           D.DrawTo(BP.P2());
146         }
147       }
148     }
149     else {
150       Standard_Address Coordinates;
151       TopoDS_Shape S;
152       Standard_Boolean reg1,regn,outl,intl;
153       D.SetColor(Draw_vert);
154
155       for (myAlgo->InitShow(); myAlgo->MoreShow(); myAlgo->NextShow()) {
156         Coordinates = &myAlgo->Show(S,reg1,regn,outl,intl);
157         Standard_Boolean todraw = Standard_True;
158         if ((!myDispRg1 && reg1 && !outl) ||
159             (!myDispRgN && regn && !outl))
160           todraw =  Standard_False;
161         if (todraw) {
162           D.MoveTo(gp_Pnt(PntX1,PntY1,PntZ1));
163           D.DrawTo(gp_Pnt(PntX2,PntY2,PntZ2));
164         }
165       }
166     }
167   }
168 }
169