imported VectorOfInterfFZ from BOPDS;
imported VectorOfInterfZZ from BOPDS;
--
- imported VectorOfPoint from BOPDS;
+ imported VectorOfPoint from BOPDS;
imported VectorOfCurve from BOPDS;
+ imported VectorOfPave from BOPDS;
--
end BOPDS;
#include <BOPDS_DS.ixx>
//
+#include <Standard_Assert.hxx>
+//
#include <NCollection_IncAllocator.hxx>
#include <NCollection_BaseAllocator.hxx>
#include <BOPDS_PassKey.hxx>
#include <BOPDS_MapOfPave.hxx>
#include <BOPDS_MapOfPaveBlock.hxx>
+#include <BOPDS_VectorOfPave.hxx>
#include <Geom_Curve.hxx>
#include <BRep_Builder.hxx>
#include <BOPTools_AlgoTools.hxx>
#include <GeomAPI_ProjectPointOnCurve.hxx>
+#include <algorithm>
+
//
static
inline void ResetShape(const TopoDS_Shape& aS);
static
Standard_Real ComputeParameter(const TopoDS_Vertex& aV,
const TopoDS_Edge& aE);
-static
- void SortShell(const int n, BOPDS_Pave *a);
//=======================================================================
//function :
BOPDS_ListOfPave& theLP)
{
Standard_Integer aNb, i;
- BOPDS_Pave *pPaves;
BOPDS_ListIteratorOfListOfPaveBlock aIt;
BOPDS_MapOfPave aMP;
//
const BOPDS_ListOfPaveBlock& aLPB = PaveBlocks(theEdge);
- aNb = aLPB.Extent();
- aNb = (aNb==0) ? 0 : (aNb+1);
- //
- pPaves=(BOPDS_Pave *)myAllocator->Allocate(aNb*sizeof(BOPDS_Pave));
- for (i=0; i<aNb; ++i) {
- new (pPaves+i) BOPDS_Pave();
+ aNb = aLPB.Extent() + 1;
+ if (aNb == 1) {
+ return;
}
//
- i = 0;
- for (aIt.Initialize(aLPB); aIt.More(); aIt.Next()) {
+ BOPDS_VectorOfPave pPaves(1, aNb);
+ //
+ i = 1;
+ aIt.Initialize(aLPB);
+ for (; aIt.More(); aIt.Next()) {
const Handle(BOPDS_PaveBlock)& aPB = aIt.Value();
- if (aMP.Add(aPB->Pave1())){
- pPaves[i] = aPB->Pave1();
+ const BOPDS_Pave& aPave1 = aPB->Pave1();
+ const BOPDS_Pave& aPave2 = aPB->Pave2();
+ //
+ if (aMP.Add(aPave1)){
+ pPaves(i) = aPave1;
++i;
}
- if (aMP.Add(aPB->Pave2())){
- pPaves[i] = aPB->Pave2();
+ //
+ if (aMP.Add(aPave2)){
+ pPaves(i) = aPave2;
++i;
}
}
//
- SortShell(aNb, pPaves);
+ Standard_ASSERT_VOID(aNb == aMP.Extent(), "Abnormal number of paves");
+ //
+ std::sort(pPaves.begin(), pPaves.end());
//
- for (i = 0; i < aNb; ++i) {
- theLP.Append(pPaves[i]);
+ for (i = 1; i <= aNb; ++i) {
+ theLP.Append(pPaves(i));
}
}
return aTRet;
}
//=======================================================================
-// function: SortShell
-// purpose :
-//=======================================================================
-void SortShell(const int n, BOPDS_Pave *a)
-{
- int nd, i, j, l, d=1;
- BOPDS_Pave x;
- //
- while(d<=n) {
- d*=2;
- }
- //
- while (d) {
- d=(d-1)/2;
- //
- nd=n-d;
- for (i=0; i<nd; ++i) {
- j=i;
- m30:;
- l=j+d;
- if (a[l] < a[j]){
- x=a[j];
- a[j]=a[l];
- a[l]=x;
- j-=d;
- if (j > -1) goto m30;
- }//if (a[l] < a[j]){
- }//for (i=0; i<nd; ++i)
- }//while (1)
-}
-//=======================================================================
//function : BuildBndBoxSolid
//purpose :
//=======================================================================
#include <BOPDS_Pave.hxx>
typedef NCollection_Map<BOPDS_Pave, BOPDS_PaveMapHasher> BOPDS_MapOfPave;
-typedef BOPDS_MapOfPave::Iterator BOPDS_MapIteratorMapOfPave;
+typedef BOPDS_MapOfPave::Iterator BOPDS_MapIteratorOfMapOfPave;
#endif
#include <BOPDS_PaveBlock.ixx>
#include <BOPDS_ListOfPave.hxx>
+#include <BOPDS_VectorOfPave.hxx>
+
#include <Standard.hxx>
#include <NCollection_BaseAllocator.hxx>
+#include <algorithm>
#ifdef WNT
#pragma warning ( disable : 4291 )
#endif
-static
- void SortShell(const int n, BOPDS_Pave *a);
-
//=======================================================================
//function :
//purpose :
const Standard_Boolean theFlag)
{
Standard_Integer i, aNb;
- BOPDS_Pave *pPaves;
BOPDS_Pave aPave1, aPave2;
Handle(BOPDS_PaveBlock) aPB;
BOPDS_ListIteratorOfListOfPave aIt;
aNb=aNb+2;
}
//
- pPaves=(BOPDS_Pave *)myAllocator->Allocate(aNb*sizeof(BOPDS_Pave));
- for (i=0; i<aNb; ++i) {
- new (pPaves+i) BOPDS_Pave();
+ if (aNb <= 1) {
+ myExtPaves.Clear();
+ myMFence.Clear();
+ return;
}
//
- i=0;
+ BOPDS_VectorOfPave pPaves(1, aNb);
+ //
+ i=1;
if (theFlag) {
- pPaves[i]=myPave1;
+ pPaves(i) = myPave1;
++i;
- pPaves[i]=myPave2;
+ pPaves(i) = myPave2;
++i;
}
//
aIt.Initialize(myExtPaves);
for (; aIt.More(); aIt.Next()) {
const BOPDS_Pave& aPave=aIt.Value();
- pPaves[i]=(aPave);
+ pPaves(i) = aPave;
++i;
}
myExtPaves.Clear();
myMFence.Clear();
//
- SortShell(aNb, pPaves);
+ std::sort(pPaves.begin(), pPaves.end());
//
- for (i=0; i<aNb; ++i) {
- const BOPDS_Pave& aPave=pPaves[i];
- if (!i) {
- aPave1=aPave;
+ for (i = 1; i <= aNb; ++i) {
+ const BOPDS_Pave& aPave = pPaves(i);
+ if (i == 1) {
+ aPave1 = aPave;
continue;
}
//
- aPave2=aPave;
- aPB=new BOPDS_PaveBlock;
+ aPave2 = aPave;
+ aPB = new BOPDS_PaveBlock;
aPB->SetOriginalEdge(myOriginalEdge);
aPB->SetPave1(aPave1);
aPB->SetPave2(aPave2);
//
theLPB.Append(aPB);
//
- aPave1=aPave2;
- }
- //
- for (i=0; i<aNb; ++i) {
- pPaves[i].~BOPDS_Pave();
+ aPave1 = aPave2;
}
- myAllocator->Free(pPaves);
}
-
-//=======================================================================
-// function: SortShell
-// purpose :
-//=======================================================================
-void SortShell(const int n, BOPDS_Pave *a)
-{
- int nd, i, j, l, d=1;
- BOPDS_Pave x;
- //
- while(d<=n) {
- d*=2;
- }
- //
- while (d) {
- d=(d-1)/2;
- //
- nd=n-d;
- for (i=0; i<nd; ++i) {
- j=i;
- m30:;
- l=j+d;
- if (a[l] < a[j]){
- x=a[j];
- a[j]=a[l];
- a[l]=x;
- j-=d;
- if (j > -1) goto m30;
- }//if (a[l] < a[j]){
- }//for (i=0; i<nd; ++i)
- }//while (1)
-}
-
// ShrunkData
//=======================================================================
//function : HasShrunkData
--- /dev/null
+// Created by: Eugeny MALTCHIKOV
+// Copyright (c) 1999-2014 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+
+#ifndef BOPDS_VectorOfPave_HeaderFile
+#define BOPDS_VectorOfPave_HeaderFile
+
+#include <NCollection_Array1.hxx>
+#include <BOPDS_Pave.hxx>
+
+typedef NCollection_Array1<BOPDS_Pave> BOPDS_VectorOfPave;
+
+#endif
BOPDS_IndexedDataMapOfPaveBlockListOfInteger.hxx
BOPDS_IndexedDataMapOfShapeCoupleOfPaveBlocks.hxx
BOPDS_DataMapOfPaveBlockCommonBlock.hxx
-
+BOPDS_VectorOfPave.hxx
\ No newline at end of file