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