0022815: Missing delete operator for placement new
[occt.git] / src / Poly / Poly_CoherentNode.cxx
1 // File:      Poly_CoherentNode.cxx
2 // Created:   14.12.07 07:32
3 // Author:    Alexander GRIGORIEV
4 // Copyright: Open Cascade 2007
5
6
7 #include <Poly_CoherentNode.hxx>
8 #include <Poly_CoherentTriangle.hxx>
9
10 #ifdef WNT
11 #pragma warning(disable:4996)
12 #endif
13
14 //=======================================================================
15 //function : Clear
16 //purpose  : 
17 //=======================================================================
18
19 void Poly_CoherentNode::Clear (const Handle_NCollection_BaseAllocator& theAlloc)
20 {
21   Poly_CoherentTriPtr::RemoveList (myTriangles, theAlloc);
22   myUV[0] = Precision::Infinite();
23   myUV[1] = Precision::Infinite();
24   myNormal[0] = 0.f;
25   myNormal[1] = 0.f;
26   myNormal[2] = 0.f;
27   SetCoord(0., 0., 0.);
28 }
29
30 //=======================================================================
31 //function : SetNormal
32 //purpose  : Define the normal vector in the Node.
33 //=======================================================================
34
35 void Poly_CoherentNode::SetNormal (const gp_XYZ& theVector)
36 {
37   myNormal[0] = static_cast<Standard_ShortReal>(theVector.X());
38   myNormal[1] = static_cast<Standard_ShortReal>(theVector.Y());
39   myNormal[2] = static_cast<Standard_ShortReal>(theVector.Z());
40 }
41
42 //=======================================================================
43 //function : AddTriangle
44 //purpose  : 
45 //=======================================================================
46
47 void Poly_CoherentNode::AddTriangle
48                         (const Poly_CoherentTriangle&            theTri,
49                          const Handle_NCollection_BaseAllocator& theAlloc)
50 {
51   if (myTriangles == NULL)
52     myTriangles = new (theAlloc) Poly_CoherentTriPtr(theTri);
53   else
54     myTriangles->Prepend(&theTri, theAlloc);
55 }
56
57 //=======================================================================
58 //function : RemoveTriangle
59 //purpose  : 
60 //=======================================================================
61
62 Standard_Boolean Poly_CoherentNode::RemoveTriangle
63                         (const Poly_CoherentTriangle&            theTri,
64                          const Handle_NCollection_BaseAllocator& theAlloc)
65 {
66   Standard_Boolean aResult(Standard_False);
67   if (&myTriangles->GetTriangle() == &theTri) {
68     Poly_CoherentTriPtr * aLostPtr = myTriangles;
69     if (myTriangles == &myTriangles->Next())
70       myTriangles = 0L;
71     else
72       myTriangles = &myTriangles->Next();
73     Poly_CoherentTriPtr::Remove(aLostPtr, theAlloc);
74     aResult = Standard_True;
75   } else {
76     Poly_CoherentTriPtr::Iterator anIter(* myTriangles);
77     for (anIter.Next(); anIter.More(); anIter.Next())
78       if (&anIter.Value() == &theTri) {
79         Poly_CoherentTriPtr::Remove
80           (const_cast<Poly_CoherentTriPtr *>(&anIter.PtrValue()), theAlloc);
81         aResult = Standard_True;
82         break;
83       }
84   }
85   return aResult;
86 }
87
88 //=======================================================================
89 //function : Dump
90 //purpose  : 
91 //=======================================================================
92
93 void Poly_CoherentNode::Dump(Standard_OStream& theStream) const
94 {
95   char buf[256];
96   sprintf (buf, "  X =%9.4f; Y =%9.4f; Z =%9.4f", X(), Y(), Z());
97   theStream << buf << endl;
98   Poly_CoherentTriPtr::Iterator anIter(* myTriangles);
99   for (; anIter.More(); anIter.Next()) {
100     const Poly_CoherentTriangle& aTri = anIter.Value();
101     sprintf (buf, "      %5d %5d %5d", aTri.Node(0),aTri.Node(1),aTri.Node(2));
102     theStream << buf << endl;
103   }
104 }