1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-04-10 18:51:21 +03:00
occt/src/IGESData/IGESData_GlobalSection.cxx
abv 91322f44fd 0022898: IGES import fails in german environment
Added DRAW command dlocale to set and query current locale of the C subsystem
Equivalents of C functions working with conversions of strings to/from reals added in Standard_CString, providing locale-independent behavior (using always "C" locale)
In DRAW packages, calls to atof() and atoi() are replaced by direct calls to Draw::Atof() and Draw::Atoi(), respectively, instead of substituting by #define
Use of atof(), strtod(), and *scanf() involving floating point conversions in OCCT code replaced by locale-independent Atof() and Strtod()
Calls to sprintf() involving floating point in OCCT code are replaced by call to locale-independent Sprintf(), except a few places where converted strings are used immediately for display in the 3d viewer
Changes of global locale are eliminated throughout OCCT code
Proposed correction for GNU libC where v*printf_l functions are absent
Added test case (bugs xde bug22898) for data exchange operations with non-standard locale
Use xlocale on Mac OS X and within glibc
Corrected strtod_l wrapper
Generate error rather than warning
Introduce Standard_CLocaleSentry replacement for removed OSD_Localizer
Standard_CLocaleSentry - copy locale string
Standard_CLocaleSentry - use _configthreadlocale on Windows
Standard_CLocaleSentry::GetCLocale() - return locale_t rather than void*
Corrected misprint in ~Standard_CLocaleSentry()
Use French locale in bug22898 test case
Mark test case as skipped if locale is unavailable on tested system.
Use fr_FR locale for tests on Mac OS X
2013-02-01 18:41:16 +04:00

908 lines
30 KiB
C++
Executable File

