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

starting of hell

This commit is contained in:
dpasukhi
2023-01-27 23:26:45 +00:00
parent 2689910506
commit 2b5410a946
371 changed files with 4309 additions and 34963 deletions

View File

@@ -62,7 +62,7 @@ Administrative data, in the Global Section of the IGES file (such as the file n
Before performing any other operation, you have to load the file using the syntax below.
~~~~{.cpp}
IGESControl_Reader reader;
IFSelect_ReturnStatus stat = reader.ReadFile(“filename.igs”);
XSControl_ReturnStatus stat = reader.ReadFile(“filename.igs”);
~~~~
The loading operation only loads the IGES file into computer memory; it does not translate it.
@@ -1125,7 +1125,7 @@ Allows writing the prepared model to a file with name *filename.igs*.
Before performing any other operation, you must load an IGES file with:
~~~~{.cpp}
IGESCAFControl_Reader reader(XSDRAW::Session(), Standard_False);
IFSelect_ReturnStatus stat = reader.ReadFile(“filename.igs”);
XSControl_ReturnStatus stat = reader.ReadFile(“filename.igs”);
~~~~
Loading the file only memorizes, but does not translate the data.
@@ -1183,7 +1183,7 @@ aWriter.SetNameMode(mode);
You can perform the translation of a document by calling the function:
~~~~{.cpp}
IFSelect_ReturnStatus aRetSt = aWriter.Transfer(doc);
XSControl_ReturnStatus aRetSt = aWriter.Transfer(doc);
~~~~
where "doc" is a variable which contains a handle to the input document for transferring and should have a type *Handle(TDocStd_Document)*.
@@ -1191,11 +1191,11 @@ where "doc" is a variable which contains a handle to the input document for tran
Write an IGES file with:
~~~~{.cpp}
IFSelect_ReturnStatus statw = aWriter.WriteFile("filename.igs");
XSControl_ReturnStatus statw = aWriter.WriteFile("filename.igs");
~~~~
or
~~~~{.cpp}
IFSelect_ReturnStatus statw = writer.WriteFile (S);
XSControl_ReturnStatus statw = writer.WriteFile (S);
~~~~
where S is OStream.

View File

@@ -123,7 +123,7 @@ For further information see 2.4 Mapping STEP entities to Open CASCADE Technology
Before performing any other operation you have to load the file with:
~~~~{.cpp}
STEPControl_Reader reader;
IFSelect_ReturnStatus stat = reader.ReadFile("filename.stp");
XSControl_ReturnStatus stat = reader.ReadFile("filename.stp");
~~~~
Loading the file only memorizes the data, it does not translate it.
@@ -1067,13 +1067,13 @@ If *TopoDS_Compound* contains any other types besides the ones mentioned in the
In case if an OCCT shape cannot be translated according to its mode the result of translation is void.
~~~~{.cpp}
STEP214Control_StepModelTope mode = STEP214Control_ManifoldSolidBrep;
IFSelect_ReturnStatus stat = writer.Transfer(shape,mode);
XSControl_ReturnStatus stat = writer.Transfer(shape,mode);
~~~~
@subsubsection occt_step_3_3_4 Writing the STEP file
Write the STEP file with:
~~~~{.cpp}
IFSelect_ReturnStatus stat = writer.Write("filename.stp");
XSControl_ReturnStatus stat = writer.Write("filename.stp");
~~~~
to give the file name.
@@ -1514,7 +1514,7 @@ In addition to the translation of shapes implemented in basic translator, it pro
Before performing any other operation, you must load a STEP file with:
~~~~{.cpp}
STEPCAFControl_Reader reader(XSDRAW::Session(), Standard_False);
IFSelect_ReturnStatus stat = reader.ReadFile("filename.stp");
XSControl_ReturnStatus stat = reader.ReadFile("filename.stp");
~~~~
Loading the file only memorizes the data, it does not translate it.
@@ -1678,7 +1678,7 @@ aWriter.SetNameMode(mode);
You can perform the translation of document by calling the function:
~~~~{.cpp}
IFSelect_ReturnStatus aRetSt = aWriter.Transfer(doc);
XSControl_ReturnStatus aRetSt = aWriter.Transfer(doc);
~~~~
where *doc* is a variable, which contains a handle to the input document for transferring and should have a type *Handle(TDocStd_Document)*.
@@ -1686,11 +1686,11 @@ where *doc* is a variable, which contains a handle to the input document for tr
Write a STEP file with:
~~~~{.cpp}
IFSelect_ReturnStatus statw = aWriter.WriteFile("filename.stp");
XSControl_ReturnStatus statw = aWriter.WriteFile("filename.stp");
~~~~
or
~~~~{.cpp}
IFSelect_ReturnStatus statw = writer.WriteFile (S);
XSControl_ReturnStatus statw = writer.WriteFile (S);
~~~~
where *S* is *OStream*.

View File

@@ -1240,8 +1240,8 @@ To read a STEP file by itself, use:
~~~~{.cpp}
const char* theFilename = ...;
STEPCAFControl_Reader aReader;
IFSelect_ReturnStatus aReadStat = aReader.ReadFile (theFilename);
if (aReadStat != IFSelect_RetDone) { .. reader/parser error .. }
XSControl_ReturnStatus aReadStat = aReader.ReadFile (theFilename);
if (aReadStat != XSControl_RetDone) { .. reader/parser error .. }
// the various ways of reading a file are available here too:
// to read it by the reader, to take it from a WorkSession ...
Handle(TDocStd_Document) aDoc = ...;
@@ -1278,8 +1278,8 @@ if (!aWriter.Transfer (aDoc, aMode))
// writing the File
const char* theFilename = ...;
IFSelect_ReturnStatus aStat = aWriter.Write (theFilename);
if (aStat != IFSelect_RetDone) { .. writing failed .. }
XSControl_ReturnStatus aStat = aWriter.Write (theFilename);
if (aStat != XSControl_RetDone) { .. writing failed .. }
~~~~
@subsection occt_xde_2_11_3 Reading an IGES File

View File

@@ -1,186 +0,0 @@
// 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 <APIHeaderSection_EditHeader.hxx>
#include <APIHeaderSection_MakeHeader.hxx>
#include <IFSelect_EditForm.hxx>
#include <Interface_TypedValue.hxx>
#include <Standard_Transient.hxx>
#include <Standard_Type.hxx>
#include <StepData_StepModel.hxx>
#include <TCollection_AsciiString.hxx>
#include <TCollection_HAsciiString.hxx>
IMPLEMENT_STANDARD_RTTIEXT(APIHeaderSection_EditHeader,IFSelect_Editor)
static Standard_Boolean IsTimeStamp
(const Handle(TCollection_HAsciiString)& val)
{
if (val.IsNull()) return Standard_False;
if (val->Length() != 19) return Standard_False;
// On y va
char dizmois = val->Value(6);
char dizjour = val->Value(9);
char dizheur = val->Value(12);
for (Standard_Integer i = 1; i <= 19; i ++)
{
char uncar = val->Value(i);
switch (i) {
case 1 : if (uncar != '1' && uncar != '2') return Standard_False;
break;
case 2 :
case 3 :
case 4 : if (uncar < '0' || uncar > '9') return Standard_False;
break;
case 5 : if (uncar != '-') return Standard_False;
Standard_FALLTHROUGH
case 6 : if (uncar != '0' && uncar != '1') return Standard_False;
break;
case 7 : if (uncar < '0' || uncar > '9') return Standard_False;
if (dizmois == '1' && (uncar < '0' || uncar > '2')) return Standard_False;
break;
case 8 : if (uncar != '-') return Standard_False;
Standard_FALLTHROUGH
case 9 : if (uncar < '0' || uncar > '3') return Standard_False;
break;
case 10 : if (uncar < '0' || uncar > '9') return Standard_False;
if (dizjour == '3' && (uncar != '0' && uncar != '1')) return Standard_False;
break;
case 11 : if (uncar != 'T') return Standard_False;
Standard_FALLTHROUGH
case 12 : if (uncar < '0' || uncar > '2') return Standard_False;
break;
case 13 : if (uncar < '0' || uncar > '9') return Standard_False;
if (dizheur == '2' && (uncar < '0' || uncar > '3')) return Standard_False;
break;
case 14 : if (uncar != ':') return Standard_False;
Standard_FALLTHROUGH
case 15 : if (uncar < '0' || uncar > '5') return Standard_False;
break;
case 16 : if (uncar < '0' || uncar > '9') return Standard_False;
break;
case 17 : if (uncar != ':') return Standard_False;
Standard_FALLTHROUGH
case 18 : if (uncar < '0' || uncar > '5') return Standard_False;
break;
case 19 : if (uncar < '0' || uncar > '9') return Standard_False;
break;
default :
break;
}
}
return Standard_True;
}
APIHeaderSection_EditHeader::APIHeaderSection_EditHeader ()
: IFSelect_Editor (10)
{
// Definition
Handle(Interface_TypedValue) fn_name = new Interface_TypedValue("fn_name");
SetValue (1,fn_name,"name");
Handle(Interface_TypedValue) fn_time = new Interface_TypedValue("fn_time_stamp");
fn_time->SetSatisfies (IsTimeStamp,"IsTimeStamp");
SetValue (2,fn_time,"time");
Handle(Interface_TypedValue) fn_author = new Interface_TypedValue("fn_author");
SetValue (3,fn_author,"author"); // 1 seul (1er de liste)
Handle(Interface_TypedValue) fn_org = new Interface_TypedValue("fn_organization");
SetValue (4,fn_org,"org"); // 1 seul (1er de liste)
Handle(Interface_TypedValue) fn_preproc = new Interface_TypedValue("fn_preprocessor_version");
SetValue (5,fn_preproc,"preproc");
Handle(Interface_TypedValue) fn_orig = new Interface_TypedValue("fn_originating_system");
SetValue (6,fn_orig,"orig");
Handle(Interface_TypedValue) fn_autorize = new Interface_TypedValue("fn_authorization");
SetValue (7,fn_autorize,"autorize");
Handle(Interface_TypedValue) fs_schema = new Interface_TypedValue("fs_schema_identifiers");
SetValue (8,fs_schema,"schema"); // 1 seul (1er de liste)
Handle(Interface_TypedValue) fd_descr = new Interface_TypedValue("fd_description");
SetValue (9,fd_descr,"descr"); // 1 seul (1er de liste)
Handle(Interface_TypedValue) fd_level = new Interface_TypedValue("fd_implementation_level");
SetValue (10,fd_level,"level");
}
TCollection_AsciiString APIHeaderSection_EditHeader::Label () const
{ return TCollection_AsciiString ("Step Header"); }
Standard_Boolean APIHeaderSection_EditHeader::Recognize
(const Handle(IFSelect_EditForm)& /*form*/) const
{ return Standard_True; } // ??
Handle(TCollection_HAsciiString) APIHeaderSection_EditHeader::StringValue
(const Handle(IFSelect_EditForm)& /*form*/, const Standard_Integer num) const
{
// Default Values
return TypedValue(num)->HStringValue();
}
Standard_Boolean APIHeaderSection_EditHeader::Load
(const Handle(IFSelect_EditForm)& form,
const Handle(Standard_Transient)& /*ent*/,
const Handle(Interface_InterfaceModel)& model) const
{
Handle(StepData_StepModel) modl =
Handle(StepData_StepModel)::DownCast(model);
if (modl.IsNull()) return Standard_False;
APIHeaderSection_MakeHeader mkh (modl);
form->LoadValue (1 ,mkh.Name ());
form->LoadValue (2 ,mkh.TimeStamp ());
form->LoadValue (3 ,mkh.AuthorValue (1));
form->LoadValue (4 ,mkh.OrganizationValue (1));
form->LoadValue (5 ,mkh.PreprocessorVersion ());
form->LoadValue (6 ,mkh.OriginatingSystem ());
form->LoadValue (7 ,mkh.Authorisation ());
form->LoadValue (8 ,mkh.SchemaIdentifiersValue (1));
form->LoadValue (9 ,mkh.DescriptionValue (1));
form->LoadValue (10,mkh.ImplementationLevel ());
return Standard_True;
}
Standard_Boolean APIHeaderSection_EditHeader::Apply
(const Handle(IFSelect_EditForm)& form,
const Handle(Standard_Transient)& /*ent*/,
const Handle(Interface_InterfaceModel)& model) const
{
Handle(StepData_StepModel) modl =
Handle(StepData_StepModel)::DownCast(model);
if (modl.IsNull()) return Standard_False;
APIHeaderSection_MakeHeader mkh (modl);
if (form->IsModified(1)) mkh.SetName (form->EditedValue(1));
if (form->IsModified(2)) mkh.SetTimeStamp (form->EditedValue(2));
if (form->IsModified(3)) mkh.SetAuthorValue (1,form->EditedValue(3));
if (form->IsModified(4)) mkh.SetOrganizationValue (1,form->EditedValue(4));
if (form->IsModified(5)) mkh.SetPreprocessorVersion (form->EditedValue(5));
if (form->IsModified(6)) mkh.SetOriginatingSystem (form->EditedValue(6));
if (form->IsModified(7)) mkh.SetAuthorisation (form->EditedValue(7));
if (form->IsModified(8)) mkh.SetSchemaIdentifiersValue (1,form->EditedValue(8));
if (form->IsModified(9)) mkh.SetDescriptionValue (1,form->EditedValue(9));
if (form->IsModified(10)) mkh.SetImplementationLevel (form->EditedValue(10));
mkh.Apply( Handle(StepData_StepModel)::DownCast(model) );
return Standard_True;
}

View File

@@ -1,76 +0,0 @@
// Created on: 1998-07-08
// Created by: Christian CAILLET
// Copyright (c) 1998-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 _APIHeaderSection_EditHeader_HeaderFile
#define _APIHeaderSection_EditHeader_HeaderFile
#include <Standard.hxx>
#include <IFSelect_Editor.hxx>
#include <Standard_Integer.hxx>
class TCollection_AsciiString;
class IFSelect_EditForm;
class TCollection_HAsciiString;
class Standard_Transient;
class Interface_InterfaceModel;
class APIHeaderSection_EditHeader;
DEFINE_STANDARD_HANDLE(APIHeaderSection_EditHeader, IFSelect_Editor)
class APIHeaderSection_EditHeader : public IFSelect_Editor
{
public:
Standard_EXPORT APIHeaderSection_EditHeader();
Standard_EXPORT TCollection_AsciiString Label() const Standard_OVERRIDE;
Standard_EXPORT Standard_Boolean Recognize (const Handle(IFSelect_EditForm)& form) const Standard_OVERRIDE;
Standard_EXPORT Handle(TCollection_HAsciiString) StringValue (const Handle(IFSelect_EditForm)& form, const Standard_Integer num) const Standard_OVERRIDE;
Standard_EXPORT Standard_Boolean Apply (const Handle(IFSelect_EditForm)& form, const Handle(Standard_Transient)& ent, const Handle(Interface_InterfaceModel)& model) const Standard_OVERRIDE;
Standard_EXPORT Standard_Boolean Load (const Handle(IFSelect_EditForm)& form, const Handle(Standard_Transient)& ent, const Handle(Interface_InterfaceModel)& model) const Standard_OVERRIDE;
DEFINE_STANDARD_RTTIEXT(APIHeaderSection_EditHeader,IFSelect_Editor)
protected:
private:
};
#endif // _APIHeaderSection_EditHeader_HeaderFile

View File

@@ -1,4 +0,0 @@
APIHeaderSection_EditHeader.cxx
APIHeaderSection_EditHeader.hxx
APIHeaderSection_MakeHeader.cxx
APIHeaderSection_MakeHeader.hxx

View File

@@ -0,0 +1,435 @@
// 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 <Interface_Static.hxx>
#include <OSD_Path.hxx>
#include <Standard_Transient.hxx>
#include <Standard_Type.hxx>
#include <TCollection_HAsciiString.hxx>
#include <stdio.h>
IMPLEMENT_STANDARD_RTTIEXT(Interface_Static,Interface_TypedValue)
static char defmess[31];
// Fonctions Satisfies offertes en standard ...
//svv #2
//static Standard_Boolean StaticPath(const Handle(TCollection_HAsciiString)& val)
//{
// OSD_Path apath;
// return apath.IsValid (TCollection_AsciiString(val->ToCString()));
//}
Interface_Static::Interface_Static
(const Standard_CString family, const Standard_CString name,
const Interface_ParamType type, const Standard_CString init)
: Interface_TypedValue (name,type,init) ,
thefamily (family) ,
theupdate (Standard_True) { }
Interface_Static::Interface_Static
(const Standard_CString family, const Standard_CString name,
const Handle(Interface_Static)& other)
: Interface_TypedValue (name, other->Type(), "") ,
thefamily (family) ,
theupdate (Standard_True)
{
switch (Type()) {
case Interface_ParamInteger : {
Standard_Integer lim;
if (other->IntegerLimit (Standard_True ,lim)) SetIntegerLimit (Standard_True ,lim);
if (other->IntegerLimit (Standard_False,lim)) SetIntegerLimit (Standard_False,lim);
}
break;
case Interface_ParamReal : {
Standard_Real lim;
if (other->RealLimit (Standard_True ,lim)) SetRealLimit (Standard_True ,lim);
if (other->RealLimit (Standard_False,lim)) SetRealLimit (Standard_False,lim);
SetUnitDef (other->UnitDef());
}
break;
case Interface_ParamEnum : {
Standard_Boolean match; Standard_Integer e0,e1,i;
other->EnumDef (e0,e1,match);
StartEnum (e0,match);
// if (e1 >= e0) theenums = new TColStd_HArray1OfAsciiString(e0,e1);
for (i = e0; i <= e1; i ++)
AddEnum (other->EnumVal(i));
}
break;
case Interface_ParamIdent :
SetObjectType (other->ObjectType());
break;
default : break;
}
if (other->IsSetValue()) SetCStringValue (other->CStringValue());
}
// ## Print ##
void Interface_Static::PrintStatic (Standard_OStream& S) const
{
S <<"--- Static Value : "<<Name()<<" Family:"<<Family();
Print (S);
if (!thewild.IsNull())
S <<" -- Attached to wild-card : "<<thewild->Name()<<std::endl;
S <<"--- Actual status : "<<(theupdate ? "" : "original")<<" Value : ";
if (thesatisf) S <<" -- Specific Function for Satisfies : "<<thesatisn.ToCString()<<std::endl;
}
// ######### COMPLEMENTS ##########
Standard_CString Interface_Static::Family () const
{
return thefamily.ToCString();
}
Handle(Interface_Static) Interface_Static::Wild () const
{
return thewild;
}
void Interface_Static::SetWild (const Handle(Interface_Static)& wild)
{
thewild = wild;
}
// ######### UPDATE ##########
void Interface_Static::SetUptodate ()
{
theupdate = Standard_True;
}
Standard_Boolean Interface_Static::UpdatedStatus () const
{
return theupdate;
}
// #######################################################################
// ######### DICTIONNAIRE DES STATICS (static sur Static) ##########
Standard_Boolean Interface_Static::Init
(const Standard_CString family, const Standard_CString name,
const Interface_ParamType type, const Standard_CString init)
{
if (name[0] == '\0') return Standard_False;
if (MoniTool_TypedValue::Stats().IsBound(name)) return Standard_False;
Handle(Interface_Static) item;
if (type == Interface_ParamMisc) {
Handle(Interface_Static) other = Interface_Static::Static(init);
if (other.IsNull()) return Standard_False;
item = new Interface_Static (family,name,other);
}
else item = new Interface_Static (family,name,type,init);
MoniTool_TypedValue::Stats().Bind (name,item);
return Standard_True;
}
Standard_Boolean Interface_Static::Init
(const Standard_CString family, const Standard_CString name,
const Standard_Character type, const Standard_CString init)
{
Interface_ParamType epyt;
switch (type) {
case 'e' : epyt = Interface_ParamEnum; break;
case 'i' : epyt = Interface_ParamInteger; break;
case 'o' : epyt = Interface_ParamIdent; break;
case 'p' : epyt = Interface_ParamText; break;
case 'r' : epyt = Interface_ParamReal; break;
case 't' : epyt = Interface_ParamText; break;
case '=' : epyt = Interface_ParamMisc; break;
case '&' : {
Handle(Interface_Static) unstat = Interface_Static::Static(name);
if (unstat.IsNull()) return Standard_False;
// Editions : init donne un petit texte d edition, en 2 termes "cmd var" :
// imin <ival> imax <ival> rmin <rval> rmax <rval> unit <def>
// enum <from> ematch <from> eval <cval>
Standard_Integer i,iblc = 0;
for (i = 0; init[i] != '\0'; i ++) if (init[i] == ' ') iblc = i+1;
// Reconnaissance du sous-cas et aiguillage
if (init[0] == 'i' && init[2] == 'i')
unstat->SetIntegerLimit (Standard_False,atoi(&init[iblc]));
else if (init[0] == 'i' && init[2] == 'a')
unstat->SetIntegerLimit (Standard_True ,atoi(&init[iblc]));
else if (init[0] == 'r' && init[2] == 'i')
unstat->SetRealLimit (Standard_False,Atof(&init[iblc]));
else if (init[0] == 'r' && init[2] == 'a')
unstat->SetRealLimit (Standard_True ,Atof(&init[iblc]));
else if (init[0] == 'u')
unstat->SetUnitDef (&init[iblc]);
else if (init[0] == 'e' && init[1] == 'm')
unstat->StartEnum (atoi(&init[iblc]),Standard_True);
else if (init[0] == 'e' && init[1] == 'n')
unstat->StartEnum (atoi(&init[iblc]),Standard_False);
else if (init[0] == 'e' && init[1] == 'v')
unstat->AddEnum (&init[iblc]);
else return Standard_False;
return Standard_True;
}
default : return Standard_False;
}
if (!Interface_Static::Init (family,name,epyt,init)) return Standard_False;
if (type != 'p') return Standard_True;
Handle(Interface_Static) stat = Interface_Static::Static(name);
//NT stat->SetSatisfies (StaticPath,"Path");
if (!stat->Satisfies(stat->HStringValue())) stat->SetCStringValue("");
return Standard_True;
}
Handle(Interface_Static) Interface_Static::Static
(const Standard_CString name)
{
Handle(Standard_Transient) result;
MoniTool_TypedValue::Stats().Find(name, result);
return Handle(Interface_Static)::DownCast(result);
}
Standard_Boolean Interface_Static::IsPresent (const Standard_CString name)
{
return MoniTool_TypedValue::Stats().IsBound (name);
}
Standard_CString Interface_Static::CDef
(const Standard_CString name, const Standard_CString part)
{
if (!part || part[0] == '\0') return "";
Handle(Interface_Static) stat = Interface_Static::Static(name);
if (stat.IsNull()) return "";
if (part[0] == 'f' && part[1] == 'a') return stat->Family();
if (part[0] == 'l' && part[1] == 'a') return stat->Label();
if (part[0] == 's' && part[1] == 'a') return stat->SatisfiesName();
if (part[0] == 't' && part[1] == 'y') {
Interface_ParamType typ = stat->Type();
if (typ == Interface_ParamInteger) return "integer";
if (typ == Interface_ParamReal) return "real";
if (typ == Interface_ParamText) return "text";
if (typ == Interface_ParamEnum) return "enum";
return "?type?";
}
if (part[0] == 'e') {
Standard_Integer nume = 0;
sscanf (part,"%30s %d",defmess,&nume);
return stat->EnumVal(nume);
}
if (part[0] == 'i') {
Standard_Integer ilim;
if (!stat->IntegerLimit((part[2] == 'a'),ilim)) return "";
Sprintf(defmess,"%d",ilim); return defmess;
}
if (part[0] == 'r') {
Standard_Real rlim;
if (!stat->RealLimit((part[2] == 'a'),rlim)) return "";
Sprintf(defmess,"%f",rlim); return defmess;
}
if (part[0] == 'u') return stat->UnitDef();
return "";
}
Standard_Integer Interface_Static::IDef
(const Standard_CString name, const Standard_CString part)
{
if (!part || part[0] == '\0') return 0;
Handle(Interface_Static) stat = Interface_Static::Static(name);
if (stat.IsNull()) return 0;
if (part[0] == 'i') {
Standard_Integer ilim;
if (!stat->IntegerLimit((part[2] == 'a'),ilim)) return 0;
return ilim;
}
if (part[0] == 'e') {
Standard_Integer startcase,endcase; Standard_Boolean match;
stat->EnumDef (startcase,endcase,match);
if (part[1] == 's') return startcase;
if (part[1] == 'c') return (endcase - startcase + 1);
if (part[1] == 'm') return (match ? 1 : 0);
if (part[1] == 'v') {
char vale[51];
sscanf (part,"%30s %50s",defmess,vale);
return stat->EnumCase (vale);
}
}
return 0;
}
// ########## VALEUR COURANTE ###########
Standard_Boolean Interface_Static::IsSet
(const Standard_CString name, const Standard_Boolean proper)
{
Handle(Interface_Static) item = Interface_Static::Static(name);
if (item.IsNull()) return Standard_False;
if (item->IsSetValue()) return Standard_True;
if (proper) return Standard_False;
item = item->Wild();
return item->IsSetValue();
}
Standard_CString Interface_Static::CVal (const Standard_CString name)
{
Handle(Interface_Static) item = Interface_Static::Static(name);
if (item.IsNull()) {
#ifdef OCCT_DEBUG
std::cout << "Warning: Interface_Static::CVal: incorrect parameter " << name << std::endl;
#endif
return "";
}
return item->CStringValue();
}
Standard_Integer Interface_Static::IVal (const Standard_CString name)
{
Handle(Interface_Static) item = Interface_Static::Static(name);
if (item.IsNull()) {
#ifdef OCCT_DEBUG
std::cout << "Warning: Interface_Static::IVal: incorrect parameter " << name << std::endl;
#endif
return 0;
}
return item->IntegerValue();
}
Standard_Real Interface_Static::RVal (const Standard_CString name)
{
Handle(Interface_Static) item = Interface_Static::Static(name);
if (item.IsNull()) {
#ifdef OCCT_DEBUG
std::cout << "Warning: Interface_Static::RVal: incorrect parameter " << name << std::endl;
#endif
return 0.0;
}
return item->RealValue();
}
Standard_Boolean Interface_Static::SetCVal
(const Standard_CString name, const Standard_CString val)
{
Handle(Interface_Static) item = Interface_Static::Static(name);
if (item.IsNull()) return Standard_False;
return item->SetCStringValue(val);
}
Standard_Boolean Interface_Static::SetIVal
(const Standard_CString name, const Standard_Integer val)
{
Handle(Interface_Static) item = Interface_Static::Static(name);
if (item.IsNull()) return Standard_False;
if (!item->SetIntegerValue(val)) return Standard_False;
return Standard_True;
}
Standard_Boolean Interface_Static::SetRVal
(const Standard_CString name, const Standard_Real val)
{
Handle(Interface_Static) item = Interface_Static::Static(name);
if (item.IsNull()) return Standard_False;
return item->SetRealValue(val);
}
// UPDATE
Standard_Boolean Interface_Static::Update (const Standard_CString name)
{
Handle(Interface_Static) item = Interface_Static::Static(name);
if (item.IsNull()) return Standard_False;
item->SetUptodate();
return Standard_True;
}
Standard_Boolean Interface_Static::IsUpdated (const Standard_CString name)
{
Handle(Interface_Static) item = Interface_Static::Static(name);
if (item.IsNull()) return Standard_False;
return item->UpdatedStatus();
}
Handle(TColStd_HSequenceOfHAsciiString) Interface_Static::Items
(const Standard_Integer mode, const Standard_CString criter)
{
Standard_Integer modup = (mode / 100); // 0 any, 1 non-update, 2 update
Handle(TColStd_HSequenceOfHAsciiString) list =
new TColStd_HSequenceOfHAsciiString();
NCollection_DataMap<TCollection_AsciiString, Handle(Standard_Transient)>::Iterator iter(MoniTool_TypedValue::Stats());
for (; iter.More(); iter.Next()) {
Handle(Interface_Static) item =
Handle(Interface_Static)::DownCast(iter.Value());
if (item.IsNull()) continue;
Standard_Boolean ok = Standard_True;
if (criter[0] == '$' && criter[1] == '\0') {
if ( (item->Family())[0] != '$') ok = Standard_False;
} else if (criter[0] != '\0') {
if (strcmp(criter, item->Family())) continue;
ok = Standard_True;
} else { // tous ... sauf famille a $
if (item->Family()[0] == '$') continue;
}
if (ok && (modup == 1)) ok = !item->UpdatedStatus();
if (ok && (modup == 2)) ok = item->UpdatedStatus();
if (ok) list->Append (new TCollection_HAsciiString (iter.Key()) );
}
return list;
}
//=======================================================================
// function : FillMap
// purpose : Fills given string-to-string map with all static data
//=======================================================================
void Interface_Static::FillMap (NCollection_DataMap<TCollection_AsciiString, TCollection_AsciiString, TCollection_AsciiString>& theMap)
{
theMap.Clear();
NCollection_DataMap<TCollection_AsciiString, Handle(Standard_Transient)>& aMap = MoniTool_TypedValue::Stats();
for (NCollection_DataMap<TCollection_AsciiString, Handle(Standard_Transient)>::Iterator anIt(aMap); anIt.More(); anIt.Next())
{
Handle(Interface_Static) aValue = Handle(Interface_Static)::DownCast(anIt.Value());
if (aValue.IsNull())
{
continue;
}
if (aValue->HStringValue().IsNull())
{
continue;
}
theMap.Bind (anIt.Key(), aValue->HStringValue()->String());
}
}

View File

@@ -0,0 +1,291 @@
// Created on: 1995-12-08
// Created by: Christian CAILLET
// Copyright (c) 1995-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_Static_HeaderFile
#define _Interface_Static_HeaderFile
#include <Standard.hxx>
#include <Standard_Integer.hxx>
#include <Standard_Real.hxx>
#include <Interface_StaticSatisfies.hxx>
#include <Interface_TypedValue.hxx>
#include <TColStd_HSequenceOfHAsciiString.hxx>
class TCollection_HAsciiString;
class Interface_Static;
DEFINE_STANDARD_HANDLE(Interface_Static, Interface_TypedValue)
//! This class gives a way to manage meaningful static variables,
//! used as "global" parameters in various procedures.
//!
//! A Static brings a specification (its type, constraints if any)
//! and a value. Its basic form is a string, it can be specified
//! as integer or real or enumerative string, and queried as such.
//! Its string content, which is a Handle(HAsciiString) can be
//! shared by other data structures, hence gives a direct on line
//! access to its value.
//!
//! All this description is inherited from TypedValue
//!
//! A Static can be given an initial value, it can be filled from,
//! either a set of Resources (an applicative feature which
//! accesses and manages parameter files), or environment or
//! internal definition : these define families of Static.
//! In addition, it supports a status for reinitialisation : an
//! initialisation procedure can ask if the value of the Static
//! has changed from its last call, in this case does something
//! then marks the Status "uptodate", else it does nothing.
//!
//! Statics are named and recorded then accessed in an alphabetic
//! dictionary
class Interface_Static : public Interface_TypedValue
{
public:
//! Creates and records a Static, with a family and a name
//! family can report to a name of resource or to a system or
//! internal definition. The name must be unique.
//!
//! type gives the type of the parameter, default is free text
//! Also available : Integer, Real, Enum, Entity (i.e. Object)
//! More precise specifications, titles, can be given to the
//! Static once created
//!
//! init gives an initial value. If it is not given, the Static
//! begin as "not set", its value is empty
Standard_EXPORT Interface_Static(const Standard_CString family, const Standard_CString name, const Interface_ParamType type = Interface_ParamText, const Standard_CString init = "");
//! Creates a new Static with same definition as another one
//! (value is copied, except for Entity : it remains null)
Standard_EXPORT Interface_Static(const Standard_CString family, const Standard_CString name, const Handle(Interface_Static)& other);
//! Writes the properties of a
//! parameter in the diagnostic file. These include:
//! - Name
//! - Family,
//! - Wildcard (if it has one)
//! - Current status (empty string if it was updated or
//! if it is the original one)
//! - Value
Standard_EXPORT void PrintStatic (Standard_OStream& S) const;
//! Returns the family. It can be : a resource name for applis,
//! an internal name between : $e (environment variables),
//! $l (other, purely local)
Standard_EXPORT Standard_CString Family() const;
//! Sets a "wild-card" static : its value will be considered
//! if <me> is not properly set. (reset by set a null one)
Standard_EXPORT void SetWild (const Handle(Interface_Static)& wildcard);
//! Returns the wildcard static, which can be (is most often) null
Standard_EXPORT Handle(Interface_Static) Wild() const;
//! Records a Static has "uptodate", i.e. its value has been taken
//! into account by a reinitialisation procedure
//! This flag is reset at each successful SetValue
Standard_EXPORT void SetUptodate();
//! Returns the status "uptodate"
Standard_EXPORT Standard_Boolean UpdatedStatus() const;
//! Declares a new Static (by calling its constructor)
//! If this name is already taken, does nothing and returns False
//! Else, creates it and returns True
//! For additional definitions, get the Static then edit it
Standard_EXPORT static Standard_Boolean Init (const Standard_CString family, const Standard_CString name, const Interface_ParamType type, const Standard_CString init = "");
//! As Init with ParamType, but type is given as a character
//! This allows a simpler call
//! Types : 'i' Integer, 'r' Real, 't' Text, 'e' Enum, 'o' Object
//! '=' for same definition as, <init> gives the initial Static
//! Returns False if <type> does not match this list
Standard_EXPORT static Standard_Boolean Init (const Standard_CString family, const Standard_CString name, const Standard_Character type, const Standard_CString init = "");
//! Returns a Static from its name. Null Handle if not present
Standard_EXPORT static Handle(Interface_Static) Static (const Standard_CString name);
//! Returns True if a Static named <name> is present, False else
Standard_EXPORT static Standard_Boolean IsPresent (const Standard_CString name);
//! Returns a part of the definition of a Static, as a CString
//! The part is designated by its name, as a CString
//! If the required value is not a string, it is converted to a
//! CString then returned
//! If <name> is not present, or <part> not defined for <name>,
//! this function returns an empty string
//!
//! Allowed parts for CDef :
//! family : the family
//! type : the type ("integer","real","text","enum")
//! label : the label
//! satis : satisfy function name if any
//! rmin : minimum real value
//! rmax : maximum real value
//! imin : minimum integer value
//! imax : maximum integer value
//! enum nn (nn : value of an integer) : enum value for nn
//! unit : unit definition for a real
Standard_EXPORT static Standard_CString CDef (const Standard_CString name, const Standard_CString part);
//! Returns a part of the definition of a Static, as an Integer
//! The part is designated by its name, as a CString
//! If the required value is not a string, returns zero
//! For a Boolean, 0 for false, 1 for true
//! If <name> is not present, or <part> not defined for <name>,
//! this function returns zero
//!
//! Allowed parts for IDef :
//! imin, imax : minimum or maximum integer value
//! estart : starting number for enum
//! ecount : count of enum values (starting from estart)
//! ematch : exact match status
//! eval val : case determined from a string
Standard_EXPORT static Standard_Integer IDef (const Standard_CString name, const Standard_CString part);
//! Returns True if <name> is present AND set
//! <proper> True (D) : considers this item only
//! <proper> False : if not set and attached to a wild-card,
//! considers this wild-card
Standard_EXPORT static Standard_Boolean IsSet (const Standard_CString name, const Standard_Boolean proper = Standard_True);
//! Returns the value of the
//! parameter identified by the string name.
//! If the specified parameter does not exist, an empty
//! string is returned.
//! Example
//! Interface_Static::CVal("write.step.schema");
//! which could return:
//! "AP214"
Standard_EXPORT static Standard_CString CVal (const Standard_CString name);
//! Returns the integer value of
//! the translation parameter identified by the string name.
//! Returns the value 0 if the parameter does not exist.
//! Example
//! Interface_Static::IVal("write.step.schema");
//! which could return: 3
Standard_EXPORT static Standard_Integer IVal (const Standard_CString name);
//! Returns the value of a static
//! translation parameter identified by the string name.
//! Returns the value 0.0 if the parameter does not exist.
Standard_EXPORT static Standard_Real RVal (const Standard_CString name);
//! Modifies the value of the
//! parameter identified by name. The modification is specified
//! by the string val. false is returned if the parameter does not exist.
//! Example
//! Interface_Static::SetCVal
//! ("write.step.schema","AP203")
//! This syntax specifies a switch from the default STEP 214 mode to STEP 203 mode.
Standard_EXPORT static Standard_Boolean SetCVal (const Standard_CString name, const Standard_CString val);
//! Modifies the value of the
//! parameter identified by name. The modification is specified
//! by the integer value val. false is returned if the
//! parameter does not exist.
//! Example
//! Interface_Static::SetIVal
//! ("write.step.schema", 3)
//! This syntax specifies a switch from the default STEP 214 mode to STEP 203 mode.S
Standard_EXPORT static Standard_Boolean SetIVal (const Standard_CString name, const Standard_Integer val);
//! Modifies the value of a
//! translation parameter. false is returned if the
//! parameter does not exist. The modification is specified
//! by the real number value val.
Standard_EXPORT static Standard_Boolean SetRVal (const Standard_CString name, const Standard_Real val);
//! Sets a Static to be "uptodate"
//! Returns False if <name> is not present
//! This status can be used by a reinitialisation procedure to
//! rerun if a value has been changed
Standard_EXPORT static Standard_Boolean Update (const Standard_CString name);
//! Returns the status "uptodate" from a Static
//! Returns False if <name> is not present
Standard_EXPORT static Standard_Boolean IsUpdated (const Standard_CString name);
//! Returns a list of names of statics :
//! <mode> = 0 (D) : criter is for family
//! <mode> = 1 : criter is regexp on names, takes final items
//! (ignore wild cards)
//! <mode> = 2 : idem but take only wilded, not final items
//! <mode> = 3 : idem, take all items matching criter
//! idem + 100 : takes only non-updated items
//! idem + 200 : takes only updated items
//! criter empty (D) : returns all names
//! else returns names which match the given criter
//! Remark : families beginning by '$' are not listed by criter ""
//! they are listed only by criter "$"
//!
//! This allows for instance to set new values after having loaded
//! or reloaded a resource, then to update them as required
Standard_EXPORT static Handle(TColStd_HSequenceOfHAsciiString) Items (const Standard_Integer mode = 0, const Standard_CString criter = "");
//! Initializes all standard static parameters, which can be used
//! by every function. statics specific of a norm or a function
//! must be defined around it
Standard_EXPORT static void Standards();
//! Fills given string-to-string map with all static data
Standard_EXPORT static void FillMap(NCollection_DataMap<TCollection_AsciiString, TCollection_AsciiString, TCollection_AsciiString>& theMap);
DEFINE_STANDARD_RTTIEXT(Interface_Static,Interface_TypedValue)
protected:
private:
TCollection_AsciiString thefamily;
TCollection_AsciiString thename;
TCollection_AsciiString thelabel;
Interface_ParamType thetype;
Handle(Standard_Type) theotyp;
Handle(Interface_Static) thewild;
Standard_Integer thelims;
Standard_Integer theintlow;
Standard_Integer theintup;
Standard_Real therealow;
Standard_Real therealup;
TCollection_AsciiString theunidef;
Handle(TColStd_HArray1OfAsciiString) theenums;
NCollection_DataMap<TCollection_AsciiString, Standard_Integer> theeadds;
Interface_StaticSatisfies thesatisf;
TCollection_AsciiString thesatisn;
Standard_Boolean theupdate;
Standard_Integer theival;
Handle(TCollection_HAsciiString) thehval;
Handle(Standard_Transient) theoval;
};
#endif // _Interface_Static_HeaderFile

View File

@@ -24,13 +24,13 @@
//! RetError : error in command or input data, no execution
//! RetFail : execution was run and has failed
//! RetStop : indicates end or stop (such as Raise)
enum IFSelect_ReturnStatus
enum XSControl_ReturnStatus
{
IFSelect_RetVoid,
IFSelect_RetDone,
IFSelect_RetError,
IFSelect_RetFail,
IFSelect_RetStop
XSControl_RetVoid,
XSControl_RetDone,
XSControl_RetError,
XSControl_RetFail,
XSControl_RetStop
};
#endif // _IFSelect_ReturnStatus_HeaderFile

502
src/DE/DE_WorkSession.cxx Normal file
View File

@@ -0,0 +1,502 @@
// 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 <XSControl_WorkSession.hxx>
#include <Interface_Check.hxx>
#include <Interface_InterfaceModel.hxx>
#include <Interface_Macros.hxx>
#include <Message_Messenger.hxx>
#include <Message_ProgressScope.hxx>
#include <TColStd_HSequenceOfTransient.hxx>
#include <Transfer_ResultFromModel.hxx>
#include <Transfer_ResultFromTransient.hxx>
#include <Transfer_SimpleBinderOfTransient.hxx>
#include <Transfer_TransientProcess.hxx>
#include <XSControl_Controller.hxx>
#include <XSControl_TransferReader.hxx>
#include <XSControl_TransferWriter.hxx>
IMPLEMENT_STANDARD_RTTIEXT(XSControl_WorkSession, Standard_Transient)
//=======================================================================
//function : XSControl_WorkSession
//purpose :
//=======================================================================
XSControl_WorkSession::XSControl_WorkSession() :
myTransferReader(new XSControl_TransferReader),
myTransferWriter(new XSControl_TransferWriter)
{}
//=======================================================================
//function : XSControl_WorkSession
//purpose :
//=======================================================================
XSControl_WorkSession::~XSControl_WorkSession()
{
clearBinders();
}
//=======================================================================
//function : ClearData
//purpose :
//=======================================================================
void XSControl_WorkSession::ClearData(const Standard_Integer mode)
{
// 1-2-3-4 : standard IFSelect
if (mode >= 1 && mode <= 4) IFSelect_WorkSession::ClearData(mode);
// 5 : Transferts seuls
// 6 : Resultats forces seuls
// 7 : Management, y compris tous transferts (forces/calcules), views
if (mode == 5 || mode == 7)
{
myTransferReader->Clear(-1);
myTransferWriter->Clear(-1);
}
if (mode == 6 && !myTransferReader.IsNull()) myTransferReader->Clear(1);
myTransferReader->SetGraph(HGraph());
}
//=======================================================================
//function : SelectNorm
//purpose :
//=======================================================================
Standard_Boolean XSControl_WorkSession::SelectNorm(const Standard_CString normname)
{
// Old norm and results
myTransferReader->Clear(-1);
// ???? En toute rigueur, menage a faire dans XWS : virer les items
// ( a la limite, pourquoi pas, refaire XWS en entier)
Handle(XSControl_Controller) newadapt = XSControl_Controller::Recorded(normname);
if (newadapt.IsNull()) return Standard_False;
if (newadapt == myController) return Standard_True;
SetController(newadapt);
return Standard_True;
}
//=======================================================================
//function : SetController
//purpose :
//=======================================================================
void XSControl_WorkSession::SetController(const Handle(XSControl_Controller)& ctl)
{
myController = ctl;
SetLibrary(myController->WorkLibrary());
SetProtocol(myController->Protocol());
ClearItems();
ClearFinalModifiers();
ClearShareOut(Standard_False);
ClearFile();
myTransferReader->SetController(myController);
myTransferWriter->SetController(myController);
}
//=======================================================================
//function : SelectedNorm
//purpose :
//=======================================================================
Standard_CString XSControl_WorkSession::SelectedNorm(const Standard_Boolean rsc) const
{
//JR/Hp :
Standard_CString astr = (Standard_CString)(myController.IsNull() ? "" : myController->Name(rsc));
return astr;
}
//=======================================================================
//function : SelectedNorm
//purpose :
//=======================================================================
void XSControl_WorkSession::AppendReferenceWS(const TCollection_AsciiString& theName,
const Handle(XSControl_WorkSession)& theWS)
{
myReferenceWS.Bind(theName, theWS);
}
//=======================================================================
//function : PrintTransferStatus
//purpose :
//=======================================================================
Standard_Boolean XSControl_WorkSession::PrintTransferStatus(const Standard_Integer num,
const Standard_Boolean wri,
Standard_OStream& S) const
{
const Handle(Transfer_FinderProcess)& FP = myTransferWriter->FinderProcess();
Handle(Transfer_TransientProcess) TP = myTransferReader->TransientProcess();
Handle(Transfer_Binder) binder;
Handle(Transfer_Finder) finder;
Handle(Standard_Transient) ent;
// *** WRITE ***
if (wri)
{
if (FP.IsNull()) return Standard_False;
if (num == 0) return Standard_False;
Standard_Integer ne = 0, nr = 0, max = FP->NbMapped(), maxr = FP->NbRoots();
if (num > 0)
{
if (num > max) return Standard_False;
ne = num;
finder = FP->Mapped(ne);
nr = FP->RootIndex(finder);
}
else if (num < 0)
{
nr = -num;
if (nr > maxr) return Standard_False;
finder = FP->Root(nr);
ne = FP->MapIndex(finder);
}
S << "Transfer Write item n0." << ne << " of " << max;
if (nr > 0)
{
S << " ** Transfer Root n0." << ne;
}
S << std::endl;
ent = FP->FindTransient(finder);
S << " -> Type " << finder->DynamicType()->Name() << std::endl;
FP->StartTrace(binder, finder, 0, 0); // pb sout/S
if (!ent.IsNull())
{
S << " ** Resultat Transient, type " << ent->DynamicType()->Name();
const Handle(Interface_InterfaceModel)& model = Model();
if (!model.IsNull())
{
S << " In output Model, Entity "; model->Print(ent, S);
}
S << std::endl;
}
}
// *** READ ***
else
{
if (TP.IsNull()) return Standard_False;
Handle(Interface_InterfaceModel) model = TP->Model();
if (model.IsNull()) std::cout << "No Model" << std::endl;
else if (model != Model()) std::cout << "Model different from the session" << std::endl;
if (num == 0) return Standard_False;
Standard_Integer ne = 0, nr = 0, max = TP->NbMapped(), maxr = TP->NbRoots();
if (num > 0)
{
if (num > max) return Standard_False;
ne = num;
ent = TP->Mapped(ne);
nr = TP->RootIndex(finder);
}
else if (num < 0)
{
nr = -num;
if (nr > maxr) return Standard_False;
ent = TP->Root(nr);
ne = TP->MapIndex(ent);
}
S << "Transfer Read item n0." << ne << " of " << max;
if (nr > 0)
{
S << " ** Transfer Root n0." << ne;
}
S << std::endl;
if (!model.IsNull()) { S << " In Model, Entity "; model->Print(ent, S); }
binder = TP->MapItem(ne);
S << std::endl;
TP->StartTrace(binder, ent, 0, 0);
}
// *** CHECK (commun READ+WRITE) ***
if (!binder.IsNull())
{
const Handle(Interface_Check) ch = binder->Check();
Standard_Integer i, nbw = ch->NbWarnings(), nbf = ch->NbFails();
if (nbw > 0)
{
S << " - Warnings : " << nbw << " :\n";
for (i = 1; i <= nbw; i++) S << ch->CWarning(i) << std::endl;
}
if (nbf > 0)
{
S << " - Fails : " << nbf << " :\n";
for (i = 1; i <= nbf; i++) S << ch->CFail(i) << std::endl;
}
}
return Standard_True;
}
//=======================================================================
//function : InitTransferReader
//purpose :
//=======================================================================
void XSControl_WorkSession::InitTransferReader(const Standard_Integer mode)
{
if (mode == 0 || mode == 5) myTransferReader->Clear(-1); // full clear
if (myTransferReader.IsNull()) SetTransferReader(new XSControl_TransferReader);
else SetTransferReader(myTransferReader);
// mode = 0 fait par SetTransferReader suite a Nullify
if (mode == 1)
{
if (!myTransferReader.IsNull()) myTransferReader->Clear(-1);
else SetTransferReader(new XSControl_TransferReader);
}
if (mode == 2)
{
Handle(Transfer_TransientProcess) TP = myTransferReader->TransientProcess();
if (TP.IsNull())
{
TP = new Transfer_TransientProcess;
myTransferReader->SetTransientProcess(TP);
TP->SetGraph(HGraph());
}
Handle(TColStd_HSequenceOfTransient) lis = myTransferReader->RecordedList();
Standard_Integer i, nb = lis->Length();
for (i = 1; i <= nb; i++) TP->SetRoot(lis->Value(i));
}
if (mode == 3)
{
Handle(Transfer_TransientProcess) TP = myTransferReader->TransientProcess();
if (TP.IsNull()) return;
Standard_Integer i, nb = TP->NbRoots();
for (i = 1; i <= nb; i++) myTransferReader->RecordResult(TP->Root(i));
}
if (mode == 4 || mode == 5) myTransferReader->BeginTransfer();
}
//=======================================================================
//function : SetTransferReader
//purpose :
//=======================================================================
void XSControl_WorkSession::SetTransferReader(const Handle(XSControl_TransferReader)& TR)
{
if (myTransferReader != TR) //i1 pdn 03.04.99 BUC60301
myTransferReader = TR;
if (TR.IsNull()) return;
TR->SetController(myController);
TR->SetGraph(HGraph());
if (!TR->TransientProcess().IsNull()) return;
Handle(Transfer_TransientProcess) TP = new Transfer_TransientProcess
(Model().IsNull() ? 100 : Model()->NbEntities() + 100);
TP->SetGraph(HGraph());
TP->SetErrorHandle(Standard_True);
TR->SetTransientProcess(TP);
}
//=======================================================================
//function : MapReader
//purpose :
//=======================================================================
Handle(Transfer_TransientProcess) XSControl_WorkSession::MapReader() const
{
return myTransferReader->TransientProcess();
}
//=======================================================================
//function : SetMapReader
//purpose :
//=======================================================================
Standard_Boolean XSControl_WorkSession::SetMapReader(const Handle(Transfer_TransientProcess)& TP)
{
if (TP.IsNull()) return Standard_False;
if (TP->Model().IsNull()) TP->SetModel(Model());
TP->SetGraph(HGraph());
if (TP->Model() != Model()) return Standard_False;
// TR ne doit pas bouger, c est un "crochet" pour signatures, selections ...
// En revanche, mieux vaut le RAZ
// Handle(XSControl_TransferReader) TR = new XSControl_TransferReader;
Handle(XSControl_TransferReader) TR = myTransferReader;
TR->Clear(-1);
SetTransferReader(TR); // avec le meme mais le reinitialise
TR->SetTransientProcess(TP); // et prend le nouveau TP
return Standard_True;
}
//=======================================================================
//function : Result
//purpose :
//=======================================================================
Handle(Standard_Transient) XSControl_WorkSession::Result(const Handle(Standard_Transient)& ent,
const Standard_Integer mode) const
{
Standard_Integer ouca = (mode % 10);
Standard_Integer kica = (mode / 10);
Handle(Transfer_Binder) binder;
Handle(Transfer_ResultFromModel) resu;
if (ouca != 1) resu = myTransferReader->FinalResult(ent);
if (mode == 20) return resu;
if (!resu.IsNull()) binder = resu->MainResult()->Binder();
if (binder.IsNull() && ouca > 0)
binder = myTransferReader->TransientProcess()->Find(ent);
if (kica == 1) return binder;
DeclareAndCast(Transfer_SimpleBinderOfTransient, trb, binder);
if (!trb.IsNull()) return trb->Result();
return binder;
}
//=======================================================================
//function : TransferReadOne
//purpose :
//=======================================================================
Standard_Integer XSControl_WorkSession::TransferReadOne(const Handle(Standard_Transient)& ent,
const Message_ProgressRange& theProgress)
{
Handle(Interface_InterfaceModel) model = Model();
if (ent == model) return TransferReadRoots(theProgress);
Handle(TColStd_HSequenceOfTransient) list = GiveList(ent);
if (list->Length() == 1)
return myTransferReader->TransferOne(list->Value(1), Standard_True, theProgress);
else
return myTransferReader->TransferList(list, Standard_True, theProgress);
}
//=======================================================================
//function : TransferReadRoots
//purpose :
//=======================================================================
Standard_Integer XSControl_WorkSession::TransferReadRoots(const Message_ProgressRange& theProgress)
{
return myTransferReader->TransferRoots(Graph(), theProgress);
}
//=======================================================================
//function : NewModel
//purpose :
//=======================================================================
Handle(Interface_InterfaceModel) XSControl_WorkSession::NewModel()
{
Handle(Interface_InterfaceModel) newmod;
if (myController.IsNull()) return newmod;
newmod = myController->NewModel();
SetModel(newmod);
if (!myTransferReader->TransientProcess().IsNull())
myTransferReader->TransientProcess()->Clear();
//clear all contains of WS
myTransferReader->Clear(3);
myTransferWriter->Clear(-1);
return newmod;
}
//=======================================================================
//function : TransferWriter
//purpose :
//=======================================================================
const Handle(XSControl_TransferWriter)& XSControl_WorkSession::TransferWriter() const
{
return myTransferWriter;
}
//=======================================================================
//function : SetMapWriter
//purpose :
//=======================================================================
Standard_Boolean XSControl_WorkSession::SetMapWriter(const Handle(Transfer_FinderProcess)& theFP)
{
if (theFP.IsNull()) return Standard_False;
myTransferWriter->SetFinderProcess(theFP);
return Standard_True;
}
//=======================================================================
//function : TransferWriteShape
//purpose :
//=======================================================================
XSControl_ReturnStatus XSControl_WorkSession::TransferWriteShape(const TopoDS_Shape& shape,
const Standard_Boolean compgraph,
const Message_ProgressRange& theProgress)
{
XSControl_ReturnStatus status;
if (myController.IsNull()) return XSControl_RetError;
const Handle(Interface_InterfaceModel)& model = Model();
if (model.IsNull() || shape.IsNull())
{
return XSControl_RetVoid;
}
status = myTransferWriter->TransferWriteShape(model, shape, theProgress);
if (theProgress.UserBreak())
return XSControl_RetStop;
// qui s occupe de tout, try/catch inclus
//skl insert param compgraph for XDE writing 10.12.2003
if (compgraph) ComputeGraph(Standard_True);
return status;
}
//=======================================================================
//function : TransferWriteCheckList
//purpose :
//=======================================================================
Interface_CheckIterator XSControl_WorkSession::TransferWriteCheckList() const
{
return myTransferWriter->ResultCheckList(Model());
}
//=======================================================================
//function : clearBinders
//purpose :
//=======================================================================
void XSControl_WorkSession::clearBinders()
{
const Handle(Transfer_FinderProcess)& FP = myTransferWriter->FinderProcess();
//Due to big number of chains of binders it is necessary to
//collect head binders of each chain in the sequence
TColStd_SequenceOfTransient aSeqBnd;
TColStd_SequenceOfTransient aSeqShapes;
Standard_Integer i = 1;
for (; i <= FP->NbMapped(); i++)
{
Handle(Transfer_Binder) bnd = FP->MapItem(i);
if (!bnd.IsNull())
aSeqBnd.Append(bnd);
Handle(Standard_Transient) ash(FP->Mapped(i));
aSeqShapes.Append(ash);
}
//removing finder process containing result of translation.
FP->Clear();
ClearData(1);
ClearData(5);
//removing each chain of binders
while (aSeqBnd.Length() > 0)
{
Handle(Transfer_Binder) aBnd = Handle(Transfer_Binder)::DownCast(aSeqBnd.Value(1));
Handle(Standard_Transient) ash = aSeqShapes.Value(1);
aSeqBnd.Remove(1);
aSeqShapes.Remove(1);
ash.Nullify();
while (!aBnd.IsNull())
{
Handle(Transfer_Binder) aBndNext = aBnd->NextResult();
aBnd.Nullify();
aBnd = aBndNext;
}
}
}

190
src/DE/DE_WorkSession.hxx Normal file
View File

@@ -0,0 +1,190 @@
// Created on: 1995-06-01
// Created by: Christian CAILLET
// Copyright (c) 1995-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 _XSControl_WorkSession_HeaderFile
#define _XSControl_WorkSession_HeaderFile
#include <Standard.hxx>
#include <Standard_Type.hxx>
#include <IFSelect_WorkSession.hxx>
#include <Message_ProgressRange.hxx>
class XSControl_Controller;
class XSControl_TransferReader;
class XSControl_TransferWriter;
class Transfer_TransientProcess;
class Interface_InterfaceModel;
class Transfer_FinderProcess;
class TopoDS_Shape;
class Interface_CheckIterator;
class XSControl_WorkSession;
DEFINE_STANDARD_HANDLE(XSControl_WorkSession, IFSelect_WorkSession)
typedef NCollection_DataMap<TCollection_AsciiString, Handle(XSControl_WorkSession)> XSControl_WorkSessionMap;
//! This WorkSession completes the basic one, by adding :
//! - use of Controller, with norm selection...
//! - management of transfers (both ways) with auxiliary classes
//! TransferReader and TransferWriter
//! -> these transfers may work with a Context List : its items
//! are given by the user, according to the transfer to be
//! i.e. it is interpreted by the Actors
//! Each item is accessed by a Name
class XSControl_WorkSession : public IFSelect_WorkSession
{
public:
Standard_EXPORT XSControl_WorkSession();
Standard_EXPORT ~XSControl_WorkSession();
//! In addition to basic ClearData, clears Transfer and Management
//! for interactive use, for mode = 0,1,2 and over 4
//! Plus : mode = 5 to clear Transfers (both ways) only
//! mode = 6 to clear enforced results
//! mode = 7 to clear transfers, results
Standard_EXPORT virtual void ClearData(const Standard_Integer theMode) Standard_OVERRIDE;
//! Selects a Norm defined by its name.
//! A Norm is described and handled by a Controller
//! Returns True if done, False if <normname> is unknown
//!
//! The current Profile for this Norm is taken.
Standard_EXPORT Standard_Boolean SelectNorm(const Standard_CString theNormName);
//! Selects a Norm defined by its Controller itself
Standard_EXPORT void SetController(const Handle(XSControl_Controller)& theCtl);
//! Returns the name of the last Selected Norm. If none is
//! defined, returns an empty string
//! By default, returns the complete name of the norm
//! If <rsc> is True, returns the short name used for resource
Standard_EXPORT Standard_CString SelectedNorm(const Standard_Boolean theRsc = Standard_False) const;
//! Returns the norm controller itself
const Handle(XSControl_Controller)& NormAdaptor() const { return myController; }
//! Returns the current reference WS List, empty if not defined
const XSControl_WorkSessionMap& ReferenceWS() const { return myReferenceWS; }
//! Appends new refrence Work Session
Standard_EXPORT void AppendReferenceWS(const TCollection_AsciiString& theName,
const Handle(XSControl_WorkSession)& theWS);
//! Prints the transfer status of a transferred item, as being
//! the Mapped n0 <num>, from MapWriter if <wri> is True, or
//! from MapReader if <wri> is False
//! Returns True when done, False else (i.e. num out of range)
Standard_EXPORT Standard_Boolean PrintTransferStatus(const Standard_Integer theNum,
const Standard_Boolean theWri,
Standard_OStream& theS) const;
//! Sets a Transfer Reader, by internal ways, according mode :
//! 0 recreates it clear, 1 clears it (does not recreate)
//! 2 aligns Roots of TransientProcess from final Results
//! 3 aligns final Results from Roots of TransientProcess
//! 4 begins a new transfer (by BeginTransfer)
//! 5 recreates TransferReader then begins a new transfer
Standard_EXPORT void InitTransferReader(const Standard_Integer theMode);
//! Sets a Transfer Reader, which manages transfers on reading
Standard_EXPORT void SetTransferReader(const Handle(XSControl_TransferReader)& theTR);
//! Returns the Transfer Reader, Null if not set
const Handle(XSControl_TransferReader)& TransferReader() const { return myTransferReader; }
//! Returns the TransientProcess(internal data for TransferReader)
Standard_EXPORT Handle(Transfer_TransientProcess) MapReader() const;
//! Changes the Map Reader, i.e. considers that the new one
//! defines the relevant read results (forgets the former ones)
//! Returns True when done, False in case of bad definition, i.e.
//! if Model from TP differs from that of Session
Standard_EXPORT Standard_Boolean SetMapReader(const Handle(Transfer_TransientProcess)& theTP);
//! Returns the result attached to a starting entity
//! If <mode> = 0, returns Final Result
//! If <mode> = 1, considers Last Result
//! If <mode> = 2, considers Final, else if absent, Last
//! returns it as Transient, if result is not transient returns
//! the Binder
//! <mode> = 10,11,12 idem but returns the Binder itself
//! (if it is not, e.g. Shape, returns the Binder)
//! <mode> = 20, returns the ResultFromModel
Standard_EXPORT Handle(Standard_Transient) Result(const Handle(Standard_Transient)& theEnt,
const Standard_Integer theMode) const;
//! Commands the transfer of, either one entity, or a list
//! I.E. calls the TransferReader after having analysed <ents>
//! It is cumulated from the last BeginTransfer
//! <ents> is processed by GiveList, hence :
//! - <ents> a Selection : its SelectionResult
//! - <ents> a HSequenceOfTransient : this list
//! - <ents> the Model : in this specific case, all the roots,
//! with no cumulation of former transfers (TransferReadRoots)
Standard_EXPORT Standard_Integer TransferReadOne(const Handle(Standard_Transient)& theEnts,
const Message_ProgressRange& theProgress = Message_ProgressRange());
//! Commands the transfer of all the root entities of the model
//! i.e. calls TransferRoot from the TransferReader with the Graph
//! No cumulation with former calls to TransferReadOne
Standard_EXPORT Standard_Integer TransferReadRoots(const Message_ProgressRange& theProgress = Message_ProgressRange());
//! produces and returns a new Model well conditioned
//! It is produced by the Norm Controller
//! It can be Null (if this function is not implemented)
Standard_EXPORT Handle(Interface_InterfaceModel) NewModel();
//! Returns the Transfer Reader, Null if not set
Standard_EXPORT const Handle(XSControl_TransferWriter)& TransferWriter() const;
//! Changes the Map Reader, i.e. considers that the new one
//! defines the relevant read results (forgets the former ones)
//! Returns True when done, False if <FP> is Null
Standard_EXPORT Standard_Boolean SetMapWriter(const Handle(Transfer_FinderProcess)& theFP);
//! Transfers a Shape from CasCade to a model of current norm,
//! according to the last call to SetModeWriteShape
//! Returns status :Done if OK, Fail if error during transfer,
//! Error if transfer badly initialised
Standard_EXPORT XSControl_ReturnStatus TransferWriteShape(const TopoDS_Shape& theShape,
const Standard_Boolean theCompGraph = Standard_True,
const Message_ProgressRange& theProgress = Message_ProgressRange());
//! Returns the check-list of last transfer (write)
//! It is recorded in the FinderProcess, but it must be bound with
//! resulting entities (in the resulting file model) rather than
//! with original objects (in fact, their mappers)
Standard_EXPORT Interface_CheckIterator TransferWriteCheckList() const;
DEFINE_STANDARD_RTTIEXT(XSControl_WorkSession, IFSelect_WorkSession)
protected:
//! Clears binders
void clearBinders();
private:
Handle(XSControl_Controller) myController;
Handle(XSControl_TransferReader) myTransferReader;
Handle(XSControl_TransferWriter) myTransferWriter;
XSControl_WorkSessionMap myReferenceWS;
};
#endif // _XSControl_WorkSession_HeaderFile

View File

@@ -2,7 +2,14 @@ DE_ConfigurationContext.cxx
DE_ConfigurationContext.hxx
DE_ConfigurationNode.cxx
DE_ConfigurationNode.hxx
DE_DataModel.cxx
DE_DataModel.hxx
DE_InterfaceParameters.cxx
DE_InterfaceParameters.hxx
DE_Provider.cxx
DE_Provider.hxx
DE_ReturnStatus.hxx
DE_WorkSession.cxx
DE_WorkSession.hxx
DE_Wrapper.cxx
DE_Wrapper.hxx

View File

@@ -6,5 +6,7 @@ HeaderSection_FileName.cxx
HeaderSection_FileName.hxx
HeaderSection_FileSchema.cxx
HeaderSection_FileSchema.hxx
HeaderSection_MakeHeader.cxx
HeaderSection_MakeHeader.hxx
HeaderSection_Protocol.cxx
HeaderSection_Protocol.hxx

View File

@@ -17,7 +17,7 @@
//#58 rln 28.12.98 STEP header fields (NOTE: more parameterization is necessary)
//pdn 11.01.99 including <stdio.h> for compilation on NT
#include <APIHeaderSection_MakeHeader.hxx>
#include <HeaderSection_MakeHeader.hxx>
#include <HeaderSection_FileDescription.hxx>
#include <HeaderSection_FileName.hxx>
#include <HeaderSection_FileSchema.hxx>
@@ -35,7 +35,7 @@
static Handle(TCollection_HAsciiString) nulstr;
static Handle(Interface_HArray1OfHAsciiString) nularr;
APIHeaderSection_MakeHeader::APIHeaderSection_MakeHeader
HeaderSection_MakeHeader::HeaderSection_MakeHeader
(const Handle(StepData_StepModel)& model)
{
done = Standard_True;
@@ -56,7 +56,7 @@ APIHeaderSection_MakeHeader::APIHeaderSection_MakeHeader
else done = Standard_False;
}
APIHeaderSection_MakeHeader::APIHeaderSection_MakeHeader
HeaderSection_MakeHeader::HeaderSection_MakeHeader
(const Standard_Integer shapetype)
{
switch(shapetype) {
@@ -68,7 +68,7 @@ APIHeaderSection_MakeHeader::APIHeaderSection_MakeHeader
}
}
void APIHeaderSection_MakeHeader::Init (const Standard_CString nameval)
void HeaderSection_MakeHeader::Init (const Standard_CString nameval)
{
done = Standard_True;
@@ -134,12 +134,12 @@ void APIHeaderSection_MakeHeader::Init (const Standard_CString nameval)
}
Standard_Boolean APIHeaderSection_MakeHeader::IsDone() const
Standard_Boolean HeaderSection_MakeHeader::IsDone() const
{
return done;
}
void APIHeaderSection_MakeHeader::Apply
void HeaderSection_MakeHeader::Apply
(const Handle(StepData_StepModel)& model) const
{
Interface_EntityIterator header = model->Header();
@@ -177,7 +177,7 @@ void APIHeaderSection_MakeHeader::Apply
// FileName
// ========
Handle(StepData_StepModel) APIHeaderSection_MakeHeader::NewModel
Handle(StepData_StepModel) HeaderSection_MakeHeader::NewModel
(const Handle(Interface_Protocol)& protocol) const
{
Handle(StepData_StepModel) stepmodel = new StepData_StepModel;
@@ -195,16 +195,16 @@ Handle(StepData_StepModel) APIHeaderSection_MakeHeader::NewModel
// FileName
// ========
Standard_Boolean APIHeaderSection_MakeHeader::HasFn() const
Standard_Boolean HeaderSection_MakeHeader::HasFn() const
{ return (!fn.IsNull()); }
Handle(HeaderSection_FileName) APIHeaderSection_MakeHeader::FnValue() const
Handle(HeaderSection_FileName) HeaderSection_MakeHeader::FnValue() const
{
return fn;
}
/*
void APIHeaderSection_MakeHeader::SetNameFromShapeType(const Standard_Integer shapetype)
void HeaderSection_MakeHeader::SetNameFromShapeType(const Standard_Integer shapetype)
{
Handle(TCollection_HAsciiString) name;
switch(shapetype)
@@ -230,106 +230,106 @@ void APIHeaderSection_MakeHeader::SetNameFromShapeType(const Standard_Integer sh
}
*/
void APIHeaderSection_MakeHeader::SetName(const Handle(TCollection_HAsciiString)& aName)
void HeaderSection_MakeHeader::SetName(const Handle(TCollection_HAsciiString)& aName)
{
if (!fn.IsNull()) fn->SetName(aName);
}
Handle(TCollection_HAsciiString) APIHeaderSection_MakeHeader::Name() const
Handle(TCollection_HAsciiString) HeaderSection_MakeHeader::Name() const
{
return (fn.IsNull() ? nulstr : fn->Name());
}
void APIHeaderSection_MakeHeader::SetTimeStamp(const Handle(TCollection_HAsciiString)& aTimeStamp)
void HeaderSection_MakeHeader::SetTimeStamp(const Handle(TCollection_HAsciiString)& aTimeStamp)
{
if (!fn.IsNull()) fn->SetTimeStamp(aTimeStamp);
}
Handle(TCollection_HAsciiString) APIHeaderSection_MakeHeader::TimeStamp() const
Handle(TCollection_HAsciiString) HeaderSection_MakeHeader::TimeStamp() const
{
return (fn.IsNull() ? nulstr : fn->TimeStamp());
}
void APIHeaderSection_MakeHeader::SetAuthor(const Handle(Interface_HArray1OfHAsciiString)& aAuthor)
void HeaderSection_MakeHeader::SetAuthor(const Handle(Interface_HArray1OfHAsciiString)& aAuthor)
{
if (!fn.IsNull()) fn->SetAuthor(aAuthor);
}
void APIHeaderSection_MakeHeader::SetAuthorValue(const Standard_Integer num, const Handle(TCollection_HAsciiString)& aAuthor)
void HeaderSection_MakeHeader::SetAuthorValue(const Standard_Integer num, const Handle(TCollection_HAsciiString)& aAuthor)
{
if (fn.IsNull()) return;
Handle(Interface_HArray1OfHAsciiString) li = fn->Author();
if (num >= li->Lower() && num <= li->Upper()) li->SetValue(num,aAuthor);
}
Handle(Interface_HArray1OfHAsciiString) APIHeaderSection_MakeHeader::Author() const
Handle(Interface_HArray1OfHAsciiString) HeaderSection_MakeHeader::Author() const
{
return (fn.IsNull() ? nularr : fn->Author());
}
Handle(TCollection_HAsciiString) APIHeaderSection_MakeHeader::AuthorValue(const Standard_Integer num) const
Handle(TCollection_HAsciiString) HeaderSection_MakeHeader::AuthorValue(const Standard_Integer num) const
{
return (fn.IsNull() ? nulstr : fn->AuthorValue(num));
}
Standard_Integer APIHeaderSection_MakeHeader::NbAuthor () const
Standard_Integer HeaderSection_MakeHeader::NbAuthor () const
{
return (fn.IsNull() ? 0 : fn->NbAuthor());
}
void APIHeaderSection_MakeHeader::SetOrganization(const Handle(Interface_HArray1OfHAsciiString)& aOrganization)
void HeaderSection_MakeHeader::SetOrganization(const Handle(Interface_HArray1OfHAsciiString)& aOrganization)
{
if (!fn.IsNull()) fn->SetOrganization(aOrganization);
}
void APIHeaderSection_MakeHeader::SetOrganizationValue(const Standard_Integer num, const Handle(TCollection_HAsciiString)& aOrgan)
void HeaderSection_MakeHeader::SetOrganizationValue(const Standard_Integer num, const Handle(TCollection_HAsciiString)& aOrgan)
{
if (fn.IsNull()) return;
Handle(Interface_HArray1OfHAsciiString) li = fn->Organization();
if (num >= li->Lower() && num <= li->Upper()) li->SetValue(num,aOrgan);
}
Handle(Interface_HArray1OfHAsciiString) APIHeaderSection_MakeHeader::Organization() const
Handle(Interface_HArray1OfHAsciiString) HeaderSection_MakeHeader::Organization() const
{
return (fn.IsNull() ? nularr : fn->Organization());
}
Handle(TCollection_HAsciiString) APIHeaderSection_MakeHeader::OrganizationValue(const Standard_Integer num) const
Handle(TCollection_HAsciiString) HeaderSection_MakeHeader::OrganizationValue(const Standard_Integer num) const
{
return (fn.IsNull() ? nulstr : fn->OrganizationValue(num));
}
Standard_Integer APIHeaderSection_MakeHeader::NbOrganization () const
Standard_Integer HeaderSection_MakeHeader::NbOrganization () const
{
return (fn.IsNull() ? 0 : fn->NbOrganization());
}
void APIHeaderSection_MakeHeader::SetPreprocessorVersion(const Handle(TCollection_HAsciiString)& aPreprocessorVersion)
void HeaderSection_MakeHeader::SetPreprocessorVersion(const Handle(TCollection_HAsciiString)& aPreprocessorVersion)
{
if (!fn.IsNull()) fn->SetPreprocessorVersion(aPreprocessorVersion);
}
Handle(TCollection_HAsciiString) APIHeaderSection_MakeHeader::PreprocessorVersion() const
Handle(TCollection_HAsciiString) HeaderSection_MakeHeader::PreprocessorVersion() const
{
return (fn.IsNull() ? nulstr : fn->PreprocessorVersion());
}
void APIHeaderSection_MakeHeader::SetOriginatingSystem(const Handle(TCollection_HAsciiString)& aOriginatingSystem)
void HeaderSection_MakeHeader::SetOriginatingSystem(const Handle(TCollection_HAsciiString)& aOriginatingSystem)
{
if (!fn.IsNull()) fn->SetOriginatingSystem(aOriginatingSystem);
}
Handle(TCollection_HAsciiString) APIHeaderSection_MakeHeader::OriginatingSystem() const
Handle(TCollection_HAsciiString) HeaderSection_MakeHeader::OriginatingSystem() const
{
return (fn.IsNull() ? nulstr : fn->OriginatingSystem());
}
void APIHeaderSection_MakeHeader::SetAuthorisation(const Handle(TCollection_HAsciiString)& aAuthorisation)
void HeaderSection_MakeHeader::SetAuthorisation(const Handle(TCollection_HAsciiString)& aAuthorisation)
{
if (!fn.IsNull()) fn->SetAuthorisation(aAuthorisation);
}
Handle(TCollection_HAsciiString) APIHeaderSection_MakeHeader::Authorisation() const
Handle(TCollection_HAsciiString) HeaderSection_MakeHeader::Authorisation() const
{
return (fn.IsNull() ? nulstr : fn->Authorisation());
}
@@ -338,37 +338,37 @@ Handle(TCollection_HAsciiString) APIHeaderSection_MakeHeader::Authorisation() co
// File Schema
// ===========
Standard_Boolean APIHeaderSection_MakeHeader::HasFs() const
Standard_Boolean HeaderSection_MakeHeader::HasFs() const
{ return (!fs.IsNull()); }
Handle(HeaderSection_FileSchema) APIHeaderSection_MakeHeader::FsValue() const
Handle(HeaderSection_FileSchema) HeaderSection_MakeHeader::FsValue() const
{
return fs;
}
void APIHeaderSection_MakeHeader::SetSchemaIdentifiers(const Handle(Interface_HArray1OfHAsciiString)& aSchemaIdentifiers)
void HeaderSection_MakeHeader::SetSchemaIdentifiers(const Handle(Interface_HArray1OfHAsciiString)& aSchemaIdentifiers)
{
if (!fs.IsNull()) fs->SetSchemaIdentifiers(aSchemaIdentifiers);
}
void APIHeaderSection_MakeHeader::SetSchemaIdentifiersValue(const Standard_Integer num, const Handle(TCollection_HAsciiString)& aSchem)
void HeaderSection_MakeHeader::SetSchemaIdentifiersValue(const Standard_Integer num, const Handle(TCollection_HAsciiString)& aSchem)
{
if (fs.IsNull()) return;
Handle(Interface_HArray1OfHAsciiString) li = fs->SchemaIdentifiers();
if (num >= li->Lower() && num <= li->Upper()) li->SetValue(num,aSchem);
}
Handle(Interface_HArray1OfHAsciiString) APIHeaderSection_MakeHeader::SchemaIdentifiers() const
Handle(Interface_HArray1OfHAsciiString) HeaderSection_MakeHeader::SchemaIdentifiers() const
{
return (fs.IsNull() ? nularr : fs->SchemaIdentifiers());
}
Handle(TCollection_HAsciiString) APIHeaderSection_MakeHeader::SchemaIdentifiersValue(const Standard_Integer num) const
Handle(TCollection_HAsciiString) HeaderSection_MakeHeader::SchemaIdentifiersValue(const Standard_Integer num) const
{
return (fs.IsNull() ? nulstr : fs->SchemaIdentifiersValue(num));
}
Standard_Integer APIHeaderSection_MakeHeader::NbSchemaIdentifiers () const
Standard_Integer HeaderSection_MakeHeader::NbSchemaIdentifiers () const
{
return (fs.IsNull() ? 0 : fs->NbSchemaIdentifiers());
}
@@ -378,7 +378,7 @@ Standard_Integer APIHeaderSection_MakeHeader::NbSchemaIdentifiers () const
//purpose :
//=======================================================================
void APIHeaderSection_MakeHeader::AddSchemaIdentifier(const Handle(TCollection_HAsciiString)& aSchem)
void HeaderSection_MakeHeader::AddSchemaIdentifier(const Handle(TCollection_HAsciiString)& aSchem)
{
if ( fs.IsNull() ) fs = new HeaderSection_FileSchema;
Handle(Interface_HArray1OfHAsciiString) idents = fs->SchemaIdentifiers();
@@ -404,47 +404,47 @@ void APIHeaderSection_MakeHeader::AddSchemaIdentifier(const Handle(TCollection_H
// File Description
// ================
Standard_Boolean APIHeaderSection_MakeHeader::HasFd() const
Standard_Boolean HeaderSection_MakeHeader::HasFd() const
{ return (!fd.IsNull()); }
Handle(HeaderSection_FileDescription) APIHeaderSection_MakeHeader::FdValue() const
Handle(HeaderSection_FileDescription) HeaderSection_MakeHeader::FdValue() const
{
return fd;
}
void APIHeaderSection_MakeHeader::SetDescription(const Handle(Interface_HArray1OfHAsciiString)& aDescription)
void HeaderSection_MakeHeader::SetDescription(const Handle(Interface_HArray1OfHAsciiString)& aDescription)
{
if (!fs.IsNull()) fd->SetDescription(aDescription);
}
void APIHeaderSection_MakeHeader::SetDescriptionValue(const Standard_Integer num, const Handle(TCollection_HAsciiString)& aDescr)
void HeaderSection_MakeHeader::SetDescriptionValue(const Standard_Integer num, const Handle(TCollection_HAsciiString)& aDescr)
{
if (fd.IsNull()) return;
Handle(Interface_HArray1OfHAsciiString) li = fd->Description();
if (num >= li->Lower() && num <= li->Upper()) li->SetValue(num,aDescr);
}
Handle(Interface_HArray1OfHAsciiString) APIHeaderSection_MakeHeader::Description() const
Handle(Interface_HArray1OfHAsciiString) HeaderSection_MakeHeader::Description() const
{
return (fd.IsNull() ? nularr : fd->Description());
}
Handle(TCollection_HAsciiString) APIHeaderSection_MakeHeader::DescriptionValue(const Standard_Integer num) const
Handle(TCollection_HAsciiString) HeaderSection_MakeHeader::DescriptionValue(const Standard_Integer num) const
{
return (fd.IsNull() ? nulstr : fd->DescriptionValue(num));
}
Standard_Integer APIHeaderSection_MakeHeader::NbDescription () const
Standard_Integer HeaderSection_MakeHeader::NbDescription () const
{
return (fd.IsNull() ? 0 : fd->NbDescription());
}
void APIHeaderSection_MakeHeader::SetImplementationLevel(const Handle(TCollection_HAsciiString)& aImplementationLevel)
void HeaderSection_MakeHeader::SetImplementationLevel(const Handle(TCollection_HAsciiString)& aImplementationLevel)
{
if (!fd.IsNull()) fd->SetImplementationLevel(aImplementationLevel);
}
Handle(TCollection_HAsciiString) APIHeaderSection_MakeHeader::ImplementationLevel() const
Handle(TCollection_HAsciiString) HeaderSection_MakeHeader::ImplementationLevel() const
{
return (fd.IsNull() ? nulstr : fd->ImplementationLevel());
}

View File

@@ -14,8 +14,8 @@
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#ifndef _APIHeaderSection_MakeHeader_HeaderFile
#define _APIHeaderSection_MakeHeader_HeaderFile
#ifndef _HeaderSection_MakeHeader_HeaderFile
#define _HeaderSection_MakeHeader_HeaderFile
#include <Standard.hxx>
#include <Standard_DefineAlloc.hxx>
@@ -34,7 +34,7 @@ class TCollection_HAsciiString;
//! This class allows to consult and prepare/edit data stored in
//! a Step Model Header
class APIHeaderSection_MakeHeader
class HeaderSection_MakeHeader
{
public:
@@ -42,11 +42,11 @@ public:
//! Prepares a new MakeHeader from scratch
Standard_EXPORT APIHeaderSection_MakeHeader(const Standard_Integer shapetype = 0);
Standard_EXPORT HeaderSection_MakeHeader(const Standard_Integer shapetype = 0);
//! Prepares a MakeHeader from the content of a StepModel
//! See IsDone to know if the Header is well defined
Standard_EXPORT APIHeaderSection_MakeHeader(const Handle(StepData_StepModel)& model);
Standard_EXPORT HeaderSection_MakeHeader(const Handle(StepData_StepModel)& model);
//! Cancels the former definition and gives a FileName
//! To be used when a Model has no well defined Header
@@ -199,4 +199,4 @@ private:
#endif // _APIHeaderSection_MakeHeader_HeaderFile
#endif // _HeaderSection_MakeHeader_HeaderFile

View File

@@ -1,22 +0,0 @@
IFGraph_AllConnected.cxx
IFGraph_AllConnected.hxx
IFGraph_AllShared.cxx
IFGraph_AllShared.hxx
IFGraph_Articulations.cxx
IFGraph_Articulations.hxx
IFGraph_Compare.cxx
IFGraph_Compare.hxx
IFGraph_ConnectedComponants.cxx
IFGraph_ConnectedComponants.hxx
IFGraph_Cumulate.cxx
IFGraph_Cumulate.hxx
IFGraph_Cycles.cxx
IFGraph_Cycles.hxx
IFGraph_ExternalSources.cxx
IFGraph_ExternalSources.hxx
IFGraph_SCRoots.cxx
IFGraph_SCRoots.hxx
IFGraph_StrongComponants.cxx
IFGraph_StrongComponants.hxx
IFGraph_SubPartsIterator.cxx
IFGraph_SubPartsIterator.hxx

View File

@@ -1,52 +0,0 @@
// 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 <IFGraph_AllConnected.hxx>
#include <Interface_Graph.hxx>
#include <Standard_Transient.hxx>
// AllConnected prend toutes les Entites connectees a une Entite donnee
// c-a-d toutes les "Shared" + toutes les "Sharings" et on recommence
// Autrement dit le contenu du "Composant Connexe" du graphe d'ensemble
// qui contient cette entite
// Le calcul est effectue par GetFromEntity (Evaluate n'a rien a faire)
IFGraph_AllConnected::IFGraph_AllConnected (const Interface_Graph& agraph)
: thegraph (agraph) { }
IFGraph_AllConnected::IFGraph_AllConnected
(const Interface_Graph& agraph, const Handle(Standard_Transient)& ent)
: thegraph (agraph)
{ GetFromEntity(ent); }
void IFGraph_AllConnected::GetFromEntity
(const Handle(Standard_Transient)& ent)
{
if (!thegraph.IsPresent(thegraph.EntityNumber(ent))) return;
thegraph.GetFromEntity(ent,Standard_False);
for (Interface_EntityIterator shareds = thegraph.Shareds(ent);
shareds.More(); shareds.Next())
GetFromEntity(shareds.Value());
for (Interface_EntityIterator sharings = thegraph.Sharings(ent);
sharings.More(); sharings.Next())
GetFromEntity(sharings.Value());
}
void IFGraph_AllConnected::ResetData ()
{ Reset(); thegraph.Reset(); }
void IFGraph_AllConnected::Evaluate()
{ GetFromGraph(thegraph); } // GetFromEntity a tout fait

View File

@@ -1,85 +0,0 @@
// Created on: 1992-10-02
// Created by: Christian CAILLET
// Copyright (c) 1992-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 _IFGraph_AllConnected_HeaderFile
#define _IFGraph_AllConnected_HeaderFile
#include <Standard.hxx>
#include <Standard_DefineAlloc.hxx>
#include <Standard_Handle.hxx>
#include <Interface_Graph.hxx>
#include <Interface_GraphContent.hxx>
class Standard_Transient;
//! this class gives content of the CONNECTED COMPONENT(S)
//! which include specific Entity(ies)
class IFGraph_AllConnected : public Interface_GraphContent
{
public:
DEFINE_STANDARD_ALLOC
//! creates an AllConnected from a graph, empty ready to be filled
Standard_EXPORT IFGraph_AllConnected(const Interface_Graph& agraph);
//! creates an AllConnected which memorizes Entities Connected to
//! a given one, at any level : that is, itself, all Entities
//! Shared by it and Sharing it, and so on.
//! In other terms, this is the content of the CONNECTED COMPONENT
//! which include a specific Entity
Standard_EXPORT IFGraph_AllConnected(const Interface_Graph& agraph, const Handle(Standard_Transient)& ent);
//! adds an entity and its Connected ones to the list (allows to
//! cumulate all Entities Connected by some ones)
//! Note that if "ent" is in the already computed list,, no entity
//! will be added, but if "ent" is not already in the list, a new
//! Connected Component will be cumulated
Standard_EXPORT void GetFromEntity (const Handle(Standard_Transient)& ent);
//! Allows to restart on a new data set
Standard_EXPORT void ResetData();
//! does the specific evaluation (Connected entities atall levels)
Standard_EXPORT virtual void Evaluate() Standard_OVERRIDE;
protected:
private:
Interface_Graph thegraph;
};
#endif // _IFGraph_AllConnected_HeaderFile

View File

@@ -1,47 +0,0 @@
// 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 <IFGraph_AllShared.hxx>
#include <Interface_EntityIterator.hxx>
#include <Interface_Graph.hxx>
#include <Interface_InterfaceModel.hxx>
#include <Standard_Transient.hxx>
IFGraph_AllShared::IFGraph_AllShared (const Interface_Graph& agraph)
: thegraph (agraph) { }
IFGraph_AllShared::IFGraph_AllShared
(const Interface_Graph& agraph, const Handle(Standard_Transient)& ent)
: thegraph (agraph)
{
if (!agraph.Model()->Contains(ent)) return;
GetFromEntity(ent);
}
void IFGraph_AllShared::GetFromEntity
(const Handle(Standard_Transient)& ent)
{ thegraph.GetFromEntity(ent,Standard_True); } // le fait pour nous
void IFGraph_AllShared::GetFromIter (const Interface_EntityIterator& iter)
{
for (iter.Start(); iter.More(); iter.Next())
thegraph.GetFromEntity(iter.Value(),Standard_True);
}
void IFGraph_AllShared::ResetData ()
{ Reset(); thegraph.Reset(); }
void IFGraph_AllShared::Evaluate()
{ Reset(); GetFromGraph(thegraph); }

View File

@@ -1,85 +0,0 @@
// Created on: 1992-09-30
// Created by: Christian CAILLET
// Copyright (c) 1992-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 _IFGraph_AllShared_HeaderFile
#define _IFGraph_AllShared_HeaderFile
#include <Standard.hxx>
#include <Standard_DefineAlloc.hxx>
#include <Standard_Handle.hxx>
#include <Interface_Graph.hxx>
#include <Interface_GraphContent.hxx>
class Standard_Transient;
class Interface_EntityIterator;
//! this class determines all Entities shared by some specific
//! ones, at any level (those which will be lead in a Transfer
//! for instance)
class IFGraph_AllShared : public Interface_GraphContent
{
public:
DEFINE_STANDARD_ALLOC
//! creates an AllShared from a graph, empty ready to be filled
Standard_EXPORT IFGraph_AllShared(const Interface_Graph& agraph);
//! creates an AllShared which memrizes Entities shared by a given
//! one, at any level, including itself
Standard_EXPORT IFGraph_AllShared(const Interface_Graph& agraph, const Handle(Standard_Transient)& ent);
//! adds an entity and its shared ones to the list (allows to
//! cumulate all Entities shared by some ones)
Standard_EXPORT void GetFromEntity (const Handle(Standard_Transient)& ent);
//! Adds Entities from an EntityIterator and all their shared
//! ones at any level
Standard_EXPORT void GetFromIter (const Interface_EntityIterator& iter);
//! Allows to restart on a new data set
Standard_EXPORT void ResetData();
//! does the specific evaluation (shared entities atall levels)
Standard_EXPORT virtual void Evaluate() Standard_OVERRIDE;
protected:
private:
Interface_Graph thegraph;
};
#endif // _IFGraph_AllShared_HeaderFile

View File

@@ -1,82 +0,0 @@
// 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 <IFGraph_Articulations.hxx>
#include <Interface_EntityIterator.hxx>
#include <Interface_Graph.hxx>
#include <Interface_InterfaceModel.hxx>
#include <Standard_Transient.hxx>
// Points d'Articulation d'un Graphe : ce sont les "passages obliges" du graphe
// Algorithme tire du Sedgewick, p 392
IFGraph_Articulations::IFGraph_Articulations
(const Interface_Graph& agraph, const Standard_Boolean whole)
: thegraph (agraph)
{ if (whole) thegraph.GetFromModel(); }
void IFGraph_Articulations::GetFromEntity
(const Handle(Standard_Transient)& ent)
{ thegraph.GetFromEntity(ent,Standard_True); }
void IFGraph_Articulations::GetFromIter(const Interface_EntityIterator& iter)
{ thegraph.GetFromIter(iter,0); }
void IFGraph_Articulations::ResetData ()
{ Reset(); thegraph.Reset(); thelist = new TColStd_HSequenceOfInteger(); }
void IFGraph_Articulations::Evaluate ()
{
// Algorithme, cf Sedgewick "Algorithms", p 392
thelist = new TColStd_HSequenceOfInteger();
// Utilisation de Visit
Standard_Integer nb = thegraph.Size();
for (Standard_Integer i = 1; i <= nb; i ++) {
thenow = 0;
if (thegraph.IsPresent(i)) Visit(i);
}
// Resultat dans thelist
Reset();
Standard_Integer nbres = thelist->Length();
for (Standard_Integer ires = 1; ires <= nbres; ires ++) {
Standard_Integer num = thelist->Value(ires);
GetOneItem(thegraph.Model()->Value(num));
}
}
Standard_Integer IFGraph_Articulations::Visit (const Standard_Integer num)
{
thenow ++;
thegraph.SetStatus(num,thenow);
Standard_Integer min = thenow;
for (Interface_EntityIterator iter = thegraph.Shareds(thegraph.Entity(num));
iter.More(); iter.Next()) {
Handle(Standard_Transient) ent = iter.Value();
Standard_Integer nument = thegraph.EntityNumber(ent);
if (!thegraph.IsPresent(num)) {
thegraph.GetFromEntity(ent,Standard_False);
nument = thegraph.EntityNumber(ent);
}
Standard_Integer statent = thegraph.Status(nument); // pas reevalue
if (statent == 0) {
Standard_Integer mm = Visit(nument);
if (mm < min) min = mm;
if (mm > thegraph.Status(num)) thelist->Append(num); // ON EN A UN : num
}
else if (statent < min) min = statent;
}
return min;
}

View File

@@ -1,75 +0,0 @@
// Created on: 1992-09-23
// Created by: Christian CAILLET
// Copyright (c) 1992-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 _IFGraph_Articulations_HeaderFile
#define _IFGraph_Articulations_HeaderFile
#include <Standard.hxx>
#include <Standard_DefineAlloc.hxx>
#include <Standard_Handle.hxx>
#include <Interface_Graph.hxx>
#include <Standard_Integer.hxx>
#include <TColStd_HSequenceOfInteger.hxx>
#include <Interface_GraphContent.hxx>
#include <Standard_Boolean.hxx>
class Standard_Transient;
class Interface_EntityIterator;
//! this class gives entities which are Articulation points
//! in a whole Model or in a sub-part
//! An Articulation Point divides the graph in two (or more)
//! disconnected sub-graphs
//! Identifying Articulation Points allows improving
//! efficiency of splitting a set of Entities into sub-sets
class IFGraph_Articulations : public Interface_GraphContent
{
public:
DEFINE_STANDARD_ALLOC
//! creates Articulations to evaluate a Graph
//! whole True : works on the whole Model
//! whole False : remains empty, ready to work on a sub-part
Standard_EXPORT IFGraph_Articulations(const Interface_Graph& agraph, const Standard_Boolean whole);
//! adds an entity and its shared ones to the list
Standard_EXPORT void GetFromEntity (const Handle(Standard_Transient)& ent);
//! adds a list of entities (as an iterator)
Standard_EXPORT void GetFromIter (const Interface_EntityIterator& iter);
//! Allows to restart on a new data set
Standard_EXPORT void ResetData();
//! Evaluates the list of Articulation points
Standard_EXPORT virtual void Evaluate() Standard_OVERRIDE;
private:
//! basic routine of computation
//! (see book Sedgewick "Algorithms", p 392)
Standard_EXPORT Standard_Integer Visit (const Standard_Integer num);
private:
Interface_Graph thegraph;
Standard_Integer thenow;
Handle(TColStd_HSequenceOfInteger) thelist;
};
#endif // _IFGraph_Articulations_HeaderFile

View File

@@ -1,78 +0,0 @@
// 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 <IFGraph_AllShared.hxx>
#include <IFGraph_Compare.hxx>
#include <Interface_EntityIterator.hxx>
#include <Interface_Graph.hxx>
#include <Standard_Transient.hxx>
// Comparateur de deux sous-ensembles d un Modele
// Au premier sous-ensemble, est attribue le Status 1
// Au deuxieme sous-ensemble, est attribue le Status 2
// La partie commune se voit attribuer le Status 3
IFGraph_Compare::IFGraph_Compare (const Interface_Graph& agraph)
: thegraph (agraph) { }
void IFGraph_Compare::GetFromEntity
(const Handle(Standard_Transient)& ent, const Standard_Boolean first)
{
IFGraph_AllShared iter(thegraph.Model(),ent);
GetFromIter(iter,first);
}
void IFGraph_Compare::GetFromIter
(const Interface_EntityIterator& iter, const Standard_Boolean first)
{
Standard_Integer stat = 2;
if (first) stat = 1;
thegraph.GetFromIter(iter,stat,3,Standard_False);
}
void IFGraph_Compare::Merge ()
{
thegraph.ChangeStatus (2,1);
thegraph.ChangeStatus (3,1);
}
void IFGraph_Compare::RemoveSecond ()
{
thegraph.ChangeStatus (3,1);
thegraph.RemoveStatus (2);
}
void IFGraph_Compare::KeepCommon ()
{
thegraph.RemoveStatus (1);
thegraph.RemoveStatus (2);
thegraph.ChangeStatus (3,1);
}
void IFGraph_Compare::ResetData ()
{ Reset(); thegraph.Reset(); }
void IFGraph_Compare::Evaluate ()
{
Reset(); GetFromGraph(thegraph); // Evaluation deja faite par le graphe
}
Interface_EntityIterator IFGraph_Compare::Common () const
{ return Interface_GraphContent(thegraph,3); }
Interface_EntityIterator IFGraph_Compare::FirstOnly () const
{ return Interface_GraphContent(thegraph,1); }
Interface_EntityIterator IFGraph_Compare::SecondOnly () const
{ return Interface_GraphContent(thegraph,2); }

View File

@@ -1,105 +0,0 @@
// Created on: 1992-09-23
// Created by: Christian CAILLET
// Copyright (c) 1992-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 _IFGraph_Compare_HeaderFile
#define _IFGraph_Compare_HeaderFile
#include <Standard.hxx>
#include <Standard_DefineAlloc.hxx>
#include <Standard_Handle.hxx>
#include <Interface_Graph.hxx>
#include <Interface_GraphContent.hxx>
class Standard_Transient;
class Interface_EntityIterator;
//! this class evaluates effect of two compared sub-parts :
//! cumulation (union), common part (intersection-overlapping)
//! part specific to first sub-part or to the second one
//! Results are kept in a Graph, several question can be set
//! Basic Iteration gives Cumulation (union)
class IFGraph_Compare : public Interface_GraphContent
{
public:
DEFINE_STANDARD_ALLOC
//! creates empty Compare, ready to work
Standard_EXPORT IFGraph_Compare(const Interface_Graph& agraph);
//! adds an entity and its shared ones to the list :
//! first True means adds to the first sub-list, else to the 2nd
Standard_EXPORT void GetFromEntity (const Handle(Standard_Transient)& ent, const Standard_Boolean first);
//! adds a list of entities (as an iterator) as such, that is,
//! their shared entities are not considered (use AllShared to
//! have them)
//! first True means adds to the first sub-list, else to the 2nd
Standard_EXPORT void GetFromIter (const Interface_EntityIterator& iter, const Standard_Boolean first);
//! merges the second list into the first one, hence the second
//! list is empty
Standard_EXPORT void Merge();
//! Removes the contents of second list
Standard_EXPORT void RemoveSecond();
//! Keeps only Common part, sets it as First list and clears
//! second list
Standard_EXPORT void KeepCommon();
//! Allows to restart on a new data set
Standard_EXPORT void ResetData();
//! Recomputes result of comparing to sub-parts
Standard_EXPORT virtual void Evaluate() Standard_OVERRIDE;
//! returns entities common to the both parts
Standard_EXPORT Interface_EntityIterator Common() const;
//! returns entities which are exclusively in the first list
Standard_EXPORT Interface_EntityIterator FirstOnly() const;
//! returns entities which are exclusively in the second part
Standard_EXPORT Interface_EntityIterator SecondOnly() const;
protected:
private:
Interface_Graph thegraph;
};
#endif // _IFGraph_Compare_HeaderFile

View File

@@ -1,44 +0,0 @@
// 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 <IFGraph_AllConnected.hxx>
#include <IFGraph_ConnectedComponants.hxx>
#include <Interface_Graph.hxx>
#include <Standard_Transient.hxx>
// Pour travailler, ConnectedComponants exploite AllConnected :
// On prend un 1er Vertex, on determine ses AllConnected -> voila un 1er
// Connected Component
// On recommence jusqu'a ce qu'il n'y ait plus de Vertex libre
// Honnetement, si ca ne marche pas, cf classe ConnectedVerticesIterator
// de GraphTools qui fait en principe la meme chose
IFGraph_ConnectedComponants::IFGraph_ConnectedComponants
(const Interface_Graph& agraph, const Standard_Boolean whole)
: IFGraph_SubPartsIterator (agraph, whole) { }
void IFGraph_ConnectedComponants::Evaluate()
{
// On part des "loaded"
// Pour chacun : s il est note dans le graphe, on passe
// Sinon, on ajoute les AllConnected en tant que sub-part
Interface_EntityIterator loaded = Loaded();
Reset();
for (loaded.Start(); loaded.More(); loaded.Next()) {
Handle(Standard_Transient) ent = loaded.Value();
if (IsInPart(ent)) continue;
IFGraph_AllConnected connect(Model(),ent);
AddPart();
GetFromIter (connect);
}
}

View File

@@ -1,44 +0,0 @@
// Created on: 1992-09-23
// Created by: Christian CAILLET
// Copyright (c) 1992-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 _IFGraph_ConnectedComponants_HeaderFile
#define _IFGraph_ConnectedComponants_HeaderFile
#include <Standard.hxx>
#include <Standard_DefineAlloc.hxx>
#include <IFGraph_SubPartsIterator.hxx>
class Interface_Graph;
//! determines Connected Components in a Graph.
//! They define disjoined sets of Entities.
class IFGraph_ConnectedComponants : public IFGraph_SubPartsIterator
{
public:
DEFINE_STANDARD_ALLOC
//! creates with a Graph, and will analyse :
//! whole True : all the contents of the Model
//! whole False : sub-parts which will be given later
Standard_EXPORT IFGraph_ConnectedComponants(const Interface_Graph& agraph, const Standard_Boolean whole);
//! does the computation
Standard_EXPORT virtual void Evaluate() Standard_OVERRIDE;
};
#endif // _IFGraph_ConnectedComponants_HeaderFile

View File

@@ -1,107 +0,0 @@
// 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 <IFGraph_AllShared.hxx>
#include <IFGraph_Cumulate.hxx>
#include <Interface_EntityIterator.hxx>
#include <Interface_Graph.hxx>
#include <Interface_InterfaceModel.hxx>
#include <Standard_Transient.hxx>
// Calcul de cumul
// Tres simple, on note les entites demandees, et a la fin
// on a le cumul lui-meme, et comme infos derivees, les doubles et les oublis
// Chaque recouvrement correspond a une augmentation de UN du status
// Les status demarrent a 2, ainsi a l ajout d une entite, on distingue bien
// entre les entites nouvelles, liees a cet appel (statut temporaire 1) et les
// autres (statut superieur ou egal a 2)
IFGraph_Cumulate::IFGraph_Cumulate (const Interface_Graph& agraph)
: thegraph (agraph) { }
void IFGraph_Cumulate::GetFromEntity
(const Handle(Standard_Transient)& ent)
{
IFGraph_AllShared iter(thegraph.Model(),ent);
GetFromIter (iter);
}
void IFGraph_Cumulate::ResetData ()
{ Reset(); thegraph.Reset(); }
void IFGraph_Cumulate::GetFromIter (const Interface_EntityIterator& iter)
{
thegraph.GetFromIter(iter,1,1,Standard_True);
thegraph.ChangeStatus (1,2); // une fois le calcul fait
}
void IFGraph_Cumulate::Evaluate ()
{
Reset(); GetFromGraph(thegraph); // evaluation deja faite dans le graphe
}
Interface_EntityIterator IFGraph_Cumulate::Overlapped () const
{
Interface_EntityIterator iter;
Standard_Integer nb = thegraph.Size();
for (Standard_Integer i = 1; i <= nb; i ++) {
if (thegraph.IsPresent(i) && thegraph.Status(i) > 2)
iter.GetOneItem(thegraph.Entity(i));
}
return iter;
}
Interface_EntityIterator IFGraph_Cumulate::Forgotten () const
{
Interface_EntityIterator iter;
Standard_Integer nb = thegraph.Size();
for (Standard_Integer i = 1; i <= nb; i ++) {
if (!thegraph.IsPresent(i))
iter.GetOneItem(thegraph.Model()->Value(i));
}
return iter;
}
Interface_EntityIterator IFGraph_Cumulate::PerCount
(const Standard_Integer count) const
{
Interface_EntityIterator iter;
Standard_Integer nb = thegraph.Size();
for (Standard_Integer i = 1; i <= nb; i ++) {
if (thegraph.IsPresent(i) && thegraph.Status(i) == (count + 1))
iter.GetOneItem(thegraph.Model()->Value(i));
}
return iter;
}
Standard_Integer IFGraph_Cumulate::NbTimes
(const Handle(Standard_Transient)& ent) const
{
Standard_Integer num = thegraph.EntityNumber(ent);
if (num == 0) return 0;
Standard_Integer stat = thegraph.Status(num);
return stat-1;
}
Standard_Integer IFGraph_Cumulate::HighestNbTimes () const
{
Standard_Integer max = 0;
Standard_Integer nb = thegraph.Size();
for (Standard_Integer i = 1; i <= nb; i ++) {
if (!thegraph.IsPresent(i)) continue;
Standard_Integer count = thegraph.Status(i) - 1;
if (count > max) max = count;
}
return max;
}

View File

@@ -1,100 +0,0 @@
// Created on: 1992-09-23
// Created by: Christian CAILLET
// Copyright (c) 1992-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 _IFGraph_Cumulate_HeaderFile
#define _IFGraph_Cumulate_HeaderFile
#include <Standard.hxx>
#include <Standard_DefineAlloc.hxx>
#include <Standard_Handle.hxx>
#include <Interface_Graph.hxx>
#include <Interface_GraphContent.hxx>
#include <Standard_Integer.hxx>
class Standard_Transient;
class Interface_EntityIterator;
//! this class evaluates effect of cumulated sub-parts :
//! overlapping, forgotten entities
//! Results are kept in a Graph, several question can be set
//! Basic Iteration gives entities which are part of Cumulation
class IFGraph_Cumulate : public Interface_GraphContent
{
public:
DEFINE_STANDARD_ALLOC
//! creates empty Cumulate, ready to work
Standard_EXPORT IFGraph_Cumulate(const Interface_Graph& agraph);
//! adds an entity and its shared ones to the list
Standard_EXPORT void GetFromEntity (const Handle(Standard_Transient)& ent);
//! adds a list of entities (as an iterator) as such, that is,
//! without their shared entities (use AllShared to have them)
Standard_EXPORT void GetFromIter (const Interface_EntityIterator& iter);
//! Allows to restart on a new data set
Standard_EXPORT void ResetData();
//! Evaluates the result of cumulation
Standard_EXPORT virtual void Evaluate() Standard_OVERRIDE;
//! returns entities which are taken several times
Standard_EXPORT Interface_EntityIterator Overlapped() const;
//! returns entities which are not taken
Standard_EXPORT Interface_EntityIterator Forgotten() const;
//! Returns entities taken a given count of times
//! (0 : same as Forgotten, 1 : same as no Overlap : default)
Standard_EXPORT Interface_EntityIterator PerCount (const Standard_Integer count = 1) const;
//! returns number of times an Entity has been counted
//! (0 means forgotten, more than 1 means overlap, 1 is normal)
Standard_EXPORT Standard_Integer NbTimes (const Handle(Standard_Transient)& ent) const;
//! Returns the highest number of times recorded for every Entity
//! (0 means empty, 1 means no overlap)
Standard_EXPORT Standard_Integer HighestNbTimes() const;
protected:
private:
Interface_Graph thegraph;
};
#endif // _IFGraph_Cumulate_HeaderFile

View File

@@ -1,39 +0,0 @@
// 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 <IFGraph_Cycles.hxx>
#include <IFGraph_StrongComponants.hxx>
#include <Interface_Graph.hxx>
#include <Interface_GraphContent.hxx>
// Cycles utilise les services de StrongComponants :
// Il retient les Strong Componants qui ne sont pas Single
IFGraph_Cycles::IFGraph_Cycles
(const Interface_Graph& agraph, const Standard_Boolean whole)
: IFGraph_SubPartsIterator (agraph,whole) { }
IFGraph_Cycles::IFGraph_Cycles (IFGraph_StrongComponants& subparts)
: IFGraph_SubPartsIterator (subparts) { }
void IFGraph_Cycles::Evaluate ()
{
IFGraph_StrongComponants complist(Model(),Standard_False);
complist.GetFromIter(Loaded());
for (complist.Start(); complist.More(); complist.Next()) {
if (complist.IsSingle()) continue;
AddPart();
GetFromIter(complist.Entities());
}
}

View File

@@ -1,73 +0,0 @@
// Created on: 1992-09-23
// Created by: Christian CAILLET
// Copyright (c) 1992-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 _IFGraph_Cycles_HeaderFile
#define _IFGraph_Cycles_HeaderFile
#include <Standard.hxx>
#include <Standard_DefineAlloc.hxx>
#include <Standard_Handle.hxx>
#include <IFGraph_SubPartsIterator.hxx>
#include <Standard_Boolean.hxx>
class Interface_Graph;
class IFGraph_StrongComponants;
//! determines strong components in a graph which are Cycles
class IFGraph_Cycles : public IFGraph_SubPartsIterator
{
public:
DEFINE_STANDARD_ALLOC
//! creates with a Graph, and will analyse :
//! whole True : all the contents of the Model
//! whole False : sub-parts which will be given later
Standard_EXPORT IFGraph_Cycles(const Interface_Graph& agraph, const Standard_Boolean whole);
//! creates from a StrongComponants which was already computed
Standard_EXPORT IFGraph_Cycles(IFGraph_StrongComponants& subparts);
//! does the computation. Cycles are StrongComponants which are
//! not Single
Standard_EXPORT virtual void Evaluate() Standard_OVERRIDE;
protected:
private:
};
#endif // _IFGraph_Cycles_HeaderFile

View File

@@ -1,64 +0,0 @@
// 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 <IFGraph_ExternalSources.hxx>
#include <Interface_EntityIterator.hxx>
#include <Interface_Graph.hxx>
#include <Standard_Transient.hxx>
// ExternalSources exploite les resultats stockes dans le Graphe sur Sharings
// Soit les "Sharings" des entites notees par GetFromEntity et GetFromIter
// Celles des "Sharings" qui n etaient pas deja notees sont ExternalSources
// Les status :
// - Les entites de depart sont au Status 0
// - Les entites Sharing NOUVELLES (ExternalSources) sont au Status 1
IFGraph_ExternalSources::IFGraph_ExternalSources
(const Interface_Graph& agraph)
: thegraph (agraph) { }
void IFGraph_ExternalSources::GetFromEntity
(const Handle(Standard_Transient)& ent)
{ thegraph.GetFromEntity(ent,Standard_True); }
void IFGraph_ExternalSources::GetFromIter
(const Interface_EntityIterator& iter)
{ thegraph.GetFromIter(iter,0); }
void IFGraph_ExternalSources::ResetData ()
{ Reset(); thegraph.Reset(); }
void IFGraph_ExternalSources::Evaluate ()
{
Reset();
thegraph.RemoveStatus(1);
Standard_Integer nb = thegraph.Size();
for (Standard_Integer i = 1; i <= nb; i ++) {
if (thegraph.IsPresent(i) && thegraph.Status(i) == 0)
thegraph.GetFromIter ( thegraph.Sharings(thegraph.Entity(i)), 1 );
}
GetFromGraph(thegraph,1);
}
Standard_Boolean IFGraph_ExternalSources::IsEmpty ()
{
Evaluate();
Standard_Integer nb = thegraph.Size();
for (Standard_Integer i = 1; i <= nb; i ++) {
if (thegraph.IsPresent(i) || thegraph.Status(i) == 1)
return Standard_False;
}
return Standard_True;
}

View File

@@ -1,84 +0,0 @@
// Created on: 1992-09-23
// Created by: Christian CAILLET
// Copyright (c) 1992-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 _IFGraph_ExternalSources_HeaderFile
#define _IFGraph_ExternalSources_HeaderFile
#include <Standard.hxx>
#include <Standard_DefineAlloc.hxx>
#include <Standard_Handle.hxx>
#include <Interface_Graph.hxx>
#include <Interface_GraphContent.hxx>
#include <Standard_Boolean.hxx>
class Standard_Transient;
class Interface_EntityIterator;
//! this class gives entities which are Source of entities of
//! a sub-part, but are not contained by this sub-part
class IFGraph_ExternalSources : public Interface_GraphContent
{
public:
DEFINE_STANDARD_ALLOC
//! creates empty ExternalSources, ready to work
Standard_EXPORT IFGraph_ExternalSources(const Interface_Graph& agraph);
//! adds an entity and its shared ones to the list
Standard_EXPORT void GetFromEntity (const Handle(Standard_Transient)& ent);
//! adds a list of entities (as an iterator) with shared ones
Standard_EXPORT void GetFromIter (const Interface_EntityIterator& iter);
//! Allows to restart on a new data set
Standard_EXPORT void ResetData();
//! Evaluates external sources of a set of entities
Standard_EXPORT virtual void Evaluate() Standard_OVERRIDE;
//! Returns True if no External Source are found
//! It means that we have a "root" set
//! (performs an Evaluation as necessary)
Standard_EXPORT Standard_Boolean IsEmpty();
protected:
private:
Interface_Graph thegraph;
};
#endif // _IFGraph_ExternalSources_HeaderFile

View File

@@ -1,69 +0,0 @@
// 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 <IFGraph_ExternalSources.hxx>
#include <IFGraph_SCRoots.hxx>
#include <IFGraph_StrongComponants.hxx>
#include <Interface_Graph.hxx>
#include <Standard_Transient.hxx>
//#include <Interface_GraphContent.hxx>
IFGraph_SCRoots::IFGraph_SCRoots
(const Interface_Graph& agraph, const Standard_Boolean whole)
: IFGraph_StrongComponants (agraph,whole) { }
IFGraph_SCRoots::IFGraph_SCRoots (IFGraph_StrongComponants& subparts)
: IFGraph_StrongComponants (subparts) { }
// StrongComponants racines d un ensemble donne
// On ne tient pas compte du reste eventuel (c est un autre probleme)
// On part du fait que StrongComponants donne les Composants dans l ordre de
// dependance, le premier ne dependant de rien (les autres, on ne sait pas ...)
void IFGraph_SCRoots::Evaluate ()
{
IFGraph_StrongComponants complist (Model(),Standard_False);
complist.GetFromIter(Loaded());
// Interface_Graph G(Model());
Interface_Graph G(thegraph);
#ifdef OCCT_DEBUG
std::cout<<" SCRoots:"<<std::endl;
#endif
G.ResetStatus();
for (complist.Start(); complist.More(); complist.Next()) {
Handle(Standard_Transient) ent = complist.FirstEntity();
Standard_Integer num = G.EntityNumber(ent);
#ifdef OCCT_DEBUG
std::cout<<" Iteration,num="<<num<<(G.IsPresent(num) ? " Pris" : " A prendre")<<std::endl;
#endif
if (!G.IsPresent(num)) { // enregistrer pour suivants
G.GetFromEntity(ent,Standard_True);
Interface_EntityIterator list = complist.Entities();
AddPart();
GetFromIter(list);
}
}
}
/* ce qui suit, c etait autre chose : les SC qui n ont pas d ExternalSource
Interface_EntityIterator list = complist.Entities();
IFGraph_ExternalSources eval (Model());
eval.GetFromIter(list);
if (eval.IsEmpty()) {
AddPart();
GetFromIter(list);
}
}
}
*/

View File

@@ -1,69 +0,0 @@
// Created on: 1992-09-23
// Created by: Christian CAILLET
// Copyright (c) 1992-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 _IFGraph_SCRoots_HeaderFile
#define _IFGraph_SCRoots_HeaderFile
#include <Standard.hxx>
#include <Standard_DefineAlloc.hxx>
#include <IFGraph_StrongComponants.hxx>
class Interface_Graph;
//! determines strong components in a graph which are Roots
class IFGraph_SCRoots : public IFGraph_StrongComponants
{
public:
DEFINE_STANDARD_ALLOC
//! creates with a Graph, and will analyse :
//! whole True : all the contents of the Model
//! whole False : sub-parts which will be given later
Standard_EXPORT IFGraph_SCRoots(const Interface_Graph& agraph, const Standard_Boolean whole);
//! creates from a StrongComponants which was already computed
Standard_EXPORT IFGraph_SCRoots(IFGraph_StrongComponants& subparts);
//! does the computation
Standard_EXPORT virtual void Evaluate() Standard_OVERRIDE;
protected:
private:
};
#endif // _IFGraph_SCRoots_HeaderFile

View File

@@ -1,34 +0,0 @@
// 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 <IFGraph_StrongComponants.hxx>
#include <Interface_Graph.hxx>
#include <Interface_GraphContent.hxx>
//#include <IFGraph_SortedStrongs.hxx>
IFGraph_StrongComponants::IFGraph_StrongComponants
(const Interface_Graph& agraph, const Standard_Boolean whole)
: IFGraph_SubPartsIterator (agraph, whole) { }
void IFGraph_StrongComponants::Evaluate ()
{
Interface_GraphContent iter = Loaded();
Interface_Graph G(thegraph); G.GetFromIter(iter,0);
Standard_Integer nb = G.Size();
for (Standard_Integer i = 1; i <= nb; i ++) {
if (!G.IsPresent(i)) continue;
AddPart();
GetFromEntity (G.Entity(i),Standard_False);
}
}

View File

@@ -1,69 +0,0 @@
// Created on: 1992-09-23
// Created by: Christian CAILLET
// Copyright (c) 1992-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 _IFGraph_StrongComponants_HeaderFile
#define _IFGraph_StrongComponants_HeaderFile
#include <Standard.hxx>
#include <Standard_DefineAlloc.hxx>
#include <Standard_Handle.hxx>
#include <IFGraph_SubPartsIterator.hxx>
#include <Standard_Boolean.hxx>
class Interface_Graph;
//! determines strong components of a graph, that is
//! isolated entities (single components) or loops
class IFGraph_StrongComponants : public IFGraph_SubPartsIterator
{
public:
DEFINE_STANDARD_ALLOC
//! creates with a Graph, and will analyse :
//! whole True : all the contents of the Model
//! whole False : sub-parts which will be given later
Standard_EXPORT IFGraph_StrongComponants(const Interface_Graph& agraph, const Standard_Boolean whole);
//! does the computation
Standard_EXPORT virtual void Evaluate() Standard_OVERRIDE;
protected:
private:
};
#endif // _IFGraph_StrongComponants_HeaderFile

View File

@@ -1,254 +0,0 @@
// 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 <IFGraph_SubPartsIterator.hxx>
#include <Interface_Graph.hxx>
#include <Interface_GraphContent.hxx>
#include <Interface_InterfaceError.hxx>
#include <Interface_InterfaceModel.hxx>
#include <Standard_NoSuchObject.hxx>
#include <Standard_OutOfRange.hxx>
#include <Standard_Transient.hxx>
#include <TColStd_Array1OfInteger.hxx>
// SubPartsIterator permet de regrouper les entites en plusieurs sous-parties
// A chaque sous-partie est attache un Status : la 1re a 1, la 2e a 2, etc...
// (consequence, les sous-parties sont necessairement disjointes)
IFGraph_SubPartsIterator::IFGraph_SubPartsIterator
(const Interface_Graph& agraph, const Standard_Boolean whole)
: thegraph (agraph)
{
if (whole) thegraph.GetFromModel();
theparts = new TColStd_HSequenceOfInteger();
thefirsts = new TColStd_HSequenceOfInteger();
thepart = 0;
thecurr = 0;
}
IFGraph_SubPartsIterator::IFGraph_SubPartsIterator
(IFGraph_SubPartsIterator& other)
: thegraph (other.Graph())
{
Standard_Integer nb = thegraph.Size();
theparts = new TColStd_HSequenceOfInteger();
thepart = 0;
for (other.Start(); other.More(); other.Next()) {
thepart ++;
Standard_Integer nbent = 0;
GetFromIter (other.Entities());
for (Standard_Integer i = 1; i <= nb; i ++) {
if (thegraph.Status(i) == thepart) nbent ++;
}
theparts->Append(nbent); // compte vide
}
thepart = 0;
thecurr = 1;
}
void IFGraph_SubPartsIterator::GetParts
(IFGraph_SubPartsIterator& other)
{
if (Model() != other.Model()) throw Interface_InterfaceError("SubPartsIterator : GetParts");
// On AJOUTE les Parts de other, sans perdre les siennes propres
// (meme principe que le constructeur ci-dessus)
Standard_Integer nb = thegraph.Size();
thepart = theparts->Length();
for (other.Start(); other.More(); other.Next()) {
thepart ++;
Standard_Integer nbent = 0;
GetFromIter (other.Entities());
for (Standard_Integer i = 1; i <= nb; i ++) {
if (thegraph.Status(i) == thepart) nbent ++;
}
theparts->Append(nbent); // compte vide
}
}
const Interface_Graph& IFGraph_SubPartsIterator::Graph () const
{ return thegraph; }
// .... Gestion Interne (remplissage, etc...) .... //
Handle(Interface_InterfaceModel) IFGraph_SubPartsIterator::Model() const
{ return thegraph.Model(); }
void IFGraph_SubPartsIterator::AddPart ()
{
theparts->Append( Standard_Integer(0) );
thepart = theparts->Length();
}
Standard_Integer IFGraph_SubPartsIterator::NbParts () const
{ return theparts->Length(); }
Standard_Integer IFGraph_SubPartsIterator::PartNum () const
{ return thepart; }
void IFGraph_SubPartsIterator::SetLoad ()
{ thepart = 0; }
void IFGraph_SubPartsIterator::SetPartNum (const Standard_Integer num)
{
if (num <= 0 || num > theparts->Length()) throw Standard_OutOfRange("IFGraph_SubPartsIterator : SetPartNum");
thepart = num;
}
void IFGraph_SubPartsIterator::GetFromEntity
(const Handle(Standard_Transient)& ent, const Standard_Boolean shared)
{
thegraph.GetFromEntity(ent,shared, thepart,thepart,Standard_False);
}
void IFGraph_SubPartsIterator::GetFromIter (const Interface_EntityIterator& iter)
{
thegraph.GetFromIter(iter, thepart,thepart, Standard_False);
}
void IFGraph_SubPartsIterator::Reset ()
{
thegraph.Reset();
theparts->Clear();
thepart = 0;
thecurr = 0;
}
// .... Resultat (Evaluation, Iterations) .... //
void IFGraph_SubPartsIterator::Evaluate ()
{ } // par defaut, ne fait rien; redefinie par les sous-classes
Interface_GraphContent IFGraph_SubPartsIterator::Loaded () const
{
Interface_EntityIterator iter;
// Standard_Integer nb = thegraph.Size();
return Interface_GraphContent(thegraph,0);
}
Interface_Graph IFGraph_SubPartsIterator::LoadedGraph () const
{
Interface_Graph G(Model());
Standard_Integer nb = thegraph.Size();
for (Standard_Integer i = 1; i <= nb; i ++) {
if (thegraph.IsPresent(i) && thegraph.Status(i) == 0)
G.GetFromEntity(thegraph.Entity(i),Standard_False);
}
return G;
}
Standard_Boolean IFGraph_SubPartsIterator::IsLoaded
(const Handle(Standard_Transient)& ent) const
{ return thegraph.IsPresent(thegraph.EntityNumber(ent)); }
Standard_Boolean IFGraph_SubPartsIterator::IsInPart
(const Handle(Standard_Transient)& ent) const
{
Standard_Integer num = thegraph.EntityNumber(ent);
if (!thegraph.IsPresent(num)) return Standard_False;
return (thegraph.Status(num) != 0);
}
Standard_Integer IFGraph_SubPartsIterator::EntityPartNum
(const Handle(Standard_Transient)& ent) const
{
Standard_Integer num = thegraph.EntityNumber(ent);
if (!thegraph.IsPresent(num)) return 0;
return thegraph.Status(num);
}
void IFGraph_SubPartsIterator::Start ()
{
Evaluate();
// On evalue les tailles des contenus des Parts
Standard_Integer nb = thegraph.Size();
Standard_Integer nbp = theparts->Length();
if (thepart > nbp) thepart = nbp;
if (nbp == 0) { thecurr = 1; return; } // L Iteration s arrete de suite
// - On fait les comptes (via tableaux pour performances)
TColStd_Array1OfInteger partcounts (1,nbp); partcounts.Init(0);
TColStd_Array1OfInteger partfirsts (1,nbp); partfirsts.Init(0);
for (Standard_Integer i = 1; i <= nb; i ++) {
if (!thegraph.IsPresent(i)) continue;
Standard_Integer nump = thegraph.Status(i);
if (nump < 1 || nump > nbp) continue;
Standard_Integer nbent = partcounts.Value(nump);
partcounts.SetValue(nump,nbent+1);
if (nbent == 0) partfirsts.SetValue(nump,i);
}
// - On les met en forme (c-a-d dans les sequences)
theparts->Clear(); thefirsts->Clear();
Standard_Integer lastp = 0;
for (Standard_Integer np = 1; np <= nbp; np ++) {
Standard_Integer nbent = partcounts.Value(np);
if (np != 0) lastp = np;
theparts->Append (nbent);
thefirsts->Append (partfirsts.Value(np));
}
if (lastp < nbp) theparts->Remove(lastp+1,nbp);
// Enfin, on se prepare a iterer
thecurr = 1;
}
Standard_Boolean IFGraph_SubPartsIterator::More ()
{
if (thecurr == 0) Start();
return (thecurr <= theparts->Length());
}
void IFGraph_SubPartsIterator::Next ()
{
thecurr ++; if (thecurr > theparts->Length()) return;
if (theparts->Value(thecurr) == 0) Next(); // sauter parties vides
}
Standard_Boolean IFGraph_SubPartsIterator::IsSingle () const
{
if (thecurr < 1 || thecurr > theparts->Length()) throw Standard_NoSuchObject("IFGraph_SubPartsIterator : IsSingle");
return (theparts->Value(thecurr) == 1);
}
Handle(Standard_Transient) IFGraph_SubPartsIterator::FirstEntity
() const
{
if (thecurr < 1 || thecurr > theparts->Length()) throw Standard_NoSuchObject("IFGraph_SubPartsIterator : FirstEntity");
Standard_Integer nument = thefirsts->Value(thecurr);
if (nument == 0) throw Standard_NoSuchObject("IFGraph_SubPartsIterator : FirstEntity (current part is empty)");
return thegraph.Entity(nument);
}
Interface_EntityIterator IFGraph_SubPartsIterator::Entities () const
{
if (thecurr < 1 || thecurr > theparts->Length()) throw Standard_NoSuchObject("IFGraph_SubPartsIterator : Entities");
Interface_EntityIterator iter;
Standard_Integer nb = thegraph.Size();
Standard_Integer nument = thefirsts->Value(thecurr);
if (nument == 0) return iter;
if (theparts->Value(thecurr) == 1) nb = nument; // evident : 1 seule Entite
for (Standard_Integer i = nument; i <= nb; i ++) {
if (thegraph.Status(i) == thecurr && thegraph.IsPresent(i))
iter.GetOneItem(thegraph.Entity(i));
}
return iter;
}
//=======================================================================
//function : ~IFGraph_SubPartsIterator
//purpose :
//=======================================================================
IFGraph_SubPartsIterator::~IFGraph_SubPartsIterator()
{}

View File

@@ -1,180 +0,0 @@
// Created on: 1992-09-23
// Created by: Christian CAILLET
// Copyright (c) 1992-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 _IFGraph_SubPartsIterator_HeaderFile
#define _IFGraph_SubPartsIterator_HeaderFile
#include <Standard.hxx>
#include <Standard_DefineAlloc.hxx>
#include <Standard_Handle.hxx>
#include <Interface_Graph.hxx>
#include <TColStd_HSequenceOfInteger.hxx>
#include <Standard_Integer.hxx>
#include <Standard_Boolean.hxx>
class Interface_InterfaceModel;
class Standard_Transient;
class Interface_EntityIterator;
class Interface_GraphContent;
//! defines general form for graph classes of which result is
//! not a single iteration on Entities, but a nested one :
//! External iteration works on sub-parts, identified by each
//! class (according to its algorithm)
//! Internal Iteration concerns Entities of a sub-part
//! Sub-Parts are assumed to be disjoined; if they are not,
//! the first one has priority
//!
//! A SubPartsIterator can work in two steps : first, load
//! entities which have to be processed
//! then, analyse to set those entities into sub-parts
class IFGraph_SubPartsIterator
{
public:
DEFINE_STANDARD_ALLOC
//! Creates with a Graph, whole or parts of it
//! whole True : works on the entire Model
//! whole False : empty, ready to be filled
//! SubPartIterator is set to load entities
Standard_EXPORT IFGraph_SubPartsIterator(const Interface_Graph& agraph, const Standard_Boolean whole);
//! Creates a SubPartIterator from another one and gets its Data
//! Note that only non-empty sub-parts are taken into account
//! PartNum is set to the last one
Standard_EXPORT IFGraph_SubPartsIterator(IFGraph_SubPartsIterator& other);
//! Gets Parts from another SubPartsIterator (in addition to the
//! ones already recorded)
//! Error if both SubPartsIterators are not based on the same Model
Standard_EXPORT void GetParts (IFGraph_SubPartsIterator& other);
//! Returns the Model with which this Iterator was created
Standard_EXPORT Handle(Interface_InterfaceModel) Model() const;
//! Adds an empty part and sets it to receive entities
Standard_EXPORT void AddPart();
//! Returns count of registered parts
Standard_EXPORT Standard_Integer NbParts() const;
//! Returns numero of part which currently receives entities
//! (0 at load time)
Standard_EXPORT Standard_Integer PartNum() const;
//! Sets SubPartIterator to get Entities (by GetFromEntity &
//! GetFromIter) into load status, to be analysed later
Standard_EXPORT void SetLoad();
//! Sets numero of receiving part to a new value
//! Error if not in range (1-NbParts)
Standard_EXPORT void SetPartNum (const Standard_Integer num);
//! Adds an Entity : into load status if in Load mode, to the
//! current part if there is one. If shared is True, adds
//! also its shared ones (shared at all levels)
Standard_EXPORT void GetFromEntity (const Handle(Standard_Transient)& ent, const Standard_Boolean shared);
//! Adds a list of Entities (into Load mode or to a Part),
//! given as an Iterator
Standard_EXPORT void GetFromIter (const Interface_EntityIterator& iter);
//! Erases data (parts, entities) : "me" becomes empty and in
//! load status
Standard_EXPORT void Reset();
//! Called by Clear, this method allows evaluation just before
//! iteration; its default is doing nothing, it is designed to
//! be redefined
Standard_EXPORT virtual void Evaluate();
//! Returns entities which where loaded (not set into a sub-part)
Standard_EXPORT Interface_GraphContent Loaded() const;
//! Same as above, but under the form of a Graph
Standard_EXPORT Interface_Graph LoadedGraph() const;
//! Returns True if an Entity is loaded (either set into a
//! sub-part or not)
Standard_EXPORT Standard_Boolean IsLoaded (const Handle(Standard_Transient)& ent) const;
//! Returns True if an Entity is Present in a sub-part
Standard_EXPORT Standard_Boolean IsInPart (const Handle(Standard_Transient)& ent) const;
//! Returns number of the sub-part in which an Entity has been set
//! if it is not in a sub-part (or not loaded at all), Returns 0
Standard_EXPORT Standard_Integer EntityPartNum (const Handle(Standard_Transient)& ent) const;
//! Sets iteration to its beginning; calls Evaluate
Standard_EXPORT void Start();
//! Returns True if there are more sub-parts to iterate on
//! Note : an empty sub-part is not taken in account by Iteration
Standard_EXPORT Standard_Boolean More();
//! Sets iteration to the next sub-part
//! if there is not, IsSingle-Entities will raises an exception
Standard_EXPORT void Next();
//! Returns True if current sub-part is single (has only one Entity)
//! Error if there is no sub-part to iterate now
Standard_EXPORT Standard_Boolean IsSingle() const;
//! Returns the first entity of current sub-part, that is for a
//! Single one, the only one it contains
//! Error : same as above (end of iteration)
Standard_EXPORT Handle(Standard_Transient) FirstEntity() const;
//! Returns current sub-part, not as a "Value", but as an Iterator
//! on Entities it contains
//! Error : same as above (end of iteration)
Standard_EXPORT Interface_EntityIterator Entities() const;
Standard_EXPORT virtual ~IFGraph_SubPartsIterator();
protected:
Interface_Graph thegraph;
private:
//! Returns the Graph used by <me>. Used to create another
//! SubPartsIterator from <me>
Standard_EXPORT const Interface_Graph& Graph() const;
Handle(TColStd_HSequenceOfInteger) theparts;
Handle(TColStd_HSequenceOfInteger) thefirsts;
Standard_Integer thepart;
Standard_Integer thecurr;
};
#endif // _IFGraph_SubPartsIterator_HeaderFile

View File

@@ -1,159 +0,0 @@
IFSelect.cxx
IFSelect.hxx
IFSelect_AppliedModifiers.cxx
IFSelect_AppliedModifiers.hxx
IFSelect_BasicDumper.cxx
IFSelect_BasicDumper.hxx
IFSelect_CheckCounter.cxx
IFSelect_CheckCounter.hxx
IFSelect_ContextModif.cxx
IFSelect_ContextModif.hxx
IFSelect_ContextWrite.cxx
IFSelect_ContextWrite.hxx
IFSelect_Dispatch.cxx
IFSelect_Dispatch.hxx
IFSelect_DispGlobal.cxx
IFSelect_DispGlobal.hxx
IFSelect_DispPerCount.cxx
IFSelect_DispPerCount.hxx
IFSelect_DispPerFiles.cxx
IFSelect_DispPerFiles.hxx
IFSelect_DispPerOne.cxx
IFSelect_DispPerOne.hxx
IFSelect_DispPerSignature.cxx
IFSelect_DispPerSignature.hxx
IFSelect_EditForm.cxx
IFSelect_EditForm.hxx
IFSelect_Editor.cxx
IFSelect_Editor.hxx
IFSelect_EditValue.hxx
IFSelect_FileModifier.gxx
IFSelect_GeneralModifier.cxx
IFSelect_GeneralModifier.hxx
IFSelect_GraphCounter.cxx
IFSelect_GraphCounter.hxx
IFSelect_HSeqOfSelection.hxx
IFSelect_IntParam.cxx
IFSelect_IntParam.hxx
IFSelect_ListEditor.cxx
IFSelect_ListEditor.hxx
IFSelect_ModelCopier.cxx
IFSelect_ModelCopier.hxx
IFSelect_ModelModifier.gxx
IFSelect_ModifEditForm.cxx
IFSelect_ModifEditForm.hxx
IFSelect_Modifier.cxx
IFSelect_Modifier.hxx
IFSelect_ModifReorder.cxx
IFSelect_ModifReorder.hxx
IFSelect_PacketList.cxx
IFSelect_PacketList.hxx
IFSelect_ParamEditor.cxx
IFSelect_ParamEditor.hxx
IFSelect_PrintCount.hxx
IFSelect_PrintFail.hxx
IFSelect_RemainMode.hxx
IFSelect_ReturnStatus.hxx
IFSelect_SelectAnyList.cxx
IFSelect_SelectAnyList.hxx
IFSelect_SelectAnyType.cxx
IFSelect_SelectAnyType.hxx
IFSelect_SelectBase.cxx
IFSelect_SelectBase.hxx
IFSelect_SelectCombine.cxx
IFSelect_SelectCombine.hxx
IFSelect_SelectControl.cxx
IFSelect_SelectControl.hxx
IFSelect_SelectDeduct.cxx
IFSelect_SelectDeduct.hxx
IFSelect_SelectDiff.cxx
IFSelect_SelectDiff.hxx
IFSelect_SelectEntityNumber.cxx
IFSelect_SelectEntityNumber.hxx
IFSelect_SelectErrorEntities.cxx
IFSelect_SelectErrorEntities.hxx
IFSelect_SelectExplore.cxx
IFSelect_SelectExplore.hxx
IFSelect_SelectExtract.cxx
IFSelect_SelectExtract.hxx
IFSelect_SelectFlag.cxx
IFSelect_SelectFlag.hxx
IFSelect_SelectIncorrectEntities.cxx
IFSelect_SelectIncorrectEntities.hxx
IFSelect_SelectInList.cxx
IFSelect_SelectInList.hxx
IFSelect_SelectIntersection.cxx
IFSelect_SelectIntersection.hxx
IFSelect_Selection.cxx
IFSelect_Selection.hxx
IFSelect_SelectionIterator.cxx
IFSelect_SelectionIterator.hxx
IFSelect_SelectModelEntities.cxx
IFSelect_SelectModelEntities.hxx
IFSelect_SelectModelRoots.cxx
IFSelect_SelectModelRoots.hxx
IFSelect_SelectPointed.cxx
IFSelect_SelectPointed.hxx
IFSelect_SelectRange.cxx
IFSelect_SelectRange.hxx
IFSelect_SelectRootComps.cxx
IFSelect_SelectRootComps.hxx
IFSelect_SelectRoots.cxx
IFSelect_SelectRoots.hxx
IFSelect_SelectSent.cxx
IFSelect_SelectSent.hxx
IFSelect_SelectShared.cxx
IFSelect_SelectShared.hxx
IFSelect_SelectSharing.cxx
IFSelect_SelectSharing.hxx
IFSelect_SelectSignature.cxx
IFSelect_SelectSignature.hxx
IFSelect_SelectSignedShared.cxx
IFSelect_SelectSignedShared.hxx
IFSelect_SelectSignedSharing.cxx
IFSelect_SelectSignedSharing.hxx
IFSelect_SelectSuite.cxx
IFSelect_SelectSuite.hxx
IFSelect_SelectType.cxx
IFSelect_SelectType.hxx
IFSelect_SelectUnion.cxx
IFSelect_SelectUnion.hxx
IFSelect_SelectUnknownEntities.cxx
IFSelect_SelectUnknownEntities.hxx
IFSelect_SequenceOfAppliedModifiers.hxx
IFSelect_SequenceOfGeneralModifier.hxx
IFSelect_SequenceOfInterfaceModel.hxx
IFSelect_SessionDumper.cxx
IFSelect_SessionDumper.hxx
IFSelect_SessionFile.cxx
IFSelect_SessionFile.hxx
IFSelect_ShareOut.cxx
IFSelect_ShareOut.hxx
IFSelect_ShareOutResult.cxx
IFSelect_ShareOutResult.hxx
IFSelect_SignAncestor.cxx
IFSelect_SignAncestor.hxx
IFSelect_Signature.cxx
IFSelect_Signature.hxx
IFSelect_SignatureList.cxx
IFSelect_SignatureList.hxx
IFSelect_SignCategory.cxx
IFSelect_SignCategory.hxx
IFSelect_SignCounter.cxx
IFSelect_SignCounter.hxx
IFSelect_SignMultiple.cxx
IFSelect_SignMultiple.hxx
IFSelect_SignType.cxx
IFSelect_SignType.hxx
IFSelect_SignValidity.cxx
IFSelect_SignValidity.hxx
IFSelect_Transformer.cxx
IFSelect_Transformer.hxx
IFSelect_TransformStandard.cxx
IFSelect_TransformStandard.hxx
IFSelect_TSeqOfDispatch.hxx
IFSelect_TSeqOfSelection.hxx
IFSelect_WorkLibrary.cxx
IFSelect_WorkLibrary.hxx
IFSelect_WorkSession.cxx
IFSelect_WorkSession.hxx

View File

@@ -1,33 +0,0 @@
// 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.hxx>
#include <IFSelect_SessionFile.hxx>
#include <IFSelect_WorkSession.hxx>
// Methodes de confort, evitant de devoir connaitre SessionFile, qui est un
// Tool non destine a l export (en particulier, pas un Handle)
Standard_Boolean IFSelect::SaveSession
(const Handle(IFSelect_WorkSession)& WS, const Standard_CString file)
{
IFSelect_SessionFile sesfile(WS,file);
return sesfile.IsDone();
}
Standard_Boolean IFSelect::RestoreSession
(const Handle(IFSelect_WorkSession)& WS, const Standard_CString file)
{
IFSelect_SessionFile sesfile(WS);
return (sesfile.Read(file) == 0);
}

View File

@@ -1,60 +0,0 @@
// Created on: 1992-09-21
// Created by: Christian CAILLET
// Copyright (c) 1992-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 _IFSelect_HeaderFile
#define _IFSelect_HeaderFile
#include <Standard.hxx>
#include <Standard_DefineAlloc.hxx>
#include <Standard_Handle.hxx>
#include <Standard_Boolean.hxx>
class IFSelect_WorkSession;
//! Gives tools to manage Selecting a group of Entities
//! processed by an Interface, for instance to divide up an
//! original Model (from a File) to several smaller ones
//! They use description of an Interface Model as a graph
//!
//! Remark that this corresponds to the description of a
//! "scenario" of sharing out a File. Parts of this Scenario
//! are intended to be permanently stored. IFSelect provides
//! the Transient, active counterparts (to run the Scenario).
//! But a permanent one (either as Persistent Objects or as
//! interpretable Text) must be provided elsewhere.
class IFSelect
{
public:
DEFINE_STANDARD_ALLOC
//! Saves the state of a WorkSession from IFSelect, by using a
//! SessionFile from IFSelect. Returns True if Done, False in
//! case of Error on Writing. <file> gives the name of the File
//! to be produced (this avoids to export the class SessionFile).
Standard_EXPORT static Standard_Boolean SaveSession (const Handle(IFSelect_WorkSession)& WS, const Standard_CString file);
//! Restore the state of a WorkSession from IFSelect, by using a
//! SessionFile from IFSelect. Returns True if Done, False in
//! case of Error on Writing. <file> gives the name of the File
//! to be used (this avoids to export the class SessionFile).
Standard_EXPORT static Standard_Boolean RestoreSession (const Handle(IFSelect_WorkSession)& WS, const Standard_CString file);
};
#endif // _IFSelect_HeaderFile

View File

@@ -1,74 +0,0 @@
// 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_AppliedModifiers.hxx>
#include <IFSelect_GeneralModifier.hxx>
#include <Standard_Type.hxx>
IMPLEMENT_STANDARD_RTTIEXT(IFSelect_AppliedModifiers,Standard_Transient)
IFSelect_AppliedModifiers::IFSelect_AppliedModifiers
(const Standard_Integer nbmax, const Standard_Integer nbent)
: thelists (nbmax+1)
{
thenbent = nbent; theentcnt = 0;
}
Standard_Boolean IFSelect_AppliedModifiers::AddModif
(const Handle(IFSelect_GeneralModifier)& modif)
{
if (themodifs.Length() >= thelists.NbEntities()) return Standard_False;
themodifs.Append(modif);
thelists.SetNumber (themodifs.Length());
return Standard_True;
}
Standard_Boolean IFSelect_AppliedModifiers::AddNum
(const Standard_Integer nument)
{
thelists.Add (nument);
return Standard_True;
}
Standard_Integer IFSelect_AppliedModifiers::Count () const
{ return themodifs.Length(); }
Standard_Boolean IFSelect_AppliedModifiers::Item
(const Standard_Integer num,
Handle(IFSelect_GeneralModifier)& modif,
Standard_Integer& entcount)
{
if (num < 1 || num > themodifs.Length()) return Standard_False;
modif = themodifs.Value(num);
thelists.SetNumber (num);
theentcnt = thelists.Length();
entcount = (theentcnt > 0 ? theentcnt : thenbent);
return Standard_True;
}
Standard_Integer IFSelect_AppliedModifiers::ItemNum
(const Standard_Integer nument) const
{ return (theentcnt > 0 ? thelists.Value(nument) : nument); }
Handle(TColStd_HSequenceOfInteger) IFSelect_AppliedModifiers::ItemList () const
{
Handle(TColStd_HSequenceOfInteger) list = new TColStd_HSequenceOfInteger();
Standard_Integer i, nb = (theentcnt > 0 ? theentcnt : thenbent);
for (i = 1; i <= nb; i ++) list->Append (ItemNum(i));
return list;
}
Standard_Boolean IFSelect_AppliedModifiers::IsForAll () const
{ return (theentcnt == 0); }

View File

@@ -1,110 +0,0 @@
// Created on: 1994-05-02
// Created by: Christian CAILLET
// Copyright (c) 1994-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 _IFSelect_AppliedModifiers_HeaderFile
#define _IFSelect_AppliedModifiers_HeaderFile
#include <Standard.hxx>
#include <IFSelect_SequenceOfGeneralModifier.hxx>
#include <Interface_IntList.hxx>
#include <Standard_Integer.hxx>
#include <Standard_Transient.hxx>
#include <TColStd_HSequenceOfInteger.hxx>
class IFSelect_GeneralModifier;
class IFSelect_AppliedModifiers;
DEFINE_STANDARD_HANDLE(IFSelect_AppliedModifiers, Standard_Transient)
//! This class allows to memorize and access to the modifiers
//! which are to be applied to a file. To each modifier, is bound
//! a list of integers (optional) : if this list is absent,
//! the modifier applies to all the file. Else, it applies to the
//! entities designated by these numbers in the produced file.
//!
//! To record a modifier, and a possible list of entity numbers to be applied on:
//! AddModif (amodifier);
//! loop on AddNum (anumber);
//!
//! To query it, Count gives the count of recorded modifiers, then for each one:
//! Item (numodif, amodifier, entcount);
//! IsForAll () -> can be called, if True, applies on the whole file
//!
//! for (i = 1; i <= entcount; i ++)
//! nument = ItemNum (i); -> return an entity number
class IFSelect_AppliedModifiers : public Standard_Transient
{
public:
//! Creates an AppliedModifiers, ready to record up to <nbmax>
//! modifiers, on a model of <nbent> entities
Standard_EXPORT IFSelect_AppliedModifiers(const Standard_Integer nbmax, const Standard_Integer nbent);
//! Records a modifier. By default, it is to apply on all a
//! produced file. Further calls to AddNum will restrict this.
//! Returns True if done, False if too many modifiers are already
//! recorded
Standard_EXPORT Standard_Boolean AddModif (const Handle(IFSelect_GeneralModifier)& modif);
//! Adds a number of entity of the output file to be applied on.
//! If a sequence of AddNum is called after AddModif, this
//! Modifier will be applied on the list of designated entities.
//! Else, it will be applied on all the file
//! Returns True if done, False if no modifier has yet been added
Standard_EXPORT Standard_Boolean AddNum (const Standard_Integer nument);
//! Returns the count of recorded modifiers
Standard_EXPORT Standard_Integer Count() const;
//! Returns the description for applied modifier n0 <num> :
//! the modifier itself, and the count of entities to be applied
//! on. If no specific list of number has been defined, returns
//! the total count of entities of the file
//! If this count is zero, then the modifier applies to all
//! the file (see below). Else, the numbers are then queried by
//! calls to ItemNum between 1 and <entcount>
//! Returns True if OK, False if <num> is out of range
Standard_EXPORT Standard_Boolean Item (const Standard_Integer num, Handle(IFSelect_GeneralModifier)& modif, Standard_Integer& entcount);
//! Returns a numero of entity to be applied on, given its rank
//! in the list. If no list is defined (i.e. for all the file),
//! returns <nument> itself, to give all the entities of the file
//! Returns 0 if <nument> out of range
Standard_EXPORT Standard_Integer ItemNum (const Standard_Integer nument) const;
//! Returns the list of entities to be applied on (see Item)
//! as a HSequence (IsForAll produces the complete list of all
//! the entity numbers of the file
Standard_EXPORT Handle(TColStd_HSequenceOfInteger) ItemList() const;
//! Returns True if the applied modifier queried by last call to
//! Item is to be applied to all the produced file.
//! Else, <entcount> returned by Item gives the count of entity
//! numbers, each one is queried by ItemNum
Standard_EXPORT Standard_Boolean IsForAll() const;
DEFINE_STANDARD_RTTIEXT(IFSelect_AppliedModifiers,Standard_Transient)
private:
IFSelect_SequenceOfGeneralModifier themodifs;
Interface_IntList thelists;
Standard_Integer thenbent;
Standard_Integer theentcnt;
};
#endif // _IFSelect_AppliedModifiers_HeaderFile

View File

@@ -1,188 +0,0 @@
// 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_BasicDumper.hxx>
#include <IFSelect_DispGlobal.hxx>
#include <IFSelect_DispPerCount.hxx>
#include <IFSelect_DispPerOne.hxx>
#include <IFSelect_IntParam.hxx>
#include <IFSelect_Modifier.hxx>
#include <IFSelect_SelectDiff.hxx>
#include <IFSelect_SelectEntityNumber.hxx>
#include <IFSelect_SelectErrorEntities.hxx>
#include <IFSelect_SelectIncorrectEntities.hxx>
#include <IFSelect_SelectIntersection.hxx>
#include <IFSelect_SelectModelEntities.hxx>
#include <IFSelect_SelectModelRoots.hxx>
#include <IFSelect_SelectPointed.hxx>
#include <IFSelect_SelectRange.hxx>
#include <IFSelect_SelectRootComps.hxx>
#include <IFSelect_SelectRoots.hxx>
#include <IFSelect_SelectShared.hxx>
#include <IFSelect_SelectSharing.hxx>
#include <IFSelect_SelectUnion.hxx>
#include <IFSelect_SelectUnknownEntities.hxx>
#include <IFSelect_SessionFile.hxx>
#include <IFSelect_TransformStandard.hxx>
#include <IFSelect_WorkSession.hxx>
#include <Interface_Macros.hxx>
#include <Standard_Transient.hxx>
#include <Standard_Type.hxx>
#include <TCollection_AsciiString.hxx>
IMPLEMENT_STANDARD_RTTIEXT(IFSelect_BasicDumper,IFSelect_SessionDumper)
//#include <IFSelect_SelectTextType.hxx>
#define FIRSTCHAR 1
// Param litteral "own" sous la forme :"<val>" -> first = 3
// A present, forme simplifiee : <val> directement -> first = 1
IFSelect_BasicDumper::IFSelect_BasicDumper () { }
Standard_Boolean IFSelect_BasicDumper::WriteOwn
(IFSelect_SessionFile& file, const Handle(Standard_Transient)& item) const
{
Handle(Standard_Type) type = item->DynamicType();
if (type == STANDARD_TYPE(IFSelect_SelectModelRoots)) return Standard_True;
if (type == STANDARD_TYPE(IFSelect_SelectModelEntities)) return Standard_True;
if (type == STANDARD_TYPE(IFSelect_SelectEntityNumber)) {
DeclareAndCast(IFSelect_SelectEntityNumber,sen,item);
file.SendItem(sen->Number());
return Standard_True;
}
if (type == STANDARD_TYPE(IFSelect_SelectPointed)) return Standard_True;
if (type == STANDARD_TYPE(IFSelect_SelectUnion)) return Standard_True;
if (type == STANDARD_TYPE(IFSelect_SelectIntersection)) return Standard_True;
if (type == STANDARD_TYPE(IFSelect_SelectDiff)) return Standard_True;
if (type == STANDARD_TYPE(IFSelect_SelectUnknownEntities)) return Standard_True;
if (type == STANDARD_TYPE(IFSelect_SelectErrorEntities)) return Standard_True;
if (type == STANDARD_TYPE(IFSelect_SelectIncorrectEntities)) return Standard_True;
if (type == STANDARD_TYPE(IFSelect_SelectRoots)) return Standard_True;
if (type == STANDARD_TYPE(IFSelect_SelectRootComps)) return Standard_True;
if (type == STANDARD_TYPE(IFSelect_SelectRange)) {
DeclareAndCast(IFSelect_SelectRange,sra,item);
file.SendItem(sra->Lower());
file.SendItem(sra->Upper());
return Standard_True;
}
if (type == STANDARD_TYPE(IFSelect_SelectShared)) return Standard_True;
if (type == STANDARD_TYPE(IFSelect_SelectSharing)) return Standard_True;
if (type == STANDARD_TYPE(IFSelect_DispPerOne)) return Standard_True;
if (type == STANDARD_TYPE(IFSelect_DispGlobal)) return Standard_True;
if (type == STANDARD_TYPE(IFSelect_DispPerCount)) {
DeclareAndCast(IFSelect_DispPerCount,dpc,item);
file.SendItem(dpc->Count());
return Standard_True;
}
if (type == STANDARD_TYPE(IFSelect_TransformStandard)) {
DeclareAndCast(IFSelect_TransformStandard,trs,item);
if (trs->CopyOption()) file.SendText("copy");
else file.SendText("onthespot");
Standard_Integer nbm = trs->NbModifiers();
for (Standard_Integer i = 1; i <= nbm; i ++)
file.SendItem(trs->Modifier(i));
}
return Standard_False;
}
Standard_Boolean IFSelect_BasicDumper::ReadOwn
(IFSelect_SessionFile& file, const TCollection_AsciiString& type,
Handle(Standard_Transient)& item) const
{
if (type.IsEqual("IFSelect_SelectModelRoots"))
{ item = new IFSelect_SelectModelRoots (); return Standard_True; }
if (type.IsEqual("IFSelect_SelectModelEntities"))
{ item = new IFSelect_SelectModelEntities (); return Standard_True; }
if (type.IsEqual("IFSelect_SelectEntityNumber")) {
Handle(IFSelect_SelectEntityNumber) sen =
new IFSelect_SelectEntityNumber ();
sen->SetNumber (GetCasted(IFSelect_IntParam,file.ItemValue(1)));
item = sen;
return Standard_True;
}
if (type.IsEqual("IFSelect_SelectPointed"))
{ item = new IFSelect_SelectPointed; return Standard_True; }
if (type.IsEqual("IFSelect_SelectUnion"))
{ item = new IFSelect_SelectUnion; return Standard_True; }
if (type.IsEqual("IFSelect_SelectIntersection"))
{ item = new IFSelect_SelectIntersection; return Standard_True; }
if (type.IsEqual("IFSelect_SelectDiff"))
{ item = new IFSelect_SelectDiff; return Standard_True; }
if (type.IsEqual("IFSelect_SelectUnknownEntities"))
{ item = new IFSelect_SelectUnknownEntities; return Standard_True; }
if (type.IsEqual("IFSelect_SelectErrorEntities"))
{ item = new IFSelect_SelectErrorEntities; return Standard_True; }
if (type.IsEqual("IFSelect_SelectIncorrectEntities"))
{ item = new IFSelect_SelectIncorrectEntities; return Standard_True; }
if (type.IsEqual("IFSelect_SelectRoots"))
{ item = new IFSelect_SelectRoots; return Standard_True; }
if (type.IsEqual("IFSelect_SelectRootComps"))
{ item = new IFSelect_SelectRootComps; return Standard_True; }
if (type.IsEqual("IFSelect_SelectRange")) {
Handle(IFSelect_SelectRange) sra = new IFSelect_SelectRange;
sra->SetRange (GetCasted(IFSelect_IntParam,file.ItemValue(1)),
GetCasted(IFSelect_IntParam,file.ItemValue(2)) );
item = sra;
return Standard_True;
}
if (type.IsEqual("IFSelect_SelectTextType")) {
const TCollection_AsciiString exname = file.ParamValue(1);
if (exname.Length() < FIRSTCHAR) return Standard_False;
if (exname.Value(FIRSTCHAR) == 'e') {}
else if (exname.Value(FIRSTCHAR) == 'c') {}
else return Standard_False;
// item = new IFSelect_SelectTextType (file.TextValue(2).ToCString(),exact);
// return Standard_True;
}
if (type.IsEqual("IFSelect_SelectShared"))
{ item = new IFSelect_SelectShared; return Standard_True; }
if (type.IsEqual("IFSelect_SelectSharing"))
{ item = new IFSelect_SelectSharing; return Standard_True; }
if (type.IsEqual("IFSelect_DispPerOne"))
{ item = new IFSelect_DispPerOne; return Standard_True; }
if (type.IsEqual("IFSelect_DispGlobal"))
{ item = new IFSelect_DispGlobal; return Standard_True; }
if (type.IsEqual("IFSelect_DispPerCount")) {
Handle(IFSelect_DispPerCount) dpc = new IFSelect_DispPerCount;
dpc->SetCount (GetCasted(IFSelect_IntParam,file.ItemValue(1)) );
item = dpc;
return Standard_True;
}
if (type.IsEqual("IFSelect_TransformStandard")) {
Standard_Boolean copyoption;
const TCollection_AsciiString copyname = file.ParamValue(1);
if (copyname.Length() < FIRSTCHAR) return Standard_False;
if (copyname.Value(FIRSTCHAR) == 'c') copyoption = Standard_True;
else if (copyname.Value(FIRSTCHAR) == 'o') copyoption = Standard_False;
else return Standard_False;
Handle(IFSelect_TransformStandard) trs = new IFSelect_TransformStandard;
trs->SetCopyOption(copyoption);
Standard_Integer nbp = file.NbParams();
for (Standard_Integer i = 2; i <= nbp; i ++) {
DeclareAndCast(IFSelect_Modifier,modif,file.ItemValue(i));
if (!modif.IsNull()) trs->AddModifier(modif);
}
item = trs;
return Standard_True;
}
return Standard_False;
}

View File

@@ -1,75 +0,0 @@
// Created on: 1993-11-04
// 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 _IFSelect_BasicDumper_HeaderFile
#define _IFSelect_BasicDumper_HeaderFile
#include <Standard.hxx>
#include <Standard_Type.hxx>
#include <IFSelect_SessionDumper.hxx>
class IFSelect_SessionFile;
class Standard_Transient;
class TCollection_AsciiString;
class IFSelect_BasicDumper;
DEFINE_STANDARD_HANDLE(IFSelect_BasicDumper, IFSelect_SessionDumper)
//! BasicDumper takes into account, for SessionFile, all the
//! classes defined in the package IFSelect : Selections,
//! Dispatches (there is no Modifier)
class IFSelect_BasicDumper : public IFSelect_SessionDumper
{
public:
//! Creates a BasicDumper and puts it into the Library of Dumper
Standard_EXPORT IFSelect_BasicDumper();
//! Write the Own Parameters of Types defined in package IFSelect
//! Returns True if <item> has been processed, False else
Standard_EXPORT Standard_Boolean WriteOwn (IFSelect_SessionFile& file, const Handle(Standard_Transient)& item) const Standard_OVERRIDE;
//! Recognizes and Read Own Parameters for Types of package
//! IFSelect. Returns True if done and <item> created, False else
Standard_EXPORT Standard_Boolean ReadOwn (IFSelect_SessionFile& file, const TCollection_AsciiString& type, Handle(Standard_Transient)& item) const Standard_OVERRIDE;
DEFINE_STANDARD_RTTIEXT(IFSelect_BasicDumper,IFSelect_SessionDumper)
protected:
private:
};
#endif // _IFSelect_BasicDumper_HeaderFile

View File

@@ -1,99 +0,0 @@
// 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_CheckCounter.hxx>
#include <Interface_CheckIterator.hxx>
#include <Interface_InterfaceModel.hxx>
#include <MoniTool_SignText.hxx>
#include <Standard_Transient.hxx>
#include <Standard_Type.hxx>
#include <stdio.h>
IMPLEMENT_STANDARD_RTTIEXT(IFSelect_CheckCounter,IFSelect_SignatureList)
//=======================================================================
//function : IFSelect_CheckCounter
//purpose :
//=======================================================================
IFSelect_CheckCounter::IFSelect_CheckCounter(const Standard_Boolean withlist)
: IFSelect_SignatureList (withlist)
{
SetName("Check");
}
//=======================================================================
//function : SetSignature
//purpose :
//=======================================================================
void IFSelect_CheckCounter::SetSignature(const Handle(MoniTool_SignText)& sign)
{
thesign = sign;
}
//=======================================================================
//function : Signature
//purpose :
//=======================================================================
Handle(MoniTool_SignText) IFSelect_CheckCounter::Signature () const
{
return thesign;
}
//=======================================================================
//function : Analyse
//purpose :
//=======================================================================
void IFSelect_CheckCounter::Analyse(const Interface_CheckIterator& list,
const Handle(Interface_InterfaceModel)& model,
const Standard_Boolean original,
const Standard_Boolean failsonly)
{
Standard_Integer i,nb,num, nbe = (model.IsNull() ? 0 : model->NbEntities());
char mess[300];
sprintf (mess,"Check %s",list.Name());
SetName (mess);
for (list.Start(); list.More(); list.Next()) {
num = list.Number();
Handle(Standard_Transient) ent;
const Handle(Interface_Check) check = list.Value();
ent = check->Entity();
if (ent.IsNull() && num > 0 && num <= nbe) ent = model->Value(num);
nb = check->NbFails();
Standard_CString tystr = NULL;
if (!ent.IsNull()) {
if (!thesign.IsNull()) tystr = thesign->Text (ent,model).ToCString();
else if (!model.IsNull()) tystr = model->TypeName (ent);
else tystr =
Interface_InterfaceModel::ClassName(ent->DynamicType()->Name());
}
for (i = 1; i <= nb; i ++) {
if (ent.IsNull()) sprintf(mess,"F: %s",check->CFail(i,original));
else sprintf(mess,"F:%s: %s",tystr,check->CFail(i,original));
Add (ent,mess);
}
nb = 0;
if (!failsonly) nb = check->NbWarnings();
for (i = 1; i <= nb; i ++) {
if (ent.IsNull()) sprintf(mess,"W: %s",check->CWarning(i,original));
else sprintf(mess,"W:%s: %s",tystr,check->CWarning(i,original));
Add (ent,mess);
}
}
}

View File

@@ -1,85 +0,0 @@
// Created on: 1994-11-07
// Created by: Christian CAILLET
// Copyright (c) 1994-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 _IFSelect_CheckCounter_HeaderFile
#define _IFSelect_CheckCounter_HeaderFile
#include <Standard.hxx>
#include <IFSelect_SignatureList.hxx>
class MoniTool_SignText;
class Interface_CheckIterator;
class Interface_InterfaceModel;
class IFSelect_CheckCounter;
DEFINE_STANDARD_HANDLE(IFSelect_CheckCounter, IFSelect_SignatureList)
//! A CheckCounter allows to see a CheckList (i.e. CheckIterator)
//! not per entity, its messages, but per message, the entities
//! attached (count and list). Because many messages can be
//! repeated if they are due to systematic errors
class IFSelect_CheckCounter : public IFSelect_SignatureList
{
public:
//! Creates a CheckCounter, empty ready to work
Standard_EXPORT IFSelect_CheckCounter(const Standard_Boolean withlist = Standard_False);
//! Sets a specific signature
//! Else, the current SignType (in the model) is used
Standard_EXPORT void SetSignature (const Handle(MoniTool_SignText)& sign);
//! Returns the Signature;
Standard_EXPORT Handle(MoniTool_SignText) Signature() const;
//! Analyses a CheckIterator according a Model (which detains the
//! entities for which the CheckIterator has messages), i.e.
//! counts messages for entities
//! If <original> is True, does not consider final messages but
//! those before interpretation (such as inserting variables :
//! integers, reals, strings)
//! If <failsonly> is True, only Fails are considered
//! Remark : global messages are recorded with a Null entity
Standard_EXPORT void Analyse (const Interface_CheckIterator& list, const Handle(Interface_InterfaceModel)& model, const Standard_Boolean original = Standard_False, const Standard_Boolean failsonly = Standard_False);
DEFINE_STANDARD_RTTIEXT(IFSelect_CheckCounter,IFSelect_SignatureList)
protected:
private:
Handle(MoniTool_SignText) thesign;
};
#endif // _IFSelect_CheckCounter_HeaderFile

View File

@@ -1,464 +0,0 @@
// 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_ContextModif.hxx>
#include <IFSelect_GeneralModifier.hxx>
#include <IFSelect_Selection.hxx>
#include <Interface_Check.hxx>
#include <Interface_CheckIterator.hxx>
#include <Interface_CopyControl.hxx>
#include <Interface_CopyTool.hxx>
#include <Interface_EntityIterator.hxx>
#include <Interface_Graph.hxx>
#include <Interface_InterfaceModel.hxx>
#include <Interface_Protocol.hxx>
#include <Message.hxx>
#include <Message_Messenger.hxx>
#include <Standard_NoSuchObject.hxx>
#include <Standard_Transient.hxx>
//=======================================================================
//function : IFSelect_ContextModif
//purpose :
//=======================================================================
IFSelect_ContextModif::IFSelect_ContextModif(const Interface_Graph& graph,
const Interface_CopyTool& TC,
const Standard_CString filename)
: thegraf (graph,Standard_False) , thefile (filename) ,
thelist (graph.Size(),' ')
{
themap = TC.Control(); thesel = Standard_False; thecurr = thecurt = 0;
Standard_Integer nb = thelist.Length();
Handle(Standard_Transient) newent;
for (Standard_Integer i = 1; i <= nb; i ++) {
if (themap->Search(graph.Entity(i),newent)) thelist.SetValue(i,'1');
}
}
//=======================================================================
//function : IFSelect_ContextModif
//purpose :
//=======================================================================
IFSelect_ContextModif::IFSelect_ContextModif(const Interface_Graph& graph,
const Standard_CString filename)
: thegraf (graph,Standard_False) , thefile (filename) ,
thelist (graph.Size(),' ')
{
thesel = Standard_False; thecurr = thecurt = 0;
Standard_Integer nb = thelist.Length();
Handle(Standard_Transient) newent;
for (Standard_Integer i = 1; i <= nb; i ++) thelist.SetValue(i,'1');
}
//=======================================================================
//function : Select
//purpose :
//=======================================================================
void IFSelect_ContextModif::Select (Interface_EntityIterator& list)
{
thesel = Standard_True;
Standard_Integer nb = thelist.Length();
for (Standard_Integer i = 1; i <= nb; i ++) thelist.SetValue(i,' ');
for (list.Start(); list.More(); list.Next()) {
Handle(Standard_Transient) start,newent;
start = list.Value();
Standard_Integer num = thegraf.EntityNumber(start);
if (num > nb || num < 0) num = 0;
if (themap.IsNull() && num > 0) thelist.SetValue(num,'1');
else if (themap->Search (start,newent)) {
if (num > 0) thelist.SetValue(num,'1');
}
}
}
//=======================================================================
//function : OriginalGraph
//purpose :
//=======================================================================
const Interface_Graph& IFSelect_ContextModif::OriginalGraph () const
{
return thegraf;
}
//=======================================================================
//function : OriginalModel
//purpose :
//=======================================================================
Handle(Interface_InterfaceModel) IFSelect_ContextModif::OriginalModel() const
{
return thegraf.Model();
}
//=======================================================================
//function : SetProtocol
//purpose :
//=======================================================================
void IFSelect_ContextModif::SetProtocol(const Handle(Interface_Protocol)& prot)
{
theprot = prot;
}
//=======================================================================
//function : Protocol
//purpose :
//=======================================================================
Handle(Interface_Protocol) IFSelect_ContextModif::Protocol() const
{
return theprot;
}
//=======================================================================
//function : HasFileName
//purpose :
//=======================================================================
Standard_Boolean IFSelect_ContextModif::HasFileName() const
{
return (thefile.Length() > 0);
}
//=======================================================================
//function : FileName
//purpose :
//=======================================================================
Standard_CString IFSelect_ContextModif::FileName () const
{
return thefile.ToCString();
}
//=======================================================================
//function : Control
//purpose :
//=======================================================================
Handle(Interface_CopyControl) IFSelect_ContextModif::Control () const
{
return themap;
}
//=======================================================================
//function : IsForNone
//purpose :
//=======================================================================
Standard_Boolean IFSelect_ContextModif::IsForNone () const
{
if (!thesel) return Standard_False;
Standard_Integer nb = thelist.Length();
for (Standard_Integer i = 1; i <= nb; i ++) {
if (thelist.Value(i) != ' ') return Standard_False;
}
return Standard_True;
}
//=======================================================================
//function : IsForAll
//purpose :
//=======================================================================
Standard_Boolean IFSelect_ContextModif::IsForAll () const
{
return (!thesel);
}
//=======================================================================
//function : IsTransferred
//purpose :
//=======================================================================
Standard_Boolean IFSelect_ContextModif::IsTransferred
(const Handle(Standard_Transient)& ent) const
{
if (themap.IsNull()) return Standard_True;
Handle(Standard_Transient) newent;
return themap->Search(ent,newent);
}
//=======================================================================
//function : IsSelected
//purpose :
//=======================================================================
Standard_Boolean IFSelect_ContextModif::IsSelected
(const Handle(Standard_Transient)& ent) const
{
// Select a deja verifie "IsTransferred"
Standard_Integer num = thegraf.EntityNumber(ent);
if (num == 0) return Standard_False;
return (thelist.Value(num) != ' ');
}
//=======================================================================
//function : SelectedOriginal
//purpose :
//=======================================================================
Interface_EntityIterator IFSelect_ContextModif::SelectedOriginal () const
{
Interface_EntityIterator list;
Standard_Integer nb = thelist.Length();
for (Standard_Integer i = 1; i <= nb; i ++) {
if (thelist.Value(i) != ' ') list.GetOneItem (thegraf.Entity(i));
}
return list;
}
//=======================================================================
//function : SelectedResult
//purpose :
//=======================================================================
Interface_EntityIterator IFSelect_ContextModif::SelectedResult () const
{
Interface_EntityIterator list;
Standard_Integer nb = thelist.Length();
for (Standard_Integer i = 1; i <= nb; i ++) {
Handle(Standard_Transient) newent;
if (themap.IsNull()) newent = thegraf.Entity(i);
else if (thelist.Value(i) != ' ') themap->Search (thegraf.Entity(i),newent);
if (!newent.IsNull()) list.GetOneItem (newent);
}
return list;
}
//=======================================================================
//function : SelectedCount
//purpose :
//=======================================================================
Standard_Integer IFSelect_ContextModif::SelectedCount () const
{
Standard_Integer nb = thelist.Length();
Standard_Integer ns = 0;
for (Standard_Integer i = 1; i <= nb; i ++)
{ if (thelist.Value(i) != ' ') ns ++; }
return ns;
}
//=======================================================================
//function : Start
//purpose :
//=======================================================================
void IFSelect_ContextModif::Start ()
{
thecurr = thecurt = 0;
Next();
}
//=======================================================================
//function : More
//purpose :
//=======================================================================
Standard_Boolean IFSelect_ContextModif::More () const
{
return (thecurr > 0);
}
//=======================================================================
//function : Next
//purpose :
//=======================================================================
void IFSelect_ContextModif::Next()
{
Standard_Integer nb = thelist.Length();
// thecurr = thecurt;
// if (thecurr <= 0 && thecurt >= 0) return;
for (Standard_Integer i = thecurr+1; i <= nb; i ++) {
if (thelist.Value(i) != ' ') { thecurr = i; thecurt ++; return; }
}
thecurr = thecurt = 0;
}
//=======================================================================
//function : ValueOriginal
//purpose :
//=======================================================================
Handle(Standard_Transient) IFSelect_ContextModif::ValueOriginal () const
{
if (thecurr <= 0) throw Standard_NoSuchObject("IFSelect_ContextModif");
return thegraf.Entity(thecurr);
}
//=======================================================================
//function : ValueResult
//purpose :
//=======================================================================
Handle(Standard_Transient) IFSelect_ContextModif::ValueResult () const
{
if (thecurr <= 0) throw Standard_NoSuchObject("IFSelect_ContextModif");
Handle(Standard_Transient) ent,newent;
ent = thegraf.Entity(thecurr);
if (themap.IsNull()) newent = ent;
else themap->Search(ent,newent);
return newent;
}
//=======================================================================
//function : TraceModifier
//purpose :
//=======================================================================
void IFSelect_ContextModif::TraceModifier
(const Handle(IFSelect_GeneralModifier)& modif)
{
if (modif.IsNull()) return;
Message_Messenger::StreamBuffer sout = Message::SendInfo();
sout << "--- Run Modifier:" << std::endl;
Handle(IFSelect_Selection) sel = modif->Selection();
if (!sel.IsNull()) sout<<" Selection:"<<sel->Label();
else sout<<" (no Selection)";
// on va simplement compter les entites
Standard_Integer ne = 0, nb = thelist.Length();
for (Standard_Integer i = 1; i <= nb; i ++) {
if (thelist.Value(i) != ' ') ne ++;
}
if (nb == ne) sout<<" All Model ("<<nb<<" Entities)"<<std::endl;
else sout<<" Entities,Total:"<<nb<<" Concerned:"<<ne<<std::endl;
}
//=======================================================================
//function : Trace
//purpose :
//=======================================================================
void IFSelect_ContextModif::Trace (const Standard_CString mess)
{
// Trace courante
if (thecurr <= 0) return;
Message_Messenger::StreamBuffer sout = Message::SendInfo();
if (ValueOriginal() == ValueResult())
sout<<"-- ContextModif. Entity n0 "<<thecurr<<std::endl;
else
sout<<"-- ContextModif. Entity in Original, n0 "<<thecurr<<" in Result, n0 "
<<thecurt<<std::endl;
if (mess[0] != '\0') sout<<"-- Message:"<<mess<<std::endl;
}
//=======================================================================
//function : AddCheck
//purpose :
//=======================================================================
void IFSelect_ContextModif::AddCheck(const Handle(Interface_Check)& check)
{
if (check->NbFails() + check->NbWarnings() == 0) return;
const Handle(Standard_Transient)& ent = check->Entity();
Standard_Integer num = thegraf.EntityNumber(ent);
if (num == 0 && !ent.IsNull()) num = -1; // force enregistrement
thechek.Add(check,num);
}
//=======================================================================
//function : AddWarning
//purpose :
//=======================================================================
void IFSelect_ContextModif::AddWarning(const Handle(Standard_Transient)& start,
const Standard_CString mess,
const Standard_CString orig)
{
thechek.CCheck(thegraf.EntityNumber(start))->AddWarning(mess,orig);
}
//=======================================================================
//function : AddFail
//purpose :
//=======================================================================
void IFSelect_ContextModif::AddFail(const Handle(Standard_Transient)& start,
const Standard_CString mess,
const Standard_CString orig)
{
thechek.CCheck(thegraf.EntityNumber(start))->AddFail(mess,orig);
}
//=======================================================================
//function : CCheck
//purpose :
//=======================================================================
Handle(Interface_Check) IFSelect_ContextModif::CCheck(const Standard_Integer num)
{
Handle(Interface_Check) ach = thechek.CCheck(num);
if (num > 0 && num <= thegraf.Size()) ach->SetEntity(thegraf.Entity(num));
return ach;
}
//=======================================================================
//function : CCheck
//purpose :
//=======================================================================
Handle(Interface_Check) IFSelect_ContextModif::CCheck
(const Handle(Standard_Transient)& ent)
{
Standard_Integer num = thegraf.EntityNumber(ent);
if (num == 0) num = -1; // force l enregistrement
Handle(Interface_Check)& ach = thechek.CCheck(num);
ach->SetEntity(ent);
return ach;
}
//=======================================================================
//function : CheckList
//purpose :
//=======================================================================
Interface_CheckIterator IFSelect_ContextModif::CheckList () const
{
return thechek;
}

View File

@@ -1,218 +0,0 @@
// Created on: 1994-06-08
// Created by: Christian CAILLET
// Copyright (c) 1994-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 _IFSelect_ContextModif_HeaderFile
#define _IFSelect_ContextModif_HeaderFile
#include <Standard.hxx>
#include <Standard_DefineAlloc.hxx>
#include <Standard_Handle.hxx>
#include <Interface_Graph.hxx>
#include <TCollection_AsciiString.hxx>
#include <Interface_CheckIterator.hxx>
#include <Standard_Boolean.hxx>
#include <Standard_Integer.hxx>
class Interface_Protocol;
class Interface_CopyControl;
class Interface_CopyTool;
class Interface_EntityIterator;
class Interface_InterfaceModel;
class Standard_Transient;
class IFSelect_GeneralModifier;
class Interface_Check;
//! This class gathers various information used by Model Modifiers
//! apart from the target model itself, and the CopyTool which
//! must be passed directly.
//!
//! These information report to original data : model, entities,
//! and the selection list if there is one : it allows to query
//! about such or such starting entity, or result entity, or
//! iterate on selection list ...
//! Also data useful for file output are available (because some
//! Modifiers concern models produced for file output).
//!
//! Furthermore, in return, ContextModif can record Checks, either
//! one for all, or one for each Entity. It supports trace too.
class IFSelect_ContextModif
{
public:
DEFINE_STANDARD_ALLOC
//! Prepares a ContextModif with these information :
//! - the graph established from original model (target passed
//! directly to Modifier)
//! - the CopyTool which detains the CopyControl, which maps
//! starting (in original) and result (in target) entities
//! - an optional file name (for file output)
//!
//! Such a ContextModif is considered to be applied on all
//! transferred entities (no filter active)
Standard_EXPORT IFSelect_ContextModif(const Interface_Graph& graph, const Interface_CopyTool& TC, const Standard_CString filename = "");
//! Prepares a ContextModif with these information :
//! - the graph established from original model (target passed
//! directly to Modifier)
//! - an optional file name (for file output)
//! Here, no CopyControl, hence all entities are considered equal
//! as starting and result
//!
//! Such a ContextModif is considered to be applied on all
//! transferred entities (no filter active)
Standard_EXPORT IFSelect_ContextModif(const Interface_Graph& graph, const Standard_CString filename = "");
//! This method requires ContextModif to be applied with a filter.
//! If a ModelModifier is defined with a Selection criterium,
//! the result of this Selection is used as a filter :
//! - if none of its items has been transferred, the modification
//! does not apply at all
//! - else, the Modifier can query for what entities were selected
//! and what are their results
//! - if this method is not called before working, the Modifier
//! has to work on the whole Model
Standard_EXPORT void Select (Interface_EntityIterator& list);
//! Returns the original Graph (compared to OriginalModel, it
//! gives more query capabilitites)
Standard_EXPORT const Interface_Graph& OriginalGraph() const;
//! Returns the original model
Standard_EXPORT Handle(Interface_InterfaceModel) OriginalModel() const;
//! Allows to transmit a Protocol as part of a ContextModif
Standard_EXPORT void SetProtocol (const Handle(Interface_Protocol)& proto);
//! Returns the Protocol (Null if not set)
Standard_EXPORT Handle(Interface_Protocol) Protocol() const;
//! Returns True if a non empty file name has been defined
Standard_EXPORT Standard_Boolean HasFileName() const;
//! Returns File Name (can be empty)
Standard_EXPORT Standard_CString FileName() const;
//! Returns the map for a direct use, if required
Standard_EXPORT Handle(Interface_CopyControl) Control() const;
//! Returns True if Select has determined that a Modifier may not
//! be run (filter defined and empty)
Standard_EXPORT Standard_Boolean IsForNone() const;
//! Returns True if no filter is defined : a Modifier has to work
//! on all entities of the resulting (target) model
Standard_EXPORT Standard_Boolean IsForAll() const;
//! Returns True if a starting item has been transferred
Standard_EXPORT Standard_Boolean IsTransferred (const Handle(Standard_Transient)& ent) const;
//! Returns True if a starting item has been transferred and selected
Standard_EXPORT Standard_Boolean IsSelected (const Handle(Standard_Transient)& ent) const;
//! Returns True if a starting entity has been transferred, and
//! the result is in <res>. Returns False else
//! (direct call to the map)
Standard_EXPORT Standard_Boolean Search (const Handle(Standard_Transient)& ent, Handle(Standard_Transient)& res) const;
//! Returns the list of original selected items.
//! See also the iteration
Standard_EXPORT Interface_EntityIterator SelectedOriginal() const;
//! Returns the list of resulting counterparts of selected items.
//! See also the iteration
Standard_EXPORT Interface_EntityIterator SelectedResult() const;
//! Returns the count of selected and transferred items
Standard_EXPORT Standard_Integer SelectedCount() const;
//! Starts an iteration on selected items. It takes into account
//! IsForAll/IsForNone, by really iterating on all selected items.
Standard_EXPORT void Start();
//! Returns True until the iteration has finished
Standard_EXPORT Standard_Boolean More() const;
//! Advances the iteration
Standard_EXPORT void Next();
//! Returns the current selected item in the original model
Standard_EXPORT Handle(Standard_Transient) ValueOriginal() const;
//! Returns the result counterpart of current selected item
//! (in the target model)
Standard_EXPORT Handle(Standard_Transient) ValueResult() const;
//! Traces the application of a Modifier. Works with default trace
//! File and Level. Fills the trace if default trace level is at
//! least 1. Traces the Modifier (its Label) and its Selection if
//! there is one (its Label).
//! To be called after Select (because status IsForAll is printed)
//! Worths to trace a global modification. See also Trace below
Standard_EXPORT void TraceModifier (const Handle(IFSelect_GeneralModifier)& modif);
//! Traces the modification of the current entity (see above,
//! ValueOriginal and ValueResult) for default trace level >= 2.
//! To be called on each individual entity really modified
//! <mess> is an optional additional message
Standard_EXPORT void Trace (const Standard_CString mess = "");
//! Adds a Check to the CheckList. If it is empty, nothing is done
//! If it concerns an Entity from the Original Model (by SetEntity)
//! to which another Check is attached, it is merged to it.
//! Else, it is added or merged as to GlobalCheck.
Standard_EXPORT void AddCheck (const Handle(Interface_Check)& check);
//! Adds a Warning Message for an Entity from the original Model
//! If <start> is not an Entity from the original model (e.g. the
//! model itself) this message is added to Global Check.
Standard_EXPORT void AddWarning (const Handle(Standard_Transient)& start, const Standard_CString mess, const Standard_CString orig = "");
//! Adds a Fail Message for an Entity from the original Model
//! If <start> is not an Entity from the original model (e.g. the
//! model itself) this message is added to Global Check.
Standard_EXPORT void AddFail (const Handle(Standard_Transient)& start, const Standard_CString mess, const Standard_CString orig = "");
//! Returns a Check given an Entity number (in the original Model)
//! by default a Global Check. Creates it the first time.
//! It can then be acknowledged on the spot, in condition that the
//! caller works by reference ("Interface_Check& check = ...")
Standard_EXPORT Handle(Interface_Check) CCheck (const Standard_Integer num = 0);
//! Returns a Check attached to an Entity from the original Model
//! It can then be acknowledged on the spot, in condition that the
//! caller works by reference ("Interface_Check& check = ...")
Standard_EXPORT Handle(Interface_Check) CCheck (const Handle(Standard_Transient)& start);
//! Returns the complete CheckList
Standard_EXPORT Interface_CheckIterator CheckList() const;
private:
Interface_Graph thegraf;
Handle(Interface_Protocol) theprot;
Handle(Interface_CopyControl) themap;
TCollection_AsciiString thefile;
TCollection_AsciiString thelist;
Interface_CheckIterator thechek;
Standard_Boolean thesel;
Standard_Integer thecurr;
Standard_Integer thecurt;
};
#endif // _IFSelect_ContextModif_HeaderFile

View File

@@ -1,297 +0,0 @@
// 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_AppliedModifiers.hxx>
#include <IFSelect_ContextWrite.hxx>
#include <IFSelect_GeneralModifier.hxx>
#include <Interface_Check.hxx>
#include <Interface_CheckIterator.hxx>
#include <Interface_HGraph.hxx>
#include <Interface_InterfaceModel.hxx>
#include <Interface_Protocol.hxx>
#include <Standard_NoSuchObject.hxx>
#include <Standard_Transient.hxx>
//=======================================================================
//function : IFSelect_ContextWrite
//purpose :
//=======================================================================
IFSelect_ContextWrite::IFSelect_ContextWrite
(const Handle(Interface_InterfaceModel)& model,
const Handle(Interface_Protocol)& proto,
const Handle(IFSelect_AppliedModifiers)& applieds,
const Standard_CString filename)
: themodel (model) , theproto (proto) , thefile (filename) ,
theapply (applieds) , thenumod(0) , thenbent (0) , thecurr (0) { }
//=======================================================================
//function : IFSelect_ContextWrite
//purpose :
//=======================================================================
IFSelect_ContextWrite::IFSelect_ContextWrite
(const Handle(Interface_HGraph)& hgraph,
const Handle(Interface_Protocol)& proto,
const Handle(IFSelect_AppliedModifiers)& applieds,
const Standard_CString filename)
: themodel (hgraph->Graph().Model()) ,
theproto (proto) , thefile (filename) , theapply (applieds) ,
thehgraf (hgraph) , thenumod(0) , thenbent (0) , thecurr (0) { }
//=======================================================================
//function : Model
//purpose :
//=======================================================================
Handle(Interface_InterfaceModel) IFSelect_ContextWrite::Model () const
{
return themodel;
}
//=======================================================================
//function : Protocol
//purpose :
//=======================================================================
Handle(Interface_Protocol) IFSelect_ContextWrite::Protocol () const
{
return theproto;
}
//=======================================================================
//function : FileName
//purpose :
//=======================================================================
Standard_CString IFSelect_ContextWrite::FileName () const
{
return thefile.ToCString();
}
//=======================================================================
//function : AppliedModifiers
//purpose :
//=======================================================================
Handle(IFSelect_AppliedModifiers) IFSelect_ContextWrite::AppliedModifiers () const
{
return theapply;
}
//=======================================================================
//function : Graph
//purpose :
//=======================================================================
const Interface_Graph& IFSelect_ContextWrite::Graph ()
{
if (thehgraf.IsNull()) thehgraf = new Interface_HGraph(themodel,theproto);
return thehgraf->Graph();
}
//=======================================================================
//function : NbModifiers
//purpose :
//=======================================================================
Standard_Integer IFSelect_ContextWrite::NbModifiers () const
{ return (theapply.IsNull() ? 0 : theapply->Count()); }
Standard_Boolean IFSelect_ContextWrite::SetModifier
(const Standard_Integer numod)
{
themodif.Nullify(); thenumod = thenbent = thecurr = 0;
if (theapply.IsNull()) return Standard_False;
if (numod < 1 || numod > theapply->Count()) return Standard_False;
theapply->Item(numod,themodif,thenbent);
return Standard_True;
}
//=======================================================================
//function : FileModifier
//purpose :
//=======================================================================
Handle(IFSelect_GeneralModifier) IFSelect_ContextWrite::FileModifier () const
{
return themodif;
}
//=======================================================================
//function : IsForNone
//purpose :
//=======================================================================
Standard_Boolean IFSelect_ContextWrite::IsForNone () const
{
return (thenbent == 0);
}
//=======================================================================
//function : IsForAll
//purpose :
//=======================================================================
Standard_Boolean IFSelect_ContextWrite::IsForAll () const
{
return theapply->IsForAll();
}
//=======================================================================
//function : NbEntities
//purpose :
//=======================================================================
Standard_Integer IFSelect_ContextWrite::NbEntities () const
{
return thenbent;
}
//=======================================================================
//function : Start
//purpose :
//=======================================================================
void IFSelect_ContextWrite::Start ()
{
thecurr = 1;
}
//=======================================================================
//function : More
//purpose :
//=======================================================================
Standard_Boolean IFSelect_ContextWrite::More () const
{
return (thecurr <= thenbent);
}
//=======================================================================
//function : Next
//purpose :
//=======================================================================
void IFSelect_ContextWrite::Next ()
{
thecurr ++;
}
//=======================================================================
//function : Value
//purpose :
//=======================================================================
Handle(Standard_Transient) IFSelect_ContextWrite::Value() const
{
if (thecurr < 1 || thecurr > thenbent)
throw Standard_NoSuchObject("IFSelect_ContextWrite:Value");
Standard_Integer num = theapply->ItemNum (thecurr);
return themodel->Value(num);
}
//=======================================================================
//function : AddCheck
//purpose :
//=======================================================================
void IFSelect_ContextWrite::AddCheck (const Handle(Interface_Check)& check)
{
if (check->NbFails() + check->NbWarnings() == 0) return;
const Handle(Standard_Transient)& ent = check->Entity();
Standard_Integer num = themodel->Number(ent);
if (num == 0 && !ent.IsNull()) num = -1; // force enregistrement
thecheck.Add(check,num);
}
//=======================================================================
//function : AddWarning
//purpose :
//=======================================================================
void IFSelect_ContextWrite::AddWarning(const Handle(Standard_Transient)& start,
const Standard_CString mess,
const Standard_CString orig)
{
thecheck.CCheck(themodel->Number(start))->AddWarning(mess,orig);
}
//=======================================================================
//function : AddFail
//purpose :
//=======================================================================
void IFSelect_ContextWrite::AddFail(const Handle(Standard_Transient)& start,
const Standard_CString mess,
const Standard_CString orig)
{
thecheck.CCheck(themodel->Number(start))->AddFail(mess,orig);
}
//=======================================================================
//function : CCheck
//purpose :
//=======================================================================
Handle(Interface_Check) IFSelect_ContextWrite::CCheck (const Standard_Integer num)
{
Handle(Interface_Check) ach = thecheck.CCheck(num);
if (num > 0 && num <= themodel->NbEntities()) ach->SetEntity(themodel->Value(num));
return ach;
}
//=======================================================================
//function : CCheck
//purpose :
//=======================================================================
Handle(Interface_Check) IFSelect_ContextWrite::CCheck(const Handle(Standard_Transient)& ent)
{
Standard_Integer num = themodel->Number(ent);
if (num == 0) num = -1; // force l enregistrement
Handle(Interface_Check) ach = thecheck.CCheck(num);
ach->SetEntity(ent);
return ach;
}
//=======================================================================
//function : CheckList
//purpose :
//=======================================================================
Interface_CheckIterator IFSelect_ContextWrite::CheckList () const
{
return thecheck;
}

View File

@@ -1,181 +0,0 @@
// Created on: 1996-01-26
// Created by: Christian CAILLET
// Copyright (c) 1996-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 _IFSelect_ContextWrite_HeaderFile
#define _IFSelect_ContextWrite_HeaderFile
#include <Standard.hxx>
#include <Standard_DefineAlloc.hxx>
#include <Standard_Handle.hxx>
#include <Interface_CheckIterator.hxx>
#include <Standard_Integer.hxx>
#include <Standard_CString.hxx>
class Interface_InterfaceModel;
class Interface_Protocol;
class IFSelect_AppliedModifiers;
class Interface_HGraph;
class IFSelect_GeneralModifier;
class Interface_Graph;
class Standard_Transient;
class Interface_Check;
//! This class gathers various information used by File Modifiers
//! apart from the writer object, which is specific of the norm
//! and of the physical format
//!
//! These information are controlled by an object AppliedModifiers
//! (if it is not defined, no modification is allowed on writing)
//!
//! Furthermore, in return, ContextModif can record Checks, either
//! one for all, or one for each Entity. It supports trace too.
class IFSelect_ContextWrite
{
public:
DEFINE_STANDARD_ALLOC
//! Prepares a ContextWrite with these information :
//! - the model which is to be written
//! - the protocol to be used
//! - the filename
//! - an object AppliedModifiers to work. It gives a list of
//! FileModifiers to be ran, and for each one it can give
//! a restricted list of entities (in the model), else all
//! the model is considered
Standard_EXPORT IFSelect_ContextWrite(const Handle(Interface_InterfaceModel)& model, const Handle(Interface_Protocol)& proto, const Handle(IFSelect_AppliedModifiers)& applieds, const Standard_CString filename);
//! Same as above but with an already computed Graph
Standard_EXPORT IFSelect_ContextWrite(const Handle(Interface_HGraph)& hgraph, const Handle(Interface_Protocol)& proto, const Handle(IFSelect_AppliedModifiers)& applieds, const Standard_CString filename);
//! Returns the Model
Standard_EXPORT Handle(Interface_InterfaceModel) Model() const;
//! Returns the Protocol;
Standard_EXPORT Handle(Interface_Protocol) Protocol() const;
//! Returns the File Name
Standard_EXPORT Standard_CString FileName() const;
//! Returns the object AppliedModifiers
Standard_EXPORT Handle(IFSelect_AppliedModifiers) AppliedModifiers() const;
//! Returns the Graph, either given when created, else created
//! the first time it is queried
Standard_EXPORT const Interface_Graph& Graph();
//! Returns the count of recorded File Modifiers
Standard_EXPORT Standard_Integer NbModifiers() const;
//! Sets active the File Modifier n0 <numod>
//! Then, it prepares the list of entities to consider, if any
//! Returns False if <numod> out of range
Standard_EXPORT Standard_Boolean SetModifier (const Standard_Integer numod);
//! Returns the currently active File Modifier. Cast to be done
//! Null if not properly set : must be test IsNull after casting
Standard_EXPORT Handle(IFSelect_GeneralModifier) FileModifier() const;
//! Returns True if no modifier is currently set
Standard_EXPORT Standard_Boolean IsForNone() const;
//! Returns True if the current modifier is to be applied to
//! the whole model. Else, a restricted list of selected entities
//! is defined, it can be exploited by the File Modifier
Standard_EXPORT Standard_Boolean IsForAll() const;
//! Returns the total count of selected entities
Standard_EXPORT Standard_Integer NbEntities() const;
//! Starts an iteration on selected items. It takes into account
//! IsForAll/IsForNone, by really iterating on all selected items.
Standard_EXPORT void Start();
//! Returns True until the iteration has finished
Standard_EXPORT Standard_Boolean More() const;
//! Advances the iteration
Standard_EXPORT void Next();
//! Returns the current selected entity in the model
Standard_EXPORT Handle(Standard_Transient) Value() const;
//! Adds a Check to the CheckList. If it is empty, nothing is done
//! If it concerns an Entity from the Model (by SetEntity)
//! to which another Check is attached, it is merged to it.
//! Else, it is added or merged as to GlobalCheck.
Standard_EXPORT void AddCheck (const Handle(Interface_Check)& check);
//! Adds a Warning Message for an Entity from the Model
//! If <start> is not an Entity from the model (e.g. the
//! model itself) this message is added to Global Check.
Standard_EXPORT void AddWarning (const Handle(Standard_Transient)& start, const Standard_CString mess, const Standard_CString orig = "");
//! Adds a Fail Message for an Entity from the Model
//! If <start> is not an Entity from the model (e.g. the
//! model itself) this message is added to Global Check.
Standard_EXPORT void AddFail (const Handle(Standard_Transient)& start, const Standard_CString mess, const Standard_CString orig = "");
//! Returns a Check given an Entity number (in the Model)
//! by default a Global Check. Creates it the first time.
//! It can then be acknowledged on the spot, in condition that the
//! caller works by reference ("Interface_Check& check = ...")
Standard_EXPORT Handle(Interface_Check) CCheck (const Standard_Integer num = 0);
//! Returns a Check attached to an Entity from the Model
//! It can then be acknowledged on the spot, in condition that the
//! caller works by reference ("Interface_Check& check = ...")
Standard_EXPORT Handle(Interface_Check) CCheck (const Handle(Standard_Transient)& start);
//! Returns the complete CheckList
Standard_EXPORT Interface_CheckIterator CheckList() const;
protected:
private:
Handle(Interface_InterfaceModel) themodel;
Handle(Interface_Protocol) theproto;
TCollection_AsciiString thefile;
Handle(IFSelect_AppliedModifiers) theapply;
Handle(Interface_HGraph) thehgraf;
Interface_CheckIterator thecheck;
Standard_Integer thenumod;
Standard_Integer thenbent;
Standard_Integer thecurr;
Handle(IFSelect_GeneralModifier) themodif;
};
#endif // _IFSelect_ContextWrite_HeaderFile

View File

@@ -1,41 +0,0 @@
// 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 <IFGraph_SubPartsIterator.hxx>
#include <IFSelect_DispGlobal.hxx>
#include <IFSelect_Selection.hxx>
#include <Interface_EntityIterator.hxx>
#include <Interface_Graph.hxx>
#include <Standard_Type.hxx>
#include <TCollection_AsciiString.hxx>
IMPLEMENT_STANDARD_RTTIEXT(IFSelect_DispGlobal,IFSelect_Dispatch)
// Genere un seul paquet avec la sortie finale
IFSelect_DispGlobal::IFSelect_DispGlobal () { }
TCollection_AsciiString IFSelect_DispGlobal::Label () const
{ return TCollection_AsciiString ("One File for All Input"); }
Standard_Boolean IFSelect_DispGlobal::LimitedMax
(const Standard_Integer /* nbent */, Standard_Integer& pcount) const
{ pcount = 1; return Standard_True; }
// 1 packet ( a partir de UniqueResult)
void IFSelect_DispGlobal::Packets
(const Interface_Graph& G, IFGraph_SubPartsIterator& packs) const
{
packs.AddPart();
packs.GetFromIter(FinalSelection()->UniqueResult(G));
}

View File

@@ -1,78 +0,0 @@
// Created on: 1992-11-17
// Created by: Christian CAILLET
// Copyright (c) 1992-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 _IFSelect_DispGlobal_HeaderFile
#define _IFSelect_DispGlobal_HeaderFile
#include <Standard.hxx>
#include <Standard_Type.hxx>
#include <IFSelect_Dispatch.hxx>
#include <Standard_Integer.hxx>
class TCollection_AsciiString;
class Interface_Graph;
class IFGraph_SubPartsIterator;
class IFSelect_DispGlobal;
DEFINE_STANDARD_HANDLE(IFSelect_DispGlobal, IFSelect_Dispatch)
//! A DispGlobal gathers all the input Entities into only one
//! global Packet
class IFSelect_DispGlobal : public IFSelect_Dispatch
{
public:
//! Creates a DispGlobal
Standard_EXPORT IFSelect_DispGlobal();
//! Returns as Label, "One File for all Input"
Standard_EXPORT TCollection_AsciiString Label() const Standard_OVERRIDE;
//! Returns True : maximum equates 1
Standard_EXPORT virtual Standard_Boolean LimitedMax (const Standard_Integer nbent, Standard_Integer& max) const Standard_OVERRIDE;
//! Computes the list of produced Packets. It is made of only ONE
//! Packet, which gets the RootResult from the Final Selection.
//! Remark : the inherited exception raising is never activated.
Standard_EXPORT void Packets (const Interface_Graph& G, IFGraph_SubPartsIterator& packs) const Standard_OVERRIDE;
DEFINE_STANDARD_RTTIEXT(IFSelect_DispGlobal,IFSelect_Dispatch)
protected:
private:
};
#endif // _IFSelect_DispGlobal_HeaderFile

View File

@@ -1,80 +0,0 @@
// 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 <IFGraph_SCRoots.hxx>
#include <IFGraph_SubPartsIterator.hxx>
#include <IFSelect_DispPerCount.hxx>
#include <IFSelect_IntParam.hxx>
#include <IFSelect_Selection.hxx>
#include <Interface_EntityIterator.hxx>
#include <Interface_Graph.hxx>
#include <Interface_InterfaceModel.hxx>
#include <Standard_Type.hxx>
#include <TCollection_AsciiString.hxx>
IMPLEMENT_STANDARD_RTTIEXT(IFSelect_DispPerCount,IFSelect_Dispatch)
IFSelect_DispPerCount::IFSelect_DispPerCount () { }
Handle(IFSelect_IntParam) IFSelect_DispPerCount::Count () const
{ return thecount; }
void IFSelect_DispPerCount::SetCount
(const Handle(IFSelect_IntParam)& pcount)
{ thecount = pcount; }
Standard_Integer IFSelect_DispPerCount::CountValue () const
{
Standard_Integer pcount = 0;
if (!thecount.IsNull()) pcount = thecount->Value();
if (pcount <= 0) pcount = 1; // option prise par defaut
return pcount;
}
TCollection_AsciiString IFSelect_DispPerCount::Label () const
{
TCollection_AsciiString lab(CountValue());
lab.Insert(1,"One File per ");
lab.AssignCat(" Entities");
return lab;
}
Standard_Boolean IFSelect_DispPerCount::LimitedMax
(const Standard_Integer nbent, Standard_Integer& pcount) const
{
pcount = 1 + nbent / CountValue();
return Standard_True;
}
void IFSelect_DispPerCount::Packets
(const Interface_Graph& G, IFGraph_SubPartsIterator& packs) const
{
// Ressemble a DispPerOne, mais fait un AddPart tous les "count" racines
Standard_Integer pcount = CountValue();
IFGraph_SCRoots roots(G,Standard_False);
roots.SetLoad();
roots.GetFromIter(FinalSelection()->UniqueResult(G));
// SCRoots a initie la resolution : decoupage en StrongComponants + selection
// des racines. Un paquet correspond des lors a <count> racines
// Donc, il faut iterer sur les Parts de roots et les prendre par <count>
Standard_Integer i = 0;
for (roots.Start(); roots.More(); roots.Next()) {
if (i == 0) packs.AddPart();
i ++; if (i >= pcount) i = 0; // regroupement selon "count"
packs.GetFromIter(roots.Entities());
}
}

View File

@@ -1,92 +0,0 @@
// Created on: 1992-11-17
// Created by: Christian CAILLET
// Copyright (c) 1992-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 _IFSelect_DispPerCount_HeaderFile
#define _IFSelect_DispPerCount_HeaderFile
#include <Standard.hxx>
#include <Standard_Type.hxx>
#include <IFSelect_Dispatch.hxx>
#include <Standard_Integer.hxx>
class IFSelect_IntParam;
class TCollection_AsciiString;
class Interface_Graph;
class IFGraph_SubPartsIterator;
class IFSelect_DispPerCount;
DEFINE_STANDARD_HANDLE(IFSelect_DispPerCount, IFSelect_Dispatch)
//! A DispPerCount gathers all the input Entities into one or
//! several Packets, each containing a defined count of Entity
//! This count is a Parameter of the DispPerCount, given as an
//! IntParam, thus allowing external control of its Value
class IFSelect_DispPerCount : public IFSelect_Dispatch
{
public:
//! Creates a DispPerCount with no Count (default value 1)
Standard_EXPORT IFSelect_DispPerCount();
//! Returns the Count Parameter used for splitting
Standard_EXPORT Handle(IFSelect_IntParam) Count() const;
//! Sets a new Parameter for Count
Standard_EXPORT void SetCount (const Handle(IFSelect_IntParam)& count);
//! Returns the effective value of the count parameter
//! (if Count Parameter not Set or value not positive, returns 1)
Standard_EXPORT Standard_Integer CountValue() const;
//! Returns as Label, "One File per <count> Input Entities"
Standard_EXPORT TCollection_AsciiString Label() const Standard_OVERRIDE;
//! Returns True, maximum count is given as <nbent>
Standard_EXPORT virtual Standard_Boolean LimitedMax (const Standard_Integer nbent, Standard_Integer& max) const Standard_OVERRIDE;
//! Computes the list of produced Packets. It defines Packets in
//! order to have at most <Count> Entities per Packet, Entities
//! are given by RootResult from the Final Selection.
Standard_EXPORT void Packets (const Interface_Graph& G, IFGraph_SubPartsIterator& packs) const Standard_OVERRIDE;
DEFINE_STANDARD_RTTIEXT(IFSelect_DispPerCount,IFSelect_Dispatch)
protected:
private:
Handle(IFSelect_IntParam) thecount;
};
#endif // _IFSelect_DispPerCount_HeaderFile

View File

@@ -1,83 +0,0 @@
// 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 <IFGraph_SCRoots.hxx>
#include <IFGraph_SubPartsIterator.hxx>
#include <IFSelect_DispPerFiles.hxx>
#include <IFSelect_IntParam.hxx>
#include <IFSelect_Selection.hxx>
#include <Interface_EntityIterator.hxx>
#include <Interface_Graph.hxx>
#include <Interface_InterfaceModel.hxx>
#include <Standard_Type.hxx>
#include <TCollection_AsciiString.hxx>
IMPLEMENT_STANDARD_RTTIEXT(IFSelect_DispPerFiles,IFSelect_Dispatch)
IFSelect_DispPerFiles::IFSelect_DispPerFiles () { }
Handle(IFSelect_IntParam) IFSelect_DispPerFiles::Count () const
{ return thecount; }
void IFSelect_DispPerFiles::SetCount
(const Handle(IFSelect_IntParam)& pcount)
{ thecount = pcount; }
Standard_Integer IFSelect_DispPerFiles::CountValue () const
{
Standard_Integer pcount = 0;
if (!thecount.IsNull()) pcount = thecount->Value();
if (pcount <= 0) pcount = 1; // option prise par defaut
return pcount;
}
TCollection_AsciiString IFSelect_DispPerFiles::Label () const
{
TCollection_AsciiString lab(CountValue());
lab.Insert(1,"Maximum ");
lab.AssignCat(" Files");
return lab;
}
Standard_Boolean IFSelect_DispPerFiles::LimitedMax
(const Standard_Integer /* nbent */, Standard_Integer& pcount) const
{
pcount = CountValue();
return Standard_True;
}
void IFSelect_DispPerFiles::Packets
(const Interface_Graph& G, IFGraph_SubPartsIterator& packs) const
{
// Ressemble a DispPerOne, mais fait "count" AddPart racines
Standard_Integer pcount = CountValue();
IFGraph_SCRoots roots(G,Standard_False);
roots.SetLoad();
roots.GetFromIter(FinalSelection()->UniqueResult(G));
// SCRoots a initie la resolution : decoupage en StrongComponants + selection
// des racines. Un paquet correspond des lors a <count> racines
// Donc, il faut iterer sur les Parts de roots et les prendre par <count>
roots.Start(); // Start fait Evaluate specifique
Standard_Integer nb = roots.NbParts();
if (pcount > 0) pcount = (nb-1) / pcount +1; // par packet
Standard_Integer i = 0;
for (; roots.More(); roots.Next()) { // Start deja fait
if (i == 0) packs.AddPart();
i ++; if (i >= pcount) i = 0; // regroupement selon "count"
packs.GetFromIter(roots.Entities());
}
}

View File

@@ -1,96 +0,0 @@
// Created on: 1994-12-21
// Created by: Christian CAILLET
// Copyright (c) 1994-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 _IFSelect_DispPerFiles_HeaderFile
#define _IFSelect_DispPerFiles_HeaderFile
#include <Standard.hxx>
#include <Standard_Type.hxx>
#include <IFSelect_Dispatch.hxx>
#include <Standard_Integer.hxx>
class IFSelect_IntParam;
class TCollection_AsciiString;
class Interface_Graph;
class IFGraph_SubPartsIterator;
class IFSelect_DispPerFiles;
DEFINE_STANDARD_HANDLE(IFSelect_DispPerFiles, IFSelect_Dispatch)
//! A DispPerFiles produces a determined count of Packets from the
//! input Entities. It divides, as equally as possible, the input
//! list into a count of files. This count is the parameter of the
//! DispPerFiles. If the input list has less than this count, of
//! course there will be one packet per input entity.
//! This count is a Parameter of the DispPerFiles, given as an
//! IntParam, thus allowing external control of its Value
class IFSelect_DispPerFiles : public IFSelect_Dispatch
{
public:
//! Creates a DispPerFiles with no Count (default value 1 file)
Standard_EXPORT IFSelect_DispPerFiles();
//! Returns the Count Parameter used for splitting
Standard_EXPORT Handle(IFSelect_IntParam) Count() const;
//! Sets a new Parameter for Count
Standard_EXPORT void SetCount (const Handle(IFSelect_IntParam)& count);
//! Returns the effective value of the count parameter
//! (if Count Parameter not Set or value not positive, returns 1)
Standard_EXPORT Standard_Integer CountValue() const;
//! Returns as Label, "Maximum <count> Files"
Standard_EXPORT TCollection_AsciiString Label() const Standard_OVERRIDE;
//! Returns True, maximum count is given as CountValue
Standard_EXPORT virtual Standard_Boolean LimitedMax (const Standard_Integer nbent, Standard_Integer& max) const Standard_OVERRIDE;
//! Computes the list of produced Packets. It defines Packets in
//! order to have <Count> Packets, except if the input count of
//! Entities is lower. Entities are given by RootResult from the
//! Final Selection.
Standard_EXPORT void Packets (const Interface_Graph& G, IFGraph_SubPartsIterator& packs) const Standard_OVERRIDE;
DEFINE_STANDARD_RTTIEXT(IFSelect_DispPerFiles,IFSelect_Dispatch)
protected:
private:
Handle(IFSelect_IntParam) thecount;
};
#endif // _IFSelect_DispPerFiles_HeaderFile

View File

@@ -1,47 +0,0 @@
// 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 <IFGraph_SCRoots.hxx>
#include <IFGraph_SubPartsIterator.hxx>
#include <IFSelect_DispPerOne.hxx>
#include <IFSelect_Selection.hxx>
#include <Interface_EntityIterator.hxx>
#include <Interface_Graph.hxx>
#include <Interface_InterfaceModel.hxx>
#include <Standard_Type.hxx>
#include <TCollection_AsciiString.hxx>
IMPLEMENT_STANDARD_RTTIEXT(IFSelect_DispPerOne,IFSelect_Dispatch)
// Genere un paquet par racine (strong comp.) locale a la liste transmise
IFSelect_DispPerOne::IFSelect_DispPerOne () { }
TCollection_AsciiString IFSelect_DispPerOne::Label () const
{ return TCollection_AsciiString ("One File per Input Entity"); }
Standard_Boolean IFSelect_DispPerOne::LimitedMax
(const Standard_Integer nbent, Standard_Integer& pcount) const
{ pcount = nbent; return Standard_True; }
void IFSelect_DispPerOne::Packets
(const Interface_Graph& G, IFGraph_SubPartsIterator& packs) const
{
IFGraph_SCRoots packsc(G,Standard_False); // OK pour SubPartsIterator
packsc.SetLoad();
packsc.GetFromIter(FinalSelection()->UniqueResult(G));
// SCRoots a initie la resolution : decoupage en StrongComponants + selection
// des Racines. Chaque Racine correspond a un Packet. CQFD
packs.GetParts(packsc);
}

View File

@@ -1,78 +0,0 @@
// Created on: 1992-11-17
// Created by: Christian CAILLET
// Copyright (c) 1992-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 _IFSelect_DispPerOne_HeaderFile
#define _IFSelect_DispPerOne_HeaderFile
#include <Standard.hxx>
#include <Standard_Type.hxx>
#include <IFSelect_Dispatch.hxx>
#include <Standard_Integer.hxx>
class TCollection_AsciiString;
class Interface_Graph;
class IFGraph_SubPartsIterator;
class IFSelect_DispPerOne;
DEFINE_STANDARD_HANDLE(IFSelect_DispPerOne, IFSelect_Dispatch)
//! A DispPerOne gathers all the input Entities into as many
//! Packets as there Root Entities from the Final Selection,
//! that is, one Packet per Entity
class IFSelect_DispPerOne : public IFSelect_Dispatch
{
public:
//! Creates a DispPerOne
Standard_EXPORT IFSelect_DispPerOne();
//! Returns as Label, "One File per Input Entity"
Standard_EXPORT TCollection_AsciiString Label() const Standard_OVERRIDE;
//! Returns True, maximum limit is given as <nbent>
Standard_EXPORT virtual Standard_Boolean LimitedMax (const Standard_Integer nbent, Standard_Integer& max) const Standard_OVERRIDE;
//! Returns the list of produced Packets. It defines one Packet
//! per Entity given by RootResult from the Final Selection.
Standard_EXPORT void Packets (const Interface_Graph& G, IFGraph_SubPartsIterator& packs) const Standard_OVERRIDE;
DEFINE_STANDARD_RTTIEXT(IFSelect_DispPerOne,IFSelect_Dispatch)
protected:
private:
};
#endif // _IFSelect_DispPerOne_HeaderFile

View File

@@ -1,80 +0,0 @@
// 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 <IFGraph_SubPartsIterator.hxx>
#include <IFSelect_DispPerSignature.hxx>
#include <IFSelect_Selection.hxx>
#include <IFSelect_SignCounter.hxx>
#include <Interface_EntityIterator.hxx>
#include <Interface_Graph.hxx>
#include <Standard_Type.hxx>
#include <TCollection_AsciiString.hxx>
#include <TCollection_HAsciiString.hxx>
#include <TColStd_HSequenceOfHAsciiString.hxx>
#include <TColStd_HSequenceOfTransient.hxx>
#include <stdio.h>
IMPLEMENT_STANDARD_RTTIEXT(IFSelect_DispPerSignature,IFSelect_Dispatch)
IFSelect_DispPerSignature::IFSelect_DispPerSignature () { }
Handle(IFSelect_SignCounter) IFSelect_DispPerSignature::SignCounter () const
{ return thesign; }
void IFSelect_DispPerSignature::SetSignCounter
(const Handle(IFSelect_SignCounter)& sign)
{ thesign = sign; thesign->SetList (Standard_True); }
Standard_CString IFSelect_DispPerSignature::SignName () const
{ return (Standard_CString ) (thesign.IsNull() ? "???" : thesign->Name()); }
TCollection_AsciiString IFSelect_DispPerSignature::Label () const
{
char lab[50];
sprintf (lab,"One File per Signature %s",SignName());
return TCollection_AsciiString(lab);
}
Standard_Boolean IFSelect_DispPerSignature::LimitedMax
(const Standard_Integer nbent, Standard_Integer& max) const
{
max = nbent;
return Standard_True;
}
void IFSelect_DispPerSignature::Packets
(const Interface_Graph& G, IFGraph_SubPartsIterator& packs) const
{
if (thesign.IsNull()) {
packs.AddPart();
packs.GetFromIter (FinalSelection()->RootResult(G));
return;
}
thesign->Clear();
thesign->AddList (FinalSelection()->RootResult(G).Content(),G.Model());
Handle(TColStd_HSequenceOfHAsciiString) list = thesign->List();
Standard_Integer i,nb,is,nbs = list->Length();
Handle(TCollection_HAsciiString) asign;
Handle(TColStd_HSequenceOfTransient) ents;
for (is = 1; is <= nbs; is ++) {
asign = list->Value(is);
ents = thesign->Entities (asign->ToCString());
if (ents.IsNull()) continue;
packs.AddPart();
nb = ents->Length();
for (i = 1; i <= nb; i ++)
packs.GetFromEntity (ents->Value(i),Standard_False);
}
}

View File

@@ -1,92 +0,0 @@
// Created on: 1994-12-21
// Created by: Christian CAILLET
// Copyright (c) 1994-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 _IFSelect_DispPerSignature_HeaderFile
#define _IFSelect_DispPerSignature_HeaderFile
#include <Standard.hxx>
#include <Standard_Type.hxx>
#include <IFSelect_Dispatch.hxx>
#include <Standard_Integer.hxx>
class IFSelect_SignCounter;
class TCollection_AsciiString;
class Interface_Graph;
class IFGraph_SubPartsIterator;
class IFSelect_DispPerSignature;
DEFINE_STANDARD_HANDLE(IFSelect_DispPerSignature, IFSelect_Dispatch)
//! A DispPerSignature sorts input Entities according to a
//! Signature : it works with a SignCounter to do this.
class IFSelect_DispPerSignature : public IFSelect_Dispatch
{
public:
//! Creates a DispPerSignature with no SignCounter (by default,
//! produces only one packet)
Standard_EXPORT IFSelect_DispPerSignature();
//! Returns the SignCounter used for splitting
Standard_EXPORT Handle(IFSelect_SignCounter) SignCounter() const;
//! Sets a SignCounter for sort
//! Remark : it is set to record lists of entities, not only counts
Standard_EXPORT void SetSignCounter (const Handle(IFSelect_SignCounter)& sign);
//! Returns the name of the SignCounter, which caracterises the
//! sorting criterium for this Dispatch
Standard_EXPORT Standard_CString SignName() const;
//! Returns as Label, "One File per Signature <name>"
Standard_EXPORT TCollection_AsciiString Label() const Standard_OVERRIDE;
//! Returns True, maximum count is given as <nbent>
Standard_EXPORT virtual Standard_Boolean LimitedMax (const Standard_Integer nbent, Standard_Integer& max) const Standard_OVERRIDE;
//! Computes the list of produced Packets. It defines Packets from
//! the SignCounter, which sirts the input Entities per Signature
//! (specific of the SignCounter).
Standard_EXPORT void Packets (const Interface_Graph& G, IFGraph_SubPartsIterator& packs) const Standard_OVERRIDE;
DEFINE_STANDARD_RTTIEXT(IFSelect_DispPerSignature,IFSelect_Dispatch)
protected:
private:
Handle(IFSelect_SignCounter) thesign;
};
#endif // _IFSelect_DispPerSignature_HeaderFile

View File

@@ -1,83 +0,0 @@
// 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 <IFGraph_Compare.hxx>
#include <IFGraph_SubPartsIterator.hxx>
#include <IFSelect_Dispatch.hxx>
#include <IFSelect_SelectionIterator.hxx>
#include <Interface_EntityIterator.hxx>
#include <Interface_Graph.hxx>
#include <Standard_Type.hxx>
#include <TCollection_AsciiString.hxx>
#include <TCollection_HAsciiString.hxx>
IMPLEMENT_STANDARD_RTTIEXT(IFSelect_Dispatch,Standard_Transient)
void IFSelect_Dispatch::SetRootName
(const Handle(TCollection_HAsciiString)& name)
{
thename = name;
}
Standard_Boolean IFSelect_Dispatch::HasRootName () const
{ return (!thename.IsNull()); }
const Handle(TCollection_HAsciiString)& IFSelect_Dispatch::RootName () const
{ return thename; }
void IFSelect_Dispatch::SetFinalSelection
(const Handle(IFSelect_Selection)& sel)
{ thefinal = sel; }
Handle(IFSelect_Selection) IFSelect_Dispatch::FinalSelection () const
{ return thefinal; }
IFSelect_SelectionIterator IFSelect_Dispatch::Selections () const
{
IFSelect_SelectionIterator iter;
iter.AddItem(thefinal);
for(; iter.More(); iter.Next()) {
iter.Value()->FillIterator(iter); // Iterateur qui se court apres
}
return iter;
}
Standard_Boolean IFSelect_Dispatch::CanHaveRemainder () const
{ return Standard_False; }
Standard_Boolean IFSelect_Dispatch::LimitedMax
(const Standard_Integer , Standard_Integer& max) const
{ max = 0; return Standard_False; }
Interface_EntityIterator IFSelect_Dispatch::GetEntities
(const Interface_Graph& G) const
{ return thefinal->UniqueResult(G); }
Interface_EntityIterator IFSelect_Dispatch::Packeted
(const Interface_Graph& G) const
{
Interface_EntityIterator total = GetEntities(G);
Interface_EntityIterator remain = Remainder(G);
if (remain.NbEntities() == 0) return total;
// sinon, faire la difference !
IFGraph_Compare GC(G);
GC.GetFromIter (total, Standard_True);
GC.GetFromIter (remain,Standard_False);
return GC.FirstOnly();
}
Interface_EntityIterator IFSelect_Dispatch::Remainder
(const Interface_Graph& ) const
{ Interface_EntityIterator iter; return iter; } // par defaut vide

View File

@@ -1,151 +0,0 @@
// Created on: 1992-11-17
// Created by: Christian CAILLET
// Copyright (c) 1992-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 _IFSelect_Dispatch_HeaderFile
#define _IFSelect_Dispatch_HeaderFile
#include <Standard.hxx>
#include <Standard_Type.hxx>
#include <Standard_Transient.hxx>
#include <Standard_Integer.hxx>
class TCollection_HAsciiString;
class IFSelect_Selection;
class IFSelect_SelectionIterator;
class TCollection_AsciiString;
class Interface_EntityIterator;
class Interface_Graph;
class IFGraph_SubPartsIterator;
class IFSelect_Dispatch;
DEFINE_STANDARD_HANDLE(IFSelect_Dispatch, Standard_Transient)
//! This class allows to describe how a set of Entities has to be
//! dispatched into resulting Packets : a Packet is a sub-set of
//! the initial set of entities.
//!
//! Thus, it can generate zero, one, or more Packets according
//! input set and criterium of dispatching. And it can let apart
//! some entities : it is the Remainder, which can be recovered
//! by a specific Selection (RemainderFromDispatch).
//!
//! Depending of sub-classes, a Dispatch can potentially generate
//! a limited or not count of packet, and a remainder or none.
//!
//! The input set is read from a specified Selection, attached to
//! the Dispatch : the Final Selection of the Dispatch. The input
//! is the Unique Root Entities list of the Final Selection
class IFSelect_Dispatch : public Standard_Transient
{
public:
//! Sets a Root Name as an HAsciiString
//! To reset it, give a Null Handle (then, a ShareOut will have
//! to define the Default Root Name)
Standard_EXPORT void SetRootName (const Handle(TCollection_HAsciiString)& name);
//! Returns True if a specific Root Name has been set
//! (else, the Default Root Name has to be used)
Standard_EXPORT Standard_Boolean HasRootName() const;
//! Returns the Root Name for files produced by this dispatch
//! It is empty if it has not been set or if it has been reset
Standard_EXPORT const Handle(TCollection_HAsciiString)& RootName() const;
//! Stores (or Changes) the Final Selection for a Dispatch
Standard_EXPORT void SetFinalSelection (const Handle(IFSelect_Selection)& sel);
//! Returns the Final Selection of a Dispatch
//! we 'd like : C++ : return const &
Standard_EXPORT Handle(IFSelect_Selection) FinalSelection() const;
//! Returns the complete list of source Selections (starting
//! from FinalSelection)
Standard_EXPORT IFSelect_SelectionIterator Selections() const;
//! Returns True if a Dispatch can have a Remainder, i.e. if its
//! criterium can let entities apart. It is a potential answer,
//! remainder can be empty at run-time even if answer is True.
//! (to attach a RemainderFromDispatch Selection is not allowed if
//! answer is True).
//! Default answer given here is False (can be redefined)
Standard_EXPORT virtual Standard_Boolean CanHaveRemainder() const;
//! Returns True if a Dispatch generates a count of Packets always
//! less than or equal to a maximum value : it can be computed
//! from the total count of Entities to be dispatched : <nbent>.
//! If answer is False, no limited maximum is expected for account
//! If answer is True, expected maximum is given in argument <max>
//! Default answer given here is False (can be redefined)
Standard_EXPORT virtual Standard_Boolean LimitedMax (const Standard_Integer nbent, Standard_Integer& max) const;
//! Returns a text which defines the way a Dispatch produces
//! packets (which will become files) from its Input
Standard_EXPORT virtual TCollection_AsciiString Label() const = 0;
//! Gets Unique Root Entities from the Final Selection, given an
//! input Graph
//! This the starting step for an Evaluation (Packets - Remainder)
Standard_EXPORT Interface_EntityIterator GetEntities (const Interface_Graph& G) const;
//! Returns the list of produced Packets into argument <pack>.
//! Each Packet corresponds to a Part, the Entities listed are the
//! Roots given by the Selection. Input is given as a Graph.
//! Thus, to create a file from a packet, it suffices to take the
//! entities listed in a Part of Packets (that is, a Packet)
//! without worrying about Shared entities
//! This method can raise an Exception if data are not coherent
Standard_EXPORT virtual void Packets (const Interface_Graph& G, IFGraph_SubPartsIterator& packs) const = 0;
//! Returns the list of all Input Entities (see GetEntities) which
//! are put in a Packet. That is, Entities listed in GetEntities
//! but not in Remainder (see below). Input is given as a Graph.
Standard_EXPORT Interface_EntityIterator Packeted (const Interface_Graph& G) const;
//! Returns Remainder which is a set of Entities. Can be empty.
//! Default evaluation is empty (has to be redefined if
//! CanHaveRemainder is redefined to return True).
Standard_EXPORT virtual Interface_EntityIterator Remainder (const Interface_Graph& G) const;
DEFINE_STANDARD_RTTIEXT(IFSelect_Dispatch,Standard_Transient)
protected:
private:
Handle(TCollection_HAsciiString) thename;
Handle(IFSelect_Selection) thefinal;
};
#endif // _IFSelect_Dispatch_HeaderFile

View File

@@ -1,546 +0,0 @@
// 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_EditForm.hxx>
#include <IFSelect_Editor.hxx>
#include <IFSelect_ListEditor.hxx>
#include <Interface_InterfaceModel.hxx>
#include <Interface_MSG.hxx>
#include <Interface_TypedValue.hxx>
#include <Standard_Transient.hxx>
#include <Standard_Type.hxx>
#include <TCollection_HAsciiString.hxx>
#include <TColStd_HSequenceOfHAsciiString.hxx>
IMPLEMENT_STANDARD_RTTIEXT(IFSelect_EditForm,Standard_Transient)
IFSelect_EditForm::IFSelect_EditForm
(const Handle(IFSelect_Editor)& editor,
const Standard_Boolean readonly, const Standard_Boolean undoable,
const Standard_CString label)
: thecomplete (Standard_True) ,
theloaded (Standard_False) ,
thekeepst (Standard_False) ,
thelabel (label) ,
thenums (0,1) ,
theorigs (0, (undoable ? editor->NbValues() : 0) ) ,
themodifs (0, (readonly ? 0 : editor->NbValues()) ) ,
thestatus (0, (readonly ? 0 : editor->NbValues()) ) ,
theeditor (editor) ,
thetouched (0) { }
IFSelect_EditForm::IFSelect_EditForm
(const Handle(IFSelect_Editor)& editor,
const TColStd_SequenceOfInteger& nums,
const Standard_Boolean readonly, const Standard_Boolean undoable,
const Standard_CString label)
: thecomplete (Standard_False) ,
theloaded (Standard_False) ,
thekeepst (Standard_False) ,
thelabel (label) ,
thenums (0,nums.Length()) ,
theorigs (0, (undoable ? nums.Length() : 0) ) ,
themodifs (0, (readonly ? 0 : nums.Length()) ) ,
thestatus (0, (readonly ? 0 : nums.Length()) ) ,
theeditor (editor) ,
thetouched (0)
{
Standard_Integer i,nb = nums.Length();
for (i = 1; i <= nb; i ++) thenums.SetValue (i,nums.Value(i));
}
Standard_Boolean& IFSelect_EditForm::EditKeepStatus ()
{ return thekeepst; }
Standard_CString IFSelect_EditForm::Label () const
{ return thelabel.ToCString(); }
Standard_Boolean IFSelect_EditForm::IsLoaded () const
{ return theloaded; }
void IFSelect_EditForm::ClearData ()
{ theent.Nullify(); themodel.Nullify(); theloaded = Standard_False; }
void IFSelect_EditForm::SetData
(const Handle(Standard_Transient)& ent,
const Handle(Interface_InterfaceModel)& model)
{ theent = ent; themodel = model; }
void IFSelect_EditForm::SetEntity
(const Handle(Standard_Transient)& ent)
{ theent = ent; }
void IFSelect_EditForm::SetModel
(const Handle(Interface_InterfaceModel)& model)
{ themodel = model; }
Handle(Standard_Transient) IFSelect_EditForm::Entity () const
{ return theent; }
Handle(Interface_InterfaceModel) IFSelect_EditForm::Model () const
{ return themodel; }
Handle(IFSelect_Editor) IFSelect_EditForm::Editor () const
{ return theeditor; }
Standard_Boolean IFSelect_EditForm::IsComplete () const
{ return thecomplete; }
Standard_Integer IFSelect_EditForm::NbValues
(const Standard_Boolean editable) const
{
if (!editable || thecomplete) return theeditor->NbValues();
return thenums.Upper();
}
Standard_Integer IFSelect_EditForm::NumberFromRank
(const Standard_Integer rank) const
{
if (thecomplete) return rank;
if (rank < 1 || rank > thenums.Upper()) return 0;
return thenums.Value(rank);
}
Standard_Integer IFSelect_EditForm::RankFromNumber
(const Standard_Integer num) const
{
if (thecomplete) return num;
Standard_Integer i, n = thenums.Upper();
for (i = 1; i <= n; i ++) {
if (thenums.Value(i) == num) return i;
}
return 0;
}
Standard_Integer IFSelect_EditForm::NameNumber
(const Standard_CString name) const
{
Standard_Integer res = theeditor->NameNumber(name);
if (thecomplete || res == 0) return res;
// Sinon, chercher res dans thenums
Standard_Integer i, nb = thenums.Length();
for (i = 1; i <= nb; i ++) {
if (res == thenums.Value(i)) return res;
}
return -res;
}
Standard_Integer IFSelect_EditForm::NameRank
(const Standard_CString name) const
{
Standard_Integer res = theeditor->NameNumber(name);
if (thecomplete || res == 0) return res;
// Sinon, chercher res dans thenums
Standard_Integer i, nb = thenums.Length();
for (i = 1; i <= nb; i ++) {
if (res == thenums.Value(i)) return i;
}
return 0;
}
void IFSelect_EditForm::LoadDefault ()
{
theloaded = Standard_True;
thetouched = 0;
Standard_Integer i,nb = theorigs.Upper();
if (nb == 0) return;
for (i = 1; i <= nb; i ++) {
Standard_Integer num = NumberFromRank(i);
if (num == 0) continue;
Handle(TCollection_HAsciiString) str = theeditor->StringValue (this,num);
theorigs.SetValue (i,str);
}
}
Standard_Boolean IFSelect_EditForm::LoadData
(const Handle(Standard_Transient)& ent,
const Handle(Interface_InterfaceModel)& model)
{
thetouched = 0;
if (!theeditor->Load (this,ent,model)) return Standard_False;
SetData (ent,model);
theloaded = Standard_True;
return Standard_True;
}
Standard_Boolean IFSelect_EditForm::LoadEntity
(const Handle(Standard_Transient)& ent)
{
thetouched = 0;
Handle(Interface_InterfaceModel) model;
if (!theeditor->Load (this,ent,model)) return Standard_False;
SetEntity (ent);
theloaded = Standard_True;
return Standard_True;
}
Standard_Boolean IFSelect_EditForm::LoadModel
(const Handle(Interface_InterfaceModel)& model)
{
thetouched = 0;
Handle(Standard_Transient) ent;
if (!theeditor->Load (this,ent,model)) return Standard_False;
SetData (ent,model);
theloaded = Standard_True;
return Standard_True;
}
Standard_Boolean IFSelect_EditForm::LoadData ()
{
thetouched = 0;
Handle(Interface_InterfaceModel) model;
Handle(Standard_Transient) ent;
if (!theeditor->Load (this,ent,model)) return Standard_False;
theloaded = Standard_True;
return Standard_True;
}
// ######## VALUES ########
Handle(IFSelect_ListEditor) IFSelect_EditForm::ListEditor
(const Standard_Integer num) const
{
Standard_Integer n = RankFromNumber(num);
Handle(IFSelect_ListEditor) led;
if (n <= 0 || n > theorigs.Upper()) return led;
if (!theeditor->IsList(n)) return led;
led = theeditor->ListEditor (num);
Handle(TColStd_HSequenceOfHAsciiString) lis = theeditor->ListValue(this,num);
led->LoadModel (themodel);
led->LoadValues (lis);
return led;
}
void IFSelect_EditForm::LoadValue
(const Standard_Integer num, const Handle(TCollection_HAsciiString)& val)
{
Standard_Integer n = RankFromNumber(num);
if (n <= 0 || n > theorigs.Upper()) return;
theorigs.SetValue (n,val);
}
void IFSelect_EditForm::LoadList
(const Standard_Integer num, const Handle(TColStd_HSequenceOfHAsciiString)& list)
{
Standard_Integer n = RankFromNumber(num);
if (n <= 0 || n > theorigs.Upper()) return;
theorigs.SetValue (n,list);
}
Handle(TCollection_HAsciiString) IFSelect_EditForm::OriginalValue
(const Standard_Integer num) const
{
Standard_Integer n = RankFromNumber(num);
Handle(TCollection_HAsciiString) val;
if (theorigs.Upper() == 0) return theeditor->StringValue (this,num);
else return Handle(TCollection_HAsciiString)::DownCast(theorigs.Value(n));
}
Handle(TColStd_HSequenceOfHAsciiString) IFSelect_EditForm::OriginalList
(const Standard_Integer num) const
{
Standard_Integer n = RankFromNumber(num);
Handle(TColStd_HSequenceOfHAsciiString) list;
if (theorigs.Upper() == 0) return theeditor->ListValue (this,num);
else return Handle(TColStd_HSequenceOfHAsciiString)::DownCast(theorigs.Value(n));
}
Handle(TCollection_HAsciiString) IFSelect_EditForm::EditedValue
(const Standard_Integer num) const
{
if (themodifs.Upper() == 0) return OriginalValue(num);
if (!IsModified(num)) return OriginalValue(num);
Standard_Integer n = RankFromNumber(num);
return Handle(TCollection_HAsciiString)::DownCast(themodifs.Value(n));
}
Handle(TColStd_HSequenceOfHAsciiString) IFSelect_EditForm::EditedList
(const Standard_Integer num) const
{
if (themodifs.Upper() == 0) return OriginalList(num);
if (!IsModified(num)) return OriginalList(num);
Standard_Integer n = RankFromNumber(num);
return Handle(TColStd_HSequenceOfHAsciiString)::DownCast(themodifs.Value(n));
}
Standard_Boolean IFSelect_EditForm::IsModified
(const Standard_Integer num) const
{
if (thestatus.Upper() == 0) return Standard_False;
Standard_Integer n = RankFromNumber(num);
return (thestatus.Value(n) != 0);
}
Standard_Boolean IFSelect_EditForm::IsTouched
(const Standard_Integer num) const
{
if (thestatus.Upper() == 0) return Standard_False;
Standard_Integer n = RankFromNumber(num);
return (thestatus.Value(n) == 2);
}
Standard_Boolean IFSelect_EditForm::Modify
(const Standard_Integer num, const Handle(TCollection_HAsciiString)& newval,
const Standard_Boolean enforce)
{
// Peut-on editer
thetouched = 0;
if (themodifs.Upper() == 0) return Standard_False;
Standard_Integer tnum = RankFromNumber(num);
if (tnum == 0) return Standard_False;
IFSelect_EditValue acc = theeditor->EditMode (num);
if (newval.IsNull() && acc != IFSelect_Optional) return Standard_False;
if (!enforce && (acc == IFSelect_EditProtected || acc == IFSelect_EditComputed)) return Standard_False;
// Satisfies ?
Handle(Interface_TypedValue) typval = theeditor->TypedValue(num);
if (!typval->Satisfies(newval)) return Standard_False;
Interface_ParamType pty = typval->Type();
if (pty == Interface_ParamIdent && !newval.IsNull()) {
if (themodel.IsNull()) return Standard_False;
if (themodel->NextNumberForLabel(newval->ToCString(),0,Standard_False) <= 0)
return Standard_False;
}
// Update ?
if (!theeditor->Update(this,num,newval,enforce)) return Standard_False;
thestatus.SetValue (tnum,1);
themodifs.SetValue (tnum,newval);
return Standard_True;
}
Standard_Boolean IFSelect_EditForm::ModifyList
(const Standard_Integer num, const Handle(IFSelect_ListEditor)& edited,
const Standard_Boolean enforce)
{
// Faut-il prendre
if (edited.IsNull()) return Standard_False;
if (!edited->IsTouched()) return Standard_False;
Handle(TColStd_HSequenceOfHAsciiString) newlist = edited->EditedValues();
// Peut-on editer
thetouched = 0;
if (themodifs.Upper() == 0) return Standard_False;
Standard_Integer tnum = RankFromNumber(num);
if (tnum == 0) return Standard_False;
IFSelect_EditValue acc = theeditor->EditMode (num);
if (acc == IFSelect_EditRead || acc == IFSelect_EditDynamic) return Standard_False;
if (newlist.IsNull() && acc != IFSelect_Optional) return Standard_False;
if (!enforce && (acc == IFSelect_EditProtected || acc == IFSelect_EditComputed)) return Standard_False;
// Update ?
if (!theeditor->UpdateList(this,num,newlist,enforce)) return Standard_False;
thestatus.SetValue (tnum,1);
themodifs.SetValue (tnum,newlist);
return Standard_True;
}
Standard_Boolean IFSelect_EditForm::ModifyListValue
(const Standard_Integer num, const Handle(TColStd_HSequenceOfHAsciiString)& list,
const Standard_Boolean enforce)
{
Handle(IFSelect_ListEditor) led = ListEditor (num);
if (led.IsNull()) return Standard_False;
if (!led->LoadEdited(list)) return Standard_False;
return ModifyList (num,led,enforce);
}
Standard_Boolean IFSelect_EditForm::Touch
(const Standard_Integer num, const Handle(TCollection_HAsciiString)& newval)
{
if (themodifs.Upper() == 0) return Standard_False;
Standard_Integer tnum = RankFromNumber(num);
if (tnum == 0) return Standard_False;
thestatus.SetValue (tnum,2);
themodifs.SetValue (tnum,newval);
thetouched ++;
return Standard_True;
}
Standard_Boolean IFSelect_EditForm::TouchList
(const Standard_Integer num, const Handle(TColStd_HSequenceOfHAsciiString)& newlist)
{
if (themodifs.Upper() == 0) return Standard_False;
Standard_Integer tnum = RankFromNumber(num);
if (tnum == 0) return Standard_False;
thestatus.SetValue (tnum,2);
themodifs.SetValue (tnum,newlist);
thetouched ++;
return Standard_True;
}
void IFSelect_EditForm::ClearEdit (const Standard_Integer num)
{
Standard_Integer i, nb = thestatus.Upper();
if (num == 0) {
for (i = 1; i <= nb; i ++) thestatus.SetValue (i,0);
} else {
Standard_Integer tnum = RankFromNumber(num);
if (tnum > 0 && num <= nb) thestatus.SetValue (tnum,0);
}
}
void IFSelect_EditForm::PrintDefs (Standard_OStream& S) const
{
Standard_Integer iv, nbv = NbValues(Standard_True);
S<<"***** EditForm, Label : "<<Label()<<std::endl;
if (IsComplete()) S<<"Complete, "<<nbv<<" Values"<<std::endl;
else {
S<<"Extraction on "<<nbv<<" Values : (extracted<-editor)"<<std::endl;
for (iv = 1; iv <= nbv; iv ++) S<<" "<<iv<<"<-"<<NumberFromRank(iv);
S<<std::endl;
}
S<<"*****"<<std::endl;
}
static void PrintList
(const Handle(TColStd_HSequenceOfHAsciiString)& list,
Standard_OStream& S, const Standard_Boolean alsolist)
{
if (list.IsNull()) { S<<"(NULL LIST)"<<std::endl; return; }
Standard_Integer i,nb = list->Length();
S<<"(List : "<<nb<<" Items)"<<std::endl;
if (!alsolist) return;
for (i = 1; i <= nb; i ++) {
Handle(TCollection_HAsciiString) str = list->Value(i);
S<<" ["<<i<<"] "<< (str.IsNull() ? "(NULL)" : str->ToCString())<<std::endl;
}
}
void IFSelect_EditForm::PrintValues
(Standard_OStream& S, const Standard_Integer what,
const Standard_Boolean names, const Standard_Boolean alsolist) const
{
Standard_Integer iv, nbv = NbValues(Standard_True);
S<< "****************************************************"<<std::endl;
S<<"***** "<<Label()<<Interface_MSG::Blanks(Label(),40)<<"*****"<<std::endl;
S<<"***** *****"<<std::endl;
if (!theloaded)
S<<"***** Values are NOT loaded *****"<<std::endl;
else {
// Donnees sur lesquelles on a travaille
if (themodel.IsNull()) {
if (theent.IsNull()) S<<"***** No loaded data";
else S<<"***** No loaded Model. Loaded object : type "<<theent->DynamicType()->Name();
} else {
if (theent.IsNull()) S<<"***** No loaded entity";
else { S<<"***** Loaded entity : "; themodel->PrintLabel (theent, S); }
}
}
S<<std::endl<<"****************************************************"<<std::endl<<std::endl;
// Affichage des valeurs
Standard_Boolean nams = names;
Standard_Integer maxnam = theeditor->MaxNameLength (names ? 0 : -1);
if (maxnam == 0) { maxnam = theeditor->MaxNameLength (0); nams = Standard_True; }
Standard_Integer nbmod = 0;
if (what != 0) S<<"Mod N0 Name Value"<<std::endl;
else S<<" N0 Name Value"<<std::endl;
for (iv = 1; iv <= nbv; iv ++) {
Standard_Integer jv = NumberFromRank(iv);
Standard_CString name = theeditor->Name(jv,!nams);
// Original ou Final
if (what != 0) {
Handle(TCollection_HAsciiString) str;
if (IsModified(jv)) S<<"* ";
else S<<" ";
S<<Interface_MSG::Blanks(iv,3)<<iv<<" "
<<name<<Interface_MSG::Blanks(name,maxnam)<<" ";
if (theeditor->IsList(jv)) {
Handle(TColStd_HSequenceOfHAsciiString) list;
if (what < 0) list = OriginalList (jv);
if (what > 0) list = EditedList (jv);
PrintList (list,S,alsolist);
continue;
}
if (what < 0) str = OriginalValue (jv);
if (what > 0) str = EditedValue (jv);
S<< (str.IsNull() ? "(NULL)" : str->ToCString()) <<std::endl;
// Modified only
} else {
if (!IsModified(jv)) continue;
nbmod ++;
if (theeditor->IsList(jv)) {
Handle(TColStd_HSequenceOfHAsciiString) list= OriginalList (jv);
S<<Interface_MSG::Blanks(iv,3)<<iv<<" "
<<name<<Interface_MSG::Blanks(name,maxnam)<<" ORIG:";
PrintList (list,S,alsolist);
list = EditedList (jv);
S<<Interface_MSG::Blanks("",maxnam+5)<<"MOD :";
PrintList (list,S,alsolist);
continue;
}
Handle(TCollection_HAsciiString) str = OriginalValue (jv);
S<<Interface_MSG::Blanks(iv,3)<<iv<<" "
<<name<<Interface_MSG::Blanks(name,maxnam)<<" ORIG:"
<< (str.IsNull() ? "(NULL)" : str->ToCString()) <<std::endl;
str = EditedValue (jv);
S<<Interface_MSG::Blanks("",maxnam+4)<<" MOD :"<< (str.IsNull() ? "(NULL)" : str->ToCString()) <<std::endl;
}
}
if (what == 0) S<<"On "<<nbv<<" Values, "<<nbmod<<" Modified"<<std::endl;
}
Standard_Boolean IFSelect_EditForm::Apply ()
{
Standard_Boolean stat = ApplyData(theent,themodel);
if (stat && !thekeepst) ClearEdit();
return stat;
}
Standard_Boolean IFSelect_EditForm::Recognize () const
{ return theeditor->Recognize(this); }
Standard_Boolean IFSelect_EditForm::ApplyData
(const Handle(Standard_Transient)& ent,
const Handle(Interface_InterfaceModel)& model)
{ return theeditor->Apply (this,ent,model); }
Standard_Boolean IFSelect_EditForm::Undo ()
{
if (thestatus.Upper() == 0 || theorigs.Upper() == 0) return Standard_False;
Standard_Integer i, nb = thestatus.Upper();
for (i = 1; i <= nb; i ++) {
if (thestatus.Value (i) != 0) themodifs.SetValue (i,theorigs.Value(i));
}
return Apply ();
}

View File

@@ -1,294 +0,0 @@
// Created on: 1998-02-23
// Created by: Christian CAILLET
// Copyright (c) 1998-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 _IFSelect_EditForm_HeaderFile
#define _IFSelect_EditForm_HeaderFile
#include <Standard.hxx>
#include <TColStd_Array1OfInteger.hxx>
#include <TColStd_Array1OfTransient.hxx>
#include <Standard_Integer.hxx>
#include <Standard_Transient.hxx>
#include <TColStd_SequenceOfInteger.hxx>
#include <TColStd_HSequenceOfHAsciiString.hxx>
class IFSelect_Editor;
class Interface_InterfaceModel;
class IFSelect_ListEditor;
class TCollection_HAsciiString;
class IFSelect_EditForm;
DEFINE_STANDARD_HANDLE(IFSelect_EditForm, Standard_Transient)
//! An EditForm is the way to apply an Editor on an Entity or on
//! the Model
//! It gives read-only or read-write access, with or without undo
//!
//! It can be complete (all the values of the Editor are present)
//! or partial (a sub-list of these value are present)
//! Anyway, all references to Number (argument <num>) refer to
//! Number of Value for the Editor
//! While references to Rank are for rank in the EditForm, which
//! may differ if it is not Complete
//! Two methods give the correspondence between this Number and
//! the Rank in the EditForm : RankFromNumber and NumberFromRank
class IFSelect_EditForm : public Standard_Transient
{
public:
//! Creates a complete EditForm from an Editor
//! A specific Label can be given
Standard_EXPORT IFSelect_EditForm(const Handle(IFSelect_Editor)& editor, const Standard_Boolean readonly, const Standard_Boolean undoable, const Standard_CString label = "");
//! Creates an extracted EditForm from an Editor, limited to
//! the values identified in <nums>
//! A specific Label can be given
Standard_EXPORT IFSelect_EditForm(const Handle(IFSelect_Editor)& editor, const TColStd_SequenceOfInteger& nums, const Standard_Boolean readonly, const Standard_Boolean undoable, const Standard_CString label = "");
//! Returns and may change the keep status on modif
//! It starts as False
//! If it is True, Apply does not clear modification status
//! and the EditForm can be loaded again, modified value remain
//! and may be applied again
//! Remark that ApplyData does not clear the modification status,
//! a call to ClearEdit does
Standard_EXPORT Standard_Boolean& EditKeepStatus();
Standard_EXPORT Standard_CString Label() const;
//! Tells if the EditForm is loaded now
Standard_EXPORT Standard_Boolean IsLoaded() const;
Standard_EXPORT void ClearData();
Standard_EXPORT void SetData (const Handle(Standard_Transient)& ent, const Handle(Interface_InterfaceModel)& model);
Standard_EXPORT void SetEntity (const Handle(Standard_Transient)& ent);
Standard_EXPORT void SetModel (const Handle(Interface_InterfaceModel)& model);
Standard_EXPORT Handle(Standard_Transient) Entity() const;
Standard_EXPORT Handle(Interface_InterfaceModel) Model() const;
Standard_EXPORT Handle(IFSelect_Editor) Editor() const;
//! Tells if an EditForm is complete or is an extract from Editor
Standard_EXPORT Standard_Boolean IsComplete() const;
//! Returns the count of values
//! <editable> True : count of editable values, i.e.
//! For a complete EditForm, it is given by the Editor
//! Else, it is the length of the extraction map
//! <editable> False : all the values from the Editor
Standard_EXPORT Standard_Integer NbValues (const Standard_Boolean editable) const;
//! Returns the Value Number in the Editor from a given Rank in
//! the EditForm
//! For a complete EditForm, both are equal
//! Else, it is given by the extraction map
//! Returns 0 if <rank> exceeds the count of editable values,
Standard_EXPORT Standard_Integer NumberFromRank (const Standard_Integer rank) const;
//! Returns the Rank in the EditForm from a given Number of Value
//! for the Editor
//! For a complete EditForm, both are equal
//! Else, it is given by the extraction map
//! Returns 0 if <number> is not forecast to be edited, or is
//! out of range
Standard_EXPORT Standard_Integer RankFromNumber (const Standard_Integer number) const;
//! Returns the Value Number in the Editor for a given Name
//! i.e. the true ValueNumber which can be used in various methods
//! of EditForm
//! If it is not complete, for a recorded (in the Editor) but
//! non-loaded name, returns negative value (- number)
Standard_EXPORT Standard_Integer NameNumber (const Standard_CString name) const;
//! Returns the Rank of Value in the EditForm for a given Name
//! i.e. if it is not complete, for a recorded (in the Editor) but
//! non-loaded name, returns 0
Standard_EXPORT Standard_Integer NameRank (const Standard_CString name) const;
//! For a read-write undoable EditForm, loads original values
//! from defaults stored in the Editor
Standard_EXPORT void LoadDefault();
//! Loads modifications to data
//! Default uses Editor. Can be redefined
//! Remark that <ent> and/or <model> may be null, according to the
//! kind of Editor. Shortcuts are available for these cases, but
//! they finally call LoadData (hence, just ignore non-used args)
Standard_EXPORT virtual Standard_Boolean LoadData (const Handle(Standard_Transient)& ent, const Handle(Interface_InterfaceModel)& model);
//! Shortcut for LoadData when <model> is not used
Standard_EXPORT Standard_Boolean LoadEntity (const Handle(Standard_Transient)& ent);
//! Shortcut for LoadData when only the model is concerned
Standard_EXPORT Standard_Boolean LoadModel (const Handle(Interface_InterfaceModel)& model);
//! Shortcut when both <ent> and <model> are not used
//! (when the Editor works on fully static or global data)
Standard_EXPORT Standard_Boolean LoadData();
//! Returns a ListEditor to edit the parameter <num> of the
//! EditForm, if it is a List
//! The Editor created it (by ListEditor) then loads it (by
//! ListValue)
//! For a single parameter, returns a Null Handle ...
Standard_EXPORT Handle(IFSelect_ListEditor) ListEditor (const Standard_Integer num) const;
//! Loads an original value (single). Called by the Editor only
Standard_EXPORT void LoadValue (const Standard_Integer num, const Handle(TCollection_HAsciiString)& val);
//! Loads an original value as a list. Called by the Editor only
Standard_EXPORT void LoadList (const Standard_Integer num, const Handle(TColStd_HSequenceOfHAsciiString)& list);
//! From an edited value, returns its ... value (original one)
//! Null means that this value is not defined
//! <num> is for the EditForm, not the Editor
//! It is for a single parameter. For a list, gives a Null Handle
Standard_EXPORT Handle(TCollection_HAsciiString) OriginalValue (const Standard_Integer num) const;
//! Returns an original value, as a list
//! <num> is for the EditForm, not the Editor
//! For a single parameter, gives a Null Handle
Standard_EXPORT Handle(TColStd_HSequenceOfHAsciiString) OriginalList (const Standard_Integer num) const;
//! Returns the Edited (i.e. Modified) Value (string for single)
//! <num> reports to the EditForm
//! If IsModified is False, returns OriginalValue
//! Null with IsModified True : means that this value is not
//! defined or has been removed
//! It is for a single parameter. For a list, gives a Null Handle
Standard_EXPORT Handle(TCollection_HAsciiString) EditedValue (const Standard_Integer num) const;
//! Returns the Edited Value as a list
//! If IsModified is False, returns OriginalValue
//! Null with IsModified True : means that this value is not
//! defined or has been removed
//! For a single parameter, gives a Null Handle
Standard_EXPORT Handle(TColStd_HSequenceOfHAsciiString) EditedList (const Standard_Integer num) const;
//! Tells if a Value (of the EditForm) is modified (directly or
//! through touching by Update)
Standard_EXPORT Standard_Boolean IsModified (const Standard_Integer num) const;
//! Tells if a Value (of the EditForm) has been touched, i.e.
//! not modified directly but by the modification of another one
//! (by method Update from the Editor)
Standard_EXPORT Standard_Boolean IsTouched (const Standard_Integer num) const;
//! Gives a new value for the item <num> of the EditForm, if
//! it is a single parameter (for a list, just returns False)
//! Null means to Remove it
//! <enforce> True to overpass Protected or Computed Access Mode
//! Calls the method Update from the Editor, which can touch other
//! parameters (see NbTouched)
//! Returns True if well recorded, False if this value is not
//! allowed
//! Warning : Does not apply immediately : will be applied by the method
//! Apply
Standard_EXPORT Standard_Boolean Modify (const Standard_Integer num, const Handle(TCollection_HAsciiString)& newval, const Standard_Boolean enforce = Standard_False);
//! Changes the value of an item of the EditForm, if it is a List
//! (else, just returns False)
//! The ListEditor contains the edited values of the list
//! If no edition was recorded, just returns False
//! Calls the method Update from the Editor, which can touch other
//! parameters (see NbTouched)
//! Returns True if well recorded, False if this value is not
//! allowed
//! Warning : Does not apply immediately : will be applied by the method
//! Apply
Standard_EXPORT Standard_Boolean ModifyList (const Standard_Integer num, const Handle(IFSelect_ListEditor)& edited, const Standard_Boolean enforce = Standard_False);
//! As ModifyList but the new value is given as such
//! Creates a ListEditor, Loads it, then calls ModifyList
Standard_EXPORT Standard_Boolean ModifyListValue (const Standard_Integer num, const Handle(TColStd_HSequenceOfHAsciiString)& list, const Standard_Boolean enforce = Standard_False);
//! Gives a new value computed by the Editor, if another parameter
//! commands the value of <num>
//! It is generally the case for a Computed Parameter for instance
//! Increments the counter of touched parameters
//! Warning : it gives no protection for ReadOnly etc... while it is the
//! internal way of touching parameters
//! Does not work (returns False) if <num> is for a list
Standard_EXPORT Standard_Boolean Touch (const Standard_Integer num, const Handle(TCollection_HAsciiString)& newval);
//! Acts as Touch but for a list
//! Does not work (returns False) if <num> is for a single param
Standard_EXPORT Standard_Boolean TouchList (const Standard_Integer num, const Handle(TColStd_HSequenceOfHAsciiString)& newlist);
//! Returns the count of parameters touched by the last Modify
//! (apart from the modified parameter itself)
//! Normally it is zero
Standard_EXPORT Standard_Integer NbTouched() const;
//! Clears modification status : by default all, or one by its
//! numbers (in the Editor)
Standard_EXPORT void ClearEdit (const Standard_Integer num = 0);
//! Prints Definitions, relative to the Editor
Standard_EXPORT void PrintDefs (Standard_OStream& S) const;
//! Prints Values, according to what and alsolist
//! <names> True : prints Long Names; False : prints Short Names
//! <what> < 0 : prints Original Values (+ flag Modified)
//! <what> > 0 : prints Final Values (+flag Modified)
//! <what> = 0 : prints Modified Values (Original + Edited)
//! <alsolist> False (D) : lists are printed only as their count
//! <alsolist> True : lists are printed for all their items
Standard_EXPORT void PrintValues (Standard_OStream& S, const Standard_Integer what, const Standard_Boolean names, const Standard_Boolean alsolist = Standard_False) const;
//! Applies modifications to own data
//! Calls ApplyData then Clears Status according EditKeepStatus
Standard_EXPORT Standard_Boolean Apply();
//! Tells if this EditForm can work with its Editor and its actual
//! Data (Entity and Model)
//! Default uses Editor. Can be redefined
Standard_EXPORT virtual Standard_Boolean Recognize() const;
//! Applies modifications to data
//! Default uses Editor. Can be redefined
Standard_EXPORT virtual Standard_Boolean ApplyData (const Handle(Standard_Transient)& ent, const Handle(Interface_InterfaceModel)& model);
//! For an undoable EditForm, Applies ... origibal values !
//! and clears modified ones
//! Can be run only once
Standard_EXPORT Standard_Boolean Undo();
DEFINE_STANDARD_RTTIEXT(IFSelect_EditForm,Standard_Transient)
private:
Standard_Boolean thecomplete;
Standard_Boolean theloaded;
Standard_Boolean thekeepst;
TCollection_AsciiString thelabel;
TColStd_Array1OfInteger thenums;
TColStd_Array1OfTransient theorigs;
TColStd_Array1OfTransient themodifs;
TColStd_Array1OfInteger thestatus;
Handle(IFSelect_Editor) theeditor;
Handle(Standard_Transient) theent;
Handle(Interface_InterfaceModel) themodel;
Standard_Integer thetouched;
};
#endif // _IFSelect_EditForm_HeaderFile

View File

@@ -1,37 +0,0 @@
// Created on: 1992-09-21
// Created by: Christian CAILLET
// Copyright (c) 1992-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 _IFSelect_EditValue_HeaderFile
#define _IFSelect_EditValue_HeaderFile
//! Controls access on Values by an Editor
//! EditOptional : normal access, in addition may be removed
//! Editable : normal access, must be present
//! EditProtected : access must be validated
//! EditComputed : why write it ? it will be recomputed
//! EditRead : no way to write it, only for read
//! EditDynamic : not a field, only to be displayed
enum IFSelect_EditValue
{
IFSelect_Optional,
IFSelect_Editable,
IFSelect_EditProtected,
IFSelect_EditComputed,
IFSelect_EditRead,
IFSelect_EditDynamic
};
#endif // _IFSelect_EditValue_HeaderFile

View File

@@ -1,230 +0,0 @@
// 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_EditForm.hxx>
#include <IFSelect_Editor.hxx>
#include <IFSelect_ListEditor.hxx>
#include <Interface_InterfaceModel.hxx>
#include <Interface_MSG.hxx>
#include <Interface_TypedValue.hxx>
#include <Standard_OutOfRange.hxx>
#include <Standard_Transient.hxx>
#include <Standard_Type.hxx>
#include <TCollection_AsciiString.hxx>
#include <TCollection_HAsciiString.hxx>
#include <string.h>
IMPLEMENT_STANDARD_RTTIEXT(IFSelect_Editor,Standard_Transient)
IFSelect_Editor::IFSelect_Editor (const Standard_Integer nbval)
: thenbval (nbval) , themaxsh (0) , themaxco (0) , themaxla (0) ,
thevalues (1,nbval) , theshorts (1,nbval) , themodes (1,nbval) ,
thelists (1,nbval)
{ thelists.Init(-1); }
void IFSelect_Editor::SetNbValues (const Standard_Integer nbval)
{
if (nbval > thevalues.Upper()) throw Standard_OutOfRange("IFSelect_Editor:SetNbValues");
thenbval = nbval;
}
void IFSelect_Editor::SetValue
(const Standard_Integer num, const Handle(Interface_TypedValue)& typval,
const Standard_CString shortname, const IFSelect_EditValue editmode)
{
if (num < 1 || num > thenbval) return;
TCollection_AsciiString shn (shortname);
Standard_Integer lng = shn.Length();
if (lng > 0) thenames.Bind (shortname,num);
if (lng > themaxsh) themaxsh = lng;
lng = (Standard_Integer) strlen (typval->Name());
if (lng > themaxco) themaxco = lng;
lng = (Standard_Integer) strlen (typval->Label());
if (lng > themaxla) themaxla = lng;
thenames.Bind (typval->Name(),num);
Standard_Integer edm = (Standard_Integer) editmode;
thevalues.SetValue (num,typval);
theshorts.SetValue (num,shn);
themodes.SetValue (num,edm);
}
void IFSelect_Editor::SetList
(const Standard_Integer num, const Standard_Integer max)
{
if (num < 1 || num > thenbval) return;
thelists.SetValue (num,max);
}
Standard_Integer IFSelect_Editor::NbValues () const
{ return thenbval; }
Handle(Interface_TypedValue) IFSelect_Editor::TypedValue
(const Standard_Integer num) const
{ return Handle(Interface_TypedValue)::DownCast(thevalues.Value(num)); }
Standard_Boolean IFSelect_Editor::IsList (const Standard_Integer num) const
{
if (num < 1 || num > thenbval) return Standard_False;
return (thelists.Value(num) >= 0);
}
Standard_Integer IFSelect_Editor::MaxList (const Standard_Integer num) const
{
if (num < 1 || num > thenbval) return -1;
return thelists.Value(num);
}
Standard_CString IFSelect_Editor::Name
(const Standard_Integer num, const Standard_Boolean isshort) const
{
if (num < 1 || num > thenbval) return "";
if (isshort) return theshorts.Value (num).ToCString();
else return TypedValue (num)->Name();
}
IFSelect_EditValue IFSelect_Editor::EditMode
(const Standard_Integer num) const
{
if (num < 1 || num > thenbval) return IFSelect_EditDynamic;
Standard_Integer edm = themodes.Value(num);
return (IFSelect_EditValue) edm;
}
void IFSelect_Editor::PrintNames (Standard_OStream& S) const
{
Standard_Integer i, nb = NbValues();
S<<"**** Editor : "<<Label()<<std::endl;
S<<"**** Nb Values = "<<nb<<" **** Names / Labels"<<std::endl;
S<<" Num ";
if (themaxsh > 0) S<<"Short"<<Interface_MSG::Blanks("Short",themaxsh)<<" ";
S<<"Complete"<<Interface_MSG::Blanks("Complete",themaxco)<<" Label"<<std::endl;
for (i = 1; i <= nb; i ++) {
Handle(Interface_TypedValue) tv = TypedValue(i);
if (tv.IsNull()) continue;
S<<Interface_MSG::Blanks(i,3)<<i<<" ";
if (themaxsh > 0) {
const TCollection_AsciiString& sho = theshorts(i);
S<<sho<<Interface_MSG::Blanks(sho.ToCString(),themaxsh)<<" ";
}
S<<tv->Name()<<Interface_MSG::Blanks(tv->Name(),themaxco)<<" "<<tv->Label()<<std::endl;
}
}
void IFSelect_Editor::PrintDefs
(Standard_OStream& S, const Standard_Boolean labels) const
{
Standard_Integer i, nb = NbValues();
S<<"**** Editor : "<<Label()<<std::endl;
S<<"**** Nb Values = "<<nb<<" **** "<<(labels ? "Labels" : "Names")<<" / Definitions"<<std::endl;
S<<" Num ";
if (labels) S<<"Label"<<Interface_MSG::Blanks("Label",themaxla);
else {
if (themaxsh > 0) S<<"Short"<<Interface_MSG::Blanks("Short",themaxsh+1);
S<<"Complete"<<Interface_MSG::Blanks("Complete",themaxco);
}
S<<" Edit Mode & Definition"<<std::endl;
for (i = 1; i <= nb; i ++) {
Handle(Interface_TypedValue) tv = TypedValue(i);
if (tv.IsNull()) continue;
S<<" "<<Interface_MSG::Blanks(i,3)<<i<<" ";
if (labels) S<<tv->Label()<<Interface_MSG::Blanks(tv->Label(),themaxla);
else {
if (themaxsh > 0) {
const TCollection_AsciiString& sho = theshorts(i);
S<<sho<<Interface_MSG::Blanks(sho.ToCString(),themaxsh)<<" ";
}
S<<tv->Name()<<Interface_MSG::Blanks(tv->Name(),themaxco);
}
S<<" ";
Standard_Integer maxls = MaxList (i);
if (maxls == 0) S<<" (List) ";
else if (maxls > 0) S<<" (List <= "<<maxls<<" Items) ";
else S<<" ";
IFSelect_EditValue edm = EditMode (i);
switch (edm) {
case IFSelect_Optional : S<<"Optional "; break;
case IFSelect_Editable : S<<"Editable "; break;
case IFSelect_EditProtected : S<<"Protected"; break;
case IFSelect_EditComputed : S<<"Computed "; break;
case IFSelect_EditRead : S<<"ReadOnly "; break;
case IFSelect_EditDynamic : S<<"Dynamic "; break;
default : S<<"?????????"; break;
}
S<<" "<<tv->Definition()<<std::endl;
}
}
Standard_Integer IFSelect_Editor::MaxNameLength
(const Standard_Integer what) const
{
if (what == -1) return themaxsh;
if (what == 0) return themaxco;
if (what == 1) return themaxla;
return 0;
}
Standard_Integer IFSelect_Editor::NameNumber
(const Standard_CString name) const
{
Standard_Integer res;
if (thenames.Find(name,res))
return res;
res = atoi (name); // si c est un entier, on tente le coup
if (res < 1 || res > NbValues()) res = 0;
return res;
}
Handle(IFSelect_EditForm) IFSelect_Editor::Form
(const Standard_Boolean readonly, const Standard_Boolean undoable) const
{
return new IFSelect_EditForm (this,readonly,undoable,Label().ToCString());
}
Handle(IFSelect_ListEditor) IFSelect_Editor::ListEditor
(const Standard_Integer num) const
{
Handle(IFSelect_ListEditor) led;
Standard_Integer max = MaxList (num);
if (max < 0) return led;
led = new IFSelect_ListEditor (TypedValue(num),max);
return led;
}
Handle(TColStd_HSequenceOfHAsciiString) IFSelect_Editor::ListValue
(const Handle(IFSelect_EditForm)& /*form*/, const Standard_Integer /*num*/) const
{
Handle(TColStd_HSequenceOfHAsciiString) list;
return list;
}
Standard_Boolean IFSelect_Editor::Update
(const Handle(IFSelect_EditForm)& /*form*/, const Standard_Integer /*num*/,
const Handle(TCollection_HAsciiString)& /*newval*/,
const Standard_Boolean /*enforce*/) const
{ return Standard_True; }
Standard_Boolean IFSelect_Editor::UpdateList
(const Handle(IFSelect_EditForm)& /*form*/, const Standard_Integer /*num*/,
const Handle(TColStd_HSequenceOfHAsciiString)& /*newval*/,
const Standard_Boolean /*enforce*/) const
{ return Standard_True; }

View File

@@ -1,195 +0,0 @@
// Created on: 1998-02-23
// Created by: Christian CAILLET
// Copyright (c) 1998-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 _IFSelect_Editor_HeaderFile
#define _IFSelect_Editor_HeaderFile
#include <Standard.hxx>
#include <Standard_Type.hxx>
#include <Standard_Integer.hxx>
#include <TColStd_Array1OfTransient.hxx>
#include <TColStd_Array1OfAsciiString.hxx>
#include <TColStd_Array1OfInteger.hxx>
#include <Standard_Transient.hxx>
#include <IFSelect_EditValue.hxx>
#include <TColStd_HSequenceOfHAsciiString.hxx>
#include <TCollection_AsciiString.hxx>
#include <NCollection_DataMap.hxx>
class Interface_TypedValue;
class IFSelect_EditForm;
class TCollection_HAsciiString;
class IFSelect_ListEditor;
class Interface_InterfaceModel;
class IFSelect_Editor;
DEFINE_STANDARD_HANDLE(IFSelect_Editor, Standard_Transient)
//! An Editor defines a set of values and a way to edit them, on
//! an entity or on the model (e.g. on its header)
//!
//! Each Value is controlled by a TypedValue, with a number (it is
//! an Integer) and a name under two forms (complete and short)
//! and an edit mode
class IFSelect_Editor : public Standard_Transient
{
public:
//! Sets a Typed Value for a given ident and short name, with an
//! Edit Mode
Standard_EXPORT void SetValue (const Standard_Integer num, const Handle(Interface_TypedValue)& typval, const Standard_CString shortname = "", const IFSelect_EditValue accessmode = IFSelect_Editable);
//! Sets a parameter to be a List
//! max < 0 : not for a list (set when starting)
//! max = 0 : list with no length limit (default for SetList)
//! max > 0 : list limited to <max> items
Standard_EXPORT void SetList (const Standard_Integer num, const Standard_Integer max = 0);
//! Returns the count of Typed Values
Standard_EXPORT Standard_Integer NbValues() const;
//! Returns a Typed Value from its ident
Standard_EXPORT Handle(Interface_TypedValue) TypedValue (const Standard_Integer num) const;
//! Tells if a parameter is a list
Standard_EXPORT Standard_Boolean IsList (const Standard_Integer num) const;
//! Returns max length allowed for a list
//! = 0 means : list with no limit
//! < 0 means : not a list
Standard_EXPORT Standard_Integer MaxList (const Standard_Integer num) const;
//! Returns the name of a Value (complete or short) from its ident
//! Short Name can be empty
Standard_EXPORT Standard_CString Name (const Standard_Integer num, const Standard_Boolean isshort = Standard_False) const;
//! Returns the edit mode of a Value
Standard_EXPORT IFSelect_EditValue EditMode (const Standard_Integer num) const;
//! Returns the number (ident) of a Value, from its name, short or
//! complete. If not found, returns 0
Standard_EXPORT Standard_Integer NameNumber (const Standard_CString name) const;
Standard_EXPORT void PrintNames (Standard_OStream& S) const;
Standard_EXPORT void PrintDefs (Standard_OStream& S, const Standard_Boolean labels = Standard_False) const;
//! Returns the MaxLength of, according to what :
//! <what> = -1 : length of short names
//! <what> = 0 : length of complete names
//! <what> = 1 : length of values labels
Standard_EXPORT Standard_Integer MaxNameLength (const Standard_Integer what) const;
//! Returns the specific label
Standard_EXPORT virtual TCollection_AsciiString Label() const = 0;
//! Builds and Returns an EditForm, empty (no data yet)
//! Can be redefined to return a specific type of EditForm
Standard_EXPORT virtual Handle(IFSelect_EditForm) Form (const Standard_Boolean readonly, const Standard_Boolean undoable = Standard_True) const;
//! Tells if this Editor can work on this EditForm and its content
//! (model, entity ?)
Standard_EXPORT virtual Standard_Boolean Recognize (const Handle(IFSelect_EditForm)& form) const = 0;
//! Returns the value of an EditForm, for a given item
//! (if not a list. for a list, a Null String may be returned)
Standard_EXPORT virtual Handle(TCollection_HAsciiString) StringValue (const Handle(IFSelect_EditForm)& form, const Standard_Integer num) const = 0;
//! Returns a ListEditor for a parameter which is a List
//! Default returns a basic ListEditor for a List, a Null Handle
//! if <num> is not for a List. Can be redefined
Standard_EXPORT virtual Handle(IFSelect_ListEditor) ListEditor (const Standard_Integer num) const;
//! Returns the value of an EditForm as a List, for a given item
//! If not a list, a Null Handle should be returned
//! Default returns a Null Handle, because many Editors have
//! no list to edit. To be redefined as required
Standard_EXPORT virtual Handle(TColStd_HSequenceOfHAsciiString) ListValue (const Handle(IFSelect_EditForm)& form, const Standard_Integer num) const;
//! Loads original values from some data, to an EditForm
//! Remark: <ent> may be Null, this means all <model> is concerned
//! Also <model> may be Null, if no context applies for <ent>
//! And both <ent> and <model> may be Null, for a full static
//! editor
Standard_EXPORT virtual Standard_Boolean Load (const Handle(IFSelect_EditForm)& form, const Handle(Standard_Transient)& ent, const Handle(Interface_InterfaceModel)& model) const = 0;
//! Updates the EditForm when a parameter is modified
//! I.E. default does nothing, can be redefined, as follows :
//! Returns True when done (even if does nothing), False in case
//! of refuse (for instance, if the new value is not suitable)
//! <num> is the rank of the parameter for the EDITOR itself
//! <enforce> True means that protected parameters can be touched
//!
//! If a parameter commands the value of other ones, when it is
//! modified, it is necessary to touch them by Touch from EditForm
Standard_EXPORT virtual Standard_Boolean Update (const Handle(IFSelect_EditForm)& form, const Standard_Integer num, const Handle(TCollection_HAsciiString)& newval, const Standard_Boolean enforce) const;
//! Acts as Update, but when the value is a list
Standard_EXPORT virtual Standard_Boolean UpdateList (const Handle(IFSelect_EditForm)& form, const Standard_Integer num, const Handle(TColStd_HSequenceOfHAsciiString)& newlist, const Standard_Boolean enforce) const;
//! Applies modified values of the EditForm with some data
//! Remark: <ent> may be Null, this means all <model> is concerned
//! Also <model> may be Null, if no context applies for <ent>
//! And both <ent> and <model> may be Null, for a full static
//! editor
Standard_EXPORT virtual Standard_Boolean Apply (const Handle(IFSelect_EditForm)& form, const Handle(Standard_Transient)& ent, const Handle(Interface_InterfaceModel)& model) const = 0;
DEFINE_STANDARD_RTTIEXT(IFSelect_Editor,Standard_Transient)
protected:
//! Prepares the list of Typed Values (gives its count)
//! This count can be tuned later, to a LOWER value, this allows
//! to initialize with a "maximum reservation" then cut the extra
Standard_EXPORT IFSelect_Editor(const Standard_Integer nbval);
//! Adjusts the true count of values. It can be LOWER or equal to
//! the initial size (which then acts as a reservation), but never
//! greater
Standard_EXPORT void SetNbValues (const Standard_Integer nbval);
private:
Standard_Integer thenbval;
Standard_Integer themaxsh;
Standard_Integer themaxco;
Standard_Integer themaxla;
NCollection_DataMap<TCollection_AsciiString, Standard_Integer> thenames;
TColStd_Array1OfTransient thevalues;
TColStd_Array1OfAsciiString theshorts;
TColStd_Array1OfInteger themodes;
TColStd_Array1OfInteger thelists;
};
#endif // _IFSelect_Editor_HeaderFile

View File

@@ -1,19 +0,0 @@
// 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_FileModifier.ixx>
IFSelect_FileModifier::IFSelect_FileModifier ()
: IFSelect_GeneralModifier (Standard_False) { }

View File

@@ -1,56 +0,0 @@
// 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_Dispatch.hxx>
#include <IFSelect_GeneralModifier.hxx>
#include <IFSelect_Selection.hxx>
#include <Standard_Type.hxx>
#include <TCollection_AsciiString.hxx>
IMPLEMENT_STANDARD_RTTIEXT(IFSelect_GeneralModifier,Standard_Transient)
IFSelect_GeneralModifier::IFSelect_GeneralModifier
(const Standard_Boolean maychangegraph) { thechgr = maychangegraph; }
Standard_Boolean IFSelect_GeneralModifier::MayChangeGraph () const
{ return thechgr; }
void IFSelect_GeneralModifier::SetDispatch
(const Handle(IFSelect_Dispatch)& disp)
{ thedisp = disp; }
Handle(IFSelect_Dispatch) IFSelect_GeneralModifier::Dispatch () const
{ return thedisp; }
Standard_Boolean IFSelect_GeneralModifier::Applies
(const Handle(IFSelect_Dispatch)& disp) const
{
if (thedisp.IsNull()) return Standard_True;
if (thedisp != disp) return Standard_False;
return Standard_True;
}
void IFSelect_GeneralModifier::SetSelection
(const Handle(IFSelect_Selection)& sel)
{ thesel = sel; }
void IFSelect_GeneralModifier::ResetSelection ()
{ thesel.Nullify(); }
Standard_Boolean IFSelect_GeneralModifier::HasSelection () const
{ return !thesel.IsNull(); }
Handle(IFSelect_Selection) IFSelect_GeneralModifier::Selection () const
{ return thesel; }

View File

@@ -1,121 +0,0 @@
// Created on: 1993-10-19
// 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 _IFSelect_GeneralModifier_HeaderFile
#define _IFSelect_GeneralModifier_HeaderFile
#include <Standard.hxx>
#include <Standard_Type.hxx>
#include <Standard_Transient.hxx>
class IFSelect_Selection;
class IFSelect_Dispatch;
class TCollection_AsciiString;
class IFSelect_GeneralModifier;
DEFINE_STANDARD_HANDLE(IFSelect_GeneralModifier, Standard_Transient)
//! This class gives a frame for Actions which modify the effect
//! of a Dispatch, i.e. :
//! By Selections and Dispatches, an original Model can be
//! split into one or more "target" Models : these Models
//! contain Entities copied from the original one (that is, a
//! part of it). Basically, these dispatched Entities are copied
//! as identical to their original counterparts. Also the copied
//! Models reproduce the Header of the original one.
//!
//! Modifiers allow to change this copied content : this is the
//! way to be used for any kind of alterations, adaptations ...
//! They are exploited by a ModelCopier, which firstly performs
//! the copy operation described by Dispatches, then invokes the
//! Modifiers to work on the result.
//!
//! Each GeneralModifier can be attached to :
//! - all the Models produced
//! - a Dispatch (it will be applied to all the Models obtained
//! from this Dispatch) designated by its Ident in a ShareOut
//! - in addition, to a Selection (facultative) : this adds a
//! criterium, the Modifier is invoked on a produced Model only
//! if this Model contains an Entity copied from one of the
//! Entities designated by this Selection.
//! (for special Modifiers from IFAdapt, while they must work on
//! definite Entities, this Selection is mandatory to run)
//!
//! Remark : this class has no action attached, it only provides
//! a frame to work on criteria. Then, sub-classes will define
//! their kind of action, which can be applied at a precise step
//! of the production of a File : see Modifier, and in the
//! package IFAdapt, EntityModifier and EntityCopier
class IFSelect_GeneralModifier : public Standard_Transient
{
public:
//! Returns True if this modifier may change the graph of
//! dependences (aknowledged at creation time)
Standard_EXPORT Standard_Boolean MayChangeGraph() const;
//! Attaches to a Dispatch. If <disp> is Null, Resets it
//! (to apply the Modifier on every Dispatch)
Standard_EXPORT void SetDispatch (const Handle(IFSelect_Dispatch)& disp);
//! Returns the Dispatch to be matched, Null if not set
Standard_EXPORT Handle(IFSelect_Dispatch) Dispatch() const;
//! Returns True if a Model obtained from the Dispatch <disp>
//! is to be treated (apart from the Selection criterium)
//! If Dispatch(me) is Null, returns True. Else, checks <disp>
Standard_EXPORT Standard_Boolean Applies (const Handle(IFSelect_Dispatch)& disp) const;
//! Sets a Selection : a Model is treated if it contains one or
//! more Entities designated by the Selection
Standard_EXPORT void SetSelection (const Handle(IFSelect_Selection)& sel);
//! Resets the Selection : this criterium is not longer active
Standard_EXPORT void ResetSelection();
//! Returns True if a Selection is set as an additional criterium
Standard_EXPORT Standard_Boolean HasSelection() const;
//! Returns the Selection, or a Null Handle if not set
Standard_EXPORT Handle(IFSelect_Selection) Selection() const;
//! Returns a short text which defines the operation performed
Standard_EXPORT virtual TCollection_AsciiString Label() const = 0;
DEFINE_STANDARD_RTTIEXT(IFSelect_GeneralModifier,Standard_Transient)
protected:
//! Sets the Modifier criteria to default Values
//! (i.e. "always applies")
//! <maychangegraph> must be provided at creation time, to :
//! - False if this GeneralModifier surely lets the graph of
//! dependencies unchanged (NO edition of any reference, BUT
//! also NO entity added or replaced or removed)
//! - True if there is a possibility of changing the graph of
//! dependencies when this modifier is applied
Standard_EXPORT IFSelect_GeneralModifier(const Standard_Boolean maychangegraph);
private:
Handle(IFSelect_Selection) thesel;
Handle(IFSelect_Dispatch) thedisp;
Standard_Boolean thechgr;
};
#endif // _IFSelect_GeneralModifier_HeaderFile

View File

@@ -1,66 +0,0 @@
// 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_GraphCounter.hxx>
#include <IFSelect_SelectDeduct.hxx>
#include <IFSelect_SelectPointed.hxx>
#include <Interface_EntityIterator.hxx>
#include <Interface_Graph.hxx>
#include <Standard_Type.hxx>
#include <stdio.h>
IMPLEMENT_STANDARD_RTTIEXT(IFSelect_GraphCounter,IFSelect_SignCounter)
IFSelect_GraphCounter::IFSelect_GraphCounter
(const Standard_Boolean withmap, const Standard_Boolean withlist)
: IFSelect_SignCounter (withmap,withlist) { }
Handle(IFSelect_SelectDeduct) IFSelect_GraphCounter::Applied () const
{ return theapplied; }
void IFSelect_GraphCounter::SetApplied
(const Handle(IFSelect_SelectDeduct)& applied)
{ theapplied = applied; }
void IFSelect_GraphCounter::AddWithGraph
(const Handle(TColStd_HSequenceOfTransient)& list,
const Interface_Graph& graph)
{
if (theapplied.IsNull()) { AddList (list,graph.Model()); return; }
if (list.IsNull()) return;
Standard_Integer i, nb = list->Length();
for (i = 1; i <= nb; i ++) {
char val[12];
Handle(Standard_Transient) ent = list->Value(i);
theapplied->Alternate()->SetEntity (ent);
Interface_EntityIterator iter = theapplied->UniqueResult(graph);
Standard_Integer n = iter.NbEntities();
switch (n) {
case 0: Add (ent,"0"); break;
case 1: Add (ent,"1"); break;
case 2: Add (ent,"2"); break;
case 3: Add (ent,"3"); break;
case 4: Add (ent,"4"); break;
case 5: Add (ent,"5"); break;
case 6: Add (ent,"6"); break;
case 7: Add (ent,"7"); break;
case 8: Add (ent,"8"); break;
case 9: Add (ent,"9"); break;
default :
sprintf (val,"%d",n);
Add (ent,val);
break;
}
}
}

View File

@@ -1,82 +0,0 @@
// Created on: 1998-10-15
// Created by: Christian CAILLET
// Copyright (c) 1998-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 _IFSelect_GraphCounter_HeaderFile
#define _IFSelect_GraphCounter_HeaderFile
#include <Standard.hxx>
#include <IFSelect_SignCounter.hxx>
#include <TColStd_HSequenceOfTransient.hxx>
class IFSelect_SelectDeduct;
class Interface_Graph;
class IFSelect_GraphCounter;
DEFINE_STANDARD_HANDLE(IFSelect_GraphCounter, IFSelect_SignCounter)
//! A GraphCounter computes values to be sorted with the help of
//! a Graph. I.E. not from a Signature
//!
//! The default GraphCounter works with an Applied Selection (a
//! SelectDeduct), the value is the count of selected entities
//! from each input entities)
class IFSelect_GraphCounter : public IFSelect_SignCounter
{
public:
//! Creates a GraphCounter, without applied selection
Standard_EXPORT IFSelect_GraphCounter(const Standard_Boolean withmap = Standard_True, const Standard_Boolean withlist = Standard_False);
//! Returns the applied selection
Standard_EXPORT Handle(IFSelect_SelectDeduct) Applied() const;
//! Sets a new applied selection
Standard_EXPORT void SetApplied (const Handle(IFSelect_SelectDeduct)& sel);
//! Adds a list of entities in the context given by the graph
//! Default takes the count of entities selected by the applied
//! selection, when it is given each entity of the list
//! Can be redefined
Standard_EXPORT virtual void AddWithGraph (const Handle(TColStd_HSequenceOfTransient)& list, const Interface_Graph& graph) Standard_OVERRIDE;
DEFINE_STANDARD_RTTIEXT(IFSelect_GraphCounter,IFSelect_SignCounter)
protected:
private:
Handle(IFSelect_SelectDeduct) theapplied;
};
#endif // _IFSelect_GraphCounter_HeaderFile

View File

@@ -1,26 +0,0 @@
// Created on: 1992-09-21
// Created by: Christian CAILLET
// Copyright (c) 1992-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 IFSelect_HSeqOfSelection_HeaderFile
#define IFSelect_HSeqOfSelection_HeaderFile
#include <IFSelect_TSeqOfSelection.hxx>
#include <NCollection_DefineHSequence.hxx>
DEFINE_HSEQUENCE(IFSelect_HSeqOfSelection, IFSelect_TSeqOfSelection)
#endif

View File

@@ -1,40 +0,0 @@
// 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_IntParam.hxx>
#include <Interface_Static.hxx>
#include <Standard_Type.hxx>
IMPLEMENT_STANDARD_RTTIEXT(IFSelect_IntParam,Standard_Transient)
IFSelect_IntParam::IFSelect_IntParam ()
{ theval = 0; }
void IFSelect_IntParam::SetStaticName (const Standard_CString statname)
{ thestn.Clear(); thestn.AssignCat (statname); }
Standard_Integer IFSelect_IntParam::Value () const
{
if (thestn.Length() == 0) return theval;
if (!Interface_Static::IsSet(thestn.ToCString()) ) return theval;
return Interface_Static::IVal(thestn.ToCString());
}
void IFSelect_IntParam::SetValue (const Standard_Integer val)
{
theval = val;
if (thestn.Length() == 0) return;
if (!Interface_Static::IsPresent(thestn.ToCString()) ) return;
Interface_Static::SetIVal (thestn.ToCString(),theval);
}

View File

@@ -1,84 +0,0 @@
// Created on: 1992-11-30
// Created by: Christian CAILLET
// Copyright (c) 1992-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 _IFSelect_IntParam_HeaderFile
#define _IFSelect_IntParam_HeaderFile
#include <Standard.hxx>
#include <Standard_Integer.hxx>
#include <TCollection_AsciiString.hxx>
#include <Standard_Transient.hxx>
class IFSelect_IntParam;
DEFINE_STANDARD_HANDLE(IFSelect_IntParam, Standard_Transient)
//! This class simply allows to access an Integer value through a
//! Handle, as a String can be (by using HString).
//! Hence, this value can be accessed : read and modified, without
//! passing through the specific object which detains it. Thus,
//! parameters of a Selection or a Dispatch (according its type)
//! can be controlled directly from the ShareOut which contains them
//!
//! Additionally, an IntParam can be bound to a Static.
//! Remember that for a String, binding is immediate, because the
//! string value of a Static is a HAsciiString, it then suffices
//! to get its Handle.
//! For an Integer, an IntParam can designate (by its name) a
//! Static : each time its value is required or set, the Static
//! is aknowledged
class IFSelect_IntParam : public Standard_Transient
{
public:
//! Creates an IntParam. Initial value is set to zer
Standard_EXPORT IFSelect_IntParam();
//! Commands this IntParam to be bound to a Static
//! Hence, Value will return the value if this Static if it is set
//! Else, Value works on the locally stored value
//! SetValue also will set the value of the Static
//! This works only for a present static of type integer or enum
//! Else, it is ignored
//!
//! If <statname> is empty, disconnects the IntParam from Static
Standard_EXPORT void SetStaticName (const Standard_CString statname);
//! Returns the name of static parameter to which this IntParam
//! is bound, empty if none
Standard_EXPORT Standard_CString StaticName() const;
//! Reads Integer Value of the IntParam. If a StaticName is
//! defined and the Static is set, looks in priority the value
//! of the static
Standard_EXPORT Standard_Integer Value() const;
//! Sets a new Integer Value for the IntParam. If a StaticName is
//! defined and the Static is set, also sets the value of the static
Standard_EXPORT void SetValue (const Standard_Integer val);
DEFINE_STANDARD_RTTIEXT(IFSelect_IntParam,Standard_Transient)
private:
Standard_Integer theval;
TCollection_AsciiString thestn;
};
#endif // _IFSelect_IntParam_HeaderFile

View File

@@ -1,210 +0,0 @@
// 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_ListEditor.hxx>
#include <Interface_InterfaceModel.hxx>
#include <Interface_TypedValue.hxx>
#include <Standard_Type.hxx>
#include <TCollection_HAsciiString.hxx>
IMPLEMENT_STANDARD_RTTIEXT(IFSelect_ListEditor,Standard_Transient)
IFSelect_ListEditor::IFSelect_ListEditor ()
: themax (0) , thetouc (0) { }
IFSelect_ListEditor::IFSelect_ListEditor
(const Handle(Interface_TypedValue)& def, const Standard_Integer max)
: themax (max) , thedef (def) , thetouc (0) { }
void IFSelect_ListEditor::LoadModel (const Handle(Interface_InterfaceModel)& model)
{ themodl = model; }
void IFSelect_ListEditor::LoadValues (const Handle(TColStd_HSequenceOfHAsciiString)& vals)
{
theorig = vals;
ClearEdit();
}
void IFSelect_ListEditor::SetTouched ()
{ thetouc = 1; }
void IFSelect_ListEditor::ClearEdit ()
{
theedit = new TColStd_HSequenceOfHAsciiString();
thestat = new TColStd_HSequenceOfInteger();
if (theorig.IsNull()) return;
Standard_Integer i,nb = theorig->Length();
for (i = 1; i <= nb; i ++) {
theedit->Append (theorig->Value(i));
thestat->Append (0);
}
thetouc = 0;
}
// ######## CHECK ########
static Standard_Boolean CheckValue
(const Handle(TCollection_HAsciiString)& val,
const Handle(Interface_InterfaceModel)& modl,
const Handle(Interface_TypedValue)& thedef)
{
if (val.IsNull() || modl.IsNull() || thedef.IsNull()) return Standard_True;
Interface_ParamType pty = thedef->Type();
if (!thedef->Satisfies(val)) return Standard_False;
if (pty == Interface_ParamIdent && !val.IsNull()) {
if (modl->NextNumberForLabel(val->ToCString(),0) <= 0)
return Standard_False;
}
return Standard_True;
}
// ######## EDITION ########
Standard_Boolean IFSelect_ListEditor::LoadEdited
(const Handle(TColStd_HSequenceOfHAsciiString)& list)
{
if (list.IsNull()) return Standard_False;
Standard_Integer i, nb = list->Length();
if (nb > themax) return Standard_False;
// check values
if (!thedef.IsNull()) {
for (i = 1; i <= nb; i ++) {
Handle(TCollection_HAsciiString) newval = list->Value(i);
if (!CheckValue (newval,themodl,thedef)) return Standard_False;
}
}
// OK
theedit = list;
thestat = new TColStd_HSequenceOfInteger();
for (i = 1; i <= nb; i ++) thestat->Append (1);
thetouc = 1;
return Standard_True;
}
Standard_Boolean IFSelect_ListEditor::SetValue
(const Standard_Integer num, const Handle(TCollection_HAsciiString)& val)
{
if (theedit.IsNull()) return Standard_False;
if (num < 1 || num > theedit->Length()) return Standard_False;
// check value
if (!CheckValue(val,themodl,thedef)) return Standard_False;
// OK
theedit->SetValue (num,val);
thestat->SetValue (num,1);
thetouc = 1;
return Standard_True;
}
Standard_Boolean IFSelect_ListEditor::AddValue
(const Handle(TCollection_HAsciiString)& val, const Standard_Integer atnum)
{
if (theedit.IsNull()) return Standard_False;
if (themax > 0 && theedit->Length() >= themax) return Standard_False;
if (!CheckValue (val,themodl,thedef)) return Standard_False;
if (atnum > 0) {
theedit->InsertBefore (atnum,val);
thestat->InsertBefore (atnum,2);
} else {
theedit->Append (val);
thestat->Append (2);
}
thetouc = 2;
return Standard_True;
}
Standard_Boolean IFSelect_ListEditor::Remove
(const Standard_Integer num, const Standard_Integer howmany)
{
if (theedit.IsNull()) return Standard_False;
Standard_Integer nb = theedit->Length();
if (num < 0) return Standard_False;
if (num == 0) return Remove (nb-howmany,howmany);
if ((num+howmany) > nb) return Standard_False;
theedit->Remove(num,howmany);
thestat->Remove(num,howmany);
thetouc = 3;
return Standard_True;
}
// ######## QUERIES ########
Handle(TColStd_HSequenceOfHAsciiString) IFSelect_ListEditor::OriginalValues () const
{ return theorig; }
Handle(TColStd_HSequenceOfHAsciiString) IFSelect_ListEditor::EditedValues () const
{ return theedit; }
Standard_Integer IFSelect_ListEditor::NbValues (const Standard_Boolean edited) const
{
if (edited) return (theedit.IsNull() ? 0 : theedit->Length());
return (theorig.IsNull() ? 0 : theorig->Length());
}
Handle(TCollection_HAsciiString) IFSelect_ListEditor::Value
(const Standard_Integer num, const Standard_Boolean edited) const
{
Handle(TCollection_HAsciiString) val;
if (edited) {
if (theedit.IsNull()) return val;
if (num < 1 || num > theedit->Length()) return val;
val = theedit->Value(num);
} else {
if (theorig.IsNull()) return val;
if (num < 1 || num > theorig->Length()) return val;
val = theorig->Value(num);
}
return val;
}
Standard_Boolean IFSelect_ListEditor::IsChanged (const Standard_Integer num) const
{
if (thestat.IsNull()) return Standard_False;
if (num < 1 || num > thestat->Length()) return Standard_False;
Standard_Integer stat = thestat->Value(num);
return (stat != 0);
}
Standard_Boolean IFSelect_ListEditor::IsModified (const Standard_Integer num) const
{
if (thestat.IsNull()) return Standard_False;
if (num < 1 || num > thestat->Length()) return Standard_False;
Standard_Integer stat = thestat->Value(num);
return (stat == 1);
}
Standard_Boolean IFSelect_ListEditor::IsAdded (const Standard_Integer num) const
{
if (thestat.IsNull()) return Standard_False;
if (num < 1 || num > thestat->Length()) return Standard_False;
Standard_Integer stat = thestat->Value(num);
return (stat == 2);
}
Standard_Boolean IFSelect_ListEditor::IsTouched () const
{ return (thetouc != 0); }

View File

@@ -1,152 +0,0 @@
// Created on: 1998-07-28
// Created by: Christian CAILLET
// Copyright (c) 1998-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 _IFSelect_ListEditor_HeaderFile
#define _IFSelect_ListEditor_HeaderFile
#include <Standard.hxx>
#include <Standard_Integer.hxx>
#include <TColStd_HSequenceOfHAsciiString.hxx>
#include <TColStd_HSequenceOfInteger.hxx>
#include <Standard_Transient.hxx>
class Interface_TypedValue;
class Interface_InterfaceModel;
class TCollection_HAsciiString;
class IFSelect_ListEditor;
DEFINE_STANDARD_HANDLE(IFSelect_ListEditor, Standard_Transient)
//! A ListEditor is an auxiliary operator for Editor/EditForm
//! I.E. it works on parameter values expressed as strings
//!
//! For a parameter which is a list, it may not be edited in once
//! by just setting a new value (as a string)
//!
//! Firstly, a list can be long (and tedious to be accessed flat)
//! then requires a better way of accessing
//!
//! Moreover, not only its VALUES may be changed (SetValue), but
//! also its LENGTH : items may be added or removed ...
//!
//! Hence, the way of editing a parameter as a list is :
//! - edit it separately, with the help of a ListEditor
//! - it remains possible to prepare a new list of values apart
//! - then give the new list in once to the EditForm
//!
//! An EditList is produced by the Editor, with a basic definition
//! This definition (brought by this class) can be redefined
//! Hence the Editor may produce a specific ListEditor as needed
class IFSelect_ListEditor : public Standard_Transient
{
public:
//! Creates a ListEditor with absolutely no constraint
Standard_EXPORT IFSelect_ListEditor();
//! Creates a ListEditor, for which items of the list to edit are
//! defined by <def>, and <max> describes max length :
//! 0 (D) means no limit
//! value > 0 means : no more the <max> items are allowed
Standard_EXPORT IFSelect_ListEditor(const Handle(Interface_TypedValue)& def, const Standard_Integer max = 0);
//! Loads a Model. It is used to check items of type Entity(Ident)
Standard_EXPORT void LoadModel (const Handle(Interface_InterfaceModel)& model);
//! Loads the original values for the list.
//! Remark : If its length is more then MaxLength, editions remain allowed, except Add
Standard_EXPORT void LoadValues (const Handle(TColStd_HSequenceOfHAsciiString)& vals);
//! Declares this ListEditor to have been touched (whatever action)
Standard_EXPORT void SetTouched();
//! Clears all editions already recorded
Standard_EXPORT void ClearEdit();
//! Loads a new list to replace the older one, in once !
//! By default (can be redefined) checks the length of the list
//! and the value of each item according to the def
//! Items are all recorded as Modified
//!
//! If no def has been given at creation time, no check is done
//! Returns True when done, False if checks have failed ... a
//! specialisation may also lock it by returning always False ...
Standard_EXPORT virtual Standard_Boolean LoadEdited (const Handle(TColStd_HSequenceOfHAsciiString)& list);
//! Sets a new value for the item <num> (in edited list)
//! <val> may be a Null Handle, then the value will be cleared but
//! not removed
//! Returns True when done. False if <num> is out of range or if
//! <val> does not satisfy the definition
Standard_EXPORT virtual Standard_Boolean SetValue (const Standard_Integer num, const Handle(TCollection_HAsciiString)& val);
//! Adds a new item. By default appends (at the end of the list)
//! Can insert before a given rank <num>, if positive
//! Returns True when done. False if MaxLength may be overpassed
//! or if <val> does not satisfy the definition
Standard_EXPORT virtual Standard_Boolean AddValue (const Handle(TCollection_HAsciiString)& val, const Standard_Integer atnum = 0);
//! Removes items from the list
//! By default removes one item. Else, count given by <howmany>
//! Remove from rank <num> included. By default, from the end
//! Returns True when done, False (and does not work) if case of
//! out of range of if <howmany> is greater than current length
Standard_EXPORT virtual Standard_Boolean Remove (const Standard_Integer num = 0, const Standard_Integer howmany = 1);
//! Returns the value from which the edition started
Standard_EXPORT Handle(TColStd_HSequenceOfHAsciiString) OriginalValues() const;
//! Returns the result of the edition
Standard_EXPORT Handle(TColStd_HSequenceOfHAsciiString) EditedValues() const;
//! Returns count of values, edited (D) or original
Standard_EXPORT Standard_Integer NbValues (const Standard_Boolean edited = Standard_True) const;
//! Returns a value given its rank. Edited (D) or Original
//! A Null String means the value is cleared but not removed
Standard_EXPORT Handle(TCollection_HAsciiString) Value (const Standard_Integer num, const Standard_Boolean edited = Standard_True) const;
//! Tells if a value (in edited list) has been changed, i.e.
//! either modified-value, or added
Standard_EXPORT Standard_Boolean IsChanged (const Standard_Integer num) const;
//! Tells if a value (in edited list) has been modified-value
//! (not added)
Standard_EXPORT Standard_Boolean IsModified (const Standard_Integer num) const;
//! Tells if a value (in edited list) has been added (new one)
Standard_EXPORT Standard_Boolean IsAdded (const Standard_Integer num) const;
//! Tells if at least one edition (SetValue-AddValue-Remove) has
//! been recorded
Standard_EXPORT Standard_Boolean IsTouched() const;
DEFINE_STANDARD_RTTIEXT(IFSelect_ListEditor,Standard_Transient)
private:
Standard_Integer themax;
Handle(Interface_TypedValue) thedef;
Standard_Integer thetouc;
Handle(TColStd_HSequenceOfHAsciiString) theorig;
Handle(TColStd_HSequenceOfHAsciiString) theedit;
Handle(TColStd_HSequenceOfInteger) thestat;
Handle(Interface_InterfaceModel) themodl;
};
#endif // _IFSelect_ListEditor_HeaderFile

View File

@@ -1,531 +0,0 @@
// 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_AppliedModifiers.hxx>
#include <IFSelect_ContextModif.hxx>
#include <IFSelect_ContextWrite.hxx>
#include <IFSelect_GeneralModifier.hxx>
#include <IFSelect_ModelCopier.hxx>
#include <IFSelect_Modifier.hxx>
#include <IFSelect_Selection.hxx>
#include <IFSelect_ShareOut.hxx>
#include <IFSelect_ShareOutResult.hxx>
#include <IFSelect_WorkLibrary.hxx>
#include <Interface_Check.hxx>
#include <Interface_CheckIterator.hxx>
#include <Interface_CopyTool.hxx>
#include <Interface_EntityIterator.hxx>
#include <Interface_GeneralLib.hxx>
#include <Interface_Graph.hxx>
#include <Interface_InterfaceModel.hxx>
#include <Interface_Protocol.hxx>
#include <Message.hxx>
#include <Message_Messenger.hxx>
#include <Standard_Type.hxx>
#include <TCollection_AsciiString.hxx>
#include <TCollection_HAsciiString.hxx>
#include <stdio.h>
IMPLEMENT_STANDARD_RTTIEXT(IFSelect_ModelCopier,Standard_Transient)
//#define MISOPOINT
IFSelect_ModelCopier::IFSelect_ModelCopier () { }
void IFSelect_ModelCopier::SetShareOut
(const Handle(IFSelect_ShareOut)& sho)
{ theshareout = sho; }
// ########################################################################
// ######## OPERATIONS DE TRANSFERT GLOBAL (memorise ou non) ########
void IFSelect_ModelCopier::ClearResult ()
{ thefilemodels.Clear(); thefilenames.Clear(); theapplieds.Clear();
theremain.Nullify(); }
Standard_Boolean IFSelect_ModelCopier::AddFile
(const TCollection_AsciiString& filename,
const Handle(Interface_InterfaceModel)& content)
{
Standard_Integer nb = thefilenames.Length();
for (Standard_Integer i = 1; i <= nb; i ++) {
if (filename.IsEmpty()) continue;
if (thefilenames(i).IsEqual(filename)) return Standard_False;
}
Handle(IFSelect_AppliedModifiers) nulapplied;
thefilenames.Append (filename);
thefilemodels.Append (content);
theapplieds.Append (nulapplied);
return Standard_True;
}
Standard_Boolean IFSelect_ModelCopier::NameFile
(const Standard_Integer num,
const TCollection_AsciiString& filename)
{
Standard_Integer nb = thefilenames.Length();
if (num <= 0 || num > nb) return Standard_False;
for (Standard_Integer i = 1; i <= nb; i ++) {
if (filename.IsEmpty()) continue;
if (thefilenames(i).IsEqual(filename)) return Standard_False;
}
thefilenames.SetValue(num,filename);
return Standard_True;
}
Standard_Boolean IFSelect_ModelCopier::ClearFile
(const Standard_Integer num)
{
Standard_Integer nb = thefilenames.Length();
if (num <= 0 || num > nb) return Standard_False;
thefilenames.ChangeValue(num).Clear();
return Standard_True;
}
Standard_Boolean IFSelect_ModelCopier::SetAppliedModifiers
(const Standard_Integer num, const Handle(IFSelect_AppliedModifiers)& applied)
{
Standard_Integer nb = theapplieds.Length();
if (num <= 0 || num > nb) return Standard_False;
theapplieds.SetValue(num,applied);
return Standard_True;
}
Standard_Boolean IFSelect_ModelCopier::ClearAppliedModifiers
(const Standard_Integer num)
{
Standard_Integer nb = theapplieds.Length();
if (num <= 0 || num > nb) return Standard_False;
theapplieds.ChangeValue(num).Nullify();
return Standard_True;
}
// .... Copy : Opere les Transferts, les Memorise (pas d envoi fichier ici)
Interface_CheckIterator IFSelect_ModelCopier::Copy
(IFSelect_ShareOutResult& eval,
const Handle(IFSelect_WorkLibrary)& WL,
const Handle(Interface_Protocol)& protocol)
{
Interface_CopyTool TC (eval.Graph().Model(), protocol);
return Copying (eval,WL,protocol,TC);
}
// Copy Interne
Interface_CheckIterator IFSelect_ModelCopier::Copying
(IFSelect_ShareOutResult& eval,
const Handle(IFSelect_WorkLibrary)& WL,
const Handle(Interface_Protocol)& protocol,
Interface_CopyTool& TC)
{
Message::SendInfo() << "** WorkSession : Copying split data before sending"<<std::endl;
const Interface_Graph& G = eval.Graph();
Interface_CheckIterator checks;
theshareout = eval.ShareOut();
theremain = new TColStd_HArray1OfInteger(0,G.Size()); theremain->Init(0);
for (eval.Evaluate(); eval.More(); eval.Next()) {
Handle(Interface_InterfaceModel) model;
TCollection_AsciiString filename = eval.FileName();
Standard_Integer dispnum = eval.DispatchRank();
Standard_Integer numod, nbmod;
eval.PacketsInDispatch (numod,nbmod);
Handle(IFSelect_AppliedModifiers) curapp;
CopiedModel (G, WL,protocol, eval.PacketRoot(), filename,dispnum,numod, TC,
model, curapp,checks);
AddFile (filename, model);
theapplieds.SetValue (theapplieds.Length(), curapp);
}
theshareout->SetLastRun (theshareout->NbDispatches());
checks.SetName ("X-STEP WorkSession : Split Copy (no Write)");
return checks;
}
// Send a deux arguments : Envoi Fichier du Resultat deja memorise
Interface_CheckIterator IFSelect_ModelCopier::SendCopied
(const Handle(IFSelect_WorkLibrary)& WL,
const Handle(Interface_Protocol)& protocol)
{
Message::SendInfo() << "** WorkSession : Sending split data already copied"<<std::endl;
Standard_Integer nb = NbFiles();
Interface_CheckIterator checks;
if (nb > 0) {
for (Standard_Integer i = 1; i <= nb; i ++) {
if (FileName(i).Length() == 0) continue;
Handle(IFSelect_AppliedModifiers) curapp = theapplieds.Value(i);
IFSelect_ContextWrite ctx (FileModel(i),protocol,curapp,FileName(i).ToCString());
Standard_Boolean res = WL->WriteFile (ctx);
Interface_CheckIterator checklst = ctx.CheckList();
checks.Merge(checklst);
// (FileName(i).ToCString(), FileModel(i),protocol,curapp,checks);
// if (!checks.IsEmpty(Standard_False)) {
// sout<<" ** On Sending File n0."<<i<<", Check Messages : **"<<std::endl;
// checks.Print (sout,Standard_False);
// }
if (!res) {
char mess[100]; sprintf(mess,"Split Send (WriteFile) abandon on file n0.%d",i);
checks.CCheck(0)->AddFail (mess);
Message::SendInfo() << " ** Sending File n0."<<i<<" has failed, abandon **"<<std::endl;
return checks;
}
AddSentFile (FileName(i).ToCString());
}
ClearResult();
}
checks.SetName ("X-STEP WorkSession : Split Send (Copy+Write)");
return checks;
}
// .... Send a 4 arguments : Calcul du Transfert et Envoi sur Fichier
Interface_CheckIterator IFSelect_ModelCopier::Send
(IFSelect_ShareOutResult& eval,
const Handle(IFSelect_WorkLibrary)& WL,
const Handle(Interface_Protocol)& protocol)
{
Interface_CopyTool TC (eval.Graph().Model(), protocol);
return Sending (eval,WL,protocol,TC);
}
Interface_CheckIterator IFSelect_ModelCopier::Sending
(IFSelect_ShareOutResult& eval,
const Handle(IFSelect_WorkLibrary)& WL,
const Handle(Interface_Protocol)& protocol,
Interface_CopyTool& TC)
{
const Interface_Graph& G = eval.Graph();
Interface_CheckIterator checks;
Standard_Integer i = 0;
Message::SendInfo() << "** WorkSession : Copying then sending split data"<<std::endl;
theshareout = eval.ShareOut();
theremain = new TColStd_HArray1OfInteger(0,G.Size()); theremain->Init(0);
for (eval.Evaluate(); eval.More(); eval.Next()) {
i ++;
Handle(Interface_InterfaceModel) model;
TCollection_AsciiString filename = eval.FileName();
Standard_Integer dispnum = eval.DispatchRank();
Standard_Integer numod, nbmod;
eval.PacketsInDispatch (numod,nbmod);
Handle(IFSelect_AppliedModifiers) curapp;
CopiedModel (G, WL,protocol, eval.PacketRoot(), filename,dispnum,numod, TC,
model, curapp, checks);
IFSelect_ContextWrite ctx (model,protocol,curapp,filename.ToCString());
Standard_Boolean res = WL->WriteFile (ctx);
Interface_CheckIterator checklst = ctx.CheckList();
checks.Merge(checklst);
// (filename.ToCString(), model, protocol, curapp, checks);
// if (!checks.IsEmpty(Standard_False)) {
// sout<<" ** On Sending File "<<filename<<", Check Messages : **"<<std::endl;
// checks.Print (sout,model,Standard_False);
// }
if (!res) {
char mess[100]; sprintf(mess,"Split Send (WriteFile) abandon on file n0.%d",i);
checks.CCheck(0)->AddFail (mess);
Message::SendInfo() << " ** Sending File "<<filename<<" has failed, abandon **"<<std::endl;
checks.SetName ("X-STEP WorkSession : Split Send (only Write)");
return checks;
}
AddSentFile (filename.ToCString());
}
theshareout->SetLastRun (theshareout->NbDispatches());
checks.SetName ("X-STEP WorkSession : Split Send (only Write)");
return checks;
}
// .... SendAll : Donnees a tranferer dans G, aucun split, envoi sur fichier
Interface_CheckIterator IFSelect_ModelCopier::SendAll
(const Standard_CString filename, const Interface_Graph& G,
const Handle(IFSelect_WorkLibrary)& WL,
const Handle(Interface_Protocol)& protocol)
{
Interface_CheckIterator checks;
checks.SetName ("X-STEP WorkSession : Send All");
Message::SendInfo() << "** WorkSession : Sending all data"<<std::endl;
Handle(Interface_InterfaceModel) model = G.Model();
if (model.IsNull() || protocol.IsNull() || WL.IsNull()) return checks;
Interface_CopyTool TC (model, protocol);
Standard_Integer i, nb = model->NbEntities();
for (i = 1; i <= nb; i ++) TC.Bind (model->Value(i),model->Value(i));
Interface_EntityIterator pipo;
Handle(Interface_InterfaceModel) newmod;
Handle(IFSelect_AppliedModifiers) applied;
CopiedModel (G, WL,protocol,pipo,TCollection_AsciiString(filename),
0,0,TC,newmod, applied,checks);
IFSelect_ContextWrite ctx (model,protocol,applied,filename);
Standard_Boolean res = WL->WriteFile (ctx);
Interface_CheckIterator checklst = ctx.CheckList();
checks.Merge(checklst);
if (!res) checks.CCheck(0)->AddFail ("SendAll (WriteFile) has failed");
// if (!checks.IsEmpty(Standard_False)) {
// Message::SendWarning() <<
// " ** SendAll has produced Check Messages : **"<<std::endl;
// checks.Print (sout,model,Standard_False);
// }
return checks;
}
// .... SendSelected : Donnees a tranferer dans G, filtrees par iter,
// aucun split, envoi sur fichier
Interface_CheckIterator IFSelect_ModelCopier::SendSelected
(const Standard_CString filename, const Interface_Graph& G,
const Handle(IFSelect_WorkLibrary)& WL,
const Handle(Interface_Protocol)& protocol,
const Interface_EntityIterator& list)
{
Interface_CheckIterator checks;
checks.SetName ("X-STEP WorkSession : Send Selected");
Message::SendInfo() << "** WorkSession : Sending selected data"<<std::endl;
Handle(Interface_InterfaceModel) original = G.Model();
if (original.IsNull() || protocol.IsNull() || WL.IsNull()) return checks;
Handle(Interface_InterfaceModel) newmod = original->NewEmptyModel();
Interface_CopyTool TC (original, protocol);
TC.FillModel(newmod); // pour Header ...
// Pas de copie : AddWithRefs plus declaration de Bind
Interface_GeneralLib lib(protocol);
for (list.Start(); list.More(); list.Next()) {
newmod->AddWithRefs (list.Value(),lib);
}
Standard_Integer i, nb = newmod->NbEntities();
for (i = 1; i <= nb; i ++) TC.Bind (newmod->Value(i),newmod->Value(i));
if (theremain.IsNull())
{ theremain = new TColStd_HArray1OfInteger(0,G.Size()); theremain->Init(0); }
Interface_EntityIterator pipo;
Handle(IFSelect_AppliedModifiers) applied;
CopiedModel (G, WL,protocol, pipo,TCollection_AsciiString(filename),
0,0,TC,newmod, applied,checks);
// Alimenter Remaining : les entites copiees sont a noter
Handle(Standard_Transient) ent1,ent2;
for (Standard_Integer ic = TC.LastCopiedAfter (0,ent1,ent2); ic > 0;
ic = TC.LastCopiedAfter (ic,ent1,ent2) ) {
if (ic <= theremain->Upper())
theremain->SetValue(ic,theremain->Value(ic)+1);
}
IFSelect_ContextWrite ctx (newmod,protocol,applied,filename);
Standard_Boolean res = WL->WriteFile (ctx);
Interface_CheckIterator checklst = ctx.CheckList();
checks.Merge(checklst);
if (!res) checks.CCheck(0)->AddFail ("SendSelected (WriteFile) has failed");
// if (!checks.IsEmpty(Standard_False)) {
// Message::SendWarning() <<
// " ** SendSelected has produced Check Messages : **"<<std::endl;
// checks.Print (sout,original,Standard_False);
// }
return checks;
}
// ##########################################################################
// ######## UN TRANSFERT UNITAIRE (avec Modifications) ########
void IFSelect_ModelCopier::CopiedModel
(const Interface_Graph& G,
const Handle(IFSelect_WorkLibrary)& WL,
const Handle(Interface_Protocol)& protocol,
const Interface_EntityIterator& tocopy,
const TCollection_AsciiString& filename,
const Standard_Integer dispnum, const Standard_Integer /* numod */,
Interface_CopyTool& TC,
Handle(Interface_InterfaceModel)& newmod,
Handle(IFSelect_AppliedModifiers)& applied,
Interface_CheckIterator& checks) const
{
// ... Premiere partie "standard" : remplissage du modele ...
// On cree le Modele, on le remplit avec les Entites, et avec le Header depart
// ATTENTION : dispnum = 0 signifie prendre modele original, ne rien copier
// et aussi : pas de Dispatch (envoi en bloc)
applied.Nullify();
Handle(Interface_InterfaceModel) original = G.Model();
if (dispnum > 0) {
newmod = original->NewEmptyModel();
TC.Clear();
WL->CopyModel (original,newmod,tocopy,TC);
Handle(Standard_Transient) ent1,ent2;
// Alimenter Remaining : les entites copiees sont a noter
for (Standard_Integer ic = TC.LastCopiedAfter (0,ent1,ent2); ic > 0;
ic = TC.LastCopiedAfter (ic,ent1,ent2) ) {
if (ic <= theremain->Upper())
theremain->SetValue(ic,theremain->Value(ic)+1);
}
}
else if (newmod.IsNull()) newmod = original;
// ... Ensuite : On prend en compte les Model Modifiers ...
Standard_Integer nbmod = 0;
if (!theshareout.IsNull()) nbmod = theshareout->NbModifiers(Standard_True);
Standard_Integer i; // svv Jan11 2000 : porting on DEC
for (i = 1; i <= nbmod; i ++) {
Handle(IFSelect_Modifier) unmod = theshareout->ModelModifier(i);
// D abord, critere Dispatch/Packet
if (dispnum > 0)
if (!unmod->Applies (theshareout->Dispatch(dispnum))) continue;
IFSelect_ContextModif ctx (G,TC,filename.ToCString());
// Ensuite, la Selection
Handle(IFSelect_Selection) sel = unmod->Selection();
if (!sel.IsNull()) {
Interface_EntityIterator entiter = sel->UniqueResult(G);
ctx.Select (entiter);
}
if (ctx.IsForNone()) continue;
unmod->Perform (ctx,newmod,protocol,TC);
Interface_CheckIterator checklst = ctx.CheckList();
checks.Merge (checklst);
// Faut-il enregistrer les erreurs dans newmod ? bonne question
// if (!checks.IsEmpty(Standard_False)) {
// Message::SendWarning() <<
// " Messages on Copied Model n0 "<<numod<<", Dispatch Rank "<<dispnum<<std::endl;
// checks.Print(sout,newmod,Standard_False);
// }
}
// ... Puis les File Modifiers : en fait, on les enregistre ...
nbmod = 0;
if (!theshareout.IsNull()) nbmod = theshareout->NbModifiers(Standard_False);
if (nbmod == 0) return;
applied = new IFSelect_AppliedModifiers (nbmod,newmod->NbEntities());
for (i = 1; i <= nbmod; i ++) {
Handle(IFSelect_GeneralModifier) unmod = theshareout->GeneralModifier(Standard_False,i);
// D abord, critere Dispatch/Packet
if (dispnum > 0)
if (!unmod->Applies (theshareout->Dispatch(dispnum))) continue;
// Ensuite, la Selection
Handle(IFSelect_Selection) sel = unmod->Selection();
if (sel.IsNull()) applied->AddModif (unmod); // vide -> on prend tout
else {
Interface_EntityIterator list = sel->UniqueResult(G);
Handle(Standard_Transient) newent;
// Entites designees par la Selection et Copiees ?
// -> s ilyena au moins une, le Modifier s applique, sinon il est rejete
// -> et cette liste est exploitable par le Modifier ...
for (list.Start(); list.More(); list.Next()) {
if (TC.Search (list.Value(),newent))
applied->AddNum (newmod->Number(newent));
}
}
}
}
void IFSelect_ModelCopier::CopiedRemaining
(const Interface_Graph& G, const Handle(IFSelect_WorkLibrary)& WL,
Interface_CopyTool& TC, Handle(Interface_InterfaceModel)& newmod)
{
Handle(Interface_InterfaceModel) original = G.Model();
// Interface_CopyTool TC(original,protocol);
newmod = original->NewEmptyModel();
TC.Clear();
Interface_EntityIterator tocopy;
Standard_Integer nb = G.Size();
theremain = new TColStd_HArray1OfInteger(0,nb+1); theremain->Init(0);
for (Standard_Integer i = 1; i <= nb; i ++) {
if (G.Status(i) == 0) tocopy.AddItem (original->Value(i));
else theremain->SetValue(i,-1); // ?? -1
}
WL->CopyModel (original,newmod,tocopy,TC);
if (newmod->NbEntities() == 0) newmod.Nullify();
else {
// CE QUI SUIT NE DOIT PAS ETRE SUPPRIME ! cf theremain
Handle(Standard_Transient) ent1,ent2;
for (Standard_Integer ic = TC.LastCopiedAfter (0,ent1,ent2); ic > 0;
ic = TC.LastCopiedAfter (ic,ent1,ent2) ) {
if (ic <= theremain->Upper())
theremain->SetValue(ic,1);
}
// qq impressions de mise au point
#ifdef MISOPOINT
std::cout << " Remaining Model : " << newmod->NbEntities() << " Entities"<<std::endl;
Standard_Integer ne = 0;
for (i = 1; i <= nb; i ++) {
if (theremain->Value(i) == 0) {
if (ne == 0) std::cout << " Refractaires : ";
ne ++; std::cout << " " << i;
}
}
if (ne > 0) std::cout << " -- " << ne << " Entities" << std::endl;
else std::cout<<" -- Remaining data complete"<<std::endl;
#endif
}
}
Standard_Boolean IFSelect_ModelCopier::SetRemaining
(Interface_Graph& CG) const
{
Standard_Integer nb = CG.Size();
if (theremain.IsNull()) return (nb == 0);
if (nb != theremain->Upper()) return Standard_False;
for (Standard_Integer i = 1; i <= nb; i ++) {
if (CG.Status(i) >= 0) CG.SetStatus(i,CG.Status(i)+theremain->Value(i));
}
theremain->Init(0);
return Standard_True;
}
// ##########################################################################
// ######## RESULTAT de la Memorisation des Transferts ########
Standard_Integer IFSelect_ModelCopier::NbFiles () const
{ return thefilemodels.Length(); }
TCollection_AsciiString IFSelect_ModelCopier::FileName
(const Standard_Integer num) const
{ return thefilenames.Value(num); }
Handle(Interface_InterfaceModel) IFSelect_ModelCopier::FileModel
(const Standard_Integer num) const
{ return thefilemodels.Value(num); }
Handle(IFSelect_AppliedModifiers) IFSelect_ModelCopier::AppliedModifiers
(const Standard_Integer num) const
{ return theapplieds.Value(num); }
void IFSelect_ModelCopier::BeginSentFiles
(const Handle(IFSelect_ShareOut)& sho, const Standard_Boolean record)
{
thesentfiles.Nullify();
if (record) thesentfiles = new TColStd_HSequenceOfHAsciiString();
// et numerotation des fichiers par defaut : detenue par ShareOut
if (sho.IsNull()) return;
Standard_Integer lastrun = sho->LastRun();
sho->ClearResult (Standard_True);
sho->SetLastRun (lastrun); // on ne s interesse quaux numeros
}
void IFSelect_ModelCopier::AddSentFile (const Standard_CString filename)
{ if (!thesentfiles.IsNull())
thesentfiles->Append(new TCollection_HAsciiString(filename)); }
Handle(TColStd_HSequenceOfHAsciiString) IFSelect_ModelCopier::SentFiles () const
{ return thesentfiles; }

View File

@@ -1,260 +0,0 @@
// Created on: 1993-08-26
// 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 _IFSelect_ModelCopier_HeaderFile
#define _IFSelect_ModelCopier_HeaderFile
#include <Standard.hxx>
#include <Standard_Type.hxx>
#include <IFSelect_SequenceOfInterfaceModel.hxx>
#include <TColStd_SequenceOfAsciiString.hxx>
#include <IFSelect_SequenceOfAppliedModifiers.hxx>
#include <TColStd_HArray1OfInteger.hxx>
#include <TColStd_HSequenceOfHAsciiString.hxx>
#include <Standard_Transient.hxx>
#include <Standard_Integer.hxx>
class IFSelect_ShareOut;
class TCollection_AsciiString;
class Interface_InterfaceModel;
class IFSelect_AppliedModifiers;
class Interface_CheckIterator;
class IFSelect_ShareOutResult;
class IFSelect_WorkLibrary;
class Interface_Protocol;
class Interface_CopyTool;
class Interface_Graph;
class Interface_EntityIterator;
class IFSelect_ModelCopier;
DEFINE_STANDARD_HANDLE(IFSelect_ModelCopier, Standard_Transient)
//! This class performs the Copy operations involved by the
//! description of a ShareOut (evaluated by a ShareOutResult)
//! plus, if there are, the Modifications on the results, with
//! the help of Modifiers. Each Modifier can work on one or more
//! resulting packets, according to its criteria : it operates on
//! a Model once copied and filled with the content of the packet.
//!
//! Modifiers can be :
//! - Model Modifiers, inheriting from the specific class Modifier
//! able to run on the content of a Model (header or entities),
//! activated by the ModelCopier itself
//! - File Modifiers, inheriting directly from GeneralModifier,
//! intended to be activated under the control of a WorkLibrary,
//! once the Model has been produced (i.e. to act on output
//! format, or other specific file features)
//!
//! The Copy operations can be :
//! - immediately put to files : for each packet, a Model is
//! created and filled, then the file is output, at that's all
//! - memorized : for each packet, a Model is created and filled,
//! it is memorized with the corresponding file name.
//! it is possible to query the result of memorization (list of
//! produced Models and their file names)
//! -> it is also possible to send it into the files :
//! once files are written, the result is cleared
//!
//! In addition, a list of really written files is managed :
//! A first call to BeginSentFiles clears the list and commands,
//! either to begin a new list, or to stop recording it. A call
//! to SentFiles returns the list (if recording has been required)
//! This list allows to globally exploit the set of produced files
//!
//! Remark : For operations which concern specific Entities, see
//! also in package IFAdapt : a sub-class of ModelCopier allows
//! to work with EntityModifier, in addition to Modifier itself
//! which still applies to a whole copied Model.
class IFSelect_ModelCopier : public Standard_Transient
{
public:
//! Creates an empty ModelCopier
Standard_EXPORT IFSelect_ModelCopier();
//! Sets the ShareOut, which is used to define Modifiers to apply
Standard_EXPORT void SetShareOut (const Handle(IFSelect_ShareOut)& sho);
//! Clears the list of produced Models
Standard_EXPORT void ClearResult();
//! Records a new File to be sent, as a couple
//! (Name as AsciiString, Content as InterfaceModel)
//! Returns True if Done, False if <filename> is already attached
//! to another File
Standard_EXPORT Standard_Boolean AddFile (const TCollection_AsciiString& filename, const Handle(Interface_InterfaceModel)& content);
//! Changes the Name attached to a File which was formerly defined
//! by a call to AddFile
//! Returns True if Done, False else : if <num> out of range or if
//! the new <filename> is already attached to another File
//! Remark : Giving an empty File Name is equivalent to ClearFile
Standard_EXPORT Standard_Boolean NameFile (const Standard_Integer num, const TCollection_AsciiString& filename);
//! Clears the Name attached to a File which was formerly defined
//! by a call to AddFile. This Clearing can be undone by a call to
//! NameFile (with same <num>)
//! Returns True if Done, False else : if <num> is out of range
Standard_EXPORT Standard_Boolean ClearFile (const Standard_Integer num);
//! Sets a list of File Modifiers to be applied on a file
Standard_EXPORT Standard_Boolean SetAppliedModifiers (const Standard_Integer num, const Handle(IFSelect_AppliedModifiers)& applied);
//! Clears the list of File Modifiers to be applied on a file
Standard_EXPORT Standard_Boolean ClearAppliedModifiers (const Standard_Integer num);
//! Performs the Copy Operations, which include the Modifications
//! defined by the list of Modifiers. Memorizes the result, as a
//! list of InterfaceModels with the corresponding FileNames
//! They can then be sent, by the method Send, or queried
//! Copy calls internal method Copying.
//! Returns the produced CheckList
Standard_EXPORT Interface_CheckIterator Copy (IFSelect_ShareOutResult& eval, const Handle(IFSelect_WorkLibrary)& WL, const Handle(Interface_Protocol)& protocol);
//! Sends the formerly defined results (see method Copy) to files,
//! then clears it
//! Remark : A Null File Name cause file to be not produced
Standard_EXPORT Interface_CheckIterator SendCopied (const Handle(IFSelect_WorkLibrary)& WL, const Handle(Interface_Protocol)& protocol);
//! Performs the Copy Operations (which include the Modifications)
//! and Sends the result on files, without memorizing it.
//! (the memorized result is ignored : neither queried not filled)
Standard_EXPORT Interface_CheckIterator Send (IFSelect_ShareOutResult& eval, const Handle(IFSelect_WorkLibrary)& WL, const Handle(Interface_Protocol)& protocol);
//! Sends a model (defined in <G>) into one file, without managing
//! remaining data, already sent files, etc. Applies the Model and
//! File Modifiers.
//! Returns True if well done, False else
Standard_EXPORT Interface_CheckIterator SendAll (const Standard_CString filename, const Interface_Graph& G, const Handle(IFSelect_WorkLibrary)& WL, const Handle(Interface_Protocol)& protocol);
//! Sends a part of a model into one file. Model is gotten from
//! <G>, the part is defined in <iter>.
//! Remaining data are managed and can be later be worked on.
//! Returns True if well done, False else
Standard_EXPORT Interface_CheckIterator SendSelected (const Standard_CString filename, const Interface_Graph& G, const Handle(IFSelect_WorkLibrary)& WL, const Handle(Interface_Protocol)& protocol, const Interface_EntityIterator& iter);
//! Produces a Model copied from the Remaining List as <newmod>
//! <newmod> is a Null Handle if this list is empty
//! <WL> performs the copy by using <TC>
//! <TC> is assumed to have been defined with the starting model
//! same as defined by <G>.
Standard_EXPORT void CopiedRemaining (const Interface_Graph& G, const Handle(IFSelect_WorkLibrary)& WL, Interface_CopyTool& TC, Handle(Interface_InterfaceModel)& newmod);
//! Updates Graph status for remaining data, for each entity :
//! - Entities just Sent to file or Copied (by CopiedRemaining)
//! have their status set to 1
//! - the other keep their former status (1 for Send/Copied,
//! 0 for Remaining)
//! These status are computed by Copying/Sending/CopiedRemaining
//! Then, SetRemaining updates graph status, and mustr be called
//! just after one of these method has been called
//! Returns True if done, False if remaining info if not in phase
//! which the Graph (not same counts of items)
Standard_EXPORT Standard_Boolean SetRemaining (Interface_Graph& CG) const;
//! Returns the count of Files produced, i.e. the count of Models
//! memorized (produced by the mmethod Copy) with their file names
Standard_EXPORT Standard_Integer NbFiles() const;
//! Returns the File Name for a file given its rank
//! It is empty after a call to ClearFile on same <num>
Standard_EXPORT TCollection_AsciiString FileName (const Standard_Integer num) const;
//! Returns the content of a file before sending, under the form
//! of an InterfaceModel, given its rank
Standard_EXPORT Handle(Interface_InterfaceModel) FileModel (const Standard_Integer num) const;
//! Returns the list of File Modifiers to be applied on a file
//! when it will be sent, as computed by CopiedModel :
//! If it is a null handle, no File Modifier has to be applied.
Standard_EXPORT Handle(IFSelect_AppliedModifiers) AppliedModifiers (const Standard_Integer num) const;
//! Begins a sequence of recording the really sent files
//! <sho> : the default file numbering is cleared
//! If <record> is False, clears the list and stops recording
//! If <record> is True, clears the list and commands recording
//! Creation time corresponds to "stop recording"
Standard_EXPORT void BeginSentFiles (const Handle(IFSelect_ShareOut)& sho, const Standard_Boolean record);
//! Adds the name of a just sent file, if BeginSentFiles
//! has commanded recording; else does nothing
//! It is called by methods SendCopied Sending
Standard_EXPORT void AddSentFile (const Standard_CString filename);
//! Returns the list of recorded names of sent files. Can be empty
//! (if no file has been sent). Returns a Null Handle if
//! BeginSentFiles has stopped recording.
Standard_EXPORT Handle(TColStd_HSequenceOfHAsciiString) SentFiles() const;
DEFINE_STANDARD_RTTIEXT(IFSelect_ModelCopier,Standard_Transient)
protected:
//! Internal routine which does the effective Copy. It allows to
//! work, either with a standard CopyTool, or a specialised one
//! Copying itself is done by <WL> which uses a CopyTool
Standard_EXPORT Interface_CheckIterator Copying (IFSelect_ShareOutResult& eval, const Handle(IFSelect_WorkLibrary)& WL, const Handle(Interface_Protocol)& protocol, Interface_CopyTool& TC);
//! Internal routine which does the effective Send. It allows to
//! work, either with a standard CopyTool, or a specialised one
Standard_EXPORT Interface_CheckIterator Sending (IFSelect_ShareOutResult& eval, const Handle(IFSelect_WorkLibrary)& WL, const Handle(Interface_Protocol)& protocol, Interface_CopyTool& TC);
//! Performs the Copy of a unitary Packet
//! Input parameters are :
//! <G> is the graph which defines the starting entities, it
//! contains the original InterfaceModel
//! <WL> performs the copy by using <TC>
//! <protocol> is the used protocol (can be useful for Modifiers)
//! <topcopy> is the list of Entities which are the Roots of the
//! packet to be copied
//! <filename> is the name of the file which will receive it
//! <dispid> is the Identifier of the Dispatch which have produced
//! this packet, <numod> is the rank of the packet for this
//! Dispatch
//! <TC> is a CopyTool, which performs the copy
//!
//! Returned values (as arguments) are :
//! <newmod> is the result of the copy, as a new InterfaceModel on
//! which Model Modifiers have already been applied (if there are)
//! <applied> determines the File Modifiers which remain to be
//! applied (when the file itself will be output) : for each File
//! Modifier recorded in <me>, <applied>'s Value is :
//! - Null if this Modifier has not to be applied
//! - an empty list if this Modifier has to be applied without
//! distinguishing specific entities
//! - a list of numbers of entities in <model> if this Modifier
//! concerns particularly these entities (which are the results
//! of copying the result of its input selection)
//! <checks> is the produced Check List (by Modifiers as required)
//!
//! Warning : File Modifiers are evaluated at the time of Copy itself
//! If their list is changed between this Copy and the Sending
//! itself of the file, these changes are ignored
Standard_EXPORT void CopiedModel (const Interface_Graph& G, const Handle(IFSelect_WorkLibrary)& WL, const Handle(Interface_Protocol)& protocol, const Interface_EntityIterator& topcopy, const TCollection_AsciiString& filename, const Standard_Integer dispnum, const Standard_Integer numod, Interface_CopyTool& TC, Handle(Interface_InterfaceModel)& newmod, Handle(IFSelect_AppliedModifiers)& applied, Interface_CheckIterator& checks) const;
private:
IFSelect_SequenceOfInterfaceModel thefilemodels;
TColStd_SequenceOfAsciiString thefilenames;
IFSelect_SequenceOfAppliedModifiers theapplieds;
Handle(IFSelect_ShareOut) theshareout;
Handle(TColStd_HArray1OfInteger) theremain;
Handle(TColStd_HSequenceOfHAsciiString) thesentfiles;
};
#endif // _IFSelect_ModelCopier_HeaderFile

View File

@@ -1,41 +0,0 @@
// 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); }

View File

@@ -1,56 +0,0 @@
// 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_ContextModif.hxx>
#include <IFSelect_EditForm.hxx>
#include <IFSelect_ModifEditForm.hxx>
#include <Interface_CopyTool.hxx>
#include <Interface_InterfaceModel.hxx>
#include <Interface_Protocol.hxx>
#include <Standard_Type.hxx>
#include <TCollection_AsciiString.hxx>
IMPLEMENT_STANDARD_RTTIEXT(IFSelect_ModifEditForm,IFSelect_Modifier)
IFSelect_ModifEditForm::IFSelect_ModifEditForm
(const Handle(IFSelect_EditForm)& editform)
: IFSelect_Modifier (Standard_False) { theedit = editform; }
Handle(IFSelect_EditForm) IFSelect_ModifEditForm::EditForm () const
{ return theedit; }
void IFSelect_ModifEditForm::Perform
(IFSelect_ContextModif& ctx,
const Handle(Interface_InterfaceModel)& target,
const Handle(Interface_Protocol)& /*protocol*/,
Interface_CopyTool& /*TC*/) const
{
for (ctx.Start(); ctx.More(); ctx.Next()) {
Standard_Boolean done = theedit->ApplyData(ctx.ValueResult(),target);
if (done) ctx.Trace();
else ctx.AddWarning (ctx.ValueResult(),"EditForm could not be applied");
}
}
TCollection_AsciiString IFSelect_ModifEditForm::Label () const
{
Standard_CString editlab = theedit->Label();
TCollection_AsciiString lab ("Apply EditForm");
if (editlab && editlab[0] != '\0') {
lab.AssignCat (" : ");
lab.AssignCat (editlab);
}
return lab;
}

View File

@@ -1,78 +0,0 @@
// Created on: 1998-02-27
// Created by: Christian CAILLET
// Copyright (c) 1998-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 _IFSelect_ModifEditForm_HeaderFile
#define _IFSelect_ModifEditForm_HeaderFile
#include <Standard.hxx>
#include <Standard_Type.hxx>
#include <IFSelect_Modifier.hxx>
class IFSelect_EditForm;
class IFSelect_ContextModif;
class Interface_InterfaceModel;
class Interface_Protocol;
class Interface_CopyTool;
class TCollection_AsciiString;
class IFSelect_ModifEditForm;
DEFINE_STANDARD_HANDLE(IFSelect_ModifEditForm, IFSelect_Modifier)
//! This modifier applies an EditForm on the entities selected
class IFSelect_ModifEditForm : public IFSelect_Modifier
{
public:
//! Creates a ModifEditForm. It may not change the graph
Standard_EXPORT IFSelect_ModifEditForm(const Handle(IFSelect_EditForm)& editform);
//! Returns the EditForm
Standard_EXPORT Handle(IFSelect_EditForm) EditForm() const;
//! Acts by applying an EditForm to entities, selected or all model
Standard_EXPORT void Perform (IFSelect_ContextModif& ctx, const Handle(Interface_InterfaceModel)& target, const Handle(Interface_Protocol)& protocol, Interface_CopyTool& TC) const Standard_OVERRIDE;
//! Returns Label as "Apply EditForm <+ label of EditForm>"
Standard_EXPORT TCollection_AsciiString Label() const Standard_OVERRIDE;
DEFINE_STANDARD_RTTIEXT(IFSelect_ModifEditForm,IFSelect_Modifier)
protected:
private:
Handle(IFSelect_EditForm) theedit;
};
#endif // _IFSelect_ModifEditForm_HeaderFile

View File

@@ -1,46 +0,0 @@
// 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_ContextModif.hxx>
#include <IFSelect_ModifReorder.hxx>
#include <Interface_CopyTool.hxx>
#include <Interface_EntityIterator.hxx>
#include <Interface_InterfaceModel.hxx>
#include <Interface_Protocol.hxx>
#include <Interface_ShareTool.hxx>
#include <Standard_Type.hxx>
#include <TCollection_AsciiString.hxx>
IMPLEMENT_STANDARD_RTTIEXT(IFSelect_ModifReorder,IFSelect_Modifier)
IFSelect_ModifReorder::IFSelect_ModifReorder (const Standard_Boolean rootlast)
: IFSelect_Modifier (Standard_True) { thertl = rootlast; }
void IFSelect_ModifReorder::Perform (IFSelect_ContextModif& ctx,
const Handle(Interface_InterfaceModel)& target,
const Handle(Interface_Protocol)& /*protocol*/,
Interface_CopyTool& /*TC*/) const
{
Interface_ShareTool sht (ctx.OriginalGraph());
Interface_EntityIterator list = sht.All (ctx.OriginalModel(),thertl);
target->ClearEntities();
for (list.Start(); list.More(); list.Next()) target->AddEntity (list.Value());
}
TCollection_AsciiString IFSelect_ModifReorder::Label () const
{
Standard_CString astr = (Standard_CString ) ( thertl ? "Reorder, Roots last" : "Reorder, Roots first");
return TCollection_AsciiString( astr ) ;
// ( thertl ? "Reorder, Roots last" : "Reorder, Roots first");
}

View File

@@ -1,82 +0,0 @@
// Created on: 1996-03-15
// Created by: Christian CAILLET
// Copyright (c) 1996-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 _IFSelect_ModifReorder_HeaderFile
#define _IFSelect_ModifReorder_HeaderFile
#include <Standard.hxx>
#include <Standard_Type.hxx>
#include <IFSelect_Modifier.hxx>
class IFSelect_ContextModif;
class Interface_InterfaceModel;
class Interface_Protocol;
class Interface_CopyTool;
class TCollection_AsciiString;
class IFSelect_ModifReorder;
DEFINE_STANDARD_HANDLE(IFSelect_ModifReorder, IFSelect_Modifier)
//! This modifier reorders a whole model from its roots, i.e.
//! according to <rootlast> status, it considers each of its
//! roots, then it orders all its shared entities at any level,
//! the result begins by the lower level entities ... ends by
//! the roots.
class IFSelect_ModifReorder : public IFSelect_Modifier
{
public:
//! Creates a ModifReorder. It may change the graph (it does !)
//! If <rootlast> is True (D), roots are set at the end of packets
//! Else, they are set at beginning (as done by AddWithRefs)
Standard_EXPORT IFSelect_ModifReorder(const Standard_Boolean rootlast = Standard_True);
//! Acts by computing orders (by method All from ShareTool) then
//! forcing them in the model. Remark that selection is ignored :
//! ALL the model is processed in once
Standard_EXPORT void Perform (IFSelect_ContextModif& ctx, const Handle(Interface_InterfaceModel)& target, const Handle(Interface_Protocol)& protocol, Interface_CopyTool& TC) const Standard_OVERRIDE;
//! Returns Label as "Reorder, Roots (last or first)"
Standard_EXPORT TCollection_AsciiString Label() const Standard_OVERRIDE;
DEFINE_STANDARD_RTTIEXT(IFSelect_ModifReorder,IFSelect_Modifier)
protected:
private:
Standard_Boolean thertl;
};
#endif // _IFSelect_ModifReorder_HeaderFile

View File

@@ -1,25 +0,0 @@
// 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_ContextModif.hxx>
#include <IFSelect_Modifier.hxx>
#include <Interface_CopyTool.hxx>
#include <Interface_InterfaceModel.hxx>
#include <Interface_Protocol.hxx>
#include <Standard_Type.hxx>
IMPLEMENT_STANDARD_RTTIEXT(IFSelect_Modifier,IFSelect_GeneralModifier)
IFSelect_Modifier::IFSelect_Modifier (const Standard_Boolean grf)
: IFSelect_GeneralModifier (grf) { }

View File

@@ -1,86 +0,0 @@
// Created on: 1993-08-26
// 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 _IFSelect_Modifier_HeaderFile
#define _IFSelect_Modifier_HeaderFile
#include <Standard.hxx>
#include <Standard_Type.hxx>
#include <IFSelect_GeneralModifier.hxx>
class IFSelect_ContextModif;
class Interface_InterfaceModel;
class Interface_Protocol;
class Interface_CopyTool;
class IFSelect_Modifier;
DEFINE_STANDARD_HANDLE(IFSelect_Modifier, IFSelect_GeneralModifier)
//! This class gives a frame for Actions which can work globally
//! on a File once completely defined (i.e. afterwards)
//!
//! Remark : if no Selection is set as criterium, the Modifier is
//! set to work and should consider all the content of the Model
//! produced.
class IFSelect_Modifier : public IFSelect_GeneralModifier
{
public:
//! This deferred method defines the action specific to each class
//! of Modifier. It is called by a ModelCopier, once the Model
//! generated and filled. ModelCopier has already checked the
//! criteria (Dispatch, Model Rank, Selection) before calling it.
//!
//! <ctx> detains information about original data and selection.
//! The result of copying, on which modifications are to be done,
//! is <target>.
//! <TC> allows to run additional copies as required
//!
//! In case of Error, use methods CCheck from the ContextModif
//! to aknowledge an entity Check or a Global Check with messages
Standard_EXPORT virtual void Perform (IFSelect_ContextModif& ctx, const Handle(Interface_InterfaceModel)& target, const Handle(Interface_Protocol)& protocol, Interface_CopyTool& TC) const = 0;
DEFINE_STANDARD_RTTIEXT(IFSelect_Modifier,IFSelect_GeneralModifier)
protected:
//! Calls inherited Initialize, transmits to it the information
//! <maychangegraph>
Standard_EXPORT IFSelect_Modifier(const Standard_Boolean maychangegraph);
private:
};
#endif // _IFSelect_Modifier_HeaderFile

View File

@@ -1,144 +0,0 @@
// Created on: 1994-09-02
// Created by: Christian CAILLET
// Copyright (c) 1994-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.
#include <IFSelect_PacketList.hxx>
#include <Interface_EntityIterator.hxx>
#include <Interface_InterfaceError.hxx>
#include <Interface_InterfaceModel.hxx>
#include <Standard_Transient.hxx>
#include <Standard_Type.hxx>
#include <TColStd_HSequenceOfInteger.hxx>
IMPLEMENT_STANDARD_RTTIEXT(IFSelect_PacketList,Standard_Transient)
IFSelect_PacketList::IFSelect_PacketList
(const Handle(Interface_InterfaceModel)& model)
: thedupls (0,model->NbEntities()) ,
thepacks (100) ,
theflags (0,model->NbEntities()) ,
thename ("Packets")
{
themodel = model; thelast = 0; thebegin = Standard_False; // begin-begin
thedupls.Init(0); theflags.Init(0);
}
void IFSelect_PacketList::SetName (const Standard_CString name)
{ thename.Clear(); thename.AssignCat (name); }
Standard_CString IFSelect_PacketList::Name () const
{ return thename.ToCString(); }
Handle(Interface_InterfaceModel) IFSelect_PacketList::Model () const
{ return themodel; }
void IFSelect_PacketList::AddPacket ()
{
Standard_Integer nbl = thepacks.NbEntities();
Standard_Integer nbe = theflags.Upper();
for (Standard_Integer i = 1; i <= nbe; i ++) theflags.SetValue(i,0);
if (thelast >= nbl) thepacks.SetNbEntities (nbl*2);
if (!thebegin) thelast ++;
thepacks.SetNumber (thelast);
thebegin = Standard_False;
}
void IFSelect_PacketList::Add
(const Handle(Standard_Transient)& ent)
{
Standard_Integer num = themodel->Number(ent);
if (num == 0) throw Interface_InterfaceError("PacketList:Add, Entity not in Model");
if (thelast == 0) throw Interface_InterfaceError("PacketList:Add, no Packet yet added");
if (theflags(num) != 0) return;
theflags(num) = 1;
thedupls(num) ++;
thepacks.Add(num);
thebegin = Standard_False;
}
void IFSelect_PacketList::AddList
(const Handle(TColStd_HSequenceOfTransient)& list)
{
if (list.IsNull()) return;
Standard_Integer i , nb = list->Length();
thepacks.Reservate (nb+1);
for (i = 1; i <= nb; i ++) Add (list->Value(i));
}
Standard_Integer IFSelect_PacketList::NbPackets () const
{ return (thebegin ? thelast-1 : thelast); }
Standard_Integer IFSelect_PacketList::NbEntities
(const Standard_Integer numpack) const
{
if (numpack <= 0 || numpack > NbPackets()) return 0;
Interface_IntList lisi(thepacks,Standard_False); lisi.SetNumber (numpack);
return lisi.Length();
}
Interface_EntityIterator IFSelect_PacketList::Entities
(const Standard_Integer numpack) const
{
Interface_EntityIterator list;
if (numpack <= 0 || numpack > NbPackets()) return list;
Interface_IntList lisi(thepacks,Standard_False); lisi.SetNumber (numpack);
Standard_Integer i , nb = lisi.Length();
for (i = 1; i <= nb; i ++)
list.AddItem(themodel->Value(lisi.Value(i)));
return list;
}
Standard_Integer IFSelect_PacketList::HighestDuplicationCount () const
{
Standard_Integer i , nb = themodel->NbEntities();
Standard_Integer high = 0;
for (i = 1; i <= nb; i ++) {
Standard_Integer j = thedupls.Value(i);
if (j > high) high = j;
}
return high;
}
Standard_Integer IFSelect_PacketList::NbDuplicated
(const Standard_Integer newcount, const Standard_Boolean andmore) const
{
Standard_Integer i, nb = themodel->NbEntities();
Standard_Integer nbdu = 0;
for (i = 1; i <= nb; i ++) {
Standard_Integer j = thedupls.Value(i);
if (j == newcount || (j > newcount && andmore)) nbdu ++;
}
return nbdu;
}
Interface_EntityIterator IFSelect_PacketList::Duplicated
(const Standard_Integer newcount, const Standard_Boolean andmore) const
{
Standard_Integer nb = themodel->NbEntities();
Interface_EntityIterator list;
Standard_Integer i;
for (i = 1; i <= nb; i ++) {
Standard_Integer j = thedupls.Value(i);
if (j == newcount || (j > newcount && andmore)) list.AddItem(themodel->Value(i));
}
return list;
}

View File

@@ -1,130 +0,0 @@
// Created on: 1994-09-02
// Created by: Christian CAILLET
// Copyright (c) 1994-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 _IFSelect_PacketList_HeaderFile
#define _IFSelect_PacketList_HeaderFile
#include <Standard.hxx>
#include <Interface_IntList.hxx>
#include <Standard_Integer.hxx>
#include <TCollection_AsciiString.hxx>
#include <Standard_Transient.hxx>
#include <TColStd_HSequenceOfTransient.hxx>
class Interface_InterfaceModel;
class Interface_EntityIterator;
class IFSelect_PacketList;
DEFINE_STANDARD_HANDLE(IFSelect_PacketList, Standard_Transient)
//! This class gives a simple way to return then consult a
//! list of packets, determined from the content of a Model,
//! by various criteria.
//!
//! It allows to describe several lists with entities from a
//! given model, possibly more than one list knowing every entity,
//! and to determine the remaining list (entities in no lists) and
//! the duplications (with their count).
class IFSelect_PacketList : public Standard_Transient
{
public:
//! Creates a PackList, empty, ready to receive entities from a
//! given Model
Standard_EXPORT IFSelect_PacketList(const Handle(Interface_InterfaceModel)& model);
//! Sets a name to a packet list : this makes easier a general
//! routine to print it. Default is "Packets"
Standard_EXPORT void SetName (const Standard_CString name);
//! Returns the recorded name for a packet list
Standard_EXPORT Standard_CString Name() const;
//! Returns the Model of reference
Standard_EXPORT Handle(Interface_InterfaceModel) Model() const;
//! Declares a new Packet, ready to be filled
//! The entities to be added will be added to this Packet
Standard_EXPORT void AddPacket();
//! Adds an entity from the Model into the current packet for Add
Standard_EXPORT void Add (const Handle(Standard_Transient)& ent);
//! Adds an list of entities into the current packet for Add
Standard_EXPORT void AddList (const Handle(TColStd_HSequenceOfTransient)& list);
//! Returns the count of non-empty packets
Standard_EXPORT Standard_Integer NbPackets() const;
//! Returns the count of entities in a Packet given its rank, or 0
Standard_EXPORT Standard_Integer NbEntities (const Standard_Integer numpack) const;
//! Returns the content of a Packet given its rank
//! Null Handle if <numpack> is out of range
Standard_EXPORT Interface_EntityIterator Entities (const Standard_Integer numpack) const;
//! Returns the highest number of packets which know a same entity
//! For no duplication, should be one
Standard_EXPORT Standard_Integer HighestDuplicationCount() const;
//! Returns the count of entities duplicated :
//! <count> times, if <andmore> is False, or
//! <count> or more times, if <andmore> is True
//! See Duplicated for more details
Standard_EXPORT Standard_Integer NbDuplicated (const Standard_Integer count, const Standard_Boolean andmore) const;
//! Returns a list of entities duplicated :
//! <count> times, if <andmore> is False, or
//! <count> or more times, if <andmore> is True
//! Hence, count=2 & andmore=True gives all duplicated entities
//! count=1 gives non-duplicated entities (in only one packet)
//! count=0 gives remaining entities (in no packet at all)
Standard_EXPORT Interface_EntityIterator Duplicated (const Standard_Integer count, const Standard_Boolean andmore) const;
DEFINE_STANDARD_RTTIEXT(IFSelect_PacketList,Standard_Transient)
protected:
private:
Handle(Interface_InterfaceModel) themodel;
TColStd_Array1OfInteger thedupls;
Interface_IntList thepacks;
TColStd_Array1OfInteger theflags;
Standard_Integer thelast;
Standard_Boolean thebegin;
TCollection_AsciiString thename;
};
#endif // _IFSelect_PacketList_HeaderFile

View File

@@ -1,106 +0,0 @@
// 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_EditForm.hxx>
#include <IFSelect_ParamEditor.hxx>
#include <Interface_InterfaceModel.hxx>
#include <Interface_Static.hxx>
#include <Interface_TypedValue.hxx>
#include <Standard_Transient.hxx>
#include <Standard_Type.hxx>
#include <TCollection_AsciiString.hxx>
#include <TCollection_HAsciiString.hxx>
IMPLEMENT_STANDARD_RTTIEXT(IFSelect_ParamEditor,IFSelect_Editor)
IFSelect_ParamEditor::IFSelect_ParamEditor
(const Standard_Integer nbmax, const Standard_CString label)
: IFSelect_Editor (nbmax) , thelabel (label)
{
SetNbValues (0);
if (thelabel.Length() == 0) thelabel.AssignCat ("Param Editor");
}
void IFSelect_ParamEditor::AddValue
(const Handle(Interface_TypedValue)& val, const Standard_CString shortname)
{
SetNbValues (NbValues() + 1);
SetValue (NbValues(), val, shortname);
}
void IFSelect_ParamEditor::AddConstantText
(const Standard_CString val, const Standard_CString shortname,
const Standard_CString longname)
{
Handle(Interface_TypedValue) tv = new Interface_TypedValue
(longname[0] == '\0' ? shortname : longname);
tv->SetCStringValue (val);
SetNbValues (NbValues() + 1);
SetValue (NbValues(), tv, shortname, IFSelect_EditRead);
}
TCollection_AsciiString IFSelect_ParamEditor::Label () const
{ return thelabel; }
Standard_Boolean IFSelect_ParamEditor::Recognize
(const Handle(IFSelect_EditForm)& /*form*/) const
{ return Standard_True; } // pas de contrainte
Handle(TCollection_HAsciiString) IFSelect_ParamEditor::StringValue
(const Handle(IFSelect_EditForm)& /*form*/,const Standard_Integer num) const
{ return TypedValue(num)->HStringValue(); }
Standard_Boolean IFSelect_ParamEditor::Load
(const Handle(IFSelect_EditForm)& form,
const Handle(Standard_Transient)& /*ent*/,
const Handle(Interface_InterfaceModel)& /*model*/) const
{
Standard_Integer i, nb = NbValues();
for (i = 1; i <= nb; i ++) form->LoadValue (i,TypedValue(i)->HStringValue());
return Standard_True;
}
Standard_Boolean IFSelect_ParamEditor::Apply
(const Handle(IFSelect_EditForm)& form,
const Handle(Standard_Transient)& /*ent*/,
const Handle(Interface_InterfaceModel)& /*model*/) const
{
Standard_Integer i, nb = NbValues();
for (i = 1; i <= nb; i ++)
if (form->IsModified(i))
TypedValue (i)->SetHStringValue (form->EditedValue(i));
return Standard_True;
}
Handle(IFSelect_ParamEditor) IFSelect_ParamEditor::StaticEditor
(const Handle(TColStd_HSequenceOfHAsciiString)& list,
const Standard_CString label)
{
Handle(IFSelect_ParamEditor) editor;
if (list.IsNull()) return editor;
Standard_Integer i,nb = list->Length();
// if (nb == 0) return editor;
editor = new IFSelect_ParamEditor (nb+10,label);
for (i = 1; i <= nb; i ++) {
Handle(Interface_Static) val = Interface_Static::Static
(list->Value(i)->ToCString());
if (!val.IsNull()) editor->AddValue(val);
}
return editor;
}

View File

@@ -1,86 +0,0 @@
// Created on: 1998-07-30
// Created by: Christian CAILLET
// Copyright (c) 1998-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 _IFSelect_ParamEditor_HeaderFile
#define _IFSelect_ParamEditor_HeaderFile
#include <Standard.hxx>
#include <Standard_Type.hxx>
#include <TCollection_AsciiString.hxx>
#include <IFSelect_Editor.hxx>
#include <Standard_Integer.hxx>
#include <TColStd_HSequenceOfHAsciiString.hxx>
class Interface_TypedValue;
class IFSelect_EditForm;
class TCollection_HAsciiString;
class Standard_Transient;
class Interface_InterfaceModel;
class IFSelect_ParamEditor;
DEFINE_STANDARD_HANDLE(IFSelect_ParamEditor, IFSelect_Editor)
//! A ParamEditor gives access for edition to a list of TypedValue
//! (i.e. of Static too)
//! Its definition is made of the TypedValue to edit themselves,
//! and can add some constants, which can then be displayed but
//! not changed (for instance, system name, processor version ...)
//!
//! I.E. it gives a way of editing or at least displaying
//! parameters as global
class IFSelect_ParamEditor : public IFSelect_Editor
{
public:
//! Creates a ParamEditor, empty, with a maximum count of params
//! (default is 100)
//! And a label, by default it will be "Param Editor"
Standard_EXPORT IFSelect_ParamEditor(const Standard_Integer nbmax = 100, const Standard_CString label = "");
//! Adds a TypedValue
//! By default, its short name equates its complete name, it can be made explicit
Standard_EXPORT void AddValue (const Handle(Interface_TypedValue)& val,
const Standard_CString shortname = "");
//! Adds a Constant Text, it will be Read Only
//! By default, its long name equates its shortname
Standard_EXPORT void AddConstantText (const Standard_CString val, const Standard_CString shortname, const Standard_CString completename = "");
Standard_EXPORT TCollection_AsciiString Label() const Standard_OVERRIDE;
Standard_EXPORT Standard_Boolean Recognize (const Handle(IFSelect_EditForm)& form) const Standard_OVERRIDE;
Standard_EXPORT Handle(TCollection_HAsciiString) StringValue (const Handle(IFSelect_EditForm)& form, const Standard_Integer num) const Standard_OVERRIDE;
Standard_EXPORT Standard_Boolean Load (const Handle(IFSelect_EditForm)& form, const Handle(Standard_Transient)& ent, const Handle(Interface_InterfaceModel)& model) const Standard_OVERRIDE;
Standard_EXPORT Standard_Boolean Apply (const Handle(IFSelect_EditForm)& form, const Handle(Standard_Transient)& ent, const Handle(Interface_InterfaceModel)& model) const Standard_OVERRIDE;
//! Returns a ParamEditor to work on the Static Parameters of
//! which names are listed in <list>
//! Null Handle if <list> is null or empty
Standard_EXPORT static Handle(IFSelect_ParamEditor) StaticEditor (const Handle(TColStd_HSequenceOfHAsciiString)& list, const Standard_CString label = "");
DEFINE_STANDARD_RTTIEXT(IFSelect_ParamEditor,IFSelect_Editor)
private:
TCollection_AsciiString thelabel;
};
#endif // _IFSelect_ParamEditor_HeaderFile

View File

@@ -1,61 +0,0 @@
// Created on: 1992-09-21
// Created by: Christian CAILLET
// Copyright (c) 1992-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 _IFSelect_PrintCount_HeaderFile
#define _IFSelect_PrintCount_HeaderFile
//! Lets you choose the manner in which you want to analyze an
//! IGES or STEP file. Your analysis can be either message-oriented or
//! entity-oriented. The specific values are as follows:
//! - ItemsByEntity is a sequential list of all
//! messages per entity of the defined type
//! - CountByItem is the number of entities of the defined
//! type, with their rank number per message
//! - ShortByItem is the number of entities of the defined
//! type, with their types per message; displays the rank
//! numbers of the first five entities of the defined type
//! per message
//! - ListByItem is the number of entities of the defined type
//! per message and the numbers of the entities
//! - EntitiesByItem is the number of entities of the
//! defined type, with their types, rank numbers and
//! Directory Entry numbers per message
//! - GeneralInfo is general information on transfer such as:
//! - number of entities
//! - number of roots
//! - number of resulting Open CASCADE shapes
//! - number of warnings and failures
//! - CountSummary summary statistics for counters and signatures
//! - ResultCount information that contains the number of
//! roots in the IGES file and the number of resulting Open CASCADE shapes.
//! - Mapping of the IGES root entities to the resulting Open
//! CASCADE shape (including type and form of the IGES entity
//! and type of the resulting shape).
enum IFSelect_PrintCount
{
IFSelect_ItemsByEntity,
IFSelect_CountByItem,
IFSelect_ShortByItem,
IFSelect_ListByItem,
IFSelect_EntitiesByItem,
IFSelect_CountSummary,
IFSelect_GeneralInfo,
IFSelect_Mapping,
IFSelect_ResultCount
};
#endif // _IFSelect_PrintCount_HeaderFile

View File

@@ -1,29 +0,0 @@
// Created on: 1992-09-21
// Created by: Christian CAILLET
// Copyright (c) 1992-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 _IFSelect_RemainMode_HeaderFile
#define _IFSelect_RemainMode_HeaderFile
enum IFSelect_RemainMode
{
IFSelect_RemainForget,
IFSelect_RemainCompute,
IFSelect_RemainDisplay,
IFSelect_RemainUndo
};
#endif // _IFSelect_RemainMode_HeaderFile

View File

@@ -1,111 +0,0 @@
// 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_IntParam.hxx>
#include <IFSelect_SelectAnyList.hxx>
#include <Interface_EntityIterator.hxx>
#include <Interface_Graph.hxx>
#include <Interface_InterfaceError.hxx>
#include <Standard_Transient.hxx>
#include <Standard_Type.hxx>
#include <TCollection_AsciiString.hxx>
#include <stdio.h>
IMPLEMENT_STANDARD_RTTIEXT(IFSelect_SelectAnyList,IFSelect_SelectDeduct)
// .... Definition de liste : methodes "deferred" NbItems & FillResult
void IFSelect_SelectAnyList::SetRange
(const Handle(IFSelect_IntParam)& rankfrom,
const Handle(IFSelect_IntParam)& rankto)
{ thelower = rankfrom; theupper = rankto; }
void IFSelect_SelectAnyList::SetOne (const Handle(IFSelect_IntParam)& rank)
{ thelower = theupper = rank; }
void IFSelect_SelectAnyList::SetFrom
(const Handle(IFSelect_IntParam)& rankfrom)
{ thelower = rankfrom; theupper.Nullify(); }
void IFSelect_SelectAnyList::SetUntil
(const Handle(IFSelect_IntParam)& rankto)
{ thelower.Nullify(); theupper = rankto; }
Standard_Boolean IFSelect_SelectAnyList::HasLower () const
{ return (!thelower.IsNull()); }
Handle(IFSelect_IntParam) IFSelect_SelectAnyList::Lower () const
{ return thelower; }
Standard_Integer IFSelect_SelectAnyList::LowerValue () const
{
if (thelower.IsNull()) return 0;
return thelower->Value();
}
Standard_Boolean IFSelect_SelectAnyList::HasUpper () const
{ return (!theupper.IsNull()); }
Handle(IFSelect_IntParam) IFSelect_SelectAnyList::Upper () const
{ return theupper; }
Standard_Integer IFSelect_SelectAnyList::UpperValue () const
{
if (theupper.IsNull()) return 0;
return theupper->Value();
}
// On prend les sous-entites de lower a upper (inclus)
Interface_EntityIterator IFSelect_SelectAnyList::RootResult
(const Interface_Graph& G) const
{
Interface_EntityIterator input = InputResult(G);
KeepInputEntity (input); // selon type voulu
if (input.NbEntities() > 1) throw Interface_InterfaceError("SelectAnyList : more than ONE Entity in input");
if (input.NbEntities() == 0) return input;
Handle(Standard_Transient) ent;
for (input.Start(); input.More(); input.Next()) ent = input.Value();
Standard_Integer rankmax = NbItems(ent);
Standard_Integer rankfrom = 1;
if (!thelower.IsNull()) rankfrom = thelower->Value();
Standard_Integer rankto;
if (!theupper.IsNull()) rankto = theupper->Value();
else rankto = rankmax;
if (rankfrom < 1) rankfrom = 1;
if (rankto > rankmax) rankto = rankmax;
Interface_EntityIterator iter;
if (rankfrom <= rankto) FillResult(rankfrom,rankto,ent,iter);
return iter;
}
TCollection_AsciiString IFSelect_SelectAnyList::Label () const
{
char lab[30];
Standard_Integer rankfrom = 0;
if (HasLower()) rankfrom = LowerValue();
Standard_Integer rankto = 0;
if (HasUpper()) rankto = UpperValue();
if (rankfrom == rankto) sprintf(lab," (no %d)",rankfrom);
else if (rankfrom == 0) sprintf(lab," (-> %d)",rankfrom);
else if (rankto == 0) sprintf(lab," (%d ->)",rankto);
else sprintf(lab," (%d -> %d)",rankfrom,rankto);
TCollection_AsciiString labl("In List ");
labl.AssignCat(ListLabel());
labl.AssignCat(lab);
return labl;
}

View File

@@ -1,153 +0,0 @@
// Created on: 1992-12-09
// Created by: Christian CAILLET
// Copyright (c) 1992-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 _IFSelect_SelectAnyList_HeaderFile
#define _IFSelect_SelectAnyList_HeaderFile
#include <Standard.hxx>
#include <Standard_Type.hxx>
#include <IFSelect_SelectDeduct.hxx>
#include <Standard_Integer.hxx>
class IFSelect_IntParam;
class Interface_EntityIterator;
class Standard_Transient;
class Interface_Graph;
class TCollection_AsciiString;
class IFSelect_SelectAnyList;
DEFINE_STANDARD_HANDLE(IFSelect_SelectAnyList, IFSelect_SelectDeduct)
//! A SelectAnyList kind Selection selects a List of an Entity, as
//! well as this Entity contains some. A List contains sub-entities
//! as one per Item, or several (for instance if an Entity binds
//! couples of sub-entities, each item is one of these couples).
//! Remark that only Entities are taken into account (neither
//! Reals, nor Strings, etc...)
//!
//! To define the list on which to work, SelectAnyList has two
//! deferred methods : NbItems (which gives the length of the
//! list), FillResult (which fills an EntityIterator). They are
//! intended to get a List in an Entity of the required Type (and
//! consider that list is empty if Entity has not required Type)
//!
//! In addition, remark that some types of Entity define more than
//! one list in each instance : a given sub-class of SelectAnyList
//! must be attached to one list
//!
//! SelectAnyList keeps or rejects a sub-set of the list,
//! that is the Items of which rank in the list is in a given
//! range (for instance form 2nd to 6th, etc...)
//! Range is defined by two Integer values. In order to allow
//! external control of them, these values are not directly
//! defined as fields, but accessed through IntParams, that is,
//! referenced as Transient (Handle) objects
//!
//! Warning : the Input can be any kind of Selection, BUT its
//! RootResult must have zero (empty) or one Entity maximum
class IFSelect_SelectAnyList : public IFSelect_SelectDeduct
{
public:
//! Keeps Input Entity, as having required type. It works by
//! keeping in <iter>, only suitable Entities (SelectType can be
//! used). Called by RootResult (which waits for ONE ENTITY MAX)
Standard_EXPORT virtual void KeepInputEntity (Interface_EntityIterator& iter) const = 0;
//! Returns count of Items in the list in the Entity <ent>
//! If <ent> has not required type, returned value must be Zero
Standard_EXPORT virtual Standard_Integer NbItems (const Handle(Standard_Transient)& ent) const = 0;
//! Sets a Range for numbers, with a lower and a upper limits
Standard_EXPORT void SetRange (const Handle(IFSelect_IntParam)& rankfrom, const Handle(IFSelect_IntParam)& rankto);
//! Sets a unique number (only one Entity will be sorted as True)
Standard_EXPORT void SetOne (const Handle(IFSelect_IntParam)& rank);
//! Sets a Lower limit but no upper limit
Standard_EXPORT void SetFrom (const Handle(IFSelect_IntParam)& rankfrom);
//! Sets an Upper limit but no lower limit (equivalent to lower 1)
Standard_EXPORT void SetUntil (const Handle(IFSelect_IntParam)& rankto);
//! Returns True if a Lower limit is defined
Standard_EXPORT Standard_Boolean HasLower() const;
//! Returns Lower limit (if there is; else, value is senseless)
Standard_EXPORT Handle(IFSelect_IntParam) Lower() const;
//! Returns Integer Value of Lower Limit (0 if none)
Standard_EXPORT Standard_Integer LowerValue() const;
//! Returns True if a Lower limit is defined
Standard_EXPORT Standard_Boolean HasUpper() const;
//! Returns Upper limit (if there is; else, value is senseless)
Standard_EXPORT Handle(IFSelect_IntParam) Upper() const;
//! Returns Integer Value of Upper Limit (0 if none)
Standard_EXPORT Standard_Integer UpperValue() const;
//! Returns the list of selected entities (list of entities
//! complying with rank criterium)
//! Error if the input list has more than one Item
Standard_EXPORT Interface_EntityIterator RootResult (const Interface_Graph& G) const Standard_OVERRIDE;
//! Puts into <res>, the sub-entities of the list, from n1 to
//! n2 included. Remark that adequation with Entity's type and
//! length of list has already been made at this stage
//! Called by RootResult
Standard_EXPORT virtual void FillResult (const Standard_Integer n1, const Standard_Integer n2, const Handle(Standard_Transient)& ent, Interface_EntityIterator& res) const = 0;
//! Returns a text defining the criterium : "Components of List "
//! then Specific List Label, then, following cases :
//! " From .. Until .." or "From .." or "Until .." or "Rank no .."
//! Specific type is given by deferred method ListLabel
Standard_EXPORT TCollection_AsciiString Label() const Standard_OVERRIDE;
//! Returns the specific label for the list, which is included as
//! a part of Label
Standard_EXPORT virtual TCollection_AsciiString ListLabel() const = 0;
DEFINE_STANDARD_RTTIEXT(IFSelect_SelectAnyList,IFSelect_SelectDeduct)
protected:
private:
Handle(IFSelect_IntParam) thelower;
Handle(IFSelect_IntParam) theupper;
};
#endif // _IFSelect_SelectAnyList_HeaderFile

View File

@@ -1,25 +0,0 @@
// 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_SelectAnyType.hxx>
#include <Interface_InterfaceModel.hxx>
#include <Standard_Transient.hxx>
#include <Standard_Type.hxx>
IMPLEMENT_STANDARD_RTTIEXT(IFSelect_SelectAnyType,IFSelect_SelectExtract)
Standard_Boolean IFSelect_SelectAnyType::Sort
(const Standard_Integer , const Handle(Standard_Transient)& ent,
const Handle(Interface_InterfaceModel)& ) const
{ return ent->IsKind(TypeForMatch()); }

View File

@@ -1,52 +0,0 @@
// Created on: 1992-11-18
// Created by: Christian CAILLET
// Copyright (c) 1992-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 _IFSelect_SelectAnyType_HeaderFile
#define _IFSelect_SelectAnyType_HeaderFile
#include <Standard.hxx>
#include <Standard_Type.hxx>
#include <IFSelect_SelectExtract.hxx>
#include <Standard_Type.hxx>
#include <Standard_Integer.hxx>
class Standard_Transient;
class Interface_InterfaceModel;
class IFSelect_SelectAnyType;
DEFINE_STANDARD_HANDLE(IFSelect_SelectAnyType, IFSelect_SelectExtract)
//! A SelectAnyType sorts the Entities of which the Type is Kind
//! of a given Type : this Type for Match is specific of each
//! class of SelectAnyType
class IFSelect_SelectAnyType : public IFSelect_SelectExtract
{
public:
//! Returns the Type which has to be matched for select
Standard_EXPORT virtual Handle(Standard_Type) TypeForMatch() const = 0;
//! Returns True for an Entity (model->Value(num)) which is kind
//! of the chosen type, given by the method TypeForMatch.
//! Criterium is IsKind.
Standard_EXPORT Standard_Boolean Sort (const Standard_Integer rank, const Handle(Standard_Transient)& ent, const Handle(Interface_InterfaceModel)& model) const Standard_OVERRIDE;
DEFINE_STANDARD_RTTIEXT(IFSelect_SelectAnyType,IFSelect_SelectExtract)
};
#endif // _IFSelect_SelectAnyType_HeaderFile

View File

@@ -1,23 +0,0 @@
// 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_SelectBase.hxx>
#include <IFSelect_SelectionIterator.hxx>
#include <Standard_Type.hxx>
IMPLEMENT_STANDARD_RTTIEXT(IFSelect_SelectBase,IFSelect_Selection)
void IFSelect_SelectBase::FillIterator
(IFSelect_SelectionIterator& ) const
{ } // rien a faire, une SelectBase ne depend d aucune autre Selection

Some files were not shown because too many files have changed in this diff Show More