0031501: Foundation Classes, Message_Printer - remove theToPutEndl argument -- prepar...
[occt.git] / src / IGESDimen / IGESDimen_ToolGeneralNote.cxx
CommitLineData
b311480e 1// Created by: CKY / Contract Toubro-Larsen
2// Copyright (c) 1993-1999 Matra Datavision
973c2be1 3// Copyright (c) 1999-2014 OPEN CASCADE SAS
b311480e 4//
973c2be1 5// This file is part of Open CASCADE Technology software library.
7fd59977 6//
d5f74e42 7// This library is free software; you can redistribute it and/or modify it under
8// the terms of the GNU Lesser General Public License version 2.1 as published
973c2be1 9// by the Free Software Foundation, with special exception defined in the file
10// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
11// distribution for complete text of the license and disclaimer of any warranty.
7fd59977 12//
973c2be1 13// Alternatively, this file may be used under the terms of Open CASCADE
14// commercial license or contractual agreement.
b311480e 15
16//--------------------------------------------------------------------
7fd59977 17//--------------------------------------------------------------------
18
42cf5bc1 19#include <gp_Pnt.hxx>
20#include <gp_XYZ.hxx>
21#include <IGESData_DirChecker.hxx>
22#include <IGESData_Dump.hxx>
23#include <IGESData_IGESDumper.hxx>
24#include <IGESData_IGESReaderData.hxx>
25#include <IGESData_IGESWriter.hxx>
7fd59977 26#include <IGESData_ParamCursor.hxx>
42cf5bc1 27#include <IGESData_ParamReader.hxx>
28#include <IGESDimen_GeneralNote.hxx>
29#include <IGESDimen_ToolGeneralNote.hxx>
30#include <IGESGraph_HArray1OfTextFontDef.hxx>
7fd59977 31#include <IGESGraph_TextFontDef.hxx>
42cf5bc1 32#include <Interface_Check.hxx>
33#include <Interface_CopyTool.hxx>
34#include <Interface_EntityIterator.hxx>
7fd59977 35#include <Interface_HArray1OfHAsciiString.hxx>
7fd59977 36#include <Interface_Macros.hxx>
42cf5bc1 37#include <Interface_ShareTool.hxx>
38#include <Message_Messenger.hxx>
39#include <Standard_DomainError.hxx>
40#include <TColgp_HArray1OfXYZ.hxx>
41#include <TCollection_HAsciiString.hxx>
42#include <TColStd_HArray1OfInteger.hxx>
43#include <TColStd_HArray1OfReal.hxx>
7fd59977 44
42cf5bc1 45#include <stdio.h>
7fd59977 46IGESDimen_ToolGeneralNote::IGESDimen_ToolGeneralNote () { }
47
48
49void IGESDimen_ToolGeneralNote::ReadOwnParams
50 (const Handle(IGESDimen_GeneralNote)& ent,
51 const Handle(IGESData_IGESReaderData)& IR, IGESData_ParamReader& PR) const
52{
53 //Standard_Boolean st; //szv#4:S4163:12Mar99 moved down
54
55 Standard_Integer nbval;
56 Handle(TColStd_HArray1OfInteger) nbChars;
57 Handle(TColStd_HArray1OfReal) boxWidths;
58 Handle(TColStd_HArray1OfReal) boxHeights;
59 Handle(TColStd_HArray1OfInteger) fontCodes;
60 Handle(IGESGraph_HArray1OfTextFontDef) fontEntities;
61 Handle(TColStd_HArray1OfReal) slantAngles;
62 Handle(TColStd_HArray1OfReal) rotationAngles;
63 Handle(TColStd_HArray1OfInteger) mirrorFlags;
64 Handle(TColStd_HArray1OfInteger) rotateFlags;
65 Handle(TColgp_HArray1OfXYZ) startPoints;
66 Handle(Interface_HArray1OfHAsciiString) texts;
67
68 Standard_Boolean st = PR.ReadInteger(PR.Current(), "Number of Text Strings", nbval);
69 if (st && nbval > 0) {
70 nbChars = new TColStd_HArray1OfInteger(1, nbval);
71 boxWidths = new TColStd_HArray1OfReal(1, nbval);
72 boxHeights = new TColStd_HArray1OfReal(1, nbval);
73 fontCodes = new TColStd_HArray1OfInteger(1, nbval);
74 fontEntities = new IGESGraph_HArray1OfTextFontDef(1, nbval);
75 slantAngles = new TColStd_HArray1OfReal(1, nbval);
76 rotationAngles = new TColStd_HArray1OfReal(1, nbval);
77 mirrorFlags = new TColStd_HArray1OfInteger(1, nbval);
78 rotateFlags = new TColStd_HArray1OfInteger(1, nbval);
79 startPoints = new TColgp_HArray1OfXYZ(1, nbval);
80 texts = new Interface_HArray1OfHAsciiString(1, nbval);
81 }
82 else PR.AddFail("Number of Text Strings: Not Positive");
83
84
85 if (! nbChars.IsNull())
86 {
87 for (Standard_Integer i = 1; i <= nbval; i++)
88 {
89 Standard_Integer nbChar;
90 Standard_Real boxWidth;
91 Standard_Real boxHeight;
92 Standard_Integer fontCode;
93 Handle(IGESGraph_TextFontDef) fontEntity;
94 Standard_Real slantAngle;
95 Standard_Real rotationAngle;
96 Standard_Integer mirrorFlag;
97 Standard_Integer rotateFlag;
98 gp_XYZ startPoint;
99 Handle(TCollection_HAsciiString) text;
100
101 //st = PR.ReadInteger(PR.Current(), "Number of Characters", nbChar); //szv#4:S4163:12Mar99 moved in if
102 if (PR.ReadInteger(PR.Current(), "Number of Characters", nbChar))
103 nbChars->SetValue(i, nbChar);
104
105 //st = PR.ReadReal(PR.Current(), "Box Width", boxWidth); //szv#4:S4163:12Mar99 moved in if
106 if (PR.ReadReal(PR.Current(), "Box Width", boxWidth))
107 boxWidths->SetValue(i, boxWidth);
108
109 //st = PR.ReadReal(PR.Current(), "Box Height", boxHeight); //szv#4:S4163:12Mar99 moved in if
110 if (PR.ReadReal(PR.Current(), "Box Height", boxHeight))
111 boxHeights->SetValue(i, boxHeight);
112
113 Standard_Integer curnum = PR.CurrentNumber();
114 if (PR.DefinedElseSkip())
115 {
116 // Reading fontCode(Integer, must be positive)
117 PR.ReadInteger (PR.Current(), "Font Code", fontCode); //szv#4:S4163:12Mar99 `st=` not needed
118 // Reading fontEnt(TextFontDef) ?
119 if (fontCode < 0) {
120 fontEntity = GetCasted(IGESGraph_TextFontDef,PR.ParamEntity (IR,curnum));
121 if (fontEntity.IsNull()) PR.AddFail ("Font Entity : incorrect reference");
122 fontEntities->SetValue(i, fontEntity);
123 fontCodes->SetValue(i, -1);
124 }
125 else fontCodes->SetValue(i, fontCode);
126 }
127 else
128 {
129 fontCodes->SetValue(i, 1);
130 }
131
132 if (PR.DefinedElseSkip())
133 {
134 //st = PR.ReadReal(PR.Current(), "Slant Angle", slantAngle); //szv#4:S4163:12Mar99 moved in if
135 if (PR.ReadReal(PR.Current(), "Slant Angle", slantAngle))
136 slantAngles->SetValue(i, slantAngle);
137 }
138 else
c6541a0c 139 slantAngles->SetValue(i, M_PI/2);
7fd59977 140
141 //st = PR.ReadReal(PR.Current(), "Rotation Angle", rotationAngle); //szv#4:S4163:12Mar99 moved in if
142 if (PR.ReadReal(PR.Current(), "Rotation Angle", rotationAngle))
143 rotationAngles->SetValue(i, rotationAngle);
144
145 //st = PR.ReadInteger(PR.Current(), "Mirror Flag", mirrorFlag); //szv#4:S4163:12Mar99 moved in if
146 if (PR.ReadInteger(PR.Current(), "Mirror Flag", mirrorFlag))
147 mirrorFlags->SetValue(i, mirrorFlag);
148
149 //st = PR.ReadInteger(PR.Current(), "Rotate Flag", rotateFlag); //szv#4:S4163:12Mar99 moved in if
150 if (PR.ReadInteger(PR.Current(), "Rotate Flag", rotateFlag))
151 rotateFlags->SetValue(i, rotateFlag);
152
153 //st = PR.ReadXYZ(PR.CurrentList(1, 3), "Start Point", startPoint); //szv#4:S4163:12Mar99 moved in if
154 if (PR.ReadXYZ(PR.CurrentList(1, 3), "Start Point", startPoint))
155 startPoints->SetValue(i, startPoint);
156
157 //st = PR.ReadText(PR.Current(), "Text String", text); //szv#4:S4163:12Mar99 moved in if
158 if (PR.ReadText(PR.Current(), "Text String", text))
159 texts->SetValue(i, text);
160 }
161 }
162 //sln 28.09.2001, BUC61004, If the condition is false function ent->Init is not called in order to avoid exception
163 if(!(nbChars.IsNull() || boxWidths.IsNull() || boxHeights.IsNull() || fontCodes.IsNull() ||
164 fontEntities.IsNull() || slantAngles.IsNull() || rotationAngles.IsNull() ||
165 mirrorFlags.IsNull() || rotateFlags.IsNull() || startPoints.IsNull() || texts.IsNull()))
166 {
167 DirChecker(ent).CheckTypeAndForm(PR.CCheck(),ent);
168 ent->Init
169 (nbChars, boxWidths, boxHeights, fontCodes, fontEntities,
170 slantAngles, rotationAngles, mirrorFlags, rotateFlags,
171 startPoints, texts);
172 }
173}
174
175void IGESDimen_ToolGeneralNote::WriteOwnParams
176 (const Handle(IGESDimen_GeneralNote)& ent, IGESData_IGESWriter& IW) const
177{
178 Standard_Integer nbval = ent->NbStrings();
179 IW.Send(nbval);
180
181 for (Standard_Integer i = 1; i <= nbval; i++)
182 {
183 IW.Send(ent->NbCharacters(i));
184 IW.Send(ent->BoxWidth(i));
185 IW.Send(ent->BoxHeight(i));
186 if (ent->IsFontEntity(i))
187 IW.Send(ent->FontEntity(i),Standard_True); // negative
188 else
189 IW.Send(ent->FontCode(i));
190 IW.Send(ent->SlantAngle(i));
191 IW.Send(ent->RotationAngle(i));
192 IW.Send(ent->MirrorFlag(i));
193 IW.Send(ent->RotateFlag(i));
194 IW.Send((ent->StartPoint(i)).X());
195 IW.Send((ent->StartPoint(i)).Y());
196 IW.Send((ent->StartPoint(i)).Z());
197 IW.Send(ent->Text(i));
198 }
199}
200
201void IGESDimen_ToolGeneralNote::OwnShared
202 (const Handle(IGESDimen_GeneralNote)& ent, Interface_EntityIterator& iter) const
203{
204 Standard_Integer nbval = ent->NbStrings();
205 for (Standard_Integer i = 1; i <= nbval; i++) {
206 if (ent->IsFontEntity(i))
207 iter.GetOneItem(ent->FontEntity(i));
208 }
209}
210
211void IGESDimen_ToolGeneralNote::OwnCopy
212 (const Handle(IGESDimen_GeneralNote)& another,
213 const Handle(IGESDimen_GeneralNote)& ent, Interface_CopyTool& TC) const
214{
215 Standard_Integer nbval = another->NbStrings();
216
217 Handle(TColStd_HArray1OfInteger) nbChars;
218 Handle(TColStd_HArray1OfReal) boxWidths;
219 Handle(TColStd_HArray1OfReal) boxHeights;
220 Handle(TColStd_HArray1OfInteger) fontCodes;
221 Handle(IGESGraph_HArray1OfTextFontDef) fontEntities;
222 Handle(TColStd_HArray1OfReal) slantAngles;
223 Handle(TColStd_HArray1OfReal) rotationAngles;
224 Handle(TColStd_HArray1OfInteger) mirrorFlags;
225 Handle(TColStd_HArray1OfInteger) rotateFlags;
226 Handle(TColgp_HArray1OfXYZ) startPoints;
227 Handle(Interface_HArray1OfHAsciiString) texts;
228
229 nbChars = new TColStd_HArray1OfInteger(1, nbval);
230 boxWidths = new TColStd_HArray1OfReal (1, nbval);
231 boxHeights = new TColStd_HArray1OfReal (1, nbval);
232 fontCodes = new TColStd_HArray1OfInteger(1, nbval);
233 fontEntities = new IGESGraph_HArray1OfTextFontDef(1, nbval);
234 slantAngles = new TColStd_HArray1OfReal (1, nbval);
235 rotationAngles = new TColStd_HArray1OfReal (1, nbval);
236 mirrorFlags = new TColStd_HArray1OfInteger(1, nbval);
237 rotateFlags = new TColStd_HArray1OfInteger(1, nbval);
238 startPoints = new TColgp_HArray1OfXYZ (1, nbval);
239 texts = new Interface_HArray1OfHAsciiString(1, nbval);
240
241 for (Standard_Integer i = 1; i <= nbval; i++)
242 {
243 Standard_Integer nbChar = another->NbCharacters(i);
244 nbChars->SetValue(i, nbChar);
245 Standard_Real boxWidth = another->BoxWidth(i);
246 boxWidths->SetValue(i, boxWidth);
247 Standard_Real boxHeight = another->BoxHeight(i);
248 boxHeights->SetValue(i, boxHeight);
249
250 if (another->IsFontEntity(i))
251 {
252 DeclareAndCast(IGESGraph_TextFontDef, fontEntity,
253 TC.Transferred(another->FontEntity(i)));
254 fontEntities->SetValue(i, fontEntity);
255 fontCodes->SetValue(i, -1);
256 }
257 else
258 {
259 Standard_Integer fontCode = another->FontCode(i);
260 fontCodes->SetValue(i, fontCode);
261//// fontEntities->SetValue(i, NULL); par defaut
262 }
263
264 Standard_Real slantAngle = another->SlantAngle(i);
265 slantAngles->SetValue(i, slantAngle);
266 Standard_Real rotationAngle = another->RotationAngle(i);
267 rotationAngles->SetValue(i, rotationAngle);
268 Standard_Integer mirrorFlag = another->MirrorFlag(i);
269 mirrorFlags->SetValue(i, mirrorFlag);
270 Standard_Integer rotateFlag = another->RotateFlag(i);
271 rotateFlags->SetValue(i, rotateFlag);
272 gp_XYZ startPoint = (another->StartPoint(i)).XYZ();
273 startPoints->SetValue(i, startPoint);
274 Handle(TCollection_HAsciiString) text =
275 new TCollection_HAsciiString(another->Text(i));
276 texts->SetValue(i, text);
277 }
278
279 ent->Init(nbChars, boxWidths, boxHeights, fontCodes, fontEntities,
280 slantAngles, rotationAngles, mirrorFlags, rotateFlags,
281 startPoints, texts);
282 ent->SetFormNumber(another->FormNumber());
283}
284
285IGESData_DirChecker IGESDimen_ToolGeneralNote::DirChecker
286 (const Handle(IGESDimen_GeneralNote)& /* ent */ ) const
287{
288 IGESData_DirChecker DC (212, 0, 105);
289 DC.Structure(IGESData_DefVoid);
290 DC.LineFont(IGESData_DefValue);
291 DC.LineWeight(IGESData_DefValue);
292 DC.Color(IGESData_DefAny);
293 DC.UseFlagRequired(1);
294 DC.HierarchyStatusIgnored();
295 return DC;
296}
297
298void IGESDimen_ToolGeneralNote::OwnCheck
299 (const Handle(IGESDimen_GeneralNote)& ent,
300 const Interface_ShareTool& , Handle(Interface_Check)& ach) const
301{
302 if (((ent->FormNumber() < 0) || (ent->FormNumber() > 8)) &&
303 ((ent->FormNumber() < 100) || (ent->FormNumber() > 102)) &&
304 (ent->FormNumber() != 105))
305 ach->AddFail("Form Number: Not Valid");
306
307 Standard_Integer upper = ent->NbStrings();
308 for (Standard_Integer i = 1; i <= upper; i++)
309 {
310 if (ent->NbCharacters(i) != ent->Text(i)->Length())
311 {
312 char mess[80];
313 sprintf(mess,"%d : Number of Characters != Length of Text String",i);
314 ach->AddFail(mess);
315 }
316 Standard_Integer mflag = ent->MirrorFlag(i);
317 if ((mflag < 0) || (mflag > 2))
318 {
319 char mess[80];
320 sprintf(mess, "%d : Mirror flag != 0, 1, 2",i);
321 ach->AddFail(mess);
322 }
323 Standard_Integer rflag = ent->RotateFlag(i);
324 if ((rflag < 0) || (rflag > 1))
325 {
326 char mess[80];
327 sprintf(mess, "%d : Rotate flag != 0, 1",i);
328 ach->AddFail(mess);
329 }
330 }
331}
332
333void IGESDimen_ToolGeneralNote::OwnDump
334 (const Handle(IGESDimen_GeneralNote)& ent, const IGESData_IGESDumper& dumper,
0ebe5b0a 335 Standard_OStream& S, const Standard_Integer level) const
7fd59977 336{
337 Standard_Integer sublevel = (level > 4) ? 1 : 0;
338 Standard_Integer upper = ent->NbStrings();
339
0ebe5b0a 340 S << "IGESDimen_GeneralNote\n"
341 << "Number of Text Strings : " << upper << "\n"
342 << "Number of Characters :\n"
343 << "Box Widths :\n"
344 << "Box Heights :\n"
345 << "Font Codes :\n"
346 << "Font Entities :\n"
347 << "Slant Angles :\n"
348 << "Rotation Angles :\n"
349 << "Mirror Flags :\n"
350 << "Rotate Flags :\n"
351 << "Start Points :\n"
352 << "Texts : ";
7fd59977 353 IGESData_DumpVals(S,-level,1, ent->NbStrings(),ent->NbCharacters);
0ebe5b0a 354 S << "\n";
7fd59977 355 if (level > 4)
356 {
0ebe5b0a 357 S << "Details of each String\n";
7fd59977 358 for ( Standard_Integer i = 1; i <= upper; i++)
359 {
0ebe5b0a 360 S << "[" << i << "]:\n"
361 << "Number of Characters : " << ent->NbCharacters(i) << " "
362 << "Box Width : " << ent->BoxWidth(i) << " "
363 << "Box Height : " << ent->BoxHeight(i) << "\n";
7fd59977 364 if (ent->IsFontEntity(i))
365 {
366 S << "Font Entity : ";
367 dumper.Dump (ent->FontEntity(i),S, sublevel);
0ebe5b0a 368 S << "\n";
7fd59977 369 }
370 else
0ebe5b0a 371 S << "Font Code : " << ent->FontCode(i) << "\n"
372 << "Slant Angle : " << ent->SlantAngle(i) << " "
373 << "Rotation Angle : " << ent->RotationAngle(i) << " "
374 << "Mirror Flag : " << ent->MirrorFlag(i) << " "
375 << "Rotate Flag : " << ent->RotateFlag(i) << "\n"
376 << "Start Point : ";
7fd59977 377 IGESData_DumpXYZL(S,level, ent->StartPoint(i), ent->Location());
378 S << "\nText : ";
379 IGESData_DumpString(S,ent->Text(i));
0ebe5b0a 380 S << "\n";
7fd59977 381 }
382 }
0ebe5b0a 383 S << std::endl;
7fd59977 384}