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 | |
19 | #include <IGESDefs_ToolAttributeDef.ixx> |
20 | #include <IGESData_ParamCursor.hxx> |
21 | #include <IGESGraph_TextDisplayTemplate.hxx> |
22 | #include <TColStd_HArray1OfTransient.hxx> |
23 | #include <IGESData_IGESEntity.hxx> |
24 | #include <TCollection_HAsciiString.hxx> |
25 | #include <TColStd_HArray1OfReal.hxx> |
26 | #include <TColStd_HArray1OfInteger.hxx> |
27 | #include <IGESData_HArray1OfIGESEntity.hxx> |
28 | #include <IGESGraph_HArray1OfTextDisplayTemplate.hxx> |
29 | #include <IGESDefs_HArray1OfHArray1OfTextDisplayTemplate.hxx> |
30 | #include <Interface_HArray1OfHAsciiString.hxx> |
31 | #include <IGESData_Dump.hxx> |
32 | #include <Interface_Macros.hxx> |
33 | #include <stdio.h> |
34 | |
35 | |
36 | IGESDefs_ToolAttributeDef::IGESDefs_ToolAttributeDef () { } |
37 | |
38 | |
39 | void IGESDefs_ToolAttributeDef::ReadOwnParams |
40 | (const Handle(IGESDefs_AttributeDef)& ent, |
41 | const Handle(IGESData_IGESReaderData)& IR, IGESData_ParamReader& PR) const |
42 | { |
43 | //Standard_Boolean st; //szv#4:S4163:12Mar99 moved down |
44 | Handle(TCollection_HAsciiString) aName; |
45 | Standard_Integer aListType; |
46 | Handle(TColStd_HArray1OfInteger) attrTypes; |
47 | Handle(TColStd_HArray1OfInteger) attrValueDataTypes; |
48 | Handle(TColStd_HArray1OfInteger) attrValueCounts; |
49 | Handle(TColStd_HArray1OfTransient) attrValues; |
50 | Handle(IGESDefs_HArray1OfHArray1OfTextDisplayTemplate) attrValuePointers; |
51 | Standard_Integer nbval; |
52 | Standard_Integer fn = ent->FormNumber(); |
53 | |
54 | if (PR.DefinedElseSkip()) |
55 | PR.ReadText(PR.Current(), "Attribute Table Name", aName); //szv#4:S4163:12Mar99 `st=` not needed |
56 | |
57 | PR.ReadInteger(PR.Current(), "Attribute List Type", aListType); //szv#4:S4163:12Mar99 `st=` not needed |
58 | |
59 | Standard_Boolean st = PR.ReadInteger(PR.Current(), "Number of Attributes", nbval); |
60 | if (st && nbval > 0) |
61 | { |
62 | attrTypes = new TColStd_HArray1OfInteger(1, nbval); |
63 | attrValueDataTypes = new TColStd_HArray1OfInteger(1, nbval); |
64 | attrValueCounts = new TColStd_HArray1OfInteger(1, nbval); |
65 | if (fn > 0) attrValues = |
66 | new TColStd_HArray1OfTransient(1, nbval); |
67 | if (fn > 1) attrValuePointers = |
68 | new IGESDefs_HArray1OfHArray1OfTextDisplayTemplate(1, nbval); |
69 | } |
70 | else PR.AddFail("Number of Attributes: Not Positive"); |
71 | |
72 | if ( ! attrTypes.IsNull()) |
73 | for (Standard_Integer i = 1; i <= nbval; i++) |
74 | { |
75 | Standard_Integer attrType; |
76 | Standard_Integer attrValueDataType; |
77 | Standard_Integer avc; |
78 | // Value according type |
79 | Handle(IGESGraph_HArray1OfTextDisplayTemplate) attrValuePointer; |
80 | |
81 | //st = PR.ReadInteger(PR.Current(), "Attribute Type", attrType); //szv#4:S4163:12Mar99 moved in if |
82 | if (PR.ReadInteger(PR.Current(), "Attribute Type", attrType)) |
83 | attrTypes->SetValue(i, attrType); |
84 | |
85 | st = PR.ReadInteger(PR.Current(),"Attribute Data Type",attrValueDataType); |
86 | if (st) attrValueDataTypes->SetValue(i, attrValueDataType); |
87 | |
88 | if (PR.DefinedElseSkip()) |
89 | st = PR.ReadInteger (PR.Current(),"Attribute Value Count",avc); |
90 | else avc = 1; |
91 | |
92 | if (st) { |
93 | attrValueCounts->SetValue(i, avc); |
94 | if (fn > 1) attrValuePointer = |
95 | new IGESGraph_HArray1OfTextDisplayTemplate(1, avc); |
96 | } |
97 | |
98 | if (! attrValues.IsNull()) |
99 | if (fn > 0) |
100 | { |
101 | Handle(TColStd_HArray1OfInteger) attrInt; |
102 | Handle(TColStd_HArray1OfReal) attrReal; |
103 | Handle(Interface_HArray1OfHAsciiString) attrStr; |
104 | Handle(IGESData_HArray1OfIGESEntity) attrEnt; |
105 | switch (attrValueDataType) { |
106 | case 1 : attrInt = new TColStd_HArray1OfInteger (1,avc); |
107 | attrValues->SetValue(i,attrInt); break; |
108 | case 2 : attrReal = new TColStd_HArray1OfReal (1,avc); |
109 | attrValues->SetValue(i,attrReal); break; |
110 | case 3 : attrStr = new Interface_HArray1OfHAsciiString(1,avc); |
111 | attrValues->SetValue(i,attrStr); break; |
112 | case 4 : attrEnt = new IGESData_HArray1OfIGESEntity (1,avc); |
113 | attrValues->SetValue(i,attrEnt); break; |
114 | case 6 : attrInt = new TColStd_HArray1OfInteger (1,avc); |
115 | attrValues->SetValue(i,attrInt); break; |
116 | default : break; |
117 | } |
118 | for (Standard_Integer j = 1; j <= avc; j++) |
119 | { |
120 | switch(attrValueDataType) |
121 | { |
122 | case 0: |
123 | { |
124 | PR.SetCurrentNumber(PR.CurrentNumber() + 1); // passer |
125 | //// attrValue->SetValue(j, NULL); par defaut |
126 | break; |
127 | } |
128 | case 1: |
129 | { |
130 | Standard_Integer temp; |
131 | //st = PR.ReadInteger(PR.Current(), "Attribute Value", temp); //szv#4:S4163:12Mar99 moved in if |
132 | if (PR.ReadInteger(PR.Current(), "Attribute Value", temp)) |
133 | attrInt->SetValue(j, temp); |
134 | } |
135 | break; |
136 | case 2: |
137 | { |
138 | Standard_Real temp; |
139 | //st = PR.ReadReal(PR.Current(), "Attribute Value", temp); //szv#4:S4163:12Mar99 moved in if |
140 | if (PR.ReadReal(PR.Current(), "Attribute Value", temp)) |
141 | attrReal->SetValue(j, temp); |
142 | } |
143 | break; |
144 | case 3: |
145 | { |
146 | Handle(TCollection_HAsciiString) temp; |
147 | //st = PR.ReadText(PR.Current(), "Attribute Value", temp); //szv#4:S4163:12Mar99 moved in if |
148 | if (PR.ReadText(PR.Current(), "Attribute Value", temp)) |
149 | attrStr->SetValue(j, temp); |
150 | } |
151 | break; |
152 | case 4: |
153 | { |
154 | Handle(IGESData_IGESEntity) temp; |
155 | //st = PR.ReadEntity(IR, PR.Current(), "Attribute Value", temp); //szv#4:S4163:12Mar99 moved in if |
156 | if (PR.ReadEntity(IR, PR.Current(), "Attribute Value", temp)) |
157 | attrEnt->SetValue(j, temp); |
158 | } |
159 | break; |
160 | case 5: |
161 | PR.SetCurrentNumber(PR.CurrentNumber() + 1); // skip |
162 | break; |
163 | case 6: |
164 | { |
165 | Standard_Boolean temp; |
166 | //st = PR.ReadBoolean(PR.Current(), "Attribute Value", temp); //szv#4:S4163:12Mar99 moved in if |
167 | if (PR.ReadBoolean(PR.Current(), "Attribute Value", temp)) |
168 | attrInt->SetValue(j, (temp ? 1 : 0)); |
169 | } |
170 | break; |
171 | } |
172 | if (fn == 2) |
173 | { |
174 | Handle(IGESGraph_TextDisplayTemplate) tempText; |
175 | //st = PR.ReadEntity(IR,PR.Current(),"Attribute Val. Pointer", |
176 | //STANDARD_TYPE(IGESGraph_TextDisplayTemplate), tempText); //szv#4:S4163:12Mar99 moved in if |
177 | if (PR.ReadEntity(IR,PR.Current(),"Attribute Val. Pointer", |
178 | STANDARD_TYPE(IGESGraph_TextDisplayTemplate), tempText)) |
179 | attrValuePointer->SetValue(j, tempText); |
180 | } |
181 | } |
182 | if (fn == 2) |
183 | attrValuePointers->SetValue(i, attrValuePointer); |
184 | } |
185 | } |
186 | |
187 | DirChecker(ent).CheckTypeAndForm(PR.CCheck(),ent); |
188 | ent->Init |
189 | (aName, aListType, attrTypes, attrValueDataTypes, attrValueCounts, |
190 | attrValues, attrValuePointers); |
191 | } |
192 | |
193 | void IGESDefs_ToolAttributeDef::WriteOwnParams |
194 | (const Handle(IGESDefs_AttributeDef)& ent, IGESData_IGESWriter& IW) const |
195 | { |
196 | if (ent->HasTableName()) IW.Send(ent->TableName()); |
197 | else IW.SendVoid(); |
198 | IW.Send(ent->ListType()); |
199 | Standard_Integer upper = ent->NbAttributes(); |
200 | IW.Send(upper); |
201 | |
202 | for (Standard_Integer i = 1; i <= upper; i++) |
203 | { |
204 | Standard_Integer check = ent->AttributeValueDataType(i); |
205 | Standard_Integer count = ent->AttributeValueCount(i); |
206 | IW.Send(ent->AttributeType(i)); |
207 | IW.Send(check); |
208 | IW.Send(count); |
209 | if (ent->FormNumber() > 0) |
210 | { |
211 | for (Standard_Integer j = 1; j <= count; j++) |
212 | { |
213 | switch (check) { |
214 | case 0 : IW.SendVoid(); break; |
215 | case 1 : IW.Send(ent->AttributeAsInteger(i,j)); break; |
216 | case 2 : IW.Send(ent->AttributeAsReal(i,j)); break; |
217 | case 3 : IW.Send(ent->AttributeAsString(i,j)); break; |
218 | case 4 : IW.Send(ent->AttributeAsEntity(i,j)); break; |
219 | case 5 : IW.SendVoid(); break; |
220 | case 6 : IW.SendBoolean(ent->AttributeAsLogical(i,j)); break; |
221 | default : break; |
222 | } |
223 | if ( ent->FormNumber() == 2) |
224 | IW.Send(ent->AttributeTextDisplay(i,j)); |
225 | } |
226 | } |
227 | } |
228 | } |
229 | |
230 | void IGESDefs_ToolAttributeDef::OwnShared |
231 | (const Handle(IGESDefs_AttributeDef)& ent, Interface_EntityIterator& iter) const |
232 | { |
233 | Standard_Integer upper = ent->NbAttributes(); |
234 | for (Standard_Integer i = 1; i <= upper; i++) |
235 | { |
236 | Standard_Integer check = ent->AttributeValueDataType(i); |
237 | Standard_Integer count = ent->AttributeValueCount(i); |
238 | if (ent->FormNumber() > 0) |
239 | { |
240 | for (Standard_Integer j = 1; j <= count; j++) |
241 | { |
242 | if ( check == 4 ) iter.GetOneItem(ent->AttributeAsEntity(i,j)); |
243 | if ( ent->FormNumber() == 2) |
244 | iter.GetOneItem(ent->AttributeTextDisplay(i,j)); |
245 | } |
246 | } |
247 | } |
248 | } |
249 | |
250 | |
251 | void IGESDefs_ToolAttributeDef::OwnCopy |
252 | (const Handle(IGESDefs_AttributeDef)& another, |
253 | const Handle(IGESDefs_AttributeDef)& ent, Interface_CopyTool& TC) const |
254 | { |
255 | Handle(TCollection_HAsciiString) aName; |
256 | if (!another->TableName().IsNull()) aName = |
257 | new TCollection_HAsciiString(another->TableName()); |
258 | Standard_Integer aListType = another->ListType(); |
259 | |
260 | Handle(TColStd_HArray1OfInteger) attrTypes; |
261 | Handle(TColStd_HArray1OfInteger) attrValueDataTypes; |
262 | Handle(TColStd_HArray1OfInteger) attrValueCounts; |
263 | Handle(TColStd_HArray1OfTransient) attrValues; |
264 | Handle(IGESDefs_HArray1OfHArray1OfTextDisplayTemplate) attrValuePointers; |
265 | Standard_Integer nbval = another->NbAttributes(); |
266 | |
267 | attrTypes = new TColStd_HArray1OfInteger(1, nbval); |
268 | attrValueDataTypes = new TColStd_HArray1OfInteger(1, nbval); |
269 | attrValueCounts = new TColStd_HArray1OfInteger(1, nbval); |
270 | if (another->HasValues()) attrValues = |
271 | new TColStd_HArray1OfTransient(1, nbval); |
272 | if (another->HasTextDisplay()) attrValuePointers = |
273 | new IGESDefs_HArray1OfHArray1OfTextDisplayTemplate(1, nbval); |
274 | |
275 | for (Standard_Integer i = 1; i <= nbval; i++) |
276 | { |
277 | Standard_Integer attrType = another->AttributeType(i); |
278 | attrTypes->SetValue(i, attrType); |
279 | Standard_Integer attrValueDataType = another->AttributeValueDataType(i); |
280 | attrValueDataTypes->SetValue(i, attrValueDataType); |
281 | Standard_Integer avc = another->AttributeValueCount(i); |
282 | attrValueCounts->SetValue(i, avc); |
283 | Handle(IGESGraph_HArray1OfTextDisplayTemplate) attrValuePointer; |
284 | |
285 | if (another->HasTextDisplay()) attrValuePointer = |
286 | new IGESGraph_HArray1OfTextDisplayTemplate(1, avc); |
287 | |
288 | if (another->HasValues()) |
289 | { |
290 | Handle(TColStd_HArray1OfInteger) attrInt; |
291 | Handle(TColStd_HArray1OfReal) attrReal; |
292 | Handle(Interface_HArray1OfHAsciiString) attrStr; |
293 | Handle(IGESData_HArray1OfIGESEntity) attrEnt; |
294 | switch (attrValueDataType) { |
295 | case 1 : attrInt = new TColStd_HArray1OfInteger (1,avc); |
296 | attrValues->SetValue(i,attrInt); break; |
297 | case 2 : attrReal = new TColStd_HArray1OfReal (1,avc); |
298 | attrValues->SetValue(i,attrReal); break; |
299 | case 3 : attrStr = new Interface_HArray1OfHAsciiString(1,avc); |
300 | attrValues->SetValue(i,attrStr); break; |
301 | case 4 : attrEnt = new IGESData_HArray1OfIGESEntity (1,avc); |
302 | attrValues->SetValue(i,attrEnt); break; |
303 | case 6 : attrInt = new TColStd_HArray1OfInteger (1,avc); |
304 | attrValues->SetValue(i,attrInt); break; |
305 | default : break; |
306 | } |
307 | for (Standard_Integer j = 1; j <= avc; j ++) |
308 | { |
309 | switch(attrValueDataType) |
310 | { |
311 | case 0: |
312 | break; |
313 | case 1: attrInt->SetValue(j,another->AttributeAsInteger(i,j)); |
314 | break; |
315 | case 2: attrReal->SetValue(j,another->AttributeAsReal(i,j)); |
316 | break; |
317 | case 3: attrStr->SetValue(j,new TCollection_HAsciiString |
318 | (another->AttributeAsString(i,j))); |
319 | break; |
320 | case 4: { |
321 | DeclareAndCast(IGESData_IGESEntity,Ent,TC.Transferred |
322 | (another->AttributeAsEntity(i,j))); |
323 | attrEnt->SetValue(j,Ent); |
324 | } |
325 | break; |
326 | case 5: |
327 | break; |
328 | case 6: attrInt->SetValue |
329 | (j,(another->AttributeAsLogical(i,j) ? 1 : 0)); |
330 | break; |
331 | default : break; |
332 | } |
333 | if (another->HasTextDisplay()) |
334 | { |
335 | DeclareAndCast(IGESGraph_TextDisplayTemplate, temptext, |
336 | TC.Transferred(another->AttributeTextDisplay(i,j))); |
337 | attrValuePointer->SetValue (j, temptext); |
338 | } |
339 | } |
340 | if (another->HasTextDisplay()) |
341 | attrValuePointers->SetValue(i, attrValuePointer); |
342 | } |
343 | } |
344 | ent->Init |
345 | (aName, aListType, attrTypes, attrValueDataTypes, attrValueCounts, |
346 | attrValues, attrValuePointers); |
347 | } |
348 | |
349 | IGESData_DirChecker IGESDefs_ToolAttributeDef::DirChecker |
350 | (const Handle(IGESDefs_AttributeDef)& /* ent */ ) const |
351 | { |
352 | IGESData_DirChecker DC (322, 0, 2); |
353 | DC.Structure(IGESData_DefVoid); |
354 | DC.LineFont(IGESData_DefAny); |
355 | DC.LineWeight(IGESData_DefValue); |
356 | DC.Color(IGESData_DefAny); |
357 | DC.BlankStatusIgnored(); |
358 | DC.SubordinateStatusRequired(0); |
359 | DC.UseFlagRequired(2); |
360 | DC.GraphicsIgnored(1); |
361 | return DC; |
362 | } |
363 | |
364 | void IGESDefs_ToolAttributeDef::OwnCheck |
365 | (const Handle(IGESDefs_AttributeDef)& ent, |
366 | const Interface_ShareTool& , Handle(Interface_Check)& ach) const |
367 | { |
368 | Standard_Integer nb = ent->NbAttributes(); |
369 | Standard_Integer fn = ent->FormNumber(); |
370 | for (Standard_Integer i = 1; i <= nb; i ++) { |
371 | char mess[80]; |
372 | if (ent->AttributeType(i) < 0 || ent->AttributeType(i) > 9999) { |
373 | sprintf(mess,"Attribute Type n0.%d not in <0 - 9999>", ent->AttributeType(i)); |
374 | ach->AddFail(mess); |
375 | } |
376 | Standard_Integer aty = ent->AttributeValueDataType(i); |
377 | if (aty < 0 || aty > 6) { |
378 | sprintf(mess,"Attribute Value Data Type n0.%d not in <0 - 6>", aty); |
379 | ach->AddFail(mess); |
380 | } |
381 | if (ent->AttributeValueCount(i) <= 0) continue; |
382 | Handle(Standard_Transient) list = ent->AttributeList(i); |
383 | if (fn > 0 && ent.IsNull()) { |
384 | if (aty == 0 || aty == 5) continue; |
385 | sprintf(mess,"Form Number > 0 and Attribute Value List n0.%d undefined", aty); |
386 | ach->AddFail(mess); |
387 | continue; |
388 | } |
389 | else if (fn == 0) continue; |
390 | mess[0] = '\0'; |
391 | switch (aty) { |
392 | case 1 : if (!list->IsKind(STANDARD_TYPE(TColStd_HArray1OfInteger))) |
393 | sprintf(mess,"Attribute List n0.%d (Integers) badly defined", aty); |
394 | break; |
395 | case 2 : if (!list->IsKind(STANDARD_TYPE(TColStd_HArray1OfReal))) |
396 | sprintf(mess,"Attribute List n0.%d (Reals) badly defined", aty); |
397 | break; |
398 | case 3 : if (!list->IsKind(STANDARD_TYPE(Interface_HArray1OfHAsciiString))) |
399 | sprintf(mess,"Attribute List n0.%d (Strings) badly defined", aty); |
400 | break; |
401 | case 4 : if (!list->IsKind(STANDARD_TYPE(IGESData_HArray1OfIGESEntity))) |
402 | sprintf(mess,"Attribute List n0.%d (IGES Pointers) badly defined", aty); |
403 | break; |
404 | case 6 : if (!list->IsKind(STANDARD_TYPE(TColStd_HArray1OfInteger))) |
405 | sprintf(mess,"Attribute List n0.%d (Logicals i.e. Integers) badly defined", aty); |
406 | break; |
407 | default : break; |
408 | } |
409 | if (mess[0] != '\0') ach->AddFail(mess); |
410 | } |
411 | } |
412 | |
413 | |
414 | void IGESDefs_ToolAttributeDef::OwnDump |
415 | (const Handle(IGESDefs_AttributeDef)& ent, const IGESData_IGESDumper& dumper, |
416 | const Handle(Message_Messenger)& S, const Standard_Integer level) const |
417 | { |
418 | Standard_Integer sublevel = (level > 4) ? 1 : 0; |
419 | |
420 | S << "IGESDefs_AttributeDef" << endl; |
421 | S << "Attribute Table Name: "; |
422 | IGESData_DumpString(S,ent->TableName()); |
423 | S << endl; |
424 | S << "Attribute List Type : " << ent->ListType() << endl; |
425 | S << "Number of Attributes : " << ent->NbAttributes() << endl; |
426 | S << "Attribute Types : " << endl; |
427 | S << "Attribute Value Data Types : " << endl; |
428 | S << "Attribute Value Counts : " << endl; |
429 | if (ent->HasValues()) S << "Attribute Values : " << endl; |
430 | if (ent->HasTextDisplay()) S << "Attribute Value Entities : " << endl; |
431 | IGESData_DumpVals(S,-level,1, ent->NbAttributes(),ent->AttributeType); |
432 | S << endl; |
433 | if (level > 4) |
434 | { |
435 | Standard_Integer upper = ent->NbAttributes(); |
436 | for (Standard_Integer i = 1; i <= upper ; i ++) |
437 | { |
438 | Standard_Integer avc = ent->AttributeValueCount(i); |
439 | Standard_Integer typ = ent->AttributeValueDataType(i); |
440 | S << "[" << i << "]: "; |
441 | S << "Attribute Type : " << ent->AttributeType(i) << " "; |
442 | S << "Value Data Type : " << typ; |
443 | switch (typ) { |
444 | case 0 : S << " (Void)"; break; |
445 | case 1 : S << " : Integer "; break; |
446 | case 2 : S << " : Real "; break; |
447 | case 3 : S << " : String "; break; |
448 | case 4 : S << " : Entity "; break; |
449 | case 5 : S << " (Not Used)"; break; |
450 | case 6 : S << " : Logical "; break; |
451 | default : break; |
452 | } |
453 | S << " Count : " << avc << endl; |
454 | if (ent->HasValues()) |
455 | { |
456 | if (level <= 5) { |
457 | S << " [ content (Values) : ask level > 5 ]" << endl; |
458 | continue; |
459 | } |
460 | for (Standard_Integer j = 1; j <= avc; j ++) |
461 | { |
462 | S << "[" << j << "]: "; |
463 | switch(ent->AttributeValueDataType(i)) |
464 | { |
465 | case 0: S << "(Void) "; |
466 | break; |
467 | case 1: S << ent->AttributeAsInteger(i,j); |
468 | break; |
469 | case 2: S << ent->AttributeAsReal(i,j); |
470 | break; |
471 | case 3: IGESData_DumpString(S,ent->AttributeAsString(i,j)); |
472 | break; |
473 | case 4: dumper.Dump(ent->AttributeAsEntity(i,j),S,level-5); |
474 | break; |
475 | case 5: S << "(Not Used)"; |
476 | break; |
477 | case 6: |
478 | S << ( ent->AttributeAsLogical(i,j) ? "True" : "False"); |
479 | break; |
480 | default : break; |
481 | } |
482 | if (ent->HasTextDisplay()) |
483 | { |
484 | S << " Attribute Value Pointer : "; |
485 | dumper.Dump (ent->AttributeTextDisplay(i,j),S, sublevel); |
486 | } |
487 | S << endl; |
488 | } |
489 | } |
490 | } |
491 | } |
492 | S << endl; |
493 | } |