0031501: Foundation Classes, Message_Printer - remove theToPutEndl argument -- prepar...
[occt.git] / src / IGESDimen / IGESDimen_ToolGeneralSymbol.cxx
1 // Created by: CKY / Contract Toubro-Larsen
2 // Copyright (c) 1993-1999 Matra Datavision
3 // Copyright (c) 1999-2014 OPEN CASCADE SAS
4 //
5 // This file is part of Open CASCADE Technology software library.
6 //
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
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.
12 //
13 // Alternatively, this file may be used under the terms of Open CASCADE
14 // commercial license or contractual agreement.
15
16 //--------------------------------------------------------------------
17 //--------------------------------------------------------------------
18
19 #include <IGESData_DirChecker.hxx>
20 #include <IGESData_Dump.hxx>
21 #include <IGESData_HArray1OfIGESEntity.hxx>
22 #include <IGESData_IGESDumper.hxx>
23 #include <IGESData_IGESEntity.hxx>
24 #include <IGESData_IGESReaderData.hxx>
25 #include <IGESData_IGESWriter.hxx>
26 #include <IGESData_ParamCursor.hxx>
27 #include <IGESData_ParamReader.hxx>
28 #include <IGESDimen_GeneralNote.hxx>
29 #include <IGESDimen_GeneralSymbol.hxx>
30 #include <IGESDimen_HArray1OfLeaderArrow.hxx>
31 #include <IGESDimen_LeaderArrow.hxx>
32 #include <IGESDimen_ToolGeneralSymbol.hxx>
33 #include <Interface_Check.hxx>
34 #include <Interface_CopyTool.hxx>
35 #include <Interface_EntityIterator.hxx>
36 #include <Interface_Macros.hxx>
37 #include <Interface_ShareTool.hxx>
38 #include <Message_Messenger.hxx>
39 #include <Standard_DomainError.hxx>
40
41 IGESDimen_ToolGeneralSymbol::IGESDimen_ToolGeneralSymbol ()    {  }
42
43
44 void  IGESDimen_ToolGeneralSymbol::ReadOwnParams
45   (const Handle(IGESDimen_GeneralSymbol)& ent,
46    const Handle(IGESData_IGESReaderData)& IR, IGESData_ParamReader& PR) const
47 {
48   //Standard_Boolean st; //szv#4:S4163:12Mar99 moved down
49   Standard_Integer i, num;
50   Handle(IGESData_HArray1OfIGESEntity) tempGeoms;
51   Handle(IGESDimen_HArray1OfLeaderArrow) tempLeaders;
52   Handle(IGESDimen_GeneralNote) tempNote;
53
54   if ((ent->FormNumber() == 0) && (!PR.IsParamEntity(PR.CurrentNumber())))
55     PR.SetCurrentNumber(PR.CurrentNumber()+1);
56   else
57     PR.ReadEntity(IR, PR.Current(), "General Note Entity",
58                   STANDARD_TYPE(IGESDimen_GeneralNote), tempNote); //szv#4:S4163:12Mar99 `st=` not needed
59
60   Standard_Boolean st = PR.ReadInteger(PR.Current(), "Number of Geometries", num);
61   if (!st || num <= 0) PR.AddFail("Number of Geometries: Not Positive");
62   if (num > 0) {
63     PR.ReadEnts (IR,PR.CurrentList(num),"Geometry Entities",tempGeoms); //szv#4:S4163:12Mar99 `st=` not needed
64 /*
65     tempGeoms = new IGESData_HArray1OfIGESEntity(1, num);
66     for ( i = 1; i <= num; i++)
67       {
68         Handle(IGESData_IGESEntity) tempEnt;
69         st = PR.ReadEntity(IR, PR.Current(), "Geometry Entity", tempEnt);
70         if (st) tempGeoms->SetValue(i, tempEnt);
71       }
72 */
73   }
74   else {
75     return;
76   }
77   st = PR.ReadInteger(PR.Current(), "Number of Leaders", num);
78   if (st && num > 0)  tempLeaders = new IGESDimen_HArray1OfLeaderArrow(1, num);
79   else if (num < 0)  PR.AddFail("Number of Leaders: Less than zero");
80   if (!tempLeaders.IsNull())
81     for ( i = 1; i <= num; i++)
82       {
83         Handle(IGESDimen_LeaderArrow) tempEnt;
84         //st = PR.ReadEntity(IR, PR.Current(), "Leader Entity",
85                              //STANDARD_TYPE(IGESDimen_LeaderArrow), tempEnt); //szv#4:S4163:12Mar99 moved in if
86         if (PR.ReadEntity(IR, PR.Current(), "Leader Entity", STANDARD_TYPE(IGESDimen_LeaderArrow), tempEnt))
87           tempLeaders->SetValue(i, tempEnt);
88       }
89
90   DirChecker(ent).CheckTypeAndForm(PR.CCheck(),ent);
91   ent->Init (tempNote, tempGeoms, tempLeaders);
92 }
93
94 void  IGESDimen_ToolGeneralSymbol::WriteOwnParams
95   (const Handle(IGESDimen_GeneralSymbol)& ent, IGESData_IGESWriter& IW) const
96 {
97   Standard_Integer i, num;
98   IW.Send(ent->Note());
99   IW.Send(ent->NbGeomEntities());
100   for (num = ent->NbGeomEntities(), i = 1; i <= num; i++)
101     IW.Send(ent->GeomEntity(i));
102   IW.Send(ent->NbLeaders());
103   for (num = ent->NbLeaders(), i = 1; i <= num; i++)
104     IW.Send(ent->LeaderArrow(i));
105 }
106
107 void  IGESDimen_ToolGeneralSymbol::OwnShared
108   (const Handle(IGESDimen_GeneralSymbol)& ent, Interface_EntityIterator& iter) const
109 {
110   Standard_Integer i, num;
111   iter.GetOneItem(ent->Note());
112   for (num = ent->NbGeomEntities(), i = 1; i <= num; i++)
113     iter.GetOneItem(ent->GeomEntity(i));
114   for (num = ent->NbLeaders(), i = 1; i <= num; i++)
115     iter.GetOneItem(ent->LeaderArrow(i));
116 }
117
118 void  IGESDimen_ToolGeneralSymbol::OwnCopy
119   (const Handle(IGESDimen_GeneralSymbol)& another,
120    const Handle(IGESDimen_GeneralSymbol)& ent, Interface_CopyTool& TC) const
121 {
122   DeclareAndCast(IGESDimen_GeneralNote, tempNote,
123                  TC.Transferred(another->Note()));
124   Standard_Integer num = another->NbGeomEntities();
125   Handle(IGESData_HArray1OfIGESEntity) tempGeoms =
126     new IGESData_HArray1OfIGESEntity(1, num);
127   Standard_Integer i;
128   for (i = 1; i <= num; i++)
129     {
130       DeclareAndCast(IGESData_IGESEntity, new_item,
131                      TC.Transferred(another->GeomEntity(i)));
132       tempGeoms->SetValue(i, new_item);
133     }
134   Handle(IGESDimen_HArray1OfLeaderArrow) tempLeaders;
135   num = another->NbLeaders();
136   if (num > 0)
137     {
138       tempLeaders = new IGESDimen_HArray1OfLeaderArrow(1, num);
139       for (i = 1; i <= num; i++)
140         {
141           DeclareAndCast(IGESDimen_LeaderArrow, new_item,
142                          TC.Transferred(another->LeaderArrow(i)));
143           tempLeaders->SetValue(i, new_item);
144         }
145     }
146   ent->Init (tempNote, tempGeoms, tempLeaders);
147   ent->SetFormNumber (another->FormNumber());
148 }
149
150 IGESData_DirChecker  IGESDimen_ToolGeneralSymbol::DirChecker
151   (const Handle(IGESDimen_GeneralSymbol)& /* ent */ ) const
152 {
153   IGESData_DirChecker DC(228, 0, 9999);
154   DC.Structure(IGESData_DefVoid);
155   DC.GraphicsIgnored();
156   DC.LineFont(IGESData_DefAny);
157   DC.LineWeight(IGESData_DefValue);
158   DC.Color(IGESData_DefAny);
159   DC.UseFlagRequired(1);
160   return DC;
161 }
162
163 void  IGESDimen_ToolGeneralSymbol::OwnCheck
164   (const Handle(IGESDimen_GeneralSymbol)& ent,
165    const Interface_ShareTool& , Handle(Interface_Check)& ach) const
166 {
167   if ( (ent->FormNumber() <    0 || ent->FormNumber() >    3) &&
168       ( ent->FormNumber() < 5001 || ent->FormNumber() > 9999 ) )
169     ach->AddFail("Invalid Form Number");
170   if (ent->FormNumber() != 0)   if (ent->Note().IsNull())
171     ach->AddFail("No General Note defined for form number non 0");
172 }
173
174 void  IGESDimen_ToolGeneralSymbol::OwnDump
175   (const Handle(IGESDimen_GeneralSymbol)& ent, const IGESData_IGESDumper& dumper,
176    Standard_OStream& S, const Standard_Integer level) const
177 {
178   Standard_Integer sublevel = (level > 4) ? 1 : 0;
179   S << "IGESDimen_GeneralSymbol\n"
180     << "General Note : ";
181   dumper.Dump(ent->Note(),S, sublevel);
182   S << "\nGeometric Entities : ";
183   IGESData_DumpEntities(S,dumper ,level,1, ent->NbGeomEntities(),ent->GeomEntity);
184   S << "\nLeader Arrows : ";
185   IGESData_DumpEntities(S,dumper ,level,1, ent->NbLeaders(),ent->LeaderArrow);
186   S << std::endl;
187 }