Salome HOME
This commit was generated by cvs2git to track changes on a CVS vendor
[modules/smesh.git] / src / SMDS / SMDSEdit_Transform.cxx
1 using namespace std;
2 // File:        SMDSEdit_Transform.cxx
3 // Created:     Wed May 15 21:57:17 2002
4 // Author:      Jean-Michel BOULCOURT
5 //              <jmb@localhost.localdomain>
6
7
8 #include "SMDSEdit_Transform.ixx"
9 #include "SMDS_MeshNode.hxx"
10 #include "SMDS_MeshElement.hxx"
11 #include "SMDS_MeshNodesIterator.hxx"
12 #include "SMDS_ListIteratorOfListOfMeshElement.hxx"
13 #include "TColStd_MapOfInteger.hxx"
14
15
16 //=======================================================================
17 //function : SMDSEdit_Transform
18 //purpose  : 
19 //=======================================================================
20
21 SMDSEdit_Transform::SMDSEdit_Transform(const Handle(SMDS_Mesh)& aMesh,const gp_Trsf& aTrsf)
22   :myMesh(aMesh),myTrsf(aTrsf)
23 {
24 }
25
26 //=======================================================================
27 //function : SMDSEdit_Transform
28 //purpose  : 
29 //=======================================================================
30
31 SMDSEdit_Transform::SMDSEdit_Transform(const Handle(SMDS_Mesh)& aMesh,
32                                        const SMDS_ListOfMeshElement& aListOfME,
33                                        const gp_Trsf& aTrsf)
34   :myMesh(aMesh),myTrsf(aTrsf)
35 {
36   myListOfME = aListOfME;
37 }
38
39 //=======================================================================
40 //function : SetTrsf
41 //purpose  : 
42 //=======================================================================
43
44 void SMDSEdit_Transform::SetTrsf(const gp_Trsf& aTrsf)
45 {
46   myTrsf = aTrsf;
47 }
48
49 //=======================================================================
50 //function : GetTrsf
51 //purpose  : 
52 //=======================================================================
53
54 gp_Trsf SMDSEdit_Transform::GetTrsf() const
55 {
56   return myTrsf;
57 }
58
59 //=======================================================================
60 //function : Perform
61 //purpose  : 
62 //=======================================================================
63
64 void SMDSEdit_Transform::Perform()
65 {
66   if (myListOfME.IsEmpty()) { 
67     // transform the whole mesh
68     SMDS_MeshNodesIterator itNodes(myMesh);
69     
70     for (;itNodes.More();itNodes.Next()) {
71       const Handle(SMDS_MeshElement)& elem = itNodes.Value();
72       Handle(SMDS_MeshNode) node = *((Handle(SMDS_MeshNode)*)&elem);
73       
74       gp_Pnt P = node->Pnt();
75       P.Transform(myTrsf);
76       node->SetPnt(P);
77     }
78     
79   } else {
80     TColStd_MapOfInteger mapnode;
81     Standard_Integer nbnodes,inode;
82
83     SMDS_ListIteratorOfListOfMeshElement itME(myListOfME);
84     for (;itME.More();itME.Next()) {
85       const Handle(SMDS_MeshElement)& elem = itME.Value();
86       nbnodes = elem->NbNodes();
87
88       for (inode = 1; inode <= nbnodes; ++inode) {
89         const Handle(SMDS_MeshNode)& node = myMesh->GetNode(inode,elem);
90         if (mapnode.Add(node->GetID())) {
91           gp_Pnt P = node->Pnt();
92           P.Transform(myTrsf);
93           node->SetPnt(P);
94         }
95       }
96       
97     }
98   }
99 }
100