// Copyright (c) 1999-2012 OPEN CASCADE SAS
//
// The content of this file is subject to the Open CASCADE Technology Public
// License Version 6.5 (the "License"). You may not use the content of this file
// except in compliance with the License. Please obtain a copy of the License
// at http://www.opencascade.org and read it completely before using this file.
//
// The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
// main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
//
// The Original Code and all software distributed under the License is
// distributed on an "AS IS" basis, without warranty of any kind, and the
// Initial Developer hereby disclaims all such warranties, including without
// limitation, any warranties of merchantability, fitness for a particular
// purpose or non-infringement. Please see the License for the specific terms
// and conditions governing the rights and limitations under the License.
//#52 rln 06.01.99 writing value 1.e-07
//gka 19.01.99 changing size of ParamSet
//#65 rln 12.02.99 S4151 (explicitly force YYMMDD.HHMMSS before Y2000 and YYYYMMDD.HHMMSS after Y2000)
//#66 rln Setting IGES 5.3 by default
//#73 rln 10.03.99 S4135: "read.scale.unit" is applied after translation
#include <IGESData_GlobalSection.ixx>
#include <Interface_ParamType.hxx>
#include <Interface_FloatWriter.hxx>
#include <Interface_FileReaderData.hxx>
#include <Interface_FileParameter.hxx>
#include <OSD_Process.hxx>
#include <Quantity_Date.hxx>
#include <Interface_Static.hxx>
#include <IGESData_BasicEditor.hxx>
#include <stdio.h>
// MGE 21/07/98
#include <Message_Msg.hxx>
#include <UnitsMethods.hxx>
// valeurs en MILLIMETRE pardefaut, reajustable
//static Standard_Real convunit = 1000.;
// Routines locales copiant une string [l`ideal serait : astr = astr->Copy()]
// et transformant un CString (Hollerith ou non) en HAsciiString non Holl.
// et l inverse
static void CopyString (Handle(TCollection_HAsciiString)& astr);
static void MakeHollerith(const Handle(TCollection_HAsciiString)& astr,
char* text, Standard_Integer& lt);
void CopyString (Handle(TCollection_HAsciiString)& astr)
{
if (astr.IsNull()) return; // ne rien faire si String pas definie !
Handle(TCollection_HAsciiString) S = new TCollection_HAsciiString("");
S->AssignCat(astr); astr = S;
}
void MakeHollerith(const Handle(TCollection_HAsciiString)& astr,
char* text, Standard_Integer& lt)
{
lt = 0; text[0] = '\0';
if (astr.IsNull()) return;
Standard_Integer ln = astr->Length();
if (ln == 0) return;
sprintf (text,"%dH%s",ln,astr->ToCString());
lt = ln+2; if (ln >= 10) lt ++; if (ln >= 100) lt ++; // strlen text
}
//=======================================================================
//function : IGESData_GlobalSection
//purpose :
//=======================================================================
IGESData_GlobalSection::IGESData_GlobalSection ()
{
// convunit = 1000.;
//#73 rln 10.03.99 S4135: "read.scale.unit" is applied after translation
//if (Interface_Static::IVal("read.scale.unit") == 1) convunit = 1;
}
// pourrait etre une methode generale au package en fait
//=======================================================================
//function : TranslatedFromHollerith
//purpose :
//=======================================================================
Handle(TCollection_HAsciiString) IGESData_GlobalSection::TranslatedFromHollerith
(const Handle(TCollection_HAsciiString)& astr) const
{
Handle(TCollection_HAsciiString) res;
if (astr.IsNull()) return res;
Standard_Integer n = astr->Search("H");
if (n > 1) {
if (!astr->Token("H")->IsIntegerValue()) n = 0;
}
if (n > 1 && n < astr->Length()) res = astr->SubString(n+1,astr->Length());
else if(astr->ToCString()== NULL)
res = new TCollection_HAsciiString;
else res = new TCollection_HAsciiString(astr->ToCString());
return res;
}
//=======================================================================
//function : Init
//purpose :
//=======================================================================
void IGESData_GlobalSection::Init(const Handle(Interface_ParamSet)& params,
Handle(Interface_Check)& ach)
{
// MGE 21/07/98
// Building of messages
//======================================
//Message_Msg Msg39 ("XSTEP_39");
//Message_Msg Msg48 ("XSTEP_48");
//Message_Msg Msg49 ("XSTEP_49");
//======================================
theSeparator = ','; theEndMark = ';';
theSendName.Nullify(); theFileName.Nullify(); theSystemId.Nullify();
theInterfaceVersion.Nullify();
theIntegerBits = 32; // par defaut, simple = entier = 32b, double = 64
theMaxPower10Single = 38; theMaxDigitsSingle = 6;
theMaxPower10Double = 308; theMaxDigitsDouble = 15;
theReceiveName.Nullify();
theScale = 1.0;
theUnitFlag = 0; theUnitName.Nullify();
theLineWeightGrad = 1; theMaxLineWeight = 0.;
theDate.Nullify();
theResolution = 0.; theMaxCoord = 0.; hasMaxCoord = Standard_False;
theAuthorName.Nullify(); theCompanyName.Nullify();
theIGESVersion = 11;//3 //#66 rln Setting IGES 5.3 by default(To avoid misleading fails below)
theDraftingStandard = 0;
theLastChangeDate.Nullify(); // nouveaute 5.1 (peut etre absente)
theAppliProtocol.Nullify(); // nouveaute 5.3 (peut etre absente)
Standard_Integer nbp = params->NbParams();
for (Standard_Integer i = 1; i <= nbp; i ++) {
Standard_Integer intval = 0; Standard_Real realval = 0.0;
Handle(TCollection_HAsciiString) strval; // doit repartir a null
//char message[80]; //szv#4:S4163:12Mar99 unused
Standard_CString val = params->Param(i).CValue();
Interface_ParamType fpt = params->Param(i).ParamType();
if (fpt == Interface_ParamVoid) continue;
// if the param is an Integer
if (fpt == Interface_ParamInteger) {
// but a real is expected
if ( i == 13 || i == 17 || i == 19 || i == 20)
realval = Atof(val);
intval = atoi(val);
}
// if the param is a Real
else if (fpt == Interface_ParamReal || fpt == Interface_ParamEnum) {
char text[50];
Standard_Integer k , j = 0;
for (k = 0; k < 50; k ++) {
if (val[k] == 'D' || val[k] == 'd')
text[j++] = 'e';
else
text[j++] = val[k];
if (val[k] == '\0') break;
}
realval = Atof(text);
}
// if the param is a text
else if (fpt == Interface_ParamText) {
strval = new TCollection_HAsciiString (val);
if (val[0] != '\0') {
Standard_Integer nhol = strval->Search("H");
Standard_Integer lhol = strval->Length();
if (nhol > 1)
if (!strval->Token("H")->IsIntegerValue()) nhol = 0;
if (nhol > 1 && nhol < lhol)
strval = strval->SubString(nhol+1,lhol);
}
}
char sepend = '\0';
if (i < 3) {
if (val[0] != '\0') sepend = val[0];
if (val[1] == 'H') sepend = val[2]; // prioritaire
}
switch (i)
{
case 1 : if (sepend != '\0') theSeparator = sepend; break;
case 2 : if (sepend != '\0') theEndMark = sepend; break;
case 3 : theSendName = strval; break;
case 4 : theFileName = strval; break;
case 5 : theSystemId = strval; break;
case 6 : theInterfaceVersion = strval; break;
case 7 : theIntegerBits = intval; break;
case 8 : theMaxPower10Single = intval; break;
case 9 : theMaxDigitsSingle = intval; break;
case 10 : theMaxPower10Double = intval; break;
case 11 : theMaxDigitsDouble = intval; break;
case 12 : theReceiveName = strval; break;
case 13 : theScale = realval; break;
case 14 : theUnitFlag = intval; break;
case 15 : theUnitName = strval; break;
case 16 : theLineWeightGrad = intval; break;
case 17 : theMaxLineWeight = realval; break;
case 18 : theDate = strval; break;
case 19 : theResolution = realval; break;
case 20 : theMaxCoord = realval;
hasMaxCoord = Standard_True; break;
case 21 : theAuthorName = strval; break;
case 22 : theCompanyName = strval; break;
case 23 : theIGESVersion = intval; break;
case 24 : theDraftingStandard = intval; break;
case 25 : theLastChangeDate = strval; break;
case 26 : theAppliProtocol = strval; break;
default : break;
}
}
// Sending of message : Incorrect number of parameters (following the IGES version)
// Version less than 5.3
if (theIGESVersion < 11)
{
if ((nbp < 24) || (nbp > 25)) {
// 24 or 25 parameters are expected (parameter 25 is not required)
Message_Msg Msg39 ("XSTEP_39");
Msg39.Arg(24);
Msg39.Arg(25);
if (nbp < 24) ach->SendFail(Msg39);
else ach->SendWarning(Msg39);
}
}
// Version 5.3
else if ((nbp < 25) || (nbp > 26)) {
// 25 or 26 parameters are expected (parameter 25 is not required)
Message_Msg Msg39 ("XSTEP_39");
Msg39.Arg(25);
Msg39.Arg(26);
if (nbp < 25) ach->SendFail(Msg39);
else ach->SendWarning(Msg39);
}
//:45 by abv 11.12.97: if UnitFlag is not defined in the file,
// restore it from UnitName. Repris par CKY 13-FEV-1998
if ( theUnitFlag == 0 || theUnitFlag == 3 ) {
Standard_Integer corrected = 0 ;
if(theUnitName.IsNull())
//default (inches) value taken
corrected = 1;
else
corrected = IGESData_BasicEditor::UnitNameFlag (theUnitName->ToCString());
if (corrected > 0) theUnitFlag = corrected;
else if (theUnitFlag == 3) {
Message_Msg Msg49 ("XSTEP_49");
ach->SendWarning (Msg49);
}
else {
Message_Msg Msg48 ("XSTEP_48");
ach->SendFail (Msg48);
}
}
}
//=======================================================================
//function : CopyRefs
//purpose :
//=======================================================================
void IGESData_GlobalSection::CopyRefs ()
{
CopyString(theSendName); CopyString(theFileName); CopyString(theSystemId);
CopyString(theInterfaceVersion); CopyString(theReceiveName);
CopyString(theUnitName); CopyString(theDate);
CopyString(theAuthorName); CopyString(theCompanyName);
CopyString(theLastChangeDate); CopyString(theAppliProtocol);
}
//=======================================================================
//function : Params
//purpose :
//=======================================================================
Handle(Interface_ParamSet) IGESData_GlobalSection::Params () const
{
char vide[1]; char uncar[2]; char nombre[20]; char text[200];
Standard_Integer lt;
vide[0] = uncar[1] = '\0'; uncar[0] = ',';
Handle(Interface_ParamSet) res = new Interface_ParamSet(26); //gka 19.01.99
if (theSeparator == ',') res->Append (vide,0,Interface_ParamVoid,0);
else { uncar[0] = theSeparator; res->Append (uncar,1,Interface_ParamMisc,0); }
if (theEndMark == ';') res->Append (vide,0,Interface_ParamVoid,0);
else { uncar[0] = theEndMark; res->Append (uncar,1,Interface_ParamMisc,0); }
MakeHollerith (theSendName,text,lt);
res->Append (text,lt, Interface_ParamText,0);
MakeHollerith (theFileName,text,lt);
res->Append (text,lt, Interface_ParamText,0);
MakeHollerith (theSystemId,text,lt);
res->Append (text,lt, Interface_ParamText,0);
MakeHollerith (theInterfaceVersion,text,lt);
res->Append (text,lt, Interface_ParamText,0);
sprintf(nombre,"%d",theIntegerBits);
res->Append (nombre,strlen(nombre),Interface_ParamInteger,0);
sprintf(nombre,"%d",theMaxPower10Single);
res->Append (nombre,strlen(nombre),Interface_ParamInteger,0);
sprintf(nombre,"%d",theMaxDigitsSingle);
res->Append (nombre,strlen(nombre),Interface_ParamInteger,0);
sprintf(nombre,"%d",theMaxPower10Double);
res->Append (nombre,strlen(nombre),Interface_ParamInteger,0);
sprintf(nombre,"%d",theMaxDigitsDouble);
res->Append (nombre,strlen(nombre),Interface_ParamInteger,0);
MakeHollerith (theReceiveName,text,lt);
res->Append (text,lt, Interface_ParamText,0);
Interface_FloatWriter::Convert (theScale,nombre,Standard_True,0.,0.,"%f","%f");
// sprintf(nombre,"%f",theScale);
res->Append (nombre,strlen(nombre),Interface_ParamReal,0);
sprintf(nombre,"%d",theUnitFlag);
res->Append (nombre,strlen(nombre),Interface_ParamInteger,0);
MakeHollerith (theUnitName,text,lt);
res->Append (text,lt, Interface_ParamText,0);
sprintf(nombre,"%d",theLineWeightGrad);
res->Append (nombre,strlen(nombre),Interface_ParamInteger,0);
Interface_FloatWriter::Convert (theMaxLineWeight,nombre,Standard_True,0.,0.,"%f","%f");
// sprintf(nombre,"%f",theMaxLineWeight);
res->Append (nombre,strlen(nombre),Interface_ParamReal,0);
MakeHollerith (theDate,text,lt);
res->Append (text,lt, Interface_ParamText,0);
Interface_FloatWriter::Convert (theResolution,nombre,Standard_True,0.,0.,"%g","%g");
// sprintf(nombre,"%f",theResolution);
res->Append (nombre,strlen(nombre),Interface_ParamReal,0);
if (hasMaxCoord)
Interface_FloatWriter::Convert (theMaxCoord,nombre,Standard_True,0.,0.,"%f","%f");
// sprintf(nombre,"%f",theMaxCoord);
else nombre[0] = '\0';
res->Append (nombre,strlen(nombre),Interface_ParamReal,0);
MakeHollerith (theAuthorName,text,lt);
res->Append (text,lt, Interface_ParamText,0);
MakeHollerith (theCompanyName,text,lt);
res->Append (text,lt, Interface_ParamText,0);
sprintf(nombre,"%d",theIGESVersion);
res->Append (nombre,strlen(nombre),Interface_ParamInteger,0);
sprintf(nombre,"%d",theDraftingStandard);
res->Append (nombre,strlen(nombre),Interface_ParamInteger,0);
if (!theLastChangeDate.IsNull()) {
MakeHollerith (theLastChangeDate,text,lt);
res->Append (text,lt, Interface_ParamText,0);
}
if (!theAppliProtocol.IsNull()) {
MakeHollerith (theAppliProtocol,text,lt);
res->Append (text,lt, Interface_ParamText,0);
}
// Ici : parametre absent ignore
return res;
}
// ############### QUERIES ###############
//=======================================================================
//function : Separator
//purpose :
//=======================================================================
Standard_Character IGESData_GlobalSection::Separator () const
{
return theSeparator;
}
//=======================================================================
//function : EndMark
//purpose :
//=======================================================================
Standard_Character IGESData_GlobalSection::EndMark () const
{
return theEndMark;
}
//=======================================================================
//function : SendName
//purpose :
//=======================================================================
Handle(TCollection_HAsciiString) IGESData_GlobalSection::SendName () const
{
return theSendName;
}
//=======================================================================
//function : FileName
//purpose :
//=======================================================================
Handle(TCollection_HAsciiString) IGESData_GlobalSection::FileName () const
{
return theFileName;
}
//=======================================================================
//function : SystemId
//purpose :
//=======================================================================
Handle(TCollection_HAsciiString) IGESData_GlobalSection::SystemId () const
{
return theSystemId;
}
//=======================================================================
//function : InterfaceVersion
//purpose :
//=======================================================================
Handle(TCollection_HAsciiString) IGESData_GlobalSection::InterfaceVersion () const
{
return theInterfaceVersion;
}
//=======================================================================
//function : IntegerBits
//purpose :
//=======================================================================
Standard_Integer IGESData_GlobalSection::IntegerBits () const
{
return theIntegerBits;
}
//=======================================================================
//function : MaxPower10Single
//purpose :
//=======================================================================
Standard_Integer IGESData_GlobalSection::MaxPower10Single () const
{
return theMaxPower10Single;
}
//=======================================================================
//function : MaxDigitsSingle
//purpose :
//=======================================================================
Standard_Integer IGESData_GlobalSection::MaxDigitsSingle () const
{
return theMaxDigitsSingle;
}
//=======================================================================
//function : MaxPower10Double
//purpose :
//=======================================================================
Standard_Integer IGESData_GlobalSection::MaxPower10Double () const
{
return theMaxPower10Double;
}
//=======================================================================
//function : MaxDigitsDouble
//purpose :
//=======================================================================
Standard_Integer IGESData_GlobalSection::MaxDigitsDouble () const
{
return theMaxDigitsDouble;
}
//=======================================================================
//function : ReceiveName
//purpose :
//=======================================================================
Handle(TCollection_HAsciiString) IGESData_GlobalSection::ReceiveName () const
{
return theReceiveName;
}
//=======================================================================
//function : Scale
//purpose :
//=======================================================================
Standard_Real IGESData_GlobalSection::Scale () const
{
return theScale;
}
//=======================================================================
//function : UnitFlag
//purpose :
//=======================================================================
Standard_Integer IGESData_GlobalSection::UnitFlag () const
{
return theUnitFlag;
}
//=======================================================================
//function : UnitName
//purpose :
//=======================================================================
Handle(TCollection_HAsciiString) IGESData_GlobalSection::UnitName () const
{
return theUnitName;
}
//=======================================================================
//function : LineWeightGrad
//purpose :
//=======================================================================
Standard_Integer IGESData_GlobalSection::LineWeightGrad () const
{
return theLineWeightGrad;
}
//=======================================================================
//function : MaxLineWeight
//purpose :
//=======================================================================
Standard_Real IGESData_GlobalSection::MaxLineWeight () const
{
return theMaxLineWeight;
}
//=======================================================================
//function : Date
//purpose :
//=======================================================================
Handle(TCollection_HAsciiString) IGESData_GlobalSection::Date () const
{
return theDate;
}
//=======================================================================
//function : Resolution
//purpose :
//=======================================================================
Standard_Real IGESData_GlobalSection::Resolution () const
{
return theResolution;
}
//=======================================================================
//function : MaxCoord
//purpose :
//=======================================================================
Standard_Real IGESData_GlobalSection::MaxCoord () const
{
return theMaxCoord;
}
//=======================================================================
//function : HasMaxCoord
//purpose :
//=======================================================================
Standard_Boolean IGESData_GlobalSection::HasMaxCoord () const
{
return hasMaxCoord;
}
//=======================================================================
//function : AuthorName
//purpose :
//=======================================================================
Handle(TCollection_HAsciiString) IGESData_GlobalSection::AuthorName () const
{
return theAuthorName;
}
//=======================================================================
//function : CompanyName
//purpose :
//=======================================================================
Handle(TCollection_HAsciiString) IGESData_GlobalSection::CompanyName () const
{
return theCompanyName;
}
//=======================================================================
//function : IGESVersion
//purpose :
//=======================================================================
Standard_Integer IGESData_GlobalSection::IGESVersion () const
{
return theIGESVersion;
}
//=======================================================================
//function : DraftingStandard
//purpose :
//=======================================================================
Standard_Integer IGESData_GlobalSection::DraftingStandard () const
{
return theDraftingStandard;
}
//=======================================================================
//function : LastChangeDate
//purpose :
//=======================================================================
Handle(TCollection_HAsciiString) IGESData_GlobalSection::LastChangeDate () const
{
return theLastChangeDate;
}
//=======================================================================
//function : HasLastChangeDate
//purpose :
//=======================================================================
Standard_Boolean IGESData_GlobalSection::HasLastChangeDate () const
{
return (!theLastChangeDate.IsNull());
}
//=======================================================================
//function : SetLastChangeDate
//purpose :
//=======================================================================
void IGESData_GlobalSection::SetLastChangeDate ()
{
if (HasLastChangeDate()) return;
Standard_Integer mois,jour,annee,heure,minute,seconde,millisec,microsec;
OSD_Process system;
Quantity_Date ladate = system.SystemDate();
ladate.Values (mois,jour,annee,heure,minute,seconde,millisec,microsec);
if (annee < 2000)
//#65 rln 12.02.99 S4151 (explicitly force YYMMDD.HHMMSS before Y2000)
theLastChangeDate = NewDateString (annee,mois,jour,heure,minute,seconde,0);
else
//#65 rln 12.02.99 S4151 (explicitly force YYYYMMDD.HHMMSS after Y2000)
theLastChangeDate = NewDateString (annee,mois,jour,heure,minute,seconde, -1);
}
//=======================================================================
//function : HasApplicationProtocol
//purpose :
//=======================================================================
Standard_Boolean IGESData_GlobalSection::HasApplicationProtocol () const
{
return !theAppliProtocol.IsNull();
}
//=======================================================================
//function : ApplicationProtocol
//purpose :
//=======================================================================
Handle(TCollection_HAsciiString) IGESData_GlobalSection::ApplicationProtocol () const
{
return theAppliProtocol;
}
//=======================================================================
//function : NewDateString
//purpose :
//=======================================================================
Handle(TCollection_HAsciiString) IGESData_GlobalSection::NewDateString
(const Standard_Integer annee, const Standard_Integer mois,
const Standard_Integer jour, const Standard_Integer heure,
const Standard_Integer minute, const Standard_Integer seconde,
const Standard_Integer mode)
{
// 0 : IGES annee a l ancienne 00-99 -1 IGES annee complete 1 lisible
char madate[60];
Standard_Integer moi = mois , jou = jour , anne = annee;
Standard_Integer heur = heure , minut = minute , second = seconde;
if (annee == 0) {
Standard_Integer millisec,microsec;
OSD_Process system;
Quantity_Date ladate = system.SystemDate();
ladate.Values (moi,jou,anne,heur,minut,second,millisec,microsec);
}
if (mode == 0 || mode == -1) {
Standard_Integer an = anne % 100;
Standard_Boolean dizaine = (an >= 10);
if (!dizaine) an += 10;
if (mode < 0) { an = anne; dizaine = Standard_True; }
Standard_Integer date1 = (an) * 10000 + moi * 100 + jou;
Standard_Integer date2 = (heur + 100) * 10000 + minut * 100 + second;
sprintf (madate,"%d%d",date1,date2);
madate[(mode == 0 ? 6: 8)] = '.';
if (!dizaine) madate[0] = '0';
} else if (mode == 1) {
sprintf (madate,"%4.4d-%2.2d-%2.2d:%2.2d-%2.2d-%2.2d",
anne,moi,jou,heur,minut,second);
}
return new TCollection_HAsciiString(madate);
}
//=======================================================================
//function : NewDateString
//purpose :
//=======================================================================
Handle(TCollection_HAsciiString) IGESData_GlobalSection::NewDateString
(const Handle(TCollection_HAsciiString)& date, const Standard_Integer mode)
{
Standard_Integer anne,moi,jou,heur,minut,second;
if (date.IsNull()) return date;
Standard_Integer i0 = 0;
if (date->Length() == 15) i0 = 2;
else if (date->Length() != 13) return date;
if (date->Value(i0+7) != '.') return date;
anne = (date->Value(i0+ 1) - 48) * 10 + (date->Value(i0+ 2) - 48);
if (i0 == 0) {
anne = anne + 1900;
if (anne < 1980) anne += 100;
} else {
anne = anne + (date->Value(1) - 48) *1000 + (date->Value(2) - 48) * 100;
}
moi = (date->Value(i0+ 3) - 48) * 10 + (date->Value(i0+ 4) - 48);
jou = (date->Value(i0+ 5) - 48) * 10 + (date->Value(i0+ 6) - 48);
heur = (date->Value(i0+ 8) - 48) * 10 + (date->Value(i0+ 9) - 48);
minut = (date->Value(i0+10) - 48) * 10 + (date->Value(i0+11) - 48);
second = (date->Value(i0+12) - 48) * 10 + (date->Value(i0+13) - 48);
return IGESData_GlobalSection::NewDateString (anne,moi,jou,heur,minut,second,mode);
}
//=======================================================================
//function : UnitValue
//purpose :
//=======================================================================
Standard_Real IGESData_GlobalSection::UnitValue () const
{
return UnitsMethods::GetLengthFactorValue ( theUnitFlag ) /
UnitsMethods::GetCasCadeLengthUnit(); //abv 22 Feb 00: adding cascade unit factor
}
// ############### UPDATES ###############
void IGESData_GlobalSection::SetSeparator (const Standard_Character val)
{ theSeparator = val; }
void IGESData_GlobalSection::SetEndMark (const Standard_Character val)
{ theEndMark = val; }
void IGESData_GlobalSection::SetSendName (const Handle(TCollection_HAsciiString)& val)
{ theSendName = TranslatedFromHollerith(val); }
void IGESData_GlobalSection::SetFileName (const Handle(TCollection_HAsciiString)& val)
{ theFileName = TranslatedFromHollerith(val); }
void IGESData_GlobalSection::SetSystemId (const Handle(TCollection_HAsciiString)& val)
{ theSystemId = TranslatedFromHollerith(val); }
void IGESData_GlobalSection::SetInterfaceVersion (const Handle(TCollection_HAsciiString)& val)
{ theInterfaceVersion = TranslatedFromHollerith(val); }
void IGESData_GlobalSection::SetIntegerBits (const Standard_Integer val)
{ theIntegerBits = val; }
void IGESData_GlobalSection::SetMaxPower10Single (const Standard_Integer val)
{ theMaxPower10Single = val; }
void IGESData_GlobalSection::SetMaxDigitsSingle (const Standard_Integer val)
{ theMaxDigitsSingle = val; }
void IGESData_GlobalSection::SetMaxPower10Double (const Standard_Integer val)
{ theMaxPower10Double = val; }
void IGESData_GlobalSection::SetMaxDigitsDouble (const Standard_Integer val)
{ theMaxDigitsDouble = val; }
void IGESData_GlobalSection::SetReceiveName (const Handle(TCollection_HAsciiString)& val)
{ theReceiveName = TranslatedFromHollerith(val); }
void IGESData_GlobalSection::SetScale (const Standard_Real val)
{ theScale = val; }
void IGESData_GlobalSection::SetUnitFlag (const Standard_Integer val)
{ theUnitFlag = val; }
void IGESData_GlobalSection::SetUnitName (const Handle(TCollection_HAsciiString)& val)
{ theUnitName = TranslatedFromHollerith(val); }
void IGESData_GlobalSection::SetLineWeightGrad (const Standard_Integer val)
{ theLineWeightGrad = val; }
void IGESData_GlobalSection::SetMaxLineWeight (const Standard_Real val)
{ theMaxLineWeight = val; }
void IGESData_GlobalSection::SetDate (const Handle(TCollection_HAsciiString)& val)
{ theDate = TranslatedFromHollerith(val); }
void IGESData_GlobalSection::SetResolution (const Standard_Real val)
{ theResolution = val; }
void IGESData_GlobalSection::SetMaxCoord (const Standard_Real val)
{
hasMaxCoord = (val > 0.);
theMaxCoord = (hasMaxCoord ? val : 0.);
}
void IGESData_GlobalSection::MaxMaxCoord (const Standard_Real val)
{
Standard_Real aval = Abs(val);
if (hasMaxCoord) { if (aval > theMaxCoord) theMaxCoord = aval; }
else SetMaxCoord (aval);
}
void IGESData_GlobalSection::MaxMaxCoords (const gp_XYZ& xyz)
{ MaxMaxCoord (xyz.X()); MaxMaxCoord (xyz.Y()); MaxMaxCoord (xyz.Z()); }
void IGESData_GlobalSection::SetAuthorName (const Handle(TCollection_HAsciiString)& val)
{ theAuthorName = TranslatedFromHollerith(val); }
void IGESData_GlobalSection::SetCompanyName (const Handle(TCollection_HAsciiString)& val)
{ theCompanyName = TranslatedFromHollerith(val); }
void IGESData_GlobalSection::SetIGESVersion (const Standard_Integer val)
{ theIGESVersion = val; }
void IGESData_GlobalSection::SetDraftingStandard (const Standard_Integer val)
{ theDraftingStandard = val; }
void IGESData_GlobalSection::SetLastChangeDate (const Handle(TCollection_HAsciiString)& val)
{ theLastChangeDate = TranslatedFromHollerith(val); }
void IGESData_GlobalSection::SetApplicationProtocol (const Handle(TCollection_HAsciiString)& val)
{ theAppliProtocol = TranslatedFromHollerith(val); }