0023648: Add tool for checking shapes on validity for boolean operations.
[occt.git] / src / BRepAlgoAPI / BRepAlgoAPI.cxx
1 // Created on: 2012-12-25
2 // Created by: KULIKOVA Galina
3 // Copyright (c) 2012 OPEN CASCADE SAS
4 //
5 // The content of this file is subject to the Open CASCADE Technology Public
6 // License Version 6.5 (the "License"). You may not use the content of this file
7 // except in compliance with the License. Please obtain a copy of the License
8 // at http://www.opencascade.org and read it completely before using this file.
9 //
10 // The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
11 // main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
12 //
13 // The Original Code and all software distributed under the License is
14 // distributed on an "AS IS" basis, without warranty of any kind, and the
15 // Initial Developer hereby disclaims all such warranties, including without
16 // limitation, any warranties of merchantability, fitness for a particular
17 // purpose or non-infringement. Please see the License for the specific terms
18 // and conditions governing the rights and limitations under the License.
19
20
21 #include <BRepAlgoAPI.ixx>
22
23 #include <stdio.h>
24 #include <TCollection_AsciiString.hxx>
25 #include <BRepTools.hxx>
26 #include <OSD_File.hxx>
27
28 //=======================================================================
29 //function : dumpOper
30 //purpose  : 
31 //=======================================================================
32 void BRepAlgoAPI::DumpOper(const Standard_CString theFilePath,
33                            const TopoDS_Shape& theShape1,
34                            const TopoDS_Shape& theShape2,
35                            const TopoDS_Shape& theResult,
36                            BOPAlgo_Operation theOperation,
37                            Standard_Boolean isNonValidArgs)
38 {
39   TCollection_AsciiString aPath(theFilePath);
40   aPath += "/";
41   Standard_Integer aNumOper = 1;
42   Standard_Boolean isExist = Standard_True;
43   TCollection_AsciiString aFileName;
44  
45   while(isExist)
46   {
47     aFileName = aPath + "BO_" + TCollection_AsciiString(aNumOper) +".tcl";
48     OSD_File aScript(aFileName);
49     isExist = aScript.Exists();
50     if(isExist)
51       aNumOper++;
52   }
53
54   FILE* afile = fopen(aFileName.ToCString(), "w+");
55   if(!afile)
56     return;
57   if(isNonValidArgs)
58     fprintf(afile,"%s\n","# Arguments are invalid");
59
60   TCollection_AsciiString aName1;
61   TCollection_AsciiString aName2;
62   TCollection_AsciiString aNameRes;
63   if(!theShape1.IsNull())
64   {
65     aName1 = aPath +
66       "Arg1_" + TCollection_AsciiString(aNumOper) + ".brep";
67     BRepTools::Write(theShape1, aName1.ToCString());
68   }
69   else
70     fprintf(afile,"%s\n","# First argument is Null ");
71    
72   if(!theShape2.IsNull())
73   {
74     aName2 =  aPath +
75       "Arg2_"+ TCollection_AsciiString(aNumOper) + ".brep";
76
77     BRepTools::Write(theShape2, aName2.ToCString());
78   }
79   else
80     fprintf(afile,"%s\n","# Second argument is Null ");
81    
82    if(!theResult.IsNull())
83   {
84     aNameRes =  aPath +
85       "Result_"+ TCollection_AsciiString(aNumOper) + ".brep";
86
87     BRepTools::Write(theResult, aNameRes.ToCString());
88   }
89   else
90     fprintf(afile,"%s\n","# Result is Null ");
91   
92   fprintf(afile, "%s %s %s\n","restore",  aName1.ToCString(), "arg1");
93   fprintf(afile, "%s %s %s\n","restore",  aName2.ToCString(), "arg2");;
94   TCollection_AsciiString aBopString;
95   switch (theOperation)
96   {
97     case BOPAlgo_COMMON : aBopString += "bcommon Res "; break;
98     case BOPAlgo_FUSE   : aBopString += "bfuse Res "; break;
99     case BOPAlgo_CUT    : 
100     case BOPAlgo_CUT21  : aBopString += "bcut Res "; break;
101     case BOPAlgo_SECTION : aBopString += "bsection Res "; break;
102     default : break;
103   };
104   aBopString += ("arg1 arg2");
105   if(theOperation == BOPAlgo_CUT21)
106     aBopString += " 1";
107
108   fprintf(afile, "%s\n",aBopString.ToCString());
109   fclose(afile);
110 }