1 // Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE
3 // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
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.
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.
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
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
22 // VISU OBJECT : interactive object for VISU entities implementation
23 // File : VISU_DumpPython.cc
24 // Author : Alexey PETROV
27 #include "VISU_Gen_i.hh"
28 #include "VISU_Result_i.hh"
29 #include "VISU_PrsObject_i.hh"
31 #include "VISU_Prs3d_i.hh"
32 #include "VISU_Mesh_i.hh"
33 #include "VISU_ScalarMap_i.hh"
34 #include "VISU_IsoSurfaces_i.hh"
35 #include "VISU_DeformedShape_i.hh"
36 #include "VISU_CutPlanes_i.hh"
37 #include "VISU_CutLines_i.hh"
38 #include "VISU_CutSegment_i.hh"
39 #include "VISU_Vectors_i.hh"
40 #include "VISU_StreamLines_i.hh"
41 #include "VISU_Plot3D_i.hh"
42 #include "VISU_Table_i.hh"
43 #include "VISU_PointMap3d_i.hh"
44 #include "VISU_GaussPoints_i.hh"
45 #include "VISU_DeformedShapeAndScalarMap_i.hh"
46 #include "VISU_ColoredPrs3dCache_i.hh"
47 #include "VISU_ColoredPrs3dHolder_i.hh"
49 #include "utilities.h"
64 //---------------------------------------------------------------------------
65 static std::string PREFIX(" ");
67 typedef std::map<std::string,std::string> TName2EntryMap;
68 typedef std::map<std::string,std::string> TEntry2NameMap;
71 //---------------------------------------------------------------------------
74 GenerateName(std::string theName,
75 SALOMEDS::SObject_ptr theSObject,
76 TName2EntryMap& theName2EntryMap,
77 TEntry2NameMap& theEntry2NameMap,
80 if(theName2EntryMap.find(theName) != theName2EntryMap.end()){
81 theName = GenerateName(theName + theSuffix, theSObject, theName2EntryMap, theEntry2NameMap, theSuffix);
83 CORBA::String_var anID = theSObject->GetID();
84 theName2EntryMap[theName] = anID.in();
85 theEntry2NameMap[anID.in()] = theName;
86 //cout<<"GenerateName - "<<theName<<" => "<<anID.in()<<endl;
93 //---------------------------------------------------------------------------
94 struct TReplacePredicate
96 bool operator()(char theChar) const
98 return !(isdigit(theChar) || isalpha(theChar) || theChar == '_');
103 //---------------------------------------------------------------------------
106 GetName(SALOMEDS::SObject_ptr theSObject)
108 CORBA::String_var aString = theSObject->GetName();
110 std::string aName = QString(aString.in()).simplified().toLatin1().data();
112 //replace_if(aName.begin(),aName.end(),not1(ptr_fun(isxdigit)),'_');
113 replace_if(aName.begin(),aName.end(),TReplacePredicate(),'_');
115 if ( isdigit( aName[0] ))
116 aName.insert( 0, 1, 'a' );
122 //---------------------------------------------------------------------------
125 GenerateName(SALOMEDS::SObject_ptr theSObject,
126 TName2EntryMap& theName2EntryMap,
127 TEntry2NameMap& theEntry2NameMap)
129 std::string aName = GetName(theSObject);
131 return GenerateName(aName, theSObject, theName2EntryMap, theEntry2NameMap, 'X');
135 //---------------------------------------------------------------------------
138 GetBoolean(bool theArgument)
147 //---------------------------------------------------------------------------
150 GetColor(const SALOMEDS::Color& theColor)
152 std::ostringstream aStream;
153 aStream<<"SALOMEDS.Color("<<theColor.R<<", "<<theColor.G<<", "<<theColor.B<<")";
154 return aStream.str();
158 //---------------------------------------------------------------------------
159 typedef void (*TDumpToPython)(SALOMEDS::Study_ptr theStudy,
160 CORBA::Boolean theIsPublished,
161 CORBA::Boolean& theIsValidScript,
162 SALOMEDS::SObject_ptr theSObject,
163 std::ostream& theStr,
164 TName2EntryMap& theName2EntryMap,
165 TEntry2NameMap& theEntry2NameMap,
166 std::string theArgumentName,
167 std::string thePrefix);
171 DumpToPython(SALOMEDS::Study_ptr theStudy,
172 CORBA::Boolean theIsPublished,
173 CORBA::Boolean& theIsValidScript,
174 SALOMEDS::SObject_ptr theSObject,
175 std::ostream& theStr,
176 TName2EntryMap& theName2EntryMap,
177 TEntry2NameMap& theEntry2NameMap,
178 std::string theArgumentName,
179 std::string thePrefix);
182 //---------------------------------------------------------------------------
183 void SetClippingPlane(Prs3d_i* thePrs, string theName,
184 std::ostream& theStr,
185 std::string thePrefix)
187 VISU_CutPlaneFunction* aPlane;
188 VISU_Gen_i* aGen = VISU_Gen_i::GetVisuGenImpl();
189 VISU_ClippingPlaneMgr& aMgr = aGen->GetClippingPlaneMgr();
191 for (int i = 0; i < thePrs->GetNumberOfClippingPlanes(); i++) {
192 aPlane = dynamic_cast<VISU_CutPlaneFunction*>(thePrs->GetClippingPlane(i));
194 if (!aPlane->isAuto()) {
195 aId = aMgr.GetPlaneId(aPlane);
197 theStr<<thePrefix<<"aVisu.ApplyClippingPlane("<<theName<<", "<<aId<<")"<<endl;
206 Prs3dToPython(VISU::Prs3d_i* theServant,
207 std::ostream& theStr,
208 const std::string& theName,
209 std::string thePrefix)
212 theServant->GetOffset(x,y,z);
213 theStr<<thePrefix<<theName<<".SetOffset("<<x<<", "<<y<<", "<<z<<")"<<endl;
214 SetClippingPlane(theServant, theName, theStr, thePrefix);
217 //---------------------------------------------------------------------------
218 struct TColoredPrs3dFactory
222 operator()(std::ostream& theStr,
223 std::string thePrefix)
231 struct TCreateFromResult: TColoredPrs3dFactory
233 VISU::ColoredPrs3d_i* myServant;
234 std::string myConstructorName;
235 std::string myArgumentName;
237 SALOMEDS::SObject_var mySObject;
240 TCreateFromResult(const SALOMEDS::SObject_var& theSObject,
241 VISU::ColoredPrs3d_i* theServant,
242 const std::string& theName,
243 const std::string& theConstructorName,
244 const std::string& theArgumentName):
245 myServant(theServant),
246 myConstructorName(theConstructorName),
247 myArgumentName(theArgumentName),
248 mySObject(theSObject),
254 operator()(std::ostream& theStr,
255 std::string thePrefix)
258 switch(myServant->GetEntity()){
260 aParam = "VISU.NODE";
263 aParam = "VISU.EDGE";
266 aParam = "VISU.FACE";
269 aParam = "VISU.CELL";
273 theStr<<thePrefix<<myName<<" = aVisu."<<myConstructorName<<"("<<myArgumentName<<
274 ", '"<<myServant->GetCMeshName()<<"'"<<
276 ", '"<<myServant->GetCFieldName()<<"'"<<
277 ", "<<myServant->GetTimeStampNumber()<<
280 theStr<<thePrefix<<"if "<<myName<<" != None:"<<endl;
283 // Add to Name->Object map
284 theStr<<thePrefix<<"aName2ObjectMap['"<<myName<<"'] = "<<myName<<endl;
286 // Set name (as this object could be renamed by user)
287 CORBA::String_var aNameInStudy = mySObject->GetName();
288 theStr<<thePrefix<<"visu.SetName("<<myName<<", '"<<aNameInStudy.in()<<"')"<<endl;
295 //---------------------------------------------------------------------------
297 ColoredPrs3dToPython(SALOMEDS::SObject_ptr theSObject,
298 VISU::ColoredPrs3d_i* theServant,
299 std::ostream& theStr,
300 const std::string& theName,
301 TColoredPrs3dFactory& thePrsFactory,
302 std::string thePrefix)
304 thePrefix = thePrsFactory(theStr, thePrefix);
306 // Set parameters common for all Prs3d objects (offset values)
307 Prs3dToPython(theServant, theStr, theName, thePrefix);
309 theStr<<thePrefix<<theName<<".SetPosition("<<theServant->GetPosX()<<", "<<theServant->GetPosY()<<")"<<endl;
310 theStr<<thePrefix<<theName<<".SetSize("<<theServant->GetWidth()<<", "<<theServant->GetHeight()<<")"<<endl;
311 theStr<<thePrefix<<theName<<".SetNbColors("<<theServant->GetNbColors()<<")"<<endl;
312 theStr<<thePrefix<<theName<<".SetLabels("<<theServant->GetLabels()<<")"<<endl;
313 theStr<<thePrefix<<theName<<".SetTitle('"<<theServant->GetTitle()<<"')"<<endl;
316 switch(theServant->GetBarOrientation()){
317 case ColoredPrs3dBase::HORIZONTAL:
318 aParam = "VISU.ColoredPrs3d.HORIZONTAL";
320 case ColoredPrs3dBase::VERTICAL:
321 aParam = "VISU.ColoredPrs3d.VERTICAL";
324 theStr<<thePrefix<<theName<<".SetBarOrientation("<<aParam<<")"<<endl;
326 theStr<<thePrefix<<theName<<".SetScalarMode("<<theServant->GetScalarMode()<<")"<<endl;
328 if(theServant->IsRangeFixed())
329 theStr<<thePrefix<<theName<<".SetRange("<<theServant->GetMin()<<", "<<theServant->GetMax()<<")"<<endl;
331 theStr<<thePrefix<<theName<<".SetSourceRange()"<<endl;
333 const VISU::ColoredPrs3d_i::TGroupNames aGroupNames = theServant->GetGroupNames();
334 VISU::ColoredPrs3d_i::TGroupNames::const_iterator anIter = aGroupNames.begin();
335 for(; anIter != aGroupNames.end(); anIter++){
336 const std::string& aGroupName = *anIter;
337 theStr<<thePrefix<<theName<<".AddMeshOnGroup('"<<aGroupName<<"')"<<endl;
344 //---------------------------------------------------------------------------
346 GaussPointsToPython(SALOMEDS::SObject_ptr theSObject,
347 VISU::GaussPoints_i* theServant,
348 std::ostream& theStr,
349 const std::string& theName,
350 TColoredPrs3dFactory& thePrsFactory,
351 std::string thePrefix)
353 thePrefix = ColoredPrs3dToPython(theSObject, theServant, theStr, theName, thePrsFactory, thePrefix);
354 theStr<<thePrefix<<endl;
356 bool aBoolean = theServant->GetIsActiveLocalScalarBar();
357 theStr<<thePrefix<<theName<<".SetIsActiveLocalScalarBar("<<GetBoolean(aBoolean)<<")"<<endl;
360 aBoolean = theServant->GetIsDispGlobalScalarBar();
361 theStr<<thePrefix<<theName<<".SetIsDispGlobalScalarBar("<<GetBoolean(aBoolean)<<")"<<endl;
364 theStr<<thePrefix<<theName<<".SetSpacing("<<theServant->GetSpacing()<<")"<<endl;
366 aBoolean = theServant->GetBiColor();
367 theStr<<thePrefix<<theName<<".SetBiColor("<<GetBoolean(aBoolean)<<")"<<endl;
369 aBoolean = theServant->GetIsDeformed();
370 theStr<<thePrefix<<theName<<".SetIsDeformed("<<GetBoolean(aBoolean)<<")"<<endl;
371 theStr<<thePrefix<<theName<<".SetScaleFactor("<<theServant->GetScaleFactor()<<")"<<endl;
374 switch(theServant->GetPrimitiveType()){
375 case VISU::GaussPoints::SPRITE :
376 aParam = "VISU.GaussPoints.SPRITE";
378 case VISU::GaussPoints::POINT :
379 aParam = "VISU.GaussPoints.POINT";
381 case VISU::GaussPoints::SPHERE :
382 aParam = "VISU.GaussPoints.SPHERE";
385 theStr<<thePrefix<<theName<<".SetPrimitiveType("<<aParam<<")"<<endl;
387 theStr<<thePrefix<<theName<<".SetClamp("<<theServant->GetClamp()<<")"<<endl;
389 QString aMainTexture = theServant->GetQMainTexture();
390 QString anAlphaTexture = theServant->GetQAlphaTexture();
391 theStr<<thePrefix<<theName<<".SetTextures('"<<aMainTexture.toLatin1().data()<<"', '"<<anAlphaTexture.toLatin1().data()<<"')"<<endl;
393 theStr<<thePrefix<<theName<<".SetAlphaThreshold("<<theServant->GetAlphaThreshold()<<")"<<endl;
395 theStr<<thePrefix<<theName<<".SetResolution("<<theServant->GetResolution()<<")"<<endl;
397 theStr<<thePrefix<<theName<<".SetFaceLimit("<<theServant->GetFaceLimit()<<")"<<endl;
399 aBoolean = theServant->GetIsColored();
400 theStr<<thePrefix<<theName<<".SetIsColored("<<GetBoolean(aBoolean)<<")"<<endl;
403 theStr<<thePrefix<<theName<<".SetMinSize("<<theServant->GetMinSize()<<")"<<endl;
404 theStr<<thePrefix<<theName<<".SetMaxSize("<<theServant->GetMaxSize()<<")"<<endl;
406 theStr<<thePrefix<<theName<<".SetColor("<<GetColor(theServant->GetColor())<<")"<<endl;
407 theStr<<thePrefix<<theName<<".SetGeomSize("<<theServant->GetGeomSize()<<")"<<endl;
410 theStr<<thePrefix<<theName<<".SetMagnification("<<theServant->GetMagnification()<<")"<<endl;
411 theStr<<thePrefix<<theName<<".SetMagnificationIncrement("<<theServant->GetMagnificationIncrement()<<")"<<endl;
413 std::string aVisible = theServant->IsBarVisible()? "True" : "False";
414 theStr<<thePrefix<<theName<<".SetBarVisible("<<aVisible<<")"<<endl;
420 //---------------------------------------------------------------------------
422 ScalarMapToPython(SALOMEDS::SObject_ptr theSObject,
423 VISU::ScalarMap_i* theServant,
424 std::ostream& theStr,
425 const std::string& theName,
426 TColoredPrs3dFactory& thePrsFactory,
427 std::string thePrefix)
429 thePrefix = ColoredPrs3dToPython(theSObject, theServant, theStr, theName, thePrsFactory, thePrefix);
430 theStr<<thePrefix<<endl;
433 switch(theServant->GetScaling()){
435 aParam = "VISU.LINEAR";
438 aParam = "VISU.LOGARITHMIC";
441 std::string aVisible = theServant->IsBarVisible()? "True" : "False";
442 theStr<<thePrefix<<theName<<".SetScaling("<<aParam<<")"<<endl;
443 theStr<<thePrefix<<theName<<".SetBarVisible("<<aVisible<<")"<<endl;
445 switch(theServant->GetGaussMetric()){
447 aParam = "VISU.AVERAGE";
450 aParam = "VISU.MINIMUM";
453 aParam = "VISU.MAXIMUM";
456 theStr<<thePrefix<<theName<<".SetGaussMetric("<<aParam<<")"<<endl;
458 SALOMEDS::Color aColor = theServant->GetLinkColor();
459 theStr<<thePrefix<<theName<<".SetLinkColor(SALOMEDS.Color("<<
460 aColor.R<<", "<<aColor.G<<", "<<aColor.B<<"))"<<endl;
462 if(theServant->IsRangeFixed())
463 theStr<<thePrefix<<theName<<".SetRange("<<theServant->GetMin()<<", "<<theServant->GetMax()<<")"<<endl;
465 theStr<<thePrefix<<theName<<".SetSourceRange()"<<endl;
470 //---------------------------------------------------------------------------
472 MonoColorPrsToPython(SALOMEDS::SObject_ptr theSObject,
473 VISU::MonoColorPrs_i* theServant,
474 std::ostream& theStr,
475 const std::string& theName,
476 TColoredPrs3dFactory& thePrsFactory,
477 std::string thePrefix)
479 thePrefix = ScalarMapToPython(theSObject, theServant, theStr, theName, thePrsFactory, thePrefix);
480 theStr<<thePrefix<<endl;
481 theStr<<thePrefix<<theName<<".ShowColored("<<GetBoolean(theServant->IsColored())<<")"<<endl;
482 theStr<<thePrefix<<theName<<".SetColor("<<GetColor(theServant->GetColor())<<")"<<endl;
486 //---------------------------------------------------------------------------
488 DeformedShapeToPython(SALOMEDS::SObject_ptr theSObject,
489 VISU::DeformedShape_i* theServant,
490 std::ostream& theStr,
491 const std::string& theName,
492 TColoredPrs3dFactory& thePrsFactory,
493 std::string thePrefix)
495 thePrefix = MonoColorPrsToPython(theSObject, theServant, theStr, theName, thePrsFactory, thePrefix);
496 theStr<<thePrefix<<endl;
498 theStr<<thePrefix<<theName<<".SetScale("<<theServant->GetScale()<<")"<<endl;
499 // theStr<<thePrefix<<theName<<".ShowColored("<<GetBoolean(theServant->IsColored())<<")"<<endl;
500 // theStr<<thePrefix<<theName<<".SetColor("<<GetColor(theServant->GetColor())<<")"<<endl;
506 //---------------------------------------------------------------------------
508 StreamLinesToPython(SALOMEDS::SObject_ptr theSObject,
509 VISU::StreamLines_i* theServant,
510 std::ostream& theStr,
511 TEntry2NameMap& theEntry2NameMap,
512 const std::string& theName,
513 TColoredPrs3dFactory& thePrsFactory,
514 std::string thePrefix)
516 thePrefix = MonoColorPrsToPython(theSObject, theServant, theStr, theName, thePrsFactory, thePrefix);
517 // thePrefix = DeformedShapeToPython(theSObject, theServant, theStr, theName, thePrsFactory, thePrefix);
518 theStr<<thePrefix<<endl;
521 switch(theServant->GetDirection()){
522 case StreamLines::FORWARD:
523 aParam = "VISU.StreamLines.FORWARD";
525 case StreamLines::BACKWARD:
526 aParam = "VISU.StreamLines.BACKWARD";
528 case StreamLines::BOTH:
529 aParam = "VISU.StreamLines.BOTH";
533 theStr<<thePrefix<<"aPrs3d = None"<<endl;
534 VISU::Prs3d_var aPrs3d = theServant->GetSource();
535 if(!CORBA::is_nil(aPrs3d)){
536 if(Prs3d_i* aServant3d = dynamic_cast<Prs3d_i*>(GetServant(aPrs3d).in())){
537 SALOMEDS::SObject_var aSObject = aServant3d->GetSObject();
538 CORBA::String_var anID = aSObject->GetID();
539 std::string anArg = theEntry2NameMap[anID.in()];
540 theStr<<thePrefix<<"if aName2ObjectMap.has_key('"<<anArg<<"'):"<<endl;
542 theStr<<thePrefix<<"aPrs3d = aName2ObjectMap['"<<anArg<<"']"<<endl;
546 theStr<<thePrefix<<theName<<".SetParams("<<
547 theServant->GetIntegrationStep()<<", "<<
548 theServant->GetPropagationTime()<<", "<<
549 theServant->GetStepLength()<<", "<<
551 theServant->GetUsedPoints()<<", "<<
559 //---------------------------------------------------------------------------
561 DeformedShapeAndScalarMapToPython(SALOMEDS::SObject_ptr theSObject,
562 VISU::DeformedShapeAndScalarMap_i* theServant,
563 std::ostream& theStr,
564 const std::string& theName,
565 TColoredPrs3dFactory& thePrsFactory,
566 std::string thePrefix)
568 thePrefix = ScalarMapToPython(theSObject, theServant, theStr, theName, thePrsFactory, thePrefix);
569 theStr<<thePrefix<<endl;
571 theStr<<thePrefix<<theName<<".SetRange("<<theServant->GetMin()<<", "<<theServant->GetMax()<<")"<<endl;
572 theStr<<thePrefix<<theName<<".SetScale("<<theServant->GetScale()<<")"<<endl;
575 VISU::Entity anEntity = theServant->GetScalarEntity();
578 aParam = "VISU.NODE";
581 aParam = "VISU.EDGE";
584 aParam = "VISU.FACE";
587 aParam = "VISU.CELL";
591 CORBA::String_var aFieldName = theServant->GetScalarFieldName();
592 CORBA::Long aTimeStampNumber = theServant->GetScalarTimeStampNumber();
594 theStr<<thePrefix<<theName<<".SetScalarField("<<
596 "'"<<aFieldName<<"', "<<
604 //---------------------------------------------------------------------------
606 VectorsToPython(SALOMEDS::SObject_ptr theSObject,
607 VISU::Vectors_i* theServant,
608 std::ostream& theStr,
609 const std::string& theName,
610 TColoredPrs3dFactory& thePrsFactory,
611 std::string thePrefix)
613 thePrefix = DeformedShapeToPython(theSObject, theServant, theStr, theName, thePrsFactory, thePrefix);
614 theStr<<thePrefix<<endl;
616 theStr<<thePrefix<<theName<<".SetLineWidth("<<theServant->GetLineWidth()<<")"<<endl;
619 switch(theServant->GetGlyphType()){
621 aParam = "VISU.Vectors.ARROW";
624 aParam = "VISU.Vectors.CONE2";
627 aParam = "VISU.Vectors.CONE6";
630 aParam = "VISU.Vectors.NONE";
633 theStr<<thePrefix<<theName<<".SetGlyphType("<<aParam<<")"<<endl;
635 switch(theServant->GetGlyphPos()){
636 case Vectors::CENTER:
637 aParam = "VISU.Vectors.CENTER";
640 aParam = "VISU.Vectors.TAIL";
643 aParam = "VISU.Vectors.HEAD";
646 theStr<<thePrefix<<theName<<".SetGlyphPos("<<aParam<<")"<<endl;
652 //---------------------------------------------------------------------------
654 IsoSurfacesToPython(SALOMEDS::SObject_ptr theSObject,
655 VISU::IsoSurfaces_i* theServant,
656 std::ostream& theStr,
657 const std::string& theName,
658 TColoredPrs3dFactory& thePrsFactory,
659 std::string thePrefix)
661 thePrefix = ScalarMapToPython(theSObject, theServant, theStr, theName, thePrsFactory, thePrefix);
662 theStr<<thePrefix<<endl;
664 theStr<<thePrefix<<theName<<".SetNbSurfaces("<<theServant->GetNbSurfaces()<<")"<<endl;
665 theStr<<thePrefix<<theName<<".ShowLabels("<<theServant->IsLabeled()<<","<<theServant->GetNbLabels()<<")"<<endl;
671 //---------------------------------------------------------------------------
673 CutPlanesToPython(SALOMEDS::SObject_ptr theSObject,
674 VISU::CutPlanes_i* theServant,
675 std::ostream& theStr,
676 const std::string& theName,
677 TColoredPrs3dFactory& thePrsFactory,
678 std::string thePrefix)
680 thePrefix = ScalarMapToPython(theSObject, theServant, theStr, theName, thePrsFactory, thePrefix);
681 theStr<<thePrefix<<endl;
684 switch(theServant->GetOrientationType()){
686 aParam = "VISU.CutPlanes.XY";
689 aParam = "VISU.CutPlanes.YZ";
692 aParam = "VISU.CutPlanes.ZX";
695 theStr<<thePrefix<<theName<<".SetOrientation("<<aParam<<", "<<theServant->GetRotateX()<<", "<<theServant->GetRotateY()<<")"<<endl;
697 theStr<<thePrefix<<theName<<".SetDisplacement("<<theServant->GetDisplacement()<<")"<<endl;
698 CORBA::Long aNbPlanes = theServant->GetNbPlanes();
699 theStr<<thePrefix<<theName<<".SetNbPlanes("<<aNbPlanes<<")"<<endl;
701 for(CORBA::Long anId = 0; anId < aNbPlanes; anId++){
702 if(!theServant->IsDefault(anId))
703 theStr<<thePrefix<<theName<<".SetPlanePosition("<<anId<<", "<<theServant->GetPlanePosition(anId)<<")"<<endl;
706 theStr<<thePrefix<<theName<<".UseDeformation("<<GetBoolean(theServant->IsDeformed())<<")"<<endl;
707 if(theServant->IsDeformed()){
708 theStr<< thePrefix << theName << ".SetScale(" << theServant->GetScale()<<")"<<endl;
709 std::string aStringEntity;
710 VISU::Entity anEntity = theServant->GetVectorialFieldEntity();
713 aStringEntity = "VISU.NODE";
716 aStringEntity = "VISU.EDGE";
719 aStringEntity = "VISU.FACE";
722 aStringEntity = "VISU.CELL";
725 theStr<< thePrefix << theName << ".SetVectorialField("<<aStringEntity<<", '" << theServant->GetVectorialFieldName() <<"')"<<endl;
731 //---------------------------------------------------------------------------
733 CutLinesToPython(SALOMEDS::SObject_ptr theSObject,
734 VISU::CutLines_i* theServant,
735 std::ostream& theStr,
736 const std::string& theName,
737 TColoredPrs3dFactory& thePrsFactory,
738 std::string thePrefix)
740 thePrefix = ScalarMapToPython(theSObject, theServant, theStr, theName, thePrsFactory, thePrefix);
741 theStr<<thePrefix<<endl;
744 switch(theServant->GetOrientationType()){
746 aParam = "VISU.CutPlanes.XY";
749 aParam = "VISU.CutPlanes.YZ";
752 aParam = "VISU.CutPlanes.ZX";
755 theStr<<thePrefix<<theName<<".SetOrientation("<<aParam<<", "<<theServant->GetRotateX()<<", "<<theServant->GetRotateY()<<")"<<endl;
757 switch(theServant->GetOrientationType2()){
759 aParam = "VISU.CutPlanes.XY";
762 aParam = "VISU.CutPlanes.YZ";
765 aParam = "VISU.CutPlanes.ZX";
768 theStr<<thePrefix<<theName<<".SetOrientation2("<<aParam<<", "<<theServant->GetRotateX2()<<", "<<theServant->GetRotateY2()<<")"<<endl;
770 theStr<<thePrefix<<theName<<".SetDisplacement("<<theServant->GetDisplacement()<<")"<<endl;
771 theStr<<thePrefix<<theName<<".SetDisplacement2("<<theServant->GetDisplacement2()<<")"<<endl;
773 if(!theServant->IsDefault())
774 theStr<<thePrefix<<theName<<".SetBasePlanePosition("<<theServant->GetBasePlanePosition()<<")"<<endl;
776 CORBA::Boolean aUseAbsLength = theServant->IsUseAbsoluteLength();
777 theStr<<thePrefix<<theName<<".SetUseAbsoluteLength("<<aUseAbsLength<<")"<<endl;
779 CORBA::Long aNbLines = theServant->GetNbLines();
780 theStr<<thePrefix<<theName<<".SetNbLines("<<aNbLines<<")"<<endl;
781 for(CORBA::Long anId = 0; anId < aNbLines; anId++){
782 if(!theServant->IsDefaultPosition(anId))
783 theStr<<thePrefix<<theName<<".SetLinePosition("<<anId<<", "<<theServant->GetLinePosition(anId)<<")"<<endl;
790 //---------------------------------------------------------------------------
792 CutSegmentToPython(SALOMEDS::SObject_ptr theSObject,
793 VISU::CutSegment_i* theServant,
794 std::ostream& theStr,
795 const std::string& theName,
796 TColoredPrs3dFactory& thePrsFactory,
797 std::string thePrefix)
799 thePrefix = ScalarMapToPython(theSObject, theServant, theStr, theName, thePrsFactory, thePrefix);
800 theStr<<thePrefix<<endl;
802 double x1, y1, z1, x2, y2, z2;
803 theServant->GetPoint1(x1, y1, z1);
804 theServant->GetPoint2(x2, y2, z2);
805 theStr<<thePrefix<<theName<<".SetPoint1("<<x1<<", "<<y1<<", "<<z1<<")"<<endl;
806 theStr<<thePrefix<<theName<<".SetPoint2("<<x2<<", "<<y2<<", "<<z2<<")"<<endl;
808 CORBA::Boolean aUseAbsLength = theServant->IsUseAbsoluteLength();
809 theStr<<thePrefix<<theName<<".SetUseAbsoluteLength("<<aUseAbsLength<<")"<<endl;
815 //---------------------------------------------------------------------------
817 Plot3DToPython(SALOMEDS::SObject_ptr theSObject,
818 VISU::Plot3D_i* theServant,
819 std::ostream& theStr,
820 const std::string& theName,
821 TColoredPrs3dFactory& thePrsFactory,
822 std::string thePrefix)
824 thePrefix = ScalarMapToPython(theSObject, theServant, theStr, theName, thePrsFactory, thePrefix);
825 theStr<<thePrefix<<endl;
828 switch(theServant->GetOrientationType()){
830 aParam = "VISU.Plot3D.XY";
833 aParam = "VISU.Plot3D.YZ";
836 aParam = "VISU.Plot3D.ZX";
839 theStr<<thePrefix<<theName<<".SetOrientation("<<aParam<<", "<<theServant->GetRotateX()<<", "<<theServant->GetRotateY()<<")"<<endl;
841 theStr<<thePrefix<<theName<<".SetPlanePosition("<<theServant->GetPlanePosition()<<", "<<theServant->IsPositionRelative()<<")"<<endl;
842 theStr<<thePrefix<<theName<<".SetScaleFactor("<<theServant->GetScaleFactor()<<")"<<endl;
843 theStr<<thePrefix<<theName<<".SetContourPrs("<<theServant->GetIsContourPrs()<<")"<<endl;
844 theStr<<thePrefix<<theName<<".SetNbOfContours("<<theServant->GetNbOfContours()<<")"<<endl;
849 //---------------------------------------------------------------------------
851 void DumpChildrenToPython(SALOMEDS::Study_ptr theStudy,
852 CORBA::Boolean theIsPublished,
853 CORBA::Boolean& theIsValidScript,
854 SALOMEDS::SObject_ptr theSObject,
855 std::ostream& theStr,
856 TName2EntryMap& theName2EntryMap,
857 TEntry2NameMap& theEntry2NameMap,
858 std::string theArgumentName,
859 std::string thePrefix);
861 //---------------------------------------------------------------------------
862 template<class TTableAttr>
864 TableAttrToPython(SALOMEDS::Study_ptr theStudy,
865 CORBA::Boolean theIsPublished,
866 CORBA::Boolean& theIsValidScript,
867 SALOMEDS::SObject_ptr theSObject,
868 TTableAttr theTableAttr,
869 const std::string& theAttrName,
870 std::ostream& theStr,
871 TName2EntryMap& theName2EntryMap,
872 TEntry2NameMap& theEntry2NameMap,
873 std::string theArgumentName,
874 std::string thePrefix)
876 SALOMEDS::GenericAttribute_var anAttr;
877 SALOMEDS::SObject_var aFatherSObject = theSObject->GetFather();
878 if(aFatherSObject->FindAttribute(anAttr,"AttributeString")){
879 SALOMEDS::AttributeString_var aComment =
880 SALOMEDS::AttributeString::_narrow(anAttr);
881 CORBA::String_var aValue = aComment->Value();
882 Storable::TRestoringMap aMap;
883 Storable::StringToMap(aValue.in(),aMap);
885 QString aMethodName = VISU::Storable::FindValue(aMap,"myComment",&anIsExist);
887 if(strcmp(aMethodName.toLatin1().data(),"ImportTables") == 0){
893 std::string aSObjectName = GetName(theSObject);
894 theStr<<thePrefix<<aSObjectName<<" = aBuilder.NewObject(aSComponent)"<<endl;
895 theStr<<thePrefix<<"if "<<aSObjectName<<":"<<endl;
898 theStr<<thePrefix<<"aBuilder.SetName("<<aSObjectName<<", \""<<theSObject->GetName()<<"\")"<<endl; // Fix for IPAL13165
899 std::string aName = "aTableAttr";
900 theStr<<thePrefix<<aName<<" = aBuilder.FindOrCreateAttribute("<<
901 aSObjectName<<", '"<<theAttrName<<"')"<<endl;
903 theStr<<thePrefix<<"if "<<aName<<":"<<endl;
904 std::string aPrefix = thePrefix;
907 CORBA::String_var aString = theTableAttr->GetTitle();
908 theStr<<thePrefix<<aName<<".SetTitle('"<<aString.in()<<"')"<<endl;
910 CORBA::Long aNbColumns = theTableAttr->GetNbColumns();
911 theStr<<thePrefix<<aName<<".SetNbColumns("<<aNbColumns<<")"<<endl;
913 CORBA::Long aNbRows = theTableAttr->GetNbRows();
915 // push values and their indices into streams
916 strstream values, rows, columns;
918 for(CORBA::Long i = 1; i <= aNbColumns; i++){
919 for(CORBA::Long j = aNbRows; j > 0; j--){
920 if(theTableAttr->HasValue(j,i)){
921 values << comma << theTableAttr->GetValue(j,i);
923 columns << comma << i;
929 // push titles and units into streams
930 strstream rowUnits, rowTitles, colTitles;
931 SALOMEDS::StringSeq_var aRowUnits = theTableAttr->GetRowUnits();
932 SALOMEDS::StringSeq_var aRowTitles = theTableAttr->GetRowTitles();
934 for(CORBA::Long j = 1; j <= aNbRows; j++){
935 rowUnits << comma << "'" << aRowUnits [ j - 1 ] << "'";
936 rowTitles << comma << "'" << aRowTitles[ j - 1 ] << "'";
940 SALOMEDS::StringSeq_var aColumnTitles = theTableAttr->GetColumnTitles();
942 for(CORBA::Long j = 1; j <= aNbColumns; j++){
943 colTitles << comma << "'" << aColumnTitles[ j - 1 ] << "'";
953 // write FillTable command
954 theStr<< thePrefix << aName << "_values = [" << values.str() << "]" << endl;
955 theStr<< thePrefix << aName << "_rows = [" << rows.str() << "]" << endl;
956 theStr<< thePrefix << aName << "_columns = [" << columns.str() << "]" << endl;
957 theStr<< thePrefix << aName << "_rUnits = [" << rowUnits.str() << "]" << endl;
958 theStr<< thePrefix << aName << "_rTitles = [" << rowTitles.str() << "]" << endl;
959 theStr<< thePrefix << aName << "_cTitles = [" << colTitles.str() << "]" << endl;
960 theStr<< thePrefix << "visu.FillTable( "
962 << aName << "_values, "
963 << aName << "_rows, "
964 << aName << "_columns, "
965 << aName << "_rTitles, "
966 << aName << "_rUnits, "
967 << aName << "_cTitles )" << endl;
969 if(theSObject->FindAttribute(anAttr,"AttributeIOR")){
970 theStr<<thePrefix<<endl;
971 std::string aName = "aTable";
972 theStr<<thePrefix<<"anID = "<<aSObjectName<<".GetID()"<<endl;
973 theStr<<thePrefix<<aName<<" = aVisu.CreateTable(anID)"<<endl;
974 theArgumentName = aName;
976 theStr<<thePrefix<<"if "<<aName<<":"<<endl;
977 std::string aPrefix2 = thePrefix + PREFIX;
979 // Set name (as this object could be renamed by user)
980 CORBA::String_var aNameInStudy = theSObject->GetName();
981 theStr<<aPrefix2<<aName<<".SetTitle('"<<aNameInStudy.in()<<"') # 1"<<endl;
983 DumpChildrenToPython(theStudy,
993 theStr<<aPrefix2<<"pass"<<endl<<endl;
996 theStr<<thePrefix<<"pass"<<endl<<endl;
997 theStr<<aPrefix<<"pass"<<endl<<endl;
1001 //---------------------------------------------------------------------------
1003 DumpChildrenToPython(SALOMEDS::Study_ptr theStudy,
1004 CORBA::Boolean theIsPublished,
1005 CORBA::Boolean& theIsValidScript,
1006 SALOMEDS::SObject_ptr theSObject,
1007 std::ostream& theStr,
1008 TName2EntryMap& theName2EntryMap,
1009 TEntry2NameMap& theEntry2NameMap,
1010 std::string theArgumentName,
1011 std::string thePrefix)
1013 SALOMEDS::ChildIterator_var aChildItet = theStudy->NewChildIterator(theSObject);
1014 for(aChildItet->InitEx(false); aChildItet->More(); aChildItet->Next()){
1015 SALOMEDS::SObject_var aSObject = aChildItet->Value();
1016 DumpToPython(theStudy,
1029 //---------------------------------------------------------------------------
1031 DumpTableAttrToPython(SALOMEDS::Study_ptr theStudy,
1032 CORBA::Boolean theIsPublished,
1033 CORBA::Boolean& theIsValidScript,
1034 SALOMEDS::SObject_ptr theSObject,
1035 std::ostream& theStr,
1036 TName2EntryMap& theName2EntryMap,
1037 TEntry2NameMap& theEntry2NameMap,
1038 std::string theArgumentName,
1039 std::string thePrefix)
1041 SALOMEDS::GenericAttribute_var anAttr;
1042 if(theSObject->FindAttribute(anAttr,"AttributeTableOfInteger")){
1043 SALOMEDS::AttributeTableOfInteger_var aTableAttr =
1044 SALOMEDS::AttributeTableOfInteger::_narrow(anAttr);
1046 TableAttrToPython(theStudy,
1051 "AttributeTableOfInteger",
1058 }else if(theSObject->FindAttribute(anAttr,"AttributeTableOfReal")){
1059 SALOMEDS::AttributeTableOfReal_var aTableAttr =
1060 SALOMEDS::AttributeTableOfReal::_narrow(anAttr);
1062 TableAttrToPython(theStudy,
1067 "AttributeTableOfReal",
1078 //---------------------------------------------------------------------------
1080 DumpToPython(SALOMEDS::Study_ptr theStudy,
1081 CORBA::Boolean theIsPublished,
1082 CORBA::Boolean& theIsValidScript,
1083 SALOMEDS::SObject_ptr theSObject,
1084 std::ostream& theStr,
1085 TName2EntryMap& theName2EntryMap,
1086 TEntry2NameMap& theEntry2NameMap,
1087 std::string theArgumentName,
1088 std::string thePrefix)
1090 std::string aName = GetName(theSObject);
1094 CORBA::String_var anID = theSObject->GetID();
1095 CORBA::String_var aNameInStudy = theSObject->GetName();
1097 CORBA::Object_var anObj = SObjectToObject(theSObject);
1098 if (!CORBA::is_nil(anObj)) {
1099 VISU::Base_var aBase = VISU::Base::_narrow(anObj);
1100 if(!CORBA::is_nil(aBase)){
1101 std::string aName = GenerateName(theSObject, theName2EntryMap, theEntry2NameMap);
1103 VISU::VISUType aType = aBase->GetType();
1106 if(Result_i* aServant = dynamic_cast<Result_i*>(GetServant(anObj).in())){
1107 std::string aFileName = aServant->GetInitFileName();
1108 Result_i::ECreationId anId = aServant->GetCreationId();
1109 if(anId == Result_i::eImportFile || anId == Result_i::eCopyAndImportFile){
1111 case Result_i::eImportFile:
1112 theStr<<thePrefix<<aName<<" = aVisu.CreateResult('"<<aFileName<<"')"<<endl;
1114 theStr<<thePrefix<<aName<<".SetBuildGroups("<<
1115 GetBoolean(aServant->IsGroupsDone())<<")"<<
1118 theStr<<thePrefix<<aName<<".SetBuildFields("<<
1119 GetBoolean(aServant->IsFieldsDone())<<", "<<
1120 GetBoolean(aServant->IsMinMaxDone())<<")"<<
1123 theStr<<thePrefix<<aName<<".Build(False, True)"<<endl;
1125 theStr<<thePrefix<<"if "<<aName<<".IsDone() :"<<endl;
1127 case Result_i::eCopyAndImportFile:
1128 theStr<<thePrefix<<aName<<" = aVisu.CopyAndImportFile('"<<aFileName<<"')"<<endl;
1129 theStr<<thePrefix<<"if "<<aName<<":"<<endl;
1133 thePrefix += PREFIX;
1135 VISU::Result::EntityNames_var aMeshNames = aServant->GetMeshNames();
1136 if (aMeshNames->length() > 0) {
1137 for(size_t aMeshId = 0; aMeshId < aMeshNames->length(); aMeshId++){
1138 CORBA::String_var aMeshName = aMeshNames[aMeshId];
1139 VISU::Result::EntityNames_var aParts = aServant->GetPartNames(aMeshName);
1140 if (aParts->length() > 0) {
1141 for(size_t aPartId = 0; aPartId < aParts->length(); aPartId++){
1142 CORBA::String_var aPart = aParts[aPartId];
1143 VISU::Result::Resolution aResolution = aServant->GetResolution(aMeshName, aPart);
1145 switch(aResolution){
1146 case VISU::Result::FULL:
1147 aParam = "VISU.Result.FULL";
1149 case VISU::Result::MEDIUM:
1150 aParam = "VISU.Result.MEDIUM";
1152 case VISU::Result::LOW:
1153 aParam = "VISU.Result.LOW";
1155 case VISU::Result::HIDDEN:
1156 aParam = "VISU.Result.HIDDEN";
1159 theStr<<thePrefix<<aName<<".SetResolution('"<<aMeshName.in()<<"', '"<<aPart.in()<<"', "<<aParam<<")"<<endl;
1161 theStr<<thePrefix<<endl;
1167 theArgumentName = aName;
1168 DumpChildrenToPython(theStudy,
1178 theStr<<thePrefix<<"pass"<<endl<<endl;
1180 SALOMEDS::SObject_var aRefSObj;
1181 if(theSObject->FindSubObject(1,aRefSObj)){
1182 SALOMEDS::SObject_var aTargetRefSObj;
1183 if(aRefSObj->ReferencedObject(aTargetRefSObj)){
1184 CORBA::String_var aString = aTargetRefSObj->GetName();
1185 theStr<<thePrefix<<"aSObject = theStudy.FindObject('"<<aString.in()<<"')"<<endl;
1186 theStr<<thePrefix<<"if aSObject:"<<endl;
1187 thePrefix += PREFIX;
1188 theStr<<thePrefix<<"anObject = aSObject.GetObject()"<<endl;
1189 theStr<<thePrefix<<"if anObject:"<<endl;
1190 std::string aPrefix1 = thePrefix;
1191 thePrefix += PREFIX;
1194 case Result_i::eImportMed:
1195 theStr<<thePrefix<<aName<<" = aVisu.ImportMed(aSObject)"<<endl;
1197 case Result_i::eImportMedField:
1198 theStr<<thePrefix<<aName<<" = aVisu.ImportMedField(anObject)"<<endl;
1202 theStr<<thePrefix<<"if "<<aName<<":"<<endl;
1203 std::string aPrefix2 = thePrefix;
1204 thePrefix += PREFIX;
1206 theArgumentName = aName;
1207 DumpChildrenToPython(theStudy,
1217 theStr<<thePrefix<<"pass"<<endl<<endl;
1218 theStr<<aPrefix2<<"pass"<<endl<<endl;
1219 theStr<<aPrefix1<<"pass"<<endl<<endl;
1226 if(Mesh_i* aServant = dynamic_cast<Mesh_i*>(GetServant(anObj).in())){
1227 VISU::Entity anEntity = aServant->GetEntity();
1228 const std::string& aSubMeshName = aServant->GetSubMeshName();
1233 aParam = "VISU.NODE";
1236 aParam = "VISU.EDGE";
1239 aParam = "VISU.FACE";
1242 aParam = "VISU.CELL";
1246 if(aSubMeshName == "")
1247 theStr<<thePrefix<<aName<<" = aVisu.MeshOnEntity("<<theArgumentName<<
1248 ", '"<<aServant->GetCMeshName()<<"'"<<
1252 theStr<<thePrefix<<aName<<" = aVisu.FamilyMeshOnEntity("<<theArgumentName<<
1253 ", '"<<aServant->GetCMeshName()<<"'"<<
1255 ", '"<<aSubMeshName<<"'"<<
1258 theStr<<thePrefix<<aName<<" = aVisu.GroupMesh("<<theArgumentName<<
1259 ", '"<<aServant->GetCMeshName()<<"'"<<
1260 ", '"<<aSubMeshName<<"'"<<
1263 theStr<<thePrefix<<"if "<<aName<<":"<<endl;
1264 thePrefix += PREFIX;
1266 // Add to Name->Object map
1267 theStr<<thePrefix<<"aName2ObjectMap['"<<aName<<"'] = "<<aName<<endl;
1269 // Set name (as this object could be renamed by user)
1270 theStr<<thePrefix<<"visu.SetName("<<aName<<", '"<<aNameInStudy.in()<<"')"<<endl;
1272 // Set parameters common for all Prs3d objects (offset values)
1273 Prs3dToPython(aServant,theStr,aName,thePrefix);
1275 // Set presentation parameters
1276 SALOMEDS::Color aColor;
1277 aColor = aServant->GetCellColor();
1278 theStr<<thePrefix<<aName<<".SetCellColor(SALOMEDS.Color("<<
1279 aColor.R<<", "<<aColor.G<<", "<<aColor.B<<"))"<<endl;
1281 aColor = aServant->GetNodeColor();
1282 theStr<<thePrefix<<aName<<".SetNodeColor(SALOMEDS.Color("<<
1283 aColor.R<<", "<<aColor.G<<", "<<aColor.B<<"))"<<endl;
1285 aColor = aServant->GetLinkColor();
1286 theStr<<thePrefix<<aName<<".SetLinkColor(SALOMEDS.Color("<<
1287 aColor.R<<", "<<aColor.G<<", "<<aColor.B<<"))"<<endl;
1290 switch(aServant->GetPresentationType()){
1292 aParam = "VISU.POINT";
1295 aParam = "VISU.WIREFRAME";
1298 aParam = "VISU.SHADED";
1301 aParam = "VISU.INSIDEFRAME";
1304 aParam = "VISU.SURFACEFRAME";
1307 aParam = "VISU.SHRINK";
1310 theStr<<thePrefix<<aName<<".SetPresentationType("<<aParam<<")"<<endl;
1311 theStr<<thePrefix<<aName<<".SetShrink("<<(aServant->IsShrank()? "True" : "False")<<")"<<endl;
1312 theStr<<thePrefix<<endl;
1314 std::string aQuad2DPresent;
1315 switch(aServant->GetQuadratic2DPresentationType()){
1317 aQuad2DPresent = "VISU.LINES";
1320 aQuad2DPresent = "VISU.ARCS";
1324 theStr<<thePrefix<<aName<<".SetQuadratic2DPresentationType("<<aQuad2DPresent<<")"<<endl;
1326 DumpChildrenToPython(theStudy,
1336 theStr<<thePrefix<<"pass"<<endl<<endl;
1340 case VISU::TSCALARMAP:
1341 if(ScalarMap_i* aServant = dynamic_cast<ScalarMap_i*>(GetServant(anObj).in())){
1342 TCreateFromResult aPrsFactory(theSObject, aServant, aName, "ScalarMapOnField", theArgumentName);
1343 thePrefix = ScalarMapToPython(theSObject, aServant, theStr,aName, aPrsFactory, thePrefix);
1344 theStr<<thePrefix<<"pass"<<endl<<endl;
1347 case VISU::TDEFORMEDSHAPE:
1348 if(DeformedShape_i* aServant = dynamic_cast<DeformedShape_i*>(GetServant(anObj).in())){
1349 TCreateFromResult aPrsFactory(theSObject, aServant, aName, "DeformedShapeOnField", theArgumentName);
1350 thePrefix = DeformedShapeToPython(theSObject, aServant, theStr, aName, aPrsFactory, thePrefix);
1351 theStr<<thePrefix<<"pass"<<endl<<endl;
1354 case VISU::TSTREAMLINES:
1355 if(StreamLines_i* aServant = dynamic_cast<StreamLines_i*>(GetServant(anObj).in())){
1356 TCreateFromResult aPrsFactory(theSObject, aServant, aName, "StreamLinesOnField", theArgumentName);
1357 thePrefix = StreamLinesToPython(theSObject, aServant, theStr, theEntry2NameMap, aName, aPrsFactory, thePrefix);
1358 theStr<<thePrefix<<"pass"<<endl<<endl;
1361 case VISU::TSCALARMAPONDEFORMEDSHAPE:
1362 case VISU::TDEFORMEDSHAPEANDSCALARMAP:
1363 if(DeformedShapeAndScalarMap_i* aServant = dynamic_cast<DeformedShapeAndScalarMap_i*>(GetServant(anObj).in())){
1364 TCreateFromResult aPrsFactory(theSObject, aServant, aName, "DeformedShapeAndScalarMapOnField", theArgumentName);
1365 thePrefix = DeformedShapeAndScalarMapToPython(theSObject, aServant, theStr, aName, aPrsFactory, thePrefix);
1366 theStr<<thePrefix<<"pass"<<endl<<endl;
1369 case VISU::TVECTORS:
1370 if(Vectors_i* aServant = dynamic_cast<Vectors_i*>(GetServant(anObj).in())){
1371 TCreateFromResult aPrsFactory(theSObject, aServant, aName, "VectorsOnField", theArgumentName);
1372 thePrefix = VectorsToPython(theSObject, aServant, theStr, aName, aPrsFactory, thePrefix);
1373 theStr<<thePrefix<<"pass"<<endl<<endl;
1376 case VISU::TISOSURFACES:
1377 if(IsoSurfaces_i* aServant = dynamic_cast<IsoSurfaces_i*>(GetServant(anObj).in())){
1378 TCreateFromResult aPrsFactory(theSObject, aServant, aName, "IsoSurfacesOnField", theArgumentName);
1379 thePrefix = IsoSurfacesToPython(theSObject, aServant, theStr, aName, aPrsFactory, thePrefix);
1380 theStr<<thePrefix<<"pass"<<endl<<endl;
1383 case VISU::TCUTPLANES:
1384 if(CutPlanes_i* aServant = dynamic_cast<CutPlanes_i*>(GetServant(anObj).in())){
1385 TCreateFromResult aPrsFactory(theSObject, aServant, aName, "CutPlanesOnField", theArgumentName);
1386 thePrefix = CutPlanesToPython(theSObject, aServant, theStr, aName, aPrsFactory, thePrefix);
1387 theStr<<thePrefix<<"pass"<<endl<<endl;
1390 case VISU::TCUTLINES:
1391 if(CutLines_i* aServant = dynamic_cast<CutLines_i*>(GetServant(anObj).in())){
1392 TCreateFromResult aPrsFactory(theSObject, aServant, aName, "CutLinesOnField", theArgumentName);
1393 thePrefix = CutLinesToPython(theSObject, aServant, theStr, aName, aPrsFactory, thePrefix);
1395 theArgumentName = aName;
1396 DumpChildrenToPython(theStudy,
1406 theStr<<thePrefix<<"pass"<<endl<<endl;
1409 case VISU::TCUTSEGMENT:
1410 if(CutSegment_i* aServant = dynamic_cast<CutSegment_i*>(GetServant(anObj).in())){
1411 TCreateFromResult aPrsFactory(theSObject, aServant, aName, "CutSegmentOnField", theArgumentName);
1412 thePrefix = CutSegmentToPython(theSObject, aServant, theStr, aName, aPrsFactory, thePrefix);
1414 theArgumentName = aName;
1415 DumpChildrenToPython(theStudy,
1425 theStr<<thePrefix<<"pass"<<endl<<endl;
1429 if (Plot3D_i* aServant = dynamic_cast<Plot3D_i*>(GetServant(anObj).in())) {
1430 TCreateFromResult aPrsFactory(theSObject, aServant, aName, "Plot3DOnField", theArgumentName);
1431 thePrefix = Plot3DToPython(theSObject, aServant, theStr, aName, aPrsFactory, thePrefix);
1432 theStr<<thePrefix<<"pass"<<endl<<endl;
1435 case VISU::TPOINTMAP3D:
1436 if (PointMap3d_i* aServant = dynamic_cast<PointMap3d_i*>(GetServant(anObj).in())) {
1437 CORBA::Short aTag = theSObject->Tag();
1438 theStr<<thePrefix<<"anIsFound, aSObject = "<<theArgumentName<<".FindSubObject("<<aTag<<")"<<endl;
1439 theStr<<thePrefix<<"if anIsFound:"<<endl;
1440 thePrefix += PREFIX;
1442 theStr<<thePrefix<<"anID = aSObject.GetID()"<<endl;
1443 theStr<<thePrefix<<aName<<" = aVisu.CreateTable(anID)"<<endl;
1445 // Set name (as this object could be renamed by user)
1446 theStr<<thePrefix<<aName<<".SetTitle('"<<aNameInStudy.in()<<"') # 3"<<endl;
1448 // Set PointMap3D Properties
1450 theStr<<thePrefix<<aName<<".SetScaleFactor("<<aServant->GetScaleFactor()<<")"<<endl;
1451 theStr<<thePrefix<<aName<<".SetContourPrs("<<aServant->GetIsContourPrs()<<")"<<endl;
1452 theStr<<thePrefix<<aName<<".SetNbOfContours("<<aServant->GetNbOfContours()<<")"<<endl;
1455 switch(aServant->GetScaling()){
1457 aParam = "VISU.LINEAR";
1460 aParam = "VISU.LOGARITHMIC";
1463 theStr<<thePrefix<<aName<<".SetScaling("<<aParam<<")"<<endl;
1465 theStr<<thePrefix<<aName<<".SetNbColors("<<aServant->GetNbColors()<<")"<<endl;
1466 theStr<<thePrefix<<aName<<".SetLabels("<<aServant->GetLabels()<<")"<<endl;
1468 switch(aServant->GetBarOrientation()){
1469 case ColoredPrs3dBase::HORIZONTAL:
1470 aParam = "VISU.ColoredPrs3d.HORIZONTAL";
1472 case ColoredPrs3dBase::VERTICAL:
1473 aParam = "VISU.ColoredPrs3d.VERTICAL";
1476 theStr<<thePrefix<<aName<<".SetBarOrientation("<<aParam<<")"<<endl;
1478 if(aServant->IsRangeFixed())
1479 theStr<<thePrefix<<aName<<".SetRange("<<aServant->GetMin()<<", "<<aServant->GetMax()<<")"<<endl;
1481 theStr<<thePrefix<<aName<<".SetSourceRange()"<<endl;
1483 theStr<<thePrefix<<aName<<".SetPosition("<<aServant->GetPosX()<<", "<<aServant->GetPosY()<<")"<<endl;
1484 theStr<<thePrefix<<aName<<".SetSize("<<aServant->GetWidth()<<", "<<aServant->GetHeight()<<")"<<endl;
1487 aServant->GetOffset(dx, dy, dz);
1488 theStr<<thePrefix<<aName<<".SetOffset("<<dx<<", "<<dy<<", "<<dz<<")"<<endl;
1491 theStr<<thePrefix<<endl;
1493 theArgumentName = aName;
1494 DumpChildrenToPython(theStudy,
1504 theStr<<thePrefix<<"pass"<<endl<<endl;
1507 case VISU::TGAUSSPOINTS:
1508 if(GaussPoints_i* aServant = dynamic_cast<GaussPoints_i*>(GetServant(anObj).in())){
1509 TCreateFromResult aPrsFactory(theSObject, aServant, aName, "GaussPointsOnField", theArgumentName);
1510 thePrefix = GaussPointsToPython(theSObject, aServant, theStr, aName, aPrsFactory, thePrefix);
1511 theStr<<thePrefix<<"pass"<<endl<<endl;
1515 if(Curve_i* aServant = dynamic_cast<Curve_i*>(GetServant(anObj).in()))
1517 bool withZ = aServant->GetZRow()>0;
1519 theStr << thePrefix << "aName2ObjectMap['" << aName << "'] = visu.CreateCurve";
1523 theArgumentName<< // table
1524 ", "<<aServant->GetHRow()<< // H row
1525 ", "<<aServant->GetVRow(); // V row
1527 theStr << ", " << aServant->GetZRow(); // Z row
1529 theStr << ", '"<<aServant->GetTitle()<<"'"; // title
1530 SALOMEDS::Color aColor = aServant->GetColor();
1531 theStr << ",SALOMEDS.Color("<<
1532 aColor.R<<", "<<aColor.G<<", "<<aColor.B<<")"; // color
1535 switch(aServant->GetMarker()){
1536 case Curve::NONE: aParam = "VISU.Curve.NONE"; break;
1537 case Curve::CIRCLE: aParam = "VISU.Curve.CIRCLE"; break;
1538 case Curve::RECTANGLE: aParam = "VISU.Curve.RECTANGLE"; break;
1539 case Curve::DIAMOND: aParam = "VISU.Curve.DIAMOND"; break;
1540 case Curve::DTRIANGLE: aParam = "VISU.Curve.DTRIANGLE"; break;
1541 case Curve::UTRIANGLE: aParam = "VISU.Curve.UTRIANGLE"; break;
1542 case Curve::LTRIANGLE: aParam = "VISU.Curve.LTRIANGLE"; break;
1543 case Curve::RTRIANGLE: aParam = "VISU.Curve.RTRIANGLE"; break;
1544 case Curve::CROSS: aParam = "VISU.Curve.CROSS"; break;
1545 case Curve::XCROSS: aParam = "VISU.Curve.XCROSS"; break;
1547 theStr<<", "<<aParam; // marker
1549 switch(aServant->GetLine()){
1550 case Curve::VOIDLINE: aParam = "VISU.Curve.VOIDLINE"; break;
1551 case Curve::SOLIDLINE: aParam = "VISU.Curve.SOLIDLINE"; break;
1552 case Curve::DASHLINE: aParam = "VISU.Curve.DASHLINE"; break;
1553 case Curve::DOTLINE: aParam = "VISU.Curve.DOTLINE"; break;
1554 case Curve::DASHDOTLINE: aParam = "VISU.Curve.DASHDOTLINE"; break;
1555 case Curve::DASHDOTDOTLINE: aParam = "VISU.Curve.DASHDOTDOTLINE"; break;
1557 theStr<<", "<<aParam<<", "<<aServant->GetLineWidth()<<")"<<endl; // line type,width
1561 if(dynamic_cast<Table_i*>(GetServant(anObj).in())){
1562 SALOMEDS::GenericAttribute_var anAttr;
1563 if(theSObject->FindAttribute(anAttr,"AttributeString")){
1564 using namespace SALOMEDS;
1565 AttributeString_var aComment = AttributeString::_narrow(anAttr);
1566 CORBA::String_var aValue = aComment->Value();
1567 Storable::TRestoringMap aMap;
1568 Storable::StringToMap(aValue.in(),aMap);
1570 QString aSourceId = VISU::Storable::FindValue(aMap,"mySourceId",&anIsExist);
1572 if( aSourceId == "CutLines" ){
1573 theStr<<thePrefix<<"if aName2ObjectMap.has_key('"<<theArgumentName<<"'):"<<endl;
1574 thePrefix += PREFIX;
1576 theStr<<thePrefix<<"anObject = aName2ObjectMap['"<<theArgumentName<<"']"<<endl;
1577 theStr<<thePrefix<<"anIOR = anObject.GetID()"<<endl;
1578 theStr<<thePrefix<<"aSObject = theStudy.FindObjectIOR(anIOR)"<<endl;
1579 theStr<<thePrefix<<"if aSObject:"<<endl;
1580 std::string aPrefix = thePrefix;
1581 thePrefix += PREFIX;
1583 theStr<<thePrefix<<"anID = aSObject.GetID()"<<endl;
1584 theStr<<thePrefix<<aName<<" = aVisu.CreateTable(anID)"<<endl;
1586 // Set name (as this object could be renamed by user)
1587 theStr<<thePrefix<<aName<<".SetTitle('"<<aNameInStudy.in()<<"') # 2"<<endl;
1589 theStr<<thePrefix<<endl;
1591 theArgumentName = aName;
1592 DumpChildrenToPython(theStudy,
1602 theStr<<thePrefix<<"pass"<<endl<<endl;
1603 theStr<<aPrefix<<"pass"<<endl<<endl;
1604 }else if( aSourceId == "TableFile" ){
1605 CORBA::Short aTag = theSObject->Tag();
1606 theStr<<thePrefix<<"anIsFound, aSObject = "<<theArgumentName<<".FindSubObject("<<aTag<<")"<<endl;
1607 theStr<<thePrefix<<"if anIsFound:"<<endl;
1608 thePrefix += PREFIX;
1610 theStr<<thePrefix<<"anID = aSObject.GetID()"<<endl;
1611 theStr<<thePrefix<<aName<<" = aVisu.CreateTable(anID)"<<endl;
1613 // Set name (as this object could be renamed by user)
1614 theStr<<thePrefix<<aName<<".SetTitle('"<<aNameInStudy.in()<<"') # 3"<<endl;
1616 theStr<<thePrefix<<endl;
1618 theArgumentName = aName;
1619 DumpChildrenToPython(theStudy,
1629 theStr<<thePrefix<<"pass"<<endl<<endl;
1630 }else if( aSourceId == "TableAttr" ){
1631 theArgumentName = aName;
1632 DumpTableAttrToPython(theStudy,
1648 } else { /*if(!CORBA::is_nil(anObj))*/
1649 SALOMEDS::GenericAttribute_var anAttr;
1650 if (theSObject->FindAttribute(anAttr,"AttributeString")) {
1651 SALOMEDS::AttributeString_var aComment =
1652 SALOMEDS::AttributeString::_narrow(anAttr);
1653 CORBA::String_var aValue = aComment->Value();
1654 Storable::TRestoringMap aMap;
1655 Storable::StringToMap(aValue.in(),aMap);
1657 QString aTypeName = VISU::Storable::FindValue(aMap,"myComment",&anIsExist);
1659 if (aTypeName == "ImportTables") {
1660 QString aFileName = VISU::Storable::FindValue(aMap,"myFileName",&anIsExist);
1662 std::string aName = GenerateName(theSObject,theName2EntryMap,theEntry2NameMap);
1663 theStr<<thePrefix<<aName<<" = aVisu.ImportTables('"<<aFileName.toLatin1().data()<<"')"<<endl;
1664 theStr<<thePrefix<<"if "<<aName<<":"<<endl;
1665 thePrefix += PREFIX;
1667 theArgumentName = aName;
1668 DumpChildrenToPython(theStudy,
1678 theStr<<thePrefix<<"pass"<<endl<<endl;
1681 } else if (aTypeName == "VIEW3D") {
1682 std::string aName = GetName(theSObject);
1683 theStr<<thePrefix<<aName<<" = aBuilder.NewObject(aSComponent)"<<endl;
1685 theStr<<thePrefix<<"if "<<aName<<":"<<endl;
1686 thePrefix += PREFIX;
1688 theStr<<thePrefix<<"anAttr = aBuilder.FindOrCreateAttribute("<<aName<<",'AttributeName')"<<endl;
1689 theStr<<thePrefix<<"anAttr.SetValue('"<<aName<<"')"<<endl;
1691 theStr<<thePrefix<<"anAttr = aBuilder.FindOrCreateAttribute("<<aName<<",'AttributeString')"<<endl;
1692 theStr<<thePrefix<<"anAttr.SetValue('"<<aValue.in()<<"')"<<endl;
1694 theStr<<thePrefix<<"pass"<<endl<<endl;
1696 } else if (aTypeName == "ENTITY" || aTypeName == "FAMILY" || aTypeName == "GROUP") {
1697 // Set name (as this object could be renamed by user)
1698 string aMeshName = VISU::Storable::FindValue(aMap,"myMeshName").toLatin1().data();
1699 string aSubMeshName = VISU::Storable::FindValue(aMap,"myName").toLatin1().data();
1700 string anEntityTypeKey = "myEntityId";
1701 if (aTypeName == "ENTITY") anEntityTypeKey = "myId";
1702 int anEntity = VISU::Storable::FindValue(aMap,anEntityTypeKey,"0").toInt();
1703 std::string anEntityType;
1704 switch ((TEntity)anEntity) {
1705 case NODE_ENTITY: anEntityType = "VISU.NODE"; break;
1706 case EDGE_ENTITY: anEntityType = "VISU.EDGE"; break;
1707 case FACE_ENTITY: anEntityType = "VISU.FACE"; break;
1708 case CELL_ENTITY: anEntityType = "VISU.CELL"; break;
1711 if (aTypeName == "ENTITY" ) {
1712 theStr<<thePrefix<<"aVisu.RenameEntityInStudy("<<theArgumentName<<", '"<<aMeshName
1713 <<"', "<<anEntityType<<", '"<<aNameInStudy.in()<<"')"<<endl;
1715 else if (aTypeName == "FAMILY") {
1716 if (aSubMeshName != aNameInStudy.in()) {
1717 theStr<<thePrefix<<"aVisu.RenameFamilyInStudy("<<theArgumentName<<", '"<<aMeshName
1718 <<"', "<<anEntityType<<", '"<<aSubMeshName<<"', '"<<aNameInStudy.in()<<"')"<<endl;
1722 if (aSubMeshName != aNameInStudy.in()) {
1723 theStr<<thePrefix<<"aVisu.RenameGroupInStudy("<<theArgumentName<<", '"<<aMeshName
1724 <<"', '"<<aSubMeshName<<"', '"<<aNameInStudy.in()<<"')"<<endl;
1730 DumpTableAttrToPython(theStudy,
1742 DumpChildrenToPython(theStudy,
1754 //---------------------------------------------------------------------------
1756 DumpCurveToPython(SALOMEDS::Study_ptr theStudy,
1757 CORBA::Boolean theIsPublished,
1758 CORBA::Boolean& theIsValidScript,
1759 SALOMEDS::SObject_ptr theSObject,
1760 std::ostream& theStr,
1761 TName2EntryMap& theName2EntryMap,
1762 TEntry2NameMap& theEntry2NameMap,
1763 std::string theArgumentName,
1764 std::string thePrefix)
1766 SALOMEDS::SObject_var aTargetRefSObj;
1767 if(theSObject->ReferencedObject(aTargetRefSObj)){
1768 CORBA::Object_var anObj = SObjectToObject(aTargetRefSObj);
1769 if(CORBA::is_nil(anObj))
1772 VISU::Base_var aBase = VISU::Base::_narrow(anObj);
1773 if(CORBA::is_nil(aBase))
1776 if(aBase->GetType() == VISU::TCURVE){
1777 CORBA::String_var anID = aTargetRefSObj->GetID();
1778 std::string anArg = theEntry2NameMap[anID.in()];
1779 theStr<<thePrefix<<"if aName2ObjectMap.has_key('"<<anArg<<"'):"<<endl;
1780 thePrefix += PREFIX;
1781 theStr<<thePrefix<<"anObject = aName2ObjectMap['"<<anArg<<"']"<<endl;
1782 theStr<<thePrefix<<"if anObject: " <<theArgumentName<<".AddCurve(anObject)"<<endl;
1783 theStr<<thePrefix<<"pass"<<endl<<endl;
1789 //---------------------------------------------------------------------------
1791 DumpContainersToPython(SALOMEDS::Study_ptr theStudy,
1792 CORBA::Boolean theIsPublished,
1793 CORBA::Boolean& theIsValidScript,
1794 SALOMEDS::SObject_ptr theSObject,
1795 std::ostream& theStr,
1796 TName2EntryMap& theName2EntryMap,
1797 TEntry2NameMap& theEntry2NameMap,
1798 std::string theArgumentName,
1799 std::string thePrefix)
1801 SALOMEDS::ChildIterator_var aChildItet = theStudy->NewChildIterator(theSObject);
1802 for(aChildItet->InitEx(false); aChildItet->More(); aChildItet->Next()){
1803 SALOMEDS::SObject_var aSObject = aChildItet->Value();
1804 CORBA::Object_var anObj = SObjectToObject(aSObject);
1805 if(CORBA::is_nil(anObj))
1808 VISU::Base_var aBase = VISU::Base::_narrow(anObj);
1809 if(CORBA::is_nil(aBase))
1812 if(aBase->GetType() == VISU::TCONTAINER){
1813 theStr<<thePrefix<<endl;
1814 std::string aName = GenerateName(aSObject,theName2EntryMap,theEntry2NameMap);
1815 theStr<<thePrefix<<aName<<" = aVisu.CreateContainer()"<<endl;
1816 theStr<<thePrefix<<"if "<<aName<<":"<<endl;
1817 std::string aPrefix = thePrefix + PREFIX;
1818 theArgumentName = aName;
1820 // Set name (as this object could be renamed by user)
1821 CORBA::String_var aNameInStudy = aSObject->GetName();
1822 theStr<<aPrefix<<"visu.SetName("<<aName<<", '"<<aNameInStudy.in()<<"')"<<endl;
1824 SALOMEDS::ChildIterator_var aCurveIter = theStudy->NewChildIterator(aSObject);
1825 for(aCurveIter->InitEx(false); aCurveIter->More(); aCurveIter->Next()){
1826 SALOMEDS::SObject_var aRefSObj = aCurveIter->Value();
1827 DumpCurveToPython(theStudy,theIsPublished,theIsValidScript,aRefSObj,theStr,theName2EntryMap,theEntry2NameMap,theArgumentName,aPrefix);
1830 theStr<<aPrefix<<"pass"<<endl<<endl;
1836 //---------------------------------------------------------------------------
1838 DumpPrs3dCacheToPython(SALOMEDS::Study_ptr theStudy,
1839 CORBA::Boolean theIsPublished,
1840 CORBA::Boolean& theIsValidScript,
1841 SALOMEDS::SObject_ptr theSObject,
1842 std::ostream& theStr,
1843 TName2EntryMap& theName2EntryMap,
1844 TEntry2NameMap& theEntry2NameMap,
1845 std::string theArgumentName,
1846 std::string thePrefix)
1849 SALOMEDS::ChildIterator_var anIter = theStudy->NewChildIterator(theSObject);
1850 for(anIter->InitEx(false); anIter->More(); anIter->Next()){
1851 SALOMEDS::SObject_var aSObject = anIter->Value();
1852 CORBA::Object_var anObj = SObjectToObject(aSObject);
1853 if(CORBA::is_nil(anObj))
1856 VISU::Base_var aBase = VISU::Base::_narrow(anObj);
1857 if(CORBA::is_nil(aBase))
1860 if(aBase->GetType() == VISU::TCOLOREDPRS3DCACHE){
1861 ColoredPrs3dCache_i* aCache = dynamic_cast<ColoredPrs3dCache_i*>(GetServant(aBase).in());
1862 theStr<<thePrefix<<"aCache = aVisu.GetColoredPrs3dCache(aVisu.GetCurrentStudy())"<<endl;
1863 theStr<<thePrefix<<"if aCache != None:"<<endl;
1865 std::string aPrefix = thePrefix + PREFIX;
1866 std::string anArgument;
1867 VISU::ColoredPrs3dCache::MemoryMode aMode = aCache->GetMemoryMode();
1869 case VISU::ColoredPrs3dCache::MINIMAL : anArgument = "VISU.ColoredPrs3dCache.MINIMAL"; break;
1870 case VISU::ColoredPrs3dCache::LIMITED : anArgument = "VISU.ColoredPrs3dCache.LIMITED"; break;
1872 theStr<<aPrefix<<"aCache.SetMemoryMode("<<anArgument<<")"<<endl;
1874 if(aMode == VISU::ColoredPrs3dCache::LIMITED)
1875 theStr<<aPrefix<<"aCache.SetLimitedMemory("<<aCache->GetLimitedMemory()<<") # (Mb)"<<endl;
1877 SALOMEDS::ChildIterator_var aChildIter = theStudy->NewChildIterator(aSObject);
1878 for(aChildIter->InitEx(false); aChildIter->More(); aChildIter->Next()){
1879 SALOMEDS::SObject_var aSObject = aChildIter->Value();
1880 CORBA::Object_var anObject = SObjectToObject(aSObject);
1881 if (CORBA::is_nil(anObject))
1884 ColoredPrs3dHolder_i* aServant = dynamic_cast<ColoredPrs3dHolder_i*>(GetServant(anObject).in());
1888 ColoredPrs3d_i* aDevice = aServant->GetPrs3dDevice();
1892 Result_i* aResult = aDevice->GetCResult();
1893 std::string aResultEntry = aResult->GetEntry();
1894 std::string aResultName = theEntry2NameMap[aResultEntry];
1896 ColoredPrs3dHolder::BasicInput_var anInput = aServant->GetBasicInput();
1897 std::string anEntity;
1898 switch(anInput->myEntity){
1899 case VISU::NODE : anEntity = "VISU.NODE"; break;
1900 case VISU::EDGE : anEntity = "VISU.EDGE"; break;
1901 case VISU::FACE : anEntity = "VISU.FACE"; break;
1902 case VISU::CELL : anEntity = "VISU.CELL"; break;
1906 theStr<<aPrefix<<"anInput = VISU.ColoredPrs3dHolder.BasicInput("<<
1907 aResultName<<", '"<<
1908 anInput->myMeshName<<"', "<<
1910 anInput->myFieldName<<"', "<<
1911 anInput->myTimeStampNumber<<")"<<
1914 std::string aComment = aDevice->GetComment();
1915 theStr<<aPrefix<<"aHolder = aCache.CreateHolder(VISU.T"<<aComment<<", anInput)"<<endl;
1916 theStr<<aPrefix<<"if aHolder != None:"<<endl;
1918 std::string aPrefix2 = aPrefix + PREFIX;
1919 CORBA::String_var aNameInStudy = aSObject->GetName();
1920 theStr<<aPrefix2<<"visu.SetName(aHolder, '"<<aNameInStudy.in()<<"')"<<endl;
1921 theStr<<aPrefix2<<"aDevice = aHolder.GetDevice()"<<endl;
1922 theStr<<aPrefix2<<"if aDevice != None:"<<endl;
1924 std::string aPrefix3 = aPrefix2 + PREFIX;
1925 TColoredPrs3dFactory aPrsFactory;
1926 switch(aDevice->GetType()){
1927 case VISU::TSCALARMAP:
1928 if(ScalarMap_i* aServant = dynamic_cast<ScalarMap_i*>(aDevice)){
1929 ScalarMapToPython(aSObject, aServant, theStr, "aDevice", aPrsFactory, aPrefix3);
1932 case VISU::TDEFORMEDSHAPE:
1933 if(DeformedShape_i* aServant = dynamic_cast<DeformedShape_i*>(aDevice)){
1934 DeformedShapeToPython(aSObject, aServant, theStr, "aDevice", aPrsFactory, aPrefix3);
1937 case VISU::TSTREAMLINES:
1938 if(StreamLines_i* aServant = dynamic_cast<StreamLines_i*>(aDevice)){
1939 StreamLinesToPython(aSObject, aServant, theStr, theEntry2NameMap, "aDevice", aPrsFactory, aPrefix3);
1942 case VISU::TSCALARMAPONDEFORMEDSHAPE:
1943 case VISU::TDEFORMEDSHAPEANDSCALARMAP:
1944 if(DeformedShapeAndScalarMap_i* aServant = dynamic_cast<DeformedShapeAndScalarMap_i*>(aDevice)){
1945 DeformedShapeAndScalarMapToPython(aSObject, aServant, theStr, "aDevice", aPrsFactory, aPrefix3);
1948 case VISU::TVECTORS:
1949 if(Vectors_i* aServant = dynamic_cast<Vectors_i*>(aDevice)){
1950 VectorsToPython(aSObject, aServant, theStr, "aDevice", aPrsFactory, aPrefix3);
1953 case VISU::TISOSURFACES:
1954 if(IsoSurfaces_i* aServant = dynamic_cast<IsoSurfaces_i*>(aDevice)){
1955 IsoSurfacesToPython(aSObject, aServant, theStr, "aDevice", aPrsFactory, aPrefix3);
1958 case VISU::TCUTPLANES:
1959 if(CutPlanes_i* aServant = dynamic_cast<CutPlanes_i*>(aDevice)){
1960 CutPlanesToPython(aSObject, aServant, theStr, "aDevice", aPrsFactory, aPrefix3);
1963 case VISU::TCUTLINES:
1964 if(CutLines_i* aServant = dynamic_cast<CutLines_i*>(aDevice)){
1965 CutLinesToPython(aSObject, aServant, theStr, "aDevice", aPrsFactory, aPrefix3);
1968 case VISU::TCUTSEGMENT:
1969 if(CutSegment_i* aServant = dynamic_cast<CutSegment_i*>(aDevice)){
1970 CutSegmentToPython(aSObject, aServant, theStr, "aDevice", aPrsFactory, aPrefix3);
1974 if(Plot3D_i* aServant = dynamic_cast<Plot3D_i*>(aDevice)){
1975 Plot3DToPython(aSObject, aServant, theStr, "aDevice", aPrsFactory, aPrefix3);
1978 case VISU::TGAUSSPOINTS:
1979 if(GaussPoints_i* aServant = dynamic_cast<GaussPoints_i*>(aDevice)){
1980 GaussPointsToPython(aSObject, aServant, theStr, "aDevice", aPrsFactory, aPrefix3);
1984 theStr<<aPrefix3<<"pass"<<endl;
1986 theStr<<aPrefix2<<"pass"<<endl<<endl;
1989 theStr<<aPrefix<<"pass"<<endl;
1996 //---------------------------------------------------------------------------
1998 DumpAnimationsToPython(SALOMEDS::Study_ptr theStudy,
1999 CORBA::Boolean theIsPublished,
2000 CORBA::Boolean& theIsValidScript,
2001 SALOMEDS::SObject_ptr theSObject,
2002 std::ostream& theStr,
2003 std::string thePrefix)
2006 if(!theIsPublished) return;
2008 SALOMEDS::ChildIterator_var aChildItet = theStudy->NewChildIterator(theSObject);
2009 for(aChildItet->InitEx(false); aChildItet->More(); aChildItet->Next()){
2010 SALOMEDS::SObject_var aSObject = aChildItet->Value();
2012 SALOMEDS::GenericAttribute_var anAttr;
2013 if (!aSObject->FindAttribute(anAttr, "AttributeString")) continue;
2015 SALOMEDS::AttributeString_var aStringAttr = SALOMEDS::AttributeString::_narrow(anAttr);
2016 QString value (aStringAttr->Value());
2017 if(value.isEmpty()) continue;
2019 VISU::Storable::TRestoringMap aMap;
2020 VISU::Storable::StringToMap(value, aMap);
2023 QString aTypeName = VISU::Storable::FindValue(aMap,"myComment",&isExist);
2024 if(!isExist || aTypeName != "ANIMATION") continue;
2027 theStr<<thePrefix<<endl;
2028 QString animName = aSObject->GetName();
2029 theStr<<thePrefix<<"#Animation: "<<animName.toLatin1().data()<<endl;
2030 theStr<<thePrefix<<endl;
2031 theStr<<thePrefix<<"animSO = aBuilder.NewObject(aSComponent)"<<endl;
2032 theStr<<thePrefix<<"aBuilder.SetName(animSO, '"<<animName.toLatin1().data()<<"')"<< endl;
2033 theStr<<thePrefix<<"strAttr = aBuilder.FindOrCreateAttribute(animSO, 'AttributeString')"<< endl;
2034 theStr<<thePrefix<<"strAttr.SetValue('"<<value.toLatin1().data()<<"')"<< endl;
2038 SALOMEDS::ChildIterator_var anIter = theStudy->NewChildIterator(aSObject);
2039 for (anIter->Init(); anIter->More(); anIter->Next()) {
2040 SALOMEDS::SObject_var anObj = anIter->Value();
2043 theStr<<thePrefix<<"fieldSO = aBuilder.NewObject(animSO)"<<endl;
2044 if (anObj->FindAttribute(anAttr, "AttributeString")) {
2045 aStringAttr = SALOMEDS::AttributeString::_narrow(anAttr);
2046 theStr<<thePrefix<<"strAttr = aBuilder.FindOrCreateAttribute(fieldSO, 'AttributeString')"<< endl;
2047 theStr<<thePrefix<<"strAttr.SetValue('"<<aStringAttr->Value()<<"')"<< endl;
2050 SALOMEDS::SObject_var refObj;
2051 if(anObj->ReferencedObject(refObj)) {
2052 SALOMEDS::SObject_var father = refObj->GetFather();
2053 value = refObj->GetName();
2054 QString path(theStudy->GetObjectPath(father));
2055 //The following code requierd as a field name can contain '/' character
2056 theStr<<thePrefix<<"aBuilder.Addreference(fieldSO,getSObjectByFatherPathAndName(theStudy, '"<<path.toLatin1().data()<<"', '"<<value.toLatin1().data()<<"'))"<<endl;
2058 value = anObj->GetName();
2059 if(!value.isEmpty()) theStr<<thePrefix<<"aBuilder.SetName(fieldSO, '"<<value.toLatin1().data()<<"')"<< endl;
2062 SALOMEDS::ChildIterator_var aSubIter = theStudy->NewChildIterator(anObj);
2063 for (aSubIter->Init(); aSubIter->More(); aSubIter->Next()) {
2064 SALOMEDS::SObject_var aSubObj = aSubIter->Value();
2066 theStr<<thePrefix<<"subSO = aBuilder.NewObject(fieldSO)"<<endl;
2067 value = aSubObj->GetName();
2068 if(!value.isEmpty()) theStr<<thePrefix<<"aBuilder.SetName(subSO, '"<<value.toLatin1().data()<<"')"<< endl;
2069 if (aSubObj->FindAttribute(anAttr, "AttributeString")) {
2070 aStringAttr = SALOMEDS::AttributeString::_narrow(anAttr);
2071 theStr<<thePrefix<<"strAttr = aBuilder.FindOrCreateAttribute(subSO, 'AttributeString')"<< endl;
2072 theStr<<thePrefix<<"strAttr.SetValue('"<<aStringAttr->Value()<<"')"<< endl;
2080 theStr<<thePrefix<<endl;
2085 DumpClippingPlanesToPython(SALOMEDS::Study_ptr theStudy,
2086 CORBA::Boolean theIsPublished,
2087 CORBA::Boolean& theIsValidScript,
2088 SALOMEDS::SObject_ptr theSObject,
2089 std::ostream& theStr,
2090 std::string thePrefix,
2091 VISU_ClippingPlaneMgr& thePlaneMgr)
2094 if(!theIsPublished) return;
2096 VISU_CutPlaneFunction* aPlane;
2097 double aOrigin[3], aDir[3];
2098 for (int i = 0; i < thePlaneMgr.GetClippingPlanesNb(); i++) {
2099 aPlane = thePlaneMgr.GetClippingPlane(i);
2100 aPlane->GetOrigin(aOrigin);
2101 aPlane->GetNormal(aDir);
2103 theStr<<thePrefix<<"aVisu.CreateClippingPlane("<<
2104 aOrigin[0]<<","<<aOrigin[1]<<","<<aOrigin[2]<<","<<
2105 aDir[0]<<","<<aDir[1]<<","<<aDir[2]<<","<<
2106 aPlane->isAuto()<<",\""<<aPlane->getName()<<"\")"<<endl;
2112 //---------------------------------------------------------------------------
2115 DumpPython(CORBA::Object_ptr theStudy,
2116 CORBA::Boolean theIsPublished,
2117 CORBA::Boolean& theIsValidScript)
2119 theIsValidScript = false;
2121 SALOMEDS::Study_var aStudy = SALOMEDS::Study::_narrow(theStudy);
2122 if(CORBA::is_nil(aStudy))
2123 return new Engines::TMPFile(0);
2125 TName2EntryMap aName2EntryMap;
2126 TEntry2NameMap aEntry2NameMap;
2134 std::string aPrefix(PREFIX);
2135 aStr<<"### This file is generated by SALOME automatically by dump python functionality"
2136 " of VISU component"<<endl<<endl;
2137 aStr<<"def RebuildData(theStudy):"<<endl;
2138 aStr<<aPrefix<<"from batchmode_salome import orb, naming_service, lcc, myStudyManager"<<endl;
2139 aStr<<aPrefix<<"import SALOME_MED"<<endl;
2140 aStr<<aPrefix<<"import SALOMEDS"<<endl;
2141 aStr<<aPrefix<<"import VISU"<<endl;
2142 aStr<<aPrefix<<"import visu"<<endl;
2144 aStr<<aPrefix<<"aVisu = visu.Initialize(orb,naming_service,lcc,myStudyManager,theStudy,0)"<<endl;
2145 aStr<<aPrefix<<"aSComponent = visu.PublishComponent(theStudy)"<<endl;
2146 aStr<<aPrefix<<"aMed = lcc.FindOrLoadComponent('FactoryServer','MED')"<<endl;
2147 aStr<<aPrefix<<"aBuilder = theStudy.NewBuilder()"<<endl;
2148 aStr<<aPrefix<<"aName2ObjectMap = {}"<<endl;
2151 SALOMEDS::SComponent_var aComponent = FindOrCreateVisuComponent(aStudy);
2153 VISU::DumpClippingPlanesToPython(aStudy,
2159 myClippingPlaneMgr);
2162 VISU::DumpChildrenToPython(aStudy,
2172 VISU::DumpContainersToPython(aStudy,
2182 VISU::DumpPrs3dCacheToPython(aStudy,
2192 VISU::DumpAnimationsToPython(aStudy,
2200 //Output the script that sets up the visul parameters.
2201 if(theIsPublished) {
2202 char* script = aStudy->GetDefaultScript("Post-Pro", aPrefix.c_str());
2203 if(script && strlen(script) > 0) {
2205 CORBA::string_free(script);
2209 aStr<<aPrefix<<"pass"<<endl;
2211 if(theIsPublished) { //SRN: define function for Animation
2213 //Define a function that find a SObject by its father's path and its name
2217 aStr<<"def getSObjectByFatherPathAndName(theStudy, thePath, theName):"<<endl;
2218 aStr<<aPrefix<<"father = theStudy.FindObjectByPath(thePath)"<<endl;
2219 aStr<<aPrefix<<"itr = theStudy.NewChildIterator(father)"<<endl;
2220 aStr<<aPrefix<<"while itr.More():"<<endl;
2221 aStr<<aPrefix<<aPrefix<<"so = itr.Value()"<<endl;
2222 aStr<<aPrefix<<aPrefix<<"if so.GetName()==theName: return so"<<endl;
2223 aStr<<aPrefix<<aPrefix<<"itr.Next()"<<endl;
2224 aStr<<aPrefix<<aPrefix<<"pass"<<endl;
2225 aStr<<aPrefix<<"return None"<<endl;
2230 // theIsValidScript currently is not used by internal dump methods (DumpChildrenToPython(), etc.)
2231 // If the situation changes, then the following line should be removed, and theIsValidScript
2232 // should be set properly by those internal methods
2233 theIsValidScript = true;
2236 std::string aResult = aStr.str();
2237 //ofstream anFStream("/tmp/dump.py");
2238 //anFStream<<aResult<<endl;
2240 CORBA::ULong aSize = aResult.size() + 1;
2241 char* aBuffer = new char[aSize];
2242 strcpy(aBuffer,&aResult[0]);
2243 return new Engines::TMPFile(aSize,aSize,(CORBA::Octet*)aBuffer,1);
2246 return new Engines::TMPFile(0);