Salome HOME
Update Help for VISU module.
[modules/visu.git] / src / VISU_I / VISU_Vectors_i.cc
1 //  VISU OBJECT : interactive object for VISU entities implementation
2 //
3 //  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 //  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
5 // 
6 //  This library is free software; you can redistribute it and/or 
7 //  modify it under the terms of the GNU Lesser General Public 
8 //  License as published by the Free Software Foundation; either 
9 //  version 2.1 of the License. 
10 // 
11 //  This library is distributed in the hope that it will be useful, 
12 //  but WITHOUT ANY WARRANTY; without even the implied warranty of 
13 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
14 //  Lesser General Public License for more details. 
15 // 
16 //  You should have received a copy of the GNU Lesser General Public 
17 //  License along with this library; if not, write to the Free Software 
18 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
19 // 
20 //  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
21 //
22 //
23 //  File   : VISU_Vectors_i.cc
24 //  Author : Alexey PETROV
25 //  Module : VISU
26
27 #include "VISU_VectorsPL.hxx"
28 #include "VISU_Result_i.hh"
29 #include "VISU_Vectors_i.hh"
30 #include "VISU_VectorsAct.h"
31
32 using namespace VISU;
33 using namespace std;
34
35 #ifdef _DEBUG_
36 static int MYDEBUG = 0;
37 #else
38 static int MYDEBUG = 0;
39 #endif
40
41 static int INCMEMORY = 4+12;
42
43 int VISU::Vectors_i::IsPossible(Result_i* theResult, const char* theMeshName, VISU::Entity theEntity, 
44                                 const char* theFieldName, int theIteration, int isMemoryCheck)
45 {
46   bool aResult = false;
47   try{
48     aResult = DeformedShape_i::IsPossible(theResult,theMeshName,theEntity,theFieldName,theIteration,false);
49     if(isMemoryCheck && aResult){
50       float aSize = INCMEMORY*
51         theResult->GetInput()->GetTimeStampSize(theMeshName,(VISU::TEntity)theEntity,theFieldName,theIteration);
52       aResult = VISU_PipeLine::CheckAvailableMemory(aSize);
53       MESSAGE("Vectors_i::IsPossible - CheckAvailableMemory = "<<float(aSize)<<"; aResult = "<<aResult);
54     }
55   }catch(std::exception& exc){
56     INFOS("Follow exception was occured :\n"<<exc.what());
57   }catch(...){
58     INFOS("Unknown exception was occured!");
59   }
60   return aResult;
61 }
62
63
64 int VISU::Vectors_i::myNbPresent = 0;
65 QString VISU::Vectors_i::GenerateName() { return VISU::GenerateName("Vectors",myNbPresent++);}
66
67
68 const string VISU::Vectors_i::myComment = "VECTORS";
69 const char* VISU::Vectors_i::GetComment() const { return myComment.c_str();}
70
71
72 VISU::Vectors_i::
73 Vectors_i(Result_i* theResult, 
74           bool theAddToStudy) :
75   PrsObject_i(theResult->GetStudyDocument()), 
76   Prs3d_i(theResult,theAddToStudy),
77   ScalarMap_i(theResult,theAddToStudy),
78   DeformedShape_i(theResult,theAddToStudy),
79   myVectorsPL(NULL)
80 {
81 }
82
83
84 VISU::Vectors_i::
85 Vectors_i(Result_i* theResult, 
86           SALOMEDS::SObject_ptr theSObject) :
87   PrsObject_i(theResult->GetStudyDocument()), 
88   Prs3d_i(theResult,theSObject),
89   ScalarMap_i(theResult,theSObject),
90   DeformedShape_i(theResult,theSObject),
91   myVectorsPL(NULL)
92 {
93 }
94
95
96 void VISU::Vectors_i::SameAs(const VISU::Vectors_i* theOrigin) {
97   Vectors_i* aVectors = const_cast<Vectors_i*>(theOrigin);
98   VISU::DeformedShape_i::SameAs(theOrigin);
99
100   SetLineWidth(aVectors->GetLineWidth());
101 }
102
103
104 VISU::Storable* VISU::Vectors_i::Create(const char* theMeshName, VISU::Entity theEntity, 
105                                         const char* theFieldName, int theIteration)
106 {
107   myLineWidth = 1.0;
108   return DeformedShape_i::Create(theMeshName,theEntity,theFieldName,theIteration);
109 }
110
111
112 VISU::Storable* VISU::Vectors_i::Restore(const Storable::TRestoringMap& theMap)
113 {
114   DoHook();
115   SetGlyphType(VISU::Vectors::GlyphType(VISU::Storable::FindValue(theMap,"myTypeGlyph").toInt()));
116   SetGlyphPos(VISU::Vectors::GlyphPos(VISU::Storable::FindValue(theMap,"myPosGlyph").toInt()));
117   SetLineWidth(VISU::Storable::FindValue(theMap,"myLineWidth").toDouble());
118
119   return DeformedShape_i::Restore(theMap);
120 }
121
122
123 void VISU::Vectors_i::ToStream(std::ostringstream& theStr){
124   DeformedShape_i::ToStream(theStr);
125
126   Storable::DataToStream( theStr, "myTypeGlyph", int(GetGlyphType()));
127   Storable::DataToStream( theStr, "myPosGlyph",  int(GetGlyphPos()));
128   Storable::DataToStream( theStr, "myLineWidth", GetLineWidth());
129 }
130
131
132 VISU::Vectors_i::~Vectors_i(){
133   if(MYDEBUG) MESSAGE("Vectors_i::~Vectors_i()");
134 }
135
136
137 void VISU::Vectors_i::SetLineWidth(CORBA::Double theWidth) { 
138   myLineWidth = theWidth;
139 }
140 CORBA::Double VISU::Vectors_i::GetLineWidth() { 
141   return myLineWidth;
142 }
143
144
145 void VISU::Vectors_i::SetGlyphType(VISU::Vectors::GlyphType theType) { 
146   myVectorsPL->SetGlyphType(VISU_VectorsPL::GlyphType(theType));
147 }
148 VISU::Vectors::GlyphType VISU::Vectors_i::GetGlyphType() { 
149   return VISU::Vectors::GlyphType(myVectorsPL->GetGlyphType());
150 }
151
152
153 void VISU::Vectors_i::SetGlyphPos(VISU::Vectors::GlyphPos thePos) { 
154   myVectorsPL->SetGlyphPos(VISU_VectorsPL::GlyphPos(thePos));
155 }
156 VISU::Vectors::GlyphPos VISU::Vectors_i::GetGlyphPos() { 
157   return VISU::Vectors::GlyphPos(myVectorsPL->GetGlyphPos());
158 }
159
160
161 void VISU::Vectors_i::DoHook(){
162   if(!myPipeLine) myPipeLine = VISU_VectorsPL::New();
163   myVectorsPL = dynamic_cast<VISU_VectorsPL*>(myPipeLine);
164
165   DeformedShape_i::DoHook();
166 }
167
168
169 VISU_PipeLine* VISU::Vectors_i::GetPipeLine(){
170   VISU_PipeLine* aPipeLine = VISU_VectorsPL::New();
171   aPipeLine->ShallowCopy(myPipeLine);
172   aPipeLine->Update();
173   return aPipeLine;
174 }
175
176
177 VISU_Actor* VISU::Vectors_i::CreateActor(const Handle(SALOME_InteractiveObject)& theIO) 
178 {
179   VISU_VectorsAct* anActor = VISU_VectorsAct::New();
180   try{
181     VISU::Prs3d_i::CreateActor(anActor,theIO);
182     anActor->SetBarVisibility(true);
183     anActor->GetProperty()->SetColor(myColor.R,myColor.G,myColor.B);
184     anActor->GetProperty()->SetLineWidth(GetLineWidth());
185     UpdateActor(anActor);
186   }catch(...){
187     anActor->Delete();
188     throw ;
189   }
190   return anActor;
191 }
192
193
194 void VISU::Vectors_i::UpdateActor(VISU_Actor* theActor) {
195   if(VISU_VectorsAct* anActor = dynamic_cast<VISU_VectorsAct*>(theActor)){
196     VISU::DeformedShape_i::UpdateActor(anActor);
197     anActor->GetProperty()->SetLineWidth(GetLineWidth());
198     if(VISU_VectorsPL* aVectorsPL = dynamic_cast<VISU_VectorsPL*>(anActor->GetPipeLine())){
199       aVectorsPL->ShallowCopy(myPipeLine);
200       aVectorsPL->Update();
201       aVectorsPL->SetMapScale(myVectorsPL->GetMapScale());
202     }
203   }
204 }