// Created on: 1993-02-02 // Created by: Christian CAILLET // Copyright (c) 1993-1999 Matra Datavision // 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. #ifndef _Interface_Protocol_HeaderFile #define _Interface_Protocol_HeaderFile #include "Standard.hxx" #include "Standard_Type.hxx" #include "Standard_Transient.hxx" #include "Standard_Integer.hxx" class Interface_Graph; class Interface_Check; class Interface_InterfaceModel; //! General description of Interface Protocols. A Protocol defines //! a set of Entity types. This class provides also the notion of //! Active Protocol, as a working context, defined once then //! exploited by various Tools and Libraries. //! //! It also gives control of type definitions. By default, types //! are provided by CDL, but specific implementations, or topics //! like multi-typing, may involve another way class Interface_Protocol : public Standard_Transient { public: //! Returns the Active Protocol, if defined (else, returns a //! Null Handle, which means "no defined active protocol") Standard_EXPORT static occ::handle Active(); //! Sets a given Protocol to be the Active one (for the users of //! Active, see just above). Applies to every sub-type of Protocol Standard_EXPORT static void SetActive(const occ::handle& aprotocol); //! Erases the Active Protocol (hence it becomes undefined) Standard_EXPORT static void ClearActive(); //! Returns count of Protocol used as Resources (level one) Standard_EXPORT virtual int NbResources() const = 0; //! Returns a Resource, given its rank (between 1 and NbResources) Standard_EXPORT virtual occ::handle Resource(const int num) const = 0; //! Returns a unique positive CaseNumber for each Recognized //! Object. By default, recognition is based on Type(1) //! By default, calls the following one which is deferred. Standard_EXPORT virtual int CaseNumber(const occ::handle& obj) const; //! Returns True if type of is that defined from CDL //! This is the default but it may change according implementation Standard_EXPORT virtual bool IsDynamicType(const occ::handle& obj) const; //! Returns the count of DISTINCT types under which an entity may //! be processed. Each one is candidate to be recognized by //! TypeNumber, is then processed according it //! By default, returns 1 (the DynamicType) Standard_EXPORT virtual int NbTypes(const occ::handle& obj) const; //! Returns a type under which can be recognized and //! processed, according its rank in its definition list (see //! NbTypes). //! By default, returns DynamicType Standard_EXPORT occ::handle Type(const occ::handle& obj, const int nt = 1) const; //! Returns a unique positive CaseNumber for each Recognized Type, //! Returns Zero for " not recognized" Standard_EXPORT virtual int TypeNumber(const occ::handle& atype) const = 0; //! Evaluates a Global Check for a model (with its Graph) //! Returns True when done, False if data in model do not apply //! //! Very specific of each norm, i.e. of each protocol : the //! uppest level Protocol assumes it, it can call GlobalCheck of //! its resources only if it is necessary //! //! Default does nothing, can be redefined Standard_EXPORT virtual bool GlobalCheck(const Interface_Graph& G, occ::handle& ach) const; //! Creates an empty Model of the considered Norm Standard_EXPORT virtual occ::handle NewModel() const = 0; //! Returns True if is a Model of the considered Norm Standard_EXPORT virtual bool IsSuitableModel( const occ::handle& model) const = 0; //! Creates a new Unknown Entity for the considered Norm Standard_EXPORT virtual occ::handle UnknownEntity() const = 0; //! Returns True if is an Unknown Entity for the Norm, i.e. //! same Type as them created by method UnknownEntity //! (for an Entity out of the Norm, answer can be unpredictable) Standard_EXPORT virtual bool IsUnknownEntity( const occ::handle& ent) const = 0; DEFINE_STANDARD_RTTIEXT(Interface_Protocol, Standard_Transient) }; #endif // _Interface_Protocol_HeaderFile