0030556: Coding - IGESData_GlobalSection missing member initialization in default...
[occt.git] / src / IGESData / IGESData_GlobalSection.cxx
CommitLineData
973c2be1 1// Copyright (c) 1999-2014 OPEN CASCADE SAS
b311480e 2//
973c2be1 3// This file is part of Open CASCADE Technology software library.
b311480e 4//
d5f74e42 5// This library is free software; you can redistribute it and/or modify it under
6// the terms of the GNU Lesser General Public License version 2.1 as published
973c2be1 7// by the Free Software Foundation, with special exception defined in the file
8// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
9// distribution for complete text of the license and disclaimer of any warranty.
b311480e 10//
973c2be1 11// Alternatively, this file may be used under the terms of Open CASCADE
12// commercial license or contractual agreement.
b311480e 13
3697d4fa 14#include <IGESData_GlobalSection.hxx>
42cf5bc1 15
16#include <gp_XYZ.hxx>
17#include <IGESData_BasicEditor.hxx>
42cf5bc1 18#include <Interface_Check.hxx>
7fd59977 19#include <Interface_FileParameter.hxx>
42cf5bc1 20#include <Interface_FileReaderData.hxx>
21#include <Interface_FloatWriter.hxx>
22#include <Interface_ParamSet.hxx>
23#include <Interface_ParamType.hxx>
7fd59977 24#include <Interface_Static.hxx>
7fd59977 25#include <Message_Msg.hxx>
42cf5bc1 26#include <OSD_Process.hxx>
27#include <Quantity_Date.hxx>
28#include <TCollection_HAsciiString.hxx>
7fd59977 29#include <UnitsMethods.hxx>
30
42cf5bc1 31#include <stdio.h>
3697d4fa 32
7fd59977 33// Routines locales copiant une string [l`ideal serait : astr = astr->Copy()]
34// et transformant un CString (Hollerith ou non) en HAsciiString non Holl.
35// et l inverse
3697d4fa 36static void CopyString (Handle(TCollection_HAsciiString)& astr)
7fd59977 37{
38 if (astr.IsNull()) return; // ne rien faire si String pas definie !
39 Handle(TCollection_HAsciiString) S = new TCollection_HAsciiString("");
3697d4fa 40 S->AssignCat (astr);
41 astr = S;
7fd59977 42}
43
3697d4fa 44static void MakeHollerith(const Handle(TCollection_HAsciiString)& astr,
7fd59977 45 char* text, Standard_Integer& lt)
46{
47 lt = 0; text[0] = '\0';
48 if (astr.IsNull()) return;
49 Standard_Integer ln = astr->Length();
50 if (ln == 0) return;
51 sprintf (text,"%dH%s",ln,astr->ToCString());
52 lt = ln+2; if (ln >= 10) lt ++; if (ln >= 100) lt ++; // strlen text
53}
54
7fd59977 55//=======================================================================
56//function : IGESData_GlobalSection
57//purpose :
58//=======================================================================
59
3697d4fa 60IGESData_GlobalSection::IGESData_GlobalSection()
61: theSeparator (','),
62 theEndMark (';'),
63 theIntegerBits (32), // simple = entier = 32b, double = 64
64 theMaxPower10Single (38),
65 theMaxDigitsSingle (6),
66 theMaxPower10Double (308),
67 theMaxDigitsDouble (15),
68 theScale (1.0),
69 theUnitFlag (0),
70 theLineWeightGrad (1),
71 theMaxLineWeight (0.0),
72 theResolution (0.0),
73 theMaxCoord (0.0),
74 hasMaxCoord (Standard_False),
75 theIGESVersion (11), // IGES 5.3 by default
76 theDraftingStandard (0)
7fd59977 77{
3697d4fa 78 //
7fd59977 79}
80
7fd59977 81//=======================================================================
82//function : TranslatedFromHollerith
83//purpose :
84//=======================================================================
85
86Handle(TCollection_HAsciiString) IGESData_GlobalSection::TranslatedFromHollerith
87 (const Handle(TCollection_HAsciiString)& astr) const
88{
89 Handle(TCollection_HAsciiString) res;
90 if (astr.IsNull()) return res;
91 Standard_Integer n = astr->Search("H");
92 if (n > 1) {
93 if (!astr->Token("H")->IsIntegerValue()) n = 0;
94 }
95 if (n > 1 && n < astr->Length()) res = astr->SubString(n+1,astr->Length());
96 else if(astr->ToCString()== NULL)
97 res = new TCollection_HAsciiString;
98 else res = new TCollection_HAsciiString(astr->ToCString());
99 return res;
100}
101
102
103//=======================================================================
104//function : Init
105//purpose :
106//=======================================================================
107
108void IGESData_GlobalSection::Init(const Handle(Interface_ParamSet)& params,
109 Handle(Interface_Check)& ach)
110{
111 // MGE 21/07/98
112 // Building of messages
113 //======================================
114 //Message_Msg Msg39 ("XSTEP_39");
115 //Message_Msg Msg48 ("XSTEP_48");
116 //Message_Msg Msg49 ("XSTEP_49");
117 //======================================
118
119 theSeparator = ','; theEndMark = ';';
120 theSendName.Nullify(); theFileName.Nullify(); theSystemId.Nullify();
121 theInterfaceVersion.Nullify();
122 theIntegerBits = 32; // par defaut, simple = entier = 32b, double = 64
123 theMaxPower10Single = 38; theMaxDigitsSingle = 6;
124 theMaxPower10Double = 308; theMaxDigitsDouble = 15;
125 theReceiveName.Nullify();
126 theScale = 1.0;
127 theUnitFlag = 0; theUnitName.Nullify();
128 theLineWeightGrad = 1; theMaxLineWeight = 0.;
129 theDate.Nullify();
130 theResolution = 0.; theMaxCoord = 0.; hasMaxCoord = Standard_False;
131 theAuthorName.Nullify(); theCompanyName.Nullify();
132 theIGESVersion = 11;//3 //#66 rln Setting IGES 5.3 by default(To avoid misleading fails below)
133 theDraftingStandard = 0;
134 theLastChangeDate.Nullify(); // nouveaute 5.1 (peut etre absente)
135 theAppliProtocol.Nullify(); // nouveaute 5.3 (peut etre absente)
136
137 Standard_Integer nbp = params->NbParams();
138
7fd59977 139 for (Standard_Integer i = 1; i <= nbp; i ++) {
140 Standard_Integer intval = 0; Standard_Real realval = 0.0;
141 Handle(TCollection_HAsciiString) strval; // doit repartir a null
142 //char message[80]; //szv#4:S4163:12Mar99 unused
143 Standard_CString val = params->Param(i).CValue();
144 Interface_ParamType fpt = params->Param(i).ParamType();
145 if (fpt == Interface_ParamVoid) continue;
146
147 // if the param is an Integer
148 if (fpt == Interface_ParamInteger) {
149 // but a real is expected
150 if ( i == 13 || i == 17 || i == 19 || i == 20)
91322f44 151 realval = Atof(val);
7fd59977 152 intval = atoi(val);
153 }
154
155 // if the param is a Real
156 else if (fpt == Interface_ParamReal || fpt == Interface_ParamEnum) {
157 char text[50];
158 Standard_Integer k , j = 0;
159 for (k = 0; k < 50; k ++) {
160 if (val[k] == 'D' || val[k] == 'd')
161 text[j++] = 'e';
162 else
163 text[j++] = val[k];
164 if (val[k] == '\0') break;
165 }
91322f44 166 realval = Atof(text);
7fd59977 167 }
168
169 // if the param is a text
170 else if (fpt == Interface_ParamText) {
171 strval = new TCollection_HAsciiString (val);
172 if (val[0] != '\0') {
173 Standard_Integer nhol = strval->Search("H");
174 Standard_Integer lhol = strval->Length();
175 if (nhol > 1)
176 if (!strval->Token("H")->IsIntegerValue()) nhol = 0;
177 if (nhol > 1 && nhol < lhol)
178 strval = strval->SubString(nhol+1,lhol);
179 }
180 }
181
182 char sepend = '\0';
183 if (i < 3) {
184 if (val[0] != '\0') sepend = val[0];
185 if (val[1] == 'H') sepend = val[2]; // prioritaire
186 }
187
188 switch (i)
189 {
190 case 1 : if (sepend != '\0') theSeparator = sepend; break;
191 case 2 : if (sepend != '\0') theEndMark = sepend; break;
192 case 3 : theSendName = strval; break;
193 case 4 : theFileName = strval; break;
194 case 5 : theSystemId = strval; break;
195 case 6 : theInterfaceVersion = strval; break;
196 case 7 : theIntegerBits = intval; break;
197 case 8 : theMaxPower10Single = intval; break;
198 case 9 : theMaxDigitsSingle = intval; break;
199 case 10 : theMaxPower10Double = intval; break;
200 case 11 : theMaxDigitsDouble = intval; break;
201 case 12 : theReceiveName = strval; break;
202 case 13 : theScale = realval; break;
203 case 14 : theUnitFlag = intval; break;
204 case 15 : theUnitName = strval; break;
205 case 16 : theLineWeightGrad = intval; break;
206 case 17 : theMaxLineWeight = realval; break;
207 case 18 : theDate = strval; break;
208 case 19 : theResolution = realval; break;
209 case 20 : theMaxCoord = realval;
210 hasMaxCoord = Standard_True; break;
211 case 21 : theAuthorName = strval; break;
212 case 22 : theCompanyName = strval; break;
213 case 23 : theIGESVersion = intval; break;
214 case 24 : theDraftingStandard = intval; break;
215 case 25 : theLastChangeDate = strval; break;
216 case 26 : theAppliProtocol = strval; break;
217 default : break;
218 }
219 }
44d9ae89
A
220
221 // Sending of message : Incorrect number of parameters (following the IGES version)
222 // Version less than 5.3
223 if (theIGESVersion < 11)
224 {
225 if ((nbp < 24) || (nbp > 25)) {
226 // 24 or 25 parameters are expected (parameter 25 is not required)
227 Message_Msg Msg39 ("XSTEP_39");
228 Msg39.Arg(24);
229 Msg39.Arg(25);
230 if (nbp < 24) ach->SendFail(Msg39);
231 else ach->SendWarning(Msg39);
232 }
233 }
234 // Version 5.3
235 else if ((nbp < 25) || (nbp > 26)) {
236 // 25 or 26 parameters are expected (parameter 25 is not required)
237 Message_Msg Msg39 ("XSTEP_39");
238 Msg39.Arg(25);
239 Msg39.Arg(26);
240 if (nbp < 25) ach->SendFail(Msg39);
241 else ach->SendWarning(Msg39);
242 }
7fd59977 243
244 //:45 by abv 11.12.97: if UnitFlag is not defined in the file,
245 // restore it from UnitName. Repris par CKY 13-FEV-1998
246 if ( theUnitFlag == 0 || theUnitFlag == 3 ) {
247 Standard_Integer corrected = 0 ;
248 if(theUnitName.IsNull())
249 //default (inches) value taken
250 corrected = 1;
251 else
252 corrected = IGESData_BasicEditor::UnitNameFlag (theUnitName->ToCString());
253 if (corrected > 0) theUnitFlag = corrected;
254 else if (theUnitFlag == 3) {
255 Message_Msg Msg49 ("XSTEP_49");
256 ach->SendWarning (Msg49);
257 }
258 else {
259 Message_Msg Msg48 ("XSTEP_48");
260 ach->SendFail (Msg48);
261 }
262 }
263}
264
265
266//=======================================================================
267//function : CopyRefs
268//purpose :
269//=======================================================================
270
271void IGESData_GlobalSection::CopyRefs ()
272{
273 CopyString(theSendName); CopyString(theFileName); CopyString(theSystemId);
274 CopyString(theInterfaceVersion); CopyString(theReceiveName);
275 CopyString(theUnitName); CopyString(theDate);
276 CopyString(theAuthorName); CopyString(theCompanyName);
277 CopyString(theLastChangeDate); CopyString(theAppliProtocol);
278}
279
280
281//=======================================================================
282//function : Params
283//purpose :
284//=======================================================================
285
286Handle(Interface_ParamSet) IGESData_GlobalSection::Params () const
287{
a8195d65 288 char vide[1]; char uncar[2]; char nombre[1024]; char text[200];
7fd59977 289 Standard_Integer lt;
a8195d65 290 vide[0] = uncar[1] = nombre[0] = '\0'; uncar[0] = ',';
7fd59977 291 Handle(Interface_ParamSet) res = new Interface_ParamSet(26); //gka 19.01.99
292 if (theSeparator == ',') res->Append (vide,0,Interface_ParamVoid,0);
293 else { uncar[0] = theSeparator; res->Append (uncar,1,Interface_ParamMisc,0); }
294
295 if (theEndMark == ';') res->Append (vide,0,Interface_ParamVoid,0);
296 else { uncar[0] = theEndMark; res->Append (uncar,1,Interface_ParamMisc,0); }
297
298 MakeHollerith (theSendName,text,lt);
299 res->Append (text,lt, Interface_ParamText,0);
300
301 MakeHollerith (theFileName,text,lt);
302 res->Append (text,lt, Interface_ParamText,0);
303
304 MakeHollerith (theSystemId,text,lt);
305 res->Append (text,lt, Interface_ParamText,0);
306
307 MakeHollerith (theInterfaceVersion,text,lt);
308 res->Append (text,lt, Interface_ParamText,0);
309
310 sprintf(nombre,"%d",theIntegerBits);
7dc9e047 311 res->Append (nombre,(Standard_Integer)strlen(nombre),Interface_ParamInteger,0);
7fd59977 312
313 sprintf(nombre,"%d",theMaxPower10Single);
7dc9e047 314 res->Append (nombre,(Standard_Integer)strlen(nombre),Interface_ParamInteger,0);
7fd59977 315
316 sprintf(nombre,"%d",theMaxDigitsSingle);
7dc9e047 317 res->Append (nombre,(Standard_Integer)strlen(nombre),Interface_ParamInteger,0);
7fd59977 318
319 sprintf(nombre,"%d",theMaxPower10Double);
7dc9e047 320 res->Append (nombre,(Standard_Integer)strlen(nombre),Interface_ParamInteger,0);
7fd59977 321
322 sprintf(nombre,"%d",theMaxDigitsDouble);
7dc9e047 323 res->Append (nombre,(Standard_Integer)strlen(nombre),Interface_ParamInteger,0);
7fd59977 324
325 MakeHollerith (theReceiveName,text,lt);
326 res->Append (text,lt, Interface_ParamText,0);
327
328 Interface_FloatWriter::Convert (theScale,nombre,Standard_True,0.,0.,"%f","%f");
329// sprintf(nombre,"%f",theScale);
7dc9e047 330 res->Append (nombre,(Standard_Integer)strlen(nombre),Interface_ParamReal,0);
7fd59977 331
332 sprintf(nombre,"%d",theUnitFlag);
7dc9e047 333 res->Append (nombre,(Standard_Integer)strlen(nombre),Interface_ParamInteger,0);
7fd59977 334
335 MakeHollerith (theUnitName,text,lt);
336 res->Append (text,lt, Interface_ParamText,0);
337
338 sprintf(nombre,"%d",theLineWeightGrad);
7dc9e047 339 res->Append (nombre,(Standard_Integer)strlen(nombre),Interface_ParamInteger,0);
7fd59977 340
341 Interface_FloatWriter::Convert (theMaxLineWeight,nombre,Standard_True,0.,0.,"%f","%f");
342// sprintf(nombre,"%f",theMaxLineWeight);
7dc9e047 343 res->Append (nombre,(Standard_Integer)strlen(nombre),Interface_ParamReal,0);
7fd59977 344
345 MakeHollerith (theDate,text,lt);
346 res->Append (text,lt, Interface_ParamText,0);
347
348 Interface_FloatWriter::Convert (theResolution,nombre,Standard_True,0.,0.,"%g","%g");
349// sprintf(nombre,"%f",theResolution);
7dc9e047 350 res->Append (nombre,(Standard_Integer)strlen(nombre),Interface_ParamReal,0);
7fd59977 351
352 if (hasMaxCoord)
353 Interface_FloatWriter::Convert (theMaxCoord,nombre,Standard_True,0.,0.,"%f","%f");
354 // sprintf(nombre,"%f",theMaxCoord);
355 else nombre[0] = '\0';
7dc9e047 356 res->Append (nombre,(Standard_Integer)strlen(nombre),Interface_ParamReal,0);
7fd59977 357
358 MakeHollerith (theAuthorName,text,lt);
359 res->Append (text,lt, Interface_ParamText,0);
360
361 MakeHollerith (theCompanyName,text,lt);
362 res->Append (text,lt, Interface_ParamText,0);
363
364 sprintf(nombre,"%d",theIGESVersion);
7dc9e047 365 res->Append (nombre,(Standard_Integer)strlen(nombre),Interface_ParamInteger,0);
7fd59977 366
367 sprintf(nombre,"%d",theDraftingStandard);
7dc9e047 368 res->Append (nombre,(Standard_Integer)strlen(nombre),Interface_ParamInteger,0);
7fd59977 369
370 if (!theLastChangeDate.IsNull()) {
371 MakeHollerith (theLastChangeDate,text,lt);
372 res->Append (text,lt, Interface_ParamText,0);
373 }
374
375 if (!theAppliProtocol.IsNull()) {
376 MakeHollerith (theAppliProtocol,text,lt);
377 res->Append (text,lt, Interface_ParamText,0);
378 }
379// Ici : parametre absent ignore
380
381 return res;
382}
383
384
385// ############### QUERIES ###############
386
387
388//=======================================================================
389//function : Separator
390//purpose :
391//=======================================================================
392
393Standard_Character IGESData_GlobalSection::Separator () const
394{
395 return theSeparator;
396}
397
398
399//=======================================================================
400//function : EndMark
401//purpose :
402//=======================================================================
403
404Standard_Character IGESData_GlobalSection::EndMark () const
405{
406 return theEndMark;
407}
408
409
410//=======================================================================
411//function : SendName
412//purpose :
413//=======================================================================
414
415Handle(TCollection_HAsciiString) IGESData_GlobalSection::SendName () const
416{
417 return theSendName;
418}
419
420
421//=======================================================================
422//function : FileName
423//purpose :
424//=======================================================================
425
426Handle(TCollection_HAsciiString) IGESData_GlobalSection::FileName () const
427{
428 return theFileName;
429}
430
431
432//=======================================================================
433//function : SystemId
434//purpose :
435//=======================================================================
436
437Handle(TCollection_HAsciiString) IGESData_GlobalSection::SystemId () const
438{
439 return theSystemId;
440}
441
442
443//=======================================================================
444//function : InterfaceVersion
445//purpose :
446//=======================================================================
447
448Handle(TCollection_HAsciiString) IGESData_GlobalSection::InterfaceVersion () const
449{
450 return theInterfaceVersion;
451}
452
453
454//=======================================================================
455//function : IntegerBits
456//purpose :
457//=======================================================================
458
459Standard_Integer IGESData_GlobalSection::IntegerBits () const
460{
461 return theIntegerBits;
462}
463
464
465//=======================================================================
466//function : MaxPower10Single
467//purpose :
468//=======================================================================
469
470Standard_Integer IGESData_GlobalSection::MaxPower10Single () const
471{
472 return theMaxPower10Single;
473}
474
475
476//=======================================================================
477//function : MaxDigitsSingle
478//purpose :
479//=======================================================================
480
481Standard_Integer IGESData_GlobalSection::MaxDigitsSingle () const
482{
483 return theMaxDigitsSingle;
484}
485
486
487//=======================================================================
488//function : MaxPower10Double
489//purpose :
490//=======================================================================
491
492Standard_Integer IGESData_GlobalSection::MaxPower10Double () const
493{
494 return theMaxPower10Double;
495}
496
497
498//=======================================================================
499//function : MaxDigitsDouble
500//purpose :
501//=======================================================================
502
503Standard_Integer IGESData_GlobalSection::MaxDigitsDouble () const
504{
505 return theMaxDigitsDouble;
506}
507
508
509//=======================================================================
510//function : ReceiveName
511//purpose :
512//=======================================================================
513
514Handle(TCollection_HAsciiString) IGESData_GlobalSection::ReceiveName () const
515{
516 return theReceiveName;
517}
518
519
520//=======================================================================
521//function : Scale
522//purpose :
523//=======================================================================
524
525Standard_Real IGESData_GlobalSection::Scale () const
526{
527 return theScale;
528}
529
530
531//=======================================================================
532//function : UnitFlag
533//purpose :
534//=======================================================================
535
536Standard_Integer IGESData_GlobalSection::UnitFlag () const
537{
538 return theUnitFlag;
539}
540
541
542//=======================================================================
543//function : UnitName
544//purpose :
545//=======================================================================
546
547Handle(TCollection_HAsciiString) IGESData_GlobalSection::UnitName () const
548{
549 return theUnitName;
550}
551
552
553//=======================================================================
554//function : LineWeightGrad
555//purpose :
556//=======================================================================
557
558Standard_Integer IGESData_GlobalSection::LineWeightGrad () const
559{
560 return theLineWeightGrad;
561}
562
563
564//=======================================================================
565//function : MaxLineWeight
566//purpose :
567//=======================================================================
568
569Standard_Real IGESData_GlobalSection::MaxLineWeight () const
570{
571 return theMaxLineWeight;
572}
573
574
575//=======================================================================
576//function : Date
577//purpose :
578//=======================================================================
579
580Handle(TCollection_HAsciiString) IGESData_GlobalSection::Date () const
581{
582 return theDate;
583}
584
585
586//=======================================================================
587//function : Resolution
588//purpose :
589//=======================================================================
590
591Standard_Real IGESData_GlobalSection::Resolution () const
592{
593 return theResolution;
594}
595
596
597//=======================================================================
598//function : MaxCoord
599//purpose :
600//=======================================================================
601
602Standard_Real IGESData_GlobalSection::MaxCoord () const
603{
604 return theMaxCoord;
605}
606
607
608//=======================================================================
609//function : HasMaxCoord
610//purpose :
611//=======================================================================
612
613Standard_Boolean IGESData_GlobalSection::HasMaxCoord () const
614{
615 return hasMaxCoord;
616}
617
618
619//=======================================================================
620//function : AuthorName
621//purpose :
622//=======================================================================
623
624Handle(TCollection_HAsciiString) IGESData_GlobalSection::AuthorName () const
625{
626 return theAuthorName;
627}
628
629
630//=======================================================================
631//function : CompanyName
632//purpose :
633//=======================================================================
634
635Handle(TCollection_HAsciiString) IGESData_GlobalSection::CompanyName () const
636{
637 return theCompanyName;
638}
639
640
641//=======================================================================
642//function : IGESVersion
643//purpose :
644//=======================================================================
645
646Standard_Integer IGESData_GlobalSection::IGESVersion () const
647{
648 return theIGESVersion;
649}
650
651
652//=======================================================================
653//function : DraftingStandard
654//purpose :
655//=======================================================================
656
657Standard_Integer IGESData_GlobalSection::DraftingStandard () const
658{
659 return theDraftingStandard;
660}
661
662
663//=======================================================================
664//function : LastChangeDate
665//purpose :
666//=======================================================================
667
668Handle(TCollection_HAsciiString) IGESData_GlobalSection::LastChangeDate () const
669{
670 return theLastChangeDate;
671}
672
673
674//=======================================================================
675//function : HasLastChangeDate
676//purpose :
677//=======================================================================
678
679Standard_Boolean IGESData_GlobalSection::HasLastChangeDate () const
680{
681 return (!theLastChangeDate.IsNull());
682}
683
684
685//=======================================================================
686//function : SetLastChangeDate
687//purpose :
688//=======================================================================
689
690void IGESData_GlobalSection::SetLastChangeDate ()
691{
692 if (HasLastChangeDate()) return;
693 Standard_Integer mois,jour,annee,heure,minute,seconde,millisec,microsec;
694 OSD_Process system;
695 Quantity_Date ladate = system.SystemDate();
696 ladate.Values (mois,jour,annee,heure,minute,seconde,millisec,microsec);
697 if (annee < 2000)
698 //#65 rln 12.02.99 S4151 (explicitly force YYMMDD.HHMMSS before Y2000)
699 theLastChangeDate = NewDateString (annee,mois,jour,heure,minute,seconde,0);
700 else
701 //#65 rln 12.02.99 S4151 (explicitly force YYYYMMDD.HHMMSS after Y2000)
702 theLastChangeDate = NewDateString (annee,mois,jour,heure,minute,seconde, -1);
703}
704
705
706//=======================================================================
707//function : HasApplicationProtocol
708//purpose :
709//=======================================================================
710
711Standard_Boolean IGESData_GlobalSection::HasApplicationProtocol () const
712{
713 return !theAppliProtocol.IsNull();
714}
715
716
717//=======================================================================
718//function : ApplicationProtocol
719//purpose :
720//=======================================================================
721
722Handle(TCollection_HAsciiString) IGESData_GlobalSection::ApplicationProtocol () const
723{
724 return theAppliProtocol;
725}
726
727
728//=======================================================================
729//function : NewDateString
730//purpose :
731//=======================================================================
732
733Handle(TCollection_HAsciiString) IGESData_GlobalSection::NewDateString
734 (const Standard_Integer annee, const Standard_Integer mois,
735 const Standard_Integer jour, const Standard_Integer heure,
736 const Standard_Integer minute, const Standard_Integer seconde,
737 const Standard_Integer mode)
738{
739// 0 : IGES annee a l ancienne 00-99 -1 IGES annee complete 1 lisible
740 char madate[60];
741 Standard_Integer moi = mois , jou = jour , anne = annee;
742 Standard_Integer heur = heure , minut = minute , second = seconde;
743 if (annee == 0) {
744 Standard_Integer millisec,microsec;
745 OSD_Process system;
746 Quantity_Date ladate = system.SystemDate();
747 ladate.Values (moi,jou,anne,heur,minut,second,millisec,microsec);
748 }
749 if (mode == 0 || mode == -1) {
750 Standard_Integer an = anne % 100;
751 Standard_Boolean dizaine = (an >= 10);
752 if (!dizaine) an += 10;
753 if (mode < 0) { an = anne; dizaine = Standard_True; }
754 Standard_Integer date1 = (an) * 10000 + moi * 100 + jou;
755 Standard_Integer date2 = (heur + 100) * 10000 + minut * 100 + second;
756 sprintf (madate,"%d%d",date1,date2);
757 madate[(mode == 0 ? 6: 8)] = '.';
758 if (!dizaine) madate[0] = '0';
759 } else if (mode == 1) {
760 sprintf (madate,"%4.4d-%2.2d-%2.2d:%2.2d-%2.2d-%2.2d",
761 anne,moi,jou,heur,minut,second);
762 }
763 return new TCollection_HAsciiString(madate);
764}
765
766
767//=======================================================================
768//function : NewDateString
769//purpose :
770//=======================================================================
771
772Handle(TCollection_HAsciiString) IGESData_GlobalSection::NewDateString
773 (const Handle(TCollection_HAsciiString)& date, const Standard_Integer mode)
774{
775 Standard_Integer anne,moi,jou,heur,minut,second;
776 if (date.IsNull()) return date;
777 Standard_Integer i0 = 0;
778 if (date->Length() == 15) i0 = 2;
779 else if (date->Length() != 13) return date;
780 if (date->Value(i0+7) != '.') return date;
781 anne = (date->Value(i0+ 1) - 48) * 10 + (date->Value(i0+ 2) - 48);
782 if (i0 == 0) {
783 anne = anne + 1900;
784 if (anne < 1980) anne += 100;
785 } else {
786 anne = anne + (date->Value(1) - 48) *1000 + (date->Value(2) - 48) * 100;
787 }
788 moi = (date->Value(i0+ 3) - 48) * 10 + (date->Value(i0+ 4) - 48);
789 jou = (date->Value(i0+ 5) - 48) * 10 + (date->Value(i0+ 6) - 48);
790 heur = (date->Value(i0+ 8) - 48) * 10 + (date->Value(i0+ 9) - 48);
791 minut = (date->Value(i0+10) - 48) * 10 + (date->Value(i0+11) - 48);
792 second = (date->Value(i0+12) - 48) * 10 + (date->Value(i0+13) - 48);
793
794 return IGESData_GlobalSection::NewDateString (anne,moi,jou,heur,minut,second,mode);
795}
796
797
798//=======================================================================
799//function : UnitValue
800//purpose :
801//=======================================================================
802
803Standard_Real IGESData_GlobalSection::UnitValue () const
804{
805 return UnitsMethods::GetLengthFactorValue ( theUnitFlag ) /
806 UnitsMethods::GetCasCadeLengthUnit(); //abv 22 Feb 00: adding cascade unit factor
807}
808
809
810// ############### UPDATES ###############
811
812 void IGESData_GlobalSection::SetSeparator (const Standard_Character val)
813 { theSeparator = val; }
814
815 void IGESData_GlobalSection::SetEndMark (const Standard_Character val)
816 { theEndMark = val; }
817
818 void IGESData_GlobalSection::SetSendName (const Handle(TCollection_HAsciiString)& val)
819 { theSendName = TranslatedFromHollerith(val); }
820
821 void IGESData_GlobalSection::SetFileName (const Handle(TCollection_HAsciiString)& val)
822 { theFileName = TranslatedFromHollerith(val); }
823
824 void IGESData_GlobalSection::SetSystemId (const Handle(TCollection_HAsciiString)& val)
825 { theSystemId = TranslatedFromHollerith(val); }
826
827 void IGESData_GlobalSection::SetInterfaceVersion (const Handle(TCollection_HAsciiString)& val)
828 { theInterfaceVersion = TranslatedFromHollerith(val); }
829
830 void IGESData_GlobalSection::SetIntegerBits (const Standard_Integer val)
831 { theIntegerBits = val; }
832
833 void IGESData_GlobalSection::SetMaxPower10Single (const Standard_Integer val)
834 { theMaxPower10Single = val; }
835
836 void IGESData_GlobalSection::SetMaxDigitsSingle (const Standard_Integer val)
837 { theMaxDigitsSingle = val; }
838
839 void IGESData_GlobalSection::SetMaxPower10Double (const Standard_Integer val)
840 { theMaxPower10Double = val; }
841
842 void IGESData_GlobalSection::SetMaxDigitsDouble (const Standard_Integer val)
843 { theMaxDigitsDouble = val; }
844
845 void IGESData_GlobalSection::SetReceiveName (const Handle(TCollection_HAsciiString)& val)
846 { theReceiveName = TranslatedFromHollerith(val); }
847
848 void IGESData_GlobalSection::SetScale (const Standard_Real val)
849 { theScale = val; }
850
851 void IGESData_GlobalSection::SetUnitFlag (const Standard_Integer val)
852 { theUnitFlag = val; }
853
854 void IGESData_GlobalSection::SetUnitName (const Handle(TCollection_HAsciiString)& val)
855 { theUnitName = TranslatedFromHollerith(val); }
856
857 void IGESData_GlobalSection::SetLineWeightGrad (const Standard_Integer val)
858 { theLineWeightGrad = val; }
859
860 void IGESData_GlobalSection::SetMaxLineWeight (const Standard_Real val)
861 { theMaxLineWeight = val; }
862
863 void IGESData_GlobalSection::SetDate (const Handle(TCollection_HAsciiString)& val)
864 { theDate = TranslatedFromHollerith(val); }
865
866 void IGESData_GlobalSection::SetResolution (const Standard_Real val)
867 { theResolution = val; }
868
869 void IGESData_GlobalSection::SetMaxCoord (const Standard_Real val)
870{
871 hasMaxCoord = (val > 0.);
872 theMaxCoord = (hasMaxCoord ? val : 0.);
873}
874
875 void IGESData_GlobalSection::MaxMaxCoord (const Standard_Real val)
876{
877 Standard_Real aval = Abs(val);
878 if (hasMaxCoord) { if (aval > theMaxCoord) theMaxCoord = aval; }
879 else SetMaxCoord (aval);
880}
881
882 void IGESData_GlobalSection::MaxMaxCoords (const gp_XYZ& xyz)
883{ MaxMaxCoord (xyz.X()); MaxMaxCoord (xyz.Y()); MaxMaxCoord (xyz.Z()); }
884
885
886 void IGESData_GlobalSection::SetAuthorName (const Handle(TCollection_HAsciiString)& val)
887 { theAuthorName = TranslatedFromHollerith(val); }
888
889 void IGESData_GlobalSection::SetCompanyName (const Handle(TCollection_HAsciiString)& val)
890 { theCompanyName = TranslatedFromHollerith(val); }
891
892 void IGESData_GlobalSection::SetIGESVersion (const Standard_Integer val)
893 { theIGESVersion = val; }
894
895 void IGESData_GlobalSection::SetDraftingStandard (const Standard_Integer val)
896 { theDraftingStandard = val; }
897
898 void IGESData_GlobalSection::SetLastChangeDate (const Handle(TCollection_HAsciiString)& val)
899 { theLastChangeDate = TranslatedFromHollerith(val); }
900
901 void IGESData_GlobalSection::SetApplicationProtocol (const Handle(TCollection_HAsciiString)& val)
902 { theAppliProtocol = TranslatedFromHollerith(val); }