Integration of OCCT 6.5.0 from SVN
[occt.git] / src / XCAFDoc / XCAFDoc_MaterialTool.cxx
CommitLineData
7fd59977 1#include <XCAFDoc_MaterialTool.ixx>
2
3#include <XCAFDoc.hxx>
4#include <XCAFDoc_Material.hxx>
5#include <XCAFDoc_DocumentTool.hxx>
6#include <TDataStd_TreeNode.hxx>
7#include <TDataStd_Name.hxx>
8#include <TDF_ChildIDIterator.hxx>
9
10
11//=======================================================================
12//function : XCAFDoc_MaterialTool
13//purpose :
14//=======================================================================
15
16XCAFDoc_MaterialTool::XCAFDoc_MaterialTool()
17{
18}
19
20
21//=======================================================================
22//function : Set
23//purpose :
24//=======================================================================
25
26Handle(XCAFDoc_MaterialTool) XCAFDoc_MaterialTool::Set(const TDF_Label& L)
27{
28 Handle(XCAFDoc_MaterialTool) A;
29 if (!L.FindAttribute (XCAFDoc_MaterialTool::GetID(), A)) {
30 A = new XCAFDoc_MaterialTool ();
31 L.AddAttribute(A);
32 A->myShapeTool = XCAFDoc_DocumentTool::ShapeTool(L);
33 }
34 return A;
35}
36
37
38//=======================================================================
39//function : GetID
40//purpose :
41//=======================================================================
42
43const Standard_GUID& XCAFDoc_MaterialTool::GetID()
44{
45 static Standard_GUID MatTblID ("efd212f9-6dfd-11d4-b9c8-0060b0ee281b");
46 return MatTblID;
47}
48
49
50//=======================================================================
51//function : BaseLabel
52//purpose :
53//=======================================================================
54
55TDF_Label XCAFDoc_MaterialTool::BaseLabel() const
56{
57 return Label();
58}
59
60
61//=======================================================================
62//function : ShapeTool
63//purpose :
64//=======================================================================
65
66const Handle(XCAFDoc_ShapeTool)& XCAFDoc_MaterialTool::ShapeTool()
67{
68 if(myShapeTool.IsNull())
69 myShapeTool = XCAFDoc_DocumentTool::ShapeTool(Label());
70 return myShapeTool;
71}
72
73
74//=======================================================================
75//function : IsMaterial
76//purpose :
77//=======================================================================
78
79Standard_Boolean XCAFDoc_MaterialTool::IsMaterial(const TDF_Label& lab) const
80{
81 Handle(XCAFDoc_Material) MatAttr;
82 if(lab.FindAttribute(XCAFDoc_Material::GetID(),MatAttr)) {
83 return Standard_True;
84 }
85 return Standard_False;
86}
87
88
89//=======================================================================
90//function : GetMaterialLabels
91//purpose :
92//=======================================================================
93
94void XCAFDoc_MaterialTool::GetMaterialLabels(TDF_LabelSequence& Labels) const
95{
96 Labels.Clear();
97 TDF_ChildIterator ChildIterator( Label() );
98 for (; ChildIterator.More(); ChildIterator.Next()) {
99 TDF_Label L = ChildIterator.Value();
100 if ( IsMaterial(L)) Labels.Append(L);
101 }
102}
103
104
105//=======================================================================
106//function : AddMaterial
107//purpose :
108//=======================================================================
109
110TDF_Label XCAFDoc_MaterialTool::AddMaterial(const Handle(TCollection_HAsciiString)& aName,
111 const Handle(TCollection_HAsciiString)& aDescription,
112 const Standard_Real aDensity,
113 const Handle(TCollection_HAsciiString)& aDensName,
114 const Handle(TCollection_HAsciiString)& aDensValType) const
115{
116 TDF_Label MatL;
117 TDF_TagSource aTag;
118 MatL = aTag.NewChild ( Label() );
119 XCAFDoc_Material::Set(MatL,aName,aDescription,aDensity,aDensName,aDensValType);
120 TDataStd_Name::Set(MatL,TCollection_AsciiString(aName->ToCString()));
121 return MatL;
122}
123
124
125//=======================================================================
126//function : SetMaterial
127//purpose :
128//=======================================================================
129
130void XCAFDoc_MaterialTool::SetMaterial(const TDF_Label& L,const TDF_Label& MatL) const
131{
132 // set reference
133 Handle(TDataStd_TreeNode) refNode, mainNode;
134 mainNode = TDataStd_TreeNode::Set ( MatL, XCAFDoc::MaterialRefGUID() );
135 refNode = TDataStd_TreeNode::Set ( L, XCAFDoc::MaterialRefGUID() );
136 refNode->Remove(); // abv: fix against bug in TreeNode::Append()
137 mainNode->Append(refNode);
138}
139
140
141//=======================================================================
142//function : SetMaterial
143//purpose :
144//=======================================================================
145
146void XCAFDoc_MaterialTool::SetMaterial(const TDF_Label& L,
147 const Handle(TCollection_HAsciiString)& aName,
148 const Handle(TCollection_HAsciiString)& aDescription,
149 const Standard_Real aDensity,
150 const Handle(TCollection_HAsciiString)& aDensName,
151 const Handle(TCollection_HAsciiString)& aDensValType) const
152{
153 TDF_Label MatL = AddMaterial(aName,aDescription,aDensity,aDensName,aDensValType);
154 SetMaterial(L,MatL);
155}
156
157
158//=======================================================================
159//function : GetMaterial
160//purpose :
161//=======================================================================
162
163Standard_Boolean XCAFDoc_MaterialTool::GetMaterial(const TDF_Label& MatL,
164 Handle(TCollection_HAsciiString)& aName,
165 Handle(TCollection_HAsciiString)& aDescription,
166 Standard_Real& aDensity,
167 Handle(TCollection_HAsciiString)& aDensName,
168 Handle(TCollection_HAsciiString)& aDensValType) const
169{
170 Handle(XCAFDoc_Material) MatAttr;
171 if(!MatL.FindAttribute(XCAFDoc_Material::GetID(),MatAttr)) {
172 return Standard_False;
173 }
174 aName = MatAttr->GetName();
175 aDescription = MatAttr->GetDescription();
176 aDensity = MatAttr->GetDensity();
177 aDensName = MatAttr->GetDensName();
178 aDensValType = MatAttr->GetDensValType();
179
180 return Standard_True;
181}
182
183
184//=======================================================================
185//function : GetDensityForShape
186//purpose :
187//=======================================================================
188
189Standard_Real XCAFDoc_MaterialTool::GetDensityForShape(const TDF_Label& ShapeL)
190{
191 Standard_Real Dens=0.0;
192 Handle(TDataStd_TreeNode) Node;
193 if ( ! ShapeL.FindAttribute ( XCAFDoc::MaterialRefGUID(), Node) ||
194 ! Node->HasFather() ) return Dens;
195 TDF_Label MatL = Node->Father()->Label();
196 Handle(XCAFDoc_Material) MatAttr;
197 if(!MatL.FindAttribute(XCAFDoc_Material::GetID(),MatAttr)) {
198 return Dens;
199 }
200 // defaul dimension fo density - gram/sm^3
201 // we transfer "sm" into "mm"
202 Dens = MatAttr->GetDensity()*0.001;
203 return Dens;
204}
205
206
207//=======================================================================
208//function : ID
209//purpose :
210//=======================================================================
211
212const Standard_GUID& XCAFDoc_MaterialTool::ID() const
213{
214 return GetID();
215}
216
217
218//=======================================================================
219//function : Restore
220//purpose :
221//=======================================================================
222
223void XCAFDoc_MaterialTool::Restore(const Handle(TDF_Attribute)& /*with*/)
224{
225}
226
227
228//=======================================================================
229//function : NewEmpty
230//purpose :
231//=======================================================================
232
233Handle(TDF_Attribute) XCAFDoc_MaterialTool::NewEmpty() const
234{
235 return new XCAFDoc_MaterialTool;
236}
237
238
239//=======================================================================
240//function : Paste
241//purpose :
242//=======================================================================
243
244void XCAFDoc_MaterialTool::Paste(const Handle(TDF_Attribute)& /*into*/,
245 const Handle(TDF_RelocationTable)& /*RT*/) const
246{
247}
248