bc228f77 |
1 | // Created on: 1999-12-28 |
2 | // Created by: Sergey RUIN |
3 | // Copyright (c) 1999-1999 Matra Datavision |
480bf81e |
4 | // Copyright (c) 1999-2014 OPEN CASCADE SAS |
bc228f77 |
5 | // |
480bf81e |
6 | // This file is part of Open CASCADE Technology software library. |
bc228f77 |
7 | // |
480bf81e |
8 | // This library is free software; you can redistribute it and / or modify it |
9 | // under the terms of the GNU Lesser General Public version 2.1 as published |
10 | // by the Free Software Foundation, with special exception defined in the file |
11 | // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT |
12 | // distribution for complete text of the license and disclaimer of any warranty. |
bc228f77 |
13 | // |
480bf81e |
14 | // Alternatively, this file may be used under the terms of Open CASCADE |
15 | // commercial license or contractual agreement. |
bc228f77 |
16 | |
17 | #include <TDF_Data.hxx> |
18 | #include <TDF_Label.hxx> |
19 | #include <TDataXtd_Axis.hxx> |
20 | #include <TDataStd_Current.hxx> |
21 | #include <TDataStd_Comment.hxx> |
22 | #include <TDataStd_Integer.hxx> |
23 | #include <TDataStd_IntegerArray.hxx> |
24 | #include <TDataStd_Real.hxx> |
25 | #include <TDataStd_RealArray.hxx> |
26 | #include <TDF_Reference.hxx> |
27 | #include <TDataStd_UAttribute.hxx> |
28 | #include <TDataStd_TreeNode.hxx> |
29 | #include <TDataXtd_Constraint.hxx> |
30 | #include <TDataXtd_Shape.hxx> |
31 | #include <TDataStd_Name.hxx> |
32 | #include <TDataStd_Directory.hxx> |
33 | #include <TDataXtd_Point.hxx> |
34 | #include <TDataXtd_Plane.hxx> |
35 | #include <TDataXtd_Geometry.hxx> |
36 | #include <TDataXtd_GeometryEnum.hxx> |
37 | #include <TDataXtd_ConstraintEnum.hxx> |
38 | #include <TNaming_NamedShape.hxx> |
39 | #include <gp_Pnt.hxx> |
40 | #include <gp_Pln.hxx> |
41 | #include <gp_Lin.hxx> |
42 | #include <gp_Ax1.hxx> |
43 | #include <gp_Cylinder.hxx> |
44 | #include <TopoDS_Shape.hxx> |
45 | #include <TopLoc_Location.hxx> |
46 | #include <TDF_AttributeList.hxx> |
47 | #include <TColStd_HArray1OfReal.hxx> |
48 | #include <TCollection_ExtendedString.hxx> |
49 | #include <TDataStd_ListOfExtendedString.hxx> |
50 | #include <TDocStd_Document.hxx> |
51 | #include <TDataStd_TreeNode.hxx> |
52 | |
53 | // ==================================================================================== |
54 | // This sample contains templates for typical actions with standard OCAF attributes |
55 | // ==================================================================================== |
56 | |
57 | #ifdef DEB |
58 | |
59 | static void Sample() |
60 | { |
61 | // Starting with data framework |
62 | Handle(TDF_Data) DF = new TDF_Data(); |
63 | TDF_Label aLabel = DF->Root(); |
64 | |
65 | //------------------------- TDataStd_Integer (Real) --------------------------------- |
66 | //----------------------------------------------------------------------------------- |
67 | |
68 | // Setting TDataStd_Integer attribute to a label (work with TDataStd_Real is the same) |
69 | |
70 | Standard_Integer i = 10; |
71 | |
72 | Handle(TDataStd_Integer) I = TDataStd_Integer::Set(aLabel, i); |
73 | |
74 | // Getting the value stored in TDataStd_Integer attribute |
75 | |
76 | Standard_Integer aValue; |
77 | |
78 | aValue = I->Get(); |
79 | |
80 | // Setting the new value in the attribute |
81 | |
82 | I->Set( 25 ); |
83 | |
84 | //------------------------- TDataStd_RealArray (IntegerArray is analogical) -------------- |
85 | //---------------------------------------------------------------------------------------- |
86 | |
87 | // Setting TDataStd_RealArray attribute to a label |
88 | |
89 | Standard_Integer lower = 1, upper = 20; |
90 | |
91 | Handle(TDataStd_RealArray) realarray = TDataStd_RealArray::Set(aLabel, lower, upper); |
92 | |
93 | // Filling array |
94 | |
95 | for(Standard_Integer j = realarray->Lower(); j<= realarray->Upper(); j++) { |
96 | realarray->SetValue(j, M_PI * j); |
97 | } |
98 | |
99 | // Retrieving value by index |
100 | |
101 | Standard_Real value = realarray->Value(3); |
102 | |
103 | // Getting handle to an underlying array TColStd_HArray1OfReal |
104 | |
105 | Handle(TColStd_HArray1OfReal) array = realarray->Array(); |
106 | |
107 | //------------------------- TDataStd_Comment -------------- |
108 | //--------------------------------------------------------- |
109 | |
110 | // Setting TDataStd_Comment attribute to a label |
111 | |
112 | Handle(TDataStd_Comment) comment = TDataStd_Comment::Set(aLabel); |
113 | |
114 | // Setting comment string in to the attribute |
115 | |
116 | TCollection_ExtendedString message = "This is a remark"; |
117 | |
118 | comment->Set(message); |
119 | |
120 | // Getting comment string stored in the attribute |
121 | |
122 | TCollection_ExtendedString string = comment->Get(); |
123 | |
124 | //------------------------- TDataStd_Name ----------------- |
125 | //--------------------------------------------------------- |
126 | |
127 | // Setting TDataStd_Name attribute to a label |
128 | |
129 | // Handle(TDataStd_Name) name = TDataStd_Name::Set(aLabel); |
130 | |
131 | |
132 | // Checking if the label has a name (TDataStd_Name attribute with not empty name field) |
133 | |
134 | // Standard_Boolean isempty = name->IsEmpty(); |
135 | |
136 | // Getting the name of the label |
137 | |
138 | //if( !isempty ) TCollection_ExtendedString thename = name->Get(); |
139 | |
140 | // Erasing the name of the label in TDataStd_Name attribute |
141 | |
142 | // name->SetEmpty(); |
143 | |
144 | // Setting a new name string in the attribute |
145 | |
146 | TCollection_ExtendedString aname = "Name of the label"; |
147 | Handle(TDataStd_Name) name = TDataStd_Name::Set(aLabel,aname); |
148 | |
149 | name->Set(aname); |
150 | |
151 | // Getting comment string stored in the attribute |
152 | |
153 | TCollection_ExtendedString namestring = name->Get(); |
154 | |
155 | // Getting the first father label which has TDataStd_Name attribute |
156 | |
157 | //Handle(TDataStd_Name) father; |
158 | |
159 | //Standard_Boolean hasfather = name->Father(father); |
160 | |
161 | // Find if there exists label with full path "Assembly1:Part3:Prism7" |
162 | |
163 | // Converting string to list of names |
164 | |
165 | //TCollection_ExtendedString fullpath = "Assembly_1:Part_3:Prism_7"; |
166 | //TDataStd_ListOfExtendedString listofstring; |
167 | |
168 | //TDataStd_Name::MakePath(fullpath, listofstring); |
169 | |
170 | //Handle(TDataStd_Name) nameattribute; |
171 | |
172 | //Standard_Boolean found = TDataStd_Name::Find(DF, listofstring, nameattribute); |
173 | |
174 | //if( found ) { |
175 | // Getting the fullpath of the nameattribute (fullpath consists of list of TDataStd_Name attributes situated on |
176 | // father labels from label where nameattribute is situated to root label |
177 | //TDF_AttributeList list; |
178 | |
179 | //nameattribute->FullPath(list); |
180 | //} |
181 | |
182 | //TDF_Label currentLabel; |
183 | |
184 | // ... Finding currentLabel... |
185 | |
186 | // Search under <currentLabel> a label which fits with the given name |
187 | |
188 | //Handle(TDataStd_Name) givenname; |
189 | |
190 | //found = TDataStd_Name::Find(currentLabel, "Sketch_11", givenname); |
191 | |
192 | //if( found ) { |
193 | |
194 | // Getting all named child labels of the label where givenname attribute situated |
195 | //TDF_AttributeList listOfChildren;name to the |
196 | //Standard_Boolean isAtLeastOneFound = givenname->ChildNames(listOfChildren); |
197 | //} |
198 | |
199 | |
200 | //------------------------- TDataStd_UAttribute ----------- |
201 | //--------------------------------------------------------- |
202 | |
203 | // Setting TDataStd_UAttribute to a label |
204 | |
205 | Standard_GUID guid("01010101-0101-0101-1010-010101010101"); |
206 | |
207 | Handle(TDataStd_UAttribute) uattribute = TDataStd_UAttribute::Set(aLabel, guid); |
208 | |
209 | // Finding a TDataStd_UAttribute on the label using standard mechanism |
210 | |
211 | Handle(TDataStd_UAttribute) theUA; |
212 | if (aLabel.FindAttribute(guid,theUA)) { |
213 | // do something |
214 | } |
215 | |
216 | // Checking that a TDataStd_UAttribute exist on a given label using standard mechanism |
217 | |
218 | if (aLabel.IsAttribute(guid)) { |
219 | // do something |
220 | } |
221 | |
222 | //------------------------- TDF_Reference ----------- |
223 | //--------------------------------------------------------- |
224 | |
225 | TDF_Label referencedlabel; |
226 | |
227 | // ... Finding referencedlabel ... |
228 | |
229 | |
230 | // Setting TDF_Reference attribute to a label |
231 | |
232 | Handle(TDF_Reference) reference = TDF_Reference::Set(aLabel, referencedlabel); |
233 | |
234 | // Getting a label to TDF_Reference attribute refers to |
235 | |
236 | TDF_Label refLabel = reference->Get(); |
237 | |
238 | |
239 | //------------------------- TDataXtd_Point ---------------- |
240 | //--------------------------------------------------------- |
241 | gp_Pnt Pnt; |
242 | |
243 | // ... Defining point <Pnt> ... |
244 | |
245 | // Setting TDataXtd_Point attribute to a label |
246 | |
247 | Handle(TDataXtd_Point) P = TDataXtd_Point::Set(aLabel, Pnt); |
248 | |
249 | //Retrieve gp_Pnt associated with attribute |
250 | |
251 | gp_Pnt aPnt; |
252 | TDataXtd_Geometry::Point(aLabel, aPnt); |
253 | |
254 | //------------------------- TDataXtd_Plane ---------------- |
255 | //--------------------------------------------------------- |
256 | gp_Pln Plane; |
257 | |
258 | // ... Defining plane <Plane> ... |
259 | |
260 | // Setting TDataXtd_Plane attribute to a label |
261 | |
262 | Handle(TDataXtd_Plane) Pl = TDataXtd_Plane::Set(aLabel, Plane); |
263 | |
264 | //Retrieve gp_Plane associated with attribute |
265 | |
266 | gp_Pln aPlane; |
267 | TDataXtd_Geometry::Plane(aLabel, aPlane); |
268 | |
269 | //------------------------- TDataXtd_Axis ---------------- |
270 | //--------------------------------------------------------- |
271 | |
272 | gp_Lin Axis; |
273 | |
274 | // ... Defining axis <Axis> ... |
275 | |
276 | // Setting TDataXtd_Axis attribute to a label |
277 | |
278 | Handle(TDataXtd_Axis) axis = TDataXtd_Axis::Set(aLabel, Axis); |
279 | |
280 | //Retrieve gp_Ax1 associated with attribute |
281 | |
282 | gp_Ax1 anAxis; |
283 | TDataXtd_Geometry::Axis(aLabel, anAxis); |
284 | |
285 | |
286 | //------------------------- TDataXtd_Geometry ---------------- |
287 | //--------------------------------------------------------- |
288 | |
289 | Handle(TNaming_NamedShape) NS; |
290 | |
291 | // ... Constructing NS which contains cylinder... |
292 | |
293 | // Setting TDataXtd_Geometry attribute to the label where <NS> is situated |
294 | |
295 | TDF_Label NSLabel = NS->Label(); |
296 | |
297 | Handle(TDataXtd_Geometry) geom = TDataXtd_Geometry::Set(NSLabel); |
298 | |
299 | // Setting a type of geometry |
300 | |
301 | geom->SetType(TDataXtd_CYLINDER); |
302 | |
303 | // Retrieving gp_Cylinder stored in associated NamedShape |
304 | |
305 | // Checking the type of geometry |
306 | |
307 | if( geom->GetType() == TDataXtd_CYLINDER ) { |
308 | |
309 | gp_Cylinder Cylinder; |
310 | |
311 | TDataXtd_Geometry::Cylinder(geom->Label(), Cylinder); |
312 | |
313 | } |
314 | |
315 | //------------------------- TDataXtd_Constraint ------------- |
316 | //----------------------------------------------------------- |
317 | |
318 | // Setting TDataXtd_Constraint to a label |
319 | |
320 | Handle(TDataXtd_Constraint) constraint = TDataXtd_Constraint::Set(aLabel); |
321 | |
322 | Handle(TNaming_NamedShape) NS1, NS2; |
323 | Handle(TDataStd_Real) aDistance; |
324 | |
325 | // ... Constructing NS1 and NS2 which contain lines and calculating the distance between them ... |
326 | |
327 | // Setting DISTANCE Dimension between NS1 and NS2 |
328 | |
329 | constraint->Set(TDataXtd_DISTANCE, NS1, NS2); |
330 | |
331 | constraint->SetValue(aDistance); // <aDistance> should contain the calucalated distance |
332 | |
333 | // Checking if <constraint> is a Dimension rather than a Constraint |
334 | |
335 | Standard_Boolean isdimension = constraint->IsDimension(); |
336 | |
337 | if(isdimension) { |
338 | |
339 | // Getting the distance between NS1 and NS2 |
340 | |
341 | Handle(TDataStd_Real) valOfdistance = constraint->GetValue(); |
342 | |
343 | } |
344 | |
345 | // Setting PARALLEL constraint between NS1 and NS2 |
346 | |
347 | constraint->Set(TDataXtd_PARALLEL, NS1, NS2); |
348 | |
349 | // Getting number of geometries which define a constarint |
350 | |
351 | Standard_Integer number = constraint->NbGeometries(); |
352 | |
353 | // Checking if a constraint is verified |
354 | |
355 | Standard_Boolean isverified = constraint->Verified(); |
356 | if( !isverified ) { |
04232180 |
357 | std::cout << "Constraint is not valid" << std::endl; |
bc228f77 |
358 | } |
359 | |
360 | |
361 | //------------------------- TDataStd_Directory -------------- |
362 | //----------------------------------------------------------- |
363 | |
364 | // Setting TDataStd_Directory to a label |
365 | |
366 | Handle(TDataStd_Directory) directory = TDataStd_Directory::New(aLabel); |
367 | |
368 | // Creating a new sub directory of the given directory |
369 | |
370 | Handle(TDataStd_Directory) newdirectory = TDataStd_Directory::AddDirectory(directory); |
371 | |
372 | // Creating a new label in directory |
373 | |
374 | TDF_Label newlabel = TDataStd_Directory::MakeObjectLabel(newdirectory); |
375 | |
376 | |
377 | //------------------------- TDataStd_TreeNode --------------- |
378 | //----------------------------------------------------------- |
379 | |
380 | // Let's create a tree: |
381 | |
382 | // Root |
383 | // | |
384 | // --- FirstChild |
385 | // | |
386 | // --- SecondChild |
387 | // | |
388 | // --- FirstChildOfSecondChild |
389 | |
390 | |
391 | |
392 | // Setting a TDataStd_TreeNode attribute to a label. |
393 | // It becomes a root because it hasn't a father: |
394 | |
395 | Handle(TDataStd_TreeNode) Root = TDataStd_TreeNode::Set(aLabel); |
396 | |
397 | // Create a child TreeNode: |
398 | |
399 | Handle(TDataStd_TreeNode) FirstChild = TDataStd_TreeNode::Set(aLabel.FindChild(1)); |
400 | Root->Append(FirstChild); |
401 | |
402 | // Let's add a second child node to the Root: |
403 | |
404 | Handle(TDataStd_TreeNode) SecondChild = TDataStd_TreeNode::Set(aLabel.FindChild(2)); |
405 | Root->Append(SecondChild); |
406 | |
407 | // Now, it's time to create the a child for the SecondChild node - FirstChildOfSecondChild: |
408 | |
409 | Handle(TDataStd_TreeNode) FirstChildOfSecondChild = TDataStd_TreeNode::Set(aLabel.FindChild(3)); |
410 | SecondChild->Append(FirstChildOfSecondChild); |
411 | |
412 | // Let's redesign the tree: |
413 | |
414 | // Root |
415 | // | |
416 | // --- SecondChild |
417 | // | |
418 | // --- FirstChild |
419 | // | |
420 | // --- FirstChildOfSecondChild |
421 | |
422 | // Removing of the FirstChild from our tree: |
423 | |
424 | FirstChild->Remove(); |
425 | |
426 | // Setting the FirstChild node as a first child of the SecondChild node: |
427 | |
428 | SecondChild->Prepend(FirstChild); |
429 | } |
430 | |
431 | #endif |