1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-08-09 13:22:24 +03:00

0029604: Uniform mechanism providing History of shape's modifications for OCCT algorithms in DRAW

Implementation of the mechanism for unification of the history commands for all OCCT algorithms.
The following Draw commands should be used to track the history of shapes modifications of any operation:
- modified - to find the shapes modified from the given shape in the given history.
- generated - to find the shapes generated from the given shape in the given history.
- isdeleted - to check if the given shape has been deleted during operation.

The mechanism allows fast & easy enabling of the DRAW history support for the algorithms supporting the history on the API level (i.e. the algorithm should have the methods Modified(), Generated() and IsDeleted()).
To enable the draw history support it is necessary to store the history of the algorithm into the session. For instance:

TopTools_ListOfShape Objects = ...; // Objects
TopTools_ListOfShape Tools = ...; // Tools

BRepAlgoAPI_Cut aCut(Objects, Tools); // Boolean cut operation

BRepTest_Objects::SetHistory(Objects, aCut); // Store the history for the Objects (overwrites the history in the session)
BRepTest_Objects::AddHistory(Tools, aCut);   // Add the history for the Tools

To get the stored history in draw the command "savehistory" should be used. It saves the history kept in session into a Drawable object with the given name:

# perform cut
bcut r s1 s2

# save history of cut
savehistory cut_history

explode s1 f
modified m cut_history s1_1

The Draw History commands of the following algorithms have been removed:
- Boolean Operations;
- Defeaturing;
- Unify same domain;
- Sweep;
- Thrusections;

All these algorithms have been switched to support the new Draw history mechanism.

The Fillet and Blend algorithms have been also enabled to support history commands.
This commit is contained in:
emv
2018-03-21 16:59:29 +03:00
committed by bugmaster
parent a3d3777de9
commit 4f7d41eac3
94 changed files with 1892 additions and 1236 deletions

View File

@@ -48,6 +48,7 @@ void BRepTest::AllCommands(Draw_Interpretor& theCommands)
BRepTest::CheckCommands(theCommands);
// BRepTest::PlacementCommands(theCommands) ;
BRepTest::ProjectionCommands(theCommands) ;
BRepTest::HistoryCommands(theCommands);
// define the TCL variable Draw_TOPOLOGY
const char* com = "set Draw_TOPOLOGY 1";

View File

@@ -98,6 +98,8 @@ public:
//! Defines the commands to project a wire on a shape.
Standard_EXPORT static void ProjectionCommands (Draw_Interpretor& DI);
//! Defines the History commands for the algorithms.
Standard_EXPORT static void HistoryCommands (Draw_Interpretor& DI);

View File

@@ -0,0 +1,44 @@
// Created on: 2018/03/21
// Created by: Eugeny MALTCHIKOV
// Copyright (c) 2018 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.
#include <BRepTest_DrawableHistory.hxx>
IMPLEMENT_STANDARD_RTTIEXT(BRepTest_DrawableHistory, Draw_Drawable3D)
//=======================================================================
//function : DrawOn
//purpose :
//=======================================================================
void BRepTest_DrawableHistory::DrawOn(Draw_Display&) const
{
}
//=======================================================================
//function : Dump
//purpose :
//=======================================================================
void BRepTest_DrawableHistory:: Dump(Standard_OStream& theS) const
{
myHistory->Dump(theS);
}
//=======================================================================
//function : Whatis
//purpose :
//=======================================================================
void BRepTest_DrawableHistory::Whatis(Draw_Interpretor& theDI) const
{
theDI << "history";
}

View File

