summaryrefslogtreecommitdiff
path: root/src/BOP/BOP_EmptyBuilder.cxx
blob: 14708dffeb51f7904f023aeecea807619b5ed03b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
// File:	BOP_EmptyBuilder.cxx
// Created:	Fri Feb  1 12:58:48 2002
// Author:	Peter KURNEV
//		<pkv@irinox>

#include <BOP_EmptyBuilder.ixx>

#include <Standard_Failure.hxx>
#include <Standard_ErrorHandler.hxx>

#include <TopoDS_Compound.hxx>

#include <BRep_Builder.hxx>

#include <BOPTColStd_Dump.hxx>
#include <BOPTools_DSFiller.hxx>
#include <BOPTools_Tools3D.hxx>




//=======================================================================
// function: BOP_EmptyBuilder::BOP_EmptyBuilder
// purpose: 
//=======================================================================
   BOP_EmptyBuilder::BOP_EmptyBuilder()
{
}
//=======================================================================
// function: Destroy
// purpose: 
//=======================================================================
  void BOP_EmptyBuilder::Destroy() 
{
}
//=======================================================================
// function: Do
// purpose: 
//=======================================================================
  void BOP_EmptyBuilder::Do() 
{
  myErrorStatus=0;
  myIsDone=Standard_False;
  //
  // Filling the DS
  BOPTools_DSFiller aDSFiller;
  aDSFiller.SetShapes (myShape1, myShape2);
  //
  aDSFiller.Perform ();
  //
  DoWithFiller(aDSFiller);
}

//=======================================================================
// function: DoWithFiller
// purpose: 
//=======================================================================
  void BOP_EmptyBuilder::DoWithFiller(const BOPTools_DSFiller& aDSFiller) 
{
  myErrorStatus=0;
  myIsDone=Standard_False;
  //
  myResultMap.Clear();
  myModifiedMap.Clear();
  //
  myDSFiller=(BOPTools_DSFiller*) &aDSFiller;
  //
  // 
  try {
    OCC_CATCH_SIGNALS
    Standard_Boolean bIsNewFiller;
    bIsNewFiller=aDSFiller.IsNewFiller();
    
    if (bIsNewFiller) {
      aDSFiller.SetNewFiller(!bIsNewFiller);
    }
    //
    BuildResult();
    //
    //
    //FillModified();
    myIsDone=Standard_True;
  }

  catch ( Standard_Failure ) {
    myErrorStatus = 1;
    BOPTColStd_Dump::PrintMessage("Can not build result\n");
  }
  //
}

//=======================================================================
// function: BuildResult
// purpose: 
//=======================================================================
  void BOP_EmptyBuilder::BuildResult()
{
  Standard_Boolean bIsEmptyShape1, bIsEmptyShape2;
  BRep_Builder aBB;
  TopoDS_Compound aCompound;

  aBB.MakeCompound(aCompound);
  //
  bIsEmptyShape1=BOPTools_Tools3D::IsEmptyShape(myShape1);
  bIsEmptyShape2=BOPTools_Tools3D::IsEmptyShape(myShape2);
  //
  if (!bIsEmptyShape1 && bIsEmptyShape2) {
    if (myOperation==BOP_FUSE || myOperation==BOP_CUT) {
      aBB.Add(aCompound, myShape1);
    }
  }
  //
  else if (bIsEmptyShape1 && !bIsEmptyShape2) {
    if (myOperation==BOP_FUSE || myOperation==BOP_CUT21) {
      aBB.Add(aCompound, myShape2);
    }
  }
  //
  myResult=aCompound;
}