1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-04-21 10:13:43 +03:00
occt/samples/qt/FuncDemo/src/SimpleDriver.cpp

85 lines
2.2 KiB
C++

// SimpleDriver.cpp: implementation of the SimpleDriver class.
//
//////////////////////////////////////////////////////////////////////
#include "SimpleDriver.h"
#include <TDF_Reference.hxx>
#include <TDF_ChildIterator.hxx>
#include <Standard_GUID.hxx>
#include <OSD_Timer.hxx>
#include <TDataStd_Real.hxx>
#include <BRepPrimAPI_MakeSphere.hxx>
IMPLEMENT_STANDARD_HANDLE(SimpleDriver, TFunction_Driver)
IMPLEMENT_STANDARD_RTTIEXT(SimpleDriver, TFunction_Driver)
// ID of the function driver
const Standard_GUID& SimpleDriver::GetID()
{
static const Standard_GUID id("4534840D-6DCD-440f-9F0E-BDEF1C50D434");
return id;
}
// Constructor
SimpleDriver::SimpleDriver()
{
}
// Returns the arguments of the function
void SimpleDriver::Arguments(TDF_LabelList& args) const
{
// A double - relative time of execution
args.Append(Label());
// References to other functions through TDF_Reference
TDF_ChildIterator itr(Label().FindChild(1), false);
for (; itr.More(); itr.Next())
{
Handle(TDF_Reference) ref;
if (itr.Value().FindAttribute(TDF_Reference::GetID(), ref))
args.Append(ref->Get());
}
}
// Returns the results of the function
void SimpleDriver::Results(TDF_LabelList& res) const
{
// References to other functions through TDF_Reference
res.Append(Label());
TDF_ChildIterator itr(Label().FindChild(2), false);
for (; itr.More(); itr.Next())
{
Handle(TDF_Reference) ref;
if (itr.Value().FindAttribute(TDF_Reference::GetID(), ref))
res.Append(ref->Get());
}
}
// Execution.
Standard_Integer SimpleDriver::Execute(Handle(TFunction_Logbook)& ) const
{
// Check initialization
if (Label().IsNull())
return 1;
// Take the double argument
Handle(TDataStd_Real) time_keeper;
if (!Label().FindAttribute(TDataStd_Real::GetID(), time_keeper))
return 2;
double times = time_keeper->Get();
// Make a sphere 10000 * "times" times (it takes about a second on a simple computer).
int i = 0;
while (++i < 10000 * times)
{
// Call any fucntions taking much time.
// It is necessary to "see" the execution of a function in real time.
BRepPrimAPI_MakeSphere mkSphere(100.0);
mkSphere.Build();
}
return 0;
}