@@ -0,0 +1,65 @@
// Created on: 2018/03/21
// Created by: Eugeny MALTCHIKOV
// Copyright (c) 2018 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 _BRepTest_DrawableHistory_HeaderFile
#define _BRepTest_DrawableHistory_HeaderFile
#include <Standard.hxx>
#include <Standard_Type.hxx>
#include <BRepTools_History.hxx>
#include <Draw_Drawable3D.hxx>
#include <Draw_Interpretor.hxx>
#include <Standard_OStream.hxx>
//! Drawable History object.
//! Allows keeping histories of the algorithms in Draw.
class BRepTest_DrawableHistory : public Draw_Drawable3D
{
DEFINE_STANDARD_RTTIEXT(BRepTest_DrawableHistory, Draw_Drawable3D)
public:
//! Creation of the Drawable history.
BRepTest_DrawableHistory(const Handle(BRepTools_History)& theHistory)
{
myHistory = theHistory;
}
//! Returns the history.
const Handle(BRepTools_History)& History() const
{
return myHistory;
}
//! Drawing is not available.
Standard_EXPORT virtual void DrawOn(Draw_Display&)const Standard_OVERRIDE;
//! Dumps the history.
Standard_EXPORT virtual void Dump(Standard_OStream& theS) const Standard_OVERRIDE;
//! Prints the type of the history object.
Standard_EXPORT virtual void Whatis(Draw_Interpretor& theDI) const Standard_OVERRIDE;
private:
Handle(BRepTools_History) myHistory; //!< Tool for tracking History of shape's modification
};
DEFINE_STANDARD_HANDLE(BRepTest_DrawableHistory, Draw_Drawable3D)
#endif

View File

@@ -61,6 +61,7 @@
#include <DBRep.hxx>
#include <DBRep_DrawableShape.hxx>
#include <BRepTest.hxx>
#include <BRepTest_Objects.hxx>
#include <BRepFilletAPI_MakeFillet.hxx>
#include <ChFi3d_FilletShape.hxx>
@@ -2093,9 +2094,9 @@ static Standard_Integer BOSS(Draw_Interpretor& theCommands,
}
if ((!strcasecmp(a[0],"ENDEDGES") && narg !=5) ||
(!strcasecmp(a[0],"FILLET") && narg <5 && narg%2 != 1) ||
(!strcasecmp(a[0],"FILLET") && (narg < 5 || narg%2 != 1)) ||
(!strcasecmp(a[0],"BOSSAGE") && narg != 6)) {
theCommands << "invalid number of arguments";
theCommands.PrintHelp(a[0]);
return 1;
}
@@ -2171,6 +2172,8 @@ static Standard_Integer BOSS(Draw_Interpretor& theCommands,
if(V.IsNull()) return 1;
ChFi3d_FilletShape FSh = ChFi3d_Rational;
if (Rakk)
delete Rakk;
Rakk = new BRepFilletAPI_MakeFillet(V,FSh);
Rakk->SetParams(ta,t3d,t2d,t3d,t2d,fl);
Rakk->SetContinuity(blend_cont, tapp_angle);
@@ -2233,6 +2236,12 @@ static Standard_Integer BOSS(Draw_Interpretor& theCommands,
DBRep::Set(a[2],res);
}
dout.Flush();
// Save history for fillet
TopTools_ListOfShape anArg;
anArg.Append(V);
BRepTest_Objects::SetHistory(anArg, *Rakk);
return 0;
}

View File

