]> SALOME platform Git repositories - modules/visu.git/blob - src/VISU_SWIG/visu.py
Salome HOME
SMH: 3.0.0 preparation - merged and adopted version (POLYWORK+HEAD)
[modules/visu.git] / src / VISU_SWIG / visu.py
1 #  VISU VISU_SWIG : binding of C++ implementation and Python
2 #
3 #  Copyright (C) 2003  CEA/DEN, EDF R&D
4 #
5 #
6 #
7 #  File   : visu.py
8 #  Module : VISU
9
10 import os
11 import re
12 from time import sleep
13
14 import VISU
15 import SALOME
16 import SALOME_Session_idl
17 import SALOMEDS
18 import SALOME_MED
19 from omniORB import CORBA
20 from string import *
21 from time import sleep
22
23 myORB = None
24 myNamingService = None
25 myLifeCycleCORBA = None
26 myNamingService = None
27 myLocalStudyManager = None
28 myLocalStudy = None
29 myLocalVisu = None
30 myDelay = None
31 mySession = None
32  
33 def Initialize(theORB, theNamingService, theLifeCycleCORBA, theStudyManager, theStudy, theDelay) :
34     global myORB, myNamingService, myLifeCycleCORBA, myLocalStudyManager, myLocalStudy
35     global mySession, myLocalVisu, myDelay
36     myDelay = theDelay
37     myORB = theORB
38     myNamingService = theNamingService
39     myLifeCycleCORBA = theLifeCycleCORBA
40     myLocalStudyManager = theStudyManager
41     while mySession == None:
42         mySession = myNamingService.Resolve("/Kernel/Session")
43     mySession = mySession._narrow(SALOME.Session)
44     mySession.GetInterface()
45     myDelay = theDelay
46     sleep(myDelay)
47     myLocalVisu = myLifeCycleCORBA.FindOrLoadComponent("FactoryServer", "VISU")
48     myLocalStudy = theStudy
49     myLocalVisu.SetCurrentStudy(myLocalStudy)
50     return myLocalVisu
51
52 def PublishComponent(theStudyDocument):
53     aComponentDataType = myLocalVisu.ComponentDataType()
54     aSComponent = theStudyDocument.FindComponent(aComponentDataType)
55     if aSComponent == None:
56         aStudyBuilder = theStudyDocument.NewBuilder()
57         aStudyBuilder.NewCommand()
58         aLocked = theStudyDocument.GetProperties().IsLocked()
59         if aLocked:
60             theStudyDocument.GetProperties().SetLocked(0)
61             pass
62
63         aSComponent = aStudyBuilder.NewComponent(aComponentDataType);
64         aName = aStudyBuilder.FindOrCreateAttribute(aSComponent,"AttributeName")
65         aModuleCatalog = myNamingService.Resolve("/Kernel/ModulCatalog");
66         aComponent = aModuleCatalog.GetComponent(aComponentDataType);
67         if aComponent != None:
68             aComponentUserName = aComponent._get_componentusername()
69             aName.SetValue(aComponentUserName)
70             pass
71         
72         aPixMap = aStudyBuilder.FindOrCreateAttribute(aSComponent,"AttributePixMap")
73         aPixMap.SetPixMap("ICON_OBJBROWSER_Visu")
74         
75         aStudyBuilder.DefineComponentInstance(aSComponent,myLocalVisu);
76         if aLocked:
77             theStudyDocument.GetProperties().SetLocked(1);
78             pass
79         
80         aStudyBuilder.CommitCommand();
81         pass
82     
83     return aSComponent;
84         
85 def StrToMap(theString) :
86     aPairList = split(theString,";")
87     aMap = {}
88     iEnd = len(aPairList)
89     for i in range(iEnd) :
90         aPair = split(aPairList[i],"=")
91         aMap[aPair[0]] = aPair[1]
92     return aMap
93
94 def IntToEntity(theInt) :
95     theInt = atoi(theInt)
96     if theInt == 0 :
97         return VISU.NODE;
98     elif theInt == 1 :
99         return VISU.EDGE;
100     elif theInt == 2 :
101         return VISU.FACE;
102     else :
103         return VISU.CELL;
104         
105 def HasValue(theList, theValue) :
106     try :
107         return theList.index(theValue) + 1
108     except StandardError, e :
109         return 0
110
111 def CreateStudyForMed(theVisu, theFileName) :
112     print "CreateStudyForMed ", theFileName,
113     if os.path.isfile(theFileName) :
114         if re.search("\.med$", theFileName) is not None :
115             print "OK"
116             aStudyName = os.path.basename(theFileName)
117             aStudyName = re.sub(r'\.med', "", aStudyName)
118             aStudyName = generateName(aStudyName)
119             print "myLocalStudyManager.NewStudy -", aStudyName, "...",
120             aStudy = myLocalStudyManager.NewStudy(aStudyName)
121             if aStudy is None : raise RuntimeError, "Error"
122             else : print "OK"
123             
124             print "CreateStudyForMed - Creating a 3D viewer...",
125             theVisu.SetCurrentStudy(aStudy)
126             myViewManager = theVisu.GetViewManager()
127             if myViewManager is None : raise RuntimeError, "Error - theVisu.GetViewManager"
128             myView = myViewManager.Create3DView()
129             if myView is None : raise RuntimeError, "Error - myViewManager.Create3DView"
130             myView.Maximize()
131             print "OK"
132
133             return [aStudy, myViewManager, myView]
134     raise RuntimeError, "Error: There is no shuch file."
135
136 def getMedSObject(theStudy = myLocalStudy ):
137     if theStudy is None:
138         theStudy = myLocalStudy
139     aSO = theStudy.FindObject("Med")
140     anIsPresetn, aSObject = aSO.FindSubObject(1)
141     return aSObject
142
143 def getMedObjectFromStudy(theStudy = myLocalStudy):
144     aSObject = getMedSObject(theStudy)
145     if aSObject:
146         anAttr = aSObject.FindAttribute("AttributeIOR")[1]
147         anObj = myORB.string_to_object(anAttr.Value())
148         return  anObj._narrow(SALOME_MED.MED)
149     return None
150
151 def getFieldObjectFromStudy(number, subnumber, theStudy = myLocalStudy):
152     if theStudy is None:
153         theStudy = myLocalStudy
154     mySO = theStudy.FindObject("MEDFIELD")
155     if mySO is None:
156         raise Runtime, "getFieldObjectFromStudy mySO is None"
157     mysub = mySO.FindSubObject(number)[1]
158     if mysub:
159         mysubsub = mysub.FindSubObject(subnumber)[1]
160         if mysubsub:
161             Builder = theStudy.NewBuilder()
162             anAttr = Builder.FindOrCreateAttribute(mysubsub, "AttributeIOR")
163             obj = myORB.string_to_object(anAttr.Value())
164             myObj = obj._narrow(SALOME_MED.FIELDINT)
165             if (myObj == None):
166                 myObj = obj._narrow(SALOME_MED.FIELDDOUBLE)
167             return myObj
168     else:
169         print "ERROR: No Field Object stored in this Study"
170         return None
171
172 def SObjectToObject(theSObject) :
173      #    global myORB
174     if theSObject is None :
175         print "SObjectToObject : argument is None"
176     anObj = None                         
177     res,Attr = theSObject.FindAttribute("AttributeIOR")
178     if (res != 0) and (Attr is not None)  : 
179       anIOR  = Attr._narrow(SALOMEDS.AttributeIOR);
180       aValue = anIOR.Value();
181       if(len(aValue) != 0) :
182         anObj = myORB.string_to_object(aValue);
183       else:
184         print "SObjectToObject - IOR = ''"
185     return anObj;
186  
187 def CreatePrsForMed(theVisu, theFileName, thePrsTypeList, thePictureDir, thePictureExt) :
188 #    try:
189         global myLifeCycleCORBA
190         print "lcc.FindOrLoadComponent...",
191         aMedComp = myLifeCycleCORBA.FindOrLoadComponent("FactoryServer", "MED")
192         if aMedComp is None : print "Error"
193         else : print "OK"
194         
195         aVISUObjList = [myLocalStudy, myViewManager, myView] = CreateStudyForMed(theVisu, theFileName)
196
197         print "aMedComp.readStructFileWithFieldType...",
198         aMedComp.readStructFileWithFieldType(theFileName,myLocalStudy._get_Name())
199         aMedSObj = getMedSObject(myLocalStudy)
200         if aMedSObj is None : raise RuntimeError, "Error"
201         else : print "OK"
202         
203         print "theVisu.ImportMed...",
204         aResult = theVisu.ImportMed(aMedSObj)
205         if aResult is None : raise RuntimeError, "Error"
206         else : print "OK"
207         aVISUObjList.append(aResult)
208         aVISUObjList.extend(CreatePrsForResult(theVisu, aResult, myView, thePrsTypeList, thePictureDir, thePictureExt))
209         
210         aFolderIter = myLocalStudy.NewChildIterator(aMedSObj.GetFather());
211         while aFolderIter.More() :
212             aFolderSObj = aFolderIter.Value()
213             aFolderIter.Next()
214             anAttr = aFolderSObj.FindAttribute("AttributeName")[1]
215             anAttr = anAttr._narrow(SALOMEDS.AttributeName);
216             aFolderName = anAttr.Value()
217             print "  ", aFolderName
218             
219             if aFolderName == 'MEDMESH' :
220                 aMeshIter = myLocalStudy.NewChildIterator(aFolderSObj);
221                 while aMeshIter.More() :
222                     aMeshSObj = aMeshIter.Value()
223                     aMeshIter.Next()
224                     anAttr = aMeshSObj.FindAttribute("AttributeName")[1]
225                     anAttr = anAttr._narrow(SALOMEDS.AttributeName);
226                     aMeshName = anAttr.Value()
227                     print "    ", aMeshName
228                 
229                     aSupportIter = myLocalStudy.NewChildIterator(aMeshSObj);
230                     while aSupportIter.More() :
231                         aSupportSObj = aSupportIter.Value()
232                         aSupportIter.Next()
233                         anAttr = aSupportSObj.FindAttribute("AttributeName")[1]
234                         anAttr = anAttr._narrow(SALOMEDS.AttributeName);
235                         aSupportName = anAttr.Value()
236                         print "      ", aSupportName
237
238             if aFolderName == 'MEDFIELD' :
239                 aFieldIter = myLocalStudy.NewChildIterator(aFolderSObj);
240                 while aFieldIter.More() :
241                     aFieldSObj = aFieldIter.Value()
242                     aFieldIter.Next()
243                     anAttr = aFieldSObj.FindAttribute("AttributeName")[1]
244                     anAttr = anAttr._narrow(SALOMEDS.AttributeName);
245                     aFieldName = anAttr.Value()
246                     print "    ", aFieldName
247                 
248                     print "theVisu.ImportMed...",
249                     aResult = theVisu.ImportMed(aFieldSObj)
250                     if aResult is None : raise RuntimeError, "Error"
251                     else : print "OK"
252                     aVISUObjList.append(aResult)
253                     aVISUObjList.extend(CreatePrsForResult(theVisu, aResult, myView, thePrsTypeList, thePictureDir, thePictureExt))
254
255                     aTimeStampIter = myLocalStudy.NewChildIterator(aFieldSObj);
256                     if aTimeStampIter.More() :
257                         aTimeStampIter.Next()
258                         while aTimeStampIter.More() :
259                             aTimeStampSObj = aTimeStampIter.Value()
260                             aTimeStampIter.Next()
261                             anAttr = aTimeStampSObj.FindAttribute("AttributeName")[1]
262                             anAttr = anAttr._narrow(SALOMEDS.AttributeName);
263                             aTimeStampName = anAttr.Value()
264                             print "        ", aTimeStampName
265
266                             print "theVisu.ImportMed...",
267                             aMedField = SObjectToObject(aTimeStampSObj)
268                             aResult = theVisu.ImportMedField(aMedField)
269                             if aResult is None : raise RuntimeError, "Error"
270                             else : print "OK"
271                             aVISUObjList.append(aResult)
272                             aVISUObjList.extend(CreatePrsForResult(theVisu, aResult, myView, thePrsTypeList, thePictureDir, thePictureExt))
273                     
274         return aVISUObjList
275     
276 #    except Exception, e:
277 #        print str(e)
278         
279 def CreatePrsForFile(theVisu, theFileName, thePrsTypeList, thePictureDir, thePictureExt) :
280  #   try:
281         aVISUObjList = [myLocalStudy, myViewManager, myView] = CreateStudyForMed(theVisu, theFileName)
282
283         print "theVisu.ImportMed...",
284         aResult = theVisu.ImportFile(theFileName)
285         if aResult is None : raise RuntimeError, "Error"
286         else : print "OK"
287         
288         aVISUObjList.extend(CreatePrsForResult(theVisu, aResult, myView, thePrsTypeList, thePictureDir, thePictureExt))
289         
290         return aVISUObjList
291     
292 #    except Exception, e:
293 #        print str(e)
294                 
295 def CreatePrsForResult(theVisu, theResult, theView, thePrsTypeList, thePictureDir, thePictureExt) :
296     aVISUObjList = []
297     print "CreatePrsForResult - myLocalStudy.FindObjectIOR...",
298     myLocalStudy = theVisu.GetCurrentStudy()
299     aSObj = myLocalStudy.FindObjectIOR(theResult.GetID())
300     if aSObj is None : raise RuntimeError, "Error"
301     else : print "OK"
302     aMeshIter = myLocalStudy.NewChildIterator(aSObj);
303     while aMeshIter.More() :
304         aMeshSObj = aMeshIter.Value()
305         aMeshIter.Next()
306         anAttr = aMeshSObj.FindAttribute("AttributeName")[1]
307         if anAttr is None :
308             aMeshSObj = aMeshIter.Value()
309             aMeshIter.Next()
310             anAttr = aMeshSObj.FindAttribute("AttributeName")[1]
311         anAttr = anAttr._narrow(SALOMEDS.AttributeName);
312         aMeshName = anAttr.Value()
313         aMeshNamePic = re.sub(".","_",aMeshName)
314         print "  ", aMeshName
315         
316         aFolderIter = myLocalStudy.NewChildIterator(aMeshSObj);
317         while aFolderIter.More() :
318             aFolderSObj = aFolderIter.Value()
319             aFolderIter.Next()
320             anAttr = aFolderSObj.FindAttribute("AttributeName")[1]
321             anAttr = anAttr._narrow(SALOMEDS.AttributeName);
322             aFolderName = anAttr.Value()
323             print "    ", aFolderName
324             
325             if aFolderName == 'Families' :
326                 anEntityIter = myLocalStudy.NewChildIterator(aFolderSObj);
327                 while anEntityIter.More() :
328                     anEntitySObj = anEntityIter.Value()
329                     anEntityIter.Next()
330                     anAttr = anEntitySObj.FindAttribute("AttributeName")[1]
331                     anAttr = anAttr._narrow(SALOMEDS.AttributeName);
332                     anEntityName = anAttr.Value()
333                     
334                     anEntityId = "3"
335                     if anEntityName == 'onNodes' :
336                         anEntity = VISU.NODE
337                         anEntityId = "0"
338                     if anEntityName == 'onEdges' :
339                         anEntity = VISU.EDGE
340                         anEntityId = "1"
341                     if anEntityName == 'onFaces' :
342                         anEntity = VISU.FACE
343                         anEntityId = "2"
344                     if anEntityName == 'onCells' :
345                         anEntity = VISU.CELL
346                         anEntityId = "3"
347
348                     if HasValue(thePrsTypeList,VISU.TMESH) :
349                         print "      ", anEntityName, aMeshName,
350                         aMesh = theVisu.MeshOnEntity(theResult,aMeshName,anEntity)
351                         if aMesh is None : print "Error"
352                         else : print ",OK"
353                         theView.DisplayOnly(aMesh)
354                         theView.FitAll()
355                         aPictureName = thePictureDir + aMeshNamePic + "_" + anEntityId + "." + thePictureExt
356                         aPictureName = re.sub("\s+","_", aPictureName);
357                         theView.SavePicture(aPictureName)
358                         aVISUObjList.append(aMesh)
359                         
360                         anFamilyIter = myLocalStudy.NewChildIterator(anEntitySObj);
361                         while anFamilyIter.More() :
362                             aFamilySObj = anFamilyIter.Value()
363                             anFamilyIter.Next()
364                             anAttr = aFamilySObj.FindAttribute("AttributeName")[1]
365                             anAttr = anAttr._narrow(SALOMEDS.AttributeName);
366                             anFamilyName = anAttr.Value()
367                             if HasValue(thePrsTypeList,VISU.TMESH) :
368                                 print "        ", anFamilyName,
369                                 aMesh = theVisu.FamilyMeshOnEntity(theResult,aMeshName,anEntity,anFamilyName)
370                                 if aMesh is None : print "Error"
371                                 else : print ",OK"
372                                 theView.DisplayOnly(aMesh)
373                                 theView.FitAll()
374                                 aPictureName = thePictureDir + aMeshNamePic + "_" + anEntityId + "_" + anFamilyName + "." + thePictureExt
375                                 aPictureName = re.sub("\s+","_", aPictureName);
376                                 theView.SavePicture(aPictureName)
377                                 aVISUObjList.append(aMesh)
378                                 
379             if aFolderName == 'Groups' :
380                 aGroupIter = myLocalStudy.NewChildIterator(aFolderSObj);
381                 while aGroupIter.More() :
382                     aGroupSObj = aGroupIter.Value()
383                     aGroupIter.Next()
384                     anAttr = aGroupSObj.FindAttribute("AttributeName")[1]
385                     anAttr = anAttr._narrow(SALOMEDS.AttributeName);
386                     aGroupName = anAttr.Value()
387                     if HasValue(thePrsTypeList,VISU.TMESH) :
388                         print "      ", aGroupName,
389                         aMesh = theVisu.GroupMesh(theResult,aMeshName,aGroupName)
390                         if aMesh is None : print "Error"
391                         else : print ",OK"
392                         theView.DisplayOnly(aMesh)
393                         theView.FitAll()
394                         aPictureName = thePictureDir + aMeshNamePic + "_" + aGroupName + "." + thePictureExt
395                         aPictureName = re.sub("\s+","_", aPictureName);
396                         theView.SavePicture(aPictureName)
397                         aVISUObjList.append(aMesh)
398                         
399             if aFolderName == 'Fields' :
400                 aFieldIter = myLocalStudy.NewChildIterator(aFolderSObj);
401                 while aFieldIter.More() :
402                     aFieldSObj = aFieldIter.Value()
403                     aFieldIter.Next()
404                     anAttr = aFieldSObj.FindAttribute("AttributeName")[1]
405                     anAttr = anAttr._narrow(SALOMEDS.AttributeName);
406                     aFieldName = anAttr.Value()
407                     print "      ", aFieldName
408                     
409                     anAttr = aFieldSObj.FindAttribute("AttributeComment")[1]
410                     anAttr = anAttr._narrow(SALOMEDS.AttributeComment);
411                     aFieldComment = anAttr.Value()
412                     aMap = StrToMap(aFieldComment)
413                     
414                     aTimeStampIter = myLocalStudy.NewChildIterator(aFieldSObj);
415                     if aTimeStampIter.More() :
416                         aTimeStampIter.Next()
417                         while aTimeStampIter.More() :
418                             aTimeStampSObj = aTimeStampIter.Value()
419                             aTimeStampIter.Next()
420                             anAttr = aTimeStampSObj.FindAttribute("AttributeName")[1]
421                             anAttr = anAttr._narrow(SALOMEDS.AttributeName);
422                             aTimeStampName = anAttr.Value()
423                             print "        ", aTimeStampName
424                             
425                             anAttr = aTimeStampSObj.FindAttribute("AttributeComment")[1]
426                             anAttr = anAttr._narrow(SALOMEDS.AttributeComment);
427                             aTimeStampComment = anAttr.Value()
428                             aMap = StrToMap(aTimeStampComment)
429                             aMeshName = aMap["myMeshName"]
430                             aFieldName = aMap["myFieldName"]
431                             aTimeStampId = atoi(aMap["myTimeStampId"])
432                             anEntity = IntToEntity(aMap["myEntityId"])
433                             anEntityId = str(aMap["myEntityId"]);
434                             #print aMeshName, aFieldName, anEntity, aTimeStampId
435                             if HasValue(thePrsTypeList,VISU.TSCALARMAP) :
436                                 print "          Creating ScalarMapOnField",
437                                 aPrsObj = theVisu.ScalarMapOnField(theResult,aMeshName,anEntity,aFieldName,aTimeStampId)
438                                 if aPrsObj is None : print "Error"
439                                 else : print ",OK"
440                                 theView.DisplayOnly(aPrsObj)
441                                 theView.FitAll()
442                                 aPictureName = thePictureDir + aMeshNamePic + "_" + anEntityId + "_" + aFieldName + "_" + str(aTimeStampId) + "_TSCALARMAP." + thePictureExt
443                                 aPictureName = re.sub("\s+","_", aPictureName);
444                                 theView.SavePicture(aPictureName)
445                                 aVISUObjList.append(aPrsObj)
446                                 
447                             if HasValue(thePrsTypeList,VISU.TISOSURFACE) :
448                                 print "          Creating IsoSurfacesOnField",
449                                 aPrsObj = theVisu.IsoSurfacesOnField(theResult,aMeshName,anEntity,aFieldName,aTimeStampId)
450                                 if aPrsObj is None : print "Error"
451                                 else : print ",OK"
452                                 theView.DisplayOnly(aPrsObj)
453                                 theView.FitAll()
454                                 aPictureName = thePictureDir + aMeshNamePic + "_" + anEntityId + "_" + aFieldName + "_" + str(aTimeStampId) + "_TISOSURFACE." + thePictureExt
455                                 aPictureName = re.sub("\s+","_", aPictureName);
456                                 theView.SavePicture(aPictureName)
457                                 aVISUObjList.append(aPrsObj)
458                                 
459                             if HasValue(thePrsTypeList,VISU.TCUTPLANES) :
460                                 print "          Creating CutPlanesOnField",
461                                 aPrsObj = theVisu.CutPlanesOnField(theResult,aMeshName,anEntity,aFieldName,aTimeStampId)
462                                 if aPrsObj is None : print "Error"
463                                 else : print ",OK"
464                                 aPrsObj.SetOrientation(VISU.CutPlanes.ZX,aPrsObj.GetRotateX(),aPrsObj.GetRotateY())
465                                 theView.DisplayOnly(aPrsObj)
466                                 theView.FitAll()
467                                 aPictureName = thePictureDir + aMeshNamePic + "_" + anEntityId + "_" + aFieldName + "_" + str(aTimeStampId) + "_TCUTPLANES." + thePictureExt
468                                 aPictureName = re.sub("\s+","_", aPictureName)
469                                 theView.SavePicture(aPictureName)
470                                 aVISUObjList.append(aPrsObj)
471                                 
472                             if HasValue(thePrsTypeList,VISU.TCUTLINES) :
473                                 print "          Creating CutLinesOnField",
474                                 aPrsObj = theVisu.CutLinesOnField(theResult,aMeshName,anEntity,aFieldName,aTimeStampId)
475                                 if aPrsObj is None : print "Error"
476                                 else : print ",OK"
477                                 aPrsObj.SetOrientation(VISU.CutPlanes.XY,aPrsObj.GetRotateX(),aPrsObj.GetRotateY())
478                                 aPrsObj.SetOrientation2(VISU.CutPlanes.ZX,aPrsObj.GetRotateX2(),aPrsObj.GetRotateY2())
479                                 theView.DisplayOnly(aPrsObj)
480                                 theView.FitAll()
481                                 aPictureName = thePictureDir + aMeshNamePic + "_" + anEntityId + "_" + aFieldName + "_" + str(aTimeStampId) + "_TCUTLINES." + thePictureExt
482                                 aPictureName = re.sub("\s+","_", aPictureName)
483                                 theView.SavePicture(aPictureName)
484                                 aVISUObjList.append(aPrsObj)
485                                 
486                             aNumComponent = atoi(aMap["myNumComponent"])
487                             if aNumComponent > 1 :
488                                 if HasValue(thePrsTypeList,VISU.TDEFORMEDSHAPE) :
489                                     print "          Creating DeformedShapeOnField",
490                                     aPrsObj = theVisu.DeformedShapeOnField(theResult,aMeshName,anEntity,aFieldName,aTimeStampId)
491                                     if aPrsObj is None : print "Error"
492                                     else : print ",OK"
493                                     theView.DisplayOnly(aPrsObj)
494                                     theView.FitAll()
495                                     aPictureName = thePictureDir + aMeshNamePic + "_" + anEntityId + "_" + aFieldName + "_" + str(aTimeStampId) + "_TDEFORMEDSHAPE." + thePictureExt
496                                     aPictureName = re.sub("\s+","_", aPictureName)
497                                     theView.SavePicture(aPictureName)
498                                     aVISUObjList.append(aPrsObj)
499
500                                 if HasValue(thePrsTypeList,VISU.TVECTORS) :
501                                     print "          Creating VectorsOnField",
502                                     aPrsObj = theVisu.VectorsOnField(theResult,aMeshName,anEntity,aFieldName,aTimeStampId)
503                                     if aPrsObj is None : print "Error"
504                                     else : print ",OK"
505                                     theView.DisplayOnly(aPrsObj)
506                                     theView.FitAll()
507                                     aPictureName = thePictureDir + aMeshNamePic + "_" + anEntityId + "_" + aFieldName + "_" + str(aTimeStampId) + "_TVECTORS." + thePictureExt
508                                     aPictureName = re.sub("\s+","_", aPictureName)
509                                     theView.SavePicture(aPictureName)
510                                     aVISUObjList.append(aPrsObj)
511                                     
512                                 if HasValue(thePrsTypeList,VISU.TSTREAMLINES) :
513                                     print "          Creating StreamLinesOnField",
514                                     aPrsObj = theVisu.StreamLinesOnField(theResult,aMeshName,anEntity,aFieldName,aTimeStampId)
515                                     if aPrsObj is None : print "Error"
516                                     else : print ",OK"
517                                     theView.DisplayOnly(aPrsObj)
518                                     theView.FitAll()
519                                     aPictureName = thePictureDir + aMeshNamePic + "_" + anEntityId + "_" + aFieldName + "_" + str(aTimeStampId) + "_TSTREAMLINES." + thePictureExt
520                                     aPictureName = re.sub("\s+","_", aPictureName)
521                                     theView.SavePicture(aPictureName)
522                                     aVISUObjList.append(aPrsObj)
523                     
524     return aVISUObjList
525
526
527 def generateName(prefix = None):
528     import whrandom;
529     int = whrandom.randint(1,1000);
530     if prefix is None:
531         return "Study" + str(int)
532     else :
533         return prefix + str(int)
534     
535
536
537 # ----------------------
538 # MESH
539 # ----------------------
540 def try_mesh_parameters(theMeshPattern):
541     aResult = []
542     if theMeshPattern is None : return aResult ;
543     theMeshPattern =  theMeshPattern._narrow(VISU.Mesh)
544     if theMeshPattern is None : return aResult ;
545
546     aTYPES = [VISU.POINT, VISU.WIREFRAME, VISU.SHADED, VISU.INSIDEFRAME, VISU.SHRINK]
547     import copy; import os;
548     for ind in aTYPES:
549         aNewMesh = copy.deepcopy(theMeshPattern);
550         aNewMesh.SetPresentationType(ind)
551         aResult.append(aNewMesh)
552
553     return aResult
554
555
556 # ----------------------------    
557 # SCALAR MAP 
558 # ----------------------------    
559 ind=1  #try safe way
560 def try_scalarmap_parameters(thePattern, dump = 0):
561
562     if thePattern  is None : return None 
563
564     SCALING = [VISU.LINEAR, VISU.LOGARITHMIC]
565     import copy
566     import random
567
568     anObj = thePattern#copy.deepcopy(thePattern);
569     #ind = random.randint(1,2)
570     if ind%2 :
571             #try incorrect value deliberately (but allowed by idl description)
572             #try SetScalarMode(long)
573             mode = random.randint(-100000,100000); #incorrect value deliberately
574     else:
575             #correct value of ScalarMode
576             mode = random.randint(0, 3)
577
578     if dump : print "\tSetScalarMode(" + str(mode) +")"
579     anObj.SetScalarMode(mode)
580
581     # --- SCALING ---
582     scal = random.randint(0,1)
583     if dump : print "\tSetScaling(" + str(SCALING[scal]) +")"
584     anObj.SetScaling(SCALING[scal])
585         
586     # --- BOUNDARIES ---
587     if ind%2 :
588             alfa =  random.random()*random.randint(-100000,100000)
589             betta = random.random()*random.randint(-100000,100000)
590             aMin = alfa; aMax = betta
591     else:
592             #more correct set
593             aPMin = thePattern.GetMin()
594             aPMax = thePattern.GetMax()
595             aLen = aPMax - aPMin
596             alfa =  random.random()%0.5
597             betta = random.random()%0.5
598             aMin = alfa*aLen*random.randint(-1,1) + aPMin
599             aMax = betta*aLen*random.randint(-1,1) + aPMax
600     if dump : print "\tSetRange(" + str(aMin) + ", " + str(aMax) + ")"
601     anObj.SetRange(aMin, aMax)
602
603         # --- POSITION ---
604     if ind%2:
605             X=random.random()*random.randint(-100000,100000)
606             Y=random.random()*random.randint(-100000,100000)
607     else :
608              X=random.random()
609              Y=random.random()
610     if dump : print "SetPosition("+ str(X) + ", " + str(Y) + " )"
611     anObj.SetPosition(X, Y)
612
613         # --- SCALAR BAR SIZE ---
614     if ind%2:
615             aWidth=random.random()*random.randint(-100000,100000)
616             aHeight=random.random()*random.randint(-100000,100000)
617     else :
618              aWidth=random.random()
619              aHeight=random.random()
620     if dump : print " SCALAR BAR Width = " + str(aWidth) + " Height = ", str(aHeight)
621     anObj.SetSize(aWidth, aHeight)
622     
623     return anObj
624
625
626 def dump_scalarmap_parameters(anObj):
627     
628     print "\tGetScalarMode() = " + str(anObj.GetScalarMode()) 
629     print "\tGetScaling() = " + str(anObj.GetScaling()) 
630     print "\tGetMin() = " + str(anObj.GetMin()) + "  GetMax() = " + str (anObj.GetMax())
631     print "\tGetOrientation() = " + str(anObj.GetOrientation())
632     print "\tGetPosX() = ", str(anObj.GetPosX()) + "  GetPosY() = ", str(anObj.GetPosY())
633     print "\tGetWidth() = ", str ( anObj.GetWidth()) + "  GetHeight() = " + str(anObj.GetHeight())
634
635 # ----------------------
636 # DEFORMED SHAPE
637 # ----------------------
638 def try_deformedshape_parameters(thePattern) :
639
640     if thePattern  is None : return None 
641     import copy
642     import random
643
644     anObj = try_scalarmap_parameters(thePattern)
645
646     # --- SCALING ---
647     if ind%2:
648         anObj.SetScale( random.random()*random.randint(-100000, 100000))
649     else :
650         anObj.SetScale( anObj.GetScale()*random.random())
651
652     return anObj
653
654
655 def dump_deformedshape_parameters(theObject):
656     dump_scalarmap_parameters(theObject)
657     print "GetScale() = ", theObject.GetScale()
658     
659 # ----------------------
660 # CUT PLANES
661 # ----------------------
662 def try_cutplanes_parameters(thePattern) :
663
664     if thePattern  is None : return aList 
665     import copy
666     import random
667
668     ORIENT = [VISU.CutPlanes.XY, VISU.CutPlanes.YZ, VISU.CutPlanes.ZX]
669
670     ind = random.randint(1,2)
671     anObj = try_scalarmap_parameters(thePattern)
672         
673     if ind%2 :   anObj.SetNbPlanes(random.randint(-40,40))
674     else :       anObj.SetNbPlanes(random.randint(0,10)) #try behaivor if NbPlanes=0
675
676     # --- DISPLACEMENT ---
677     anObj.SetDisplacement(random.randint(-100000,100000))
678
679     # --- PLANE POSITION ---
680     if ind%2:
681         PlaneNb = random.randint(-100000,100000) #incorrect value is possible
682     else    : PlaneNb = random.randint(0, anObj.GetNbPlanes())
683         
684     anObj.SetPlanePosition(PlaneNb, random.random()*random.randint(-100000,100000))
685
686     # --- SET DEFAULT ---
687     anObj.SetDefault(PlaneNb)
688
689     # --- SET X,Y,Z ROTATION ---
690     if ind%2 :
691             angle1 = random.random()*random.randint(-100000,100000)
692             angle2 = random.random()*random.randint(-100000,100000)
693     else :
694             angle1 = random.random()*3.14
695             angle2 = random.random()*3.14
696         
697     # --- ORIENTATION ---
698     anObj.SetOrientation(ORIENT[random.randint(0,2)],angle1,angle2)
699
700     return anObj
701         
702 def dump_cutplanes_parameters(theObject):
703         dump_saclarmap_parameters(theObject)
704
705         print "GetOrientationType = " + str(theObject.GetOrientationType())
706         PlanesNb = theObject.GetNbPlanes()
707         print "GetNbPlanes() = ", str(PlanesNb)
708         for i in range(0,PlanesNb+1):
709             if theObject.IsDefault(i) :
710                 print "Default plane : "+str(i); break
711         print "GetPlanePosition(" + str(i) + ") = ", theObject.GetPlanePosition(i)
712         print "GetDisplacement() = ", str(theObject.GetDisplacement())
713         print "GetRotateX() = ", str(theObject.GetRotateX())
714         print "GetRotateY() = ", str(theObject.GetRotateY())
715         print "GetRotateZ() = ", str(theObject.GetRotateZ())
716
717 # ----------------------
718 # CUT LINES
719 # ----------------------
720 def try_cutlines_parameters(thePattern):
721
722     if thePattern  is None : return None 
723     import copy
724     import random
725
726     ORIENT = [VISU.CutPlanes.XY, VISU.CutPlanes.YZ, VISU.CutPlanes.ZX]
727     ind = random.randint(1,2)
728     anObj = try_scalarmap_parameters(thePattern)
729
730     # --- ORIENTATION ---
731     anObj.SetOrientation(ORIENT[random.randint(0,2)],
732                          random.randint(-100,100)*random.random(),
733                          random.randint(-100,100)*random.random())
734     anObj.SetOrientation2(ORIENT[random.randint(0,2)],
735                           random.randint(-100,100)*random.random(),
736                           random.randint(-100,100)*random.random())
737
738     # --- Base Plane Position ---
739     anObj.SetBasePlanePosition( random.random()*random.randint(-100000,100000))
740
741     # --- NUMBER OF LINES ---
742     if ind%2:
743             anObj.SetNbLines(random.randint(-5, 50))
744
745     return anObj
746
747 def dump_cutlines_parameters(theObject):
748     dump_scalarmap_parameters(theObject)
749
750     print "GetOrientationType() = " + str(theObject.GetOrientationType())
751     print "GetOrientationType2() = " + str(theObject.GetOrientationType2())
752     print "GetBasePlanePosition() = "+ str(theObject.GetBasePlanePosition())
753     print "GetNbLines() = " + str(theObject.GetNbLines())
754     print "GetRotateX() = ", str(theObject.GetRotateX())
755     print "GetRotateX2() = ", str(theObject.GetRotateX2())
756     print "GetRotateY() = ", str(theObject.GetRotateY())
757     print "GetRotateY2() = ", str(theObject.GetRotateY2())
758
759 # ----------------------
760 # STREAM LINES
761 # ----------------------
762 def try_streamlines_parameters(thePattern):
763
764     if thePattern  is None : return None 
765     import copy
766     import random
767
768     DIRECTION = [VISU.StreamLines.FORWARD, VISU.StreamLines.BACKWARD, VISU.StreamLines.BOTH]
769
770     ind = random.randint(1,2)
771     anObj = (try_deformedshape_parameters(thePattern))[0]
772
773     # --- DIREACTION ---
774     anObj.SetDirection(DIRECTION[random.randint(0,2)])
775
776     # --- STEP LENGTH ---
777     if ind%2 : anObj.SetStepLength(random.random()*random.randint(-1000,1000))
778     else :
779             aLen = anObj.GetMax() - anObj.GetMin()
780             anObj.SetStepLength(aLen/random.randint(1,100))
781             
782     # --- PROPAGATION TIME ---
783     anObj.SetPropagationTime(random.random()*random.randint(1,100))
784
785     # --- INTEGRATION STEP ---
786     if ind%2 :
787             anObj.SetIntegrationStep(random.random()*random.randint(-1000,1000))
788     else:
789             anObj.SetIntegrationStep(random.random())
790
791     # --- USED POINT ---
792     anObj.SetUsedPoints(random.random()*random.randint(-10000,10000))
793
794     return anObj
795         
796 def dump_streamlines_parameters(theObject):
797     
798     dump_deformedshape_parameters(theObject)
799     
800     print "GetDirection() = "      + str(theObject.GetDirection())
801     print "GetStepLength() = "     + str(theObject.GetStepLength())
802     print "GetPropagationTime() =" + str(theObject.GetPropagationTime())
803     print "GetIntegrationStep() =" + str(theObject.GetIntegrationStep())
804     print "GetUsedPoints()      =" + str(theObject.GetUsedPoints())
805     
806 # ----------------------
807 # VECTORS     
808 # ----------------------
809 def try_vectors_parameters(thePattern, theNum):
810
811     if thePattern  is None : return None 
812     import copy
813     import random
814     GLIPH_TYPE = [VISU.Vectors.ARROW, VISU.Vectors.CONE2, VISU.Vectors.CONE6, VISU.Vectors.NONE]
815     GLIPH_POS = [VISU.Vectors.CENTER, VISU.Vectors.TAIL, VISU.Vectors.HEAD]
816     ind = random.randint(1,2)
817     anObj = (try_deformedshape_parameters(thePattern))[0]
818
819     # --- LINE WIDTH ---
820     if ind%2 :
821             anObj.SetLineWidth(random.random()*random.randint(-10000,10000))
822     else :
823             anObj.SetLineWidth(random.randint(1, 10))
824
825     # --- GLIPH TYPE ---
826     anObj.SetGlyphType(GLIPH_TYPE[random.randint(0, len(GLIPH_TYPE)-1)])
827         
828     # --- GLIPH POS ---
829     anObj.SetGlyphPos(GLIPH_POS[random.randint(0, len(GLIPH_POS)-1)])
830     
831     return anObj
832
833 def dump_vetctors_parameters(theObject):
834     
835     dump_deformedshape_parameters(theObject)
836     
837     print "GetLineWidth() = " +str(theObject.GetLineWidth())
838     print "GetGlyphType() = " +str(theObject.GetGlyphType())
839     print "GetGlyphPos()  = " +str(theObject.GetGlyphPos())
840
841
842 # ----------------------
843 # ISO SURFACES     
844 # ----------------------
845
846 def try_isosurfaces_parameters(thePattern) :
847     if thePattern  is None : return None 
848     import copy
849     import random
850     
851     anObj = try_scalarmap_parameters(thePattern)
852     ind = random.randint(1,2)   
853     # --- SURFACES NUMBER ---
854     if ind%2 :
855             anObj.SetNbSurfaces(random.randint(-100000,100000))
856     else:
857             anObj.SetNbSurfaces(random.randint(1, 50))
858             
859     return anObj
860
861 def dump_isosurfaces_parameters(theObject):
862     
863     dump_scalarmap_parameters(theObject)
864     print "GetNbSurfaces() = "+ str(theObject.GetNbSurfaces())
865
866
867 # ----------------------
868 # TABLES AND CURVES
869 # ----------------------
870
871 def FillTable( theTable, theValues, theRows, theColumns, theRowTitles, theRowUnits, theColumnTitles ):
872     if theTable is None: return
873     if len(theRows) != len(theColumns): return
874     if len(theRows) != len(theValues): return
875     i = 0
876     for value in theValues:
877         theTable.PutValue( value, theRows[ i ], theColumns[ i ])
878         i = i + 1
879         pass
880     i = 1
881     for title in theRowTitles:
882         theTable.SetRowTitle( i, title )
883         theTable.SetRowUnit( i, theRowUnits[ i - 1 ])
884         i = i + 1
885         pass
886     i = 1
887     for title in theColumnTitles:
888         theTable.SetColumnTitle( i, title )
889         i = i + 1
890         pass
891     pass
892
893 def CreateCurve( theTable, theHRow, theVRow, theTitle, theColor, theMarker, theLineType, theLineWidth ):
894     if theTitle is None: return
895     curve = myLocalVisu.CreateCurve( theTable, theHRow, theVRow );
896     if curve:
897         curve.SetTitle( theTitle )
898         curve.SetColor( theColor )
899         curve.SetMarker( theMarker )
900         curve.SetLine( theLineType, theLineWidth )
901         pass
902     return curve