// 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.

//#include <IFSelect_ModelModifier.ixx>
#include <Interface_Check.hxx>

IFSelect_ModelModifier::IFSelect_ModelModifier (const Standard_Boolean grf)
    : IFSelect_Modifier (grf)    {  }

    void  IFSelect_ModelModifier::Perform
  (IFSelect_ContextModif& ctx,
   const Handle(Interface_InterfaceModel)& target,
   const Handle(Interface_Protocol)& protocol,
   Interface_CopyTool& TC) const
{
  ctx.TraceModifier(this);
  Handle(Model) targ = Handle(Model)::DownCast(target);
  Handle(Proto) prot = Handle(Proto)::DownCast(protocol);
  if (targ.IsNull()) {
    ctx.CCheck()->AddFail("Model to Modify : unproper type");
    return;
  }
  PerformProtocol (ctx,targ,prot,TC);
}

    void  IFSelect_ModelModifier::PerformProtocol
  (IFSelect_ContextModif& ctx,
   const Handle(Model)& target,
   const Handle(Proto)& protocol,
   Interface_CopyTool& TC) const
{  ctx.SetProtocol(protocol);  Performing (ctx,target,TC);  }