@@ -15,6 +15,7 @@
// commercial license or contractual agreement.
#include <BRepTest.hxx>
#include <BRepTest_Objects.hxx>
#include <TColgp_Array1OfPnt2d.hxx>
#include <DBRep.hxx>
#include <Draw_Interpretor.hxx>
@@ -176,6 +177,12 @@ static Standard_Integer BLEND(Draw_Interpretor& di, Standard_Integer narg, const
if(!nbedge) return 1;
Rakk->Build();
if(!Rakk->IsDone()) return 1;
// Save history for fillet
TopTools_ListOfShape anArg;
anArg.Append(V);
BRepTest_Objects::SetHistory(anArg, *Rakk);
TopoDS_Shape res = Rakk->Shape();
DBRep::Set(a[1],res);
return 0;

View File

@@ -0,0 +1,249 @@
// Created on: 2018/03/21
// Created by: Eugeny MALTCHIKOV
// Copyright (c) 2018 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.
#include <BRepTest.hxx>
#include <BRep_Builder.hxx>
#include <BRepTest_DrawableHistory.hxx>
#include <BRepTest_Objects.hxx>
#include <Draw.hxx>
#include <DBRep.hxx>
#include <TopoDS.hxx>
#include <TopoDS_Compound.hxx>
static Standard_Integer SaveHistory(Draw_Interpretor&, Standard_Integer, const char**);
static Standard_Integer Modified (Draw_Interpretor&, Standard_Integer, const char**);
static Standard_Integer Generated (Draw_Interpretor&, Standard_Integer, const char**);
static Standard_Integer IsDeleted (Draw_Interpretor&, Standard_Integer, const char**);
//=======================================================================
//function : HistoryCommands
//purpose :
//=======================================================================
void BRepTest::HistoryCommands(Draw_Interpretor& theCommands)
{
static Standard_Boolean isDone = Standard_False;
if (isDone) return;
isDone = Standard_True;
// Chapter's name
const char* group = "History commands";
// Commands
theCommands.Add("savehistory" , "savehistory name\n"
"\t\tSaves the history from the session into a drawable object with the name <name>.",
__FILE__, SaveHistory , group);
theCommands.Add("modified" , "modified modified_shapes history shape\n"
"\t\tReturns the shapes Modified from the given shape in the given history",
__FILE__, Modified , group);
theCommands.Add("generated", "generated generated_shapes history shape\n"
"\t\tReturns the shapes Generated from the given shape in the given history",
__FILE__, Generated, group);
theCommands.Add("isdeleted", "isdeleted history shape\n"
"\t\tChecks if the given shape has been deleted in the given history",
__FILE__, IsDeleted, group);
}
//=======================================================================
//function : SaveHistory
//purpose :
//=======================================================================
Standard_Integer SaveHistory(Draw_Interpretor& theDI,
Standard_Integer theArgc,
const char** theArgv)
{
if (theArgc != 2)
{
theDI.PrintHelp(theArgv[0]);
return 1;
}
// Get the history from the session
Handle(BRepTools_History) aHistory = BRepTest_Objects::History();
if (aHistory.IsNull())
{
theDI << "No history has been prepared yet.";
return 1;
}
Handle(BRepTest_DrawableHistory) aDrawHist = new BRepTest_DrawableHistory(aHistory);
Draw::Set(theArgv[1], aDrawHist);
return 0;
}
//=======================================================================
//function : GetHistory
//purpose :
//=======================================================================
static Handle(BRepTools_History) GetHistory(Draw_Interpretor& theDI,
Standard_CString theName)
{
Handle(BRepTest_DrawableHistory) aHistory =
Handle(BRepTest_DrawableHistory)::DownCast(Draw::Get(theName));
if (aHistory.IsNull() || aHistory->History().IsNull())
{
theDI << "History with the name " << theName << " does not exist.";
return NULL;
}
return aHistory->History();
}
//=======================================================================
//function : GetShape
//purpose :
//=======================================================================
static TopoDS_Shape GetShape(Draw_Interpretor& theDI,
Standard_CString theName)
{
TopoDS_Shape aS = DBRep::Get(theName);
if (aS.IsNull())
{
theDI << theName << " is a null shape.";
return TopoDS_Shape();
}
if (!BRepTools_History::IsSupportedType(aS))
{
theDI << "History is not supported for this kind of shape.";
return TopoDS_Shape();
}
return aS;
}
//=======================================================================
//function : MakeCompound
//purpose :
//=======================================================================
static TopoDS_Shape MakeCompound(const TopTools_ListOfShape& theLS)
{
TopoDS_Shape aC;
if (theLS.Extent() == 1)
aC = theLS.First();
else
{
BRep_Builder().MakeCompound(TopoDS::Compound(aC));
TopTools_ListIteratorOfListOfShape it(theLS);
for (; it.More(); it.Next())
BRep_Builder().Add(aC, it.Value());
}
return aC;
}
//=======================================================================
//function : Modified
//purpose :
//=======================================================================
Standard_Integer Modified(Draw_Interpretor& theDI,
Standard_Integer theArgc,
const char** theArgv)
{
if (theArgc != 4)
{
theDI.PrintHelp(theArgv[0]);
return 1;
}
Handle(BRepTools_History) aHistory = GetHistory(theDI, theArgv[2]);
if (aHistory.IsNull())
return 1;
TopoDS_Shape aS = GetShape(theDI, theArgv[3]);
if (aS.IsNull())
return 1;
const TopTools_ListOfShape& aModified = aHistory->Modified(aS);
if (aModified.IsEmpty())
{
theDI << "The shape has not been modified.";
return 0;
}
DBRep::Set(theArgv[1], MakeCompound(aModified));
return 0;
}
//=======================================================================
//function : Generated
//purpose :
//=======================================================================
Standard_Integer Generated(Draw_Interpretor& theDI,
Standard_Integer theArgc,
const char** theArgv)
{
if (theArgc != 4)
{
theDI.PrintHelp(theArgv[0]);
return 1;
}
Handle(BRepTools_History) aHistory = GetHistory(theDI, theArgv[2]);
if (aHistory.IsNull())
return 1;
TopoDS_Shape aS = GetShape(theDI, theArgv[3]);
if (aS.IsNull())
return 1;
const TopTools_ListOfShape& aGenerated = aHistory->Generated(aS);
if (aGenerated.IsEmpty())
{
theDI << "No shapes were generated from the shape.";
return 0;
}
DBRep::Set(theArgv[1], MakeCompound(aGenerated));
return 0;
}
//=======================================================================
//function : IsDeleted
//purpose :
//=======================================================================
Standard_Integer IsDeleted(Draw_Interpretor& theDI,
Standard_Integer theArgc,
const char** theArgv)
{
if (theArgc != 3)
{
theDI.PrintHelp(theArgv[0]);
return 1;
}
Handle(BRepTools_History) aHistory = GetHistory(theDI, theArgv[1]);
if (aHistory.IsNull())
return 1;
TopoDS_Shape aS = GetShape(theDI, theArgv[2]);
if (aS.IsNull())
return 1;
theDI << (aHistory->IsRemoved(aS) ? "Deleted." : "Not deleted.");
return 0;
}

View File

@@ -0,0 +1,89 @@
// Created on: 2018/03/21
// Created by: Eugeny MALTCHIKOV
// Copyright (c) 2018 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.
#include <BRepTest_Objects.hxx>
//=======================================================================
//function : BRepTest_Session
//purpose : Class for the objects in the session
//=======================================================================
class BRepTest_Session
{
public:
//! Empty constructor
BRepTest_Session() {}
//! Sets the History in the session
void SetHistory(const Handle(BRepTools_History)& theHistory)
{
myHistory = theHistory;
}
//! Add the History to the history in the session
void AddHistory(const Handle(BRepTools_History)& theHistory)
{
if (myHistory.IsNull())
myHistory = new BRepTools_History;
myHistory->Merge(theHistory);
}
//! Returns the history from the session
const Handle(BRepTools_History)& History() const
{
return myHistory;
}
private:
Handle(BRepTools_History) myHistory;
};
//=======================================================================
//function : GetSession
//purpose :
//=======================================================================
static BRepTest_Session& GetSession()
{
static BRepTest_Session* pSession = new BRepTest_Session();
return *pSession;
}
//=======================================================================
//function : SetHistory
//purpose :
//=======================================================================
void BRepTest_Objects::SetHistory(const Handle(BRepTools_History)& theHistory)
{
GetSession().SetHistory(theHistory);
}
//=======================================================================
//function : AddHistory
//purpose :
//=======================================================================
void BRepTest_Objects::AddHistory(const Handle(BRepTools_History)& theHistory)
{
GetSession().AddHistory(theHistory);
}
//=======================================================================
//function : History
//purpose :
//=======================================================================
Handle(BRepTools_History) BRepTest_Objects::History()
{
return GetSession().History();
}

View File

@@ -0,0 +1,52 @@
// Created on: 2018/03/21
// Created by: Eugeny MALTCHIKOV
// Copyright (c) 2018 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 _BRepTest_Objects_HeaderFile
#define _BRepTest_Objects_HeaderFile
#include <BRepTools_History.hxx>
//! Provides the access to the useful tools common for the algorithms.
class BRepTest_Objects
{
public:
//! Sets the given history into the session.
Standard_EXPORT static void SetHistory(const Handle(BRepTools_History)& theHistory);
//! Adds the given history to the history in the session.
Standard_EXPORT static void AddHistory(const Handle(BRepTools_History)& theHistory);
//! Sets the history of the given algorithm into the session.
template <class TheAlgo>
static void SetHistory(const TopTools_ListOfShape& theArguments,
TheAlgo& theAlgo)
{
SetHistory(new BRepTools_History(theArguments, theAlgo));
}
//! Adds the history of the given algorithm into the session.
template <class TheAlgo>
static void AddHistory(const TopTools_ListOfShape& theArguments,
TheAlgo& theAlgo)
{
AddHistory(new BRepTools_History(theArguments, theAlgo));
}
//! Returns the history from the session.
Standard_EXPORT static Handle(BRepTools_History) History();
};
#endif

View File

@@ -15,6 +15,9 @@
// commercial license or contractual agreement.
#include <BRepTest.hxx>
#include <BRepTest_Objects.hxx>
#include <DBRep.hxx>
#include <Draw_Interpretor.hxx>
#include <Draw_Appli.hxx>
@@ -420,59 +423,13 @@ Standard_Integer thrusections(Draw_Interpretor&, Standard_Integer n, const char*
if (Generator->IsDone()) {
TopoDS_Shape Shell = Generator->Shape();
DBRep::Set(a[index-1], Shell);
// Save history of the lofting
BRepTest_Objects::SetHistory(Generator->Wires(), *Generator);
}
else {
cout << "Algorithm is not done" << endl;
}
return 0;
}
//============================================================================
//function : genthrus
//purpose : returns generated shape for subshape of a section of thrusections
// Thrusections must be done previously
//============================================================================
static Standard_Integer genthrus(Draw_Interpretor& di,
Standard_Integer n, const char** a)
{
if (n != 3)
{
di << "genthrus: it is called after thrusections command\n";
di << "returns:\n";
di << "- chain of generated faces for sub-edge of a profile;\n";
di << "- chain of generated edges for sub-vertex of a profile;\n";
di << "- bunch of chains of generated edges for start or end vertex if it is degenerated section.\n";
di << "Usage: genthrus res subshape_of_profile, thrusections must be done\n";
return 1;
}
if (Generator == 0)
{
di << "You have forgotten the <<thrusections>> command !\n";
return 1;
}
if (!Generator->IsDone())
{
di << "Thrusections is not done\n";
return 1;
}
TopoDS_Shape aShape = DBRep::Get(a[2]);
if (aShape.IsNull())
{
cout<<"Null subshape"<<endl;
return 1;
}
const TopTools_ListOfShape& Edges = Generator->Generated(aShape);
TopoDS_Compound aCompound;
BRep_Builder BB;
BB.MakeCompound(aCompound);
TopTools_ListIteratorOfListOfShape iter(Edges);
for (; iter.More(); iter.Next())
{
const TopoDS_Shape& anEdge = iter.Value();
BB.Add(aCompound, anEdge);
}
DBRep::Set(a[1], aCompound);
return 0;
}
@@ -801,7 +758,6 @@ static Standard_Integer buildsweep(Draw_Interpretor& di,
//cout << "BuildSweep : One section can not be in contact with the guide" << endl;
di << "BuildSweep : One section can not be in contact with the guide\n";
}
return 1;
}
else {
if (mksolid) {
@@ -812,50 +768,15 @@ static Standard_Integer buildsweep(Draw_Interpretor& di,
}
result = Sweep->Shape();
DBRep::Set(a[1],result);
// Save history of sweep
TopTools_ListOfShape aProfiles;
Sweep->Profiles(aProfiles);
BRepTest_Objects::SetHistory(aProfiles, *Sweep);
}
return 0;
}
//=======================================================================
//function : gensweep
//purpose : returns generated shape for subshape of a section of sweep
// Sweep must be done previously
//=======================================================================
static Standard_Integer gensweep(Draw_Interpretor&,
Standard_Integer n, const char** a)
{
if (n != 3)
{
cout<<"Usage: gensweep res subshape_of_profile, sweep must be done"<<endl;
return 1;
}
if (!Sweep->IsDone())
{
cout<<"Sweep is not done"<<endl;
return 1;
}
TopoDS_Shape aShape = DBRep::Get(a[2]);
if (aShape.IsNull())
{
cout<<"Null subshape"<<endl;
return 1;
}
TopTools_ListOfShape Shells = Sweep->Generated(aShape);
TopoDS_Compound aCompound;
BRep_Builder BB;
BB.MakeCompound(aCompound);
TopTools_ListIteratorOfListOfShape itsh(Shells);
for (; itsh.More(); itsh.Next())
{
const TopoDS_Shape& aShell = itsh.Value();
BB.Add(aCompound, aShell);
}
DBRep::Set(a[1], aCompound);
return 0;
}
//=======================================================================
//function : errorsweep
//purpose : returns the summary error on resulting surfaces
@@ -992,9 +913,6 @@ void BRepTest::SweepCommands(Draw_Interpretor& theCommands)
theCommands.Add("thrusections", "thrusections [-N] result issolid isruled shape1 shape2 [..shape..], the option -N means no check on wires, shapes must be wires or vertices (only first or last)",
__FILE__,thrusections,g);
theCommands.Add("genthrus", "genthrus res subshape_of_profile",
__FILE__,genthrus,g);
theCommands.Add("mksweep", "mksweep wire",
__FILE__,mksweep,g);
@@ -1013,9 +931,6 @@ void BRepTest::SweepCommands(Draw_Interpretor& theCommands)
theCommands.Add("buildsweep", "builsweep [r] [option] [Tol] , no args to get help",
__FILE__,buildsweep,g);
theCommands.Add("gensweep", "gensweep res subshape_of_profile",
__FILE__,gensweep,g);
theCommands.Add("errorsweep", "errorsweep: returns the summary error on resulting surfaces reached by Sweep",
__FILE__,errorsweep,g);

View File

@@ -5,13 +5,18 @@ BRepTest_ChamferCommands.cxx
BRepTest_CheckCommands.cxx
BRepTest_CurveCommands.cxx
BRepTest_DraftAngleCommands.cxx
BRepTest_DrawableHistory.cxx
BRepTest_DrawableHistory.hxx
BRepTest_ExtremaCommands.cxx
BRepTest_FeatureCommands.cxx
BRepTest_Fillet2DCommands.cxx
BRepTest_FilletCommands.cxx
BRepTest_FillingCommands.cxx
BRepTest_GPropCommands.cxx
BRepTest_HistoryCommands.cxx
BRepTest_MatCommands.cxx
BRepTest_Objects.cxx
BRepTest_Objects.hxx
BRepTest_OtherCommands.cxx
BRepTest_PrimitiveCommands.cxx
BRepTest_ProjectionCommands.cxx