1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-04-06 18:26:22 +03:00
occt/src/IGESData/IGESData_DirChecker.cxx
abv 42cf5bc1ca 0024002: Overall code and build procedure refactoring -- automatic
Automatic upgrade of OCCT code by command "occt_upgrade . -nocdl":
- WOK-generated header files from inc and sources from drv are moved to src
- CDL files removed
- All packages are converted to nocdlpack
2015-07-12 07:42:38 +03:00

483 lines
15 KiB
C++

// 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 <IGESData_ColorEntity.hxx>
#include <IGESData_DefList.hxx>
#include <IGESData_DirChecker.hxx>
#include <IGESData_IGESEntity.hxx>
#include <IGESData_LabelDisplayEntity.hxx>
#include <IGESData_LevelListEntity.hxx>
#include <IGESData_LineFontEntity.hxx>
#include <IGESData_ViewKindEntity.hxx>
#include <Interface_Check.hxx>
#include <Message_Msg.hxx>
#include <stdio.h>
// Pour Correct :
// MGE 23/07/98
// Chaque critere est par defaut inhibe
//=======================================================================
//function : IGESData_DirChecker
//purpose :
//=======================================================================
IGESData_DirChecker::IGESData_DirChecker ()
{
thetype = theform1 = theform2 = 0;
thestructure = thelinefont = thelineweig = thecolor = IGESData_ErrorRef;
thegraphier = -100; // ne pas tester GraphicsIgnored
theblankst = thesubordst = theuseflag = thehierst = -100; // ne pas tester
}
//=======================================================================
//function : IGESData_DirChecker
//purpose :
//=======================================================================
IGESData_DirChecker::IGESData_DirChecker (const Standard_Integer atype)
{
thetype = atype; theform1 = 0; theform2 = -1; // test de forme inhibe
thestructure = thelinefont = thelineweig = thecolor = IGESData_ErrorRef;
thegraphier = -100; // ne pas tester GraphicsIgnored
theblankst = thesubordst = theuseflag = thehierst = -100; // ne pas tester
}
//=======================================================================
//function : IGESData_DirChecker
//purpose :
//=======================================================================
IGESData_DirChecker::IGESData_DirChecker(const Standard_Integer atype,
const Standard_Integer aform)
{
thetype = atype; theform1 = theform2 = aform; // forme : valeur requise
thestructure = thelinefont = thelineweig = thecolor = IGESData_ErrorRef;
thegraphier = -100; // ne pas tester GraphicsIgnored
theblankst = thesubordst = theuseflag = thehierst = -100; // ne pas tester
}
//=======================================================================
//function : IGESData_DirChecker
//purpose :
//=======================================================================
IGESData_DirChecker::IGESData_DirChecker(const Standard_Integer atype,
const Standard_Integer aform1,
const Standard_Integer aform2)
{
thetype = atype; theform1 = aform1; theform2 = aform2; // forme : [...]
thestructure = thelinefont = thelineweig = thecolor = IGESData_ErrorRef;
thegraphier = -100; // ne pas tester GraphicsIgnored
theblankst = thesubordst = theuseflag = thehierst = -100; // ne pas tester
}
//=======================================================================
//function : IsSet
//purpose :
//=======================================================================
Standard_Boolean IGESData_DirChecker::IsSet () const
{
return isitset;
}
//=======================================================================
//function : SetDefault
//purpose :
//=======================================================================
void IGESData_DirChecker::SetDefault ()
{
Structure(IGESData_DefVoid);
} // Option par defaut
//=======================================================================
//function : Structure
//purpose :
//=======================================================================
void IGESData_DirChecker::Structure (const IGESData_DefType crit)
{
isitset = Standard_True;
thestructure = crit;
}
//=======================================================================
//function : LineFont
//purpose :
//=======================================================================
void IGESData_DirChecker::LineFont (const IGESData_DefType crit)
{
isitset = Standard_True;
thelinefont = crit;
}
//=======================================================================
//function : LineWeight
//purpose :
//=======================================================================
void IGESData_DirChecker::LineWeight (const IGESData_DefType crit)
{
isitset = Standard_True;
thelineweig = crit;
}
//=======================================================================
//function : Color
//purpose :
//=======================================================================
void IGESData_DirChecker::Color (const IGESData_DefType crit)
{
isitset = Standard_True;
thecolor = crit;
}
//=======================================================================
//function : GraphicsIgnored
//purpose :
//=======================================================================
void IGESData_DirChecker::GraphicsIgnored (const Standard_Integer hierarchy)
{
isitset = Standard_True;
thegraphier = hierarchy;
}
//=======================================================================
//function : BlankStatusIgnored
//purpose :
//=======================================================================
void IGESData_DirChecker::BlankStatusIgnored ()
{
isitset = Standard_True;
theblankst = -10;
}
//=======================================================================
//function : BlankStatusRequired
//purpose :
//=======================================================================
void IGESData_DirChecker::BlankStatusRequired (const Standard_Integer val)
{
isitset = Standard_True;
theblankst = val;
}
//=======================================================================
//function : SubordinateStatusIgnored
//purpose :
//=======================================================================
void IGESData_DirChecker::SubordinateStatusIgnored ()
{
isitset = Standard_True;
thesubordst = -10;
}
//=======================================================================
//function : SubordinateStatusRequired
//purpose :
//=======================================================================
void IGESData_DirChecker::SubordinateStatusRequired(const Standard_Integer val)
{
isitset = Standard_True;
thesubordst = val;
}
//=======================================================================
//function : UseFlagIgnored
//purpose :
//=======================================================================
void IGESData_DirChecker::UseFlagIgnored ()
{
isitset = Standard_True;
theuseflag = -10;
}
//=======================================================================
//function : UseFlagRequired
//purpose :
//=======================================================================
void IGESData_DirChecker::UseFlagRequired (const Standard_Integer val)
{
isitset = Standard_True;
theuseflag = val;
}
//=======================================================================
//function : HierarchyStatusIgnored
//purpose :
//=======================================================================
void IGESData_DirChecker::HierarchyStatusIgnored ()
{
isitset = Standard_True;
thehierst = -10;
}
//=======================================================================
//function : HierarchyStatusRequired
//purpose :
//=======================================================================
void IGESData_DirChecker::HierarchyStatusRequired (const Standard_Integer val)
{
isitset = Standard_True;
thehierst = val;
}
//=======================================================================
//function : Check
//purpose :
//=======================================================================
void IGESData_DirChecker::Check(Handle(Interface_Check)& ach,
const Handle(IGESData_IGESEntity)& ent) const
{
// MGE 23/07/98
// =====================================
//Message_Msg Msg58 ("XSTEP_58");
//Message_Msg Msg59 ("XSTEP_59");
//Message_Msg Msg60 ("XSTEP_60");
//Message_Msg Msg65 ("XSTEP_65");
//Message_Msg Msg66 ("XSTEP_66");
//Message_Msg Msg67 ("XSTEP_67");
//Message_Msg Msg68 ("XSTEP_68");
//Message_Msg Msg69 ("XSTEP_69");
//Message_Msg Msg70 ("XSTEP_70");
//Message_Msg Msg71 ("XSTEP_71");
// =====================================
if (thetype != 0)
{
// Sending of message : Entity Type Number field is incorrect.
if (ent->TypeNumber() != thetype) {
Message_Msg Msg58 ("XSTEP_58");
ach->SendFail(Msg58);
}
// Sending of message : Form Number field is incorrect.
if (theform1 <= theform2) {
if (ent->FormNumber() < theform1 || ent->FormNumber() > theform2) {
Message_Msg Msg71 ("XSTEP_71");
ach->SendFail(Msg71);
}
}
}
// Sending of message : Structure field is undefined.
if (thestructure == IGESData_DefReference && !ent->HasStructure()) {
Message_Msg Msg59 ("XSTEP_59");
ach->SendFail (Msg59);
}
if (thegraphier == -1 || thegraphier == ent->HierarchyStatus()) { }
else {
IGESData_DefType df = ent->DefLineFont();
// Sending of message : Line Font Pattern field is incorrect
if (df == IGESData_ErrorVal || df == IGESData_ErrorRef) {
Message_Msg Msg60 ("XSTEP_60");
ach->SendFail (Msg60);
}
else if (thelinefont == IGESData_DefValue && df != IGESData_DefValue) {
Message_Msg Msg60 ("XSTEP_60");
ach->SendWarning (Msg60);
}
Standard_Integer dlw = ent->LineWeightNumber();
Message_Msg Msg69 ("XSTEP_69");
// Sending of message : Line Weight Number is undefined.
if (thelineweig == IGESData_DefValue && dlw == 0) {
// Message_Msg Msg69 ("XSTEP_69");
ach->SendWarning (Msg69);
}
df = ent->DefColor();
// Sending of message : Color Number field is incorrect.
if (df == IGESData_ErrorVal || df == IGESData_ErrorRef) {
// Message_Msg Msg69 ("XSTEP_69");
ach->SendFail (Msg69);
}
else if (thecolor == IGESData_DefValue && df != IGESData_DefValue) {
// Message_Msg Msg69 ("XSTEP_69");
ach->SendWarning (Msg69);
}
}
Standard_Integer st = ent->BlankStatus();
// Sending of message : Blank Status field is incorrect.
if (st < 0 || st > 1) {
Message_Msg Msg65 ("XSTEP_65");
ach->SendFail (Msg65);
}
st = ent->SubordinateStatus();
// Sending of message : Subordinate Entity Switch field is incorrect.
if (st < 0 || st > 3) {
Message_Msg Msg66 ("XSTEP_66");
ach->SendFail(Msg66);
}
st = ent->UseFlag();
// Send of message : Entity Use Flag is incorrect.
if (st < 0 || st > 5) {
Message_Msg Msg67 ("XSTEP_67");
ach->SendFail(Msg67);
}
st = ent->HierarchyStatus();
//Sending of message : Hierarchy field is incorrect.
if (st < 0 || st > 2) {
Message_Msg Msg68 ("XSTEP_68");
ach->SendFail(Msg68);
}
}
//=======================================================================
//function : CheckTypeAndForm
//purpose :
//=======================================================================
void IGESData_DirChecker::CheckTypeAndForm(Handle(Interface_Check)& ach,
const Handle(IGESData_IGESEntity)& ent) const
{
// CKY 30 NOV 2001 : This method is called for immediate check on reading
// But an entity which can be read has ben already recognized.
// To produce a FAIL here is interpreted as "FAIL ON LOADING", which is
// not true (the entity has been recognized then properly loaded)
// Consequence (among other) : the entity is not explored by graph of dep.s
// so numerous "false roots" are detected
// Alternative to switch Fail to Warning here, should be to withdraw the calls
// to that method by all the "ReadOwn" methods, but it's heavier
// ANYWAY, the full Check method produces a Fail if Type/Form is not in scope,
// so it is well interpreted as "Syntactic error"
// MGE 23/07/98
// =====================================
// Message_Msg Msg58 ("XSTEP_58");
// Message_Msg Msg71 ("XSTEP_71");
// =====================================
//char mess[80]; //szv#4:S4163:12Mar99 unused
if (thetype != 0)
{
if (ent->TypeNumber() != thetype){
Message_Msg Msg58 ("XSTEP_58");
ach->SendWarning(Msg58);
}
if (theform1 <= theform2)
if (ent->FormNumber() < theform1 || ent->FormNumber() > theform2) {
Message_Msg Msg71 ("XSTEP_71");
ach->SendWarning(Msg71);
}
}
}
//=======================================================================
//function : Correct
//purpose :
//=======================================================================
Standard_Boolean IGESData_DirChecker::Correct
(const Handle(IGESData_IGESEntity)& ent) const
{
Standard_Boolean done = Standard_False;
Standard_Integer type = ent->TypeNumber();
Standard_Integer form = ent->FormNumber();
if (thetype != 0) {
if (theform1 >= 0 && theform1 == theform2 && theform1 != form)
{ ent->InitTypeAndForm (thetype,theform1); done = Standard_True; }
else if (thetype != type)
{ ent->InitTypeAndForm (thetype,form); done = Standard_True; }
}
Handle(IGESData_IGESEntity) structure; // par defaut Nulle
if (thestructure != IGESData_DefVoid) structure = ent->Structure();
Handle(IGESData_ViewKindEntity) nulview;
Handle(IGESData_LineFontEntity) nulfont;
Handle(IGESData_LevelListEntity) nulevel;
Handle(IGESData_ColorEntity) nulcolor;
Handle(IGESData_LabelDisplayEntity) label; // par defaut Nulle
if (thegraphier != -1) label = ent->LabelDisplay();
Standard_Integer linew = 0;
if (thegraphier != -1 && thelineweig != IGESData_DefVoid)
linew = ent->LineWeightNumber();
if (thegraphier == -1 ||
(ent->RankLineFont() != 0 && thelinefont == IGESData_DefVoid) )
{ ent->InitLineFont(nulfont); done = Standard_True; }
if (thegraphier == -1 ||
(ent->RankColor() != 0 && thecolor == IGESData_DefVoid) )
{ ent->InitColor(nulcolor); done = Standard_True; }
if (thegraphier == -1 &&
(!ent->View().IsNull() || ent->Level() != 0) )
{ ent->InitView(nulview); ent->InitLevel(nulevel); done = Standard_True; }
if ((thegraphier == -1 &&
(!ent->LabelDisplay().IsNull() || ent->LineWeightNumber() != 0)) ||
(ent->HasStructure() && thestructure == IGESData_DefVoid) ) // combines :
{ ent->InitMisc (structure,label,linew); done = Standard_True; }
Standard_Boolean force = Standard_False;
Standard_Integer stb = ent->BlankStatus();
Standard_Integer sts = ent->SubordinateStatus();
Standard_Integer stu = ent->UseFlag();
Standard_Integer sth = ent->HierarchyStatus();
if (theblankst >= 0 && theblankst != stb)
{ force = Standard_True; stb = theblankst; }
if (thesubordst >= 0 && thesubordst != sts)
{ force = Standard_True; sts = thesubordst; }
if (theuseflag >= 0 && theuseflag != stu)
{ force = Standard_True; stu = theuseflag; }
if (thehierst >= 0 && thehierst != sth)
{ force = Standard_True; sth = thehierst; }
if (force) { ent->InitStatus(stb,sts,stu,sth); done = Standard_True; }
return done;
}