0031642: Visualization - crash in Graphic3d_Structure::SetVisual() on redisplaying...
[occt.git] / src / IGESDraw / IGESDraw_GeneralModule.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
7fd59977 14
42cf5bc1 15#include <IGESData_DirChecker.hxx>
16#include <IGESData_IGESEntity.hxx>
7fd59977 17#include <IGESDraw_CircArraySubfigure.hxx>
18#include <IGESDraw_ConnectPoint.hxx>
19#include <IGESDraw_Drawing.hxx>
20#include <IGESDraw_DrawingWithRotation.hxx>
42cf5bc1 21#include <IGESDraw_GeneralModule.hxx>
7fd59977 22#include <IGESDraw_LabelDisplay.hxx>
23#include <IGESDraw_NetworkSubfigure.hxx>
24#include <IGESDraw_NetworkSubfigureDef.hxx>
25#include <IGESDraw_PerspectiveView.hxx>
26#include <IGESDraw_Planar.hxx>
27#include <IGESDraw_RectArraySubfigure.hxx>
28#include <IGESDraw_SegmentedViewsVisible.hxx>
7fd59977 29#include <IGESDraw_ToolCircArraySubfigure.hxx>
30#include <IGESDraw_ToolConnectPoint.hxx>
31#include <IGESDraw_ToolDrawing.hxx>
32#include <IGESDraw_ToolDrawingWithRotation.hxx>
33#include <IGESDraw_ToolLabelDisplay.hxx>
34#include <IGESDraw_ToolNetworkSubfigure.hxx>
35#include <IGESDraw_ToolNetworkSubfigureDef.hxx>
36#include <IGESDraw_ToolPerspectiveView.hxx>
37#include <IGESDraw_ToolPlanar.hxx>
38#include <IGESDraw_ToolRectArraySubfigure.hxx>
39#include <IGESDraw_ToolSegmentedViewsVisible.hxx>
40#include <IGESDraw_ToolView.hxx>
41#include <IGESDraw_ToolViewsVisible.hxx>
42#include <IGESDraw_ToolViewsVisibleWithAttr.hxx>
42cf5bc1 43#include <IGESDraw_View.hxx>
44#include <IGESDraw_ViewsVisible.hxx>
45#include <IGESDraw_ViewsVisibleWithAttr.hxx>
46#include <Interface_Category.hxx>
47#include <Interface_Check.hxx>
48#include <Interface_CopyTool.hxx>
49#include <Interface_EntityIterator.hxx>
50#include <Interface_Macros.hxx>
51#include <Interface_ShareTool.hxx>
52#include <Standard_Transient.hxx>
53#include <Standard_Type.hxx>
7fd59977 54
92efcf78 55IMPLEMENT_STANDARD_RTTIEXT(IGESDraw_GeneralModule,IGESData_GeneralModule)
56
7fd59977 57// Each Module is attached to a Protocol : it must interprete Case Numbers
58// (arguments <CN> of various methods) in accordance to values returned by
59// the method TypeNumber from this Protocol
b311480e 60IGESDraw_GeneralModule::IGESDraw_GeneralModule () { }
7fd59977 61
62
63 void IGESDraw_GeneralModule::OwnSharedCase
64 (const Standard_Integer CN, const Handle(IGESData_IGESEntity)& ent,
65 Interface_EntityIterator& iter) const
66{
67 switch (CN) {
68 case 1 : {
69 DeclareAndCast(IGESDraw_CircArraySubfigure,anent,ent);
70 if (anent.IsNull()) return;
71 IGESDraw_ToolCircArraySubfigure tool;
72 tool.OwnShared(anent,iter);
73 }
74 break;
75 case 2 : {
76 DeclareAndCast(IGESDraw_ConnectPoint,anent,ent);
77 if (anent.IsNull()) return;
78 IGESDraw_ToolConnectPoint tool;
79 tool.OwnShared(anent,iter);
80 }
81 break;
82 case 3 : {
83 DeclareAndCast(IGESDraw_Drawing,anent,ent);
84 if (anent.IsNull()) return;
85 IGESDraw_ToolDrawing tool;
86 tool.OwnShared(anent,iter);
87 }
88 break;
89 case 4 : {
90 DeclareAndCast(IGESDraw_DrawingWithRotation,anent,ent);
91 if (anent.IsNull()) return;
92 IGESDraw_ToolDrawingWithRotation tool;
93 tool.OwnShared(anent,iter);
94 }
95 break;
96 case 5 : {
97 DeclareAndCast(IGESDraw_LabelDisplay,anent,ent);
98 if (anent.IsNull()) return;
99 IGESDraw_ToolLabelDisplay tool;
100 tool.OwnShared(anent,iter);
101 }
102 break;
103 case 6 : {
104 DeclareAndCast(IGESDraw_NetworkSubfigure,anent,ent);
105 if (anent.IsNull()) return;
106 IGESDraw_ToolNetworkSubfigure tool;
107 tool.OwnShared(anent,iter);
108 }
109 break;
110 case 7 : {
111 DeclareAndCast(IGESDraw_NetworkSubfigureDef,anent,ent);
112 if (anent.IsNull()) return;
113 IGESDraw_ToolNetworkSubfigureDef tool;
114 tool.OwnShared(anent,iter);
115 }
116 break;
117 case 8 : {
118 DeclareAndCast(IGESDraw_PerspectiveView,anent,ent);
119 if (anent.IsNull()) return;
120 IGESDraw_ToolPerspectiveView tool;
121 tool.OwnShared(anent,iter);
122 }
123 break;
124 case 9 : {
125 DeclareAndCast(IGESDraw_Planar,anent,ent);
126 if (anent.IsNull()) return;
127 IGESDraw_ToolPlanar tool;
128 tool.OwnShared(anent,iter);
129 }
130 break;
131 case 10 : {
132 DeclareAndCast(IGESDraw_RectArraySubfigure,anent,ent);
133 if (anent.IsNull()) return;
134 IGESDraw_ToolRectArraySubfigure tool;
135 tool.OwnShared(anent,iter);
136 }
137 break;
138 case 11 : {
139 DeclareAndCast(IGESDraw_SegmentedViewsVisible,anent,ent);
140 if (anent.IsNull()) return;
141 IGESDraw_ToolSegmentedViewsVisible tool;
142 tool.OwnShared(anent,iter);
143 }
144 break;
145 case 12 : {
146 DeclareAndCast(IGESDraw_View,anent,ent);
147 if (anent.IsNull()) return;
148 IGESDraw_ToolView tool;
149 tool.OwnShared(anent,iter);
150 }
151 break;
152 case 13 : {
153 DeclareAndCast(IGESDraw_ViewsVisible,anent,ent);
154 if (anent.IsNull()) return;
155 IGESDraw_ToolViewsVisible tool;
156 tool.OwnShared(anent,iter);
157 }
158 break;
159 case 14 : {
160 DeclareAndCast(IGESDraw_ViewsVisibleWithAttr,anent,ent);
161 if (anent.IsNull()) return;
162 IGESDraw_ToolViewsVisibleWithAttr tool;
163 tool.OwnShared(anent,iter);
164 }
165 break;
166 default : break;
167 }
168}
169
170 void IGESDraw_GeneralModule::OwnImpliedCase
171 (const Standard_Integer CN, const Handle(IGESData_IGESEntity)& ent,
172 Interface_EntityIterator& iter) const
173{
174 switch (CN ) {
175 case 13 : {
176 DeclareAndCast(IGESDraw_ViewsVisible,anent,ent);
177 if (anent.IsNull()) break;
178 IGESDraw_ToolViewsVisible tool;
179 tool.OwnImplied(anent,iter);
180 }
b1811c1d 181 break;
7fd59977 182 case 14 : {
183 DeclareAndCast(IGESDraw_ViewsVisibleWithAttr,anent,ent);
184 if (anent.IsNull()) break;
185 IGESDraw_ToolViewsVisibleWithAttr tool;
186 tool.OwnImplied(anent,iter);
187 }
b1811c1d 188 break;
7fd59977 189 default : break;
190 }
191}
192
193
194
195 IGESData_DirChecker IGESDraw_GeneralModule::DirChecker
196 (const Standard_Integer CN, const Handle(IGESData_IGESEntity)& ent) const
197{
198 switch (CN) {
199 case 1 : {
200 DeclareAndCast(IGESDraw_CircArraySubfigure,anent,ent);
201 if (anent.IsNull()) break;
202 IGESDraw_ToolCircArraySubfigure tool;
203 return tool.DirChecker(anent);
204 }
205 case 2 : {
206 DeclareAndCast(IGESDraw_ConnectPoint,anent,ent);
207 if (anent.IsNull()) break;
208 IGESDraw_ToolConnectPoint tool;
209 return tool.DirChecker(anent);
210 }
211 case 3 : {
212 DeclareAndCast(IGESDraw_Drawing,anent,ent);
213 if (anent.IsNull()) break;
214 IGESDraw_ToolDrawing tool;
215 return tool.DirChecker(anent);
216 }
217 case 4 : {
218 DeclareAndCast(IGESDraw_DrawingWithRotation,anent,ent);
219 if (anent.IsNull()) break;
220 IGESDraw_ToolDrawingWithRotation tool;
221 return tool.DirChecker(anent);
222 }
223 case 5 : {
224 DeclareAndCast(IGESDraw_LabelDisplay,anent,ent);
225 if (anent.IsNull()) break;
226 IGESDraw_ToolLabelDisplay tool;
227 return tool.DirChecker(anent);
228 }
229 case 6 : {
230 DeclareAndCast(IGESDraw_NetworkSubfigure,anent,ent);
231 if (anent.IsNull()) break;
232 IGESDraw_ToolNetworkSubfigure tool;
233 return tool.DirChecker(anent);
234 }
235 case 7 : {
236 DeclareAndCast(IGESDraw_NetworkSubfigureDef,anent,ent);
237 if (anent.IsNull()) break;
238 IGESDraw_ToolNetworkSubfigureDef tool;
239 return tool.DirChecker(anent);
240 }
241 case 8 : {
242 DeclareAndCast(IGESDraw_PerspectiveView,anent,ent);
243 if (anent.IsNull()) break;
244 IGESDraw_ToolPerspectiveView tool;
245 return tool.DirChecker(anent);
246 }
247 case 9 : {
248 DeclareAndCast(IGESDraw_Planar,anent,ent);
249 if (anent.IsNull()) break;
250 IGESDraw_ToolPlanar tool;
251 return tool.DirChecker(anent);
252 }
253 case 10 : {
254 DeclareAndCast(IGESDraw_RectArraySubfigure,anent,ent);
255 if (anent.IsNull()) break;
256 IGESDraw_ToolRectArraySubfigure tool;
257 return tool.DirChecker(anent);
258 }
259 case 11 : {
260 DeclareAndCast(IGESDraw_SegmentedViewsVisible,anent,ent);
261 if (anent.IsNull()) break;
262 IGESDraw_ToolSegmentedViewsVisible tool;
263 return tool.DirChecker(anent);
264 }
265 case 12 : {
266 DeclareAndCast(IGESDraw_View,anent,ent);
267 if (anent.IsNull()) break;
268 IGESDraw_ToolView tool;
269 return tool.DirChecker(anent);
270 }
271 case 13 : {
272 DeclareAndCast(IGESDraw_ViewsVisible,anent,ent);
273 if (anent.IsNull()) break;
274 IGESDraw_ToolViewsVisible tool;
275 return tool.DirChecker(anent);
276 }
277 case 14 : {
278 DeclareAndCast(IGESDraw_ViewsVisibleWithAttr,anent,ent);
279 if (anent.IsNull()) break;
280 IGESDraw_ToolViewsVisibleWithAttr tool;
281 return tool.DirChecker(anent);
282 }
283 default : break;
284 }
285 return IGESData_DirChecker(); // by default, no specific criterium
286}
287
288
289 void IGESDraw_GeneralModule::OwnCheckCase
290 (const Standard_Integer CN, const Handle(IGESData_IGESEntity)& ent,
291 const Interface_ShareTool& shares, Handle(Interface_Check)& ach) const
292{
293 switch (CN) {
294 case 1 : {
295 DeclareAndCast(IGESDraw_CircArraySubfigure,anent,ent);
296 if (anent.IsNull()) return;
297 IGESDraw_ToolCircArraySubfigure tool;
298 tool.OwnCheck(anent,shares,ach);
299 }
300 break;
301 case 2 : {
302 DeclareAndCast(IGESDraw_ConnectPoint,anent,ent);
303 if (anent.IsNull()) return;
304 IGESDraw_ToolConnectPoint tool;
305 tool.OwnCheck(anent,shares,ach);
306 }
307 break;
308 case 3 : {
309 DeclareAndCast(IGESDraw_Drawing,anent,ent);
310 if (anent.IsNull()) return;
311 IGESDraw_ToolDrawing tool;
312 tool.OwnCheck(anent,shares,ach);
313 }
314 break;
315 case 4 : {
316 DeclareAndCast(IGESDraw_DrawingWithRotation,anent,ent);
317 if (anent.IsNull()) return;
318 IGESDraw_ToolDrawingWithRotation tool;
319 tool.OwnCheck(anent,shares,ach);
320 }
321 break;
322 case 5 : {
323 DeclareAndCast(IGESDraw_LabelDisplay,anent,ent);
324 if (anent.IsNull()) return;
325 IGESDraw_ToolLabelDisplay tool;
326 tool.OwnCheck(anent,shares,ach);
327 }
328 break;
329 case 6 : {
330 DeclareAndCast(IGESDraw_NetworkSubfigure,anent,ent);
331 if (anent.IsNull()) return;
332 IGESDraw_ToolNetworkSubfigure tool;
333 tool.OwnCheck(anent,shares,ach);
334 }
335 break;
336 case 7 : {
337 DeclareAndCast(IGESDraw_NetworkSubfigureDef,anent,ent);
338 if (anent.IsNull()) return;
339 IGESDraw_ToolNetworkSubfigureDef tool;
340 tool.OwnCheck(anent,shares,ach);
341 }
342 break;
343 case 8 : {
344 DeclareAndCast(IGESDraw_PerspectiveView,anent,ent);
345 if (anent.IsNull()) return;
346 IGESDraw_ToolPerspectiveView tool;
347 tool.OwnCheck(anent,shares,ach);
348 }
349 break;
350 case 9 : {
351 DeclareAndCast(IGESDraw_Planar,anent,ent);
352 if (anent.IsNull()) return;
353 IGESDraw_ToolPlanar tool;
354 tool.OwnCheck(anent,shares,ach);
355 }
356 break;
357 case 10 : {
358 DeclareAndCast(IGESDraw_RectArraySubfigure,anent,ent);
359 if (anent.IsNull()) return;
360 IGESDraw_ToolRectArraySubfigure tool;
361 tool.OwnCheck(anent,shares,ach);
362 }
363 break;
364 case 11 : {
365 DeclareAndCast(IGESDraw_SegmentedViewsVisible,anent,ent);
366 if (anent.IsNull()) return;
367 IGESDraw_ToolSegmentedViewsVisible tool;
368 tool.OwnCheck(anent,shares,ach);
369 }
370 break;
371 case 12 : {
372 DeclareAndCast(IGESDraw_View,anent,ent);
373 if (anent.IsNull()) return;
374 IGESDraw_ToolView tool;
375 tool.OwnCheck(anent,shares,ach);
376 }
377 break;
378 case 13 : {
379 DeclareAndCast(IGESDraw_ViewsVisible,anent,ent);
380 if (anent.IsNull()) return;
381 IGESDraw_ToolViewsVisible tool;
382 tool.OwnCheck(anent,shares,ach);
383 }
384 break;
385 case 14 : {
386 DeclareAndCast(IGESDraw_ViewsVisibleWithAttr,anent,ent);
387 if (anent.IsNull()) return;
388 IGESDraw_ToolViewsVisibleWithAttr tool;
389 tool.OwnCheck(anent,shares,ach);
390 }
391 break;
392 default : break;
393 }
394}
395
396
397 Standard_Boolean IGESDraw_GeneralModule::NewVoid
398 (const Standard_Integer CN, Handle(Standard_Transient)& ent) const
399{
400 switch (CN) {
401 case 1 : ent = new IGESDraw_CircArraySubfigure; break;
402 case 2 : ent = new IGESDraw_ConnectPoint; break;
403 case 3 : ent = new IGESDraw_Drawing; break;
404 case 4 : ent = new IGESDraw_DrawingWithRotation; break;
405 case 5 : ent = new IGESDraw_LabelDisplay; break;
406 case 6 : ent = new IGESDraw_NetworkSubfigure; break;
407 case 7 : ent = new IGESDraw_NetworkSubfigureDef; break;
408 case 8 : ent = new IGESDraw_PerspectiveView; break;
409 case 9 : ent = new IGESDraw_Planar; break;
410 case 10 : ent = new IGESDraw_RectArraySubfigure; break;
411 case 11 : ent = new IGESDraw_SegmentedViewsVisible; break;
412 case 12 : ent = new IGESDraw_View; break;
413 case 13 : ent = new IGESDraw_ViewsVisible; break;
414 case 14 : ent = new IGESDraw_ViewsVisibleWithAttr; break;
415 default : return Standard_False; // by default, Failure on Recognize
416 }
417 return Standard_True;
418}
419
420
421 void IGESDraw_GeneralModule::OwnCopyCase
422 (const Standard_Integer CN,
423 const Handle(IGESData_IGESEntity)& entfrom,
424 const Handle(IGESData_IGESEntity)& entto,
425 Interface_CopyTool& TC) const
426{
427 switch (CN) {
428 case 1 : {
429 DeclareAndCast(IGESDraw_CircArraySubfigure,enfr,entfrom);
430 DeclareAndCast(IGESDraw_CircArraySubfigure,ento,entto);
431 IGESDraw_ToolCircArraySubfigure tool;
432 tool.OwnCopy(enfr,ento,TC);
433 }
434 break;
435 case 2 : {
436 DeclareAndCast(IGESDraw_ConnectPoint,enfr,entfrom);
437 DeclareAndCast(IGESDraw_ConnectPoint,ento,entto);
438 IGESDraw_ToolConnectPoint tool;
439 tool.OwnCopy(enfr,ento,TC);
440 }
441 break;
442 case 3 : {
443 DeclareAndCast(IGESDraw_Drawing,enfr,entfrom);
444 DeclareAndCast(IGESDraw_Drawing,ento,entto);
445 IGESDraw_ToolDrawing tool;
446 tool.OwnCopy(enfr,ento,TC);
447 }
448 break;
449 case 4 : {
450 DeclareAndCast(IGESDraw_DrawingWithRotation,enfr,entfrom);
451 DeclareAndCast(IGESDraw_DrawingWithRotation,ento,entto);
452 IGESDraw_ToolDrawingWithRotation tool;
453 tool.OwnCopy(enfr,ento,TC);
454 }
455 break;
456 case 5 : {
457 DeclareAndCast(IGESDraw_LabelDisplay,enfr,entfrom);
458 DeclareAndCast(IGESDraw_LabelDisplay,ento,entto);
459 IGESDraw_ToolLabelDisplay tool;
460 tool.OwnCopy(enfr,ento,TC);
461 }
462 break;
463 case 6 : {
464 DeclareAndCast(IGESDraw_NetworkSubfigure,enfr,entfrom);
465 DeclareAndCast(IGESDraw_NetworkSubfigure,ento,entto);
466 IGESDraw_ToolNetworkSubfigure tool;
467 tool.OwnCopy(enfr,ento,TC);
468 }
469 break;
470 case 7 : {
471 DeclareAndCast(IGESDraw_NetworkSubfigureDef,enfr,entfrom);
472 DeclareAndCast(IGESDraw_NetworkSubfigureDef,ento,entto);
473 IGESDraw_ToolNetworkSubfigureDef tool;
474 tool.OwnCopy(enfr,ento,TC);
475 }
476 break;
477 case 8 : {
478 DeclareAndCast(IGESDraw_PerspectiveView,enfr,entfrom);
479 DeclareAndCast(IGESDraw_PerspectiveView,ento,entto);
480 IGESDraw_ToolPerspectiveView tool;
481 tool.OwnCopy(enfr,ento,TC);
482 }
483 break;
484 case 9 : {
485 DeclareAndCast(IGESDraw_Planar,enfr,entfrom);
486 DeclareAndCast(IGESDraw_Planar,ento,entto);
487 IGESDraw_ToolPlanar tool;
488 tool.OwnCopy(enfr,ento,TC);
489 }
490 break;
491 case 10 : {
492 DeclareAndCast(IGESDraw_RectArraySubfigure,enfr,entfrom);
493 DeclareAndCast(IGESDraw_RectArraySubfigure,ento,entto);
494 IGESDraw_ToolRectArraySubfigure tool;
495 tool.OwnCopy(enfr,ento,TC);
496 }
497 break;
498 case 11 : {
499 DeclareAndCast(IGESDraw_SegmentedViewsVisible,enfr,entfrom);
500 DeclareAndCast(IGESDraw_SegmentedViewsVisible,ento,entto);
501 IGESDraw_ToolSegmentedViewsVisible tool;
502 tool.OwnCopy(enfr,ento,TC);
503 }
504 break;
505 case 12 : {
506 DeclareAndCast(IGESDraw_View,enfr,entfrom);
507 DeclareAndCast(IGESDraw_View,ento,entto);
508 IGESDraw_ToolView tool;
509 tool.OwnCopy(enfr,ento,TC);
510 }
511 break;
512 case 13 : {
513 DeclareAndCast(IGESDraw_ViewsVisible,enfr,entfrom);
514 DeclareAndCast(IGESDraw_ViewsVisible,ento,entto);
515 IGESDraw_ToolViewsVisible tool;
516 tool.OwnCopy(enfr,ento,TC);
517 }
518 break;
519 case 14 : {
520 DeclareAndCast(IGESDraw_ViewsVisibleWithAttr,enfr,entfrom);
521 DeclareAndCast(IGESDraw_ViewsVisibleWithAttr,ento,entto);
522 IGESDraw_ToolViewsVisibleWithAttr tool;
523 tool.OwnCopy(enfr,ento,TC);
524 }
525 break;
526 default : break;
527 }
528}
529
530
531 void IGESDraw_GeneralModule::OwnRenewCase
532 (const Standard_Integer CN,
533 const Handle(IGESData_IGESEntity)& entfrom,
534 const Handle(IGESData_IGESEntity)& entto,
535 const Interface_CopyTool& TC) const
536{
537 switch (CN) {
538 case 13 : {
539 DeclareAndCast(IGESDraw_ViewsVisible,enfr,entfrom);
540 DeclareAndCast(IGESDraw_ViewsVisible,ento,entto);
541 IGESDraw_ToolViewsVisible tool;
542 tool.OwnRenew(enfr,ento,TC);
543 }
544 break;
545 case 14 : {
546 DeclareAndCast(IGESDraw_ViewsVisibleWithAttr,enfr,entfrom);
547 DeclareAndCast(IGESDraw_ViewsVisibleWithAttr,ento,entto);
548 IGESDraw_ToolViewsVisibleWithAttr tool;
549 tool.OwnRenew(enfr,ento,TC);
550 }
551 break;
552 default : break;
553 }
554}
555
556
557 void IGESDraw_GeneralModule::OwnDeleteCase
558 (const Standard_Integer CN, const Handle(IGESData_IGESEntity)& ent) const
559{
560 switch (CN) {
561 case 13 : {
562 DeclareAndCast(IGESDraw_ViewsVisible,anent,ent);
563 IGESDraw_ToolViewsVisible tool;
564 tool.OwnWhenDelete(anent);
565 }
566 break;
567 case 14 : {
568 DeclareAndCast(IGESDraw_ViewsVisibleWithAttr,anent,ent);
569 IGESDraw_ToolViewsVisibleWithAttr tool;
570 tool.OwnWhenDelete(anent);
571 }
572 break;
573 default : break;
574 }
575}
576
577
578 Standard_Integer IGESDraw_GeneralModule::CategoryNumber
579 (const Standard_Integer CN, const Handle(Standard_Transient)& ,
580 const Interface_ShareTool& ) const
581{
582 if (CN == 9) return Interface_Category::Number("Auxiliary");
583 if (CN == 1 || CN == 2 || CN == 10) return Interface_Category::Number("Structure");
584 return Interface_Category::Number("Drawing");
585}